[6.7.0]消息盒子UI改版

This commit is contained in:
xuxinchao
2024-09-23 19:52:25 +08:00
parent e4f281cafc
commit 17cdfb239f
17 changed files with 1524 additions and 25 deletions

View File

@@ -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<MsgBoxBean> ?= ArrayList() //FM信息消息列表
private var ipcReportList: ArrayList<MsgBoxBean> ?= null //车辆系统信息消息列表
private var badCaseList: ArrayList<MsgBoxBean> ?= 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)
}
}

View File

@@ -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<RecyclerView.ViewHolder>() {
private var data: List<MsgBoxBean>? = 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<MsgBoxBean>) {
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<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("建议操作:")
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)
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -0,0 +1,51 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto">
<ImageView
android:id="@+id/ivAutopilotImage"
android:layout_width="@dimen/dp_120"
android:layout_height="@dimen/dp_120"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginTop="@dimen/dp_40"
android:src="@drawable/icon_warning_take_over"
android:contentDescription="@string/autopilot_icon"
/>
<TextView
android:id="@+id/tvAutopilotTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/ivAutopilotImage"
app:layout_constraintLeft_toRightOf="@id/ivAutopilotImage"
android:layout_marginStart="@dimen/dp_30"
android:textColor="@color/white"
android:textSize="@dimen/sp_38"
/>
<TextView
android:id="@+id/tvAutopilotTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/tvAutopilotTitle"
app:layout_constraintBottom_toBottomOf="@id/tvAutopilotTitle"
app:layout_constraintRight_toRightOf="parent"
android:textColor="#999999"
android:textSize="@dimen/sp_32"
/>
<TextView
android:id="@+id/tvAutopilotContent"
android:layout_width="@dimen/dp_0"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/tvAutopilotTitle"
app:layout_constraintLeft_toLeftOf="@id/tvAutopilotTitle"
app:layout_constraintRight_toRightOf="@id/tvAutopilotTime"
android:textSize="@dimen/sp_32"
android:textColor="#CCCCCC"
/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,118 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto">
<!--故障级别图标-->
<ImageView
android:id="@+id/ivFmImage"
android:layout_width="@dimen/dp_120"
android:layout_height="@dimen/dp_120"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginTop="@dimen/dp_40"
android:contentDescription="@string/fm_icon"
/>
<!--标题展示故障策略-->
<TextView
android:id="@+id/tvFmTitle"
android:layout_width="@dimen/dp_0"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/ivFmImage"
app:layout_constraintLeft_toRightOf="@id/ivFmImage"
app:layout_constraintRight_toLeftOf="@id/tvFmShowTime"
android:layout_marginStart="@dimen/dp_30"
android:textSize="@dimen/sp_38"
android:textColor="@color/white"
/>
<!--展示时间-->
<TextView
android:id="@+id/tvFmShowTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/tvFmTitle"
app:layout_constraintBottom_toBottomOf="@id/tvFmTitle"
app:layout_constraintRight_toRightOf="parent"
android:textColor="#999999"
android:textSize="@dimen/sp_32"
/>
<!--折叠状态-->
<TextView
android:id="@+id/tvFmShowStatus"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:text="@string/fm_open"
android:textSize="@dimen/sp_32"
android:textColor="#2EACFF"
/>
<!--发生时间-->
<TextView
android:id="@+id/tvFmTime"
android:layout_width="@dimen/dp_0"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/tvFmTitle"
app:layout_constraintLeft_toLeftOf="@id/tvFmTitle"
app:layout_constraintRight_toLeftOf="@id/tvFmShowTime"
android:textColor="#CCCCCC"
android:textSize="@dimen/sp_32"
/>
<!--建议操作-->
<TextView
android:id="@+id/tvFmAction"
android:layout_width="@dimen/dp_0"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/tvFmTime"
app:layout_constraintLeft_toLeftOf="@id/tvFmTime"
app:layout_constraintRight_toLeftOf="@id/tvFmShowTime"
android:textColor="#CCCCCC"
android:textSize="@dimen/sp_32"
/>
<!--故障策略-->
<TextView
android:id="@+id/tvFmFault"
android:layout_width="@dimen/dp_0"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/tvFmAction"
app:layout_constraintLeft_toLeftOf="@id/tvFmAction"
app:layout_constraintRight_toLeftOf="@id/tvFmShowTime"
android:textColor="#CCCCCC"
android:textSize="@dimen/sp_32"
android:visibility="gone"
/>
<!--故障原因-->
<TextView
android:id="@+id/tvFmReason"
android:layout_width="@dimen/dp_0"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/tvFmFault"
app:layout_constraintLeft_toLeftOf="@id/tvFmFault"
app:layout_constraintRight_toLeftOf="@id/tvFmShowTime"
android:textColor="#CCCCCC"
android:textSize="@dimen/sp_32"
android:visibility="gone"
/>
<!--后果-->
<TextView
android:id="@+id/tvFmResult"
android:layout_width="@dimen/dp_0"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/tvFmReason"
app:layout_constraintLeft_toLeftOf="@id/tvFmReason"
app:layout_constraintRight_toLeftOf="@id/tvFmShowTime"
android:textColor="#CCCCCC"
android:textSize="@dimen/sp_32"
android:visibility="gone"
/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,51 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto">
<ImageView
android:id="@+id/ivFSMImage"
android:layout_width="@dimen/dp_120"
android:layout_height="@dimen/dp_120"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:src="@drawable/icon_warning_take_over"
android:layout_marginTop="@dimen/dp_40"
android:contentDescription="@string/fsm_icon"
/>
<TextView
android:id="@+id/tvFSMTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/ivFSMImage"
app:layout_constraintLeft_toRightOf="@id/ivFSMImage"
android:layout_marginStart="@dimen/dp_30"
android:textSize="@dimen/sp_38"
android:textColor="@color/white"
/>
<TextView
android:id="@+id/tvFSMTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/tvFSMTitle"
app:layout_constraintBottom_toBottomOf="@id/tvFSMTitle"
app:layout_constraintRight_toRightOf="parent"
android:textSize="@dimen/sp_32"
android:textColor="#999999"
/>
<TextView
android:id="@+id/tvFSMContent"
android:layout_width="@dimen/dp_0"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/tvFSMTitle"
app:layout_constraintLeft_toLeftOf="@id/tvFSMTitle"
app:layout_constraintRight_toRightOf="@id/tvFSMTime"
android:textSize="@dimen/sp_32"
android:textColor="#CCCCCC"
/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,109 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto">
<ImageView
android:id="@+id/ivReportImage"
android:layout_width="@dimen/dp_120"
android:layout_height="@dimen/dp_120"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginTop="@dimen/dp_40"
android:contentDescription="@string/report_icon"
/>
<TextView
android:id="@+id/tvReportLevel"
android:layout_width="@dimen/dp_0"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/ivReportImage"
app:layout_constraintLeft_toRightOf="@id/ivReportImage"
app:layout_constraintRight_toLeftOf="@id/tvReportShowTime"
android:textColor="@color/white"
android:textSize="@dimen/sp_38"
android:layout_marginStart="@dimen/dp_30"
/>
<TextView
android:id="@+id/tvReportTime"
android:layout_width="@dimen/dp_0"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/tvReportLevel"
app:layout_constraintLeft_toLeftOf="@id/tvReportLevel"
app:layout_constraintRight_toLeftOf="@id/tvReportShowTime"
android:textSize="@dimen/sp_32"
android:textColor="#CCCCCC"
/>
<TextView
android:id="@+id/tvReportType"
android:layout_width="@dimen/dp_0"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/tvReportTime"
app:layout_constraintLeft_toLeftOf="@id/tvReportTime"
app:layout_constraintRight_toLeftOf="@id/tvReportShowTime"
android:textSize="@dimen/sp_32"
android:textColor="#CCCCCC"
/>
<TextView
android:id="@+id/tvReportReason"
android:layout_width="@dimen/dp_0"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/tvReportType"
app:layout_constraintLeft_toLeftOf="@id/tvReportType"
app:layout_constraintRight_toLeftOf="@id/tvReportShowTime"
android:textSize="@dimen/sp_32"
android:textColor="#CCCCCC"
android:visibility="gone"
/>
<TextView
android:id="@+id/tvReportSrc"
android:layout_width="@dimen/dp_0"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/tvReportReason"
app:layout_constraintLeft_toLeftOf="@id/tvReportReason"
app:layout_constraintRight_toLeftOf="@id/tvReportShowTime"
android:textSize="@dimen/sp_32"
android:textColor="#CCCCCC"
android:visibility="gone"
/>
<TextView
android:id="@+id/tvReportAction"
android:layout_width="@dimen/dp_0"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/tvReportSrc"
app:layout_constraintLeft_toLeftOf="@id/tvReportSrc"
app:layout_constraintRight_toLeftOf="@id/tvReportShowTime"
android:textSize="@dimen/sp_32"
android:textColor="#CCCCCC"
android:visibility="gone"
/>
<TextView
android:id="@+id/tvReportShowTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/tvReportLevel"
app:layout_constraintBottom_toBottomOf="@id/tvReportLevel"
app:layout_constraintRight_toRightOf="parent"
android:textColor="#999999"
android:textSize="@dimen/sp_32"
/>
<TextView
android:id="@+id/tvReportShowStatus"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:text="@string/report_open"
android:textSize="@dimen/sp_32"
android:textColor="#2EACFF"
/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,68 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto">
<ImageView
android:id="@+id/ivNoticeImage"
android:layout_width="@dimen/dp_120"
android:layout_height="@dimen/dp_120"
android:src="@drawable/icon_tab_notice"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginTop="@dimen/dp_40"
android:contentDescription="@string/notice_icon"
/>
<TextView
android:id="@+id/tvNoticeTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/ivNoticeImage"
app:layout_constraintLeft_toRightOf="@id/ivNoticeImage"
android:layout_marginStart="@dimen/dp_30"
android:text="@string/notice_title"
android:textColor="@color/white"
android:textSize="@dimen/sp_38"
/>
<TextView
android:id="@+id/tvNoticeTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/tvNoticeTitle"
app:layout_constraintBottom_toBottomOf="@id/tvNoticeTitle"
app:layout_constraintRight_toRightOf="parent"
android:textSize="@dimen/sp_32"
android:textColor="#999999"
/>
<TextView
android:id="@+id/tvNoticeCheck"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginBottom="@dimen/dp_30"
android:text="@string/notice_check"
android:textColor="#2EACFF"
android:textSize="@dimen/sp_32"
/>
<TextView
android:id="@+id/tvNoticeContent"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="@id/tvNoticeTitle"
app:layout_constraintRight_toLeftOf="@id/tvNoticeCheck"
app:layout_constraintTop_toTopOf="@id/tvNoticeCheck"
app:layout_constraintBottom_toBottomOf="@id/tvNoticeCheck"
android:gravity="start"
android:maxLines="1"
android:ellipsize="end"
android:textColor="#CCCCCC"
android:textSize="@dimen/sp_32"
/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,52 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto">
<ImageView
android:id="@+id/ivOperationImage"
android:layout_width="@dimen/dp_120"
android:layout_height="@dimen/dp_120"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
android:layout_marginTop="@dimen/dp_40"
android:src="@drawable/icon_msg_box_operation"
android:contentDescription="@string/operation_icon"
/>
<TextView
android:id="@+id/tvOperationTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/ivOperationImage"
app:layout_constraintLeft_toRightOf="@id/ivOperationImage"
android:layout_marginStart="@dimen/dp_30"
android:text="@string/operation_title"
android:textSize="@dimen/sp_38"
android:textColor="@color/white"
/>
<TextView
android:id="@+id/tvOperationContent"
android:layout_width="@dimen/dp_0"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/tvOperationTitle"
app:layout_constraintLeft_toLeftOf="@id/tvOperationTitle"
app:layout_constraintRight_toRightOf="parent"
android:textSize="@dimen/sp_32"
android:textColor="#CCCCCC"
/>
<TextView
android:id="@+id/tvOperationTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/tvOperationTitle"
app:layout_constraintBottom_toBottomOf="@id/tvOperationTitle"
app:layout_constraintRight_toRightOf="parent"
android:textSize="@dimen/sp_32"
android:textColor="#999999"
/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,56 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto">
<ImageView
android:id="@+id/ivOperationDoorImage"
android:layout_width="@dimen/dp_120"
android:layout_height="@dimen/dp_120"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:src="@drawable/v2x_icon_shigu_sanjiaopai"
android:layout_marginTop="@dimen/dp_40"
android:layout_marginBottom="@dimen/dp_40"
android:contentDescription="@string/operation_door_icon"
/>
<TextView
android:id="@+id/ivOperationDoorTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/ivOperationDoorImage"
app:layout_constraintLeft_toRightOf="@id/ivOperationDoorImage"
android:textSize="@dimen/sp_38"
android:textColor="@color/white"
android:layout_marginStart="@dimen/dp_30"
android:text="@string/operation_door_title"
/>
<TextView
android:id="@+id/tvOperationDoorTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/ivOperationDoorTitle"
app:layout_constraintBottom_toBottomOf="@id/ivOperationDoorTitle"
app:layout_constraintRight_toRightOf="parent"
android:textSize="@dimen/sp_32"
android:textColor="#999999"
/>
<TextView
android:id="@+id/tvOperationDoorContent"
android:layout_width="@dimen/dp_0"
android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="@id/ivOperationDoorTitle"
app:layout_constraintRight_toRightOf="@id/tvOperationDoorTime"
app:layout_constraintBottom_toBottomOf="@id/ivOperationDoorImage"
android:textColor="#CCCCCC"
android:textSize="@dimen/sp_32"
android:maxLines="1"
android:ellipsize="end"
/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,57 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto">
<ImageView
android:id="@+id/ivOperationReturnImage"
android:layout_width="@dimen/dp_120"
android:layout_height="@dimen/dp_120"
android:src="@drawable/icon_msg_box_operation_return"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginTop="@dimen/dp_40"
android:layout_marginBottom="@dimen/dp_40"
android:contentDescription="@string/operation_return_icon"
/>
<TextView
android:id="@+id/tvOperationReturnTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/operation_return_title"
android:textColor="@color/white"
android:textSize="@dimen/sp_38"
app:layout_constraintTop_toTopOf="@id/ivOperationReturnImage"
app:layout_constraintLeft_toRightOf="@id/ivOperationReturnImage"
android:layout_marginStart="@dimen/dp_30"
/>
<TextView
android:id="@+id/tvOperationReturnTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/tvOperationReturnTitle"
app:layout_constraintBottom_toBottomOf="@id/tvOperationReturnTitle"
app:layout_constraintRight_toRightOf="parent"
android:textSize="@dimen/sp_32"
android:textColor="#999999"
/>
<TextView
android:id="@+id/tvOperationReturnContent"
android:layout_width="@dimen/dp_0"
android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="@id/tvOperationReturnTitle"
app:layout_constraintRight_toRightOf="@id/tvOperationReturnTime"
app:layout_constraintBottom_toBottomOf="@id/ivOperationReturnImage"
android:textColor="#CCCCCC"
android:textSize="@dimen/sp_32"
android:gravity="start"
android:maxLines="1"
android:ellipsize="end"
/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,56 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto">
<ImageView
android:id="@+id/ivOperationStopImage"
android:layout_width="@dimen/dp_120"
android:layout_height="@dimen/dp_120"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:src="@drawable/icon_msg_box_operation_stop"
android:layout_marginTop="@dimen/dp_40"
android:layout_marginBottom="@dimen/dp_40"
android:contentDescription="@string/operation_stop_icon"
/>
<TextView
android:id="@+id/ivOperationStopTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/ivOperationStopImage"
app:layout_constraintLeft_toRightOf="@id/ivOperationStopImage"
android:textSize="@dimen/sp_38"
android:textColor="@color/white"
android:layout_marginStart="@dimen/dp_30"
android:text="@string/operation_stop_title"
/>
<TextView
android:id="@+id/tvOperationStopTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/ivOperationStopTitle"
app:layout_constraintBottom_toBottomOf="@id/ivOperationStopTitle"
app:layout_constraintRight_toRightOf="parent"
android:textSize="@dimen/sp_32"
android:textColor="#999999"
/>
<TextView
android:id="@+id/tvOperationStopContent"
android:layout_width="@dimen/dp_0"
android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="@id/ivOperationStopTitle"
app:layout_constraintRight_toRightOf="@id/tvOperationStopTime"
app:layout_constraintBottom_toBottomOf="@id/ivOperationStopImage"
android:textColor="#CCCCCC"
android:textSize="@dimen/sp_32"
android:maxLines="1"
android:ellipsize="end"
/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,51 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto">
<ImageView
android:id="@+id/ivSsmImage"
android:layout_width="@dimen/dp_120"
android:layout_height="@dimen/dp_120"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
android:src="@drawable/icon_warning_take_over"
android:layout_marginTop="@dimen/dp_40"
android:contentDescription="@string/ssm_icon"
/>
<TextView
android:id="@+id/tvSsmTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/ivSsmImage"
app:layout_constraintLeft_toRightOf="@id/ivSsmImage"
android:layout_marginStart="@dimen/dp_30"
android:textColor="@color/white"
android:textSize="@dimen/sp_38"
/>
<TextView
android:id="@+id/tvSsmTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/tvSsmTitle"
app:layout_constraintBottom_toBottomOf="@id/tvSsmTitle"
app:layout_constraintRight_toRightOf="parent"
android:textSize="@dimen/sp_32"
android:textColor="#999999"
/>
<TextView
android:id="@+id/tvSsmContent"
android:layout_width="@dimen/dp_0"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/tvSsmTitle"
app:layout_constraintLeft_toLeftOf="@id/tvSsmTitle"
app:layout_constraintRight_toRightOf="@id/tvSsmTime"
android:textColor="#CCCCCC"
android:textSize="@dimen/sp_32"
/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,53 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto">
<ImageView
android:id="@+id/ivSummaryImage"
android:layout_width="@dimen/dp_120"
android:layout_height="@dimen/dp_120"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:src="@drawable/icon_tab_notice"
android:layout_marginTop="@dimen/dp_40"
android:contentDescription="@string/summary_icon"
/>
<TextView
android:id="@+id/tvSummaryTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/ivSummaryImage"
app:layout_constraintLeft_toRightOf="@id/ivSummaryImage"
android:layout_marginStart="@dimen/dp_30"
android:textColor="@color/white"
android:textSize="@dimen/sp_38"
android:text="@string/summary_title"
/>
<TextView
android:id="@+id/tvSummaryTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/tvSummaryTitle"
app:layout_constraintBottom_toBottomOf="@id/tvSummaryTitle"
app:layout_constraintRight_toRightOf="parent"
android:textSize="@dimen/sp_32"
android:textColor="#999999"
/>
<TextView
android:id="@+id/tvSummaryContent"
android:layout_width="@dimen/dp_0"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/tvSummaryTitle"
app:layout_constraintLeft_toLeftOf="@id/tvSummaryTitle"
app:layout_constraintRight_toRightOf="@id/tvSummaryTime"
android:textSize="@dimen/sp_32"
android:textColor="#CCCCCC"
android:gravity="start"
/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,50 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto">
<ImageView
android:id="@+id/ivV2XImage"
android:layout_width="@dimen/dp_120"
android:layout_height="@dimen/dp_120"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginTop="@dimen/dp_40"
android:contentDescription="@string/v2x_icon"
/>
<TextView
android:id="@+id/tvV2XTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/ivV2XImage"
app:layout_constraintLeft_toRightOf="@id/ivV2XImage"
android:layout_marginStart="@dimen/dp_30"
android:textSize="@dimen/sp_38"
android:textColor="@color/white"
/>
<TextView
android:id="@+id/tvV2XTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/tvV2XTitle"
app:layout_constraintBottom_toBottomOf="@id/tvV2XTitle"
app:layout_constraintRight_toRightOf="parent"
android:textSize="@dimen/sp_32"
android:textColor="#999999"
/>
<TextView
android:id="@+id/tvV2XContent"
android:layout_width="@dimen/dp_0"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/tvV2XTitle"
app:layout_constraintLeft_toLeftOf="@id/tvV2XTitle"
app:layout_constraintRight_toRightOf="@id/tvV2XTime"
android:textSize="@dimen/sp_32"
android:textColor="#CCCCCC"
/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="@dimen/dp_880"
android:layout_height="@dimen/dp_997"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="@drawable/bg_msg_box"
android:background="@drawable/bg_tab_item"
>
<TextView
@@ -15,8 +15,9 @@
android:textSize="@dimen/sp_40"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
android:layout_marginStart="@dimen/dp_26"
android:layout_marginStart="@dimen/dp_66"
android:paddingTop="@dimen/dp_38"
android:layout_marginTop="@dimen/dp_20"
android:gravity="center_horizontal"
android:background="@drawable/bg_msg_box_title_selected"
/>
@@ -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"
/>

View File

@@ -185,5 +185,25 @@
<string name="report_icon">系统信息图标</string>
<string name="report_retract">收起</string>
<string name="report_open">展开</string>
<string name="fm_icon">FM图标</string>
<string name="fm_retract">收起</string>
<string name="fm_open">展开</string>
<string name="operation_icon">运营图标</string>
<string name="operation_title">运营平台</string>
<string name="operation_return_icon">还车通知图标</string>
<string name="operation_return_title">还车通知</string>
<string name="operation_stop_icon">靠边停车图标</string>
<string name="operation_stop_title">靠边停车</string>
<string name="operation_door_icon">运营平台开关门失败图标</string>
<string name="operation_door_title">运营平台</string>
<string name="notice_icon">官方公告图标</string>
<string name="notice_title">官方公告</string>
<string name="notice_check">查看</string>
<string name="summary_icon">汇总消息图标</string>
<string name="summary_title">蘑菇小助手</string>
<string name="ssm_icon">SSM图标</string>
<string name="autopilot_icon">域控制器连接状态图标</string>
<string name="fsm_icon">FSM图标</string>
<string name="v2x_icon">V2X图标</string>
</resources>