Merge branch 'dev_robotaxi-d_240401_6.4.0' of gitlab.zhidaoauto.com:SCA/L4HA/AndroidApp/MoGoEagleEye into dev_robotaxi-d_240401_6.4.0
This commit is contained in:
@@ -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{
|
||||
|
||||
@@ -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连接消息
|
||||
|
||||
@@ -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<Int>()
|
||||
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))
|
||||
}
|
||||
}
|
||||
//故障策略
|
||||
|
||||
@@ -19,5 +19,6 @@ data class FMInfoMsg(
|
||||
data class FMFilterInfoMsg(
|
||||
var fmInfoList: List<FmInfo.FaultInfo>?,
|
||||
var policyCode: String?,
|
||||
var cacheFilterList: MutableList<String>?
|
||||
var cacheFilterList: MutableList<String>?,
|
||||
var receiveTime: Long
|
||||
)
|
||||
@@ -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{
|
||||
|
||||
|
||||
@@ -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<IMoGoFaultManageme
|
||||
//判断两个集合重复 true:return
|
||||
var sameResult = false
|
||||
list.forEach {
|
||||
sameResult = fmFilterInfoMsg.cacheFilterList?.contains(it.faultId) == true
|
||||
if(fmFilterInfoMsg.cacheFilterList?.contains(it.faultId) == true){
|
||||
if(System.currentTimeMillis()-fmFilterInfoMsg.receiveTime < 10*60*1000){
|
||||
sameResult = true
|
||||
}
|
||||
}
|
||||
}
|
||||
if (sameResult) {
|
||||
return
|
||||
@@ -52,6 +57,7 @@ object CallerFaultManagementStateListenerManager : CallerBase<IMoGoFaultManageme
|
||||
fmFilterInfoMsg.cacheFilterList?.clear()
|
||||
fmFilterInfoMsg.cacheFilterList = cacheFaultList
|
||||
fmFilterInfoMsg.fmInfoList = list
|
||||
fmFilterInfoMsg.receiveTime = System.currentTimeMillis()
|
||||
cachePolicyMap[policyCode] = fmFilterInfoMsg
|
||||
CallerTrace.write("FaultMsg",fmInfo)
|
||||
CallerMsgBoxManager.saveMsgBoxHasPB(
|
||||
@@ -66,7 +72,7 @@ object CallerFaultManagementStateListenerManager : CallerBase<IMoGoFaultManageme
|
||||
list.forEach {
|
||||
cacheFaultList.add(it.faultId)
|
||||
}
|
||||
cachePolicyMap[policyCode] = FMFilterInfoMsg(list, policyCode, cacheFaultList)
|
||||
cachePolicyMap[policyCode] = FMFilterInfoMsg(list, policyCode, cacheFaultList,System.currentTimeMillis())
|
||||
CallerTrace.write("FaultMsg",fmInfo)
|
||||
CallerMsgBoxManager.saveMsgBoxHasPB(
|
||||
MsgBoxBean(
|
||||
|
||||
Reference in New Issue
Block a user