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 0000000000..6b2541678c Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_tab_notice.png differ 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图标