[6.10.0]冷启动增加故障码显示

This commit is contained in:
xuxinchao
2025-02-10 17:11:23 +08:00
parent d5690fc05e
commit 6042831e57
8 changed files with 160 additions and 10 deletions

View File

@@ -0,0 +1,40 @@
package com.zhjt.mogo_core_function_devatools.coldstart
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.zhjt.mogo_core_function_devatools.R
/**
* 冷启动故障列表适配器
*/
class ColdStartFaultAdapter: RecyclerView.Adapter<ColdStartFaultAdapter.FaultInfoHolder>() {
private var faultList: ArrayList<String> ?= null
fun setData(list: ArrayList<String>){
faultList = list
notifyDataSetChanged()
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FaultInfoHolder {
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.item_fault_code, parent, false)
return FaultInfoHolder(view)
}
override fun onBindViewHolder(holder: FaultInfoHolder, position: Int) {
faultList?.let {
holder.tvFaultCode.text = it[position]
}
}
override fun getItemCount() = faultList?.size ?: 0
class FaultInfoHolder(itemView: View): RecyclerView.ViewHolder(itemView){
var tvFaultCode: TextView = itemView.findViewById(R.id.tvFaultCode)
}
}

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tvFaultCode"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="@dimen/sp_32"
android:textColor="#FF4E41"
>
</TextView>

View File

@@ -30,14 +30,18 @@ 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
import com.zhjt.mogo_core_function_devatools.coldstart.ColdStartFaultAdapter
import com.zhjt.mogo_core_function_devatools.coldstart.ColdStartNodeAdapter
import com.zhjt.mogo_core_function_devatools.ota.OTAUpgradeConfig
import kotlinx.android.synthetic.main.view_cold_start.view.ivColdStartNow
import kotlinx.android.synthetic.main.view_cold_start.view.ivColdStartStatus
import kotlinx.android.synthetic.main.view_cold_start.view.ivFaultIcon
import kotlinx.android.synthetic.main.view_cold_start.view.ivIpcConnectStatus
import kotlinx.android.synthetic.main.view_cold_start.view.ivNodeListMask
import kotlinx.android.synthetic.main.view_cold_start.view.ivSoftIcon
import kotlinx.android.synthetic.main.view_cold_start.view.ivSsmConnectStatus
import kotlinx.android.synthetic.main.view_cold_start.view.ivWifiConnectStatus
import kotlinx.android.synthetic.main.view_cold_start.view.rvFaultList
import kotlinx.android.synthetic.main.view_cold_start.view.rvNodeList
import kotlinx.android.synthetic.main.view_cold_start.view.tvColdStartContent
import kotlinx.android.synthetic.main.view_cold_start.view.tvColdStartNow
@@ -45,6 +49,7 @@ import kotlinx.android.synthetic.main.view_cold_start.view.tvIpcConnectContent
import kotlinx.android.synthetic.main.view_cold_start.view.tvSsmConnectContent
import kotlinx.android.synthetic.main.view_cold_start.view.tvSystemStartupTitle
import kotlinx.android.synthetic.main.view_cold_start.view.tvWifiConnectContent
import kotlinx.android.synthetic.main.view_cold_start.view.viewFaultDivider
import system_master.SsmInfo
import system_master.SystemStatusInfo
import java.util.Locale
@@ -87,12 +92,14 @@ class ColdStartView @JvmOverloads constructor(
private var connectColdStartTimer: CountDownTimer?= null //连接冷启动等待倒计时
private val nodeList = ArrayList<ColdStartNodeInfo>()
private val faultList = ArrayList<String>()
private var coldStartResultListener: ColdStartResultListener ?= null
private var newColdStart: Boolean = false //SSM是否支持新版冷启动
private var coldStartNodeAdapter: ColdStartNodeAdapter ?= null
private var coldStartFaultAdapter: ColdStartFaultAdapter ?= null
private var reason: String = "" //上报原因
@@ -102,11 +109,18 @@ class ColdStartView @JvmOverloads constructor(
}
private fun initView(){
//软件节点启动状态列表适配器设置
val linearLayoutManager = LinearLayoutManager(context)
linearLayoutManager.orientation = LinearLayoutManager.VERTICAL
coldStartNodeAdapter = ColdStartNodeAdapter()
rvNodeList.adapter =coldStartNodeAdapter
rvNodeList.layoutManager = linearLayoutManager
//故障码列表适配器设置
val faultLinearLayoutManager = LinearLayoutManager(context)
faultLinearLayoutManager.orientation = LinearLayoutManager.VERTICAL
coldStartFaultAdapter = ColdStartFaultAdapter()
rvFaultList.adapter = coldStartFaultAdapter
rvFaultList.layoutManager = faultLinearLayoutManager
//立即用车
tvColdStartNow.setOnClickListener{
hideColdStartView()
@@ -302,13 +316,6 @@ class ColdStartView @JvmOverloads constructor(
Log.i(TAG,"旧冷启动状态="+it.processStatus)
Log.i(TAG,"旧冷启动超时原因="+it.processTimeoutReason)
Log.i(TAG,"硬件故障Node数量="+it.hardwareNodeCount)
it.hardwareNodeList.forEach {startFlt->
Log.i(TAG,"硬件故障 startFlt.fltId="+ startFlt.fltId)
}
Log.i(TAG,"其他故障数量="+it.otherFltsCount)
it.otherFltsList.forEach {startFlt->
Log.i(TAG,"其他故障 startFlt.fltId="+startFlt.fltId)
}
ThreadUtils.runOnUiThread {
tvColdStartContent.text = getColdStartEventStatus(it.eventStatus)
if(it.eventStatus == SsmInfo.CSState.COLD_START_READY){
@@ -355,12 +362,32 @@ class ColdStartView @JvmOverloads constructor(
nodeList.add(nodeInfo)
}
}
if(nodeList.size > 0){
ivSoftIcon.visibility = View.VISIBLE
}
coldStartNodeAdapter?.setData(nodeList)
if(nodeList.size > 12){
ivNodeListMask.visibility = View.VISIBLE
}else{
ivNodeListMask.visibility = View.GONE
}
//故障码列表
faultList.clear()
it.hardwareNodeList.forEach {startFlt->
Log.i(TAG,"硬件故障 startFlt.fltId="+ startFlt.fltId)
faultList.add(startFlt.fltId)
}
Log.i(TAG,"其他故障数量="+it.otherFltsCount)
it.otherFltsList.forEach {startFlt->
Log.i(TAG,"其他故障 startFlt.fltId="+startFlt.fltId)
faultList.add(startFlt.fltId)
}
if(faultList.size>0){
viewFaultDivider.visibility = View.VISIBLE
ivFaultIcon.visibility = View.VISIBLE
rvFaultList.visibility = View.VISIBLE
coldStartFaultAdapter?.setData(faultList)
}
}
}
}
@@ -482,8 +509,13 @@ class ColdStartView @JvmOverloads constructor(
tvColdStartContent.text = resources.getString(R.string.cold_start_wait)
tvColdStartContent.setTextColor(ContextCompat.getColor(context, R.color.white))
//隐藏冷启动相关视图
ivSoftIcon.visibility = View.GONE
rvNodeList.visibility = View.GONE
ivNodeListMask.visibility = View.GONE
viewFaultDivider.visibility = View.GONE
ivFaultIcon.visibility = View.GONE
rvFaultList.visibility = View.GONE
//域控连接成功埋点统计
reason = "域控连接成功"
ColdStartAnalyticsManager.coldStartStepAnalytics(ColdStartAnalyticsManager.ipcConnectSuccess,reason)
@@ -524,8 +556,12 @@ class ColdStartView @JvmOverloads constructor(
tvColdStartContent.text = resources.getString(R.string.cold_start_wait)
tvColdStartContent.setTextColor(ContextCompat.getColor(context, R.color.white))
//隐藏冷启动相关视图
ivSoftIcon.visibility = View.GONE
rvNodeList.visibility = View.GONE
ivNodeListMask.visibility = View.GONE
viewFaultDivider.visibility = View.GONE
ivFaultIcon.visibility = View.GONE
rvFaultList.visibility = View.GONE
//域控连接失败埋点统计
this.reason = "域控连接失败:$failReason"
ColdStartAnalyticsManager.coldStartStepAnalytics(ColdStartAnalyticsManager.ipcConnectFail,reason)
@@ -574,8 +610,12 @@ class ColdStartView @JvmOverloads constructor(
tvColdStartContent.text = resources.getString(R.string.cold_start_wait)
tvColdStartContent.setTextColor(ContextCompat.getColor(context, R.color.white))
//隐藏Topic列表
ivSoftIcon.visibility = View.GONE
rvNodeList.visibility = View.GONE
ivNodeListMask.visibility = View.GONE
viewFaultDivider.visibility = View.GONE
ivFaultIcon.visibility = View.GONE
rvFaultList.visibility = View.GONE
ipcConnectStatus = false
ssmConnectStatus = false
coldStartStatus = false
@@ -619,8 +659,12 @@ class ColdStartView @JvmOverloads constructor(
tvColdStartContent.text = resources.getString(R.string.cold_start_wait)
tvColdStartContent.setTextColor(ContextCompat.getColor(context, R.color.white))
//隐藏冷启动相关视图
ivSoftIcon.visibility = View.GONE
rvNodeList.visibility = View.GONE
ivNodeListMask.visibility = View.GONE
viewFaultDivider.visibility = View.GONE
ivFaultIcon.visibility = View.GONE
rvFaultList.visibility = View.GONE
if(ipcConnectStatus){
showIPCConnectSuccessView()
}
@@ -657,8 +701,12 @@ class ColdStartView @JvmOverloads constructor(
tvColdStartContent.text = resources.getString(R.string.cold_start_wait)
tvColdStartContent.setTextColor(ContextCompat.getColor(context, R.color.white))
//隐藏冷启动相关视图
ivSoftIcon.visibility = View.GONE
rvNodeList.visibility = View.GONE
ivNodeListMask.visibility = View.GONE
viewFaultDivider.visibility = View.GONE
ivFaultIcon.visibility = View.GONE
rvFaultList.visibility = View.GONE
}
/**

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<gradient
android:startColor="#B2FFFFFF"
android:endColor="#1AFFFFFF"
android:angle="270"
/>
<corners
android:radius="@dimen/dp_0"/>
</shape>

View File

@@ -142,9 +142,21 @@
android:layout_marginStart="@dimen/dp_15"
/>
<ImageView
android:id="@+id/ivSoftIcon"
android:layout_width="@dimen/dp_50"
android:layout_height="@dimen/dp_50"
app:layout_constraintTop_toBottomOf="@id/ivColdStartStatus"
app:layout_constraintLeft_toLeftOf="@id/ivColdStartStatus"
app:layout_constraintRight_toRightOf="@id/ivColdStartStatus"
android:layout_marginTop="@dimen/dp_26"
android:src="@drawable/icon_cold_start_soft"
android:contentDescription="@string/cold_start_soft_icon"
/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvNodeList"
android:layout_width="wrap_content"
android:layout_width="@dimen/dp_760"
android:layout_height="@dimen/dp_550"
app:layout_constraintTop_toBottomOf="@id/tvColdStartContent"
app:layout_constraintLeft_toLeftOf="@id/tvColdStartContent"
@@ -153,7 +165,7 @@
<ImageView
android:id="@+id/ivNodeListMask"
android:layout_width="@dimen/dp_500"
android:layout_width="@dimen/dp_760"
android:layout_height="@dimen/dp_40"
app:layout_constraintBottom_toBottomOf="@id/rvNodeList"
app:layout_constraintLeft_toLeftOf="@id/rvNodeList"
@@ -164,6 +176,35 @@
android:paddingEnd="@dimen/dp_10"
/>
<View
android:id="@+id/viewFaultDivider"
android:layout_width="@dimen/dp_1"
android:layout_height="@dimen/dp_550"
app:layout_constraintLeft_toRightOf="@id/rvNodeList"
app:layout_constraintTop_toTopOf="@id/rvNodeList"
android:background="@drawable/bg_cold_start_fault_divider"
/>
<ImageView
android:id="@+id/ivFaultIcon"
android:layout_width="@dimen/dp_50"
android:layout_height="@dimen/dp_50"
app:layout_constraintTop_toTopOf="@id/viewFaultDivider"
app:layout_constraintLeft_toRightOf="@id/viewFaultDivider"
android:src="@drawable/icon_cold_start_fault"
android:contentDescription="@string/cold_start_fault_icon"
android:layout_marginStart="@dimen/dp_20"
/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvFaultList"
android:layout_width="@dimen/dp_900"
android:layout_height="@dimen/dp_550"
app:layout_constraintLeft_toRightOf="@id/ivFaultIcon"
app:layout_constraintTop_toTopOf="@id/ivFaultIcon"
android:layout_marginStart="@dimen/dp_10"
/>
<TextView
android:id="@+id/tvColdStartTip"
android:layout_width="wrap_content"

View File

@@ -248,7 +248,8 @@
<string name="cold_start_title_sys_success">系统启动成功,即将进入主页</string>
<string name="cold_start_title_sys_exception">系统启动异常</string>
<string name="cold_start_list_mask">冷启动列表遮罩</string>
<string name="cold_start_soft_icon">冷启动软件节点启动状态图标</string>
<string name="cold_start_fault_icon">冷启动软件硬件故障图标</string>
<string name="cold_start_now">立即用车</string>
<string name="cold_start_now_tip">跳过流程或启动失败,均可能会导致自动驾驶等功能无法使用</string>