From adbd0226542a298068f180ad08875415e6858611 Mon Sep 17 00:00:00 2001 From: renwj Date: Wed, 23 Oct 2024 19:30:21 +0800 Subject: [PATCH 1/4] =?UTF-8?q?[6.7.0][=E9=AB=98=E7=B2=BE=E5=9C=B0?= =?UTF-8?q?=E5=9B=BE]=20=E5=85=B3=E9=97=AD=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/com/mogo/launcher/startup/ConfigStartUp.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/mogo/launcher/startup/ConfigStartUp.kt b/app/src/main/java/com/mogo/launcher/startup/ConfigStartUp.kt index a444ed5319..8874aab760 100644 --- a/app/src/main/java/com/mogo/launcher/startup/ConfigStartUp.kt +++ b/app/src/main/java/com/mogo/launcher/startup/ConfigStartUp.kt @@ -119,7 +119,7 @@ object ConfigStartUp { } val mapParams = MapParams.init() - mapParams.setDebugMode(true) + mapParams.setDebugMode(false) // 1-使用本地地图数据,0-使用在线地图数据 // .setDataFileSource(1) .setIsRecordLogs(false) From 46b2fbb594a72e56595d5f6a939b681e780c10b1 Mon Sep 17 00:00:00 2001 From: renwj Date: Thu, 24 Oct 2024 11:02:07 +0800 Subject: [PATCH 2/4] =?UTF-8?q?[6.7.0][=E5=90=AF=E8=87=AA=E9=A9=BE?= =?UTF-8?q?=E6=8C=87=E5=BC=95]=20=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../status/StatusManager.kt | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/StatusManager.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/StatusManager.kt index ae537d9f58..9575316ac7 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/StatusManager.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/StatusManager.kt @@ -233,17 +233,19 @@ object StatusManager { } }?.forEachIndexed { index, status -> val shl = 1 shl index - xor = if (status is RouteDownloadStatus) { - if (status.state == RouteStart) { + if (status.isException()) { + xor = if (status is RouteDownloadStatus) { + if (status.state == RouteStart) { + xor or shl + } else { + xor or (shl shl 1) + } + } else { + if (status is OtherErrorStatus) { + CallerDevaToolsManager.getExtra().putString(R.id.autopilot_start_error.toString(), status.reason?.getUnableLaunchReason()) + } xor or shl - } else { - xor or (shl shl 1) } - } else { - if (status is OtherErrorStatus) { - CallerDevaToolsManager.getExtra().putString(R.id.autopilot_start_error.toString(), status.reason?.getUnableLaunchReason()) - } - xor or shl } } return xor From a36a706d73fce75c46f619f2487265d4d6c25e77 Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Thu, 24 Oct 2024 11:56:59 +0800 Subject: [PATCH 3/4] =?UTF-8?q?[6.7.0]=E5=86=B7=E5=90=AF=E5=8A=A8=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../coldstart/ColdStartManager.kt | 28 ++-- .../function/hmi/ui/widget/ColdStartView.kt | 155 +++++++++++++----- 2 files changed, 129 insertions(+), 54 deletions(-) diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/coldstart/ColdStartManager.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/coldstart/ColdStartManager.kt index 1b309fd59d..0dc3976f58 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/coldstart/ColdStartManager.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/coldstart/ColdStartManager.kt @@ -5,7 +5,6 @@ import android.util.Log import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener import com.mogo.eagle.core.function.api.datacenter.IDataCenterBizListener -import com.mogo.eagle.core.function.api.och.IOchFunctionCallNotify import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager import com.mogo.eagle.core.function.call.datacenter.CallerDataCenterBizListener import com.mogo.eagle.core.function.call.hmi.CallerHmiManager @@ -24,22 +23,15 @@ object ColdStartManager: IMoGoAutopilotStatusListener, IDataCenterBizListener { private var isColdStartSuccess: Boolean = false //当天是否冷启动成功 private var loginStatus: Boolean = false //当前登录状态 private var ipcConnectedTime: Long = System.currentTimeMillis() - + private val currentDay = millis2String(System.currentTimeMillis(), TimeUtils.getMdFormat()) + //获取当天是否点击过“立即用车” + private var coldStartNowDay = millis2String(ColdStartConfig.getColdStartNowTime(), TimeUtils.getMdFormat()) + //获取当天是否冷启动成功 + private var coldStartSuccessDay = millis2String(ColdStartConfig.getColdStartSuccessTime(), TimeUtils.getMdFormat()) fun init(context: Context){ CallerAutoPilotStatusListenerManager.addListener(TAG, this) CallerDataCenterBizListener.addListener(TAG,this) - val currentDay = millis2String(System.currentTimeMillis(), TimeUtils.getMdFormat()) - //获取当天是否点击过“立即用车” - val coldStartNowDay = millis2String(ColdStartConfig.getColdStartNowTime(), TimeUtils.getMdFormat()) - if(coldStartNowDay == currentDay){ - isColdStartNow = true - } - //获取当天是否冷启动成功 - val coldStartSuccessDay = millis2String(ColdStartConfig.getColdStartSuccessTime(), TimeUtils.getMdFormat()) - if(coldStartSuccessDay == currentDay){ - isColdStartSuccess = true - } } override fun onAutopilotIpcConnectStatusChanged( @@ -50,6 +42,15 @@ object ColdStartManager: IMoGoAutopilotStatusListener, IDataCenterBizListener { if(AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)){ //域控连接异常 if(status != AdasConstants.IpcConnectionStatus.CONNECTED){ + coldStartNowDay = millis2String(ColdStartConfig.getColdStartNowTime(), TimeUtils.getMdFormat()) + if(coldStartNowDay == currentDay){ + isColdStartNow = true + } + //获取当天是否冷启动成功 + coldStartSuccessDay = millis2String(ColdStartConfig.getColdStartSuccessTime(), TimeUtils.getMdFormat()) + if(coldStartSuccessDay == currentDay){ + isColdStartSuccess = true + } //当前进入主页方式为立即用车,则在主页面不再展示冷启动页面 if(isColdStartNow && !isColdStartSuccess){ return @@ -76,6 +77,7 @@ object ColdStartManager: IMoGoAutopilotStatusListener, IDataCenterBizListener { override fun invokeLoginStatus(isLogin: Boolean) { super.invokeLoginStatus(isLogin) loginStatus = isLogin + Log.i("xuxinchao","loginStatus="+loginStatus) } } \ 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/widget/ColdStartView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/ColdStartView.kt index 5f9805503c..cab7aa7464 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/ColdStartView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/ColdStartView.kt @@ -6,6 +6,7 @@ import android.content.Context import android.os.Build import android.os.CountDownTimer import android.text.Html +import android.text.TextUtils import android.util.AttributeSet import android.util.Log import android.view.LayoutInflater @@ -21,7 +22,6 @@ import com.mogo.eagle.core.function.call.autopilot.CallerColdStartStateListenerM import com.mogo.eagle.core.function.hmi.R import com.mogo.eagle.core.utilcode.util.ResourceUtils import com.mogo.eagle.core.utilcode.util.ThreadUtils -import com.mogo.eagle.core.utilcode.util.UiThreadHandler import com.zhjt.mogo.adas.data.AdasConstants import com.zhjt.mogo_core_function_devatools.coldstart.ColdStartAnalyticsManager import com.zhjt.mogo_core_function_devatools.coldstart.ColdStartConfig @@ -38,7 +38,9 @@ import kotlinx.android.synthetic.main.view_cold_start.view.viewColdStartDivider import kotlinx.android.synthetic.main.view_cold_start.view.viewSsmConnectDivider import system_master.SsmInfo import system_master.SystemStatusInfo -import java.lang.StringBuilder +import java.util.Locale +import java.util.regex.Matcher +import java.util.regex.Pattern /** * 冷启动呈现二期 @@ -73,6 +75,8 @@ class ColdStartView @JvmOverloads constructor( private var coldStartResultListener: ColdStartResultListener ?= null + private var newColdStart: Boolean = false //SSM是否支持新版冷启动 + init { LayoutInflater.from(context).inflate(R.layout.view_cold_start, this, true) initView() @@ -186,6 +190,11 @@ class ColdStartView @JvmOverloads constructor( ThreadUtils.runOnUiThread { //SSM连接成功 connectSSMSuccess() + //通过autoPilotReady判断冷启动是否成功 + if(status.hasAutoPilotReady() && status.autoPilotReady && !coldStartStatus){ + coldStartStatus = true + showColdStartSuccessView() + } } } @@ -200,6 +209,22 @@ class ColdStartView @JvmOverloads constructor( ThreadUtils.runOnUiThread { //SSM连接成功 connectSSMSuccess() + //版本兼容 + if(parseVersion(true, statusInf.masterVersion) > 40600){ + //主动查询冷启动状态 + if(!newColdStart){ + newColdStart = true + CallerAutoPilotControlManager.sendSsmFuncQueryColdStartState() + } + }else{ + newColdStart = false + //通过autoPilotReady判断冷启动是否成功 + Log.i(TAG,"statusInf.autoPilotReady="+statusInf.autoPilotReady) + if(statusInf.hasAutoPilotReady() && statusInf.autoPilotReady && !coldStartStatus){ + coldStartStatus = true + showColdStartSuccessView() + } + } } } @@ -217,36 +242,41 @@ class ColdStartView @JvmOverloads constructor( isQuery: Boolean, coldStartState: SsmInfo.ColdStartState? ) { - coldStartState?.let { - Log.i(TAG,"节点自上报冷启动状态="+it.eventStatus) - Log.i(TAG,"旧冷启动状态="+it.processStatus) - Log.i(TAG,"旧冷启动超时原因="+it.processTimeoutReason) - ThreadUtils.runOnUiThread { - if(it.eventStatus == SsmInfo.CSState.COLD_START_READY){ - //冷启动就绪 - showColdStartSuccessView() - //冷启动成功埋点统计 - ColdStartAnalyticsManager.coldStartStepAnalytics(ColdStartAnalyticsManager.coldStartSuccess) - //记录冷启动成功时间 - ColdStartConfig.setColdStartSuccessTime(System.currentTimeMillis()) - } - tvColdStartContent.text = getColdStartEventStatus(it.eventStatus) - nodeStatusSb.clear() - it.nodeList.forEach {node-> - Log.i(TAG,"node nodeName="+node.nodeName+"node status="+node.status) - - val nodeDetail = node.nodeName+ " " + getColdStartNodeStatus(node.status) - if(node.status == SsmInfo.NodeStatus.NODE_FAILED || node.status ==SsmInfo.NodeStatus.NODE_TIMEOUT){ - nodeStatusSb.append("${nodeDetail}") - }else{ - nodeStatusSb.append("${nodeDetail}") + if(newColdStart){ + coldStartState?.let { + Log.i(TAG,"节点自上报冷启动状态="+it.eventStatus) + Log.i(TAG,"旧冷启动状态="+it.processStatus) + Log.i(TAG,"旧冷启动超时原因="+it.processTimeoutReason) + ThreadUtils.runOnUiThread { + if(it.eventStatus == SsmInfo.CSState.COLD_START_READY){ + if(!coldStartStatus){ + //冷启动就绪 + coldStartStatus = true + showColdStartSuccessView() + } + //冷启动成功埋点统计 + ColdStartAnalyticsManager.coldStartStepAnalytics(ColdStartAnalyticsManager.coldStartSuccess) + //记录冷启动成功时间 + ColdStartConfig.setColdStartSuccessTime(System.currentTimeMillis()) + } + tvColdStartContent.text = getColdStartEventStatus(it.eventStatus) + nodeStatusSb.clear() + it.nodeList.forEach {node-> + Log.i(TAG,"node nodeName="+node.nodeName+"node status="+node.status) + + val nodeDetail = node.nodeName+ " " + getColdStartNodeStatus(node.status) + if(node.status == SsmInfo.NodeStatus.NODE_FAILED || node.status ==SsmInfo.NodeStatus.NODE_TIMEOUT){ + nodeStatusSb.append("${nodeDetail}") + }else{ + nodeStatusSb.append("${nodeDetail}") + } + nodeStatusSb.append("
") + } + tvColdStartNodeState.text = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + Html.fromHtml(nodeStatusSb.toString(), Html.FROM_HTML_MODE_LEGACY) + } else { + Html.fromHtml(nodeStatusSb.toString()) } - nodeStatusSb.append("
") - } - tvColdStartNodeState.text = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - Html.fromHtml(nodeStatusSb.toString(), Html.FROM_HTML_MODE_LEGACY) - } else { - Html.fromHtml(nodeStatusSb.toString()) } } } @@ -401,13 +431,10 @@ class ColdStartView @JvmOverloads constructor( connectSSMTimer?.cancel() //开始启动冷启动等待倒计时 coldStartProcess() - //主动查询冷启动状态 - CallerAutoPilotControlManager.sendSsmFuncQueryColdStartState() //SSM连接成功埋点统计 ColdStartAnalyticsManager.coldStartStepAnalytics(ColdStartAnalyticsManager.ssmConnectSuccess) } ssmConnectStatus = true - coldStartStatus = false } /** @@ -518,13 +545,15 @@ class ColdStartView @JvmOverloads constructor( * 冷启动成功视图 */ private fun showColdStartSuccessView(){ - tvSystemStartupTitle.text = resources.getString(R.string.cold_start_title_sys_success) - coldStartRotationAnim?.cancel() - ivColdStartStatus.rotation = 0f - ivColdStartStatus.setImageDrawable(ResourceUtils.getDrawable(R.drawable.icon_cold_start_success)) - tvColdStartContent.text = resources.getString(R.string.cold_start_success_content) - connectColdStartTimer?.cancel() - hideColdStartView() + if(coldStartStatus){ + tvSystemStartupTitle.text = resources.getString(R.string.cold_start_title_sys_success) + coldStartRotationAnim?.cancel() + ivColdStartStatus.rotation = 0f + ivColdStartStatus.setImageDrawable(ResourceUtils.getDrawable(R.drawable.icon_cold_start_success)) + tvColdStartContent.text = resources.getString(R.string.cold_start_success_content) + connectColdStartTimer?.cancel() + hideColdStartView() + } } /** @@ -548,4 +577,48 @@ class ColdStartView @JvmOverloads constructor( coldStartResultListener = listener } + private val pattern = Pattern.compile("\\d+\\.\\d+\\.\\d+") + + /** + * 解析版本 格式 xxx.xxx.xxx(x的数量不固定) + * 仅用于版本比较,不能用于展示 + * 例如: + * "12.03.04" 解析结果:120304 + * "2.11.0" 解析结果:21100 + * "3.0.0" 解析结果:30000 + * 目前已用于DockerVersion和MaserVersion的解析 + * + * @param isUseAll 是否使用全部截取数据 true:表示 12.34.56 截取之后 123456 false:表示12.34.56 截取之后 12 + * @param ver 版本字符串 例如:"MAP-taxi_RoboTaxi_df_2.8.0.3_20220928_test" 解析结果为:280 + * @return -1表示解析失败 + */ + private fun parseVersion(isUseAll: Boolean, ver: String): Int { + var version = -1 + if (!TextUtils.isEmpty(ver)) { + try { + val matcher: Matcher = pattern.matcher(ver) + if (matcher.find()) { + var group = matcher.group() + if (!TextUtils.isEmpty(group)) { + val format = "%02d" + if (isUseAll) { + val temp = group.split("\\.".toRegex()).dropLastWhile { it.isEmpty() } + .toTypedArray() + group = String.format(Locale.getDefault(), format, temp[0].toInt()) + group += String.format(Locale.getDefault(), format, temp[1].toInt()) + group += String.format(Locale.getDefault(), format, temp[2].toInt()) + } else { + group = group.split("\\.".toRegex()).dropLastWhile { it.isEmpty() } + .toTypedArray()[0] + } + version = group.toInt() + } + } + } catch (e: Exception) { + Log.e(TAG, "版本解析失败=$ver", e) + } + } + return version + } + } \ No newline at end of file From 8b1459cefba7b44b40b104881d257972b94932c3 Mon Sep 17 00:00:00 2001 From: renwj Date: Thu, 24 Oct 2024 12:06:42 +0800 Subject: [PATCH 4/4] =?UTF-8?q?[6.7.0][=E8=BF=90=E8=90=A5=E9=9D=A2?= =?UTF-8?q?=E6=9D=BF]=20=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../function/hmi/ui/operate/OperatePanelLayout.kt | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/operate/OperatePanelLayout.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/operate/OperatePanelLayout.kt index 94c97d38f0..eccde5f3ba 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/operate/OperatePanelLayout.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/operate/OperatePanelLayout.kt @@ -304,11 +304,11 @@ class OperatePanelLayout : LinearLayout { } override fun onPreferenceChange(preference: Preference, newValue: Any?): Boolean { - return true + return false } override fun onPreferenceClick(preference: Preference): Boolean { - return true + return false } } @@ -1255,7 +1255,7 @@ class OperatePanelLayout : LinearLayout { KEY_ALL_MERGE_MODE -> { if (preference.extras.containsKey("is_checked")) { preference.extras.remove("is_checked") - return true + return false } val isChecked = newValue as? Boolean ?: false if (isChecked) { @@ -1275,7 +1275,7 @@ class OperatePanelLayout : LinearLayout { KEY_BLIND_AREA_MODE -> { if (preference.extras.containsKey("is_checked")) { preference.extras.remove("is_checked") - return true + return false } val isChecked = newValue as? Boolean ?: false if (isChecked) { @@ -1295,7 +1295,7 @@ class OperatePanelLayout : LinearLayout { KEY_BEYOND_VISUAL_RANGE_MODE -> { if (preference.extras.containsKey("is_checked")) { preference.extras.remove("is_checked") - return true + return false } val isChecked = newValue as? Boolean ?: false if (isChecked) { @@ -1315,7 +1315,7 @@ class OperatePanelLayout : LinearLayout { KEY_TRANSPARENT_TRANSFER_MODE -> { if (preference.extras.containsKey("is_checked")) { preference.extras.remove("is_checked") - return true + return false } val isChecked = newValue as? Boolean ?: false if (isChecked) { @@ -1335,7 +1335,7 @@ class OperatePanelLayout : LinearLayout { KEY_PURE_OBU_MODE -> { if (preference.extras.containsKey("is_checked")) { preference.extras.remove("is_checked") - return true + return false } val isChecked = newValue as? Boolean ?: false if (isChecked) {