[8.2.0]异常分级提示
This commit is contained in:
@@ -8,25 +8,31 @@ import android.view.View
|
||||
import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.mogo.commons.env.ProjectUtils
|
||||
import com.mogo.commons.voice.AIAssist
|
||||
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.enums.EventTypeEnumNew
|
||||
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.data.takeover.TAKE_OVER_REQUEST
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoNodeStateListener
|
||||
import com.mogo.eagle.core.function.api.datacenter.IDataCenterBizListener
|
||||
import com.mogo.eagle.core.function.api.datacenter.msgbox.IMsgBoxListener
|
||||
import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWarningStatusListener
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerNodeStateListenerManager
|
||||
import com.mogo.eagle.core.function.call.datacenter.CallerDataCenterBizListener
|
||||
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager
|
||||
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager
|
||||
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxEventListenerManager
|
||||
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxListenerManager
|
||||
import com.mogo.eagle.core.function.call.setting.CallerTakeOverManager
|
||||
import com.mogo.eagle.core.function.hmi.R
|
||||
import com.mogo.eagle.core.function.hmi.ui.msgbox.adapter.DriverMsgBoxBubbleAdapter
|
||||
import com.mogo.eagle.core.function.msgbox.MsgBoxConfig
|
||||
@@ -149,41 +155,98 @@ class DriverMsgBoxBubbleView @JvmOverloads constructor(
|
||||
} else if (category == MsgCategory.FM_INFO) {
|
||||
CallerMsgBoxEventListenerManager.invokeUpdateTipListener(true)
|
||||
if (FunctionBuildConfig.isTakeoverRemind) {
|
||||
//属于停车警示(包括择机靠边停车、立即舒适停车、就地紧急停车)时,需要弹出消息气泡并伴有提示音
|
||||
|
||||
// //属于停车警示(包括择机靠边停车、立即舒适停车、就地紧急停车)时,需要弹出消息气泡并伴有提示音
|
||||
// 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
|
||||
// ) {
|
||||
// // 6.6.0 ,因为 FSM 模块也会弹修改为只有没有 FSM 模块才弹
|
||||
// // 6.6.0 ,20240823 考虑到 FSM 初期消息不一定全,先不加限制,产品先观察功能后再考虑是否过滤
|
||||
// // if (hasNoneFSMNode()) {
|
||||
// //语音提示
|
||||
// try {
|
||||
// SoundPoolUtils.getSoundPool()
|
||||
// .playSoundWithRedId(context, R.raw.weak_net_tips)
|
||||
// } catch (e: Exception) {
|
||||
// e.printStackTrace()
|
||||
// }
|
||||
// //展示消息
|
||||
// showData(msgBoxBean)
|
||||
// //}
|
||||
// }
|
||||
// }
|
||||
|
||||
/**
|
||||
* 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
|
||||
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
|
||||
) {
|
||||
// 6.6.0 ,因为 FSM 模块也会弹修改为只有没有 FSM 模块才弹
|
||||
// 6.6.0 ,20240823 考虑到 FSM 初期消息不一定全,先不加限制,产品先观察功能后再考虑是否过滤
|
||||
// if (hasNoneFSMNode()) {
|
||||
//语音提示
|
||||
try {
|
||||
SoundPoolUtils.getSoundPool()
|
||||
.playSoundWithRedId(context, R.raw.weak_net_tips)
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
//展示消息
|
||||
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,
|
||||
"识别车辆故障,建议立即接管安全停车,查看操作建议",
|
||||
object : IMoGoWarningStatusListener {
|
||||
override fun onShow() {
|
||||
CallerTakeOverManager.invokeTakeOverEvent(true)
|
||||
}
|
||||
|
||||
override fun onDismiss() {
|
||||
CallerTakeOverManager.invokeTakeOverEvent(false)
|
||||
}
|
||||
},expireTime =3000L, isFromObu = false
|
||||
)
|
||||
//展示消息盒子消息
|
||||
showData(msgBoxBean)
|
||||
//}
|
||||
}
|
||||
//二级
|
||||
MsgFmData.LEVEL_TWO->{
|
||||
//语音提示
|
||||
AIAssist.getInstance(context).speakTTSVoice("识别车辆异常,建议尽快安全停车,查看操作建议")
|
||||
//展示消息盒子消息
|
||||
showData(msgBoxBean)
|
||||
}
|
||||
//三级
|
||||
MsgFmData.LEVEL_THREE->{
|
||||
//在消息盒子图标上,可查看到红点标记,无其他元素特殊提醒;点进消息盒子可查看到详细信息
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
} else {
|
||||
if (msgBoxBean.sourceType == DataSourceType.SUMMARY) {
|
||||
|
||||
@@ -8,23 +8,29 @@ import android.view.View
|
||||
import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.mogo.commons.env.ProjectUtils
|
||||
import com.mogo.commons.voice.AIAssist
|
||||
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.enums.EventTypeEnumNew
|
||||
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.data.takeover.TAKE_OVER_REQUEST
|
||||
import com.mogo.eagle.core.function.api.datacenter.IDataCenterBizListener
|
||||
import com.mogo.eagle.core.function.api.datacenter.msgbox.IMsgBoxListener
|
||||
import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWarningStatusListener
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerIpcConnectStateToastManager
|
||||
import com.mogo.eagle.core.function.call.datacenter.CallerDataCenterBizListener
|
||||
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager
|
||||
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager
|
||||
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxEventListenerManager
|
||||
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxListenerManager
|
||||
import com.mogo.eagle.core.function.call.setting.CallerTakeOverManager
|
||||
import com.mogo.eagle.core.function.hmi.R
|
||||
import com.mogo.eagle.core.function.hmi.ui.msgbox.adapter.MsgBoxToastAdapter
|
||||
import com.mogo.eagle.core.function.msgbox.MsgBoxConfig
|
||||
@@ -141,41 +147,96 @@ class MsgBoxToastView @JvmOverloads constructor(
|
||||
} else if (category == MsgCategory.FM_INFO) {
|
||||
CallerMsgBoxEventListenerManager.invokeUpdateTipListener(true)
|
||||
if (FunctionBuildConfig.isTakeoverRemind) {
|
||||
//属于停车警示(包括择机靠边停车、立即舒适停车、就地紧急停车)时,需要弹出消息气泡并伴有提示音
|
||||
// //属于停车警示(包括择机靠边停车、立即舒适停车、就地紧急停车)时,需要弹出消息气泡并伴有提示音
|
||||
// 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
|
||||
// ) {
|
||||
// // 6.6.0 ,因为 FSM 模块也会弹修改为只有没有 FSM 模块才弹
|
||||
// // 6.6.0 ,20240823 考虑到 FSM 初期消息不一定全,先不加限制,产品先观察功能后再考虑是否过滤
|
||||
// // if (hasNoneFSMNode()) {
|
||||
// //语音提示
|
||||
// try {
|
||||
// SoundPoolUtils.getSoundPool()
|
||||
// .playSoundWithRedId(context, R.raw.weak_net_tips)
|
||||
// } catch (e: Exception) {
|
||||
// e.printStackTrace()
|
||||
// }
|
||||
// //展示消息
|
||||
// showData(msgBoxBean)
|
||||
// //}
|
||||
// }
|
||||
// }
|
||||
|
||||
/**
|
||||
* 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
|
||||
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
|
||||
) {
|
||||
// 6.6.0 ,因为 FSM 模块也会弹修改为只有没有 FSM 模块才弹
|
||||
// 6.6.0 ,20240823 考虑到 FSM 初期消息不一定全,先不加限制,产品先观察功能后再考虑是否过滤
|
||||
// if (hasNoneFSMNode()) {
|
||||
//语音提示
|
||||
try {
|
||||
SoundPoolUtils.getSoundPool()
|
||||
.playSoundWithRedId(context, R.raw.weak_net_tips)
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
//展示消息
|
||||
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,
|
||||
"识别车辆故障,建议立即接管安全停车,查看操作建议",
|
||||
object : IMoGoWarningStatusListener {
|
||||
override fun onShow() {
|
||||
CallerTakeOverManager.invokeTakeOverEvent(true)
|
||||
}
|
||||
|
||||
override fun onDismiss() {
|
||||
CallerTakeOverManager.invokeTakeOverEvent(false)
|
||||
}
|
||||
},expireTime =3000L, isFromObu = false
|
||||
)
|
||||
//展示消息盒子消息
|
||||
showData(msgBoxBean)
|
||||
//}
|
||||
}
|
||||
//二级
|
||||
MsgFmData.LEVEL_TWO->{
|
||||
//语音提示
|
||||
AIAssist.getInstance(context).speakTTSVoice("识别车辆异常,建议尽快安全停车,查看操作建议")
|
||||
//展示消息盒子消息
|
||||
showData(msgBoxBean)
|
||||
}
|
||||
//三级
|
||||
MsgFmData.LEVEL_THREE->{
|
||||
//在消息盒子图标上,可查看到红点标记,无其他元素特殊提醒;点进消息盒子可查看到详细信息
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
} else {
|
||||
if (msgBoxBean.sourceType == DataSourceType.SUMMARY) {
|
||||
|
||||
@@ -163,6 +163,10 @@ class MsgFmData{
|
||||
|
||||
companion object{
|
||||
|
||||
const val LEVEL_ONE = 1 //降级策略:安全停车 交互:一级
|
||||
const val LEVEL_TWO = 2 //降级策略:降速行驶 交互:二级
|
||||
const val LEVEL_THREE = 3 //降级策略:无操作 交互:三级
|
||||
|
||||
@JvmStatic
|
||||
fun getFmPolicyName(policyCode: String?): String{
|
||||
return when(policyCode){
|
||||
@@ -177,6 +181,30 @@ class MsgFmData{
|
||||
else -> "暂无"
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取异常分级
|
||||
* 鹰眼8.2.0版本需求:定义三种不同提示强度的异常提示交互
|
||||
* 一级交互:TTS、图像、消息盒子
|
||||
* 二级交互:TTS、消息盒子
|
||||
* 三级交互:消息盒子
|
||||
*/
|
||||
@JvmStatic
|
||||
fun getFmPolicyLevel(policyCode: String?): Int{
|
||||
return when(policyCode){
|
||||
"FM_DP_NO_ACTION" -> LEVEL_THREE
|
||||
"FM_DP_ONLY_WARNING" -> LEVEL_THREE
|
||||
"FM_DP_SPEED_LIMIT1" -> LEVEL_TWO
|
||||
"FM_DP_SPEED_LIMIT2" -> LEVEL_TWO
|
||||
"FM_DP_SPEED_LIMIT3" -> LEVEL_TWO
|
||||
"FM_DP_PNC_CHOOSE_STOP" -> LEVEL_ONE
|
||||
"FM_DP_COMFORTABLE_STOP" -> LEVEL_ONE
|
||||
"FM_DP_EMERGENCY_STOP" -> LEVEL_ONE
|
||||
else -> LEVEL_THREE
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user