diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/DriverMsgBoxBubbleView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/DriverMsgBoxBubbleView.kt index 8415e33cc2..959553636e 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/DriverMsgBoxBubbleView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/DriverMsgBoxBubbleView.kt @@ -8,13 +8,17 @@ import android.view.View import androidx.constraintlayout.widget.ConstraintLayout import androidx.recyclerview.widget.LinearLayoutManager import com.mogo.eagle.core.data.config.FunctionBuildConfig +import com.mogo.eagle.core.data.deva.report.ReportEntity import com.mogo.eagle.core.data.enums.DataSourceType import com.mogo.eagle.core.data.msgbox.FMInfoMsg import com.mogo.eagle.core.data.msgbox.MsgBoxBean import com.mogo.eagle.core.data.msgbox.MsgBoxCountDownBean +import com.mogo.eagle.core.data.msgbox.MsgBoxType import com.mogo.eagle.core.data.msgbox.MsgCategory +import com.mogo.eagle.core.data.msgbox.MsgFmData import com.mogo.eagle.core.function.api.datacenter.msgbox.IMsgBoxListener import com.mogo.eagle.core.function.api.order.IOrderListener +import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxEventListenerManager import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxListenerManager @@ -97,23 +101,53 @@ class DriverMsgBoxBubbleView @JvmOverloads constructor( } } else if(category == MsgCategory.SYS_INFO){ CallerMsgBoxEventListenerManager.invokeUpdateTipListener(true) + if(msgBoxBean.type == MsgBoxType.REPORT){ + val reportMsg = msgBoxBean.bean as ReportEntity + //P8-P1均只收在消息盒子里,P0消息盒子弹出,其中P0弹出时需要判断驾驶状态,非自动驾驶、非平行驾驶状态不弹出,其余状态弹出 + var isShowReport = false + for(action in reportMsg.actionsList){ + if("ACTION_MANUAL_HANDLE_IMMEDIATELY" == action){ + if(CallerAutoPilotStatusListenerManager.getState() == 2 + || CallerAutoPilotStatusListenerManager.getState() == 7){ + isShowReport = true + } + } + } + if(isShowReport){ + //展示消息 + showData(msgBoxBean) + } + } } else if(category == MsgCategory.FM_INFO){ CallerMsgBoxEventListenerManager.invokeUpdateTipListener(true) if(FunctionBuildConfig.isTakeoverRemind){ //属于停车警示(包括择机靠边停车、立即舒适停车、就地紧急停车)时,需要弹出消息气泡并伴有提示音 val fmInfoMsg = msgBoxBean.bean as FMInfoMsg - if(fmInfoMsg.policyCode == "FM_DP_PNC_CHOOSE_STOP" //择机靠边停车 - || fmInfoMsg.policyCode == "FM_DP_COMFORTABLE_STOP" //立刻舒适停车 - || fmInfoMsg.policyCode == "FM_DP_EMERGENCY_STOP" //就地紧急停车 - ){ - //语音提示 - try { - SoundPoolUtils.getSoundPool().playSoundWithRedId(context,R.raw.weak_net_tips) - }catch (e: Exception){ - e.printStackTrace() + var curFaultLevel = 5 //默认级别,遍历数组找出级别最高的(level数越小,级别越高) + fmInfoMsg.fmInfoList?.forEach { faultInfo -> + if(faultInfo.faultActionCount>0){ + faultInfo.faultActionList.forEach {actionCode -> + //获取建议操作级别,得到建议操作级别最高的操作 + if(MsgFmData.FaultAction.getFaultLevel(actionCode) < curFaultLevel){ + curFaultLevel = MsgFmData.FaultAction.getFaultLevel(actionCode) + } + } + } + } + //P0级消息弹出时需要判断驾驶状态,非自动驾驶、非平行驾驶状态不弹出,其余状态弹出 + if(curFaultLevel == 0){ + //自动驾驶状态 0是不可用 1是ready 2是自动驾驶中 7:平行驾驶中 + if(CallerAutoPilotStatusListenerManager.getState() == 2 + || CallerAutoPilotStatusListenerManager.getState() == 7){ + //语音提示 + try { + SoundPoolUtils.getSoundPool().playSoundWithRedId(context,R.raw.weak_net_tips) + }catch (e: Exception){ + e.printStackTrace() + } + //展示消息 + showData(msgBoxBean) } - //展示消息 - showData(msgBoxBean) } } } else{ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxBubbleAdapter.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxBubbleAdapter.kt index fc6ab08a14..18436b65e5 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxBubbleAdapter.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxBubbleAdapter.kt @@ -21,6 +21,7 @@ import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager 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.widget.RoundCanClickConstraintLayout @@ -242,7 +243,6 @@ class DriverMsgBoxBubbleAdapter(private val activity: Activity) : RecyclerView.A is BubbleFmHolder ->{ data?.let { val fmMsg = it[position].msgBoxBean.bean as FMInfoMsg - holder.tvBubbleFmFault.text = MsgFmData.getFmPolicyName(fmMsg.policyCode) if(fmMsg.policyTime == null){ holder.tvBubbleFmTime.text = TimeUtils.millis2String(it[position].msgBoxBean.timestamp,getHourMinFormat()) }else{ @@ -250,26 +250,43 @@ class DriverMsgBoxBubbleAdapter(private val activity: Activity) : RecyclerView.A } if(fmMsg.fmInfoList?.size == 0){ holder.tvBubbleFmFaultAction.text = "建议操作:暂无" + holder.tvBubbleFmFault.text = MsgFmData.getFmPolicyName(fmMsg.policyCode) }else{ - var curFaultLevel = 0 //默认级别,遍历数组找出级别最高的(level数越小大,级别越高) + var curFaultLevel = 5 //默认级别,遍历数组找出级别最高的(level数越小,级别越高) fmMsg.fmInfoList?.forEach { faultInfo -> if(faultInfo.faultActionCount>0){ faultInfo.faultActionList.forEach {actionCode -> //获取建议操作级别,得到建议操作级别最高的操作 - if(MsgFmData.FaultAction.getFaultLevel(actionCode) > curFaultLevel){ + if(MsgFmData.FaultAction.getFaultLevel(actionCode) < curFaultLevel){ curFaultLevel = MsgFmData.FaultAction.getFaultLevel(actionCode) } } } } val faultAction = MsgFmData.FaultAction.getFaultAction(curFaultLevel) + holder.tvBubbleFmFault.text = faultAction //当出现多个建议操作时,按照整车下电重启、请求人工驾驶接管、请求平行驾驶接管、系统重启、联系硬件工程师、 // 联系运维工程师、联系软件工程师优先级递减的顺序,只展示最高优先级的内容 - if(curFaultLevel == 0){ + if(curFaultLevel == 5){ holder.tvBubbleFmFaultAction.text = "建议操作:暂无" }else{ holder.tvBubbleFmFaultAction.text = "${faultAction}(${MsgFmData.FaultAction.getFaultActionCode(curFaultLevel)})" } + //不同级别的Icon显示 + when(curFaultLevel){ + 0->{ + //重度预警样式 + holder.ivBubbleFmImage.setImageDrawable(getDrawable(R.drawable.icon_fm_stop_normal)) + } + 1,2,3->{ + //中度预警样式 + holder.ivBubbleFmImage.setImageDrawable(getDrawable(R.drawable.icon_fm_reduce_normal)) + } + 4,5->{ + //轻度预警样式 + holder.ivBubbleFmImage.setImageDrawable(getDrawable(R.drawable.icon_fm_warning_normal)) + } + } } } } @@ -409,6 +426,7 @@ class DriverMsgBoxBubbleAdapter(private val activity: Activity) : RecyclerView.A var tvBubbleFmFault: TextView = itemView.findViewById(R.id.tvBubbleFmFault) var tvBubbleFmFaultAction: TextView = itemView.findViewById(R.id.tvBubbleFmFaultAction) var tvBubbleFmTime: TextView = itemView.findViewById(R.id.tvBubbleFmTime) + var ivBubbleFmImage: ImageView = itemView.findViewById(R.id.ivBubbleFmImage) } //SSM连接消息 diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxListAdapter.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxListAdapter.kt index a665a8dd12..4147dff501 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxListAdapter.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxListAdapter.kt @@ -173,39 +173,21 @@ class DriverMsgBoxListAdapter(private val activity: Activity) : "时间:${fmInfoMsg.policyTime?.let { it1 -> TimeUtils.millis2String(it1) }}" holder.tvFmTime.text = fmInfoMsg.policyTime?.let { it1 -> TimeUtils.millis2String(it1,getHourMinFormat()) } - //不同级别的Icon显示 - if(fmInfoMsg.policyCode == "FM_DP_ONLY_WARNING"){ - //警示 - holder.ivFmImageNormal.setImageDrawable(getDrawable(R.drawable.icon_fm_warning_normal)) - holder.ivFmImageOpen.setImageDrawable(getDrawable(R.drawable.icon_fm_warning_open)) - }else if(fmInfoMsg.policyCode == "FM_DP_SPEED_LIMIT1" - || fmInfoMsg.policyCode == "FM_DP_SPEED_LIMIT2" - || fmInfoMsg.policyCode == "FM_DP_SPEED_LIMIT3"){ - //降速行驶 - holder.ivFmImageNormal.setImageDrawable(getDrawable(R.drawable.icon_fm_reduce_normal)) - holder.ivFmImageOpen.setImageDrawable(getDrawable(R.drawable.icon_fm_reduce_open)) - }else if(fmInfoMsg.policyCode == "FM_DP_PNC_CHOOSE_STOP" - || fmInfoMsg.policyCode == "FM_DP_COMFORTABLE_STOP" - || fmInfoMsg.policyCode == "FM_DP_EMERGENCY_STOP"){ - //安全停车 - holder.ivFmImageNormal.setImageDrawable(getDrawable(R.drawable.icon_fm_stop_normal)) - holder.ivFmImageOpen.setImageDrawable(getDrawable(R.drawable.icon_fm_stop_open)) - } - //Title - holder.tvFmTitleNormal.text = MsgFmData.getFmPolicyName(fmInfoMsg.policyCode) - holder.tvFmTitleOpen.text = MsgFmData.getFmPolicyName(fmInfoMsg.policyCode) //建议操作 if(fmInfoMsg.fmInfoList.isNullOrEmpty()){ //建议操作暂无 holder.tvFmActionOpen.text = "建议操作:暂无" holder.tvFmActionNormal.text = "建议操作:暂无" + //Title + holder.tvFmTitleNormal.text = MsgFmData.getFmPolicyName(fmInfoMsg.policyCode) + holder.tvFmTitleOpen.text = MsgFmData.getFmPolicyName(fmInfoMsg.policyCode) }else{ val receiveFaultLevel = ArrayList() fmInfoMsg.fmInfoList!!.forEach { info -> if(info.faultActionCount != 0){ info.faultActionList.forEach { action -> //如果不包含此故障Level,则进行添加 - if(!receiveFaultLevel.contains(MsgFmData.FaultAction.getFaultLevel(action)) && MsgFmData.FaultAction.getFaultLevel(action)!=0){ + if(!receiveFaultLevel.contains(MsgFmData.FaultAction.getFaultLevel(action))){ receiveFaultLevel.add(MsgFmData.FaultAction.getFaultLevel(action)) } } @@ -216,7 +198,28 @@ class DriverMsgBoxListAdapter(private val activity: Activity) : val faultActionStr: StringBuilder = StringBuilder() faultActionStr.append("建议操作:") receiveFaultLevel.sort() - receiveFaultLevel.reverse() +// receiveFaultLevel.reverse() + //Title + holder.tvFmTitleNormal.text = MsgFmData.FaultAction.getFaultAction(receiveFaultLevel[0]) + holder.tvFmTitleOpen.text = MsgFmData.FaultAction.getFaultAction(receiveFaultLevel[0]) + //不同级别的Icon显示 + when(receiveFaultLevel[0]){ + 0->{ + //重度预警样式 + holder.ivFmImageNormal.setImageDrawable(getDrawable(R.drawable.icon_fm_stop_normal)) + holder.ivFmImageOpen.setImageDrawable(getDrawable(R.drawable.icon_fm_stop_open)) + } + 1,2,3->{ + //中度预警样式 + holder.ivFmImageNormal.setImageDrawable(getDrawable(R.drawable.icon_fm_reduce_normal)) + holder.ivFmImageOpen.setImageDrawable(getDrawable(R.drawable.icon_fm_reduce_open)) + } + 4,5->{ + //轻度预警样式 + holder.ivFmImageNormal.setImageDrawable(getDrawable(R.drawable.icon_fm_warning_normal)) + holder.ivFmImageOpen.setImageDrawable(getDrawable(R.drawable.icon_fm_warning_open)) + } + } receiveFaultLevel.forEach {level-> if(MsgFmData.FaultAction.getFaultAction(level).isNotBlank()){ faultActionStr.append(MsgFmData.FaultAction.getFaultAction(level)) @@ -227,11 +230,11 @@ class DriverMsgBoxListAdapter(private val activity: Activity) : faultActionStr.append(")") } if(MsgFmData.FaultAction.getFaultAction(level).isNotBlank() || MsgFmData.FaultAction.getFaultActionCode(level).isNotBlank()){ - faultActionStr.append("/") + faultActionStr.append(";") } } if(faultActionStr.length > 5){ - if(faultActionStr.endsWith("/")){ + if(faultActionStr.endsWith(";")){ faultActionStr.deleteCharAt(faultActionStr.lastIndex) } holder.tvFmActionOpen.text = faultActionStr.toString() @@ -243,6 +246,9 @@ class DriverMsgBoxListAdapter(private val activity: Activity) : }else{ holder.tvFmActionOpen.text = "建议操作:暂无" holder.tvFmActionNormal.text = "建议操作:暂无" + //轻度预警样式 + holder.ivFmImageNormal.setImageDrawable(getDrawable(R.drawable.icon_fm_warning_normal)) + holder.ivFmImageOpen.setImageDrawable(getDrawable(R.drawable.icon_fm_warning_open)) } } //故障策略 diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/msgbox/FMInfoMsg.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/msgbox/FMInfoMsg.kt index eefaac14f4..9d72baf4f8 100644 --- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/msgbox/FMInfoMsg.kt +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/msgbox/FMInfoMsg.kt @@ -19,5 +19,6 @@ data class FMInfoMsg( data class FMFilterInfoMsg( var fmInfoList: List?, var policyCode: String?, - var cacheFilterList: MutableList? + var cacheFilterList: MutableList?, + var receiveTime: Long ) \ No newline at end of file diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/msgbox/MsgFmData.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/msgbox/MsgFmData.kt index 32297c55cc..52d3682e4b 100644 --- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/msgbox/MsgFmData.kt +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/msgbox/MsgFmData.kt @@ -15,19 +15,19 @@ class MsgFmData{ val faultLevel: Int//故障处理级别 ){ //请求平行驾驶接管 - FM_ACT_NEED_PARALLEL_DERVING_TAKEOVER("恢复策略","请求平行驾驶接管","FM_ACT_NEED_PARALLEL_DERVING_TAKEOVER","如planing出站时,规划失败",5), + FM_ACT_NEED_PARALLEL_DERVING_TAKEOVER("恢复策略","请求平行驾驶接管","FM_ACT_NEED_PARALLEL_DERVING_TAKEOVER","如planing出站时,规划失败",3), //请求人工驾驶接管 - FM_ACT_NEED_MANNUAL_DERVING("恢复策略","请求人工驾驶接管","FM_ACT_NEED_MANNUAL_DERVING","如planing规划失败,且存在弱网判断",6), + FM_ACT_NEED_MANNUAL_DERVING("恢复策略","请求人工驾驶接管","FM_ACT_NEED_MANNUAL_DERVING","如planing规划失败,且存在弱网判断",0), //系统重启 - FM_ACT_NEED_RESTART_SYSTEM("恢复策略","系统重启","FM_ACT_NEED_RESTART_SYSTEM","如检测到出现多个节点奔溃",4), + FM_ACT_NEED_RESTART_SYSTEM("恢复策略","系统重启","FM_ACT_NEED_RESTART_SYSTEM","如检测到出现多个节点奔溃",2), //整车下电重启 - FM_ACT_MUST_VEHICLE_POWER_RESET("恢复策略","整车下电重启","FM_ACT_MUST_VEHICLE_POWER_RESET","如底盘无数据,需要下电重启",7), + FM_ACT_MUST_VEHICLE_POWER_RESET("恢复策略","整车下电重启","FM_ACT_MUST_VEHICLE_POWER_RESET","如底盘无数据,需要下电重启",1), //请联系硬件工程师 - FM_ACT_CONTACT_HARDWARE_ENGINEER("人工处理","请联系硬件工程师","FM_ACT_CONTACT_HARDWARE_ENGINEER","硬件接线,域控启动等故障",3), + FM_ACT_CONTACT_HARDWARE_ENGINEER("人工处理","请联系硬件工程师","FM_ACT_CONTACT_HARDWARE_ENGINEER","硬件接线,域控启动等故障",4), //请联系运维工程师 - FM_ACT_CONTACT_OPERATIONS_ENGINEER("人工处理","请联系运维工程师","FM_ACT_CONTACT_OPERATIONS_ENGINEER","系统配置不对,网络等故障",2), + FM_ACT_CONTACT_OPERATIONS_ENGINEER("人工处理","请联系运维工程师","FM_ACT_CONTACT_OPERATIONS_ENGINEER","系统配置不对,网络等故障",4), //请联系软件工程师 - FM_ACT_CONTACT_SOFTWARE_ENGINEER("人工处理","请联系软件工程师","FM_ACT_CONTACT_SOFTWARE_ENGINEER","节点挂掉,无法启动等故障",1); + FM_ACT_CONTACT_SOFTWARE_ENGINEER("人工处理","请联系软件工程师","FM_ACT_CONTACT_SOFTWARE_ENGINEER","节点挂掉,无法启动等故障",4); companion object{ diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerFaultManagementStateListenerManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerFaultManagementStateListenerManager.kt index 11ef68c0b8..27cf20598e 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerFaultManagementStateListenerManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerFaultManagementStateListenerManager.kt @@ -4,6 +4,7 @@ import com.mogo.eagle.core.data.msgbox.FMFilterInfoMsg import com.mogo.eagle.core.data.msgbox.FMInfoMsg import com.mogo.eagle.core.data.msgbox.MsgBoxBean import com.mogo.eagle.core.data.msgbox.MsgBoxType +import com.mogo.eagle.core.data.msgbox.MsgFmData import com.mogo.eagle.core.function.api.autopilot.IMoGoFaultManagementStateListener import com.mogo.eagle.core.function.call.base.CallerBase import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager @@ -39,7 +40,11 @@ object CallerFaultManagementStateListenerManager : CallerBase