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)
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-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
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) {
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