[8.3.0] FSM Event消息 无法起自驾和异常推自驾消息添加到消息盒子中

This commit is contained in:
xinfengkun
2025-12-22 14:59:53 +08:00
parent ce9fa6cc03
commit 582499595e
27 changed files with 569 additions and 271 deletions

View File

@@ -17,6 +17,7 @@ import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_AD
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_CAR_LOC
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_COLD_START_STATE
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_FM_MSG
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_FSM_EVENT_MSG
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_FSM_MSG
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_GUARDIAN
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_MAP_PARAM
@@ -884,6 +885,16 @@ class MoGoAdasListenerImpl : OnAdasListener {
updateAutoPilotStatus(2, state, mode)
}
@ChainLog(
linkChainLog = CHAIN_TYPE_SOCKET_AUTOPILOT,
linkCode = CHAIN_SOURCE_ADAS,
nodeAliasCode = CHAIN_CODE_ADAS_FSM_EVENT_MSG,
paramIndexes = [0, 1]
)
override fun onFSMEvent(header: MessagePad.Header, fsmEventMsg: Fsm2024.FsmEventMsg) {
CallerFsm2024ListenerManager.invokeFSMEvent(fsmEventMsg)
}
/**
* 定位状态
* 定位呈现状态透传 用于pad图标显示 1hz 所有车型MAP440开始支持

View File

@@ -141,7 +141,7 @@ object DataManager {
CallerMsgBoxListenerManager.invokeListener(MsgCategory.NOTICE, msg)
}
MsgBoxType.FMINFO -> {
MsgBoxType.FSM_EVENT, MsgBoxType.FMINFO -> {
synchronized(this) {
fmInfoList.add(msg)
}

View File

@@ -592,7 +592,9 @@ internal object BadCaseManager : LifecycleEventObserver, IMoGoAutopilotRecordLis
}
}else if(category == MsgCategory.FM_INFO){
//FM
BadCaseConfig.newFMInfoMsg = msgBoxList.bean as FMInfoMsg
if (msgBoxList.type== MsgBoxType.FMINFO) {
BadCaseConfig.newFMInfoMsg = msgBoxList.bean as FMInfoMsg
}
}
}

View File

@@ -50,6 +50,7 @@ class MsgBoxTabAdapter(private val activity: Activity) :
private val nde = 22 //NDE消息车龙
private val ota = 23 //OTA升级消息
private val cloud = 24 //云控基础平台
private val fsmEvent = 25
private val none = -1
@@ -165,6 +166,11 @@ class MsgBoxTabAdapter(private val activity: Activity) :
.inflate(R.layout.item_tab_cloud,parent,false)
return MsgBoxCloud(view)
}
fsmEvent -> {
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.item_tab_fm,parent,false)
return FSMEventInfoHolder(view)
}
//V2X消息
else -> {
val view = LayoutInflater.from(parent.context)
@@ -202,170 +208,176 @@ class MsgBoxTabAdapter(private val activity: Activity) :
//FM信息
is FmInfoHolder -> {
data?.let {
val fmInfoMsg = it[position].bean as FMInfoMsg
//时间显示
holder.tvFmTime.text =
val temp = it[position]
if (temp.type == MsgBoxType.FMINFO) {
val fmInfoMsg = temp.bean as FMInfoMsg
//时间显示
holder.tvFmTime.text =
// "时间:${fmInfoMsg.policyTime?.let { it1 -> TimeUtils.millis2String(it1) }}"
"${StringUtils.getString(R.string.module_core_time)}${fmInfoMsg.policyTime?.let { it1 -> TimeUtils.millis2String(it1) }}"
//建议操作
if(fmInfoMsg.fmInfoList.isNullOrEmpty()){
//建议操作暂无
"${StringUtils.getString(R.string.module_core_time)}${fmInfoMsg.policyTime?.let { it1 -> TimeUtils.millis2String(it1) }}"
//建议操作
if (fmInfoMsg.fmInfoList.isNullOrEmpty()) {
//建议操作暂无
// holder.tvFmAction.text = "建议操作:暂无"
holder.tvFmAction.text = StringUtils.getString(R.string.module_core_suggested_procedure_not_available)
//Title
// holder.tvFmTitle.text = "暂无建议操作"
holder.tvFmTitle.text = StringUtils.getString(R.string.module_core_not_available_suggested_procedure)
}else{
val receiveFaultLevel = ArrayList<Int>()
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("建议操作:")
faultActionStr.append(StringUtils.getString(R.string.module_core_suggested_procedure))
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_severe_warning))
}
1,2,3->{
//中度预警样式
holder.ivFmImage.setImageDrawable(getDrawable(R.drawable.icon_fm_moderate_warning))
}
4,5->{
//轻度预警样式
holder.ivFmImage.setImageDrawable(getDrawable(R.drawable.icon_fm_mild_warning))
}
}
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 = "建议操作:暂无"
holder.tvFmAction.text = StringUtils.getString(R.string.module_core_suggested_procedure_not_available)
}
}else{
// holder.tvFmAction.text = "建议操作:暂无"
holder.tvFmAction.text = StringUtils.getString(R.string.module_core_suggested_procedure_not_available)
//轻度预警样式
holder.ivFmImage.setImageDrawable(getDrawable(R.drawable.icon_fm_mild_warning))
}
}
//故障策略
// holder.tvFmFault.text = "故障策略:${MsgFmData.getFmPolicyName(fmInfoMsg.policyCode)}(${fmInfoMsg.policyCode})"
holder.tvFmFault.text = "${StringUtils.getString(R.string.module_core_fault_handling_strategy)}${MsgFmData.getFmPolicyName(fmInfoMsg.policyCode)}(${fmInfoMsg.policyCode})"
//故障原因
if(fmInfoMsg.fmInfoList.isNullOrEmpty()){
// holder.tvFmReason.text = "故障原因:暂无"
holder.tvFmReason.text = StringUtils.getString(R.string.module_core_failure_cause_not_available)
}else{
val fmFaultReason = StringBuilder()
// fmFaultReason.append("故障原因:")
fmFaultReason.append(StringUtils.getString(R.string.module_core_failure_cause))
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 = "故障后果:暂无"
holder.tvFmResult.text = StringUtils.getString(R.string.module_core_consequences_failure_not_available)
}else{
val fmFaultResult = StringBuilder()
// fmFaultResult.append("故障后果:")
fmFaultResult.append(StringUtils.getString(R.string.module_core_consequences_failure))
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("/")
//Title
// holder.tvFmTitle.text = "暂无建议操作"
holder.tvFmTitle.text = StringUtils.getString(R.string.module_core_not_available_suggested_procedure)
} else {
val receiveFaultLevel = ArrayList<Int>()
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("建议操作:")
faultActionStr.append(StringUtils.getString(R.string.module_core_suggested_procedure))
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_severe_warning))
}
1, 2, 3 -> {
//中度预警样式
holder.ivFmImage.setImageDrawable(getDrawable(R.drawable.icon_fm_moderate_warning))
}
4, 5 -> {
//轻度预警样式
holder.ivFmImage.setImageDrawable(getDrawable(R.drawable.icon_fm_mild_warning))
}
}
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 = "建议操作:暂无"
holder.tvFmAction.text = StringUtils.getString(R.string.module_core_suggested_procedure_not_available)
}
} else {
// holder.tvFmAction.text = "建议操作:暂无"
holder.tvFmAction.text = StringUtils.getString(R.string.module_core_suggested_procedure_not_available)
//轻度预警样式
holder.ivFmImage.setImageDrawable(getDrawable(R.drawable.icon_fm_mild_warning))
}
}
if(fmFaultResult.endsWith("/")){
holder.tvFmResult.text = fmFaultResult.deleteCharAt(fmFaultResult.lastIndex).toString()
}else{
// holder.tvFmResult.text = "故障后果:暂无"
//故障策略
// holder.tvFmFault.text = "故障策略:${MsgFmData.getFmPolicyName(fmInfoMsg.policyCode)}(${fmInfoMsg.policyCode})"
holder.tvFmFault.text =
"${StringUtils.getString(R.string.module_core_fault_handling_strategy)}${MsgFmData.getFmPolicyName(fmInfoMsg.policyCode)}(${fmInfoMsg.policyCode})"
//故障原因
if (fmInfoMsg.fmInfoList.isNullOrEmpty()) {
// holder.tvFmReason.text = "故障原因:暂无"
holder.tvFmReason.text = StringUtils.getString(R.string.module_core_failure_cause_not_available)
} else {
val fmFaultReason = StringBuilder()
// fmFaultReason.append("故障原因:")
fmFaultReason.append(StringUtils.getString(R.string.module_core_failure_cause))
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 = "故障后果:暂无"
holder.tvFmResult.text = StringUtils.getString(R.string.module_core_consequences_failure_not_available)
} else {
val fmFaultResult = StringBuilder()
// fmFaultResult.append("故障后果:")
fmFaultResult.append(StringUtils.getString(R.string.module_core_consequences_failure))
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 = "故障后果:暂无"
holder.tvFmResult.text = StringUtils.getString(R.string.module_core_consequences_failure_not_available)
}
}
}
//对布局进行展开折叠操作
if(fmInfoMsg.isShow){
//对布局进行展开折叠操作
if (fmInfoMsg.isShow) {
// holder.tvFmShowStatus.text = "收起"
holder.tvFmShowStatus.text = StringUtils.getString(R.string.module_core_pack_up)
holder.tvFmFault.visibility = View.VISIBLE
holder.tvFmReason.visibility = View.VISIBLE
holder.tvFmResult.visibility = View.VISIBLE
}else{
// holder.tvFmShowStatus.text = "展开"
holder.tvFmShowStatus.text = StringUtils.getString(R.string.module_core_unfold)
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.tvFmShowStatus.text = StringUtils.getString(R.string.module_core_pack_up)
holder.tvFmFault.visibility = View.VISIBLE
holder.tvFmReason.visibility = View.VISIBLE
holder.tvFmResult.visibility = View.VISIBLE
}else{
fmInfoMsg.isShow = false
// holder.tvFmShowStatus.text = "展开"
} else {
// holder.tvFmShowStatus.text = "展开"
holder.tvFmShowStatus.text = StringUtils.getString(R.string.module_core_unfold)
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.tvFmShowStatus.text = StringUtils.getString(R.string.module_core_pack_up)
holder.tvFmFault.visibility = View.VISIBLE
holder.tvFmReason.visibility = View.VISIBLE
holder.tvFmResult.visibility = View.VISIBLE
} else {
fmInfoMsg.isShow = false
// holder.tvFmShowStatus.text = "展开"
holder.tvFmShowStatus.text = StringUtils.getString(R.string.module_core_unfold)
holder.tvFmFault.visibility = View.GONE
holder.tvFmReason.visibility = View.GONE
holder.tvFmResult.visibility = View.GONE
}
}
}
}
}
@@ -627,6 +639,47 @@ class MsgBoxTabAdapter(private val activity: Activity) :
holder.tvCloudTime.text = TimeUtils.millis2String(it[position].timestamp,getHourMinFormat())
}
}
is FSMEventInfoHolder -> {
data?.let {
val temp = it[position]
if (temp.type == MsgBoxType.FSM_EVENT) {
holder.ivFmImage.setImageResource(R.drawable.icon_warning_fsm_event)
holder.tvFmReason.visibility = View.GONE
holder.tvFmResult.visibility = View.GONE
holder.tvFmFault.visibility = View.GONE
val fsmEventMsg = temp.bean as FSMEventMsg
//时间显示
holder.tvFmTime.text =
"${StringUtils.getString(R.string.module_core_time)}${fsmEventMsg.timestamp.let { it1 -> TimeUtils.millis2String(it1) }}"
holder.tvFmTitle.text = fsmEventMsg.title
holder.tvFmShowStatus.visibility = if (fsmEventMsg.content.contains('') || fsmEventMsg.content.contains(';')) View.VISIBLE else View.GONE
//对布局进行展开折叠操作
if (fsmEventMsg.isShow) {
// holder.tvFmShowStatus.text = "收起"
holder.tvFmShowStatus.text = StringUtils.getString(R.string.module_core_pack_up)
holder.tvFmAction.text = StringUtils.getString(R.string.module_core_failure_cause) + fsmEventMsg.content
} else {
// holder.tvFmShowStatus.text = "展开"
holder.tvFmShowStatus.text = StringUtils.getString(R.string.module_core_unfold)
holder.tvFmAction.text = StringUtils.getString(R.string.module_core_failure_cause) + fsmEventMsg.summaryContent
}
holder.tvFmShowStatus.setOnClickListener {
if (!fsmEventMsg.isShow) {
fsmEventMsg.isShow = true
// holder.tvFmShowStatus.text = "收起"
holder.tvFmShowStatus.text = StringUtils.getString(R.string.module_core_pack_up)
holder.tvFmAction.text = StringUtils.getString(R.string.module_core_failure_cause) + fsmEventMsg.content
} else {
fsmEventMsg.isShow = false
// holder.tvFmShowStatus.text = "展开"
holder.tvFmShowStatus.text = StringUtils.getString(R.string.module_core_unfold)
holder.tvFmAction.text = StringUtils.getString(R.string.module_core_failure_cause) + fsmEventMsg.summaryContent
}
}
}
}
}
}
}
@@ -677,6 +730,8 @@ class MsgBoxTabAdapter(private val activity: Activity) :
cloud
} else if(data!![position].type == MsgBoxType.V2X || data!![position].type == MsgBoxType.OBU){
v2x
}else if (data!![position].type == MsgBoxType.FSM_EVENT){
fsmEvent
} else {
none
}
@@ -805,5 +860,15 @@ class MsgBoxTabAdapter(private val activity: Activity) :
var tvCloudTime: TextView = itemView.findViewById(R.id.tvCloudTime)
var tvCloudContent: TextView = itemView.findViewById(R.id.tvCloudContent)
}
//FSM Evet
class FSMEventInfoHolder(itemView: View) : RecyclerView.ViewHolder(itemView){
var ivFmImage: ImageView = itemView.findViewById(R.id.ivFmImage) //故障级别图标
var tvFmTitle: TextView = itemView.findViewById(R.id.tvFmTitle) //标题展示故障策略
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) //后果
}
}

View File

@@ -154,8 +154,9 @@ class DriverMsgBoxBubbleView @JvmOverloads constructor(
}
}
} else if (category == MsgCategory.FM_INFO) {
CallerMsgBoxEventListenerManager.invokeUpdateTipListener(true)
if (FunctionBuildConfig.isTakeoverRemind) {
if (msgBoxBean.type == MsgBoxType.FMINFO) {
CallerMsgBoxEventListenerManager.invokeUpdateTipListener(true)
if (FunctionBuildConfig.isTakeoverRemind) {
// //属于停车警示(包括择机靠边停车、立即舒适停车、就地紧急停车)时,需要弹出消息气泡并伴有提示音
// var curFaultLevel = 5 //默认级别遍历数组找出级别最高的level数越小级别越高
@@ -192,64 +193,63 @@ class DriverMsgBoxBubbleView @JvmOverloads constructor(
// }
// }
/**
* 8.2.0需求:定义三种不同提示强度的异常提示交互
* 不判断驾驶状态,发生相应故障时立即有相应的提醒
* 若同一时间触发多个多种级别异常,则按照最高级别的异常交互元素做提醒,低级别的异常不做特殊提醒
* 若同一时间触发多个同一级别异常,则同一时刻只提醒一次,不互相打断
* 除此以外不做其他提示频率限制
*
* 一级:安全停车
* FM_DP_EMERGENCY_STOP就地紧急停车、FM_DP_COMFORTABLE_STOP立刻舒适停车、FM_DP_PNC_CHOOSE_STOP择机靠边停车
* 交互图像、TTS、消息盒子
*
* 二级:降速行驶
* FM_DP_SPEED_LIMIT3三级降速、FM_DP_SPEED_LIMIT2二级降速、FM_DP_SPEED_LIMIT1一级降速
* 交互TTS、消息盒子
*
* 三级:无操作
* FM_DP_ONLY_WARNING警示、FM_DP_NO_ACTION报告
* ps以上异常提醒受司机屏工具箱-运营面板-美化模式-接管提醒开关控制,默认开启有全量提示,关闭后无语音/图像提示,只有消息盒子红点展示
*/
val fmInfoMsg = msgBoxBean.bean as FMInfoMsg
when(MsgFmData.getFmPolicyLevel(fmInfoMsg.policyCode)){
//一级
MsgFmData.LEVEL_ONE->{
//接管图像提示、语音提示
CallerDevaToolsManager.takeOver(TAKE_OVER_REQUEST)
CallerHmiManager.warningV2X(
EventTypeEnumNew.TAKE_OVER_EVENT.poiType,
EventTypeEnumNew.TAKE_OVER_EVENT.content,
/**
* 8.2.0需求:定义三种不同提示强度的异常提示交互
* 不判断驾驶状态,发生相应故障时立即有相应的提醒
* 若同一时间触发多个多种级别异常,则按照最高级别的异常交互元素做提醒,低级别的异常不做特殊提醒
* 若同一时间触发多个同一级别异常,则同一时刻只提醒一次,不互相打断
* 除此以外不做其他提示频率限制
*
* 一级:安全停车
* FM_DP_EMERGENCY_STOP就地紧急停车、FM_DP_COMFORTABLE_STOP立刻舒适停车、FM_DP_PNC_CHOOSE_STOP择机靠边停车
* 交互图像、TTS、消息盒子
*
* 二级:降速行驶
* FM_DP_SPEED_LIMIT3三级降速、FM_DP_SPEED_LIMIT2二级降速、FM_DP_SPEED_LIMIT1一级降速
* 交互TTS、消息盒子
*
* 三级:无操作
* FM_DP_ONLY_WARNING警示、FM_DP_NO_ACTION报告
* ps以上异常提醒受司机屏工具箱-运营面板-美化模式-接管提醒开关控制,默认开启有全量提示,关闭后无语音/图像提示,只有消息盒子红点展示
*/
val fmInfoMsg = msgBoxBean.bean as FMInfoMsg
when (MsgFmData.getFmPolicyLevel(fmInfoMsg.policyCode)) {
//一级
MsgFmData.LEVEL_ONE -> {
//接管图像提示、语音提示
CallerDevaToolsManager.takeOver(TAKE_OVER_REQUEST)
CallerHmiManager.warningV2X(
EventTypeEnumNew.TAKE_OVER_EVENT.poiType,
EventTypeEnumNew.TAKE_OVER_EVENT.content,
// "识别车辆故障,建议安全停车并查看操作建议",
StringUtils.getString(R.string.module_core_warning_vehicle_fault_safe_park),
object : IMoGoWarningStatusListener {
override fun onShow() {
CallerTakeOverManager.invokeTakeOverEvent(true)
}
StringUtils.getString(R.string.module_core_warning_vehicle_fault_safe_park),
object : IMoGoWarningStatusListener {
override fun onShow() {
CallerTakeOverManager.invokeTakeOverEvent(true)
}
override fun onDismiss() {
CallerTakeOverManager.invokeTakeOverEvent(false)
}
},expireTime =3000L, isFromObu = false
)
//展示消息盒子消息
showData(msgBoxBean)
}
//二级
MsgFmData.LEVEL_TWO->{
//语音提示
override fun onDismiss() {
CallerTakeOverManager.invokeTakeOverEvent(false)
}
}, expireTime = 3000L, isFromObu = false
)
//展示消息盒子消息
showData(msgBoxBean)
}
//二级
MsgFmData.LEVEL_TWO -> {
//语音提示
// AIAssist.getInstance(context).speakTTSVoice("识别车辆异常,建议尽快安全停车,查看操作建议")
AIAssist.getInstance(context).speakTTSVoice(StringUtils.getString(R.string.module_core_warning_vehicle_abnormal_safe_park))
//展示消息盒子消息
showData(msgBoxBean)
}
//三级
MsgFmData.LEVEL_THREE->{
//在消息盒子图标上,可查看到红点标记,无其他元素特殊提醒;点进消息盒子可查看到详细信息
AIAssist.getInstance(context).speakTTSVoice(StringUtils.getString(R.string.module_core_warning_vehicle_abnormal_safe_park))
//展示消息盒子消息
showData(msgBoxBean)
}
//三级
MsgFmData.LEVEL_THREE -> {
//在消息盒子图标上,可查看到红点标记,无其他元素特殊提醒;点进消息盒子可查看到详细信息
}
}
}
}
} else {
if (msgBoxBean.sourceType == DataSourceType.SUMMARY) {

View File

@@ -9,6 +9,7 @@ import androidx.constraintlayout.widget.ConstraintLayout
import androidx.recyclerview.widget.LinearLayoutManager
import com.mogo.eagle.core.data.enums.DataSourceType
import com.mogo.eagle.core.data.msgbox.MsgBoxBean
import com.mogo.eagle.core.data.msgbox.MsgBoxType
import com.mogo.eagle.core.data.msgbox.MsgCategory
import com.mogo.eagle.core.function.api.datacenter.IDataCenterBizListener
import com.mogo.eagle.core.function.api.datacenter.msgbox.IMsgBoxEventListener
@@ -249,9 +250,11 @@ class DriverMsgBoxListView @JvmOverloads constructor(
}
//FM信息
MsgCategory.FM_INFO -> {
fmList?.add(0,msgBoxList)
if(MsgBoxConfig.getUserRecord() == 1){
fmList?.let { driverMsgBoxListAdapter?.setData(it) }
if (msgBoxList.type == MsgBoxType.FMINFO) {
fmList?.add(0, msgBoxList)
if (MsgBoxConfig.getUserRecord() == 1) {
fmList?.let { driverMsgBoxListAdapter?.setData(it) }
}
}
}
//系统信息

View File

@@ -146,8 +146,9 @@ class MsgBoxToastView @JvmOverloads constructor(
}
}
} else if (category == MsgCategory.FM_INFO) {
CallerMsgBoxEventListenerManager.invokeUpdateTipListener(true)
if (FunctionBuildConfig.isTakeoverRemind) {
if (msgBoxBean.type == MsgBoxType.FMINFO) {
CallerMsgBoxEventListenerManager.invokeUpdateTipListener(true)
if (FunctionBuildConfig.isTakeoverRemind) {
// //属于停车警示(包括择机靠边停车、立即舒适停车、就地紧急停车)时,需要弹出消息气泡并伴有提示音
// var curFaultLevel = 5 //默认级别遍历数组找出级别最高的level数越小级别越高
// fmInfoMsg.fmInfoList?.forEach { faultInfo ->
@@ -183,63 +184,65 @@ class MsgBoxToastView @JvmOverloads constructor(
// }
// }
/**
* 8.2.0需求:定义三种不同提示强度的异常提示交互
* 不判断驾驶状态,发生相应故障时立即有相应的提醒
* 若同一时间触发多个多种级别异常,则按照最高级别的异常交互元素做提醒,低级别的异常不做特殊提醒
* 若同一时间触发多个同一级别异常,则同一时刻只提醒一次,不互相打断
* 除此以外不做其他提示频率限制
*
* 一级:安全停车
* FM_DP_EMERGENCY_STOP就地紧急停车、FM_DP_COMFORTABLE_STOP立刻舒适停车、FM_DP_PNC_CHOOSE_STOP择机靠边停车
* 交互图像、TTS、消息盒子
*
* 二级:降速行驶
* FM_DP_SPEED_LIMIT3三级降速、FM_DP_SPEED_LIMIT2二级降速、FM_DP_SPEED_LIMIT1一级降速
* 交互TTS、消息盒子
*
* 三级:无操作
* FM_DP_ONLY_WARNING警示、FM_DP_NO_ACTION报告
* ps以上异常提醒受司机屏工具箱-运营面板-美化模式-接管提醒开关控制,默认开启有全量提示,关闭后无语音/图像提示,只有消息盒子红点展示
*/
val fmInfoMsg = msgBoxBean.bean as FMInfoMsg
when(MsgFmData.getFmPolicyLevel(fmInfoMsg.policyCode)){
//一级
MsgFmData.LEVEL_ONE->{
//接管图像提示、语音提示
CallerDevaToolsManager.takeOver(TAKE_OVER_REQUEST)
CallerHmiManager.warningV2X(
EventTypeEnumNew.TAKE_OVER_EVENT.poiType,
EventTypeEnumNew.TAKE_OVER_EVENT.content,
/**
* 8.2.0需求:定义三种不同提示强度的异常提示交互
* 不判断驾驶状态,发生相应故障时立即有相应的提醒
* 若同一时间触发多个多种级别异常,则按照最高级别的异常交互元素做提醒,低级别的异常不做特殊提醒
* 若同一时间触发多个同一级别异常,则同一时刻只提醒一次,不互相打断
* 除此以外不做其他提示频率限制
*
* 一级:安全停车
* FM_DP_EMERGENCY_STOP就地紧急停车、FM_DP_COMFORTABLE_STOP立刻舒适停车、FM_DP_PNC_CHOOSE_STOP择机靠边停车
* 交互图像、TTS、消息盒子
*
* 二级:降速行驶
* FM_DP_SPEED_LIMIT3三级降速、FM_DP_SPEED_LIMIT2二级降速、FM_DP_SPEED_LIMIT1一级降速
* 交互TTS、消息盒子
*
* 三级:无操作
* FM_DP_ONLY_WARNING警示、FM_DP_NO_ACTION报告
* ps以上异常提醒受司机屏工具箱-运营面板-美化模式-接管提醒开关控制,默认开启有全量提示,关闭后无语音/图像提示,只有消息盒子红点展示
*/
val fmInfoMsg = msgBoxBean.bean as FMInfoMsg
when (MsgFmData.getFmPolicyLevel(fmInfoMsg.policyCode)) {
//一级
MsgFmData.LEVEL_ONE -> {
//接管图像提示、语音提示
CallerDevaToolsManager.takeOver(TAKE_OVER_REQUEST)
CallerHmiManager.warningV2X(
EventTypeEnumNew.TAKE_OVER_EVENT.poiType,
EventTypeEnumNew.TAKE_OVER_EVENT.content,
// "识别车辆故障,建议安全停车并查看操作建议",
StringUtils.getString(R.string.module_core_warning_vehicle_fault_safe_park),
object : IMoGoWarningStatusListener {
override fun onShow() {
CallerTakeOverManager.invokeTakeOverEvent(true)
}
StringUtils.getString(R.string.module_core_warning_vehicle_fault_safe_park),
object : IMoGoWarningStatusListener {
override fun onShow() {
CallerTakeOverManager.invokeTakeOverEvent(true)
}
override fun onDismiss() {
CallerTakeOverManager.invokeTakeOverEvent(false)
}
},expireTime =3000L, isFromObu = false
)
//展示消息盒子消息
showData(msgBoxBean)
}
//二级
MsgFmData.LEVEL_TWO->{
//语音提示
override fun onDismiss() {
CallerTakeOverManager.invokeTakeOverEvent(false)
}
}, expireTime = 3000L, isFromObu = false
)
//展示消息盒子消息
showData(msgBoxBean)
}
//二级
MsgFmData.LEVEL_TWO -> {
//语音提示
// AIAssist.getInstance(context).speakTTSVoice("识别车辆异常,建议尽快安全停车,查看操作建议")
AIAssist.getInstance(context).speakTTSVoice(StringUtils.getString(R.string.module_core_warning_vehicle_abnormal_safe_park))
//展示消息盒子消息
showData(msgBoxBean)
}
//三级
MsgFmData.LEVEL_THREE->{
//在消息盒子图标上,可查看到红点标记,无其他元素特殊提醒;点进消息盒子可查看到详细信息
AIAssist.getInstance(context).speakTTSVoice(StringUtils.getString(R.string.module_core_warning_vehicle_abnormal_safe_park))
//展示消息盒子消息
showData(msgBoxBean)
}
//三级
MsgFmData.LEVEL_THREE -> {
//在消息盒子图标上,可查看到红点标记,无其他元素特殊提醒;点进消息盒子可查看到详细信息
}
}
}
} else {
showData(msgBoxBean)
}
} else {
if (msgBoxBean.sourceType == DataSourceType.SUMMARY) {

View File

@@ -19,6 +19,7 @@ import com.mogo.eagle.core.data.enums.EventTypeEnumNew
import com.mogo.eagle.core.data.msgbox.AutopilotMsg
import com.mogo.eagle.core.data.msgbox.CloudControlMsg
import com.mogo.eagle.core.data.msgbox.FMInfoMsg
import com.mogo.eagle.core.data.msgbox.FSMEventMsg
import com.mogo.eagle.core.data.msgbox.FSMMsg
import com.mogo.eagle.core.data.msgbox.MsgBoxCountDownBean
import com.mogo.eagle.core.data.msgbox.MsgBoxType
@@ -331,7 +332,18 @@ class MsgBoxToastAdapter(private val activity: Activity) : RecyclerView.Adapter<
))
}
}
}else{
}else if(it[position].msgBoxBean.type == MsgBoxType.FSM_EVENT){
//FSM Event信息
//FSM消息
val fsmMsg = it[position].msgBoxBean.bean as FSMEventMsg
holder.tvV2XTitle.text = fsmMsg.title
holder.tvV2XContent.text = fsmMsg.summaryContent
holder.ivV2XImage.setImageDrawable(
ContextCompat.getDrawable(
activity,
R.drawable.icon_warning_fsm_event
))
} else{
//V2X消息
val msgBoxBean = it[position].msgBoxBean
val v2XMsg = msgBoxBean.bean as V2XMsg

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@@ -33,7 +33,7 @@
<TextView
android:id="@+id/tvMsgFm"
android:layout_width="@dimen/dp_154"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_113"
android:text="@string/msg_box_title_fm"
android:textColor="#FFFFFFFF"
@@ -49,7 +49,7 @@
<TextView
android:id="@+id/tvMsgIpcReport"
android:layout_width="@dimen/dp_154"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_113"
android:text="@string/msg_box_title_report"
android:textColor="#FFFFFFFF"

View File

@@ -180,7 +180,7 @@
<!--消息盒子-->
<string name="msg_box_title_notice">Notice</string>
<string name="msg_box_title_fm">FM Info</string>
<string name="msg_box_title_fm">Fault Info</string>
<string name="msg_box_title_report">System Info</string>
<string name="msg_box_title_bad_case">Record</string>
<string name="bad_case_icon">Record Icon</string>

View File

@@ -181,7 +181,7 @@
<!--消息盒子-->
<string name="msg_box_title_notice">通知</string>
<string name="msg_box_title_fm">FM信息</string>
<string name="msg_box_title_fm">故障信息</string>
<string name="msg_box_title_report">系统信息</string>
<string name="msg_box_title_bad_case">录包</string>
<string name="bad_case_icon">录包图标</string>