From 6900cb706c86563ddb10bf593d254426f1ad8441 Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Wed, 20 Dec 2023 20:29:53 +0800 Subject: [PATCH] =?UTF-8?q?[6.2.6]=E8=BF=90=E8=90=A5=E9=9D=A2=E6=9D=BF?= =?UTF-8?q?=E6=95=B4=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../badcase/BadCaseManager.kt | 101 +++- .../badcase/consts/BadCaseConfig.kt | 2 + .../hmi/ui/msgbox/DriverMsgBoxBubbleView.kt | 29 +- .../function/hmi/ui/setting/SOPSettingView.kt | 211 ++++---- .../function/hmi/ui/vehicle/TakeOverView.kt | 4 +- .../src/main/res/layout/view_sop_setting.xml | 497 ++++++++++-------- .../core/data/config/FunctionBuildConfig.kt | 13 +- 7 files changed, 505 insertions(+), 352 deletions(-) diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/BadCaseManager.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/BadCaseManager.kt index f2d2c83040..655cbe50ca 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/BadCaseManager.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/BadCaseManager.kt @@ -3,6 +3,9 @@ package com.zhjt.mogo_core_function_devatools.badcase import android.app.Activity import android.content.Context +import android.graphics.Bitmap +import android.os.Environment +import android.os.SystemClock import android.view.View import android.view.WindowManager import androidx.appcompat.app.AppCompatActivity @@ -27,10 +30,15 @@ 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.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.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.map.CallerMapScreenListenerManager +import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager 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 @@ -43,14 +51,17 @@ import com.mogo.tts.base.SpeechUtils import com.zhjt.mogo_core_function_devatools.badcase.biz.* import com.zhjt.mogo_core_function_devatools.badcase.consts.BadCaseConfig import com.zhjt.mogo_core_function_devatools.badcase.repository.db.entity.AutoPilotRecord +import com.zhjt.mogo_core_function_devatools.badcase.util.RecordBitmapUtils import com.zhjt.mogo_core_function_devatools.ext.enqueuePop import me.jessyan.autosize.utils.AutoSizeUtils import record_cache.RecordPanelOuterClass +import java.io.File +import java.util.Random import kotlin.math.abs internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordListener, IMoGoChassisLocationGCJ02Listener, IMsgBoxListener, IMoGoDevaToolsListener, - IMogoStatusChangedListener { + IMogoStatusChangedListener, IMoGoMapScreenListener { const val TAG = "BadCase" @@ -59,6 +70,8 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis @Volatile private var record: AutoPilotRecord? = null + private var recordKey: Long = 0 //主动录制bag包key + fun init(context: Context) { CallerAutopilotRecordListenerManager.addListener(TAG, this) SpeechUtils.init(context) @@ -183,15 +196,26 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis || BadCaseConfig.dockerVersion!!.contains("2.6.0") || BadCaseConfig.dockerVersion!!.contains("2.8.0") ) { - val initiativeBadCaseWindow = InitiativeBadCaseWindow(activity) - initiativeBadCaseWindow.setClickListener(object : - InitiativeBadCaseWindow.ClickListener { - override fun closeWindow() { - initiativeBadCaseWindow.hideFloatWindow() - } + if(FunctionBuildConfig.isShowBagRecordWindow){ + //展示录包弹窗并且录包 + val initiativeBadCaseWindow = InitiativeBadCaseWindow(activity) + initiativeBadCaseWindow.setClickListener(object : + InitiativeBadCaseWindow.ClickListener { + override fun closeWindow() { + initiativeBadCaseWindow.hideFloatWindow() + } - }) - initiativeBadCaseWindow.showFloatWindow(null) + }) + initiativeBadCaseWindow.showFloatWindow(null) + }else{ + //进行录包,但不展示录包弹窗 + BadCaseConfig.notDisplayBagWindow = true + //高精地图屏幕截图 + CallerMapScreenListenerManager.addListener(TAG,this) + val recordKey = Random(SystemClock.elapsedRealtime()).nextInt().toLong() + CallerAutoPilotControlManager.recordPackage(BadCaseConfig.type,recordKey.toInt(), + BadCaseConfig.totalDuration, BadCaseConfig.previousDuration) + } } else { val caseListDialog = CaseListDialog(activity) caseListDialog.show() @@ -273,6 +297,23 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis override fun onAutopilotRecordResult(recordPanel: RecordPanelOuterClass.RecordPanel) { super.onAutopilotRecordResult(recordPanel) CallerLogger.d("$M_DEVA$TAG", "recordKey=${recordPanel.key},stat=${recordPanel.stat}") + if(BadCaseConfig.notDisplayBagWindow){ + //此时点击主动录包按钮,不能展示上报弹窗,需要在此处做主动录包弹窗中的一些逻辑 + //开始录制 + if(recordPanel.stat == 300){ + recordKey = recordPanel.key + BadCaseConfig.recordKeyList.add(recordPanel.key) + //获取当前主动录包集合 + val recordSet = BadCaseConfig.getInitiativeRecordSet() + //保存录包状态 + recordSet.add(recordPanel.key.toString()) + BadCaseConfig.setInitiativeRecordSet(recordSet) + //开启高精地图截图 + CallerMapUIServiceManager.getMapUIController()?.getMapScreenShot() + //将当次主动录包设置标签还原 + BadCaseConfig.notDisplayBagWindow = false + } + } if (BadCaseConfig.recordKeyList.contains(recordPanel.key)) { if (recordPanel.stat == 100 || recordPanel.stat == 101) { //成功结束录制 @@ -383,5 +424,47 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis BadCaseConfig.socketStatus = "云Socket连接${if (isTrue) "正常" else "异常"}" } + override fun onMapScreen(bitmap: Bitmap) { + super.onMapScreen(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 site = if(CallerAutoPilotStatusListenerManager.getLineStartName().isNullOrEmpty() || CallerAutoPilotStatusListenerManager.getLineEndName().isNullOrEmpty()){ + "路线起始点:无" + }else{ + "路线起点:${CallerAutoPilotStatusListenerManager.getLineStartName()};终点:${CallerAutoPilotStatusListenerManager.getLineEndName()}" + } + val outBitmap = RecordBitmapUtils.drawTextOnBitmap(bitmap,time,lineId,state,speed,site, + 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) + //注销高精地图截图监听回调 + CallerMapScreenListenerManager.removeListener(TAG) + } + } diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/consts/BadCaseConfig.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/consts/BadCaseConfig.kt index b5868dbb3d..9f1a49715f 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/consts/BadCaseConfig.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/badcase/consts/BadCaseConfig.kt @@ -58,6 +58,8 @@ object BadCaseConfig { @JvmField var bagManagerList: ArrayList = ArrayList() + var notDisplayBagWindow: Boolean = false //主动录包不能展示弹窗 + private const val resourceInitiative = "RESOURCE_INITIATIVE" //录包来源为主动录包 private const val resourceAiData = "RESOURCE_AI_DATA" //录包来源为AI数据采集 private const val recordFail = "RECORD_FAIL" //录包失败 diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/DriverMsgBoxBubbleView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/DriverMsgBoxBubbleView.kt index ab023e3c79..8415e33cc2 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/DriverMsgBoxBubbleView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/DriverMsgBoxBubbleView.kt @@ -97,23 +97,24 @@ class DriverMsgBoxBubbleView @JvmOverloads constructor( } } else if(category == MsgCategory.SYS_INFO){ CallerMsgBoxEventListenerManager.invokeUpdateTipListener(true) - //todo 过滤MAP系统异常报警 } else if(category == MsgCategory.FM_INFO){ CallerMsgBoxEventListenerManager.invokeUpdateTipListener(true) - //属于停车警示(包括择机靠边停车、立即舒适停车、就地紧急停车)时,需要弹出消息气泡并伴有提示音 - val fmInfoMsg = msgBoxBean.bean as FMInfoMsg - if(fmInfoMsg.policyCode == "FM_DP_PNC_CHOOSE_STOP" //择机靠边停车 - || fmInfoMsg.policyCode == "FM_DP_COMFORTABLE_STOP" //立刻舒适停车 - || fmInfoMsg.policyCode == "FM_DP_EMERGENCY_STOP" //就地紧急停车 - ){ - //语音提示 - try { - SoundPoolUtils.getSoundPool().playSoundWithRedId(context,R.raw.weak_net_tips) - }catch (e: Exception){ - e.printStackTrace() + if(FunctionBuildConfig.isTakeoverRemind){ + //属于停车警示(包括择机靠边停车、立即舒适停车、就地紧急停车)时,需要弹出消息气泡并伴有提示音 + val fmInfoMsg = msgBoxBean.bean as FMInfoMsg + if(fmInfoMsg.policyCode == "FM_DP_PNC_CHOOSE_STOP" //择机靠边停车 + || fmInfoMsg.policyCode == "FM_DP_COMFORTABLE_STOP" //立刻舒适停车 + || fmInfoMsg.policyCode == "FM_DP_EMERGENCY_STOP" //就地紧急停车 + ){ + //语音提示 + try { + SoundPoolUtils.getSoundPool().playSoundWithRedId(context,R.raw.weak_net_tips) + }catch (e: Exception){ + e.printStackTrace() + } + //展示消息 + showData(msgBoxBean) } - //展示消息 - showData(msgBoxBean) } } else{ if(msgBoxBean.sourceType == DataSourceType.SUMMARY){ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/SOPSettingView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/SOPSettingView.kt index 2c888da2b4..055e8ea5ae 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/SOPSettingView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/SOPSettingView.kt @@ -73,6 +73,7 @@ import kotlinx.android.synthetic.main.view_sop_setting.view.scRunRedLightSop import kotlinx.android.synthetic.main.view_sop_setting.view.scShowBagRecordWindow import kotlinx.android.synthetic.main.view_sop_setting.view.scSpeedLimit import kotlinx.android.synthetic.main.view_sop_setting.view.scSweeperModeSwitch +import kotlinx.android.synthetic.main.view_sop_setting.view.scTakeOverRemind import kotlinx.android.synthetic.main.view_sop_setting.view.scTrafficLight import kotlinx.android.synthetic.main.view_sop_setting.view.scV2ISwitch import kotlinx.android.synthetic.main.view_sop_setting.view.scV2NSwitch @@ -121,7 +122,9 @@ internal class SOPSettingView @JvmOverloads constructor( mapSetting() //与车相关类设置 vehicleSetting() - //其他类别开关设置 + //美化模式类设置 + demoSetting() + //业务类别开关设置 otherSetting() } @@ -445,17 +448,9 @@ internal class SOPSettingView @JvmOverloads constructor( } /** - * 与车相关类设置 + * 美化模式类设置 */ - private fun vehicleSetting() { - //绕障类功能 - scObstacleAvoidance.isChecked = FunctionBuildConfig.isDetouring - scObstacleAvoidance.setOnCheckedChangeListener { _, isChecked -> - hmiAction("SOP 绕障类功能开关, ", isChecked) - CallerAutoPilotControlManager.sendDetouring(isChecked) - FunctionBuildConfig.isDetouring = isChecked - } - + private fun demoSetting(){ // 演示模式,上一次勾选的数据 scDemoMode.isChecked = FunctionBuildConfig.isDemoMode scDemoMode.setOnCheckedChangeListener { compoundButton, isChecked -> @@ -480,6 +475,34 @@ internal class SOPSettingView @JvmOverloads constructor( scDemoMode.isEnabled = false } + //是否展示被动触发的录包弹窗(自动驾驶下出现问题触发的录包) + scShowBagRecordWindow.isChecked = FunctionBuildConfig.isShowBagRecordWindow + scShowBagRecordWindow.setOnCheckedChangeListener { _, isChecked -> + FunctionBuildConfig.isShowBagRecordWindow = isChecked + hmiAction("SOP 是否展示录包弹窗, ", isChecked) + } + + //接管提醒 + scTakeOverRemind.isChecked = FunctionBuildConfig.isTakeoverRemind + scTakeOverRemind.setOnCheckedChangeListener { _, isChecked -> + FunctionBuildConfig.isTakeoverRemind = isChecked + hmiAction("SOP 是否展示接管提醒, ", isChecked) + } + + } + + /** + * 与车相关类设置 + */ + private fun vehicleSetting() { + //绕障类功能 + scObstacleAvoidance.isChecked = FunctionBuildConfig.isDetouring + scObstacleAvoidance.setOnCheckedChangeListener { _, isChecked -> + hmiAction("SOP 绕障类功能开关, ", isChecked) + CallerAutoPilotControlManager.sendDetouring(isChecked) + FunctionBuildConfig.isDetouring = isChecked + } + // 雨天模式,上一次勾选的数据 scRainMode.isChecked = FunctionBuildConfig.isRainMode scRainMode.setOnCheckedChangeListener { compoundButton, isChecked -> @@ -539,10 +562,87 @@ internal class SOPSettingView @JvmOverloads constructor( hmiAction("SOP 融合模式, ", FunctionBuildConfig.fusionMode) CallerAutoPilotControlManager.sendFusionMode(FunctionBuildConfig.fusionMode) } + + //变道绕障的目标障碍物速度阈值 + tvSpeed.text = "${FunctionBuildConfig.detouringSpeed} m/s" + ivSpeedReduce.setOnClickListener { + if (FunctionBuildConfig.detouringSpeed <= 3) { + ToastUtils.showShort("阈值最小可为3 m/s") + } else { + FunctionBuildConfig.detouringSpeed-- + tvSpeed.text = "${FunctionBuildConfig.detouringSpeed} m/s" + } + hmiAction("SOP 变道绕障的目标障碍物速度阈值", FunctionBuildConfig.detouringSpeed) + } + ivSpeedAdd.setOnClickListener { + if (FunctionBuildConfig.detouringSpeed >= 7) { + ToastUtils.showShort("阈值最大可为7 m/s") + } else { + FunctionBuildConfig.detouringSpeed++ + tvSpeed.text = "${FunctionBuildConfig.detouringSpeed} m/s" + } + hmiAction("SOP 变道绕障的目标障碍物速度阈值", FunctionBuildConfig.detouringSpeed) + } + btnSpeedSet.setOnClickListener { + val isSuccess = + CallerAutoPilotControlManager.sendDetouringSpeed(FunctionBuildConfig.detouringSpeed.toDouble()) + if (isSuccess == true) { + ToastUtils.showShort("变道绕障的目标障碍物速度阈值设置成功") + hmiAction("SOP 变道绕障的目标障碍物速度阈值设置", "成功") + } else { + ToastUtils.showShort("变道绕障的目标障碍物速度阈值设置失败") + hmiAction("SOP 变道绕障的目标障碍物速度阈值设置", "失败") + } + } + + ivSpeedOverTakeReduce.setOnClickListener { + if (FunctionBuildConfig.overTakeSpeed <= 3) { + ToastUtils.showShort("阈值最小可为3 m/s") + } else { + FunctionBuildConfig.overTakeSpeed -= 0.5f + tvOverTakeLimit.text = "${FunctionBuildConfig.overTakeSpeed} m/s" + } + hmiAction("SOP 超车目标障碍物速度阈值", FunctionBuildConfig.overTakeSpeed) + } + ivSpeedOverTakeAdd.setOnClickListener { + if (FunctionBuildConfig.overTakeSpeed >= 12.5) { + ToastUtils.showShort("阈值最大可为12.5 m/s") + } else { + FunctionBuildConfig.overTakeSpeed += 0.5f + tvOverTakeLimit.text = "${FunctionBuildConfig.overTakeSpeed} m/s" + } + hmiAction("SOP 超车目标障碍物速度阈值", FunctionBuildConfig.overTakeSpeed) + } + btnSpeedOverTakeSet.setOnClickListener { + val isSuccess = + CallerAutoPilotControlManager.sendOvertakeMaxSpeed(FunctionBuildConfig.overTakeSpeed.toDouble()) + if (isSuccess == true) { + ToastUtils.showShort("SOP 超车目标障碍物速度阈值设置成功") + hmiAction("SOP 超车目标障碍物速度阈值设置", "成功") + } else { + ToastUtils.showShort("SOP 超车目标障碍物速度阈值设置失败") + hmiAction("SOP 超车目标障碍物速度阈值设置", "失败") + } + } + + if (AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)) { + tvSpeedThresholdTitle.visibility = View.GONE + ivSpeedReduce.visibility = View.GONE + tvSpeed.visibility = View.GONE + ivSpeedAdd.visibility = View.GONE + btnSpeedSet.visibility = View.GONE + + tvSpeedOverTakeLimit.visibility = View.GONE + ivSpeedOverTakeReduce.visibility = View.GONE + tvOverTakeLimit.visibility = View.GONE + ivSpeedOverTakeAdd.visibility = View.GONE + btnSpeedOverTakeSet.visibility = View.GONE + } + } - private var overTakeEditText: String = "" - private var overTakeEditDel = false +// private var overTakeEditText: String = "" +// private var overTakeEditDel = false /** * 其他类别开关设置 @@ -633,17 +733,10 @@ internal class SOPSettingView @JvmOverloads constructor( it.isChecked = CallerHmiManager.isTaxiUnmanedDriverLineRoutingVerifyMode() } else { it.isEnabled = false - it.visibility = View.GONE + it.visibility = View.INVISIBLE } } - //是否展示被动触发的录包弹窗(自动驾驶下出现问题触发的录包) - scShowBagRecordWindow.isChecked = FunctionBuildConfig.isShowBagRecordWindow - scShowBagRecordWindow.setOnCheckedChangeListener { _, isChecked -> - FunctionBuildConfig.isShowBagRecordWindow = isChecked - hmiAction("SOP 是否展示被动触发的录包弹窗, ", isChecked) - } - // 清扫车业务模式切换 scSweeperModeSwitch?.also { switchView -> switchView.isChecked = @@ -686,82 +779,6 @@ internal class SOPSettingView @JvmOverloads constructor( } } - //变道绕障的目标障碍物速度阈值 - tvSpeed.text = "${FunctionBuildConfig.detouringSpeed} m/s" - ivSpeedReduce.setOnClickListener { - if (FunctionBuildConfig.detouringSpeed <= 3) { - ToastUtils.showShort("阈值最小可为3 m/s") - } else { - FunctionBuildConfig.detouringSpeed-- - tvSpeed.text = "${FunctionBuildConfig.detouringSpeed} m/s" - } - hmiAction("SOP 变道绕障的目标障碍物速度阈值", FunctionBuildConfig.detouringSpeed) - } - ivSpeedAdd.setOnClickListener { - if (FunctionBuildConfig.detouringSpeed >= 7) { - ToastUtils.showShort("阈值最大可为7 m/s") - } else { - FunctionBuildConfig.detouringSpeed++ - tvSpeed.text = "${FunctionBuildConfig.detouringSpeed} m/s" - } - hmiAction("SOP 变道绕障的目标障碍物速度阈值", FunctionBuildConfig.detouringSpeed) - } - btnSpeedSet.setOnClickListener { - val isSuccess = - CallerAutoPilotControlManager.sendDetouringSpeed(FunctionBuildConfig.detouringSpeed.toDouble()) - if (isSuccess == true) { - ToastUtils.showShort("变道绕障的目标障碍物速度阈值设置成功") - hmiAction("SOP 变道绕障的目标障碍物速度阈值设置", "成功") - } else { - ToastUtils.showShort("变道绕障的目标障碍物速度阈值设置失败") - hmiAction("SOP 变道绕障的目标障碍物速度阈值设置", "失败") - } - } - - ivSpeedOverTakeReduce.setOnClickListener { - if (FunctionBuildConfig.overTakeSpeed <= 3) { - ToastUtils.showShort("阈值最小可为3 m/s") - } else { - FunctionBuildConfig.overTakeSpeed -= 0.5f - tvOverTakeLimit.text = "${FunctionBuildConfig.overTakeSpeed} m/s" - } - hmiAction("SOP 超车目标障碍物速度阈值", FunctionBuildConfig.overTakeSpeed) - } - ivSpeedOverTakeAdd.setOnClickListener { - if (FunctionBuildConfig.overTakeSpeed >= 12.5) { - ToastUtils.showShort("阈值最大可为12.5 m/s") - } else { - FunctionBuildConfig.overTakeSpeed += 0.5f - tvOverTakeLimit.text = "${FunctionBuildConfig.overTakeSpeed} m/s" - } - hmiAction("SOP 超车目标障碍物速度阈值", FunctionBuildConfig.overTakeSpeed) - } - btnSpeedOverTakeSet.setOnClickListener { - val isSuccess = - CallerAutoPilotControlManager.sendOvertakeMaxSpeed(FunctionBuildConfig.overTakeSpeed.toDouble()) - if (isSuccess == true) { - ToastUtils.showShort("SOP 超车目标障碍物速度阈值设置成功") - hmiAction("SOP 超车目标障碍物速度阈值设置", "成功") - } else { - ToastUtils.showShort("SOP 超车目标障碍物速度阈值设置失败") - hmiAction("SOP 超车目标障碍物速度阈值设置", "失败") - } - } - - if (AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)) { - tvSpeedThresholdTitle.visibility = View.GONE - ivSpeedReduce.visibility = View.GONE - tvSpeed.visibility = View.GONE - ivSpeedAdd.visibility = View.GONE - btnSpeedSet.visibility = View.GONE - - tvSpeedOverTakeLimit.visibility = View.GONE - ivSpeedOverTakeReduce.visibility = View.GONE - tvOverTakeLimit.visibility = View.GONE - ivSpeedOverTakeAdd.visibility = View.GONE - btnSpeedOverTakeSet.visibility = View.GONE - } - val virtualTaskPullTaskInterval = CallerUnmannedListenerManager.getVirtualTaskPullTaskInterval() rbFive.isChecked = virtualTaskPullTaskInterval == 5 rbFifteen.isChecked = virtualTaskPullTaskInterval == 15 diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/vehicle/TakeOverView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/vehicle/TakeOverView.kt index 5f1b0836e3..e65679db5c 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/vehicle/TakeOverView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/vehicle/TakeOverView.kt @@ -240,7 +240,7 @@ class TakeOverView @JvmOverloads constructor( */ private fun showM1ParallelDrivingWarning(poiType: String,content: String,tts: String){ //异常提醒均在开启美化模式后不弹出、不语音提示 - if(!FunctionBuildConfig.isDemoMode){ + if(!FunctionBuildConfig.isDemoMode && FunctionBuildConfig.isTakeoverRemind){ //消息盒子提示 saveMsgBox( MsgBoxBean( @@ -270,7 +270,7 @@ class TakeOverView @JvmOverloads constructor( } private fun showParallelDrivingWarning(poiType: String,content: String,tts: String){ - if(!FunctionBuildConfig.isDemoMode){ + if(!FunctionBuildConfig.isDemoMode && FunctionBuildConfig.isTakeoverRemind){ //异常提醒均在开启美化模式后不弹出、不语音提示 //消息盒子提示 saveMsgBox( diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_sop_setting.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_sop_setting.xml index 92488dd246..3824188819 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_sop_setting.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_sop_setting.xml @@ -286,6 +286,92 @@ + + + + + + + + + + + + + + + + + + + + + - - + + app:layout_constraintLeft_toLeftOf="@id/vehicleGuideLine" + app:layout_constraintRight_toRightOf="parent" + app:layout_constraintTop_toBottomOf="@id/tvVehicleTitle" /> + app:layout_constraintTop_toBottomOf="@id/scRainMode" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + app:layout_constraintTop_toBottomOf="@id/rgFusionMode"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + app:layout_constraintTop_toBottomOf="@+id/rgPullTime">