[6.7.0]冷启动修改
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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("<font color=\"#FFCD3D\">${nodeDetail}</font>")
|
||||
}else{
|
||||
nodeStatusSb.append("<font color=\"#B2FFFFFF\">${nodeDetail}</font>")
|
||||
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("<font color=\"#FFCD3D\">${nodeDetail}</font>")
|
||||
}else{
|
||||
nodeStatusSb.append("<font color=\"#B2FFFFFF\">${nodeDetail}</font>")
|
||||
}
|
||||
nodeStatusSb.append("<br>")
|
||||
}
|
||||
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("<br>")
|
||||
}
|
||||
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
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user