From fe27a3a8e96e76400f8f25f45180946d490a4cf0 Mon Sep 17 00:00:00 2001 From: renwj Date: Thu, 24 Mar 2022 14:17:15 +0800 Subject: [PATCH 01/55] =?UTF-8?q?[feedback]=E4=BF=AE=E6=AD=A3=E7=BB=93?= =?UTF-8?q?=E6=9D=9F=E5=9B=9E=E8=B0=83=E6=94=B6=E4=B8=8D=E5=88=B0=E5=9B=9E?= =?UTF-8?q?=E8=B0=83=E7=9A=84=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mogo_core_function_devatools/feedback/FeedbackManager.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/feedback/FeedbackManager.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/feedback/FeedbackManager.kt index cc3715ec27..11561e43b0 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/feedback/FeedbackManager.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/feedback/FeedbackManager.kt @@ -73,12 +73,13 @@ internal object FeedbackManager { TipToast.shortTip("请选择一个Case") return } + record.scope.launch { val taskId = presenter.getBadCaseTaskId() val listener = object : IMoGoAutopilotIdentifyListener { override fun onAutopilotRecordResult(recordPanel: RecordPanelOuterClass.RecordPanel) { super.onAutopilotRecordResult(recordPanel) - launch { + record.scope.launch { val newRecord = recordPanel.toRecord() CallerLogger.d("${M_DEVA}${TAG}", "-- 收到工控机录制任务回调 -- $recordPanel") if (newRecord.type == 1 && newRecord.id == taskId) { From 01fc438a61136dde215791a8b5b73e0ff0700117 Mon Sep 17 00:00:00 2001 From: donghongyu Date: Thu, 24 Mar 2022 14:26:39 +0800 Subject: [PATCH 02/55] =?UTF-8?q?[Change]=20=E4=BF=AE=E5=A4=8D=E5=BC=B9?= =?UTF-8?q?=E7=AA=97=E6=8F=90=E7=A4=BAbug=20The=20specified=20child=20alre?= =?UTF-8?q?ady=20has=20a=20parent.=20You=20must=20call=20removeView()=20on?= =?UTF-8?q?=20the=20child's=20parent=20first.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: donghongyu --- README_shell.md | 2 +- .../notification/WarningFloatWindowHelper.kt | 20 +++++++++++-------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/README_shell.md b/README_shell.md index 7c590f74af..b060af0060 100644 --- a/README_shell.md +++ b/README_shell.md @@ -19,7 +19,7 @@ adb pull /sdcard/Android/data/com.mogo.launcher.f/log/20211022 // (新的HMI)使用命令行触发 V2X 预警场景 // 顶部弹窗场景,控制展示 -adb shell am broadcast -a com.hmi.v2x.notification --ez v2xIsShow true --es tag "200011" --ei v2xType 20011 --es alertContent "测试外部传入数据" --es ttsContent "测试TTS" +adb shell am broadcast -a com.hmi.v2x.notification --ez v2xIsShow true --es tag "200012" --ei v2xType 20012 --es alertContent "测试外部传入数据2" --es ttsContent "测试TTS2" // 关闭顶部弹窗 adb shell am broadcast -a com.hmi.v2x.notification --ez v2xIsShow false --es tag "200011" diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/notification/WarningFloatWindowHelper.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/notification/WarningFloatWindowHelper.kt index 040628e086..564e7b4aac 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/notification/WarningFloatWindowHelper.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/notification/WarningFloatWindowHelper.kt @@ -7,17 +7,15 @@ import android.app.Service import android.content.Context import android.graphics.PixelFormat import android.graphics.Rect -import android.view.Gravity -import android.view.LayoutInflater -import android.view.View -import android.view.WindowManager -import com.mogo.eagle.core.function.hmi.notification.anim.AnimatorManager +import android.view.* import com.mogo.eagle.core.data.enums.ShowPattern +import com.mogo.eagle.core.function.hmi.notification.anim.AnimatorManager import com.mogo.eagle.core.function.hmi.notification.widget.ParentFrameLayout 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.WindowUtils + /** * @author donghongyu * @date 2021/8/5 5:29 下午 @@ -89,12 +87,18 @@ internal class WarningFloatWindowHelper( frameLayout = ParentFrameLayout(context, config) frameLayout?.tag = config.floatTag // 将浮窗布局文件添加到父容器frameLayout中,并返回该浮窗文件 - val floatingView = config.layoutView?.also { frameLayout?.addView(it) } - ?: LayoutInflater.from(context).inflate(config.layoutId!!, frameLayout, true) + val floatingView = config.layoutView?.also { + try { + val parent = (it.parent as ViewGroup) + parent.removeView(it) + } catch (e: Exception) { + e.printStackTrace() + } + frameLayout?.addView(it) + } ?: LayoutInflater.from(context).inflate(config.layoutId!!, frameLayout, true) // 为了避免创建的时候闪一下,我们先隐藏视图,不能直接设置GONE,否则定位会出现问题 floatingView.visibility = View.INVISIBLE // 将frameLayout添加到系统windowManager中 - windowManager.addView(frameLayout, params) // 在浮窗绘制完成的时候,设置初始坐标、执行入场动画 From 2aff9cab16708c40236d5e35c667fd82251ec771 Mon Sep 17 00:00:00 2001 From: lixiaopeng Date: Thu, 24 Mar 2022 14:39:58 +0800 Subject: [PATCH 03/55] opt --- .../core/function/main/MainMoGoApplication.java | 2 +- .../function/obu/mogo/MogoPrivateObuManager.kt | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/core/function-impl/mogo-core-function-main/src/main/java/com/mogo/eagle/core/function/main/MainMoGoApplication.java b/core/function-impl/mogo-core-function-main/src/main/java/com/mogo/eagle/core/function/main/MainMoGoApplication.java index 1736c94d14..2c5518a4b8 100644 --- a/core/function-impl/mogo-core-function-main/src/main/java/com/mogo/eagle/core/function/main/MainMoGoApplication.java +++ b/core/function-impl/mogo-core-function-main/src/main/java/com/mogo/eagle/core/function/main/MainMoGoApplication.java @@ -341,7 +341,7 @@ public abstract class MainMoGoApplication extends AbsMogoApplication { // 调度 MogoModulePaths.addBaseModule(new MogoModule(MogoServicePaths.PATH_AI_DISPATCH, "IDispatchProvider")); // V2X 模块 - MogoModulePaths.addBaseModule(new MogoModule(MogoServicePaths.PATH_V2X_MODULE, "V2XProvider")); +// MogoModulePaths.addBaseModule(new MogoModule(MogoServicePaths.PATH_V2X_MODULE, "V2XProvider")); // 自动驾驶系统检测模块 MogoModulePaths.addBaseModule(new MogoModule(MogoServicePaths.PATH_CHECK, "CheckProvider")); // 推送模块 diff --git a/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuManager.kt b/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuManager.kt index befc31de96..c3538bfb40 100644 --- a/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuManager.kt +++ b/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuManager.kt @@ -2,6 +2,7 @@ package com.mogo.eagle.core.function.obu.mogo import android.content.Context import android.telecom.Call +import android.util.Log import com.alibaba.android.arouter.launcher.ARouter import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.data.constants.MogoServicePaths @@ -394,6 +395,18 @@ class MogoPrivateObuManager private constructor() { && info.ext_info.lights != null && info.ext_info.lights.isNotEmpty() ) { + //v2i数据传输延迟 + val hvTime = info.threat_info.hv_time.millisecond + val currentTime = TimeUtils.getNowMills() + val delayTime = currentTime - hvTime + //TODO + Log.e("liyz", "onCvxIvpThreatIndInfo hvTime---> $hvTime --- currentTime = $currentTime") + CallerObuListenerManager.invokeDelayTime(delayTime) + CallerLogger.e( + "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", + "onCvxIvpThreatIndInfo red ---delayTime---> $delayTime" + ) + handlerTrafficLight( info.threat_info.app_id, info.status, @@ -405,6 +418,7 @@ class MogoPrivateObuManager private constructor() { // (2) 弱势交通参与者预警信息:CVX_PTC_THREAT_IND override fun onCvxPtcThreatIndInfo(info: CvxPtcThreatIndInfo?) { + Log.e("liyz", "onCvxPtcThreatIndInfo ---> $info") CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "onCvxPtcInfoIndInfo ------> $info") // 交通参与者类型 0x0:未知 UNKNOWN | 0x1:非机动车 NON_MOTOR | 0x2:行人 PEDESTRIAN 0x3:RSU if (info != null && (info.ptc_type == 1 || info.ptc_type == 2)) { @@ -412,8 +426,8 @@ class MogoPrivateObuManager private constructor() { val hvTime = info.threat_info.hv_time.millisecond val currentTime = TimeUtils.getNowMills() val delayTime = currentTime - hvTime + Log.e("liyz", "onCvxPtcThreatIndInfo hvTime---> $hvTime --- currentTime = $currentTime") CallerObuListenerManager.invokeDelayTime(delayTime) - CallerLogger.d( "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "onCvxPtcInfoIndInfo ---delayTime---> $delayTime" From ea68c4e28ddfe8d9207cac348ef6f690bb944fcc Mon Sep 17 00:00:00 2001 From: renwj Date: Thu, 24 Mar 2022 15:11:33 +0800 Subject: [PATCH 04/55] =?UTF-8?q?[feedback]=E4=BF=AE=E6=AD=A3=E4=B8=BB?= =?UTF-8?q?=E5=8A=A8=E5=8F=8D=E9=A6=88=E9=A1=B5=E9=9D=A2=E5=B1=95=E7=A4=BA?= =?UTF-8?q?=E6=97=B6=E8=A7=A6=E5=8F=91=E7=BB=93=E6=9D=9F=E5=BD=95=E5=88=B6?= =?UTF-8?q?=EF=BC=8C=E5=AF=BC=E8=87=B4=E5=BA=95=E9=83=A8badcase=E5=85=A5?= =?UTF-8?q?=E5=8F=A3=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../badcase/BadCaseManager.kt | 22 +++++++++++++++++++ .../ext/BadCaseExt.kt | 5 +++++ .../feedback/FeedbackManager.kt | 10 +++++---- 3 files changed, 33 insertions(+), 4 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 8cd418c3d7..b62708c6ac 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 @@ -18,6 +18,9 @@ import com.mogo.eagle.core.utilcode.kotlin.PX import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.kotlin.lifecycleOwner import com.mogo.eagle.core.utilcode.kotlin.onClick +import com.mogo.eagle.core.utilcode.reminder.Reminder +import com.mogo.eagle.core.utilcode.reminder.api.IReminder +import com.mogo.eagle.core.utilcode.reminder.api.IReminder.IGlobalStateChangeListener import com.zhjt.mogo_core_function_devatools.badcase.repository.net.api.entity.BadCaseResponse.Reason import com.zhjt.mogo_core_function_devatools.badcase.biz.BadCasePresenter import com.zhjt.mogo_core_function_devatools.badcase.biz.BadCaseView @@ -55,6 +58,9 @@ internal object BadCaseManager : LifecycleEventObserver { @Volatile private var dismissJob: Job? = null + @Volatile + private var feedbackFloatShow = false + @OptIn(ExperimentalCoroutinesApi::class) private var channel: Channel = Channel(Channel.RENDEZVOUS) get() = if (field.isClosedForReceive || field.isClosedForSend) { @@ -89,6 +95,19 @@ internal object BadCaseManager : LifecycleEventObserver { @OptIn(ExperimentalCoroutinesApi::class) private fun register() { scope?.launch(Dispatchers.Default) { + Reminder.registerGlobalStateChangeListener(object : IGlobalStateChangeListener { + override fun onShow(reminder: IReminder) { + if (reminder.key().startsWith("FeedBackFloatWindow_")) { + feedbackFloatShow = true + } + } + + override fun onHide(reminder: IReminder) { + if (reminder.key().startsWith("FeedBackFloatWindow_")) { + feedbackFloatShow = false + } + } + }) while (true) { CallerLogger.d("$M_DEVA$TAG", "---- 开始监听BadCase事件 ----") val old = record @@ -172,6 +191,9 @@ internal object BadCaseManager : LifecycleEventObserver { } fun onReceiveBadCaseRecord(record: RecordPanelOuterClass.RecordPanel) { + if (feedbackFloatShow) { + return + } scope?.launch { val newRecord = record.toRecord() withContext(Dispatchers.IO) { diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/ext/BadCaseExt.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/ext/BadCaseExt.kt index 55d9da26a5..113108fb86 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/ext/BadCaseExt.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/ext/BadCaseExt.kt @@ -118,6 +118,11 @@ internal fun Context.pop(content: View, width: Int, height: Int, fitSystemWindow } pop.contentView = content val reminder = object : PopupWindowReminder(pop) { + + override fun key(): String { + return "FeedBackFloatWindow_" + super.key() + } + override fun show() { pop.showAtLocation(activity.window.decorView, Gravity.START, 0, if (fitSystemWindow) WindowUtils.getStatusBarHeight(activity) else 0) } diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/feedback/FeedbackManager.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/feedback/FeedbackManager.kt index 11561e43b0..a003fb0338 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/feedback/FeedbackManager.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/feedback/FeedbackManager.kt @@ -2,7 +2,6 @@ package com.zhjt.mogo_core_function_devatools.feedback import android.content.Context import android.text.TextUtils -import android.util.Log import android.view.View import android.view.WindowManager import android.widget.TextView @@ -14,13 +13,11 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotIdentifyListen import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager 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 import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_DEVA import com.mogo.eagle.core.utilcode.mogo.toast.TipToast import com.mogo.eagle.core.utilcode.util.KeyboardUtils import com.mogo.eagle.core.utilcode.util.ThreadUtils import com.zhjt.mogo_core_function_devatools.R -import com.zhjt.mogo_core_function_devatools.badcase.BadCaseManager import com.zhjt.mogo_core_function_devatools.badcase.repository.db.entity.AutoPilotRecord import com.zhjt.mogo_core_function_devatools.badcase.repository.net.api.entity.BadCaseResponse.Reason import com.zhjt.mogo_core_function_devatools.badcase.toRecord @@ -32,7 +29,10 @@ import com.zhjt.mogo_core_function_devatools.feedback.biz.impl.FeedbackPresenter import com.zhjt.mogo_core_function_devatools.feedback.callback.IFeedbackCallback import kotlinx.coroutines.* import record_cache.RecordPanelOuterClass +import java.io.File import java.lang.IllegalStateException +import java.text.SimpleDateFormat +import java.util.* import kotlin.Result.Companion internal object FeedbackManager { @@ -161,8 +161,10 @@ internal object FeedbackManager { } private fun startRecordLog(record: AutoPilotRecord) { + val prefix = record.fileName?.split(File.separator)?.last() ?: "BadCase_${SimpleDateFormat("yyyy_MM_dd-HH_mm_ss", Locale.getDefault()).format(Date())}" CallerLogger.d("${M_DEVA}${TAG}", "录制Bag开始, 触发录制全量日志 ...") - CallerDevaToolsManager.startCatchLog(1,record.fileName) + CallerLogger.d("${M_DEVA}${TAG}", "全量日志前缀: $prefix") + CallerDevaToolsManager.startCatchLog(1, prefix) } private fun stopRecordLog(newRecord: AutoPilotRecord) { From 5a934c1289f99f947ab9b25397e4d121f3da79c8 Mon Sep 17 00:00:00 2001 From: renwj Date: Thu, 24 Mar 2022 15:32:09 +0800 Subject: [PATCH 05/55] =?UTF-8?q?[feedback]=E4=BC=98=E5=8C=96=E5=85=A8?= =?UTF-8?q?=E9=87=8F=E6=97=A5=E5=BF=97=E6=96=87=E4=BB=B6=E5=90=8D=E5=89=8D?= =?UTF-8?q?=E7=BC=80=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mogo_core_function_devatools/feedback/FeedbackManager.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/feedback/FeedbackManager.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/feedback/FeedbackManager.kt index a003fb0338..f781740f7e 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/feedback/FeedbackManager.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/feedback/FeedbackManager.kt @@ -161,7 +161,7 @@ internal object FeedbackManager { } private fun startRecordLog(record: AutoPilotRecord) { - val prefix = record.fileName?.split(File.separator)?.last() ?: "BadCase_${SimpleDateFormat("yyyy_MM_dd-HH_mm_ss", Locale.getDefault()).format(Date())}" + val prefix = record.fileName?.split(File.separator)?.last()?.substringBeforeLast(".")?.let { "BadCase-$it" } ?: "BadCase-${SimpleDateFormat("yyyy-MM-dd-HH-mm-ss", Locale.getDefault()).format(Date())}" CallerLogger.d("${M_DEVA}${TAG}", "录制Bag开始, 触发录制全量日志 ...") CallerLogger.d("${M_DEVA}${TAG}", "全量日志前缀: $prefix") CallerDevaToolsManager.startCatchLog(1, prefix) From d4a4d41e4fe90f23d5bdcc0546d5565c8b532fe3 Mon Sep 17 00:00:00 2001 From: xuxinchao <13522809046@163.com> Date: Thu, 24 Mar 2022 16:00:40 +0800 Subject: [PATCH 06/55] =?UTF-8?q?=E8=B0=83=E8=AF=95=E7=AA=97=E6=9B=B4?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1、增加日志过滤标签,对标签选中状态进行初始化 2、修改控制中心二级菜单边框颜色 --- .../scene/SceneManager.kt | 2 +- .../hmi/ui/setting/DebugSettingView.kt | 72 ++++++++++++++++++- .../setting_toggle_button_background.xml | 15 ++++ .../main/res/layout/view_debug_setting.xml | 61 ++++++++++++++-- 4 files changed, 142 insertions(+), 8 deletions(-) create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable/setting_toggle_button_background.xml diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/scene/SceneManager.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/scene/SceneManager.kt index 55205d11a9..5baadf1dc3 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/scene/SceneManager.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/scene/SceneManager.kt @@ -45,7 +45,7 @@ class SceneManager { private var sceneModuleTAG: SceneModuleTAG = SceneModuleTAG(mutableMapOf()) private var sceneLogTAG: SceneLogTAG = SceneLogTAG(mutableMapOf()) - fun init() { + init { //过滤所需条件 sceneModuleTAG.map[ADAS] = SceneModule(true, M_ADAS_IMPL) sceneModuleTAG.map[DEVA] = SceneModule(true, M_DEVA) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt index 0b58988782..667edf6428 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt @@ -794,6 +794,39 @@ class DebugSettingView @JvmOverloads constructor( * 设置日志点击监听 */ private fun setLogCheckedChangeListener(){ + //初始化标签选中状态 + val tagMap=CallerDevaToolsManager.getModuleTAG() + tagMap?.let { + it.iterator().forEach {map -> + val name = map.value.name + val log = map.value.log + when(name){ + ////ADAS日志标签 + SceneConstant.M_ADAS_IMPL-> cbAdasLog.isChecked = log + //OBU日志标签 + SceneConstant.M_OBU-> cbObuLog.isChecked = log + //HMI日志标签 + SceneConstant.M_HMI-> cbHmiLog.isChecked = log + //V2X日志标签 + SceneConstant.M_V2X-> cbV2xLog.isChecked = log + //地图日志标签 + SceneConstant.M_MAP-> cbMapLog.isChecked = log + //DEVA日志标签 + SceneConstant.M_DEVA-> cbDevaLog.isChecked = log + //网络模块日志标签 + SceneConstant.M_NETWORK-> cbNetworkLog.isChecked = log + //ROUTE日志标签 + SceneConstant.M_OLD_ROUTE-> cbOldRouteLog.isChecked = log + //BUS日志标签 + SceneConstant.M_BUS-> cbBusLog.isChecked = log + //TAXI日志标签 + SceneConstant.M_TAXI-> cbTaxiLog.isChecked = log + //TAXI_P日志标签 + SceneConstant.M_TAXI_P-> cbTaxiPLog.isChecked = log + } + } + } + /** * 打开、关闭鹰眼Log */ @@ -852,9 +885,42 @@ class DebugSettingView @JvmOverloads constructor( sceneMap[SceneConstant.M_MAP] = mapModule CallerDevaToolsManager.updateModuleTAG(sceneMap) } - - - + //DEVA日志标签 + cbDevaLog.setOnCheckedChangeListener { _, isChecked -> + val devaModule = SceneModule(isChecked,SceneConstant.M_DEVA) + sceneMap[SceneConstant.M_DEVA] = devaModule + CallerDevaToolsManager.updateModuleTAG(sceneMap) + } + //网络模块日志标签 + cbNetworkLog.setOnCheckedChangeListener { _, isChecked -> + val networkModule = SceneModule(isChecked,SceneConstant.M_NETWORK) + sceneMap[SceneConstant.M_NETWORK] = networkModule + CallerDevaToolsManager.updateModuleTAG(sceneMap) + } + //ROUTE日志标签 + cbOldRouteLog.setOnCheckedChangeListener { _, isChecked -> + val oldRouteModule = SceneModule(isChecked,SceneConstant.M_OLD_ROUTE) + sceneMap[SceneConstant.M_OLD_ROUTE] = oldRouteModule + CallerDevaToolsManager.updateModuleTAG(sceneMap) + } + //BUS日志标签 + cbBusLog.setOnCheckedChangeListener { _, isChecked -> + val busModule = SceneModule(isChecked,SceneConstant.M_BUS) + sceneMap[SceneConstant.M_BUS] = busModule + CallerDevaToolsManager.updateModuleTAG(sceneMap) + } + //TAXI日志标签 + cbTaxiLog.setOnCheckedChangeListener { _, isChecked -> + val taxiModule = SceneModule(isChecked,SceneConstant.M_TAXI) + sceneMap[SceneConstant.M_TAXI] = taxiModule + CallerDevaToolsManager.updateModuleTAG(sceneMap) + } + //TAXI_P日志标签 + cbTaxiPLog.setOnCheckedChangeListener { _, isChecked -> + val taxiPModule = SceneModule(isChecked,SceneConstant.M_TAXI_P) + sceneMap[SceneConstant.M_TAXI_P] = taxiPModule + CallerDevaToolsManager.updateModuleTAG(sceneMap) + } //开始停止抓取全量日志 tbLogCatch.isChecked = diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/setting_toggle_button_background.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/setting_toggle_button_background.xml new file mode 100644 index 0000000000..f977e253e9 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/setting_toggle_button_background.xml @@ -0,0 +1,15 @@ + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_debug_setting.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_debug_setting.xml index 512efa5bde..10d9db207d 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_debug_setting.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_debug_setting.xml @@ -538,7 +538,7 @@ android:layout_height="wrap_content" android:textOff="域控制器" android:textOn="域控制器" - android:background="@drawable/radio_button_normal_background_right" + android:background="@drawable/setting_toggle_button_background" android:drawableEnd="@drawable/icon_right" android:padding="@dimen/dp_20" android:layout_margin="@dimen/dp_10" @@ -783,7 +783,7 @@ android:layout_height="wrap_content" android:textOff="OBU" android:textOn="OBU" - android:background="@drawable/radio_button_normal_background_right" + android:background="@drawable/setting_toggle_button_background" android:drawableEnd="@drawable/icon_right" android:padding="@dimen/dp_20" android:layout_margin="@dimen/dp_10" @@ -867,7 +867,7 @@ android:layout_height="wrap_content" android:textOff="HMI控制" android:textOn="HMI控制" - android:background="@drawable/radio_button_normal_background_right" + android:background="@drawable/setting_toggle_button_background" android:drawableEnd="@drawable/icon_right" android:padding="@dimen/dp_20" android:layout_margin="@dimen/dp_10" @@ -973,7 +973,7 @@ android:layout_height="wrap_content" android:textOff="HD地图控制" android:textOn="HD地图控制" - android:background="@drawable/radio_button_normal_background_right" + android:background="@drawable/setting_toggle_button_background" android:drawableEnd="@drawable/icon_right" android:padding="@dimen/dp_20" android:layout_margin="@dimen/dp_10" @@ -1427,6 +1427,59 @@ style="@style/DebugSettingText" /> + + + + + + + + + + + From 40ab4b108355adb65e26c388d5f2e22f6f0d695a Mon Sep 17 00:00:00 2001 From: lixiaopeng Date: Thu, 24 Mar 2022 16:00:46 +0800 Subject: [PATCH 07/55] opt --- .../network/BindingcarNetWorkManager.java | 4 ++-- .../function/main/MainMoGoApplication.java | 2 +- .../obu/mogo/MogoPrivateObuManager.kt | 21 ++++++++++++------- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/core/function-impl/mogo-core-function-bindingcar/src/main/java/com/mogo/eagle/core/function/bindingcar/network/BindingcarNetWorkManager.java b/core/function-impl/mogo-core-function-bindingcar/src/main/java/com/mogo/eagle/core/function/bindingcar/network/BindingcarNetWorkManager.java index 7e2ee35355..4d2873bdc4 100644 --- a/core/function-impl/mogo-core-function-bindingcar/src/main/java/com/mogo/eagle/core/function/bindingcar/network/BindingcarNetWorkManager.java +++ b/core/function-impl/mogo-core-function-bindingcar/src/main/java/com/mogo/eagle/core/function/bindingcar/network/BindingcarNetWorkManager.java @@ -54,7 +54,7 @@ public class BindingcarNetWorkManager { */ public void getBindingcarInfo(String macAddress) { String sn = MoGoAiCloudClientConfig.getInstance().getSn(); - BindingcarRequest request = new BindingcarRequest(sn, "48:b0:2d:3a:9c:19"); + BindingcarRequest request = new BindingcarRequest("48:b0:2d:3a:9c:19", sn); RequestBody requestBody = RequestBody.create(MediaType.get("application/json;charset=UTF-8"), GsonUtil.jsonFromObject(request)); mBindingcarApiService.getBindingcarInfo(requestBody) .subscribeOn(Schedulers.io()) @@ -95,7 +95,7 @@ public class BindingcarNetWorkManager { */ public void modifyBindingcar(String macAddress, BindingcarCallBack callBack) { String sn = MoGoAiCloudClientConfig.getInstance().getSn(); - BindingcarRequest request = new BindingcarRequest(sn, "48:b0:2d:3a:9c:19"); + BindingcarRequest request = new BindingcarRequest("48:b0:2d:3a:9c:19", sn); RequestBody requestBody = RequestBody.create(MediaType.get("application/json;charset=UTF-8"), GsonUtil.jsonFromObject(request)); mBindingcarApiService.modifyBindingcarInfo(requestBody) .subscribeOn(Schedulers.io()) diff --git a/core/function-impl/mogo-core-function-main/src/main/java/com/mogo/eagle/core/function/main/MainMoGoApplication.java b/core/function-impl/mogo-core-function-main/src/main/java/com/mogo/eagle/core/function/main/MainMoGoApplication.java index 2c5518a4b8..1736c94d14 100644 --- a/core/function-impl/mogo-core-function-main/src/main/java/com/mogo/eagle/core/function/main/MainMoGoApplication.java +++ b/core/function-impl/mogo-core-function-main/src/main/java/com/mogo/eagle/core/function/main/MainMoGoApplication.java @@ -341,7 +341,7 @@ public abstract class MainMoGoApplication extends AbsMogoApplication { // 调度 MogoModulePaths.addBaseModule(new MogoModule(MogoServicePaths.PATH_AI_DISPATCH, "IDispatchProvider")); // V2X 模块 -// MogoModulePaths.addBaseModule(new MogoModule(MogoServicePaths.PATH_V2X_MODULE, "V2XProvider")); + MogoModulePaths.addBaseModule(new MogoModule(MogoServicePaths.PATH_V2X_MODULE, "V2XProvider")); // 自动驾驶系统检测模块 MogoModulePaths.addBaseModule(new MogoModule(MogoServicePaths.PATH_CHECK, "CheckProvider")); // 推送模块 diff --git a/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuManager.kt b/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuManager.kt index c3538bfb40..24ae8b1e45 100644 --- a/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuManager.kt +++ b/core/function-impl/mogo-core-function-obu-mogo/src/main/java/com/mogo/eagle/core/function/obu/mogo/MogoPrivateObuManager.kt @@ -396,11 +396,13 @@ class MogoPrivateObuManager private constructor() { && info.ext_info.lights.isNotEmpty() ) { //v2i数据传输延迟 - val hvTime = info.threat_info.hv_time.millisecond - val currentTime = TimeUtils.getNowMills() + val hvMillTime = info.threat_info.hv_time.millisecond + val hvSecondMillTime = (info.threat_info.hv_time.second) * 1000 + val hvTime = hvMillTime + hvSecondMillTime + val currentTime = TimeUtils.getNowMills() % 60000 val delayTime = currentTime - hvTime - //TODO - Log.e("liyz", "onCvxIvpThreatIndInfo hvTime---> $hvTime --- currentTime = $currentTime") + +// Log.e("liyz", "onCvxIvpThreatIndInfo ---> currentTime = $currentTime ----- hvTime---> $hvTime ---hvMillTime = $hvMillTime ----hvSecondMillTime = $hvSecondMillTime ---delayTime---> $delayTime") CallerObuListenerManager.invokeDelayTime(delayTime) CallerLogger.e( "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", @@ -418,15 +420,18 @@ class MogoPrivateObuManager private constructor() { // (2) 弱势交通参与者预警信息:CVX_PTC_THREAT_IND override fun onCvxPtcThreatIndInfo(info: CvxPtcThreatIndInfo?) { - Log.e("liyz", "onCvxPtcThreatIndInfo ---> $info") CallerLogger.d("$M_OBU${MogoObuConst.TAG_MOGO_OBU}", "onCvxPtcInfoIndInfo ------> $info") // 交通参与者类型 0x0:未知 UNKNOWN | 0x1:非机动车 NON_MOTOR | 0x2:行人 PEDESTRIAN 0x3:RSU if (info != null && (info.ptc_type == 1 || info.ptc_type == 2)) { //v2i数据传输延迟 - val hvTime = info.threat_info.hv_time.millisecond - val currentTime = TimeUtils.getNowMills() + //v2i数据传输延迟 + val hvMillTime = info.threat_info.hv_time.millisecond + val hvSecondMillTime = (info.threat_info.hv_time.second) * 1000 + val hvTime = hvMillTime + hvSecondMillTime + val currentTime = TimeUtils.getNowMills() % 60000 val delayTime = currentTime - hvTime - Log.e("liyz", "onCvxPtcThreatIndInfo hvTime---> $hvTime --- currentTime = $currentTime") + +// Log.e("liyz", "onCvxPtcThreatIndInfo ---> currentTime = $currentTime ----- hvTime---> $hvTime ---hvMillTime = $hvMillTime ----hvSecondMillTime = $hvSecondMillTime ---delayTime---> $delayTime") CallerObuListenerManager.invokeDelayTime(delayTime) CallerLogger.d( "$M_OBU${MogoObuConst.TAG_MOGO_OBU}", From 1c7520fb7c9737d4d03c3b6a3fbb0eef29eb0021 Mon Sep 17 00:00:00 2001 From: chenfufeng Date: Thu, 24 Mar 2022 16:32:36 +0800 Subject: [PATCH 08/55] =?UTF-8?q?[Fix]=E8=A7=A3=E5=86=B3addObserver()?= =?UTF-8?q?=E4=B8=8D=E8=83=BD=E8=BF=90=E8=A1=8C=E5=9C=A8=E9=9D=9E=E4=B8=BB?= =?UTF-8?q?=E7=BA=BF=E7=A8=8B=E5=AF=BC=E8=87=B4=E7=9A=84crash=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/function/call/map/CallerVisualAngleManager.kt | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerVisualAngleManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerVisualAngleManager.kt index 04b6929298..4f77285e52 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerVisualAngleManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerVisualAngleManager.kt @@ -83,6 +83,16 @@ object CallerVisualAngleManager { } fun init(ctx: Context) { + if (Thread.currentThread() != Looper.getMainLooper().thread) { + scope.launch { + initListen(ctx) + } + } else { + initListen(ctx) + } + } + + private fun initListen(ctx: Context) { ctx.lifeCycleOwner.lifecycle.addObserver(object : LifecycleEventObserver { override fun onStateChanged(source: LifecycleOwner, event: Event) { if (event == ON_DESTROY) { From 58b9223dc643beac4b1f318ed4e47224364693a0 Mon Sep 17 00:00:00 2001 From: pangfan Date: Thu, 24 Mar 2022 16:47:31 +0800 Subject: [PATCH 09/55] =?UTF-8?q?[Bus/Taxi=20d=202.6.0]Taxi:=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E5=BC=80=E5=A7=8B=E6=9C=8D=E5=8A=A1=EF=BC=88=E5=BC=80?= =?UTF-8?q?=E5=90=AF=E8=87=AA=E5=8A=A8=E9=A9=BE=E9=A9=B6=EF=BC=89=E5=9F=8B?= =?UTF-8?q?=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mogo/och/taxi/constant/OCHTaxiConst.kt | 13 ++++- .../och/taxi/model/MogoOCHTaxiModelNew.java | 9 +++ .../och/taxi/utils/OchTaxiAnalyticsUtil.java | 55 +++++++++++++++++++ 3 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/utils/OchTaxiAnalyticsUtil.java diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/constant/OCHTaxiConst.kt b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/constant/OCHTaxiConst.kt index 3b894d7e2b..edb45a2521 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/constant/OCHTaxiConst.kt +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/constant/OCHTaxiConst.kt @@ -30,7 +30,8 @@ class OCHTaxiConst { // 上报心跳轮询ms const val LOOP_PERIOD_60S = 60 * 1000L - + // 开始服务启动自动驾驶等待时间(埋点上传) + const val LOOP_PERIOD_15S = 15 * 1000L // 轮询查询进行中/待服务订单的间隔时间 2秒 const val LOOP_PERIOD_2S = 2 * 1000L // 轮询查询新到预约单 1秒 @@ -48,5 +49,15 @@ class OCHTaxiConst { //演示:V 测试:内测 const val DEMO_USER = "V" const val TEST_USER = "内测" + + // 埋点key:开始服务开启自动驾驶(成功/失败) + const val EVENT_KEY_START_SERVICE = "event_key_och_taxi_start_service" + const val EVENT_PARAM_SN = "sn" + const val EVENT_PARAM_TIME = "time" + const val EVENT_PARAM_START_NAME = "start_name" + const val EVENT_PARAM_END_NAME = "end_name" + const val EVENT_PARAM_ORDER_NUMBER = "order_num" + const val EVENT_PARAM_START_RESULT = "start_autopilot" // true/false + } } \ No newline at end of file diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/MogoOCHTaxiModelNew.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/MogoOCHTaxiModelNew.java index 2a36c5677c..852b920d42 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/MogoOCHTaxiModelNew.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/MogoOCHTaxiModelNew.java @@ -51,6 +51,7 @@ import com.mogo.och.taxi.constant.OrderStatusEnum; import com.mogo.och.taxi.constant.OrderTypeEnum; import com.mogo.och.taxi.network.OCHTaxiServiceCallback; import com.mogo.och.taxi.network.OCHTaxiServiceManagerNew; +import com.mogo.och.taxi.utils.OchTaxiAnalyticsUtil; import com.mogo.och.taxi.utils.OrderUtil; import com.mogo.och.taxi.utils.PinYinUtil; import com.mogo.service.IMogoServiceApis; @@ -809,6 +810,10 @@ public class MogoOCHTaxiModelNew { CallerAutoPilotManager.INSTANCE.startAutoPilot(parameters); CallerLogger.INSTANCE.d(M_TAXI + TAG, "start autopilot with parameter: %s", GsonUtil.jsonFromObject(parameters) + " ,startSiteName=" + mCurrentOCHOrder.startSiteAddr + " ,endSiteName=" + mCurrentOCHOrder.endSiteAddr); + + OchTaxiAnalyticsUtil.triggerStartServiceEvent(false, + mCurrentOCHOrder.startSiteAddr, mCurrentOCHOrder.endSiteAddr, mCurrentOCHOrder.orderNo); + if (DebugConfig.isDebug()) { // TipToast.shortTip("Start autopilot!"); } @@ -1005,6 +1010,10 @@ public class MogoOCHTaxiModelNew { // 当高频返回autopilot 2时,不重复调用订单状态变更 mPrevAPStatus = state; // 每个状态单独赋值,解决无订单时已经是2的状态导致的新订单来时无法进入此逻辑更新状态 updateOCHOrderStatus(OrderStatusEnum.OnTheWayToEndStation); + + OchTaxiAnalyticsUtil.triggerStartServiceEvent(true, + mCurrentOCHOrder.startSiteAddr, mCurrentOCHOrder.endSiteAddr, mCurrentOCHOrder.orderNo); + if (FunctionBuildConfig.isDemoMode) { // 当美化模式(演示模式)开启时: 订单对应自动驾驶开启后,置true FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData = true; diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/utils/OchTaxiAnalyticsUtil.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/utils/OchTaxiAnalyticsUtil.java new file mode 100644 index 0000000000..a0f8b5b517 --- /dev/null +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/utils/OchTaxiAnalyticsUtil.java @@ -0,0 +1,55 @@ +package com.mogo.och.taxi.utils; + +import com.mogo.cloud.passport.MoGoAiCloudClientConfig; +import com.mogo.eagle.core.function.call.analytics.AnalyticsManager; +import com.mogo.eagle.core.utilcode.util.DateTimeUtils; +import com.mogo.eagle.core.utilcode.util.UiThreadHandler; +import com.mogo.och.taxi.constant.OCHTaxiConst; + +import java.util.HashMap; +import java.util.Map; + +/** + * OCH Taxi埋点工具 + * + * Created on 2022/3/24 + */ +public class OchTaxiAnalyticsUtil { + + /** + * 触发'开始服务'埋点流程: + * 点击开始服务(开启自动驾驶)后,15s内成功则发送成功埋点,否则发送失败埋点 + * @param send 是否直接发送埋点(15s内开启成功则直接发送成功埋点) + */ + public static void triggerStartServiceEvent( + boolean send, String startName, String endName, String orderNo) { + + String sn = MoGoAiCloudClientConfig.getInstance().getSn(); + String dateTime = DateTimeUtils.getTimeText( + System.currentTimeMillis(), DateTimeUtils.yyyy_MM_dd_HH_mm_ss); + + Map params = new HashMap<>(); + params.put(OCHTaxiConst.EVENT_PARAM_SN, sn); + params.put(OCHTaxiConst.EVENT_PARAM_TIME, dateTime); + params.put(OCHTaxiConst.EVENT_PARAM_START_NAME, startName); + params.put(OCHTaxiConst.EVENT_PARAM_END_NAME, endName); + params.put(OCHTaxiConst.EVENT_PARAM_ORDER_NUMBER, orderNo); + + Runnable runnable = () -> { + // 15s内未开启,上报失败埋点 + params.put(OCHTaxiConst.EVENT_PARAM_START_RESULT, false); + AnalyticsManager.INSTANCE.track(OCHTaxiConst.EVENT_KEY_START_SERVICE, params); + }; + + if (send) { + // 开启成功,上报埋点 + if (runnable != null && UiThreadHandler.getsUiHandler().hasCallbacks(runnable)) { + UiThreadHandler.removeCallbacks(runnable); + } + params.put(OCHTaxiConst.EVENT_PARAM_START_RESULT, true); + AnalyticsManager.INSTANCE.track(OCHTaxiConst.EVENT_KEY_START_SERVICE, params); + } else { + UiThreadHandler.postDelayed(runnable, OCHTaxiConst.LOOP_PERIOD_15S); + } + } +} From 2dd75435a5432aa7a679f71df86ddb89fe9a9f1d Mon Sep 17 00:00:00 2001 From: donghongyu Date: Thu, 24 Mar 2022 17:08:19 +0800 Subject: [PATCH 10/55] =?UTF-8?q?[Change]=20=E4=BF=AE=E5=A4=8D=E5=BC=B9?= =?UTF-8?q?=E7=AA=97=E6=8F=90=E7=A4=BAbug=20The=20specified=20child=20alre?= =?UTF-8?q?ady=20has=20a=20parent.=20You=20must=20call=20removeView()=20on?= =?UTF-8?q?=20the=20child's=20parent=20first.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: donghongyu --- TestHmiWarning.sh | 16 ++++++++++++++++ .../hmi/notification/WarningFloatWindowHelper.kt | 4 ++-- 2 files changed, 18 insertions(+), 2 deletions(-) create mode 100755 TestHmiWarning.sh diff --git a/TestHmiWarning.sh b/TestHmiWarning.sh new file mode 100755 index 0000000000..1ab54760cc --- /dev/null +++ b/TestHmiWarning.sh @@ -0,0 +1,16 @@ +#!/bin/bash +for index in `seq 300`; +do + b=$(( $index % 2 )) + if [ $b = 0 ] + then + echo "200011" + adb shell am broadcast -a com.hmi.v2x.notification --ez v2xIsShow true --es tag "200011" --ei v2xType 20011 --es alertContent "测试外部传入数据1" --es ttsContent "测试TTS1" + else + echo "200012" + adb shell am broadcast -a com.hmi.v2x.notification --ez v2xIsShow true --es tag "200012" --ei v2xType 20012 --es alertContent "测试外部传入数据2" --es ttsContent "测试TTS2" + fi + sleep 0.5 +done + +echo -e "\033[32m 恭喜你完成了所有 测试脚本 \033[0m" \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/notification/WarningFloatWindowHelper.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/notification/WarningFloatWindowHelper.kt index 564e7b4aac..8df1a947ee 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/notification/WarningFloatWindowHelper.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/notification/WarningFloatWindowHelper.kt @@ -90,7 +90,7 @@ internal class WarningFloatWindowHelper( val floatingView = config.layoutView?.also { try { val parent = (it.parent as ViewGroup) - parent.removeView(it) + parent.removeAllViews() } catch (e: Exception) { e.printStackTrace() } @@ -220,12 +220,12 @@ internal class WarningFloatWindowHelper( * 退出动画执行结束/没有退出动画,进行回调、移除等操作 */ fun remove(force: Boolean = false) = try { + frameLayout?.removeAllViews() frameLayout?.removeCallbacks(closeWarningTask) config.isAnim = false WarningFloatWindowManager.remove(config.floatTag) // removeView是异步删除,在Activity销毁的时候会导致窗口泄漏,所以使用removeViewImmediate直接删除view windowManager.run { - frameLayout?.removeAllViews() if (force) { removeViewImmediate(frameLayout) } else { From 6eaa7761c45fde224a921f2e34ad0fef868f3e5f Mon Sep 17 00:00:00 2001 From: renwj Date: Thu, 24 Mar 2022 17:10:53 +0800 Subject: [PATCH 11/55] =?UTF-8?q?[Chat]=E4=BC=98=E5=8C=96=E8=BD=A6?= =?UTF-8?q?=E8=81=8A=E8=81=8A=E5=BC=B9=E7=AA=97=E4=BD=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chat/facade/ui/CallChatWindowManager.kt | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/core/function-impl/mogo-core-function-chat/src/main/java/com/mogo/eagle/core/function/chat/facade/ui/CallChatWindowManager.kt b/core/function-impl/mogo-core-function-chat/src/main/java/com/mogo/eagle/core/function/chat/facade/ui/CallChatWindowManager.kt index f9db3ded23..e1529b3690 100644 --- a/core/function-impl/mogo-core-function-chat/src/main/java/com/mogo/eagle/core/function/chat/facade/ui/CallChatWindowManager.kt +++ b/core/function-impl/mogo-core-function-chat/src/main/java/com/mogo/eagle/core/function/chat/facade/ui/CallChatWindowManager.kt @@ -2,6 +2,7 @@ package com.mogo.eagle.core.function.chat.facade.ui import android.content.Context import android.media.AudioManager +import android.view.Gravity import android.view.LayoutInflater import android.view.View import android.widget.FrameLayout @@ -28,10 +29,7 @@ import com.mogo.eagle.core.function.chat.facade.OnInComingCallback import com.mogo.eagle.core.function.chat.facade.bridge.BridgeApi import com.mogo.eagle.core.function.chat.facade.utils.log import com.mogo.eagle.core.function.chat.facade.voice.VoiceControlFacade.REQUEST_CLOUD_VOICE_CALL -import com.mogo.eagle.core.utilcode.kotlin.lifeCycleScope -import com.mogo.eagle.core.utilcode.kotlin.observe -import com.mogo.eagle.core.utilcode.kotlin.onClick -import com.mogo.eagle.core.utilcode.kotlin.safeCancel +import com.mogo.eagle.core.utilcode.kotlin.* import com.mogo.eagle.core.utilcode.mogo.glide.GlideRoundedCornersTransform import com.mogo.eagle.core.utilcode.mogo.glide.GlideRoundedCornersTransform.CornerType.LEFT import kotlinx.coroutines.* @@ -247,10 +245,9 @@ internal class CallChatWindowManager { context.resources.getDimension(R.dimen.module_call_chat_state_incoming_hawk_eye_width).toInt(), context.resources.getDimension(R.dimen.module_call_chat_state_incoming_hawk_eye_height).toInt()) .also { - val x = context.resources.getDimension(R.dimen.module_call_chat_state_location_hawk_eye_x) - val y = context.resources.getDimension(R.dimen.module_call_chat_state_location_hawk_eye_y) - it.leftMargin = x.toInt() - it.topMargin = y.toInt() + it.gravity = Gravity.BOTTOM or Gravity.START + it.marginStart = 40.PX + it.bottomMargin = 168.PX } } @@ -370,8 +367,9 @@ internal class CallChatWindowManager { context.resources.getDimension(R.dimen.module_call_chat_state_hawk_eye_height).toInt() ) .also { - it.leftMargin = context.resources.getDimension(R.dimen.module_call_chat_state_location_hawk_eye_x).toInt() - it.topMargin = context.resources.getDimension(R.dimen.module_call_chat_state_location_hawk_eye_y).toInt() + it.gravity = Gravity.BOTTOM or Gravity.START + it.marginStart = 40.PX + it.bottomMargin = 168.PX } } From f06cdf1f8ed3a2181a0ed2e68b3de64b60949687 Mon Sep 17 00:00:00 2001 From: renwj Date: Thu, 24 Mar 2022 17:46:53 +0800 Subject: [PATCH 12/55] =?UTF-8?q?[VisualAngle]=E5=8D=87=E7=BA=A7=E5=9C=B0?= =?UTF-8?q?=E5=9B=BESDK;=E4=BF=AE=E6=AD=A3=E9=A1=B6=E8=A7=86=E8=A7=92?= =?UTF-8?q?=E4=B8=8D=E6=B6=88=E5=A4=B1=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../adapter/MoGoHandAdasMsgManager.java | 44 ++++++++++++++----- .../hmi/ui/turnlight/TurnLightViewStatus.kt | 3 +- gradle.properties | 2 +- 3 files changed, 36 insertions(+), 13 deletions(-) diff --git a/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/adapter/MoGoHandAdasMsgManager.java b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/adapter/MoGoHandAdasMsgManager.java index 5ab824a239..0fb0483568 100644 --- a/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/adapter/MoGoHandAdasMsgManager.java +++ b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/adapter/MoGoHandAdasMsgManager.java @@ -1,6 +1,8 @@ package com.mogo.eagle.core.function.autopilot.adapter; -import android.text.TextUtils; +import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_DEVA; + +import android.util.Log; import com.mogo.eagle.core.data.config.FunctionBuildConfig; import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotCarConfigListener; @@ -8,12 +10,10 @@ import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotIdentifyListener import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotVehicleStateListener; import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotIdentifyListenerManager; import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotVehicleStateListenerManager; -import com.mogo.eagle.core.function.call.bindingcar.CallerBindingcarManager; import com.mogo.eagle.core.function.call.hmi.CallerHmiManager; +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.util.ThreadUtils; import com.mogo.module.common.drawer.IdentifyDataDrawer; -import com.zhidao.support.obu.ami.AmiClientManager; - import org.jetbrains.annotations.NotNull; import java.util.List; @@ -47,15 +47,39 @@ public class MoGoHandAdasMsgManager implements return moGoHandAdasMsgManager; } + private int turnLightTimes = 0; + private boolean isOnTurnLight = false; + private int turnLight = 0; + + private int setTurnLightState(int turn_light) { + if (turn_light == 0) { + if (isOnTurnLight) { + if (turnLightTimes >= 10) { + isOnTurnLight = false; + turnLight = 0; + } + turnLightTimes++; + } + } else if (turn_light == 1) { + turnLightTimes = 0; + isOnTurnLight = true; + turnLight = 1; + } else if (turn_light == 2) { + turnLightTimes = 0; + isOnTurnLight = true; + turnLight = 2; + } + return turnLight; + } + @Override public void onAutopilotLightSwitchData(Chassis.LightSwitch lightSwitch) { //can数据转发 转向灯状态 0是正常 1是左转 2是右转 -// if (lightSwitch != null) { -// int turnLightNum = lightSwitch.getNumber(); -// AmiClientManager.getInstance().setTurnLightState(turnLightNum); -// //设置转向灯 -// CallerHmiManager.INSTANCE.showTurnLight(turnLightNum); -// } + if (lightSwitch != null) { + int state = setTurnLightState(lightSwitch.getNumber()); + CallerLogger.INSTANCE.d(M_DEVA + TAG, "onAutopilotLightSwitchData -- newState:" + state + ",oldState:" + lightSwitch.getNumber()); + CallerHmiManager.INSTANCE.showTurnLight(state); + } } @Override diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/turnlight/TurnLightViewStatus.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/turnlight/TurnLightViewStatus.kt index 222aad6344..32143dbcf6 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/turnlight/TurnLightViewStatus.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/turnlight/TurnLightViewStatus.kt @@ -2,6 +2,7 @@ package com.mogo.eagle.core.function.hmi.ui.turnlight import android.content.Context import android.util.AttributeSet +import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.animation.AlphaAnimation @@ -86,8 +87,6 @@ class TurnLightViewStatus @JvmOverloads constructor( } } else { //消失 - CallerVisualAngleManager.changeVisualAngle(Default()) - isVisualAngleChanged = false if (!isDisappare) { GlobalScope.launch(Dispatchers.Main) { animationDisappear() diff --git a/gradle.properties b/gradle.properties index e4530c9ffa..3161f3c3bc 100644 --- a/gradle.properties +++ b/gradle.properties @@ -82,7 +82,7 @@ MOGO_LOCATION_VERSION=1.3.48 MOGO_TELEMATIC_VERSION=1.3.48 ######## MogoAiCloudSDK Version ######## # 自研地图 -MAP_SDK_VERSION=2.0.9.4 +MAP_SDK_VERSION=2.0.9.5 MAP_SDK_OPERATION_VERSION=1.0.12 # websocket WEBSOCKET_VERSION=1.1.7 From 81cbfae5076080211329226d418fb481e403ebd1 Mon Sep 17 00:00:00 2001 From: renwj Date: Thu, 24 Mar 2022 18:34:36 +0800 Subject: [PATCH 13/55] =?UTF-8?q?[VisualAngle]=E4=BB=A3=E7=A0=81=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/function/hmi/ui/turnlight/TurnLightViewStatus.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/turnlight/TurnLightViewStatus.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/turnlight/TurnLightViewStatus.kt index 32143dbcf6..8e84e22142 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/turnlight/TurnLightViewStatus.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/turnlight/TurnLightViewStatus.kt @@ -87,6 +87,10 @@ class TurnLightViewStatus @JvmOverloads constructor( } } else { //消失 + if (isVisualAngleChanged) { + isVisualAngleChanged = false + CallerVisualAngleManager.changeVisualAngle(Default()) + } if (!isDisappare) { GlobalScope.launch(Dispatchers.Main) { animationDisappear() @@ -95,7 +99,6 @@ class TurnLightViewStatus @JvmOverloads constructor( isShowNormalBg = false isLeftLight = false isRightLight = false - isDisappare = false } } } From 37be6cc1d76f76bf9828ef3fb5d760540bc5d89c Mon Sep 17 00:00:00 2001 From: xuxinchao <13522809046@163.com> Date: Thu, 24 Mar 2022 19:16:46 +0800 Subject: [PATCH 14/55] =?UTF-8?q?=E8=B0=83=E8=AF=95=E7=AA=97=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1、隐藏工控机重启和升级按钮 2、增加工控机协议版本显示 3、增加、完善异常提示(演示模式下不提示) 4、修改GPS定位显示 --- .../autopilot/MoGoAutopilotProvider.kt | 9 +++ .../hmi/ui/setting/DebugSettingView.kt | 57 ++++++++++++++++--- .../main/res/layout/view_debug_setting.xml | 19 ++++++- .../mogo/eagle/core/data/app/AppConfigInfo.kt | 2 + .../api/autopilot/IMoGoAutopilotProvider.kt | 5 ++ .../call/autopilot/CallerAutoPilotManager.kt | 7 +++ 6 files changed, 88 insertions(+), 11 deletions(-) diff --git a/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/MoGoAutopilotProvider.kt b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/MoGoAutopilotProvider.kt index a51271e89e..532a214d64 100644 --- a/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/MoGoAutopilotProvider.kt +++ b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/MoGoAutopilotProvider.kt @@ -368,4 +368,13 @@ class MoGoAutopilotProvider : override fun isConnected(): Boolean { return AdasManager.getInstance().ipcConnectionStatus == IPC_CONNECTION_STATUS.CONNECTED } + + /** + * 获取协议版本 + */ + override fun getProtocolVersion(): Int { + return AdasManager.getInstance().protocolVersion + } + + } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt index 667edf6428..cd25df7a14 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt @@ -20,7 +20,6 @@ import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.data.constants.MoGoConfig import com.mogo.eagle.core.data.deva.chain.ChainConstant import com.mogo.eagle.core.data.deva.scene.SceneModule -import com.mogo.eagle.core.data.deva.scene.SceneTAG import com.mogo.eagle.core.data.enums.TrafficTypeEnum import com.mogo.eagle.core.data.map.MogoLocation import com.mogo.eagle.core.data.obu.ObuStatusInfo @@ -110,6 +109,11 @@ class DebugSettingView @JvmOverloads constructor( private var downloadVersion: String?=null //工控机docker版本 private var upgradeStatus: Int=-1 //升级状态 + //ADAS连接状态 + private var adasConnectStatus: Boolean=false + //OBU连接状态 + private var obuConnectStatus: Boolean=false + private val mapUiController by lazy { CallerMapUIServiceManager.getMapUIController() } @@ -1069,7 +1073,8 @@ class DebugSettingView @JvmOverloads constructor( tvObuAppInfo.text = "OBU程序版本:${CallerObuListenerManager.getObuStatusInfo().appInfo}" tvObuHliInfo.text = "OBU协议版本:${CallerObuListenerManager.getObuStatusInfo().hliInfo}" tvObuSdkVersion.text = "OBU-SDK版本:${AppConfigInfo.obuSdkVersion}" - tvAutopilotVersionInfo.text = "Autopilot版本:${AppConfigInfo.adasSdkVersion}" + tvAutopilotProtocolVersionInfo.text = "Autopilot协议版本:${CallerAutoPilotManager.getProtocolVersion()}" + tvIpcProtocolVersionInfo.text = "工控机协议版本:${AppConfigInfo.protocolVersionNumber}" tvMoGoMapVersion.text = "HD-Map版本:${MogoMap.getInstance().mogoMap.mapVersion}" tvGitBranchInfo.text = "Git分支:${AppConfigInfo.workingBranchName}" tvGitHashInfo.text = "Git-Hash:${AppConfigInfo.workingBranchHash}" @@ -1170,7 +1175,7 @@ class DebugSettingView @JvmOverloads constructor( tvAutopilotInfo.text = GsonUtils.toJson(mAutoPilotStatusInfo) tvCarInfo.text = - "GPS时间:${mGnssInfo?.satelliteTime}\n" + + "GPS时间:${(mGnssInfo?.satelliteTime?.times(1000))?.toLong()}\n" + "自车经纬度:\n${mGnssInfo?.longitude}\n${mGnssInfo?.latitude}\n" tvIdentifyInfo.text = @@ -1198,6 +1203,15 @@ class DebugSettingView @JvmOverloads constructor( AppConfigInfo.obuSdkVersion = obuStatusInfo.obuSdkVersion AppConfigInfo.isConnectObu = obuStatusInfo.obuStatus + + if(obuStatusInfo.obuStatus){ + obuConnectStatus = true + } + //OBU断开连接,提示异常 + if(obuConnectStatus && !obuStatusInfo.obuStatus){ + obuConnectStatus = false + toastMsg("OBU连接状态异常") + } } /** @@ -1205,14 +1219,21 @@ class DebugSettingView @JvmOverloads constructor( */ override fun onAutopilotStatusResponse(autoPilotStatusInfo: AutopilotStatusInfo) { mAutoPilotStatusInfo = autoPilotStatusInfo - - AppConfigInfo.adasSdkVersion = autoPilotStatusInfo.version AppConfigInfo.isConnectAutopilot = autoPilotStatusInfo.connectStatus if(AppConfigInfo.isConnectAutopilot && (AppConfigInfo.plateNumber.isNullOrEmpty() || AppConfigInfo.iPCMacAddress.isNullOrEmpty())){ //查询工控机基础配置信息 CallerAutoPilotManager.getCarConfig() } + + if(autoPilotStatusInfo.connectStatus){ + adasConnectStatus = true + } + //ADAS断开连接,提示异常 + if(adasConnectStatus && !autoPilotStatusInfo.connectStatus){ + adasConnectStatus=false + toastMsg("Autopilot系统连接状态异常") + } } override fun onAutopilotCarStateData(gnssInfo: MessagePad.GnssInfo?) { @@ -1247,8 +1268,9 @@ class DebugSettingView @JvmOverloads constructor( */ override fun onAutopilotCarConfig(carConfigResp: MessagePad.CarConfigResp) { carConfigResp?.let { - AppConfigInfo.plateNumber = it.plateNumber - AppConfigInfo.iPCMacAddress = it.macAddress + AppConfigInfo.plateNumber = it.plateNumber//车牌号 + AppConfigInfo.iPCMacAddress = it.macAddress//工控机MAC地址 + AppConfigInfo.protocolVersionNumber = it.protocolVersion.number//工控机协议版本 } } @@ -1276,8 +1298,11 @@ class DebugSettingView @JvmOverloads constructor( } tvReportActions.text = actionStr + tvReportSec.text = "sec:${it.timestamp.sec}" + tvReportNSec.text = "nsec:${it.timestamp.nsec}" - if("error".equals(it.level)){ + + if("error" == it.level){ //字体为红色,吐司提示 tvReportSrc.setTextColor(Color.RED) tvReportLevel.setTextColor(Color.RED) @@ -1285,7 +1310,9 @@ class DebugSettingView @JvmOverloads constructor( tvReportCode.setTextColor(Color.RED) tvReportResult.setTextColor(Color.RED) tvReportActions.setTextColor(Color.RED) - ToastUtils.showShort(it.msg) + tvReportSec.setTextColor(Color.RED) + tvReportNSec.setTextColor(Color.RED) + toastMsg(it.msg) }else{ tvReportSrc.setTextColor(Color.BLACK) tvReportLevel.setTextColor(Color.BLACK) @@ -1293,6 +1320,8 @@ class DebugSettingView @JvmOverloads constructor( tvReportCode.setTextColor(Color.BLACK) tvReportResult.setTextColor(Color.BLACK) tvReportActions.setTextColor(Color.BLACK) + tvReportSec.setTextColor(Color.BLACK) + tvReportNSec.setTextColor(Color.BLACK) } } } @@ -1309,4 +1338,14 @@ class DebugSettingView @JvmOverloads constructor( tvObuDelay.text = "obu时延:" + delayTime.toString() } + /** + * 吐司提示 + */ + private fun toastMsg(msg: String){ + //当处于美化(演示)模式、msg为空时不弹吐司 + if(!FunctionBuildConfig.isDemoMode && msg.isNotEmpty()){ + ToastUtils.showLong(msg) + } + } + } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_debug_setting.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_debug_setting.xml index 10d9db207d..046ce5943a 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_debug_setting.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_debug_setting.xml @@ -22,7 +22,7 @@ @@ -321,7 +321,20 @@ /> + + + +