Merge branch 'dev_robotaxi-d_231201_6.2.4_dev' into dev_robotaxi-d_231206_6.2.4
This commit is contained in:
@@ -1,164 +0,0 @@
|
||||
package com.mogo.eagle.core.function.msgbox
|
||||
|
||||
import com.zhjt.mogo.adas.data.bean.MogoReport
|
||||
|
||||
/**
|
||||
* FM信息对照表
|
||||
*/
|
||||
class MsgFmData{
|
||||
/**
|
||||
* 当出现多个建议操作时,按照整车下电重启、请求人工驾驶接管、请求平行驾驶接管、系统重启、联系硬件工程师、联系运维工程师、联系软件工程师优先级递减的顺序,只展示最高优先级的内容
|
||||
*/
|
||||
enum class FaultAction(
|
||||
val faultType: String,//故障处理类别
|
||||
val faultAction: String,//故障处理行为定义
|
||||
val faultActionCode: String,//故障处理行为标识
|
||||
val faultActionDesc: String,//故障处理行为描述
|
||||
val faultLevel: Int//故障处理级别
|
||||
){
|
||||
//请求平行驾驶接管
|
||||
FM_ACT_NEED_PARALLEL_DERVING_TAKEOVER("恢复策略","请求平行驾驶接管","FM_ACT_NEED_PARALLEL_DERVING_TAKEOVER","如planing出站时,规划失败",5),
|
||||
//请求人工驾驶接管
|
||||
FM_ACT_NEED_MANNUAL_DERVING("恢复策略","请求人工驾驶接管","FM_ACT_NEED_MANNUAL_DERVING","如planing规划失败,且存在弱网判断",6),
|
||||
//系统重启
|
||||
FM_ACT_NEED_RESTART_SYSTEM("恢复策略","系统重启","FM_ACT_NEED_RESTART_SYSTEM","如检测到出现多个节点奔溃",4),
|
||||
//整车下电重启
|
||||
FM_ACT_MUST_VEHICLE_POWER_RESET("恢复策略","整车下电重启","FM_ACT_MUST_VEHICLE_POWER_RESET","如底盘无数据,需要下电重启",7),
|
||||
//请联系硬件工程师
|
||||
FM_ACT_CONTACT_HARDWARE_ENGINEER("人工处理","请联系硬件工程师","FM_ACT_CONTACT_HARDWARE_ENGINEER","硬件接线,域控启动等故障",3),
|
||||
//请联系运维工程师
|
||||
FM_ACT_CONTACT_OPERATIONS_ENGINEER("人工处理","请联系运维工程师","FM_ACT_CONTACT_OPERATIONS_ENGINEER","系统配置不对,网络等故障",2),
|
||||
//请联系软件工程师
|
||||
FM_ACT_CONTACT_SOFTWARE_ENGINEER("人工处理","请联系软件工程师","FM_ACT_CONTACT_SOFTWARE_ENGINEER","节点挂掉,无法启动等故障",1);
|
||||
|
||||
companion object{
|
||||
|
||||
//获取故障建议操作级别
|
||||
fun getFaultLevel(faultActionCode: String): Int{
|
||||
return when(faultActionCode){
|
||||
//请求平行驾驶接管
|
||||
FM_ACT_NEED_PARALLEL_DERVING_TAKEOVER.faultActionCode -> FM_ACT_NEED_PARALLEL_DERVING_TAKEOVER.faultLevel
|
||||
//请求人工驾驶接管
|
||||
FM_ACT_NEED_MANNUAL_DERVING.faultActionCode -> FM_ACT_NEED_MANNUAL_DERVING.faultLevel
|
||||
//系统重启
|
||||
FM_ACT_NEED_RESTART_SYSTEM.faultActionCode -> FM_ACT_NEED_RESTART_SYSTEM.faultLevel
|
||||
//整车下电重启
|
||||
FM_ACT_MUST_VEHICLE_POWER_RESET.faultActionCode -> FM_ACT_MUST_VEHICLE_POWER_RESET.faultLevel
|
||||
//请联系硬件工程师
|
||||
FM_ACT_CONTACT_HARDWARE_ENGINEER.faultActionCode -> FM_ACT_CONTACT_HARDWARE_ENGINEER.faultLevel
|
||||
//请联系运维工程师
|
||||
FM_ACT_CONTACT_OPERATIONS_ENGINEER.faultActionCode ->FM_ACT_CONTACT_OPERATIONS_ENGINEER.faultLevel
|
||||
//请联系软件工程师
|
||||
FM_ACT_CONTACT_SOFTWARE_ENGINEER.faultActionCode -> FM_ACT_CONTACT_SOFTWARE_ENGINEER.faultLevel
|
||||
else -> 0
|
||||
}
|
||||
}
|
||||
|
||||
//获取故障建议操作
|
||||
fun getFaultAction(faultActionLevel: Int): String{
|
||||
return when(faultActionLevel){
|
||||
//请求平行驾驶接管
|
||||
FM_ACT_NEED_PARALLEL_DERVING_TAKEOVER.faultLevel -> FM_ACT_NEED_PARALLEL_DERVING_TAKEOVER.faultAction
|
||||
//请求人工驾驶接管
|
||||
FM_ACT_NEED_MANNUAL_DERVING.faultLevel -> FM_ACT_NEED_MANNUAL_DERVING.faultAction
|
||||
//系统重启
|
||||
FM_ACT_NEED_RESTART_SYSTEM.faultLevel -> FM_ACT_NEED_RESTART_SYSTEM.faultAction
|
||||
//整车下电重启
|
||||
FM_ACT_MUST_VEHICLE_POWER_RESET.faultLevel -> FM_ACT_MUST_VEHICLE_POWER_RESET.faultAction
|
||||
//请联系硬件工程师
|
||||
FM_ACT_CONTACT_HARDWARE_ENGINEER.faultLevel -> FM_ACT_CONTACT_HARDWARE_ENGINEER.faultAction
|
||||
//请联系运维工程师
|
||||
FM_ACT_CONTACT_OPERATIONS_ENGINEER.faultLevel ->FM_ACT_CONTACT_OPERATIONS_ENGINEER.faultAction
|
||||
//请联系软件工程师
|
||||
FM_ACT_CONTACT_SOFTWARE_ENGINEER.faultLevel -> FM_ACT_CONTACT_SOFTWARE_ENGINEER.faultAction
|
||||
else -> ""
|
||||
}
|
||||
}
|
||||
|
||||
//获取故障建议操作Code值
|
||||
fun getFaultActionCode(faultActionLevel: Int): String{
|
||||
return when(faultActionLevel){
|
||||
//请求平行驾驶接管
|
||||
FM_ACT_NEED_PARALLEL_DERVING_TAKEOVER.faultLevel -> FM_ACT_NEED_PARALLEL_DERVING_TAKEOVER.faultActionCode
|
||||
//请求人工驾驶接管
|
||||
FM_ACT_NEED_MANNUAL_DERVING.faultLevel -> FM_ACT_NEED_MANNUAL_DERVING.faultActionCode
|
||||
//系统重启
|
||||
FM_ACT_NEED_RESTART_SYSTEM.faultLevel -> FM_ACT_NEED_RESTART_SYSTEM.faultActionCode
|
||||
//整车下电重启
|
||||
FM_ACT_MUST_VEHICLE_POWER_RESET.faultLevel -> FM_ACT_MUST_VEHICLE_POWER_RESET.faultActionCode
|
||||
//请联系硬件工程师
|
||||
FM_ACT_CONTACT_HARDWARE_ENGINEER.faultLevel -> FM_ACT_CONTACT_HARDWARE_ENGINEER.faultActionCode
|
||||
//请联系运维工程师
|
||||
FM_ACT_CONTACT_OPERATIONS_ENGINEER.faultLevel ->FM_ACT_CONTACT_OPERATIONS_ENGINEER.faultActionCode
|
||||
//请联系软件工程师
|
||||
FM_ACT_CONTACT_SOFTWARE_ENGINEER.faultLevel -> FM_ACT_CONTACT_SOFTWARE_ENGINEER.faultActionCode
|
||||
else -> ""
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
enum class FaultResult(
|
||||
val resultType: String,//影响类别
|
||||
val resultDefine: String,//故障影响定义
|
||||
val resultCode: String,//故障影响的标识
|
||||
val resultDesc: String//后果对应的处理描述
|
||||
){
|
||||
//无法作业
|
||||
FM_RST_FUNCTION_LOST("功能影响","无法作业","FM_RST_FUNCTION_LOST","需要禁止作业,如扫盘故障,清扫车无法清扫作业"),
|
||||
//无法开放运营
|
||||
FM_RST_FORBID_OPEN_WORK("功能影响","无法开放运营","FM_RST_FORBID_OPEN_WORK","需要禁止运营,如安全带故障,可以自驾,不能载人"),
|
||||
//无法平行驾驶
|
||||
FM_RST_FORBID_PARALLEL_DERVING("驾驶影响","无法平行驾驶","FM_RST_FORBID_PARALLEL_DERVING","需要禁止平行驾驶"),
|
||||
//无法自动驾驶
|
||||
FM_RST_FORBID_AUTOPILOT_DERVING("驾驶影响","无法自动驾驶","FM_RST_FORBID_AUTOPILOT_DERVING","需要禁止自驾"),
|
||||
//无法手动驾驶
|
||||
FM_RST_FORBID_MANNUAL_DERVING("驾驶影响","无法手动驾驶","FM_RST_FORBID_MANNUAL_DERVING","需要禁止行车,如底盘存在故障,需要通知出来"),
|
||||
//失控,无法策略停车
|
||||
FM_RST_OUT_OF_CONTROL("安全影响","失控,无法策略停车","FM_RST_OUT_OF_CONTROL","需要立即紧急通知到人,车辆失控,如驾驶中controller挂掉,发送102重启");
|
||||
|
||||
companion object{
|
||||
//获取结果原因描述
|
||||
fun getResultDefine(resultCode: String): String{
|
||||
return when(resultCode){
|
||||
//无法作业
|
||||
FM_RST_FUNCTION_LOST.resultCode -> FM_RST_FUNCTION_LOST.resultDefine
|
||||
//无法开放运营
|
||||
FM_RST_FORBID_OPEN_WORK.resultCode -> FM_RST_FORBID_OPEN_WORK.resultDefine
|
||||
//无法平行驾驶
|
||||
FM_RST_FORBID_PARALLEL_DERVING.resultCode -> FM_RST_FORBID_PARALLEL_DERVING.resultDefine
|
||||
//无法自动驾驶
|
||||
FM_RST_FORBID_AUTOPILOT_DERVING.resultCode -> FM_RST_FORBID_AUTOPILOT_DERVING.resultDefine
|
||||
//无法手动驾驶
|
||||
FM_RST_FORBID_MANNUAL_DERVING.resultCode -> FM_RST_FORBID_MANNUAL_DERVING.resultDefine
|
||||
//失控,无法策略停车
|
||||
FM_RST_OUT_OF_CONTROL.resultCode -> FM_RST_OUT_OF_CONTROL.resultDefine
|
||||
else -> ""
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
companion object{
|
||||
|
||||
@JvmStatic
|
||||
fun getFmPolicyName(policyCode: String?): String{
|
||||
return when(policyCode){
|
||||
"FM_DP_NO_ACTION" -> "报告"
|
||||
"FM_DP_ONLY_WARNING" -> "警示"
|
||||
"FM_DP_SPEED_LIMIT1" -> "一级降速"
|
||||
"FM_DP_SPEED_LIMIT2" -> "二级降速"
|
||||
"FM_DP_SPEED_LIMIT3" -> "三级降速"
|
||||
"FM_DP_PNC_CHOOSE_STOP" -> "择机靠边停车"
|
||||
"FM_DP_COMFORTABLE_STOP" -> "立刻舒适停车"
|
||||
"FM_DP_EMERGENCY_STOP" -> "就地紧急停车"
|
||||
else -> "暂无"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -80,6 +80,7 @@ dependencies {
|
||||
implementation rootProject.ext.dependencies.androidxroomruntime
|
||||
kapt rootProject.ext.dependencies.androidxroomcompiler
|
||||
implementation rootProject.ext.dependencies.rxandroid
|
||||
implementation rootProject.ext.dependencies.androidxcardview
|
||||
implementation rootProject.ext.dependencies.androidxroomktx
|
||||
implementation rootProject.ext.dependencies.protobuf_java
|
||||
implementation rootProject.ext.dependencies.androidxappcompat
|
||||
|
||||
@@ -288,6 +288,13 @@ class DevaToolsProvider : IDevaToolsProvider {
|
||||
BadCaseManager.onReceiveBadCaseRecord(msgBoxBean, activity, countdown)
|
||||
}
|
||||
|
||||
/**
|
||||
* 魔方开启主动录包
|
||||
*/
|
||||
override fun startRecordByMoFang() {
|
||||
BadCaseManager.startRecordByMoFang()
|
||||
}
|
||||
|
||||
override fun showFeedbackWindow(ctx: Context) {
|
||||
BadCaseManager.showBadCaseConfigWindow(ctx)
|
||||
}
|
||||
|
||||
@@ -69,8 +69,10 @@ class ApmEnvProviderImpl: IApmEnvProvider, CoroutineScope {
|
||||
var dockerVersionChanged = false
|
||||
val version = ApmEnvConfig.getDockerVersion()
|
||||
if (!TextUtils.isEmpty(version) && !TextUtils.isEmpty(dockerVersion) && version != dockerVersion) {
|
||||
dockerVersionChanged = true
|
||||
ApmEnvConfig.setDockerVersion(dockerVersion)
|
||||
dockerVersionChanged = version?.endsWith("release", true) == true || dockerVersion.endsWith("release", true)
|
||||
if (dockerVersionChanged) {
|
||||
ApmEnvConfig.setDockerVersion(dockerVersion)
|
||||
}
|
||||
}
|
||||
var isFirstDockerVersionSet = false
|
||||
if (TextUtils.isEmpty(version) && !TextUtils.isEmpty(dockerVersion)) {
|
||||
|
||||
@@ -5,19 +5,33 @@ import android.app.Activity
|
||||
import android.content.Context
|
||||
import android.view.View
|
||||
import android.view.WindowManager
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.fragment.app.FragmentActivity
|
||||
import androidx.lifecycle.Lifecycle.Event
|
||||
import androidx.lifecycle.LifecycleEventObserver
|
||||
import androidx.lifecycle.LifecycleOwner
|
||||
import com.mogo.cloud.passport.MoGoAiCloudClientConfig
|
||||
import com.mogo.commons.module.status.IMogoStatusChangedListener
|
||||
import com.mogo.commons.module.status.MogoStatusManager
|
||||
import com.mogo.commons.module.status.StatusDescriptor
|
||||
import com.mogo.eagle.core.data.app.AppConfigInfo
|
||||
import com.mogo.eagle.core.data.config.FunctionBuildConfig
|
||||
import com.mogo.eagle.core.data.deva.report.ReportEntity
|
||||
import com.mogo.eagle.core.data.map.MogoLocation
|
||||
import com.mogo.eagle.core.data.msgbox.FMInfoMsg
|
||||
import com.mogo.eagle.core.data.msgbox.MsgBoxBean
|
||||
import com.mogo.eagle.core.data.msgbox.MsgBoxType
|
||||
import com.mogo.eagle.core.data.msgbox.MsgCategory
|
||||
import com.mogo.eagle.core.data.msgbox.RecordBagMsg
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotRecordListener
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationGCJ02Listener
|
||||
import com.mogo.eagle.core.function.api.datacenter.msgbox.IMsgBoxListener
|
||||
import com.mogo.eagle.core.function.api.devatools.IMoGoDevaToolsListener
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotRecordListenerManager
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager
|
||||
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsListenerManager
|
||||
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxListenerManager
|
||||
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager
|
||||
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
@@ -31,8 +45,11 @@ import com.zhjt.mogo_core_function_devatools.badcase.repository.db.entity.AutoPi
|
||||
import com.zhjt.mogo_core_function_devatools.ext.enqueuePop
|
||||
import me.jessyan.autosize.utils.AutoSizeUtils
|
||||
import record_cache.RecordPanelOuterClass
|
||||
import kotlin.math.abs
|
||||
|
||||
internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordListener {
|
||||
internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordListener,
|
||||
IMoGoChassisLocationGCJ02Listener, IMsgBoxListener, IMoGoDevaToolsListener,
|
||||
IMogoStatusChangedListener {
|
||||
|
||||
const val TAG = "BadCase"
|
||||
|
||||
@@ -44,6 +61,44 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis
|
||||
fun init(context: Context) {
|
||||
CallerAutopilotRecordListenerManager.addListener(TAG, this)
|
||||
SpeechUtils.init(context)
|
||||
//定位监听, 传false是高德坐标系
|
||||
CallerChassisLocationGCJ02ListenerManager.addListener(TAG, 1, this)
|
||||
//消息盒子监听,获取FM和Report信息
|
||||
CallerMsgBoxListenerManager.addListener(TAG,this)
|
||||
CallerDevaToolsListenerManager.addListener(TAG, this)
|
||||
// 云socket连接状态
|
||||
MogoStatusManager.getInstance()
|
||||
.registerStatusChangedListener(TAG, StatusDescriptor.CLOUD_SOCKET, this)
|
||||
}
|
||||
|
||||
/**
|
||||
* 魔方开启主动录包
|
||||
*/
|
||||
fun startRecordByMoFang(){
|
||||
if (NetworkUtils.isConnected()){
|
||||
if (BadCaseConfig.dockerVersion != null){
|
||||
val activity = AppStateManager.currentActivity()
|
||||
if (activity !is AppCompatActivity) {
|
||||
return
|
||||
}
|
||||
ThreadUtils.runOnUiThread {
|
||||
val initiativeBadCaseWindow = InitiativeBadCaseWindow(activity)
|
||||
initiativeBadCaseWindow.setClickListener(object :
|
||||
InitiativeBadCaseWindow.ClickListener {
|
||||
override fun closeWindow() {
|
||||
initiativeBadCaseWindow.hideFloatWindow()
|
||||
}
|
||||
|
||||
})
|
||||
initiativeBadCaseWindow.showFloatWindow(null)
|
||||
|
||||
}
|
||||
}else {
|
||||
ToastUtils.showShort("工控机连接状态异常")
|
||||
}
|
||||
}else {
|
||||
ToastUtils.showShort("网络异常,请检查网络")
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -217,6 +272,8 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis
|
||||
)
|
||||
} bag录制失败"
|
||||
)
|
||||
//录包失败时,保存录包失败状态
|
||||
BadCaseConfig.bagRecordFailList.add(recordPanel.key)
|
||||
}
|
||||
return
|
||||
}
|
||||
@@ -269,4 +326,36 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis
|
||||
|
||||
}
|
||||
|
||||
override fun onChassisLocationGCJ02(mogoLocation: MogoLocation?) {
|
||||
mogoLocation?.let {
|
||||
BadCaseConfig.currentSpeed = (abs(it.gnssSpeed) * 3.6f).toInt()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDataChanged(category: MsgCategory, msgBoxList: MsgBoxBean) {
|
||||
if(category == MsgCategory.SYS_INFO){
|
||||
//上报
|
||||
BadCaseConfig.newReportEntity = msgBoxList.bean as ReportEntity
|
||||
}else if(category == MsgCategory.FM_INFO){
|
||||
//FM
|
||||
BadCaseConfig.newFMInfoMsg = msgBoxList.bean as FMInfoMsg
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
override fun gpsStatus(status: Boolean) {
|
||||
super.gpsStatus(status)
|
||||
BadCaseConfig.gpsStatus = "GPS${if (status) "正常" else "异常"}"
|
||||
}
|
||||
|
||||
override fun tracingStatus(status: Boolean) {
|
||||
super.tracingStatus(status)
|
||||
BadCaseConfig.tracingStatus = "寻迹算路${if (status) "正常" else "异常"}"
|
||||
}
|
||||
|
||||
override fun onStatusChanged(descriptor: StatusDescriptor?, isTrue: Boolean) {
|
||||
BadCaseConfig.socketStatus = "云Socket连接${if (isTrue) "正常" else "异常"}"
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -8,6 +8,8 @@ import android.os.Handler
|
||||
import android.util.AttributeSet
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.inputmethod.InputMethodManager
|
||||
import android.widget.EditText
|
||||
import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import bag_manager.BagManagerOuterClass
|
||||
@@ -50,6 +52,7 @@ class BadCaseManagerView @JvmOverloads constructor(
|
||||
private var bagManagerEntity: BagManagerEntity = BagManagerEntity()
|
||||
private var clickListener: ClickListener? = null
|
||||
private var bagUploadDialog: BagUploadDialog ?= null
|
||||
private var recordScreenDialog: RecordScreenDialog ?= null
|
||||
|
||||
private var spaceTotal: Long = 0 //总空间
|
||||
private var spaceUsed: Long = 0 //已用空间
|
||||
@@ -212,6 +215,20 @@ class BadCaseManagerView @JvmOverloads constructor(
|
||||
}, 1500)
|
||||
}
|
||||
|
||||
override fun lookMapScreen(key: Long) {
|
||||
//打开高精地图截图对话框
|
||||
if(recordScreenDialog == null){
|
||||
recordScreenDialog = RecordScreenDialog(context)
|
||||
}
|
||||
recordScreenDialog?.show()
|
||||
recordScreenDialog?.showScreenImage(key)
|
||||
}
|
||||
|
||||
override fun startEdit(editText: EditText) {
|
||||
val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager?
|
||||
imm?.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT)
|
||||
}
|
||||
|
||||
})
|
||||
val linearLayoutManager = LinearLayoutManager(context)
|
||||
rvBagList.layoutManager = linearLayoutManager
|
||||
|
||||
@@ -9,6 +9,7 @@ import androidx.annotation.NonNull;
|
||||
import androidx.recyclerview.widget.GridLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.google.protobuf.ProtocolStringList;
|
||||
import com.mogo.eagle.core.data.deva.badcase.RecordCaseEntity;
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotRecordListener;
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager;
|
||||
@@ -99,19 +100,14 @@ public class CaseListDialog extends Dialog implements IMoGoAutopilotRecordListen
|
||||
if(config.getRecordTypesCount()>0){
|
||||
for(int index=0;index<config.getRecordTypesCount();index++){
|
||||
if(config.getRecordTypes(index).getId() != 99){
|
||||
ArrayList<String> topicList = new ArrayList<>();
|
||||
// TODO java.lang.IndexOutOfBoundsException: Index: 38, Size: 38
|
||||
// for(int position=0;index<config.getRecordTypes(index).getTopicsCount();position++){
|
||||
// topicList.add(config.getRecordTypes(index).getTopicsList().get(position));
|
||||
// }
|
||||
recordTypeEntityArrayList.add(new RecordCaseEntity(
|
||||
config.getRecordTypes(index).getId(),config.getRecordTypes(index).getDesc(),
|
||||
topicList));
|
||||
config.getAllTopicsList()));
|
||||
}
|
||||
}
|
||||
}
|
||||
if(BadCaseConfig.customTopicList.size()>0){
|
||||
recordTypeEntityArrayList.add(new RecordCaseEntity(0,"自定义A",BadCaseConfig.customTopicList));
|
||||
recordTypeEntityArrayList.add(new RecordCaseEntity(0,"自定义A", (ProtocolStringList) BadCaseConfig.customTopicList));
|
||||
}
|
||||
caseListAdapter.setData(recordTypeEntityArrayList);
|
||||
caseListAdapter.notifyDataSetChanged();
|
||||
|
||||
@@ -2,9 +2,10 @@ package com.zhjt.mogo_core_function_devatools.badcase.biz
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.Activity
|
||||
import android.graphics.Bitmap
|
||||
import android.graphics.PixelFormat
|
||||
import android.os.Bundle
|
||||
import android.os.CountDownTimer
|
||||
import android.os.Environment
|
||||
import android.os.Handler
|
||||
import android.os.SystemClock
|
||||
import android.util.DisplayMetrics
|
||||
@@ -32,10 +33,14 @@ import com.mogo.eagle.core.data.deva.badcase.RecordCaseEntity
|
||||
import com.mogo.eagle.core.data.deva.badcase.RecordOptionEntity
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotRecordListener
|
||||
import com.mogo.eagle.core.function.api.devatools.badcase.BadCaseNetListener
|
||||
import com.mogo.eagle.core.function.api.map.deva.IMoGoMapScreenListener
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotRecordListenerManager
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84
|
||||
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsNetManager
|
||||
import com.mogo.eagle.core.function.call.map.CallerMapScreenListenerManager
|
||||
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_DEVA
|
||||
import com.mogo.eagle.core.utilcode.mogo.toast.TipToast
|
||||
@@ -58,6 +63,7 @@ import com.zhjt.mogo_core_function_devatools.badcase.consts.BadCaseConfig
|
||||
import com.zhjt.mogo_core_function_devatools.badcase.record.RecordManager
|
||||
import com.zhjt.mogo_core_function_devatools.badcase.repository.net.api.BadCaseNetManager
|
||||
import com.zhjt.mogo_core_function_devatools.badcase.repository.store.BadCaseReasonStore
|
||||
import com.zhjt.mogo_core_function_devatools.badcase.util.RecordBitmapUtils
|
||||
import kotlinx.coroutines.GlobalScope
|
||||
import kotlinx.coroutines.launch
|
||||
import org.json.JSONArray
|
||||
@@ -74,7 +80,7 @@ import java.util.*
|
||||
* @since: 2022/7/13
|
||||
*/
|
||||
class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchListener,
|
||||
IMoGoAutopilotRecordListener, BadCaseNetListener {
|
||||
IMoGoAutopilotRecordListener, BadCaseNetListener, IMoGoMapScreenListener {
|
||||
|
||||
companion object {
|
||||
const val TAG = "InitiativeBadCaseWindow"
|
||||
@@ -92,7 +98,8 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList
|
||||
|
||||
private lateinit var viewAudioBg: ImageView
|
||||
private lateinit var viewAudioButton: ImageView
|
||||
private lateinit var tvAudioCountDown: TextView
|
||||
private lateinit var viewAudioStart: ImageView
|
||||
private lateinit var tvAudioResult: TextView
|
||||
|
||||
private lateinit var tvInitiativeReport: TextView
|
||||
private lateinit var tvInitiativeCancel: TextView
|
||||
@@ -104,7 +111,7 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList
|
||||
private var audioFileName:String?=null //录音文件名称
|
||||
|
||||
private var uploadReason: StringBuilder = StringBuilder() //上报原因,标签
|
||||
private var reasonDetail: String ?= null //语音转写
|
||||
private var reasonDetail: String = "" //语音转写
|
||||
private var uploadReasonTotal: String = ""
|
||||
@Volatile
|
||||
private var recordKey: Long = 0 //录制bag包key
|
||||
@@ -158,7 +165,8 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList
|
||||
|
||||
viewAudioBg = mFloatLayout.findViewById(R.id.viewAudioBg)
|
||||
viewAudioButton = mFloatLayout.findViewById(R.id.viewAudioButton)
|
||||
tvAudioCountDown = mFloatLayout.findViewById(R.id.tvAudioCountDown)
|
||||
viewAudioStart = mFloatLayout.findViewById(R.id.viewAudioStart)
|
||||
tvAudioResult = mFloatLayout.findViewById(R.id.tvAudioResult)
|
||||
|
||||
tvInitiativeReport = mFloatLayout.findViewById(R.id.tvInitiativeReport)
|
||||
tvInitiativeCancel = mFloatLayout.findViewById(R.id.tvInitiativeCancel)
|
||||
@@ -192,7 +200,8 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList
|
||||
*/
|
||||
BadCaseNetManager.badCaseNetManager.getRecordOption(1,AppConfigInfo.iPCMacAddress)
|
||||
// BadCaseNetManager.badCaseNetManager.getRecordOption(1,"48:b0:2d:3a:9c:8f")
|
||||
|
||||
//高精地图屏幕截图
|
||||
CallerMapScreenListenerManager.addListener(this.hashCode().toString(),this)
|
||||
//采集结果回调监听
|
||||
CallerAutopilotRecordListenerManager.addListener(this.hashCode().toString(),this)
|
||||
//主动录包采集原因回调监听
|
||||
@@ -218,11 +227,10 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList
|
||||
}else{
|
||||
//停止语音听写
|
||||
mIat?.stopListening()
|
||||
//结束倒计时
|
||||
countDownTimer?.cancel()
|
||||
countDownTimer?.onFinish()
|
||||
//将倒计时置空
|
||||
countDownTimer = null
|
||||
//结束录音
|
||||
RecordManager.getInstance().stop()
|
||||
//结束动画
|
||||
viewAudioStart.clearAnimation()
|
||||
uploadAudio()
|
||||
}
|
||||
}
|
||||
@@ -313,10 +321,11 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList
|
||||
}
|
||||
Log.i(TAG, "语音内容=$resultBuffer")
|
||||
reasonDetail = resultBuffer.toString()
|
||||
if(reasonDetail.isNotEmpty()){
|
||||
tvAudioResult.text = reasonDetail
|
||||
}
|
||||
}
|
||||
|
||||
var countDownTimer: CountDownTimer?=null
|
||||
|
||||
private fun setAudio(status: Boolean){
|
||||
if(status){
|
||||
//开始录音
|
||||
@@ -339,35 +348,17 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList
|
||||
)
|
||||
scaleAnimation.duration = 1000
|
||||
scaleAnimation.repeatCount = -1
|
||||
viewAudioButton.startAnimation(scaleAnimation)
|
||||
|
||||
tvAudioCountDown.visibility = View.VISIBLE
|
||||
//开始倒计时
|
||||
if(countDownTimer==null){
|
||||
countDownTimer = object : CountDownTimer(60000, 1000) {
|
||||
|
||||
override fun onTick(millisUntilFinished: Long) {
|
||||
tvAudioCountDown.text = "${millisUntilFinished/1000}S"
|
||||
}
|
||||
|
||||
override fun onFinish() {
|
||||
tvAudioCountDown.visibility = View.GONE
|
||||
//结束录音
|
||||
RecordManager.getInstance().stop()
|
||||
//结束动画
|
||||
viewAudioButton.clearAnimation()
|
||||
}
|
||||
}
|
||||
countDownTimer?.start()
|
||||
}
|
||||
viewAudioButton.visibility = View.GONE
|
||||
viewAudioStart.visibility = View.VISIBLE
|
||||
viewAudioStart.startAnimation(scaleAnimation)
|
||||
tvAudioResult.text = "..."
|
||||
}else{
|
||||
//停止语音听写
|
||||
mIat?.stopListening()
|
||||
//结束倒计时
|
||||
countDownTimer?.cancel()
|
||||
countDownTimer?.onFinish()
|
||||
//将倒计时置空
|
||||
countDownTimer = null
|
||||
//结束录音
|
||||
RecordManager.getInstance().stop()
|
||||
//结束动画
|
||||
viewAudioStart.clearAnimation()
|
||||
}
|
||||
|
||||
}
|
||||
@@ -430,11 +421,13 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList
|
||||
*/
|
||||
private fun upload(downloadUrl: String?){
|
||||
GlobalScope.launch{
|
||||
uploadReasonTotal = if(reasonDetail.isNullOrEmpty()){
|
||||
uploadReasonTotal = if(reasonDetail.isEmpty()){
|
||||
uploadReason.toString()
|
||||
}else{
|
||||
"$uploadReason 语音内容:$reasonDetail"
|
||||
}
|
||||
//上报到工控机
|
||||
CallerAutoPilotControlManager.recordCause(recordKey.toString(),recordFileName,"",uploadReason.toString()+reasonDetail)
|
||||
val uploadResult = presenter.upload(mutableMapOf<String, String>().also { itx ->
|
||||
itx["carLicense"] = AppConfigInfo.plateNumber?:"" //车牌号
|
||||
itx["filename"] = recordFileName?:"" //bag包文件地址
|
||||
@@ -561,6 +554,8 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList
|
||||
CallerAutopilotRecordListenerManager.removeListener(this.hashCode().toString())
|
||||
//注销采集原因回调监听
|
||||
CallerDevaToolsNetManager.removeListener(this.hashCode().toString())
|
||||
//注销高精地图截图监听回调
|
||||
CallerMapScreenListenerManager.removeListener(this.hashCode().toString())
|
||||
if (mFloatLayout.parent != null){
|
||||
mWindowManager!!.removeView(mFloatLayout)
|
||||
|
||||
@@ -570,10 +565,15 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList
|
||||
override fun onAutopilotRecordResult(recordPanel: RecordPanelOuterClass.RecordPanel) {
|
||||
CallerLogger.d("${M_DEVA}${TAG}", "-- 收到工控机录制任务回调 -- $recordPanel")
|
||||
ThreadUtils.runOnUiThread {
|
||||
if(recordKey==null){
|
||||
recordKey = recordPanel.key
|
||||
recordKey = recordPanel.key
|
||||
//开始录制
|
||||
if(recordPanel.stat == 300){
|
||||
BadCaseConfig.recordKeyList.add(recordPanel.key)
|
||||
//保存录包状态
|
||||
BadCaseConfig.bagResourceList.add(recordPanel.key)
|
||||
//开启高精地图截图
|
||||
CallerMapUIServiceManager.getMapUIController()?.getMapScreenShot()
|
||||
}
|
||||
BadCaseConfig.recordKeyList.add(recordPanel.key)
|
||||
if(recordFileName==null){
|
||||
recordFileName = recordPanel.filename
|
||||
}
|
||||
@@ -642,4 +642,44 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 高精地图截图回调
|
||||
*/
|
||||
override fun onMapScreen(bitmap: Bitmap) {
|
||||
//在截图上保存即时信息
|
||||
val time = "时间:${millis2String(System.currentTimeMillis(), TimeUtils.getHourMinSecondFormat())}"
|
||||
val lineId = "路线ID:${CallerAutoPilotStatusListenerManager.getLineId()}"
|
||||
val state = when(CallerAutoPilotStatusListenerManager.getState()){
|
||||
0->"自驾状态:不可自驾"
|
||||
1->"自驾状态:可自驾"
|
||||
2->"自驾状态:自驾中"
|
||||
7->"自驾状态:平行驾驶中"
|
||||
else->"自驾状态:未知"
|
||||
}
|
||||
val speed = "当前车速:${BadCaseConfig.currentSpeed}"
|
||||
|
||||
|
||||
val outBitmap = RecordBitmapUtils.drawTextOnBitmap(bitmap,time,lineId,state,speed,
|
||||
BadCaseConfig.gpsStatus,BadCaseConfig.tracingStatus,BadCaseConfig.socketStatus
|
||||
,BadCaseConfig.newFMInfoMsg,BadCaseConfig.newReportEntity)
|
||||
|
||||
//图片保存本地
|
||||
val currentDay = millis2String(System.currentTimeMillis(), TimeUtils.getMdFormat())
|
||||
val fileDir: String = Environment.getExternalStorageDirectory().absolutePath + File.separator+
|
||||
"MapScreen" + File.separator+ currentDay + File.separator
|
||||
val fileName = "$recordKey.png"
|
||||
val path = fileDir + fileName
|
||||
if (!File(fileDir).exists()) {
|
||||
File(fileDir).mkdirs()
|
||||
}
|
||||
if(outBitmap != null){
|
||||
RecordBitmapUtils.bitmap2Path(outBitmap,path)
|
||||
}else{
|
||||
RecordBitmapUtils.bitmap2Path(bitmap,path)
|
||||
}
|
||||
|
||||
//遍历是否有非当日的文件并删除
|
||||
RecordBitmapUtils.deleteExpiredFile(currentDay)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -2,23 +2,20 @@ package com.zhjt.mogo_core_function_devatools.badcase.biz
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.Activity
|
||||
import android.graphics.Color
|
||||
import android.graphics.Bitmap
|
||||
import android.graphics.PixelFormat
|
||||
import android.os.Bundle
|
||||
import android.os.CountDownTimer
|
||||
import android.os.Environment
|
||||
import android.os.Handler
|
||||
import android.util.DisplayMetrics
|
||||
import android.util.Log
|
||||
import android.view.*
|
||||
import android.view.animation.Animation
|
||||
import android.view.animation.ScaleAnimation
|
||||
import android.widget.CheckBox
|
||||
import android.widget.CompoundButton
|
||||
import android.widget.ImageView
|
||||
import android.widget.TextView
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.google.android.flexbox.FlexboxLayout
|
||||
import com.iflytek.cloud.ErrorCode
|
||||
import com.iflytek.cloud.InitListener
|
||||
import com.iflytek.cloud.RecognizerListener
|
||||
@@ -34,9 +31,12 @@ import com.mogo.eagle.core.data.deva.badcase.RecordOptionEntity
|
||||
import com.mogo.eagle.core.data.msgbox.MsgBoxBean
|
||||
import com.mogo.eagle.core.data.msgbox.RecordBagMsg
|
||||
import com.mogo.eagle.core.function.api.devatools.badcase.BadCaseNetListener
|
||||
import com.mogo.eagle.core.function.api.map.deva.IMoGoMapScreenListener
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager
|
||||
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsNetManager
|
||||
import com.mogo.eagle.core.function.call.map.CallerMapScreenListenerManager
|
||||
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager
|
||||
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_DEVA
|
||||
@@ -57,13 +57,12 @@ import com.zhjt.mogo_core_function_devatools.badcase.BadCaseAnalyticsManager
|
||||
import com.zhjt.mogo_core_function_devatools.badcase.biz.adapter.BadReasonListAdapter
|
||||
import com.zhjt.mogo_core_function_devatools.badcase.repository.net.api.BadCaseNetManager
|
||||
import com.zhjt.mogo_core_function_devatools.badcase.repository.store.BadCaseReasonStore
|
||||
import me.jessyan.autosize.utils.AutoSizeUtils
|
||||
import com.zhjt.mogo_core_function_devatools.badcase.util.RecordBitmapUtils
|
||||
import org.greenrobot.eventbus.EventBus
|
||||
import org.json.JSONArray
|
||||
import org.json.JSONException
|
||||
import org.json.JSONObject
|
||||
import java.io.File
|
||||
import java.lang.Exception
|
||||
import java.lang.StringBuilder
|
||||
|
||||
/**
|
||||
@@ -72,7 +71,7 @@ import java.lang.StringBuilder
|
||||
* @since: 2022/7/17
|
||||
*/
|
||||
class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListener,
|
||||
BadCaseNetListener {
|
||||
BadCaseNetListener , IMoGoMapScreenListener {
|
||||
|
||||
companion object {
|
||||
const val TAG = "PassiveBadCaseWindow"
|
||||
@@ -108,7 +107,6 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene
|
||||
private var mInScreenY = 0f
|
||||
|
||||
private var clickListener: ClickListener? = null
|
||||
var countDownTimer: CountDownTimer?=null
|
||||
|
||||
private lateinit var tvPassiveNum: TextView
|
||||
private lateinit var tvPassiveTime: TextView
|
||||
@@ -116,7 +114,8 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene
|
||||
|
||||
private lateinit var viewAudioBg: ImageView
|
||||
private lateinit var viewAudioButton: ImageView
|
||||
private lateinit var tvAudioCountDown: TextView
|
||||
private lateinit var viewAudioStart: ImageView
|
||||
private lateinit var tvAudioResult: TextView
|
||||
|
||||
private lateinit var tvPassiveReport: TextView
|
||||
private lateinit var tvPassiveCancel: TextView
|
||||
@@ -129,7 +128,7 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene
|
||||
// 用HashMap存储听写结果
|
||||
private val mIatResults: HashMap<String, String> = LinkedHashMap()
|
||||
|
||||
private var reasonDetail: String ?= null //语音转写
|
||||
private var reasonDetail: String = "" //语音转写
|
||||
private var uploadReasonTotal: String = ""
|
||||
|
||||
private var isUploadCos = false //是否在上传Cos操作
|
||||
@@ -156,8 +155,9 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene
|
||||
tvPassiveTime = mFloatLayout.findViewById(R.id.tvPassiveTime)
|
||||
tvPassiveIdentity = mFloatLayout.findViewById(R.id.tvPassiveIdentity)
|
||||
viewAudioBg = mFloatLayout.findViewById(R.id.viewAudioBg)
|
||||
tvAudioResult = mFloatLayout.findViewById(R.id.tvAudioResult)
|
||||
viewAudioButton = mFloatLayout.findViewById(R.id.viewAudioButton)
|
||||
tvAudioCountDown = mFloatLayout.findViewById(R.id.tvAudioCountDown)
|
||||
viewAudioStart = mFloatLayout.findViewById(R.id.viewAudioStart)
|
||||
tvPassiveReport = mFloatLayout.findViewById(R.id.tvPassiveReport)
|
||||
tvPassiveCancel = mFloatLayout.findViewById(R.id.tvPassiveCancel)
|
||||
rvPassiveList = mFloatLayout.findViewById(R.id.rvPassiveList)
|
||||
@@ -183,6 +183,8 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene
|
||||
*/
|
||||
BadCaseNetManager.badCaseNetManager.getRecordOption(2,AppConfigInfo.iPCMacAddress)
|
||||
// BadCaseNetManager.badCaseNetManager.getRecordOption(2,"48:b0:2d:3a:9c:8f")
|
||||
//高精地图屏幕截图
|
||||
CallerMapScreenListenerManager.addListener(this.hashCode().toString(),this)
|
||||
CallerDevaToolsNetManager.addListener(this.hashCode().toString(),this)
|
||||
if(BadCaseConfig.windowNum<1){
|
||||
BadCaseConfig.windowNum = 1
|
||||
@@ -213,11 +215,10 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene
|
||||
}else{
|
||||
//停止语音听写
|
||||
mIat?.stopListening()
|
||||
//结束倒计时
|
||||
countDownTimer?.cancel()
|
||||
countDownTimer?.onFinish()
|
||||
//将倒计时置空
|
||||
countDownTimer = null
|
||||
//结束录音
|
||||
RecordManager.getInstance().stop()
|
||||
//结束动画
|
||||
viewAudioStart.clearAnimation()
|
||||
uploadAudio()
|
||||
}
|
||||
//删除记录
|
||||
@@ -314,6 +315,9 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene
|
||||
}
|
||||
Log.i(TAG, "语音内容=$resultBuffer")
|
||||
reasonDetail = resultBuffer.toString()
|
||||
if(reasonDetail.isNotEmpty()){
|
||||
tvAudioResult.text = reasonDetail
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -339,35 +343,17 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene
|
||||
)
|
||||
scaleAnimation.duration = 1000
|
||||
scaleAnimation.repeatCount = -1
|
||||
viewAudioButton.startAnimation(scaleAnimation)
|
||||
|
||||
tvAudioCountDown.visibility = View.VISIBLE
|
||||
//开始倒计时
|
||||
if(countDownTimer==null){
|
||||
countDownTimer = object : CountDownTimer(60000, 1000) {
|
||||
|
||||
override fun onTick(millisUntilFinished: Long) {
|
||||
tvAudioCountDown.text = "${millisUntilFinished/1000}S"
|
||||
}
|
||||
|
||||
override fun onFinish() {
|
||||
tvAudioCountDown.visibility = View.GONE
|
||||
//结束录音
|
||||
RecordManager.getInstance().stop()
|
||||
//结束动画
|
||||
viewAudioButton.clearAnimation()
|
||||
}
|
||||
}
|
||||
countDownTimer?.start()
|
||||
}
|
||||
viewAudioButton.visibility = View.GONE
|
||||
viewAudioStart.visibility = View.VISIBLE
|
||||
viewAudioStart.startAnimation(scaleAnimation)
|
||||
tvAudioResult.text = "..."
|
||||
}else{
|
||||
//停止语音听写
|
||||
mIat?.stopListening()
|
||||
//结束倒计时
|
||||
countDownTimer?.cancel()
|
||||
countDownTimer?.onFinish()
|
||||
//将倒计时置空
|
||||
countDownTimer = null
|
||||
//结束录音
|
||||
RecordManager.getInstance().stop()
|
||||
//结束动画
|
||||
viewAudioStart.clearAnimation()
|
||||
}
|
||||
|
||||
}
|
||||
@@ -430,11 +416,13 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene
|
||||
*/
|
||||
private fun upload(downloadUrl: String?){
|
||||
GlobalScope.launch{
|
||||
uploadReasonTotal = if(reasonDetail.isNullOrEmpty()){
|
||||
uploadReasonTotal = if(reasonDetail.isEmpty()){
|
||||
uploadReason.toString()
|
||||
}else{
|
||||
"$uploadReason 语音内容:$reasonDetail"
|
||||
}
|
||||
//上报到工控机
|
||||
CallerAutoPilotControlManager.recordCause(recordKey,recordFileName,"",uploadReason.toString()+reasonDetail)
|
||||
val uploadResult = presenter.upload(mutableMapOf<String, String>().also { itx ->
|
||||
itx["carLicense"] = AppConfigInfo.plateNumber //车牌号
|
||||
itx["filename"] = recordFileName?:"" //bag包文件地址
|
||||
@@ -535,6 +523,8 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene
|
||||
|
||||
|
||||
fun hideFloatWindow() {
|
||||
//注销高精地图截图监听回调
|
||||
CallerMapScreenListenerManager.removeListener(this.hashCode().toString())
|
||||
//注销采集原因回调监听
|
||||
CallerDevaToolsNetManager.removeListener(this.hashCode().toString())
|
||||
// 移除 ADAS车辆状态&定位 监听
|
||||
@@ -555,6 +545,8 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene
|
||||
recordFileName = recordBagMsg.fileName
|
||||
receiveTime = msgBoxBean.timestamp.toString()
|
||||
stat = recordBagMsg.stat.toString()
|
||||
//获取高精地图截图
|
||||
CallerMapUIServiceManager.getMapUIController()?.getMapScreenShot()
|
||||
}
|
||||
|
||||
fun setClickListener(clickListener: ClickListener) {
|
||||
@@ -617,4 +609,22 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 高精地图截图回调
|
||||
*/
|
||||
override fun onMapScreen(bitmap: Bitmap) {
|
||||
//图片保存本地
|
||||
val currentDay = millis2String(System.currentTimeMillis(), TimeUtils.getMdFormat())
|
||||
val fileDir: String = Environment.getExternalStorageDirectory().absolutePath + File.separator+
|
||||
"MapScreen" + File.separator+ currentDay + File.separator
|
||||
val fileName = "$recordKey.png"
|
||||
val path = fileDir + fileName
|
||||
if (!File(fileDir).exists()) {
|
||||
File(fileDir).mkdirs()
|
||||
}
|
||||
RecordBitmapUtils.bitmap2Path(bitmap,path)
|
||||
//遍历是否有非当日的文件并删除
|
||||
RecordBitmapUtils.deleteExpiredFile(currentDay)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
package com.zhjt.mogo_core_function_devatools.badcase.biz;
|
||||
|
||||
import static com.mogo.eagle.core.utilcode.util.FileUtils.millis2String;
|
||||
import static com.mogo.eagle.core.utilcode.util.TimeUtils.getMdFormat;
|
||||
|
||||
import android.app.Dialog;
|
||||
import android.content.Context;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.os.Environment;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.zhjt.mogo_core_function_devatools.R;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
/**
|
||||
* 录包时鹰眼截图查看对话框
|
||||
*/
|
||||
public class RecordScreenDialog extends Dialog {
|
||||
|
||||
private ImageView ivScreen; //截图展示
|
||||
private ImageView ivScreenClose; //关闭按钮
|
||||
|
||||
private Context mContext;
|
||||
|
||||
public RecordScreenDialog(@NonNull Context context) {
|
||||
super(context, R.style.bad_case_dialog);
|
||||
mContext = context;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.dialog_record_screen);
|
||||
WindowManager.LayoutParams params = getWindow().getAttributes();
|
||||
params.height = 1013;
|
||||
params.width = 1708;
|
||||
getWindow().setAttributes(params);//向WindowManager设置属性
|
||||
setCanceledOnTouchOutside(false);
|
||||
init();
|
||||
initEvent();
|
||||
}
|
||||
|
||||
private void init(){
|
||||
ivScreen = findViewById(R.id.ivScreen);
|
||||
ivScreenClose = findViewById(R.id.ivScreenClose);
|
||||
}
|
||||
|
||||
private void initEvent(){
|
||||
//关闭当前弹窗
|
||||
ivScreenClose.setOnClickListener(view -> dismiss());
|
||||
}
|
||||
|
||||
public void showScreenImage(Long recordKey){
|
||||
String imagePath = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator+
|
||||
"MapScreen" + File.separator+ millis2String(System.currentTimeMillis(),getMdFormat()) + File.separator+recordKey+".png";
|
||||
Uri imageUri = Uri.parse(imagePath);
|
||||
|
||||
ivScreen.setImageURI(imageUri);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -12,9 +12,13 @@ import android.widget.TextView
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.mogo.eagle.core.data.deva.badcase.BagDescriptionEntity
|
||||
import com.mogo.eagle.core.data.deva.badcase.BagInfoEntity
|
||||
import com.mogo.eagle.core.utilcode.util.FileUtils.millis2String
|
||||
import com.mogo.eagle.core.utilcode.util.TimeUtils
|
||||
import com.zhjt.mogo_core_function_devatools.R
|
||||
import com.zhjt.mogo_core_function_devatools.badcase.consts.BadCaseConfig
|
||||
import java.text.DecimalFormat
|
||||
|
||||
|
||||
/**
|
||||
* @author XuXinChao
|
||||
* @description Bag包管理列表适配器
|
||||
@@ -32,14 +36,14 @@ class BagManagerListAdapter: RecyclerView.Adapter<RecyclerView.ViewHolder>() {
|
||||
}
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
|
||||
if(viewType == 1){
|
||||
return if(viewType == 1){
|
||||
val view = LayoutInflater.from(parent.context)
|
||||
.inflate(R.layout.item_bag_time_title,parent,false)
|
||||
return BagTimeTitleHolder(view)
|
||||
BagTimeTitleHolder(view)
|
||||
}else{
|
||||
val view = LayoutInflater.from(parent.context)
|
||||
.inflate(R.layout.item_bag_manager, parent, false)
|
||||
return BagManagerListHolder(view)
|
||||
BagManagerListHolder(view)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -92,18 +96,25 @@ class BagManagerListAdapter: RecyclerView.Adapter<RecyclerView.ViewHolder>() {
|
||||
|
||||
|
||||
bagInfoEntity.description?.let { des->
|
||||
if(des.reportBI){
|
||||
//已上报
|
||||
holder.tvBagReportStatus.text = "已上报"
|
||||
if(BadCaseConfig.bagRecordFailList.contains(bagInfoEntity.key)){
|
||||
//如果在录包失败列表中找到该Bag包,则该包为录包失败状态
|
||||
holder.tvBagReportStatus.text = "录包失败"
|
||||
holder.tvBagReportStatus.setBackgroundResource(R.drawable.bag_reported_button_bg)
|
||||
holder.tvBagReportStatus.isClickable = false
|
||||
}else{
|
||||
//未上报
|
||||
holder.tvBagReportStatus.text = "上报"
|
||||
holder.tvBagReportStatus.setBackgroundResource(R.drawable.bag_report_button_bg)
|
||||
holder.tvBagReportStatus.isClickable = true
|
||||
holder.tvBagReportStatus.setOnClickListener {
|
||||
bagClickListener?.uploadBI(bagInfoEntity)
|
||||
if(des.reportBI){
|
||||
//已上报
|
||||
holder.tvBagReportStatus.text = "已上报"
|
||||
holder.tvBagReportStatus.setBackgroundResource(R.drawable.bag_reported_button_bg)
|
||||
holder.tvBagReportStatus.isClickable = false
|
||||
}else{
|
||||
//未上报
|
||||
holder.tvBagReportStatus.text = "上报"
|
||||
holder.tvBagReportStatus.setBackgroundResource(R.drawable.bag_report_button_bg)
|
||||
holder.tvBagReportStatus.isClickable = true
|
||||
holder.tvBagReportStatus.setOnClickListener {
|
||||
bagClickListener?.uploadBI(bagInfoEntity)
|
||||
}
|
||||
}
|
||||
}
|
||||
if(des.description.isEmpty()){
|
||||
@@ -113,6 +124,30 @@ class BagManagerListAdapter: RecyclerView.Adapter<RecyclerView.ViewHolder>() {
|
||||
}
|
||||
}
|
||||
|
||||
holder.ivMapScreen.setOnClickListener {
|
||||
bagInfoEntity.description?.let {
|
||||
bagClickListener?.lookMapScreen(bagInfoEntity.key)
|
||||
}
|
||||
}
|
||||
|
||||
//录包来源:自动 or 人工
|
||||
if(BadCaseConfig.bagResourceList.contains(bagInfoEntity.key)){
|
||||
//在该列表中找到Bag包的Key则代表该Bag为人工录包
|
||||
holder.tvBagResource.text = "人工"
|
||||
holder.tvBagResource.setBackgroundResource(R.drawable.bag_artificial_button_bg)
|
||||
}else{
|
||||
//自动录包
|
||||
holder.tvBagResource.text = "自动"
|
||||
holder.tvBagResource.setBackgroundResource(R.drawable.bag_auto_button_bg)
|
||||
}
|
||||
|
||||
//编辑文字按钮
|
||||
holder.ivEditReason.setOnClickListener {
|
||||
holder.etBagNameEdit.requestFocus()
|
||||
holder.etBagNameEdit.performClick()
|
||||
//调起软键盘
|
||||
bagClickListener?.startEdit(holder.etBagNameEdit)
|
||||
}
|
||||
|
||||
if(bagInfoEntity.description?.hasAudio == true){
|
||||
holder.ivBagAudio.visibility = View.VISIBLE
|
||||
@@ -139,6 +174,15 @@ class BagManagerListAdapter: RecyclerView.Adapter<RecyclerView.ViewHolder>() {
|
||||
e.printStackTrace()
|
||||
}
|
||||
}
|
||||
|
||||
//只有当天的Bag才显示查看截图按钮
|
||||
bagInfoEntity.timestamp.let {day ->
|
||||
val currentDay = millis2String(System.currentTimeMillis(), TimeUtils.getMdFormatTwo())
|
||||
if(day.contains(currentDay)){
|
||||
holder.ivMapScreen.visibility = View.VISIBLE
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -161,6 +205,9 @@ class BagManagerListAdapter: RecyclerView.Adapter<RecyclerView.ViewHolder>() {
|
||||
var ivBagAudio: ImageView = itemView.findViewById(R.id.ivBagAudio)
|
||||
var tvBagTime: TextView = itemView.findViewById(R.id.tvBagTime)
|
||||
var tvBagSize: TextView = itemView.findViewById(R.id.tvBagSize)
|
||||
var ivMapScreen: ImageView = itemView.findViewById(R.id.ivMapScreen)
|
||||
var tvBagResource: TextView = itemView.findViewById(R.id.tvBagResource)
|
||||
var ivEditReason: ImageView = itemView.findViewById(R.id.ivEditReason)
|
||||
}
|
||||
|
||||
fun setListener(listener: BagClickListener){
|
||||
@@ -176,6 +223,10 @@ class BagManagerListAdapter: RecyclerView.Adapter<RecyclerView.ViewHolder>() {
|
||||
fun editDescription(key: Long,description: BagDescriptionEntity)
|
||||
//听录音
|
||||
fun bagAudio(key: Long,audioUrl: String)
|
||||
//查看高精地图截图
|
||||
fun lookMapScreen(key: Long)
|
||||
//点击按钮调起编辑Bag包信息
|
||||
fun startEdit(editText: EditText)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,6 +1,8 @@
|
||||
package com.zhjt.mogo_core_function_devatools.badcase.consts
|
||||
|
||||
import com.mogo.eagle.core.data.deva.badcase.BagInfoEntity
|
||||
import com.mogo.eagle.core.data.deva.report.ReportEntity
|
||||
import com.mogo.eagle.core.data.msgbox.FMInfoMsg
|
||||
|
||||
/**
|
||||
* @author XuXinChao
|
||||
@@ -29,6 +31,23 @@ object BadCaseConfig {
|
||||
//工控机版本
|
||||
@JvmField
|
||||
var dockerVersion:String ?= null
|
||||
//当前车速
|
||||
@JvmField
|
||||
var currentSpeed: Int = 0
|
||||
//最新的上报消息
|
||||
@JvmField
|
||||
var newReportEntity: ReportEntity ?= null
|
||||
//最新的FM消息
|
||||
@JvmField
|
||||
var newFMInfoMsg: FMInfoMsg ?= null
|
||||
//GPS状态
|
||||
@JvmField
|
||||
var gpsStatus: String ?= null
|
||||
//寻迹算路
|
||||
@JvmField
|
||||
var tracingStatus: String ?= null
|
||||
//云Socket连接状态
|
||||
var socketStatus: String ?= null
|
||||
@JvmField
|
||||
var recordKeyList:ArrayList<Long> = ArrayList()
|
||||
//自定义Topic清单列表
|
||||
@@ -37,5 +56,11 @@ object BadCaseConfig {
|
||||
//Bag包管理列表
|
||||
@JvmField
|
||||
var bagManagerList: ArrayList<BagInfoEntity> = ArrayList()
|
||||
//Bag包来源,将主动录包的Key保存在该列表中,不在该列表中的在录包管理页面的Bag包视为被动录包
|
||||
@JvmField
|
||||
var bagResourceList: ArrayList<Long> = ArrayList()
|
||||
//Bag包录包失败状态列表,当Bag录制失败时保存在该列表,当Bag包在该列表中不存在时即视为录包成功
|
||||
@JvmField
|
||||
var bagRecordFailList: ArrayList<Long> = ArrayList()
|
||||
|
||||
}
|
||||
@@ -0,0 +1,117 @@
|
||||
package com.zhjt.mogo_core_function_devatools.badcase.util
|
||||
|
||||
import android.graphics.Bitmap
|
||||
import android.graphics.Canvas
|
||||
import android.graphics.Color
|
||||
import android.graphics.Paint
|
||||
import android.os.Environment
|
||||
import android.util.Log
|
||||
import com.mogo.eagle.core.data.deva.report.ReportEntity
|
||||
import com.mogo.eagle.core.data.msgbox.FMInfoMsg
|
||||
import com.mogo.eagle.core.data.msgbox.MsgFmData
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager
|
||||
import com.zhjt.mogo_core_function_devatools.badcase.biz.InitiativeBadCaseWindow
|
||||
import java.io.File
|
||||
import java.io.FileOutputStream
|
||||
import java.io.OutputStream
|
||||
|
||||
object RecordBitmapUtils {
|
||||
|
||||
/**
|
||||
* 将Bitmap保存到本地
|
||||
*/
|
||||
fun bitmap2Path(bitmap: Bitmap, path: String?): String? {
|
||||
try {
|
||||
val os: OutputStream = FileOutputStream(path)
|
||||
bitmap.compress(Bitmap.CompressFormat.PNG, 80, os)
|
||||
os.flush()
|
||||
os.close()
|
||||
} catch (e: java.lang.Exception) {
|
||||
Log.e(InitiativeBadCaseWindow.TAG, "bitmap2Path Exception", e)
|
||||
}
|
||||
return path
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除过期文件
|
||||
*/
|
||||
fun deleteExpiredFile(currentDay: String){
|
||||
val checkFileName = Environment.getExternalStorageDirectory().absolutePath + File.separator+ "MapScreen"
|
||||
val checkFileFolder = File(checkFileName)
|
||||
if(checkFileFolder.exists()){
|
||||
checkFileFolder.listFiles()?.forEach {dir->
|
||||
if(dir.name != currentDay && dir.isDirectory){
|
||||
dir.listFiles()?.forEach { file->
|
||||
file.delete()
|
||||
}
|
||||
dir.delete()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 在指定Bitmap中绘制文字
|
||||
*/
|
||||
fun drawTextOnBitmap(bitmap: Bitmap, time: String,lineId: String,state: String,currentSpeed: String
|
||||
,gpsStatus: String?,tracingStatus: String?,socketStatus: String?
|
||||
,fm: FMInfoMsg?,report: ReportEntity?
|
||||
): Bitmap? {
|
||||
val mutableBitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true)
|
||||
val canvas = Canvas(mutableBitmap)
|
||||
val paint = Paint()
|
||||
paint.color = Color.RED
|
||||
paint.textSize = 50f
|
||||
paint.isAntiAlias = true
|
||||
canvas.drawText(time, 100f, 100f, paint)
|
||||
canvas.drawText(lineId,100f,200f,paint)
|
||||
canvas.drawText(state,100f,300f,paint)
|
||||
canvas.drawText(currentSpeed,100f,400f,paint)
|
||||
|
||||
gpsStatus?.let {
|
||||
canvas.drawText(it,1000f,100f,paint)
|
||||
}
|
||||
tracingStatus?.let {
|
||||
canvas.drawText(it,1000f,200f,paint)
|
||||
}
|
||||
socketStatus?.let {
|
||||
canvas.drawText(it,1000f,300f,paint)
|
||||
}
|
||||
|
||||
fm?.let {
|
||||
canvas.drawText("FM:${MsgFmData.getFmPolicyName(it.policyCode)}",100f,600f,paint)
|
||||
canvas.drawText("故障策略:${MsgFmData.getFmPolicyName(it.policyCode)}(${it.policyCode})",100f,700f,paint)
|
||||
//故障原因
|
||||
if(it.fmInfoList.isNullOrEmpty()){
|
||||
canvas.drawText("故障原因:暂无",100f,800f,paint)
|
||||
}else{
|
||||
val fmFaultReason = StringBuilder()
|
||||
fmFaultReason.append("故障原因:")
|
||||
for((index,info) in it.fmInfoList!!.withIndex()){
|
||||
fmFaultReason.append(info.faultName)
|
||||
if(info.faultId.isNotBlank()){
|
||||
fmFaultReason.append("(")
|
||||
fmFaultReason.append(info.faultId)
|
||||
fmFaultReason.append(")")
|
||||
}
|
||||
if(index!=(it.fmInfoList!!.size-1)){
|
||||
fmFaultReason.append("/")
|
||||
}
|
||||
}
|
||||
canvas.drawText(fmFaultReason.toString(),100f,800f,paint)
|
||||
}
|
||||
}
|
||||
report?.let {
|
||||
var resultStr = "上报类型:"
|
||||
for (result in it.resultList) {
|
||||
resultStr =
|
||||
"${resultStr}${CallerAutoPilotControlManager.getReportResultDesc(result)}"
|
||||
}
|
||||
canvas.drawText(resultStr,100f,1000f,paint)
|
||||
canvas.drawText("原因:${it.msg}",100f,1100f,paint)
|
||||
canvas.drawText("消息来源:${it.src}",100f,1200f,paint)
|
||||
}
|
||||
return mutableBitmap
|
||||
}
|
||||
|
||||
}
|
||||
@@ -38,12 +38,12 @@ class FuncConfigNetWorkModel {
|
||||
if (error == null) {
|
||||
error = onError
|
||||
}
|
||||
map["sn"] = MoGoAiCloudClientConfig.getInstance().sn
|
||||
map["mac"] = DeviceUtils.getMacAddress()
|
||||
map["channelVersion"] = AppIdentityModeUtils.getMisChannelCode(FunctionBuildConfig.appIdentityMode)
|
||||
}
|
||||
loader {
|
||||
apiCall {
|
||||
map["sn"] = MoGoAiCloudClientConfig.getInstance().sn
|
||||
map["mac"] = DeviceUtils.getMacAddress()
|
||||
map["channelVersion"] = AppIdentityModeUtils.getMisChannelCode(FunctionBuildConfig.appIdentityMode)
|
||||
getNetWorkApi().funcConfig(map)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import com.mogo.commons.utils.MogoAnalyticUtils
|
||||
import com.mogo.eagle.core.data.config.*
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener
|
||||
import com.mogo.eagle.core.function.call.autopilot.*
|
||||
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager
|
||||
import com.mogo.eagle.core.network.utils.GsonUtil
|
||||
import com.mogo.eagle.core.utilcode.mogo.*
|
||||
import com.zhjt.mogo.adas.data.bean.MogoReport.Code.Info.IMF
|
||||
@@ -57,6 +58,7 @@ internal class MoFangCommandExecutor {
|
||||
private const val MSG_WHAT_KEY_CODE_D = 0x06
|
||||
private const val MSG_WHAT_KEY_CODE_E = 0x07
|
||||
private const val MSG_WHAT_KEY_CODE_EL = 0x08
|
||||
private const val MSG_WHAT_KEY_CODE_BL = 0x09
|
||||
}
|
||||
|
||||
@Volatile
|
||||
@@ -232,6 +234,27 @@ internal class MoFangCommandExecutor {
|
||||
}
|
||||
}
|
||||
}
|
||||
MSG_WHAT_KEY_CODE_BL -> {
|
||||
try {
|
||||
Log.d(TAG, "--- 长按录包 ---")
|
||||
MoFangAnalyticUtils.track(EVENT_EXECUTE, mutableMapOf(
|
||||
EVENT_EXECUTE_PARAMS_KEYCODE to (getKeycodeByWhat(msg.what) ?: ""),
|
||||
EVENT_EXECUTE_PARAMS_TYPE to (getInputTypeByWhat(msg.what) ?: ""),
|
||||
EVENT_EXECUTE_PARAMS_LON to location.longitude,
|
||||
EVENT_EXECUTE_PARAMS_LAT to location.latitude,
|
||||
EVENT_EXECUTE_PARAMS_SPEED to location.gnssSpeed,
|
||||
EVENT_EXECUTE_PARAMS_ACC to location.acceleration,
|
||||
EVENT_EXECUTE_PARAMS_HEADING to location.heading,
|
||||
EVENT_EXECUTE_PARAMS_LINE_ID to CallerAutoPilotStatusListenerManager.getLineId(),
|
||||
EVENT_EXECUTE_PARAMS_DOCKER_VERSION to (CallerAutoPilotStatusListenerManager.getDockerVersion() ?: "")
|
||||
))
|
||||
linkedLog?.record(mapOf("执行:${System.currentTimeMillis()}" to "$message, $msg"))
|
||||
CallerDevaToolsManager.startRecordByMoFang()
|
||||
} catch (t: Throwable) {
|
||||
t.printStackTrace()
|
||||
Log.e(TAG, "error: ${t.message}, msg-> $msg")
|
||||
}
|
||||
}
|
||||
}
|
||||
true
|
||||
}
|
||||
@@ -266,6 +289,9 @@ internal class MoFangCommandExecutor {
|
||||
MSG_WHAT_KEY_CODE_E -> {
|
||||
"单击键E->开启自驾$extra"
|
||||
}
|
||||
MSG_WHAT_KEY_CODE_BL -> {
|
||||
"长按键B->录包$extra"
|
||||
}
|
||||
MSG_WHAT_KEY_CODE_EL -> {
|
||||
"长按键E->鸣笛$extra"
|
||||
}
|
||||
@@ -276,7 +302,7 @@ internal class MoFangCommandExecutor {
|
||||
private fun getKeycodeByWhat(what: Int): String? {
|
||||
return when(what) {
|
||||
MSG_WHAT_KEY_CODE_A, MSG_WHAT_KEY_CODE_AL -> KeyEvent.keyCodeToString(KeyEvent.KEYCODE_A)
|
||||
MSG_WHAT_KEY_CODE_B -> KeyEvent.keyCodeToString(KeyEvent.KEYCODE_B)
|
||||
MSG_WHAT_KEY_CODE_B, MSG_WHAT_KEY_CODE_BL -> KeyEvent.keyCodeToString(KeyEvent.KEYCODE_B)
|
||||
MSG_WHAT_KEY_CODE_AB -> "${KeyEvent.keyCodeToString(KeyEvent.KEYCODE_A)},${KeyEvent.keyCodeToString(KeyEvent.KEYCODE_B)}"
|
||||
MSG_WHAT_KEY_CODE_C -> KeyEvent.keyCodeToString(KeyEvent.KEYCODE_C)
|
||||
MSG_WHAT_KEY_CODE_D -> KeyEvent.keyCodeToString(KeyEvent.KEYCODE_D)
|
||||
@@ -294,7 +320,7 @@ internal class MoFangCommandExecutor {
|
||||
MSG_WHAT_KEY_CODE_E -> {
|
||||
"1"
|
||||
}
|
||||
MSG_WHAT_KEY_CODE_AL,MSG_WHAT_KEY_CODE_EL -> {
|
||||
MSG_WHAT_KEY_CODE_AL, MSG_WHAT_KEY_CODE_BL, MSG_WHAT_KEY_CODE_EL -> {
|
||||
"2"
|
||||
}
|
||||
MSG_WHAT_KEY_CODE_AB -> {
|
||||
@@ -387,6 +413,15 @@ internal class MoFangCommandExecutor {
|
||||
})
|
||||
linkedLog?.record(mapOf("发送[EL]:${System.currentTimeMillis()}" to "${whatToString(MSG_WHAT_KEY_CODE_EL)}"))
|
||||
}
|
||||
|
||||
if (keyCode == KeyEvent.KEYCODE_B) {
|
||||
Log.d(TAG, "--- 长按键B --- 触发录包 ----")
|
||||
handler.removeMessages(MSG_WHAT_KEY_CODE_BL)
|
||||
handler.sendMessage(Message.obtain().also {
|
||||
it.what = MSG_WHAT_KEY_CODE_BL
|
||||
})
|
||||
linkedLog?.record(mapOf("发送[BL]:${System.currentTimeMillis()}" to "${whatToString(MSG_WHAT_KEY_CODE_BL)}"))
|
||||
}
|
||||
}
|
||||
|
||||
fun handleCombineClick(vararg keyCodes: Int) {
|
||||
|
||||
@@ -34,20 +34,20 @@ class IPCUpgradeNetWorkModel {
|
||||
fun upgradeConfirm(images: List<String>,padSn: String,releaseId: String,
|
||||
onSuccess: ((String) -> Unit),onError: ((String) -> Unit)){
|
||||
request<BaseResponse<Any?>> {
|
||||
val requestJson = JSONObject()
|
||||
val imagesJsonArray = JSONArray()
|
||||
images.iterator().forEach {
|
||||
imagesJsonArray.put(it)
|
||||
}
|
||||
requestJson.put("images",imagesJsonArray)
|
||||
requestJson.put("padSn",padSn)
|
||||
requestJson.put("releaseId",releaseId)
|
||||
val requestBody:RequestBody= RequestBody.create(
|
||||
MediaType.parse("application/json; charset=utf-8"),
|
||||
requestJson.toString()
|
||||
)
|
||||
loader{
|
||||
apiCall{
|
||||
val requestJson = JSONObject()
|
||||
val imagesJsonArray = JSONArray()
|
||||
images.iterator().forEach {
|
||||
imagesJsonArray.put(it)
|
||||
}
|
||||
requestJson.put("images",imagesJsonArray)
|
||||
requestJson.put("padSn",padSn)
|
||||
requestJson.put("releaseId",releaseId)
|
||||
val requestBody:RequestBody= RequestBody.create(
|
||||
MediaType.parse("application/json; charset=utf-8"),
|
||||
requestJson.toString()
|
||||
)
|
||||
getNetWorkApi(getBaseUrl()).upgradeConfirm(requestBody)
|
||||
}
|
||||
}
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 2.5 KiB |
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<gradient
|
||||
android:startColor="#E53BC593"
|
||||
android:endColor="#E53BC593"
|
||||
android:angle="0"
|
||||
/>
|
||||
<corners android:radius="8px" />
|
||||
</shape>
|
||||
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<gradient
|
||||
android:startColor="#E52966EC"
|
||||
android:endColor="#E52966EC"
|
||||
android:angle="0"
|
||||
/>
|
||||
<corners android:radius="8px" />
|
||||
</shape>
|
||||
@@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="1708dp"
|
||||
android:layout_height="1013dp"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<androidx.cardview.widget.CardView
|
||||
android:layout_width="1586dp"
|
||||
android:layout_height="@dimen/dp_893"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:cardCornerRadius="@dimen/dp_20"
|
||||
app:cardElevation="0dp">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/ivScreen"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:scaleType="fitXY"
|
||||
/>
|
||||
|
||||
</androidx.cardview.widget.CardView>
|
||||
|
||||
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/ivScreenClose"
|
||||
android:layout_width="@dimen/dp_84"
|
||||
android:layout_height="@dimen/dp_86"
|
||||
android:src="@drawable/icon_screen_close"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
android:layout_marginEnd="@dimen/dp_120"
|
||||
android:layout_marginTop="@dimen/dp_100"
|
||||
/>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -17,25 +17,56 @@
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
/>
|
||||
|
||||
<EditText
|
||||
android:id="@+id/etBagNameEdit"
|
||||
android:layout_width="0dp"
|
||||
<androidx.constraintlayout.widget.Guideline
|
||||
android:id="@+id/guideline"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintGuide_percent="0.5"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
android:orientation="horizontal"
|
||||
/>
|
||||
|
||||
<EditText
|
||||
android:id="@+id/etBagNameEdit"
|
||||
android:layout_width="@dimen/dp_0"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintBottom_toTopOf="@id/guideline"
|
||||
app:layout_constraintLeft_toRightOf="@id/cbBagSelect"
|
||||
app:layout_constraintRight_toLeftOf="@id/tvBagTime"
|
||||
android:layout_marginStart="15dp"
|
||||
android:layout_marginEnd="30dp"
|
||||
app:layout_constraintRight_toLeftOf="@id/tvBagResource"
|
||||
android:layout_marginStart="@dimen/dp_20"
|
||||
android:layout_marginEnd="@dimen/dp_25"
|
||||
android:background="@null"
|
||||
android:drawableEnd="@drawable/icon_bag_edit"
|
||||
android:drawablePadding="@dimen/dp_10"
|
||||
android:textColor="#FFFFFFFF"
|
||||
android:textSize="32dp"
|
||||
android:singleLine="true"
|
||||
android:ellipsize="end"
|
||||
/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvBagTime"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textColor="#FFFFFFFF"
|
||||
android:textSize="@dimen/dp_26"
|
||||
android:gravity="start"
|
||||
app:layout_constraintTop_toBottomOf="@id/guideline"
|
||||
app:layout_constraintLeft_toLeftOf="@id/etBagNameEdit"
|
||||
/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvBagSize"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textColor="#72FFFFFF"
|
||||
android:textSize="26dp"
|
||||
app:layout_constraintTop_toTopOf="@id/tvBagTime"
|
||||
app:layout_constraintBottom_toBottomOf="@id/tvBagTime"
|
||||
app:layout_constraintStart_toEndOf="@id/tvBagTime"
|
||||
android:layout_marginStart="@dimen/dp_20"
|
||||
/>
|
||||
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvBagReportStatus"
|
||||
android:layout_width="162dp"
|
||||
@@ -59,30 +90,47 @@
|
||||
app:layout_constraintRight_toLeftOf="@id/tvBagReportStatus"
|
||||
android:src="@drawable/icon_bag_audio"
|
||||
android:visibility="invisible"
|
||||
android:layout_marginEnd="30dp"
|
||||
android:layout_marginEnd="@dimen/dp_25"
|
||||
/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvBagTime"
|
||||
android:layout_width="110dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:textColor="#FFFFFFFF"
|
||||
android:textSize="26dp"
|
||||
<ImageView
|
||||
android:id="@+id/ivMapScreen"
|
||||
android:layout_width="@dimen/dp_44"
|
||||
android:layout_height="@dimen/dp_44"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintRight_toLeftOf="@id/ivBagAudio"
|
||||
android:layout_marginEnd="30dp"
|
||||
android:gravity="start"
|
||||
android:src="@drawable/icon_bad_case_audio_select"
|
||||
android:layout_marginEnd="@dimen/dp_25"
|
||||
android:visibility="invisible"
|
||||
/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/ivEditReason"
|
||||
android:layout_width="@dimen/dp_44"
|
||||
android:layout_height="@dimen/dp_44"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintRight_toLeftOf="@id/ivMapScreen"
|
||||
android:src="@drawable/icon_bag_edit"
|
||||
android:layout_marginEnd="@dimen/dp_25"
|
||||
/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvBagSize"
|
||||
android:id="@+id/tvBagResource"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textColor="#75FFFFFF"
|
||||
android:textSize="26dp"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintLeft_toLeftOf="@id/tvBagTime"
|
||||
|
||||
app:layout_constraintRight_toLeftOf="@id/ivEditReason"
|
||||
android:background="@drawable/bag_auto_button_bg"
|
||||
android:textSize="@dimen/sp_25"
|
||||
android:textColor="@color/white"
|
||||
android:paddingStart="@dimen/dp_15"
|
||||
android:paddingEnd="@dimen/dp_15"
|
||||
android:paddingTop="@dimen/dp_4"
|
||||
android:paddingBottom="@dimen/dp_4"
|
||||
android:layout_marginEnd="@dimen/dp_25"
|
||||
/>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -104,6 +104,23 @@
|
||||
android:layout_marginBottom="@dimen/dp_40"
|
||||
/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvAudioResult"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintTop_toTopOf="@id/viewAudioBg"
|
||||
app:layout_constraintBottom_toBottomOf="@id/viewAudioBg"
|
||||
app:layout_constraintLeft_toLeftOf="@id/viewAudioBg"
|
||||
app:layout_constraintRight_toLeftOf="@id/viewAudioStart"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="@dimen/dp_29"
|
||||
android:layout_marginStart="@dimen/dp_51"
|
||||
android:layout_marginEnd="@dimen/dp_51"
|
||||
android:gravity="center"
|
||||
android:maxLines="2"
|
||||
android:ellipsize="start"
|
||||
/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/viewAudioButton"
|
||||
android:layout_width="@dimen/dp_34"
|
||||
@@ -115,16 +132,16 @@
|
||||
android:background="@drawable/icon_bad_case_audio_normal"
|
||||
/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvAudioCountDown"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textColor="#FFFFFFFF"
|
||||
android:textSize="@dimen/dp_27"
|
||||
app:layout_constraintTop_toTopOf="@id/viewAudioButton"
|
||||
app:layout_constraintBottom_toBottomOf="@id/viewAudioButton"
|
||||
app:layout_constraintLeft_toRightOf="@id/viewAudioButton"
|
||||
android:layout_marginStart="@dimen/dp_30"
|
||||
<ImageView
|
||||
android:id="@+id/viewAudioStart"
|
||||
android:layout_width="@dimen/dp_34"
|
||||
android:layout_height="@dimen/dp_48"
|
||||
app:layout_constraintTop_toTopOf="@id/viewAudioBg"
|
||||
app:layout_constraintBottom_toBottomOf="@id/viewAudioBg"
|
||||
app:layout_constraintRight_toRightOf="@id/viewAudioBg"
|
||||
android:background="@drawable/icon_bad_case_audio_normal"
|
||||
android:layout_marginEnd="@dimen/dp_51"
|
||||
android:visibility="gone"
|
||||
/>
|
||||
|
||||
</com.mogo.eagle.core.widget.RoundConstraintLayout>
|
||||
@@ -104,6 +104,23 @@
|
||||
android:layout_marginBottom="@dimen/dp_40"
|
||||
/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvAudioResult"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintTop_toTopOf="@id/viewAudioBg"
|
||||
app:layout_constraintBottom_toBottomOf="@id/viewAudioBg"
|
||||
app:layout_constraintLeft_toLeftOf="@id/viewAudioBg"
|
||||
app:layout_constraintRight_toLeftOf="@id/viewAudioStart"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="@dimen/dp_29"
|
||||
android:layout_marginStart="@dimen/dp_51"
|
||||
android:layout_marginEnd="@dimen/dp_51"
|
||||
android:gravity="center"
|
||||
android:maxLines="2"
|
||||
android:ellipsize="start"
|
||||
/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/viewAudioButton"
|
||||
android:layout_width="@dimen/dp_34"
|
||||
@@ -115,17 +132,16 @@
|
||||
android:background="@drawable/icon_bad_case_audio_normal"
|
||||
/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvAudioCountDown"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textColor="#FFFFFFFF"
|
||||
android:textSize="@dimen/dp_27"
|
||||
app:layout_constraintTop_toTopOf="@id/viewAudioButton"
|
||||
app:layout_constraintBottom_toBottomOf="@id/viewAudioButton"
|
||||
app:layout_constraintLeft_toRightOf="@id/viewAudioButton"
|
||||
android:layout_marginStart="@dimen/dp_30"
|
||||
<ImageView
|
||||
android:id="@+id/viewAudioStart"
|
||||
android:layout_width="@dimen/dp_34"
|
||||
android:layout_height="@dimen/dp_48"
|
||||
app:layout_constraintTop_toTopOf="@id/viewAudioBg"
|
||||
app:layout_constraintBottom_toBottomOf="@id/viewAudioBg"
|
||||
app:layout_constraintRight_toRightOf="@id/viewAudioBg"
|
||||
android:background="@drawable/icon_bad_case_audio_normal"
|
||||
android:layout_marginEnd="@dimen/dp_51"
|
||||
android:visibility="gone"
|
||||
/>
|
||||
|
||||
|
||||
</com.mogo.eagle.core.widget.RoundConstraintLayout>
|
||||
@@ -5,7 +5,6 @@ import android.graphics.*
|
||||
import android.graphics.Paint.Style.STROKE
|
||||
import android.os.Handler
|
||||
import android.os.HandlerThread
|
||||
import android.os.SystemClock
|
||||
import android.util.*
|
||||
import android.view.SurfaceHolder
|
||||
import android.view.SurfaceView
|
||||
@@ -15,6 +14,8 @@ import com.mogo.eagle.core.function.api.lookaround.data.*
|
||||
import com.mogo.eagle.core.function.call.autopilot.*
|
||||
import com.mogo.eagle.core.function.call.devatools.*
|
||||
import com.mogo.eagle.core.utilcode.kotlin.*
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_HMI
|
||||
import com.mogo.eagle.core.utilcode.util.ThreadUtils
|
||||
import com.mogo.eagle.core.utilcode.util.Utils
|
||||
import kotlinx.coroutines.*
|
||||
@@ -279,12 +280,11 @@ class M1LookAroundView: SurfaceView, SurfaceHolder.Callback, Runnable, IMoGoChas
|
||||
override fun onAttachedToWindow() {
|
||||
super.onAttachedToWindow()
|
||||
CallerChassisSteeringStateListenerManager.addListener(TAG, this)
|
||||
Log.d(TAG, "--- 发起订阅 ---")
|
||||
CallerAutoPilotControlManager.setIsSubscribeM1StitchedVideo(true)
|
||||
scope.launch(ThreadUtils.getCpuPool().asCoroutineDispatcher()) {
|
||||
CallerDevaToolsManager.lookAroundProvider()?.flow()?.also { flow ->
|
||||
flow.onEach {
|
||||
Log.d(TAG, "-- onEach ---:$it")
|
||||
CallerLogger.d("$M_HMI$TAG", "-- onEach ---:$it")
|
||||
if (it.isValid()) {
|
||||
data = it
|
||||
handler.get()?.removeCallbacks(this@M1LookAroundView)
|
||||
@@ -307,7 +307,6 @@ class M1LookAroundView: SurfaceView, SurfaceHolder.Callback, Runnable, IMoGoChas
|
||||
override fun onDetachedFromWindow() {
|
||||
super.onDetachedFromWindow()
|
||||
CallerChassisSteeringStateListenerManager.removeListener(TAG)
|
||||
Log.d(TAG, "--- 取消订阅 ---")
|
||||
CallerAutoPilotControlManager.setIsSubscribeM1StitchedVideo(false)
|
||||
handler.get()?.looper?.quitSafely()
|
||||
}
|
||||
|
||||
@@ -19,8 +19,6 @@ import com.mogo.eagle.core.function.call.hmi.CallerHmiManager
|
||||
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxEventListenerManager
|
||||
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager
|
||||
import com.mogo.eagle.core.function.hmi.R
|
||||
import com.mogo.eagle.core.function.msgbox.MsgBoxConfig
|
||||
import com.mogo.eagle.core.function.msgbox.MsgFmData
|
||||
import com.mogo.eagle.core.utilcode.mogo.glide.GlideApp
|
||||
import com.mogo.eagle.core.utilcode.mogo.glide.transform.GlideRoundedCornersTransform
|
||||
import com.mogo.eagle.core.utilcode.util.TimeUtils
|
||||
|
||||
@@ -18,7 +18,6 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager
|
||||
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager
|
||||
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager
|
||||
import com.mogo.eagle.core.function.hmi.R
|
||||
import com.mogo.eagle.core.function.msgbox.MsgFmData
|
||||
import com.mogo.eagle.core.utilcode.mogo.glide.GlideApp
|
||||
import com.mogo.eagle.core.utilcode.mogo.glide.transform.GlideRoundedCornersTransform
|
||||
import com.mogo.eagle.core.utilcode.util.ResourceUtils.getDrawable
|
||||
|
||||
@@ -18,13 +18,11 @@ import androidx.constraintlayout.widget.ConstraintLayout;
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotPlanningActionsListener;
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisBrakeStateListener;
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisGearStateListener;
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisSteeringStateListener;
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisThrottleStateListener;
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager;
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerPlanningActionsListenerManager;
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerChassisBrakeStateListenerManager;
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerChassisGearStateListenerManager;
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerChassisSteeringStateListenerManager;
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerChassisThrottleStateListenerManager;
|
||||
import com.mogo.eagle.core.function.hmi.R;
|
||||
import com.mogo.eagle.core.utilcode.util.ThreadUtils;
|
||||
@@ -33,8 +31,6 @@ import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import chassis.Chassis;
|
||||
import mogo.telematics.pad.MessagePad;
|
||||
import chassis.ChassisStatesOuterClass;
|
||||
import planning.RoboSweeperTaskIndexOuterClass;
|
||||
|
||||
/**
|
||||
* @author Jing
|
||||
@@ -42,7 +38,6 @@ import planning.RoboSweeperTaskIndexOuterClass;
|
||||
* @since: 6/24/22
|
||||
*/
|
||||
public class TrafficDataView extends ConstraintLayout implements
|
||||
IMoGoChassisSteeringStateListener,
|
||||
IMoGoChassisGearStateListener ,
|
||||
IMoGoChassisBrakeStateListener,
|
||||
IMoGoChassisThrottleStateListener,
|
||||
@@ -54,9 +49,6 @@ public class TrafficDataView extends ConstraintLayout implements
|
||||
private ImageView speedImage;
|
||||
private ImageView brakeStatus;
|
||||
|
||||
//圆弧颜色
|
||||
private int mArcColor;
|
||||
|
||||
private static final int MSG_SEND_UPDATE = 1;
|
||||
private volatile double acceleration;
|
||||
private volatile float mBrake;
|
||||
@@ -114,7 +106,6 @@ public class TrafficDataView extends ConstraintLayout implements
|
||||
protected void onAttachedToWindow() {
|
||||
super.onAttachedToWindow();
|
||||
handler.sendEmptyMessageDelayed(MSG_SEND_UPDATE, 1000L);
|
||||
CallerChassisSteeringStateListenerManager.INSTANCE.addListener(TAG, this);
|
||||
CallerChassisGearStateListenerManager.INSTANCE.addListener(TAG, this);
|
||||
CallerChassisBrakeStateListenerManager.INSTANCE.addListener(TAG, this);
|
||||
CallerChassisThrottleStateListenerManager.INSTANCE.addListener(TAG, this);
|
||||
@@ -133,7 +124,6 @@ public class TrafficDataView extends ConstraintLayout implements
|
||||
@Override
|
||||
protected void onDetachedFromWindow() {
|
||||
super.onDetachedFromWindow();
|
||||
CallerChassisSteeringStateListenerManager.INSTANCE.removeListener(TAG);
|
||||
CallerChassisGearStateListenerManager.INSTANCE.removeListener(TAG);
|
||||
CallerChassisBrakeStateListenerManager.INSTANCE.removeListener(TAG);
|
||||
CallerChassisThrottleStateListenerManager.INSTANCE.removeListener(TAG);
|
||||
@@ -145,20 +135,8 @@ public class TrafficDataView extends ConstraintLayout implements
|
||||
acceleration = planningActionMsg.getDestinationAcc();
|
||||
}
|
||||
|
||||
/**
|
||||
* 方向盘转向角 左+右-
|
||||
* @param steering
|
||||
*/
|
||||
@Override
|
||||
public void onAutopilotSteeringData(float steering) {
|
||||
if (Math.abs(steering) < 1) {
|
||||
steering = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 档位
|
||||
* @param gear
|
||||
*/
|
||||
@Override
|
||||
public void onAutopilotGearData(@NotNull Chassis.GearPosition gear) {
|
||||
@@ -178,23 +156,6 @@ public class TrafficDataView extends ConstraintLayout implements
|
||||
public void onAutopilotThrottle(float throttle) {
|
||||
mThrottle = throttle;
|
||||
}
|
||||
/**
|
||||
* 设置弧形颜色
|
||||
*
|
||||
* @param value 颜色值
|
||||
*/
|
||||
public void setArcColor(int value) {
|
||||
mArcColor = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置数据
|
||||
*
|
||||
* @param value 当前绘制的值
|
||||
*/
|
||||
public void setValues(int value) {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* value呈现
|
||||
|
||||
@@ -29,22 +29,20 @@ class AiCloudIdentifyNetWorkModel private constructor() {
|
||||
onError: ((String) -> Unit)
|
||||
) {
|
||||
request<BaseResponse<Any>> {
|
||||
val map = mutableMapOf<String, Any>()
|
||||
start {
|
||||
map["sn"] = MoGoAiCloudClientConfig.getInstance().sn
|
||||
map["status"] = dataReceive
|
||||
map["startMetre"] = START_METRE
|
||||
map["endMetre"] = END_METRE
|
||||
map["type"] = 1
|
||||
if (lon != 0.0) {
|
||||
map["lon"] = lon
|
||||
}
|
||||
if (lat != 0.0) {
|
||||
map["lat"] = lat
|
||||
}
|
||||
}
|
||||
loader {
|
||||
apiCall {
|
||||
val map = mutableMapOf<String, Any>()
|
||||
map["sn"] = MoGoAiCloudClientConfig.getInstance().sn
|
||||
map["status"] = dataReceive
|
||||
map["startMetre"] = START_METRE
|
||||
map["endMetre"] = END_METRE
|
||||
map["type"] = 1
|
||||
if (lon != 0.0) {
|
||||
map["lon"] = lon
|
||||
}
|
||||
if (lat != 0.0) {
|
||||
map["lat"] = lat
|
||||
}
|
||||
getNetWorkApi().identifyRange(map)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user