From 17cdfb239fe00b2a1cc00cb18d6d54716ddfcdaf Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Mon, 23 Sep 2024 19:52:25 +0800 Subject: [PATCH] =?UTF-8?q?[6.7.0]=E6=B6=88=E6=81=AF=E7=9B=92=E5=AD=90UI?= =?UTF-8?q?=E6=94=B9=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../function/hmi/bone/tab/MsgBoxTabView.kt | 40 +- .../hmi/bone/tab/adapter/MsgBoxTabAdapter.kt | 703 ++++++++++++++++++ .../res/drawable-xhdpi/icon_tab_notice.png | Bin 0 -> 11615 bytes .../main/res/layout/item_tab_autopilot.xml | 51 ++ .../src/main/res/layout/item_tab_fm.xml | 118 +++ .../src/main/res/layout/item_tab_fsm.xml | 51 ++ .../main/res/layout/item_tab_ipc_report.xml | 109 +++ .../src/main/res/layout/item_tab_notice.xml | 68 ++ .../main/res/layout/item_tab_operation.xml | 52 ++ .../res/layout/item_tab_operation_door.xml | 56 ++ .../res/layout/item_tab_operation_return.xml | 57 ++ .../res/layout/item_tab_operation_stop.xml | 56 ++ .../src/main/res/layout/item_tab_ssm.xml | 51 ++ .../src/main/res/layout/item_tab_summary.xml | 53 ++ .../src/main/res/layout/item_tab_v2x.xml | 50 ++ ...t_msg_box_tab.xml => view_msg_box_tab.xml} | 14 +- .../src/main/res/values/strings.xml | 20 + 17 files changed, 1524 insertions(+), 25 deletions(-) create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/bone/tab/adapter/MsgBoxTabAdapter.kt create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_tab_notice.png create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_tab_autopilot.xml create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_tab_fm.xml create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_tab_fsm.xml create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_tab_ipc_report.xml create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_tab_notice.xml create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_tab_operation.xml create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_tab_operation_door.xml create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_tab_operation_return.xml create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_tab_operation_stop.xml create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_tab_ssm.xml create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_tab_summary.xml create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_tab_v2x.xml rename core/function-impl/mogo-core-function-hmi/src/main/res/layout/{layout_msg_box_tab.xml => view_msg_box_tab.xml} (87%) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/bone/tab/MsgBoxTabView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/bone/tab/MsgBoxTabView.kt index fdbcc2a63e..daa3e140fb 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/bone/tab/MsgBoxTabView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/bone/tab/MsgBoxTabView.kt @@ -19,7 +19,7 @@ import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxListenerManager import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager import com.mogo.eagle.core.function.call.order.CallerOrderListenerManager import com.mogo.eagle.core.function.hmi.R -import com.mogo.eagle.core.function.hmi.ui.msgbox.adapter.DriverMsgBoxListAdapter +import com.mogo.eagle.core.function.hmi.bone.tab.adapter.MsgBoxTabAdapter import com.mogo.eagle.core.function.msgbox.MsgBoxConfig import com.mogo.eagle.core.utilcode.util.UiThreadHandler import kotlinx.android.synthetic.main.layout_driver_msg_box_list.view.* @@ -40,7 +40,7 @@ class MsgBoxTabView @JvmOverloads constructor( IOrderListener { init { - LayoutInflater.from(context).inflate(R.layout.layout_msg_box_tab, this, true) + LayoutInflater.from(context).inflate(R.layout.view_msg_box_tab, this, true) initView() } private val TAG = "MsgBoxTabView" @@ -48,14 +48,14 @@ class MsgBoxTabView @JvmOverloads constructor( private var fmList: ArrayList ?= ArrayList() //FM信息消息列表 private var ipcReportList: ArrayList ?= null //车辆系统信息消息列表 private var badCaseList: ArrayList ?= null//录包消息列表 - private var driverMsgBoxListAdapter: DriverMsgBoxListAdapter ?=null + private var msgBoxTabAdapter: MsgBoxTabAdapter ?=null private var linearLayoutManager: LinearLayoutManager ?= null private var isShowSummary = false //是否展示汇总消息 private fun initView() { - driverMsgBoxListAdapter= DriverMsgBoxListAdapter(context as Activity) - rvMsgBoxList.adapter = driverMsgBoxListAdapter + msgBoxTabAdapter= MsgBoxTabAdapter(context as Activity) + rvMsgBoxList.adapter = msgBoxTabAdapter linearLayoutManager = LinearLayoutManager(context) rvMsgBoxList.layoutManager = linearLayoutManager @@ -82,7 +82,7 @@ class MsgBoxTabView @JvmOverloads constructor( if(noticeList==null){ rvMsgBoxList.visibility = View.GONE }else{ - driverMsgBoxListAdapter?.setData(noticeList!!) + msgBoxTabAdapter?.setData(noticeList!!) rvMsgBoxList.visibility = View.VISIBLE rvMsgBoxList.scrollToPosition(0) } @@ -102,7 +102,7 @@ class MsgBoxTabView @JvmOverloads constructor( if(fmList == null){ rvMsgBoxList.visibility = View.GONE }else{ - driverMsgBoxListAdapter?.setData(fmList!!) + msgBoxTabAdapter?.setData(fmList!!) rvMsgBoxList.visibility = View.VISIBLE rvMsgBoxList.scrollToPosition(0) } @@ -121,7 +121,7 @@ class MsgBoxTabView @JvmOverloads constructor( if(ipcReportList == null){ rvMsgBoxList.visibility = View.GONE }else{ - driverMsgBoxListAdapter?.setData(ipcReportList!!) + msgBoxTabAdapter?.setData(ipcReportList!!) rvMsgBoxList.visibility = View.VISIBLE rvMsgBoxList.scrollToPosition(0) } @@ -141,7 +141,7 @@ class MsgBoxTabView @JvmOverloads constructor( if(badCaseList == null){ rvMsgBoxList.visibility = View.GONE }else{ - driverMsgBoxListAdapter?.setData(badCaseList!!) + msgBoxTabAdapter?.setData(badCaseList!!) rvMsgBoxList.visibility = View.VISIBLE rvMsgBoxList.scrollToPosition(0) } @@ -165,7 +165,7 @@ class MsgBoxTabView @JvmOverloads constructor( if(noticeList==null){ rvMsgBoxList.visibility = View.GONE }else{ - driverMsgBoxListAdapter?.setData(noticeList!!) + msgBoxTabAdapter?.setData(noticeList!!) rvMsgBoxList.visibility = View.VISIBLE rvMsgBoxList.scrollToPosition(0) } @@ -183,7 +183,7 @@ class MsgBoxTabView @JvmOverloads constructor( if(fmList == null){ rvMsgBoxList.visibility = View.GONE }else{ - driverMsgBoxListAdapter?.setData(fmList!!) + msgBoxTabAdapter?.setData(fmList!!) rvMsgBoxList.visibility = View.VISIBLE rvMsgBoxList.scrollToPosition(0) } @@ -201,7 +201,7 @@ class MsgBoxTabView @JvmOverloads constructor( if(ipcReportList == null){ rvMsgBoxList.visibility = View.GONE }else{ - driverMsgBoxListAdapter?.setData(ipcReportList!!) + msgBoxTabAdapter?.setData(ipcReportList!!) rvMsgBoxList.visibility = View.VISIBLE rvMsgBoxList.scrollToPosition(0) } @@ -219,7 +219,7 @@ class MsgBoxTabView @JvmOverloads constructor( if(badCaseList == null){ rvMsgBoxList.visibility = View.GONE }else{ - driverMsgBoxListAdapter?.setData(badCaseList!!) + msgBoxTabAdapter?.setData(badCaseList!!) rvMsgBoxList.visibility = View.VISIBLE rvMsgBoxList.scrollToPosition(0) } @@ -238,14 +238,14 @@ class MsgBoxTabView @JvmOverloads constructor( if(isShowSummary){ noticeList?.add(0,msgBoxList) if(MsgBoxConfig.getUserRecord() == 0){ - noticeList?.let { driverMsgBoxListAdapter?.setData(it) } + noticeList?.let { msgBoxTabAdapter?.setData(it) } } isShowSummary = false } }else{ noticeList?.add(0,msgBoxList) if(MsgBoxConfig.getUserRecord() == 0){ - noticeList?.let { driverMsgBoxListAdapter?.setData(it) } + noticeList?.let { msgBoxTabAdapter?.setData(it) } } } } @@ -253,21 +253,21 @@ class MsgBoxTabView @JvmOverloads constructor( MsgCategory.FM_INFO -> { fmList?.add(0,msgBoxList) if(MsgBoxConfig.getUserRecord() == 1){ - fmList?.let { driverMsgBoxListAdapter?.setData(it) } + fmList?.let { msgBoxTabAdapter?.setData(it) } } } //系统信息 MsgCategory.SYS_INFO -> { ipcReportList?.add(0,msgBoxList) if(MsgBoxConfig.getUserRecord() == 2){ - ipcReportList?.let { driverMsgBoxListAdapter?.setData(it) } + ipcReportList?.let { msgBoxTabAdapter?.setData(it) } } } //录包 MsgCategory.RECORD_BAG -> { badCaseList?.add(0,msgBoxList) if(MsgBoxConfig.getUserRecord() == 3){ - badCaseList?.let { driverMsgBoxListAdapter?.setData(it) } + badCaseList?.let { msgBoxTabAdapter?.setData(it) } } } else -> {} @@ -294,7 +294,7 @@ class MsgBoxTabView @JvmOverloads constructor( @Subscribe(threadMode = ThreadMode.MAIN) fun notifyList(msgBoxList: MsgBoxBean){ badCaseList?.let { - driverMsgBoxListAdapter?.notifyItemRemoved(it.indexOf(msgBoxList)) + msgBoxTabAdapter?.notifyItemRemoved(it.indexOf(msgBoxList)) it.remove(msgBoxList) } } @@ -328,7 +328,7 @@ class MsgBoxTabView @JvmOverloads constructor( notifyData() ipcReportList?.let { linearLayoutManager?.scrollToPositionWithOffset(it.indexOf(msgBoxBean),0) - driverMsgBoxListAdapter?.setReportShowData(msgBoxBean) + msgBoxTabAdapter?.setReportShowData(msgBoxBean) } } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/bone/tab/adapter/MsgBoxTabAdapter.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/bone/tab/adapter/MsgBoxTabAdapter.kt new file mode 100644 index 0000000000..16dddfc9b9 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/bone/tab/adapter/MsgBoxTabAdapter.kt @@ -0,0 +1,703 @@ +package com.mogo.eagle.core.function.hmi.bone.tab.adapter + +import android.annotation.SuppressLint +import android.app.Activity +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.core.content.res.ResourcesCompat +import androidx.core.view.isVisible +import androidx.recyclerview.widget.RecyclerView +import com.mogo.eagle.core.data.enums.DataSourceType +import com.mogo.eagle.core.data.enums.EventTypeEnumNew +import com.mogo.eagle.core.data.msgbox.* +import com.mogo.eagle.core.data.deva.report.ReportEntity +import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager +import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager +import com.mogo.eagle.core.function.call.hmi.CallerHmiManager +import com.mogo.eagle.core.function.hmi.R +import com.mogo.eagle.core.utilcode.mogo.glide.GlideApp +import com.mogo.eagle.core.utilcode.mogo.glide.transform.GlideRoundedCornersTransform +import com.mogo.eagle.core.utilcode.util.ResourceUtils.getDrawable +import com.mogo.eagle.core.utilcode.util.TimeUtils +import com.mogo.eagle.core.utilcode.util.TimeUtils.getHourMinFormat +import com.mogo.eagle.core.utilcode.util.ToastUtils + +/** + * 司机端Tab类型的消息盒子适配器 + */ +class MsgBoxTabAdapter(private val activity: Activity) : + RecyclerView.Adapter() { + + private var data: List? = null + private var reportBean: MsgBoxBean ?= null + + private val operation: Int = 1 + private val operationReturn: Int = 10 + private val operationStop: Int = 11 + private val operationDoorSwitchFail: Int = 13 + private val notice: Int = 2 + private val v2x: Int = 3 + private val fm: Int = 4 //FM信息 + private val report: Int = 5 //系统信息 + private val record: Int = 6 //录包 + private val summary: Int = 8 //汇总消息 + private val ssm: Int = 9 //SSM连接消息 + private val autopilot = 20 //工控机连接消息 + private val fsm = 21 //fsm消息 + + private val none = -1 + + + //Error + private val RESULT_AUTOPILOT_DISABLE = "RESULT_AUTOPILOT_DISABLE" + private val RESULT_AUTOPILOT_SYSTEM_UNSTARTED = "RESULT_AUTOPILOT_SYSTEM_UNSTARTED" + private val RESULT_REMOTEPILOT_DISABLE = "RESULT_REMOTEPILOT_DISABLE" + + //Warning + private val RESULT_AUTOPILOT_INFERIOR = "RESULT_AUTOPILOT_INFERIOR" + private val RESULT_SHOW_WARNING = "RESULT_SHOW_WARNING" + private val RESULT_REMOTEPILOT_INFERIOR = "RESULT_REMOTEPILOT_INFERIOR" + + fun setData(data: List) { + this.data = data + notifyDataSetChanged() + } + + fun setReportShowData(reportClickBean: MsgBoxBean){ + reportBean = reportClickBean + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { + when (viewType) { + //录包 + record -> { + val view = LayoutInflater.from(parent.context) + .inflate(R.layout.item_tab_bad_case, parent, false) + return BadCaseHolder(view) + } + //系统信息 + report -> { + val view = LayoutInflater.from(parent.context) + .inflate(R.layout.item_tab_ipc_report, parent, false) + return MsgBoxIpcReportHolder(view) + } + //FM信息 + fm -> { + val view = LayoutInflater.from(parent.context) + .inflate(R.layout.item_tab_fm,parent,false) + return FmInfoHolder(view) + } + //运营平台 + operation -> { + val view = LayoutInflater.from(parent.context) + .inflate(R.layout.item_tab_operation, parent, false) + return MsgBoxOperation(view) + } + //运营平台还车通知 + operationReturn -> { + val view = LayoutInflater.from(parent.context) + .inflate(R.layout.item_tab_operation_return, parent, false) + return MsgBoxOperationReturn(view) + } + //运营平台靠边停车通知 + operationStop -> { + val view = LayoutInflater.from(parent.context) + .inflate(R.layout.item_tab_operation_stop, parent, false) + return MsgBoxOperationStop(view) + } + //运营平台开关门失败 + operationDoorSwitchFail -> { + val view = LayoutInflater.from(parent.context) + .inflate(R.layout.item_tab_operation_door, parent, false) + return MsgBoxOperationDoor(view) + } + //官方公告 + notice -> { + val view = LayoutInflater.from(parent.context) + .inflate(R.layout.item_tab_notice, parent, false) + return MsgBoxNotice(view) + } + //汇总消息 + summary -> { + val view = LayoutInflater.from(parent.context) + .inflate(R.layout.item_tab_summary, parent, false) + return MsgBoxSummary(view) + } + //SSM连接状态消息 + ssm -> { + val view = LayoutInflater.from(parent.context) + .inflate(R.layout.item_tab_ssm,parent,false) + return MsgBoxSsm(view) + } + //域控制器连接状态消息 + autopilot -> { + val view = LayoutInflater.from(parent.context) + .inflate(R.layout.item_tab_autopilot,parent,false) + return MsgBoxAutopilot(view) + } + //fsm消息 + fsm -> { + val view = LayoutInflater.from(parent.context) + .inflate(R.layout.item_tab_fsm,parent,false) + return MsgBoxFSM(view) + } + //V2X消息 + else -> { + val view = LayoutInflater.from(parent.context) + .inflate(R.layout.item_tab_v2x, parent, false) + return MsgBoxV2X(view) + } + } + } + + @SuppressLint("SetTextI18n") + override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { + when (holder) { + //录包 + is BadCaseHolder -> { + data?.let { + holder.tvBagReceiveTime.text = + TimeUtils.millis2String(it[position].timestamp, getHourMinFormat()) + holder.tvBagRecordTime.text = + "时间:${TimeUtils.millis2String(it[position].timestamp)}" + val msgBoxBean = it[position] + val recordBagMsg = msgBoxBean.bean as RecordBagMsg + holder.tvRecordCheck.setOnClickListener { + if(recordBagMsg.isShow){ + ToastUtils.showShort("当前录包上报面板已打开,请勿重复操作") + }else{ + //打开被动录包弹窗 + CallerDevaToolsManager.onReceiveBadCaseRecord(msgBoxBean, activity, false) + recordBagMsg.isShow = true + } + } + } + } + //FM信息 + is FmInfoHolder -> { + data?.let { + val fmInfoMsg = it[position].bean as FMInfoMsg + //时间显示 + holder.tvFmTime.text = + "时间:${fmInfoMsg.policyTime?.let { it1 -> TimeUtils.millis2String(it1) }}" + holder.tvFmTime.text = + fmInfoMsg.policyTime?.let { it1 -> TimeUtils.millis2String(it1,getHourMinFormat()) } + //建议操作 + if(fmInfoMsg.fmInfoList.isNullOrEmpty()){ + //建议操作暂无 + holder.tvFmAction.text = "建议操作:暂无" + //Title + holder.tvFmTitle.text = "暂无建议操作" + }else{ + val receiveFaultLevel = ArrayList() + fmInfoMsg.fmInfoList!!.forEach { info -> + if(info.faultActionCount != 0){ + info.faultActionList.forEach { action -> + //如果不包含此故障Level,则进行添加 + if(!receiveFaultLevel.contains(MsgFmData.FaultAction.getFaultLevel(action))){ + receiveFaultLevel.add(MsgFmData.FaultAction.getFaultLevel(action)) + } + } + } + } + //对faultLevel集合进行排序,按照顺序输出建议操作 + if(receiveFaultLevel.size > 0){ + val faultActionStr: StringBuilder = StringBuilder() + faultActionStr.append("建议操作:") + receiveFaultLevel.sort() +// receiveFaultLevel.reverse() + //Title + holder.tvFmTitle.text = MsgFmData.FaultAction.getFaultTitle(receiveFaultLevel[0]) + //不同级别的Icon显示 + when(receiveFaultLevel[0]){ + 0->{ + //重度预警样式 + holder.ivFmImage.setImageDrawable(getDrawable(R.drawable.icon_fm_stop_normal)) + } + 1,2,3->{ + //中度预警样式 + holder.ivFmImage.setImageDrawable(getDrawable(R.drawable.icon_fm_reduce_normal)) + } + 4,5->{ + //轻度预警样式 + holder.ivFmImage.setImageDrawable(getDrawable(R.drawable.icon_fm_warning_normal)) + } + } + receiveFaultLevel.forEach {level-> + if(MsgFmData.FaultAction.getFaultAction(level).isNotBlank()){ + faultActionStr.append(MsgFmData.FaultAction.getFaultAction(level)) + } + if(MsgFmData.FaultAction.getFaultActionCode(level).isNotBlank()){ + faultActionStr.append("(") + faultActionStr.append(MsgFmData.FaultAction.getFaultActionCode(level)) + faultActionStr.append(")") + } + if(MsgFmData.FaultAction.getFaultAction(level).isNotBlank() || MsgFmData.FaultAction.getFaultActionCode(level).isNotBlank()){ + faultActionStr.append(";") + } + } + if(faultActionStr.length > 5){ + if(faultActionStr.endsWith(";")){ + faultActionStr.deleteCharAt(faultActionStr.lastIndex) + } + holder.tvFmAction.text = faultActionStr.toString() + }else{ + holder.tvFmAction.text = "建议操作:暂无" + } + }else{ + holder.tvFmAction.text = "建议操作:暂无" + //轻度预警样式 + holder.ivFmImage.setImageDrawable(getDrawable(R.drawable.icon_fm_warning_normal)) + } + } + //故障策略 + holder.tvFmFault.text = "故障策略:${MsgFmData.getFmPolicyName(fmInfoMsg.policyCode)}(${fmInfoMsg.policyCode})" + //故障原因 + if(fmInfoMsg.fmInfoList.isNullOrEmpty()){ + holder.tvFmReason.text = "故障原因:暂无" + }else{ + val fmFaultReason = StringBuilder() + fmFaultReason.append("故障原因:") + for((index,info) in fmInfoMsg.fmInfoList!!.withIndex()){ + fmFaultReason.append(info.faultName) + if(info.faultId.isNotBlank()){ + fmFaultReason.append("(") + fmFaultReason.append(info.faultId) + fmFaultReason.append(")") + } + if(index!=(fmInfoMsg.fmInfoList!!.size-1)){ + fmFaultReason.append("/") + } + } + holder.tvFmReason.text = fmFaultReason.toString() + } + //故障后果 + if(fmInfoMsg.fmInfoList.isNullOrEmpty()){ + holder.tvFmResult.text = "故障后果:暂无" + }else{ + val fmFaultResult = StringBuilder() + fmFaultResult.append("故障后果:") + fmInfoMsg.fmInfoList!!.forEach { info-> + if(info.faultResultCount != 0){ + info.faultResultList.forEach { result-> + if(MsgFmData.FaultResult.getResultDefine(result).isNotBlank()){ + fmFaultResult.append(MsgFmData.FaultResult.getResultDefine(result)) + } + if(result.isNotBlank()){ + fmFaultResult.append("(") + fmFaultResult.append(result) + fmFaultResult.append(")") + } + if(MsgFmData.FaultResult.getResultDefine(result).isNotBlank() || result.isNotBlank()){ + fmFaultResult.append("/") + } + } + } + } + if(fmFaultResult.endsWith("/")){ + holder.tvFmResult.text = fmFaultResult.deleteCharAt(fmFaultResult.lastIndex).toString() + }else{ + holder.tvFmResult.text = "故障后果:暂无" + } + } + //对布局进行展开折叠操作 + if(fmInfoMsg.isShow){ + holder.tvFmShowStatus.text = "收起" + holder.tvFmFault.visibility = View.VISIBLE + holder.tvFmReason.visibility = View.VISIBLE + holder.tvFmResult.visibility = View.VISIBLE + }else{ + holder.tvFmShowStatus.text = "展开" + holder.tvFmFault.visibility = View.GONE + holder.tvFmReason.visibility = View.GONE + holder.tvFmResult.visibility = View.GONE + } + holder.tvFmShowStatus.setOnClickListener{ + if(!fmInfoMsg.isShow){ + fmInfoMsg.isShow = true + holder.tvFmShowStatus.text = "收起" + holder.tvFmFault.visibility = View.VISIBLE + holder.tvFmReason.visibility = View.VISIBLE + holder.tvFmResult.visibility = View.VISIBLE + }else{ + fmInfoMsg.isShow = false + holder.tvFmShowStatus.text = "展开" + holder.tvFmFault.visibility = View.GONE + holder.tvFmReason.visibility = View.GONE + holder.tvFmResult.visibility = View.GONE + } + } + } + } + //系统信息 + is MsgBoxIpcReportHolder -> { + data?.let { it -> + val reportMsgBox = it[position] + holder.tvReportTime.text = + "时间:${TimeUtils.millis2String(it[position].timestamp)}" + val reportEntity = (it[position].bean as ReportEntity) + if (reportEntity.resultList.contains(RESULT_AUTOPILOT_DISABLE) + || reportEntity.resultList.contains(RESULT_AUTOPILOT_SYSTEM_UNSTARTED) + || reportEntity.resultList.contains(RESULT_REMOTEPILOT_DISABLE) + ) { + //Error + holder.ivReportImage.setImageDrawable(getDrawable(R.drawable.icon_report_error_normal)) + holder.tvReportLevel.text = "Error" + } else if(reportEntity.resultList.contains(RESULT_AUTOPILOT_INFERIOR) + || reportEntity.resultList.contains(RESULT_SHOW_WARNING) + || reportEntity.resultList.contains(RESULT_REMOTEPILOT_INFERIOR) + ){ + //Warning + holder.ivReportImage.setImageDrawable(getDrawable(R.drawable.icon_report_warning_normal)) + holder.tvReportLevel.text = "Warning" + }else { + //INFO + holder.ivReportImage.setImageDrawable(getDrawable(R.drawable.icon_report_info_normal)) + holder.tvReportLevel.text = "Info" + } + + holder.tvReportTime.text = + "时间:${TimeUtils.millis2String(it[position].timestamp)}" + holder.tvReportShowTime.text = + TimeUtils.millis2String(it[position].timestamp, getHourMinFormat()) + var resultStr = "类型:" + for (result in reportEntity.resultList) { + resultStr = + "${resultStr}${CallerAutoPilotControlManager.getReportResultDesc(result)}" + } + holder.tvReportType.text = resultStr + holder.tvReportReason.text = "原因:${reportEntity.msg}" + holder.tvReportSrc.text = "消息来源:${reportEntity.src}" + var actionStr = "" + for (action in reportEntity.actionsList) { + actionStr = + "${actionStr}${CallerAutoPilotControlManager.getReportActionDesc(action)}" + } + holder.tvReportAction.text = "建议操作:$actionStr" + holder.tvReportShowStatus.tag = reportEntity + if(reportEntity.isShow){ + holder.tvReportShowStatus.text = "收起" + holder.tvReportReason.visibility = View.VISIBLE + holder.tvReportSrc.visibility = View.VISIBLE + holder.tvReportAction.visibility = View.VISIBLE + }else{ + holder.tvReportShowStatus.text = "展开" + holder.tvReportReason.visibility = View.GONE + holder.tvReportSrc.visibility = View.GONE + holder.tvReportAction.visibility = View.GONE + } + holder.tvReportShowStatus.setOnClickListener { + if (!reportEntity.isShow) { + reportEntity.isShow = true + holder.tvReportShowStatus.text = "收起" + holder.tvReportReason.visibility = View.VISIBLE + holder.tvReportSrc.visibility = View.VISIBLE + holder.tvReportAction.visibility = View.VISIBLE + } else { + reportEntity.isShow = false + holder.tvReportShowStatus.text = "展开" + holder.tvReportReason.visibility = View.GONE + holder.tvReportSrc.visibility = View.GONE + holder.tvReportAction.visibility = View.GONE + } + } + reportBean?.let { + if(reportMsgBox.timestamp == it.timestamp){ + holder.tvReportShowStatus.performClick() + } + } + + } + } + //运营平台 + is MsgBoxOperation -> { + data?.let { + val operationMsg = it[position].bean as OperationMsg + holder.tvOperationContent.text = operationMsg.content + holder.tvOperationTime.text = + TimeUtils.millis2String(operationMsg.timestamp, getHourMinFormat()) + } + } + //运营平台还车通知 + is MsgBoxOperationReturn -> { + data?.let { + val operationReturnMsg = it[position].bean as OperationMsg + holder.tvOperationReturnContent.text = operationReturnMsg.content + holder.tvOperationReturnTime.text = + TimeUtils.millis2String(operationReturnMsg.timestamp, getHourMinFormat()) + } + } + //运营平台靠边停车 + is MsgBoxOperationStop -> { + data?.let { + val operationStopMsg = it[position].bean as OperationMsg + holder.tvOperationStopTime.text = + TimeUtils.millis2String(operationStopMsg.timestamp, getHourMinFormat()) + holder.tvOperationStopContent.text = operationStopMsg.content + } + } + //运营平台开关门失败 + is MsgBoxOperationDoor -> { + data?.let{ + val operationDoorMsg = it[position].bean as OperationMsg + holder.tvOperationDoorTime.text = + TimeUtils.millis2String(operationDoorMsg.timestamp, getHourMinFormat()) + holder.tvOperationDoorContent.text = operationDoorMsg.content + } + } + //官方公告 + is MsgBoxNotice -> { + data?.let { + val noticeFrCloudMsg = it[position].bean as NoticeFrCloudMsg + if (noticeFrCloudMsg.type == 0) { + val noticeNormalData = noticeFrCloudMsg.noticeNormalData + holder.tvNoticeTime.text = + TimeUtils.millis2String(it[position].timestamp, getHourMinFormat()) + holder.tvNoticeContent.text = noticeNormalData?.content + GlideApp.with(activity).load(noticeNormalData?.imageUrl).optionalTransform( + GlideRoundedCornersTransform( + 20f, + GlideRoundedCornersTransform.CornerType.ALL + ) + ).into(holder.ivNoticeImage) + holder.tvNoticeCheck.setOnClickListener { + //云公告 + noticeNormalData?.let { it1 -> CallerHmiManager.showNoticeNormalData(it1) } + } + } else if (noticeFrCloudMsg.type == 1) { + val noticeTrafficStylePushData = noticeFrCloudMsg.trafficPushData + holder.tvNoticeTime.text = + TimeUtils.millis2String(it[position].timestamp, getHourMinFormat()) + holder.tvNoticeContent.text = noticeTrafficStylePushData?.content + GlideApp.with(activity).load(noticeTrafficStylePushData?.poiImgUrl) + .optionalTransform( + GlideRoundedCornersTransform( + 20f, + GlideRoundedCornersTransform.CornerType.ALL + ) + ).into(holder.ivNoticeImage) + holder.tvNoticeCheck.setOnClickListener { + //云公告 + noticeTrafficStylePushData?.let { it1 -> + CallerHmiManager.showTrafficBanner( + it1 + ) + } + } + } + + } + } + is MsgBoxV2X -> { + data?.let { + val msgBoxBean = it[position] + val v2XMsg = msgBoxBean.bean as V2XMsg + holder.tvV2XTime.text = + TimeUtils.millis2String(it[position].timestamp, getHourMinFormat()) + holder.tvV2XContent.text = v2XMsg.content + holder.ivV2XImage.setImageDrawable(ResourcesCompat.getDrawable(activity.resources,EventTypeEnumNew.getUpdateIconRes(v2XMsg.type),null)) + if(v2XMsg.type== EventTypeEnumNew.TYPE_VERIFICATION_SUCCESSFUL.poiType||v2XMsg.type == EventTypeEnumNew.TYPE_DEVICE_STATUS_NORMAL.poiType){ + holder.itemView.setBackgroundResource(R.drawable.bg_temp_v2x_success) + }else{ + holder.itemView.setBackgroundResource(R.drawable.bg_msg_box_v2x) + } + if(v2XMsg.communicationType.isNullOrEmpty()){ + holder.tvV2XTitle.text = EventTypeEnumNew.getEventTitle(v2XMsg.type) + }else{ + holder.tvV2XTitle.text = String.format(activity.resources.getString(R.string.v2x_title_content), + v2XMsg.communicationType,EventTypeEnumNew.getEventTitle(v2XMsg.type)) + } + } + } + //汇总消息 + is MsgBoxSummary -> { + data?.let { + val summaryMsg = it[position].bean as V2XMsg + holder.tvSummaryTime.text = + TimeUtils.millis2String(it[position].timestamp, getHourMinFormat()) + holder.tvSummaryContent.text = summaryMsg.content + } + } + //SSM连接状态消息 + is MsgBoxSsm -> { + data?.let { + val ssmMsg = it[position].bean as SSMMsg + holder.tvSsmTitle.text = ssmMsg.title + holder.tvSsmContent.text = ssmMsg.content + holder.tvSsmTime.text = TimeUtils.millis2String(ssmMsg.timestamp,getHourMinFormat()) + } + } + //域控制器连接状态消息 + is MsgBoxAutopilot ->{ + data?.let { + val autopilotMsg = it[position].bean as AutopilotMsg + holder.tvAutopilotTitle.text = autopilotMsg.title + holder.tvAutopilotContent.text = autopilotMsg.content + holder.tvAutopilotTime.text = TimeUtils.millis2String(autopilotMsg.timestamp,getHourMinFormat()) + } + } + //fsm消息 + is MsgBoxFSM ->{ + data?.let { + val fsmMsg = it[position].bean as FSMMsg + holder.tvFSMTitle.text = fsmMsg.title + holder.tvFSMContent.text = fsmMsg.content + holder.tvFSMTime.text = TimeUtils.millis2String(fsmMsg.timestamp,getHourMinFormat()) + } + } + } + } + + override fun getItemCount() = data?.size ?: 0 + + + override fun getItemViewType(position: Int): Int { + return if (data!![position].type == MsgBoxType.OPERATION) { + when ((data!![position].bean as OperationMsg).type) { + 0 -> { + //运营平台还车通知 + operationReturn + } + 1 -> { + //运营平台靠边停车 + operationStop + } + 3 -> { + //开关门失败 + operationDoorSwitchFail + } + else -> { + //普通运营平台 + operation + } + } + } else if (data!![position].type == MsgBoxType.NOTICE) { + notice + } else if (data!![position].type == MsgBoxType.V2X && data!![position].sourceType == DataSourceType.SUMMARY) { + summary + } else if (data!![position].type == MsgBoxType.REPORT) { + report + } else if (data!![position].type == MsgBoxType.RECORD) { + record + } else if(data!![position].type == MsgBoxType.FMINFO){ + fm + } else if(data!![position].type == MsgBoxType.SSMINFO){ + ssm + } else if(data!![position].type == MsgBoxType.AUTOPILOT){ + autopilot + } else if(data!![position].type == MsgBoxType.FSM){ + fsm + } else if(data!![position].type == MsgBoxType.V2X || data!![position].type == MsgBoxType.OBU){ + v2x + } else { + none + } + } + + //录包实体 + class BadCaseHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + var tvBagRecordTime: TextView = itemView.findViewById(R.id.tvBagRecordTime) + var tvBagReceiveTime: TextView = itemView.findViewById(R.id.tvBagReceiveTime) + var tvRecordCheck: TextView = itemView.findViewById(R.id.tvRecordCheck) + } + + //FM信息 + class FmInfoHolder(itemView: View) : RecyclerView.ViewHolder(itemView){ + var ivFmImage: ImageView = itemView.findViewById(R.id.ivFmImage) //故障级别图标 + var tvFmTitle: TextView = itemView.findViewById(R.id.tvFmTitle) //标题展示故障策略 + var tvFmShowTime: TextView = itemView.findViewById(R.id.tvFmShowTime) //展示时间 + var tvFmShowStatus: TextView = itemView.findViewById(R.id.tvFmShowStatus) //折叠状态 + var tvFmTime: TextView = itemView.findViewById(R.id.tvFmTime) //发生时间 + var tvFmAction: TextView = itemView.findViewById(R.id.tvFmAction) //建议操作 + var tvFmFault: TextView = itemView.findViewById(R.id.tvFmFault) //故障策略 + var tvFmReason: TextView = itemView.findViewById(R.id.tvFmReason) //故障原因 + var tvFmResult: TextView = itemView.findViewById(R.id.tvFmResult) //后果 + } + + //车辆系统信息 + class MsgBoxIpcReportHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + var ivReportImage: ImageView = itemView.findViewById(R.id.ivReportImage) + var tvReportLevel: TextView = itemView.findViewById(R.id.tvReportLevel) + var tvReportTime: TextView = itemView.findViewById(R.id.tvReportTime) + var tvReportType: TextView = itemView.findViewById(R.id.tvReportType) + var tvReportReason: TextView = itemView.findViewById(R.id.tvReportReason) + var tvReportSrc: TextView = itemView.findViewById(R.id.tvReportSrc) + var tvReportAction: TextView = itemView.findViewById(R.id.tvReportAction) + var tvReportShowTime: TextView = itemView.findViewById(R.id.tvReportShowTime) + var tvReportShowStatus: TextView = itemView.findViewById(R.id.tvReportShowStatus) + } + + //运营平台 + class MsgBoxOperation(itemView: View) : RecyclerView.ViewHolder(itemView) { + var ivOperationImage: ImageView = itemView.findViewById(R.id.ivOperationImage) + var tvOperationTitle: TextView = itemView.findViewById(R.id.tvOperationTitle) + var tvOperationContent: TextView = itemView.findViewById(R.id.tvOperationContent) + var tvOperationTime: TextView = itemView.findViewById(R.id.tvOperationTime) + } + + //运营平台还车通知 + class MsgBoxOperationReturn(itemView: View) : RecyclerView.ViewHolder(itemView){ + var tvOperationReturnTime: TextView = itemView.findViewById(R.id.tvOperationReturnTime) + var tvOperationReturnContent: TextView = itemView.findViewById(R.id.tvOperationReturnContent) + } + + //运营平台靠边停车通知 + class MsgBoxOperationStop(itemView: View) : RecyclerView.ViewHolder(itemView){ + var tvOperationStopTime: TextView = itemView.findViewById(R.id.tvOperationStopTime) + var tvOperationStopContent: TextView = itemView.findViewById(R.id.tvOperationStopContent) + } + //运营平台开关门失败 + class MsgBoxOperationDoor(itemView: View) : RecyclerView.ViewHolder(itemView){ + var tvOperationDoorTime: TextView = itemView.findViewById(R.id.tvOperationDoorTime) + var tvOperationDoorContent: TextView = itemView.findViewById(R.id.tvOperationDoorContent) + } + //Notice + class MsgBoxNotice(itemView: View) : RecyclerView.ViewHolder(itemView) { + var ivNoticeImage: ImageView = itemView.findViewById(R.id.ivNoticeImage) + var tvNoticeTime: TextView = itemView.findViewById(R.id.tvNoticeTime) + var tvNoticeCheck: TextView = itemView.findViewById(R.id.tvNoticeCheck) + var tvNoticeContent: TextView = itemView.findViewById(R.id.tvNoticeContent) + } + + //V2X,OBU + class MsgBoxV2X(itemView: View) : RecyclerView.ViewHolder(itemView) { + var ivV2XImage: ImageView = itemView.findViewById(R.id.ivV2XImage) + var tvV2XTime: TextView = itemView.findViewById(R.id.tvV2XTime) + var tvV2XContent: TextView = itemView.findViewById(R.id.tvV2XContent) + var tvV2XTitle: TextView = itemView.findViewById(R.id.tvV2XTitle) + } + + //汇总消息 + class MsgBoxSummary(itemView: View) : RecyclerView.ViewHolder(itemView) { + var tvSummaryContent: TextView = itemView.findViewById(R.id.tvSummaryContent) + var tvSummaryTime: TextView = itemView.findViewById(R.id.tvSummaryTime) + } + + //SSM连接状态 + class MsgBoxSsm(itemView: View) : RecyclerView.ViewHolder(itemView){ + var ivSsmImage: ImageView = itemView.findViewById(R.id.ivSsmImage) + var tvSsmTitle: TextView = itemView.findViewById(R.id.tvSsmTitle) + var tvSsmTime: TextView = itemView.findViewById(R.id.tvSsmTime) + var tvSsmContent: TextView = itemView.findViewById(R.id.tvSsmContent) + } + + //域控制器连接状态 + class MsgBoxAutopilot(itemView: View) : RecyclerView.ViewHolder(itemView){ + var ivAutopilotImage: ImageView = itemView.findViewById(R.id.ivAutopilotImage) + var tvAutopilotTitle: TextView = itemView.findViewById(R.id.tvAutopilotTitle) + var tvAutopilotTime: TextView = itemView.findViewById(R.id.tvAutopilotTime) + var tvAutopilotContent: TextView = itemView.findViewById(R.id.tvAutopilotContent) + } + + //fsm状态 + class MsgBoxFSM(itemView: View) : RecyclerView.ViewHolder(itemView){ + var ivFSMImage: ImageView = itemView.findViewById(R.id.ivFSMImage) + var tvFSMTitle: TextView = itemView.findViewById(R.id.tvFSMTitle) + var tvFSMTime: TextView = itemView.findViewById(R.id.tvFSMTime) + var tvFSMContent: TextView = itemView.findViewById(R.id.tvFSMContent) + } + +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_tab_notice.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_tab_notice.png new file mode 100644 index 0000000000000000000000000000000000000000..6b2541678c67c804a9c938fb187f8252169c86a6 GIT binary patch literal 11615 zcmV-lEuhkgP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91c%TCS1ONa40RR91cmMzZ00`n$?f?KR$w@>(RCodHeGRZ>Rh8bp@4ZH7 zxz;GZd;J~?$?U3g*4pdm zTWjsT&$;KEd+vLq@(XCc|LyUH`Q7E{(Wq=1kIP}BQVt!La@g*1IbeRStlz!6tV3Gs zA>SABHL#mUe*v2)RHeYTKxdSF3L!Ge{RI0l3@^**);R8@O8+=gLhVI$?CLBmLZnQh(9{zHiHT|1~?x$ry-} zu$_qFUkdunu7H{>4QL+lDIaDZXH-0CS6ili&L>0eL4FUS{_BDB&9b{(xpSX##fOg{ zJ(O`*v;U+_@OfLtYj=Cb>8u#$Fj{z`%Gcg+Id%v581g`{uuzd9h4_%Z~#{M z2wZmjJQ73sWc%FD6P)p)eq8Q{`^VSJmye(Kn$h28s6Fkk$^?Jlvhhab{sFAUcVZIv zwt+=PLr28a5s<3L{@Fh3llxRRjwh9QytBhlyo{F@)KGpI-{Wr|kIE-UyUPbZxOsGE z&S|;*6;1FtpBc};;L!3rxUl#`1YS2(;8a0rgi|-eOF(F@-?;zivawLPBTe|y>Z*ty;10@QfCK&I-2LPat=@uXcX4?wmb z(syA-*^vK`K4Oti^Eq`!STs zzE(wTp5f}z!=w?Kn$Q4AgbbhD2S4qxyH3i}%@C&N=VQ(ZdbO?0wC3mKi7a@ipZ#*t}wv-C)Mc ztY~OLb1qM|eU3NPAF6Lip8#jna~&pm^HL_6A!jx_E$=K}#HzC+SF4at;f(LYl(U9T*K;|E+<$CGIUlFOGdPA(#Xr7r(Cn6ZQ!NPG}=U7c7!mzh8U*7_Ta~yBHxE6Z0Q-!cw+*uT2`@s z)O!Z!MxpxX%p>@HUm3p_Iel10%u`2MAK-H2Ln}ICDRy5ztB!{RR5NoCPr4dyRq`E| z_x^`B_Fr9Vtfun)y)TWAogbB}Q4Gjaqz%pRa??zBJPT;h36<2#MPGgUoKUmk78iGy zSAOKo?)zlAOf^2CI$~Yii5oVl5s&jxo7dA^L2KJY|xL+WCtsDsCJh_SM9@jeLcdX^h#zb$@(+Z1|*+@3O6V z&__+YQX{=KRi^=}==f;QZ zUMRPtvv)N5JN{`i0^8?yl_UP+*^}>+Tc5$Z=gV(nweGFY0v-akdbx4~->0`j#%;Uo z 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 literal 0 HcmV?d00001 diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_tab_autopilot.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_tab_autopilot.xml new file mode 100644 index 0000000000..7fb727bf1e --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_tab_autopilot.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_tab_fm.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_tab_fm.xml new file mode 100644 index 0000000000..c380b4d6f4 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_tab_fm.xml @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_tab_fsm.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_tab_fsm.xml new file mode 100644 index 0000000000..bbeac5e08c --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_tab_fsm.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_tab_ipc_report.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_tab_ipc_report.xml new file mode 100644 index 0000000000..c665b26351 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_tab_ipc_report.xml @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_tab_notice.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_tab_notice.xml new file mode 100644 index 0000000000..5d13c330e3 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_tab_notice.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_tab_operation.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_tab_operation.xml new file mode 100644 index 0000000000..cad6212af0 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_tab_operation.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_tab_operation_door.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_tab_operation_door.xml new file mode 100644 index 0000000000..ca155b9e07 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_tab_operation_door.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_tab_operation_return.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_tab_operation_return.xml new file mode 100644 index 0000000000..96327b4318 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_tab_operation_return.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_tab_operation_stop.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_tab_operation_stop.xml new file mode 100644 index 0000000000..0bc0ae4ebc --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_tab_operation_stop.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_tab_ssm.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_tab_ssm.xml new file mode 100644 index 0000000000..149f9f118b --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_tab_ssm.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_tab_summary.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_tab_summary.xml new file mode 100644 index 0000000000..4d0e507a5c --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_tab_summary.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_tab_v2x.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_tab_v2x.xml new file mode 100644 index 0000000000..7068ef5400 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_tab_v2x.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/layout_msg_box_tab.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_msg_box_tab.xml similarity index 87% rename from core/function-impl/mogo-core-function-hmi/src/main/res/layout/layout_msg_box_tab.xml rename to core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_msg_box_tab.xml index 76fae3d457..7adc4edbca 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/layout_msg_box_tab.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_msg_box_tab.xml @@ -1,9 +1,9 @@ @@ -31,6 +32,7 @@ android:textSize="@dimen/sp_40" android:gravity="center_horizontal" android:paddingTop="@dimen/dp_38" + android:layout_marginTop="@dimen/dp_20" app:layout_constraintTop_toTopOf="parent" app:layout_constraintLeft_toRightOf="@id/tvMsgNotice" app:layout_constraintRight_toLeftOf="@id/tvMsgIpcReport" @@ -46,6 +48,7 @@ android:textSize="@dimen/sp_38" android:gravity="center_horizontal" android:paddingTop="@dimen/dp_38" + android:layout_marginTop="@dimen/dp_20" app:layout_constraintTop_toTopOf="parent" app:layout_constraintLeft_toRightOf="@id/tvMsgFm" app:layout_constraintRight_toLeftOf="@id/tvMsgBadCase" @@ -61,9 +64,10 @@ android:textSize="@dimen/sp_40" android:gravity="center_horizontal" android:paddingTop="@dimen/dp_38" + android:layout_marginTop="@dimen/dp_20" app:layout_constraintTop_toTopOf="parent" app:layout_constraintRight_toRightOf="parent" - android:layout_marginEnd="@dimen/dp_26" + android:layout_marginEnd="@dimen/dp_66" /> diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/values/strings.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/values/strings.xml index d20568e1bf..8971ad44f0 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/values/strings.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/values/strings.xml @@ -185,5 +185,25 @@ 系统信息图标 收起 展开 + FM图标 + 收起 + 展开 + 运营图标 + 运营平台 + 还车通知图标 + 还车通知 + 靠边停车图标 + 靠边停车 + 运营平台开关门失败图标 + 运营平台 + 官方公告图标 + 官方公告 + 查看 + 汇总消息图标 + 蘑菇小助手 + SSM图标 + 域控制器连接状态图标 + FSM图标 + V2X图标