diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/coldstart/ColdStartFaultAdapter.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/coldstart/ColdStartFaultAdapter.kt new file mode 100644 index 0000000000..727ee685d4 --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/coldstart/ColdStartFaultAdapter.kt @@ -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() { + + private var faultList: ArrayList ?= null + + fun setData(list: ArrayList){ + 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) + } + +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-devatools/src/main/res/layout/item_fault_code.xml b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/item_fault_code.xml new file mode 100644 index 0000000000..0939a9e9ca --- /dev/null +++ b/core/function-impl/mogo-core-function-devatools/src/main/res/layout/item_fault_code.xml @@ -0,0 +1,10 @@ + + + + \ 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 ba47e9f56c..4aa032b2cb 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 @@ -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() + private val faultList = ArrayList() 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 } /** diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_cold_start_fault.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_cold_start_fault.png new file mode 100644 index 0000000000..207e8cb750 Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_cold_start_fault.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_cold_start_soft.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_cold_start_soft.png new file mode 100644 index 0000000000..edaee7dd41 Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_cold_start_soft.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_cold_start_fault_divider.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_cold_start_fault_divider.xml new file mode 100644 index 0000000000..c306e4fb9d --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/bg_cold_start_fault_divider.xml @@ -0,0 +1,10 @@ + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_cold_start.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_cold_start.xml index 3d420a27bc..5a92068a0b 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_cold_start.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_cold_start.xml @@ -142,9 +142,21 @@ android:layout_marginStart="@dimen/dp_15" /> + + + + + + + + 系统启动成功,即将进入主页 系统启动异常 冷启动列表遮罩 - + 冷启动软件节点启动状态图标 + 冷启动软件硬件故障图标 立即用车 跳过流程或启动失败,均可能会导致自动驾驶等功能无法使用