Merge branch 'dev_robotaxi-d-app-module_2130_221116_2.13.0' into mutidev_robotaxi-d-app-module_2130_221116_2.13.0_multi_display

# Conflicts:
#	app/src/main/java/com/mogo/launcher/stageone/HttpDnsStartUp.kt
This commit is contained in:
donghongyu
2022-12-01 10:38:40 +08:00
115 changed files with 2684 additions and 638 deletions

View File

@@ -9,10 +9,12 @@ import android.view.WindowManager;
import android.widget.FrameLayout;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import com.mogo.commons.debug.DebugConfig;
import com.mogo.eagle.core.function.hmi.R;
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
import com.mogo.eagle.core.utilcode.util.PermissionUtils;
/**
* 浮在各种wm上面的dialog基类调用了window.setType
@@ -34,12 +36,16 @@ public class BaseFloatDialog extends Dialog {
}
}
@RequiresApi(api = Build.VERSION_CODES.M)
private void addFlag() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
getWindow().setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY);
} else {
getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
if(PermissionUtils.isGrantedDrawOverlays()){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
getWindow().setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY);
} else {
getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
}
}
getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
| WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION
| WindowManager.LayoutParams.FLAG_LOCAL_FOCUS_MODE);

View File

@@ -83,6 +83,7 @@ class V2XWarningBroadcastReceiver : BroadcastReceiver() {
V2XMsg(v2xType.toString(), alertContent, ttsContent)
)
)
//预留调试入口
CallerHmiManager.warningV2X(v2xType.toString(), alertContent, ttsContent,
tag, null, true, 5000L)
}

View File

@@ -76,6 +76,7 @@ import com.mogo.eagle.core.function.hmi.ui.bindingcar.ToBindingCarDialog
import com.mogo.eagle.core.function.hmi.ui.bindingcar.UpgradeAppDialog
import com.mogo.eagle.core.function.hmi.ui.camera.CameraListView
import com.mogo.eagle.core.function.hmi.ui.camera.RoadVideoDialog
import com.mogo.eagle.core.function.hmi.ui.msgbox.PassengerMsgBoxBubbleView
import com.mogo.eagle.core.function.hmi.ui.notice.NoticeCheckDialog
import com.mogo.eagle.core.function.hmi.ui.notice.NoticeTrafficDialog
import com.mogo.eagle.core.function.hmi.ui.setting.DebugSettingView
@@ -171,6 +172,8 @@ class MoGoHmiFragment : MvpFragment<MoGoHmiContract.View?, HmiPresenter?>(),
private var reportListFloatWindow: ReportListFloatWindow? = null
private var ipcReportWindow: IPCReportWindow? = null
private var passengerMsgBoxBubbleView: PassengerMsgBoxBubbleView ?= null
private var adUpgradeDialog: AdUpgradeDialog? = null
private var lastSpeakJob: Job? = null
@@ -296,6 +299,36 @@ class MoGoHmiFragment : MvpFragment<MoGoHmiContract.View?, HmiPresenter?>(),
}
}
}
cbMsgBoxDriver.setOnCheckedChangeListener { _, isChecked ->
if(isChecked){
viewDriverMsgBoxList.visibility = View.VISIBLE
viewDriverMsgBoxBubble.visibility = View.GONE
}else{
viewDriverMsgBoxList.visibility = View.GONE
viewDriverMsgBoxBubble.visibility = View.VISIBLE
}
}
cbMsgBoxPassenger.setOnCheckedChangeListener { _, isChecked ->
if(isChecked){
viewPassengerMsgBoxList.visibility = View.VISIBLE
viewPassengerMsgBoxBubble.visibility = View.GONE
}else{
viewPassengerMsgBoxList.visibility = View.GONE
viewPassengerMsgBoxBubble.visibility = View.VISIBLE
}
}
if(AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)){
cbMsgBoxDriver.visibility = View.VISIBLE
viewDriverMsgBoxBubble.visibility = View.VISIBLE
}
if(AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode) &&
AppIdentityModeUtils.isTaxi(FunctionBuildConfig.appIdentityMode)){
cbMsgBoxPassenger.visibility = View.VISIBLE
viewPassengerMsgBoxBubble.visibility = View.VISIBLE
}
}
@OptIn(ExperimentalCoroutinesApi::class)
@@ -323,14 +356,6 @@ class MoGoHmiFragment : MvpFragment<MoGoHmiContract.View?, HmiPresenter?>(),
override fun onAutopilotRecordResult(recordPanel: RecordPanelOuterClass.RecordPanel) {
CallerLogger.d("$M_HMI$TAG", "recordKey=${recordPanel.key},stat=${recordPanel.stat}")
CallerMsgBoxManager.saveMsgBox(
MsgBoxBean(
MsgBoxType.RECORD, RecordBagMsg(
recordPanel.key, recordPanel.stat, recordPanel.id,
recordPanel.type, recordPanel.filename, recordPanel.note
)
)
)
if (BadCaseConfig.recordKeyList.contains(recordPanel.key)) {
if (recordPanel.stat == 100 || recordPanel.stat == 101) {
//成功结束录制
@@ -369,7 +394,14 @@ class MoGoHmiFragment : MvpFragment<MoGoHmiContract.View?, HmiPresenter?>(),
if (!FunctionBuildConfig.isDemoMode && (recordPanel.stat == 100 || recordPanel.stat == 101) && recordPanel.type != 2) {
//只在司机屏生效,乘客屏不生效
if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {
activity?.let { CallerDevaToolsManager.onReceiveBadCaseRecord(recordPanel, it) }
CallerMsgBoxManager.saveMsgBox(
MsgBoxBean(
MsgBoxType.RECORD, RecordBagMsg(
recordPanel.key, recordPanel.stat, recordPanel.id,
recordPanel.type, recordPanel.filename, recordPanel.note
)
)
)
}
}
if (!FunctionBuildConfig.isDemoMode && recordPanel.type == 2 && (
@@ -940,7 +972,7 @@ class MoGoHmiFragment : MvpFragment<MoGoHmiContract.View?, HmiPresenter?>(),
SharedPrefsMgr.getInstance(it)
.putLong("roadwork", System.currentTimeMillis() / 1000)
}
CallerAutoPilotManager.sendTripInfo(5, "", "", "", false);
CallerAutoPilotManager.sendTripInfo(5, "", "", "", false)
}
}
@@ -1554,7 +1586,7 @@ class MoGoHmiFragment : MvpFragment<MoGoHmiContract.View?, HmiPresenter?>(),
EXIT_AUTOPILOT_FOR_LOCATION,
EXIT_AUTOPILOT_FOR_CHASSIS,
EXIT_AUTOPILOT_FOR_DISTANCE -> {
showWarningV2X(
warningV2X(
EventTypeEnum.TAKE_OVER_EVENT.poiType,
EventTypeEnum.TAKE_OVER_EVENT.content,
EventTypeEnum.TAKE_OVER_EVENT.tts,

View File

@@ -0,0 +1,83 @@
package com.mogo.eagle.core.function.hmi.ui.msgbox
import android.app.Activity
import android.content.Context
import android.util.AttributeSet
import android.util.Log
import android.view.LayoutInflater
import android.widget.LinearLayout
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.view.marginTop
import androidx.recyclerview.widget.LinearLayoutManager
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.data.msgbox.OperationMsg
import com.mogo.eagle.core.function.api.msgbox.IMsgBoxListener
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxListenerManager
import com.mogo.eagle.core.function.hmi.R
import com.mogo.eagle.core.function.hmi.ui.msgbox.adapter.DriverMsgBoxBubbleAdapter
import kotlinx.android.synthetic.main.layout_driver_msg_box_bubble.view.*
/**
* @author XuXinChao
* @description 司机端消息盒子气泡视图
* @since: 2022/11/25
*/
class DriverMsgBoxBubbleView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : ConstraintLayout(context, attrs, defStyleAttr), IMsgBoxListener {
init {
LayoutInflater.from(context).inflate(R.layout.layout_driver_msg_box_bubble, this, true)
initView()
}
var driverMsgBoxBubbleAdapter: DriverMsgBoxBubbleAdapter ?=null
private val TAG = "DriverMsgBoxBubbleView"
private val dataList :ArrayList<MsgBoxBean> = ArrayList()
private fun initView() {
val linearLayoutManager = LinearLayoutManager(context)
linearLayoutManager.orientation = LinearLayoutManager.VERTICAL
linearLayoutManager.stackFromEnd = true
linearLayoutManager.reverseLayout = true
driverMsgBoxBubbleAdapter = DriverMsgBoxBubbleAdapter(context as Activity)
rvBubbleList.adapter = driverMsgBoxBubbleAdapter
rvBubbleList.layoutManager = linearLayoutManager
}
override fun onDataChanged(category: MsgCategory, msgBoxBean: MsgBoxBean) {
if(category == MsgCategory.RECORD_BAG){
//弹出被动录包弹窗
CallerDevaToolsManager.onReceiveBadCaseRecord(msgBoxBean,context as Activity,true)
}else{
dataList.add(msgBoxBean)
driverMsgBoxBubbleAdapter?.setData(dataList)
}
}
override fun onAttachedToWindow() {
super.onAttachedToWindow()
CallerMsgBoxListenerManager.addListener(TAG,this)
}
override fun onDetachedFromWindow() {
super.onDetachedFromWindow()
CallerMsgBoxListenerManager.removeListener(TAG)
}
// var i = 0
//
// fun setData(){
// val one = MsgBoxBean(MsgBoxType.OPERATION, OperationMsg(System.currentTimeMillis(),"测试"+i++))
// dataList.add(one)
// driverMsgBoxBubbleAdapter?.setData(dataList)
// }
}

View File

@@ -0,0 +1,182 @@
package com.mogo.eagle.core.function.hmi.ui.msgbox
import android.app.Activity
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.View
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.recyclerview.widget.LinearLayoutManager
import com.mogo.eagle.core.data.enums.EventTypeEnum
import com.mogo.eagle.core.data.msgbox.MsgBoxBean
import com.mogo.eagle.core.data.msgbox.MsgBoxType
import com.mogo.eagle.core.data.msgbox.OperationMsg
import com.mogo.eagle.core.data.msgbox.RecordBagMsg
import com.mogo.eagle.core.data.notice.NoticeNormalData
import com.mogo.eagle.core.data.report.ReportEntity
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager
import com.mogo.eagle.core.function.hmi.R
import com.mogo.eagle.core.function.hmi.ui.msgbox.adapter.DriverMsgBoxListAdapter
import kotlinx.android.synthetic.main.layout_driver_msg_box_list.view.*
/**
* @author XuXinChao
* @description 司机端消息盒子打开列表视图
* @since: 2022/11/25
*/
class DriverMsgBoxListView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : ConstraintLayout(context, attrs, defStyleAttr){
init {
LayoutInflater.from(context).inflate(R.layout.layout_driver_msg_box_list, this, true)
initView()
}
private fun initView() {
val driverMsgBoxListAdapter= DriverMsgBoxListAdapter(context as Activity)
rvMsgBoxList.adapter = driverMsgBoxListAdapter
rvMsgBoxList.layoutManager = LinearLayoutManager(context)
//获取通知消息列表
val noticeList: List<MsgBoxBean>? = CallerMsgBoxManager.getCachedNotifyData()
if(noticeList==null){
rvMsgBoxList.visibility = View.GONE
}else{
driverMsgBoxListAdapter.setData(noticeList)
rvMsgBoxList.visibility = View.VISIBLE
rvMsgBoxList.scrollToPosition(0)
}
//通知
tvMsgNotice.setOnClickListener {
tvMsgNotice.setTextColor(resources.getColor(R.color.msg_box_title_color))
tvMsgIpcReport.setTextColor(resources.getColor(R.color.color_FFFFFF))
tvMsgBadCase.setTextColor(resources.getColor(R.color.color_FFFFFF))
viewNoticeDivider.visibility = View.VISIBLE
viewIpcReportDivider.visibility = View.GONE
viewBadCaseDivider.visibility = View.GONE
//获取通知消息列表
val noticeList: List<MsgBoxBean>? = CallerMsgBoxManager.getCachedNotifyData()
if(noticeList==null){
rvMsgBoxList.visibility = View.GONE
}else{
driverMsgBoxListAdapter.setData(noticeList.reversed())
rvMsgBoxList.visibility = View.VISIBLE
rvMsgBoxList.scrollToPosition(0)
}
// val nList: ArrayList<MsgBoxBean> = ArrayList()
// val one = MsgBoxBean(MsgBoxType.OPERATION, OperationMsg(System.currentTimeMillis(),"通知1",2))
// val two = MsgBoxBean(MsgBoxType.OPERATION, OperationMsg(System.currentTimeMillis(),"通知2",2))
// val three = MsgBoxBean(MsgBoxType.OPERATION, OperationMsg(System.currentTimeMillis(),"通知3",2))
// val four = MsgBoxBean(MsgBoxType.OPERATION, OperationMsg(System.currentTimeMillis(),"通知4",2))
// val five = MsgBoxBean(MsgBoxType.OPERATION, OperationMsg(System.currentTimeMillis(),"通知5",2))
// val normalData = NoticeNormalData()
// normalData.content = "测试数据"
// val six = MsgBoxBean(MsgBoxType.NOTICE, normalData)
//
// nList.add(one)
// nList.add(two)
// nList.add(three)
// nList.add(four)
// nList.add(five)
// nList.add(six)
// driverMsgBoxListAdapter.setData(nList)
}
//车辆系统信息
tvMsgIpcReport.setOnClickListener {
tvMsgNotice.setTextColor(resources.getColor(R.color.color_FFFFFF))
tvMsgIpcReport.setTextColor(resources.getColor(R.color.msg_box_title_color))
tvMsgBadCase.setTextColor(resources.getColor(R.color.color_FFFFFF))
viewNoticeDivider.visibility = View.GONE
viewIpcReportDivider.visibility = View.VISIBLE
viewBadCaseDivider.visibility = View.GONE
//获取车辆系统信息列表
val ipcReportList: List<MsgBoxBean>? = CallerMsgBoxManager.getCachedSysInfoData()
if(ipcReportList == null){
rvMsgBoxList.visibility = View.GONE
}else{
driverMsgBoxListAdapter.setData(ipcReportList.reversed())
rvMsgBoxList.visibility = View.VISIBLE
rvMsgBoxList.scrollToPosition(0)
}
// val ipcList: ArrayList<MsgBoxBean> = ArrayList()
// val resultList:ArrayList<String> = ArrayList()
// resultList.add("RESULT_AUTOPILOT_DISABLE")
// val result:ArrayList<String> = ArrayList()
// result.add("RESULT_AUTOPILOT_INFERIOR")
// val one = ReportEntity(System.currentTimeMillis().toString(),"","","自动驾驶失败1","code",
// resultList,resultList)
// val beanOne = MsgBoxBean(MsgBoxType.REPORT,one)
// beanOne.timestamp = System.currentTimeMillis()
// val two = ReportEntity(System.currentTimeMillis().toString(),"","","自动驾驶失败2","code",
// resultList,resultList)
// val beanTwo = MsgBoxBean(MsgBoxType.REPORT,two)
// beanTwo.timestamp = System.currentTimeMillis()
// val three = ReportEntity(System.currentTimeMillis().toString(),"","","自动驾驶失败3","code",
// resultList,resultList)
// val beanThree = MsgBoxBean(MsgBoxType.REPORT,three)
// beanThree.timestamp = System.currentTimeMillis()
// val four = ReportEntity(System.currentTimeMillis().toString(),"","","自动驾驶失败4","code",
// resultList,resultList)
// val beanFour = MsgBoxBean(MsgBoxType.REPORT,four)
// beanFour.timestamp = System.currentTimeMillis()
// val five = ReportEntity(System.currentTimeMillis().toString(),"","","自动驾驶失败5","code",
// result,result)
// val beanFive = MsgBoxBean(MsgBoxType.REPORT,five)
// beanFive.timestamp = System.currentTimeMillis()
// ipcList.add(beanOne)
// ipcList.add(beanTwo)
// ipcList.add(beanThree)
// ipcList.add(beanFour)
// ipcList.add(beanFive)
// driverMsgBoxListAdapter.setData(ipcList)
}
//录包
tvMsgBadCase.setOnClickListener {
tvMsgNotice.setTextColor(resources.getColor(R.color.color_FFFFFF))
tvMsgIpcReport.setTextColor(resources.getColor(R.color.color_FFFFFF))
tvMsgBadCase.setTextColor(resources.getColor(R.color.msg_box_title_color))
viewNoticeDivider.visibility = View.GONE
viewIpcReportDivider.visibility = View.GONE
viewBadCaseDivider.visibility = View.VISIBLE
//获取录包信息列表
val badCaseList: List<MsgBoxBean>? = CallerMsgBoxManager.getCachedRecordBagData()
if(badCaseList == null){
rvMsgBoxList.visibility = View.GONE
}else{
driverMsgBoxListAdapter.setData(badCaseList.reversed())
rvMsgBoxList.visibility = View.VISIBLE
rvMsgBoxList.scrollToPosition(0)
}
// val list : ArrayList<MsgBoxBean> = ArrayList()
// val one = MsgBoxBean(MsgBoxType.RECORD, RecordBagMsg(3457774,1,235,2,"",""))
// one.timestamp = System.currentTimeMillis()
// val two = MsgBoxBean(MsgBoxType.RECORD, RecordBagMsg(3457774,1,235,2,"",""))
// two.timestamp = System.currentTimeMillis()
// val three = MsgBoxBean(MsgBoxType.RECORD, RecordBagMsg(3457774,1,235,2,"",""))
// three.timestamp = System.currentTimeMillis()
// val four = MsgBoxBean(MsgBoxType.RECORD, RecordBagMsg(3457774,1,235,2,"",""))
// four.timestamp = System.currentTimeMillis()
// val five = MsgBoxBean(MsgBoxType.RECORD, RecordBagMsg(3457774,1,235,2,"",""))
// five.timestamp = System.currentTimeMillis()
//
// list.add(one)
// list.add(two)
// list.add(three)
// list.add(four)
// list.add(five)
// driverMsgBoxListAdapter.setData(list)
}
}
}

View File

@@ -0,0 +1,84 @@
package com.mogo.eagle.core.function.hmi.ui.msgbox
import android.app.Activity
import android.content.Context
import android.graphics.PixelFormat
import android.util.AttributeSet
import android.util.DisplayMetrics
import android.view.*
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.recyclerview.widget.LinearLayoutManager
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.data.msgbox.OperationMsg
import com.mogo.eagle.core.function.api.msgbox.IMsgBoxListener
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxListenerManager
import com.mogo.eagle.core.function.hmi.R
import com.mogo.eagle.core.function.hmi.ui.msgbox.adapter.PassengerMsgBoxBubbleAdapter
import com.mogo.eagle.core.utilcode.util.BarUtils
import kotlinx.android.synthetic.main.layout_passenger_msg_box_bubble.view.*
/**
* @author XuXinChao
* @description 乘客端消息盒子气泡列表视图
* @since: 2022/11/29
*/
class PassengerMsgBoxBubbleView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : ConstraintLayout(context, attrs, defStyleAttr), IMsgBoxListener {
private val TAG = "PassengerMsgBoxBubbleView"
private val dataList :ArrayList<MsgBoxBean> = ArrayList()
var passengerMsgBoxBubbleAdapter: PassengerMsgBoxBubbleAdapter ?= null
init {
LayoutInflater.from(context).inflate(R.layout.layout_passenger_msg_box_bubble, this, true)
initView()
}
private fun initView(){
val linearLayoutManager = LinearLayoutManager(context)
linearLayoutManager.orientation = LinearLayoutManager.VERTICAL
linearLayoutManager.stackFromEnd = true
linearLayoutManager.reverseLayout = true
passengerMsgBoxBubbleAdapter = PassengerMsgBoxBubbleAdapter(context as Activity)
rvPassengerBubbleList.adapter = passengerMsgBoxBubbleAdapter
rvPassengerBubbleList.layoutManager = linearLayoutManager
// setData()
}
override fun onDataChanged(category: MsgCategory, msgBoxList: MsgBoxBean) {
if(category == MsgCategory.NOTICE){
if(msgBoxList.type == MsgBoxType.NOTICE || msgBoxList.type == MsgBoxType.V2X
|| msgBoxList.type == MsgBoxType.OBU){
dataList.add(msgBoxList)
passengerMsgBoxBubbleAdapter?.setData(dataList)
}
}
}
// fun setData(){
// val list :ArrayList<MsgBoxBean> = ArrayList()
// val one = MsgBoxBean(MsgBoxType.OPERATION, OperationMsg(System.currentTimeMillis(),"测试"))
// val two = MsgBoxBean(MsgBoxType.OPERATION, OperationMsg(System.currentTimeMillis(),"测试"))
// val three = MsgBoxBean(MsgBoxType.OPERATION, OperationMsg(System.currentTimeMillis(),"测试"))
// list.add(one)
// list.add(two)
// list.add(three)
// passengerMsgBoxBubbleAdapter?.setData(list)
// }
override fun onAttachedToWindow() {
super.onAttachedToWindow()
CallerMsgBoxListenerManager.addListener(TAG,this)
}
override fun onDetachedFromWindow() {
super.onDetachedFromWindow()
CallerMsgBoxListenerManager.removeListener(TAG)
}
}

View File

@@ -0,0 +1,66 @@
package com.mogo.eagle.core.function.hmi.ui.msgbox
import android.app.Activity
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager
import com.mogo.eagle.core.data.msgbox.MsgBoxBean
import com.mogo.eagle.core.data.msgbox.MsgBoxType
import com.mogo.eagle.core.data.msgbox.V2XMsg
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager
import com.mogo.eagle.core.function.hmi.R
import com.mogo.eagle.core.function.hmi.ui.msgbox.adapter.PassengerMsgBoxListAdapter
import com.mogo.eagle.core.utilcode.util.ResourceUtils.getDrawable
import kotlinx.android.synthetic.main.layout_passenger_msg_box_list.view.*
/**
* @author XuXinChao
* @description 乘客端消息盒子列表视图
* @since: 2022/11/29
*/
class PassengerMsgBoxListView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : ConstraintLayout(context, attrs, defStyleAttr){
var passengerMsgBoxListAdapter: PassengerMsgBoxListAdapter ?= null
init{
LayoutInflater.from(context).inflate(R.layout.layout_passenger_msg_box_list, this, true)
initView()
}
private fun initView(){
val linearLayoutManager = LinearLayoutManager(context)
linearLayoutManager.orientation = LinearLayoutManager.VERTICAL
val divider = DividerItemDecoration(context, linearLayoutManager.orientation)
getDrawable(R.drawable.rv_divider_line)?.let { divider.setDrawable(it) }
passengerMsgBoxListAdapter = PassengerMsgBoxListAdapter(context as Activity)
rvPassengerList.adapter = passengerMsgBoxListAdapter
rvPassengerList.layoutManager = linearLayoutManager
rvPassengerList.addItemDecoration(divider)
//获取通知消息列表
val noticeList: List<MsgBoxBean>? = CallerMsgBoxManager.getCachedNotifyData()
noticeList?.let {
passengerMsgBoxListAdapter?.setData(it.reversed())
}
// setData()
}
fun setData(){
val list :ArrayList<MsgBoxBean> = ArrayList()
val one = MsgBoxBean(MsgBoxType.V2X, V2XMsg("","ceshiyixa"))
val two = MsgBoxBean(MsgBoxType.OPERATION, V2XMsg("","ceshiyixa1"))
val three = MsgBoxBean(MsgBoxType.OPERATION, V2XMsg("","ceshiyixa2"))
list.add(one)
list.add(two)
list.add(three)
passengerMsgBoxListAdapter?.setData(list)
}
}

View File

@@ -0,0 +1,171 @@
package com.mogo.eagle.core.function.hmi.ui.msgbox.adapter
import android.app.Activity
import android.os.CountDownTimer
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.mogo.eagle.core.data.enums.EventTypeEnum
import com.mogo.eagle.core.data.msgbox.MsgBoxBean
import com.mogo.eagle.core.data.msgbox.MsgBoxType
import com.mogo.eagle.core.data.msgbox.OperationMsg
import com.mogo.eagle.core.data.msgbox.V2XMsg
import com.mogo.eagle.core.data.notice.NoticeNormalData
import com.mogo.eagle.core.data.report.ReportEntity
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotManager
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager
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.TimeUtils
import com.mogo.eagle.core.utilcode.util.TimeUtils.getHourMinFormat
/**
* @author XuXinChao
* @description 司机端消息盒子气泡视图RecyclerView适配器
* @since: 2022/11/25
*/
class DriverMsgBoxBubbleAdapter(private val activity: Activity) : RecyclerView.Adapter<RecyclerView.ViewHolder>(){
private var data: ArrayList<MsgBoxBean> ?= null
private val operation: Int = 1
private val notice: Int = 2
private val v2x: Int = 3
private val report: Int = 4
var countDownTimer: CountDownTimer?=null
fun setData(data: ArrayList<MsgBoxBean>){
this.data = data
if(data.size>4){
data.removeAt(0)
}
notifyDataSetChanged()
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
if(viewType == operation){
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_msg_bubble_operation,parent,false)
return BubbleOperationHolder(view)
}else if(viewType == report){
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_msg_bubble_report,parent,false)
return BubbleReportHolder(view)
}else if(viewType == notice){
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_msg_box_notice,parent,false)
return BubbleNoticeHolder(view)
}else{
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_msg_box_v2x,parent,false)
return BubbleV2XHolder(view)
}
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
if(holder is BubbleOperationHolder){
data?.let {
val operationMsg = it[position].bean as OperationMsg
holder.tvBubbleOperationTime.text = TimeUtils.millis2String(it[position].timestamp,getHourMinFormat())
holder.tvBubbleOperationContent.text = operationMsg.content
}
}else if(holder is BubbleReportHolder){
data?.let {
val reportEntity = it[position].bean as ReportEntity
holder.tvBubbleReportTime.text = "时间:${TimeUtils.millis2String(it[position].timestamp)}"
holder.tvBubbleReceiveTime.text = TimeUtils.millis2String(it[position].timestamp,getHourMinFormat())
var resultStr = "类型:"
for (result in reportEntity.resultList){
resultStr = "${resultStr}${CallerAutoPilotManager.getReportResultDesc(result)}"
}
holder.tvBubbleReportType.text = resultStr
}
}else if(holder is BubbleNoticeHolder){
data?.let {
val noticeNormalData = it[position].bean as 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 {
//云公告
CallerHmiManager.showNoticeNormalData(noticeNormalData)
}
}
}else if(holder is BubbleV2XHolder){
data?.let {
val v2XMsg = it[position].bean as V2XMsg
holder.tvV2XTime.text = TimeUtils.millis2String(it[position].timestamp,getHourMinFormat())
holder.tvV2XContent.text = v2XMsg.content
holder.ivV2XImage.setImageDrawable(activity.resources.getDrawable(EventTypeEnum.getUpdateIconRes(v2XMsg.type)))
}
}
val msgBoxBean: MsgBoxBean = data!![position]
countDownTimer =object: CountDownTimer(CallerMsgBoxManager.getDismissTime(),1000){
override fun onTick(p0: Long) {
}
override fun onFinish() {
data?.remove(msgBoxBean)
notifyDataSetChanged()
// notifyItemRemoved(index)
// notifyItemRangeChanged(index,recordTypeEntity.size-index)
}
}
countDownTimer?.start()
}
override fun getItemCount() = data?.size ?: 0
override fun getItemViewType(position: Int): Int {
if(data!![position].type == MsgBoxType.OPERATION){
return operation
}else if(data!![position].type == MsgBoxType.REPORT){
return report
}else if(data!![position].type == MsgBoxType.NOTICE){
return notice
}else{
return v2x
}
}
//车辆系统信息
class BubbleReportHolder(itemView: View): RecyclerView.ViewHolder(itemView){
var tvBubbleReportTime: TextView = itemView.findViewById(R.id.tvBubbleReportTime)
var tvBubbleReportType: TextView = itemView.findViewById(R.id.tvBubbleReportType)
var tvBubbleReceiveTime: TextView = itemView.findViewById(R.id.tvBubbleReceiveTime)
}
//运营平台
class BubbleOperationHolder(itemView: View): RecyclerView.ViewHolder(itemView){
var tvBubbleOperationTime: TextView = itemView.findViewById(R.id.tvBubbleOperationTime)
var tvBubbleOperationContent: TextView = itemView.findViewById(R.id.tvBubbleOperationContent)
}
//Notice
class BubbleNoticeHolder(itemView: View): RecyclerView.ViewHolder(itemView){
var ivNoticeImage: ImageView = itemView.findViewById(R.id.ivNoticeImage)
var tvNoticeTitle: TextView = itemView.findViewById(R.id.tvNoticeTitle)
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
class BubbleV2XHolder(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)
}
}

View File

@@ -0,0 +1,264 @@
package com.mogo.eagle.core.function.hmi.ui.msgbox.adapter
import android.annotation.SuppressLint
import android.app.Activity
import android.util.Log
import android.view.LayoutInflater
import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.core.view.isVisible
import androidx.recyclerview.widget.RecyclerView
import com.mogo.eagle.core.data.enums.EventTypeEnum
import com.mogo.eagle.core.data.msgbox.*
import com.mogo.eagle.core.data.notice.NoticeNormalData
import com.mogo.eagle.core.data.report.ReportEntity
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotManager
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.widget.RoundConstraintLayout
/**
* @author XuXinChao
* @description 司机端消息盒子列表视图RecyclerView适配器
* @since: 2022/11/25
*/
class DriverMsgBoxListAdapter(private val activity: Activity) : RecyclerView.Adapter<RecyclerView.ViewHolder>(){
private var data: List<MsgBoxBean> ?= null
private val operation: Int = 1
private val notice: Int = 2
private val v2x: Int = 3
private val obu: Int = 4
private val report: Int = 5
private val record: Int = 6
private val traffic: Int = 7
//Error
val RESULT_AUTOPILOT_DISABLE = "RESULT_AUTOPILOT_DISABLE"
val RESULT_AUTOPILOT_SYSTEM_UNSTARTED = "RESULT_AUTOPILOT_SYSTEM_UNSTARTED"
val RESULT_REMOTEPILOT_DISABLE = "RESULT_REMOTEPILOT_DISABLE"
fun setData(data: List<MsgBoxBean>){
this.data = data
notifyDataSetChanged()
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
if(viewType == record){
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_bad_case,parent,false)
return BadCaseHolder(view)
}else if(viewType == report){
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_msg_box_ipc_report,parent,false)
return MsgBoxIpcReportHolder(view)
}else if(viewType == operation){
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_msg_box_operation,parent,false)
return MsgBoxOperation(view)
}else if(viewType == notice){
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_msg_box_notice,parent,false)
return MsgBoxNotice(view)
}else{
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_msg_box_v2x,parent,false)
return MsgBoxV2X(view)
}
}
@SuppressLint("SetTextI18n")
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
if(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 = (it[position].bean as RecordBagMsg)
holder.tvRecordCheck.setOnClickListener {
//打开被动录包弹窗
CallerDevaToolsManager.onReceiveBadCaseRecord(msgBoxBean,activity,false)
}
}
}else if(holder is MsgBoxIpcReportHolder){
data?.let { it ->
holder.tvReportTimeNormal.text = "时间:${TimeUtils.millis2String(it[position].timestamp)}"
holder.tvReportTimeOpen.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.ivReportImageNormal.setImageDrawable(getDrawable(R.drawable.icon_report_error_normal))
holder.ivReportImageOpen.setImageDrawable(getDrawable(R.drawable.icon_report_error_open))
holder.tvReportLevelNormal.text = "Error"
holder.tvReportLevelOpen.text = "Error"
}else{
//Warning
holder.ivReportImageNormal.setImageDrawable(getDrawable(R.drawable.icon_report_warning_normal))
holder.ivReportImageOpen.setImageDrawable(getDrawable(R.drawable.icon_report_warning_open))
holder.tvReportLevelNormal.text = "Warning"
holder.tvReportLevelOpen.text = "Warning"
}
holder.tvReportTimeNormal.text = "时间:${TimeUtils.millis2String(it[position].timestamp)}"
holder.tvReportTimeOpen.text = "时间:${TimeUtils.millis2String(it[position].timestamp)}"
var resultStr = "类型:"
for (result in reportEntity.resultList){
resultStr = "${resultStr}${CallerAutoPilotManager.getReportResultDesc(result)}"
}
holder.tvReportTypeNormal.text = resultStr
holder.tvReportTypeOpen.text = resultStr
holder.tvReportReasonOpen.text = "原因:${reportEntity.msg}"
holder.tvStatusSelect.setOnClickListener {
if(holder.tvReportLevelNormal.isVisible){
holder.tvStatusSelect.setCompoundDrawablesWithIntrinsicBounds(getDrawable(R.drawable.icon_msg_close),null,null,null)
holder.ivReportImageNormal.visibility = View.GONE
holder.tvReportLevelNormal.visibility = View.GONE
holder.tvReportTimeNormal.visibility = View.GONE
holder.tvReportTypeNormal.visibility = View.GONE
holder.ivReportImageOpen.visibility = View.VISIBLE
holder.tvReportLevelOpen.visibility = View.VISIBLE
holder.tvReportTimeOpen.visibility = View.VISIBLE
holder.tvReportTypeOpen.visibility = View.VISIBLE
holder.tvReportReasonOpen.visibility = View.VISIBLE
}else{
holder.tvStatusSelect.setCompoundDrawablesWithIntrinsicBounds(getDrawable(R.drawable.icon_msg_open),null,null,null)
holder.ivReportImageNormal.visibility = View.VISIBLE
holder.tvReportLevelNormal.visibility = View.VISIBLE
holder.tvReportTimeNormal.visibility = View.VISIBLE
holder.tvReportTypeNormal.visibility = View.VISIBLE
holder.ivReportImageOpen.visibility = View.GONE
holder.tvReportLevelOpen.visibility = View.GONE
holder.tvReportTimeOpen.visibility = View.GONE
holder.tvReportTypeOpen.visibility = View.GONE
holder.tvReportReasonOpen.visibility = View.GONE
}
}
}
}else if(holder is MsgBoxOperation){
data?.let {
val operationMsg = it[position].bean as OperationMsg
holder.tvOperationContentNormal.text = operationMsg.content
holder.tvOperationContentOpen.text = operationMsg.content
holder.tvOperationTime.text = TimeUtils.millis2String(operationMsg.timestamp,getHourMinFormat())
holder.tvOperationStatusSelect.setOnClickListener {
if(holder.ivOperationImageNormal.isVisible){
holder.tvOperationStatusSelect.setCompoundDrawablesWithIntrinsicBounds(getDrawable(R.drawable.icon_msg_close),null,null,null)
holder.ivOperationImageNormal.visibility = View.GONE
holder.tvOperationTitleNormal.visibility = View.GONE
holder.tvOperationContentNormal.visibility = View.GONE
holder.ivOperationImageOpen.visibility = View.VISIBLE
holder.tvOperationTitleOpen.visibility = View.VISIBLE
holder.tvOperationContentOpen.visibility = View.VISIBLE
}else{
holder.tvOperationStatusSelect.setCompoundDrawablesWithIntrinsicBounds(getDrawable(R.drawable.icon_msg_open),null,null,null)
holder.ivOperationImageNormal.visibility = View.VISIBLE
holder.tvOperationTitleNormal.visibility = View.VISIBLE
holder.tvOperationContentNormal.visibility = View.VISIBLE
holder.ivOperationImageOpen.visibility = View.GONE
holder.tvOperationTitleOpen.visibility = View.GONE
holder.tvOperationContentOpen.visibility = View.GONE
}
}
}
}else if(holder is MsgBoxNotice){
data?.let {
val noticeNormalData = it[position].bean as 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 {
//云公告
CallerHmiManager.showNoticeNormalData(noticeNormalData)
}
}
}else if(holder is MsgBoxV2X){
data?.let {
val v2XMsg = it[position].bean as V2XMsg
holder.tvV2XTime.text = TimeUtils.millis2String(it[position].timestamp,getHourMinFormat())
holder.tvV2XContent.text = v2XMsg.content
holder.ivV2XImage.setImageDrawable(activity.resources.getDrawable(EventTypeEnum.getUpdateIconRes(v2XMsg.type)))
}
}
}
override fun getItemCount() = data?.size ?: 0
override fun getItemViewType(position: Int): Int {
return when(data!![position].type){
MsgBoxType.OPERATION -> operation
MsgBoxType.NOTICE -> notice
MsgBoxType.V2X -> v2x
MsgBoxType.OBU -> obu
MsgBoxType.REPORT -> report
MsgBoxType.RECORD -> record
MsgBoxType.TRAFFIC -> traffic
}
}
//录包实体
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)
}
//车辆系统信息
class MsgBoxIpcReportHolder(itemView: View): RecyclerView.ViewHolder(itemView){
var ivReportImageNormal: ImageView = itemView.findViewById(R.id.ivReportImageNormal)
var tvReportLevelNormal: TextView = itemView.findViewById(R.id.tvReportLevelNormal)
var tvReportTimeNormal: TextView = itemView.findViewById(R.id.tvReportTimeNormal)
var tvReportTypeNormal: TextView = itemView.findViewById(R.id.tvReportTypeNormal)
var tvStatusSelect: TextView = itemView.findViewById(R.id.tvStatusSelect)
var ivReportImageOpen: ImageView = itemView.findViewById(R.id.ivReportImageOpen)
var tvReportLevelOpen: TextView = itemView.findViewById(R.id.tvReportLevelOpen)
var tvReportTimeOpen: TextView = itemView.findViewById(R.id.tvReportTimeOpen)
var tvReportTypeOpen: TextView = itemView.findViewById(R.id.tvReportTypeOpen)
var tvReportReasonOpen: TextView = itemView.findViewById(R.id.tvReportReasonOpen)
}
//运营平台
class MsgBoxOperation(itemView: View): RecyclerView.ViewHolder(itemView){
var ivOperationImageNormal: ImageView = itemView.findViewById(R.id.ivOperationImageNormal)
var tvOperationTitleNormal: TextView = itemView.findViewById(R.id.tvOperationTitleNormal)
var tvOperationContentNormal: TextView = itemView.findViewById(R.id.tvOperationContentNormal)
var tvOperationStatusSelect: TextView = itemView.findViewById(R.id.tvOperationStatusSelect)
var tvOperationTime: TextView = itemView.findViewById(R.id.tvOperationTime)
var ivOperationImageOpen: ImageView = itemView.findViewById(R.id.ivOperationImageOpen)
var tvOperationTitleOpen: TextView = itemView.findViewById(R.id.tvOperationTitleOpen)
var tvOperationContentOpen: TextView = itemView.findViewById(R.id.tvOperationContentOpen)
}
//Notice
class MsgBoxNotice(itemView: View): RecyclerView.ViewHolder(itemView){
var ivNoticeImage: ImageView = itemView.findViewById(R.id.ivNoticeImage)
var tvNoticeTitle: TextView = itemView.findViewById(R.id.tvNoticeTitle)
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)
}
}

View File

@@ -0,0 +1,125 @@
package com.mogo.eagle.core.function.hmi.ui.msgbox.adapter
import android.app.Activity
import android.os.CountDownTimer
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.mogo.eagle.core.data.enums.EventTypeEnum
import com.mogo.eagle.core.data.msgbox.MsgBoxBean
import com.mogo.eagle.core.data.msgbox.MsgBoxType
import com.mogo.eagle.core.data.msgbox.V2XMsg
import com.mogo.eagle.core.utilcode.mogo.glide.GlideApp
import com.mogo.eagle.core.data.notice.NoticeNormalData
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager
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.transform.GlideRoundedCornersTransform
import com.mogo.eagle.core.utilcode.util.TimeUtils
import com.mogo.eagle.core.utilcode.util.TimeUtils.getHourMinFormat
/**
* @author XuXinChao
* @description 乘客端消息盒子气泡视图RecyclerView适配器
* @since: 2022/11/25
*/
class PassengerMsgBoxBubbleAdapter(private val activity: Activity): RecyclerView.Adapter<RecyclerView.ViewHolder>() {
private var data: ArrayList<MsgBoxBean> ?= null
private val notice: Int = 1
private val v2x: Int = 2
var countDownTimer: CountDownTimer?=null
fun setData(data: ArrayList<MsgBoxBean>){
this.data = data
if(data.size>3){
data.removeAt(0)
}
notifyDataSetChanged()
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
if(viewType == notice){
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_passenger_msg_box_notice,parent,false)
return BubbleNoticeHolder(view)
}else{
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_passenger_msg_box_v2x,parent,false)
return BubbleV2XHolder(view)
}
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
if(holder is BubbleNoticeHolder){
data?.let {
val noticeNormalData = it[position].bean as NoticeNormalData
holder.tvPassengerNoticeTime.text = TimeUtils.millis2String(it[position].timestamp,getHourMinFormat())
holder.tvPassengerNoticeContent.text = noticeNormalData.content
GlideApp.with(activity).load(noticeNormalData.imageUrl).optionalTransform(
GlideRoundedCornersTransform(
20f,
GlideRoundedCornersTransform.CornerType.ALL
)
).into(holder.ivPassengerNoticeImage)
holder.tvPassengerNoticeCheck.setOnClickListener {
//云公告
CallerHmiManager.showNoticeNormalData(noticeNormalData)
}
}
}else if(holder is BubbleV2XHolder){
data?.let {
val v2XMsg = it[position].bean as V2XMsg
holder.tvPassengerV2XTime.text = TimeUtils.millis2String(it[position].timestamp,getHourMinFormat())
holder.tvPassengerV2XContent.text = v2XMsg.content
holder.ivPassengerV2XImage.setImageDrawable(activity.resources.getDrawable(
EventTypeEnum.getUpdateIconRes(v2XMsg.type)))
}
}
val msgBoxBean: MsgBoxBean = data!![position]
countDownTimer =object: CountDownTimer(CallerMsgBoxManager.getDismissTime(),1000){
override fun onTick(p0: Long) {
}
override fun onFinish() {
data?.remove(msgBoxBean)
notifyDataSetChanged()
// notifyItemRemoved(index)
// notifyItemRangeChanged(index,recordTypeEntity.size-index)
}
}
countDownTimer?.start()
}
override fun getItemCount() = data?.size ?: 0
override fun getItemViewType(position: Int): Int {
if(data!![position].type == MsgBoxType.NOTICE){
return notice
}else{
return v2x
}
}
//Notice
class BubbleNoticeHolder(itemView: View): RecyclerView.ViewHolder(itemView){
var ivPassengerNoticeImage: ImageView = itemView.findViewById(R.id.ivPassengerNoticeImage)
var tvPassengerNoticeTitle: TextView = itemView.findViewById(R.id.tvPassengerNoticeTitle)
var tvPassengerNoticeContent: TextView = itemView.findViewById(R.id.tvPassengerNoticeContent)
var tvPassengerNoticeCheck: TextView = itemView.findViewById(R.id.tvPassengerNoticeCheck)
var tvPassengerNoticeTime: TextView = itemView.findViewById(R.id.tvPassengerNoticeTime)
}
//OBU、V2X
class BubbleV2XHolder(itemView: View): RecyclerView.ViewHolder(itemView){
var ivPassengerV2XImage: ImageView = itemView.findViewById(R.id.ivPassengerV2XImage)
var tvPassengerV2XTime: TextView = itemView.findViewById(R.id.tvPassengerV2XTime)
var tvPassengerV2XContent: TextView = itemView.findViewById(R.id.tvPassengerV2XContent)
}
}

View File

@@ -0,0 +1,103 @@
package com.mogo.eagle.core.function.hmi.ui.msgbox.adapter
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.recyclerview.widget.RecyclerView
import com.mogo.eagle.core.data.enums.EventTypeEnum
import com.mogo.eagle.core.data.msgbox.MsgBoxBean
import com.mogo.eagle.core.data.msgbox.MsgBoxType
import com.mogo.eagle.core.data.msgbox.V2XMsg
import com.mogo.eagle.core.data.notice.NoticeNormalData
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.TimeUtils
import com.mogo.eagle.core.utilcode.util.TimeUtils.getHourMinFormat
/**
* @author XuXinChao
* @description 乘客端消息盒子列表视图RecyclerView适配器
* @since: 2022/11/29
*/
class PassengerMsgBoxListAdapter(private val activity: Activity): RecyclerView.Adapter<RecyclerView.ViewHolder>(){
private var data: List<MsgBoxBean> ?= null
private val notice: Int = 1
private val v2x: Int = 2
fun setData(data: List<MsgBoxBean>){
this.data = data
notifyDataSetChanged()
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return if(viewType == notice){
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_passenger_msg_list_notice,parent,false)
ListNoticeHolder(view)
}else{
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_passenger_msg_list_v2x,parent,false)
ListV2XHolder(view)
}
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
if(holder is ListNoticeHolder){
data?.let {
val noticeNormalData = it[position].bean as NoticeNormalData
holder.tvPassengerNoticeTime.text = TimeUtils.millis2String(it[position].timestamp,getHourMinFormat())
holder.tvPassengerNoticeContent.text = noticeNormalData.content
GlideApp.with(activity).load(noticeNormalData.imageUrl).optionalTransform(
GlideRoundedCornersTransform(
20f,
GlideRoundedCornersTransform.CornerType.ALL
)
).into(holder.ivPassengerNoticeImage)
holder.tvPassengerNoticeCheck.setOnClickListener {
//云公告
CallerHmiManager.showNoticeNormalData(noticeNormalData)
}
}
}else if(holder is ListV2XHolder){
data?.let {
val v2XMsg = it[position].bean as V2XMsg
holder.tvPassengerV2XTime.text = TimeUtils.millis2String(it[position].timestamp,getHourMinFormat())
holder.tvPassengerV2XContent.text = v2XMsg.content
holder.ivPassengerV2XImage.setImageDrawable(activity.resources.getDrawable(
EventTypeEnum.getUpdateIconRes(v2XMsg.type)))
}
}
}
override fun getItemCount() = data?.size ?: 0
override fun getItemViewType(position: Int): Int {
if(data!![position].type == MsgBoxType.NOTICE){
return notice
}else{
return v2x
}
}
//Notice
class ListNoticeHolder(itemView: View): RecyclerView.ViewHolder(itemView){
var ivPassengerNoticeImage: ImageView = itemView.findViewById(R.id.ivPassengerNoticeImage)
var tvPassengerNoticeTitle: TextView = itemView.findViewById(R.id.tvPassengerNoticeTitle)
var tvPassengerNoticeContent: TextView = itemView.findViewById(R.id.tvPassengerNoticeContent)
var tvPassengerNoticeCheck: TextView = itemView.findViewById(R.id.tvPassengerNoticeCheck)
var tvPassengerNoticeTime: TextView = itemView.findViewById(R.id.tvPassengerNoticeTime)
}
//OBU、V2X
class ListV2XHolder(itemView: View): RecyclerView.ViewHolder(itemView){
var ivPassengerV2XImage: ImageView = itemView.findViewById(R.id.ivPassengerV2XImage)
var tvPassengerV2XTime: TextView = itemView.findViewById(R.id.tvPassengerV2XTime)
var tvPassengerV2XContent: TextView = itemView.findViewById(R.id.tvPassengerV2XContent)
}
}

View File

@@ -77,6 +77,7 @@ import com.mogo.map.MogoMapUIController
import com.mogo.map.uicontroller.VisualAngleMode
import com.mogo.map.uicontroller.VisualAngleMode.*
import com.mogo.eagle.core.function.business.routeoverlay.*
import com.mogo.eagle.core.function.v2x.vip.VipCarManager
import com.zhidao.easysocket.utils.L
import com.zhidao.support.adas.high.other.permission.BackgrounderPermission
import com.zhjt.mogo_core_function_devatools.env.*
@@ -598,6 +599,7 @@ class DebugSettingView @JvmOverloads constructor(
tbIsDemoMode.visibility = View.GONE
}
// 雨天模式,上一次勾选的数据
tbIsRainMode.isChecked = FunctionBuildConfig.isRainMode
//雨天模式

View File

@@ -69,7 +69,6 @@ public abstract class MainMoGoApplication extends AbsMogoApplication {
initCrashConfig();
initLogConfig();
initTipToast();
AIAssist.getInstance(this);
initModules();
if (DebugConfig.isDebug()) {
initKoom();

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 269 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 269 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#30B8FF"/>
<corners android:radius="4dp"/>
</shape>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#29D8D8D8"/>
<corners android:radius="22px"/>
</shape>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#5074B3"/>
<size android:height="1dp" />
</shape>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/icon_msg_box_close" android:state_checked="false" />
<item android:drawable="@drawable/icon_msg_box_open" android:state_checked="true" />
</selector>

View File

@@ -102,6 +102,8 @@
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<View
android:id="@+id/viewDemoModeSwitch"
android:layout_width="120dp"
@@ -167,7 +169,6 @@
android:layout_height="120dp"
android:layout_marginTop="30dp"
android:layout_marginEnd="40dp"
android:background="@drawable/bg_waring_limiting_velocity"
android:elevation="@dimen/dp_10"
android:gravity="center"
@@ -181,6 +182,83 @@
app:layout_goneMarginTop="40dp"
tools:visibility="gone" />
<!--消息盒子选择入口-->
<CheckBox
android:id="@+id/cbMsgBoxDriver"
android:layout_width="150dp"
android:layout_height="150dp"
app:layout_constraintTop_toTopOf="@id/viewLimitingVelocity"
app:layout_constraintBottom_toBottomOf="@id/viewLimitingVelocity"
app:layout_constraintRight_toLeftOf="@id/viewLimitingVelocity"
android:button="@null"
android:background="@drawable/selector_msg_box"
android:visibility="gone"
/>
<CheckBox
android:id="@+id/cbMsgBoxPassenger"
android:layout_width="150dp"
android:layout_height="150dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginStart="300dp"
android:layout_marginBottom="30px"
android:button="@null"
android:background="@drawable/selector_msg_box"
android:visibility="gone"
/>
<View
android:id="@+id/MsgBoxTipView"
android:layout_width="8dp"
android:layout_height="8dp"
android:background="@drawable/version_upgrade_tips_background"
android:translationZ="30dp"
app:layout_constraintCircle="@id/cbMsgBoxDriver"
app:layout_constraintCircleAngle="40"
app:layout_constraintCircleRadius="32dp"
tools:ignore="MissingConstraints"
android:visibility="gone"
/>
<com.mogo.eagle.core.function.hmi.ui.msgbox.DriverMsgBoxListView
android:id="@+id/viewDriverMsgBoxList"
android:layout_width="864px"
android:layout_height="746px"
app:layout_constraintTop_toBottomOf="@id/cbMsgBoxDriver"
app:layout_constraintRight_toRightOf="@id/viewLimitingVelocity"
android:visibility="gone"
/>
<com.mogo.eagle.core.function.hmi.ui.msgbox.DriverMsgBoxBubbleView
android:id="@+id/viewDriverMsgBoxBubble"
android:layout_width="864px"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/cbMsgBoxDriver"
app:layout_constraintRight_toRightOf="@id/viewLimitingVelocity"
android:visibility="gone"
/>
<com.mogo.eagle.core.function.hmi.ui.msgbox.PassengerMsgBoxBubbleView
android:id="@+id/viewPassengerMsgBoxBubble"
android:layout_width="864px"
android:layout_height="wrap_content"
app:layout_constraintBottom_toTopOf="@id/cbMsgBoxPassenger"
app:layout_constraintLeft_toLeftOf="@id/cbMsgBoxPassenger"
app:layout_constraintRight_toRightOf="@id/cbMsgBoxPassenger"
android:visibility="gone"
/>
<com.mogo.eagle.core.function.hmi.ui.msgbox.PassengerMsgBoxListView
android:id="@+id/viewPassengerMsgBoxList"
android:layout_width="650px"
android:layout_height="750px"
app:layout_constraintBottom_toTopOf="@id/cbMsgBoxPassenger"
app:layout_constraintLeft_toLeftOf="@id/cbMsgBoxPassenger"
app:layout_constraintRight_toRightOf="@id/cbMsgBoxPassenger"
android:visibility="gone"
/>
<!--左右转向灯-->
<com.mogo.eagle.core.function.hmi.ui.turnlight.TurnLightViewStatus
android:id="@+id/turnLightView"

View File

@@ -0,0 +1,76 @@
<?xml version="1.0" encoding="utf-8"?>
<com.mogo.eagle.core.widget.RoundConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layoutBadCase"
android:layout_width="804px"
android:layout_height="160px"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="#1B2966"
app:roundLayoutRadius="24px"
android:layout_gravity="center_horizontal"
android:layout_marginStart="30px"
android:layout_marginEnd="30px"
android:layout_marginTop="5px"
android:layout_marginBottom="5px"
android:clickable="true"
>
<ImageView
android:id="@+id/ivBadCaseImage"
android:layout_width="110px"
android:layout_height="110px"
android:src="@drawable/icon_bad_case"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
android:layout_marginStart="25px"
/>
<TextView
android:id="@+id/tvRecordTip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/ivBadCaseImage"
app:layout_constraintLeft_toRightOf="@id/ivBadCaseImage"
android:text="录包提醒"
android:textColor="#FFFFFFFF"
android:textSize="32px"
android:layout_marginStart="25px"
/>
<TextView
android:id="@+id/tvBagRecordTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="@id/ivBadCaseImage"
app:layout_constraintLeft_toRightOf="@id/ivBadCaseImage"
android:layout_marginStart="25px"
android:textColor="#B3FFFFFF"
android:textSize="30px"
/>
<TextView
android:id="@+id/tvBagReceiveTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="@id/tvRecordTip"
android:textColor="#80FFFFFF"
android:textSize="24px"
android:layout_marginEnd="15px"
/>
<TextView
android:id="@+id/tvRecordCheck"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="@id/tvBagRecordTime"
app:layout_constraintBottom_toBottomOf="@id/tvBagRecordTime"
android:layout_marginEnd="15px"
android:text="查看"
android:textColor="#FFFFFFFF"
android:textSize="30px"
/>
</com.mogo.eagle.core.widget.RoundConstraintLayout>

View File

@@ -0,0 +1,151 @@
<?xml version="1.0" encoding="utf-8"?>
<com.mogo.eagle.core.widget.RoundConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="804px"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="#1B2966"
app:roundLayoutRadius="24px"
android:layout_gravity="center_horizontal"
android:layout_marginStart="30px"
android:layout_marginEnd="30px"
android:layout_marginTop="5px"
android:layout_marginBottom="5px"
>
<ImageView
android:id="@+id/ivReportImageNormal"
android:layout_width="110px"
android:layout_height="110px"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
android:layout_marginTop="25px"
android:layout_marginBottom="25px"
android:layout_marginStart="25px"
/>
<TextView
android:id="@+id/tvReportLevelNormal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toRightOf="@id/ivReportImageNormal"
android:layout_marginTop="20px"
android:layout_marginStart="25px"
android:textColor="#FFFFFFFF"
android:textSize="32px"
/>
<TextView
android:id="@+id/tvReportTimeNormal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/tvReportLevelNormal"
app:layout_constraintLeft_toLeftOf="@id/tvReportLevelNormal"
android:textColor="#B3FFFFFF"
android:textSize="28px"
android:layout_marginTop="10px"
/>
<TextView
android:id="@+id/tvReportTypeNormal"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/tvReportTimeNormal"
app:layout_constraintLeft_toLeftOf="@id/tvReportTimeNormal"
app:layout_constraintRight_toRightOf="@id/tvStatusSelect"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginTop="10px"
android:layout_marginBottom="10px"
android:textColor="#B3FFFFFF"
android:gravity="start"
android:textSize="28px"
android:maxLines="1"
android:ellipsize="end"
/>
<TextView
android:id="@+id/tvStatusSelect"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="折叠"
android:textColor="#FFFFFFFF"
android:textSize="24px"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:layout_marginTop="25px"
android:layout_marginEnd="25px"
android:background="@drawable/bg_msg_status_select"
android:drawableStart="@drawable/icon_msg_open"
android:drawablePadding="10px"
android:paddingStart="15px"
android:paddingEnd="15px"
android:paddingTop="5px"
android:paddingBottom="5px"
/>
<ImageView
android:id="@+id/ivReportImageOpen"
android:layout_width="44px"
android:layout_height="44px"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
android:layout_marginTop="20px"
android:layout_marginStart="20px"
android:visibility="gone"
/>
<TextView
android:id="@+id/tvReportLevelOpen"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/ivReportImageOpen"
app:layout_constraintBottom_toBottomOf="@id/ivReportImageOpen"
app:layout_constraintLeft_toRightOf="@id/ivReportImageOpen"
android:textColor="#FFFFFFFF"
android:textSize="32px"
android:layout_marginStart="20px"
android:visibility="gone"
/>
<TextView
android:id="@+id/tvReportTimeOpen"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/ivReportImageOpen"
app:layout_constraintLeft_toLeftOf="@id/ivReportImageOpen"
android:layout_marginTop="10px"
android:textColor="#B3FFFFFF"
android:textSize="28px"
android:visibility="gone"
/>
<TextView
android:id="@+id/tvReportTypeOpen"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/tvReportTimeOpen"
app:layout_constraintLeft_toLeftOf="@id/tvReportTimeOpen"
android:layout_marginTop="10px"
android:textColor="#B3FFFFFF"
android:textSize="28px"
android:visibility="gone"
/>
<TextView
android:id="@+id/tvReportReasonOpen"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/tvReportTypeOpen"
app:layout_constraintLeft_toLeftOf="@id/tvReportTypeOpen"
app:layout_constraintRight_toRightOf="@id/tvStatusSelect"
app:layout_constraintBottom_toBottomOf="parent"
android:gravity="start"
android:layout_marginTop="10px"
android:layout_marginBottom="10px"
android:textColor="#B3FFFFFF"
android:textSize="28px"
android:visibility="gone"
/>
</com.mogo.eagle.core.widget.RoundConstraintLayout>

View File

@@ -0,0 +1,78 @@
<?xml version="1.0" encoding="utf-8"?>
<com.mogo.eagle.core.widget.RoundConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="804px"
android:layout_height="160px"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="#1B2966"
app:roundLayoutRadius="24px"
android:layout_gravity="center_horizontal"
android:layout_marginStart="30px"
android:layout_marginEnd="30px"
android:layout_marginTop="5px"
android:layout_marginBottom="5px"
>
<ImageView
android:id="@+id/ivNoticeImage"
android:layout_width="140px"
android:layout_height="130px"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
android:layout_marginStart="15px"
android:src="@drawable/icon_notice_default"
/>
<TextView
android:id="@+id/tvNoticeTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="官方公告"
android:textColor="#FFFFFFFF"
android:textSize="32px"
app:layout_constraintTop_toTopOf="@id/ivNoticeImage"
app:layout_constraintLeft_toRightOf="@id/ivNoticeImage"
android:layout_marginStart="15px"
/>
<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:layout_marginEnd="25px"
android:textColor="#80FFFFFF"
android:textSize="24px"
/>
<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_marginEnd="25px"
android:layout_marginBottom="20px"
android:text="查看"
android:textColor="#FFFFFFFF"
android:textSize="30px"
/>
<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="#B3FFFFFF"
android:textSize="28px"
/>
</com.mogo.eagle.core.widget.RoundConstraintLayout>

View File

@@ -0,0 +1,128 @@
<?xml version="1.0" encoding="utf-8"?>
<com.mogo.eagle.core.widget.RoundConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="804px"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="#1B2966"
app:roundLayoutRadius="24px"
android:layout_gravity="center_horizontal"
android:layout_marginStart="30px"
android:layout_marginEnd="30px"
android:layout_marginTop="5px"
android:layout_marginBottom="5px"
>
<ImageView
android:id="@+id/ivOperationImageNormal"
android:layout_width="110px"
android:layout_height="110px"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
android:layout_marginTop="25px"
android:layout_marginBottom="25px"
android:layout_marginStart="25px"
android:src="@drawable/icon_msg_box_operation"
/>
<TextView
android:id="@+id/tvOperationTitleNormal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/ivOperationImageNormal"
app:layout_constraintLeft_toRightOf="@id/ivOperationImageNormal"
android:text="运营平台"
android:textColor="#FFFFFFFF"
android:textSize="32px"
android:layout_marginStart="25px"
/>
<TextView
android:id="@+id/tvOperationContentNormal"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/tvOperationTitleNormal"
app:layout_constraintLeft_toLeftOf="@id/tvOperationTitleNormal"
app:layout_constraintRight_toRightOf="@id/tvOperationStatusSelect"
android:layout_marginEnd="25px"
android:textColor="#B3FFFFFF"
android:gravity="start"
android:textSize="28px"
android:maxLines="2"
android:ellipsize="end"
/>
<TextView
android:id="@+id/tvOperationStatusSelect"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="折叠"
android:textColor="#FFFFFFFF"
android:textSize="24px"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:layout_marginTop="25px"
android:layout_marginEnd="25px"
android:background="@drawable/bg_msg_status_select"
android:drawableStart="@drawable/icon_msg_open"
android:drawablePadding="10px"
android:paddingStart="15px"
android:paddingEnd="15px"
android:paddingTop="5px"
android:paddingBottom="5px"
/>
<TextView
android:id="@+id/tvOperationTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/tvOperationStatusSelect"
app:layout_constraintBottom_toBottomOf="@id/tvOperationStatusSelect"
app:layout_constraintRight_toLeftOf="@id/tvOperationStatusSelect"
android:layout_marginEnd="20px"
android:textColor="#80FFFFFF"
android:textSize="24px"
/>
<ImageView
android:id="@+id/ivOperationImageOpen"
android:layout_width="44px"
android:layout_height="44px"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
android:layout_marginTop="25px"
android:layout_marginStart="25px"
android:src="@drawable/icon_msg_box_operation"
android:visibility="gone"
/>
<TextView
android:id="@+id/tvOperationTitleOpen"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/ivOperationImageOpen"
app:layout_constraintBottom_toBottomOf="@id/ivOperationImageOpen"
app:layout_constraintLeft_toRightOf="@id/ivOperationImageOpen"
android:text="运营平台"
android:textColor="#FFFFFFFF"
android:textSize="32px"
android:layout_marginStart="20px"
android:visibility="gone"
/>
<TextView
android:id="@+id/tvOperationContentOpen"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/ivOperationImageOpen"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="@id/ivOperationImageOpen"
app:layout_constraintRight_toRightOf="@id/tvOperationStatusSelect"
android:gravity="start"
android:layout_margin="20px"
android:textColor="#B3FFFFFF"
android:textSize="28px"
android:visibility="gone"
/>
</com.mogo.eagle.core.widget.RoundConstraintLayout>

View File

@@ -0,0 +1,50 @@
<?xml version="1.0" encoding="utf-8"?>
<com.mogo.eagle.core.widget.RoundConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="804px"
android:layout_height="160px"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="#1B2966"
app:roundLayoutRadius="24px"
android:layout_gravity="center_horizontal"
android:layout_marginStart="30px"
android:layout_marginEnd="30px"
android:layout_marginTop="5px"
android:layout_marginBottom="5px">
<ImageView
android:id="@+id/ivV2XImage"
android:layout_width="110px"
android:layout_height="110px"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
android:layout_margin="25px"/>
<TextView
android:id="@+id/tvV2XTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/ivV2XImage"
app:layout_constraintRight_toRightOf="parent"
android:layout_marginEnd="25px"
android:textColor="#80FFFFFF"
android:textSize="24px"
/>
<TextView
android:id="@+id/tvV2XContent"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintLeft_toRightOf="@id/ivV2XImage"
app:layout_constraintRight_toRightOf="@id/tvV2XTime"
app:layout_constraintTop_toBottomOf="@id/tvV2XTime"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginStart="25px"
android:layout_marginBottom="25px"
android:textColor="#FFFFFFFF"
android:textSize="32px"
android:maxLines="1"
android:ellipsize="end"
/>
</com.mogo.eagle.core.widget.RoundConstraintLayout>

View File

@@ -0,0 +1,65 @@
<?xml version="1.0" encoding="utf-8"?>
<com.mogo.eagle.core.widget.RoundConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="804px"
android:layout_height="160px"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="#1B2966"
app:roundLayoutRadius="24px"
android:layout_gravity="center_horizontal"
android:layout_marginStart="30px"
android:layout_marginEnd="30px"
android:layout_marginTop="5px"
android:layout_marginBottom="5px">
<ImageView
android:id="@+id/ivBubbleOperationImage"
android:layout_width="110px"
android:layout_height="110px"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
android:layout_marginStart="25px"
android:src="@drawable/icon_msg_box_operation"
/>
<TextView
android:id="@+id/tvBubbleOperationTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toRightOf="@id/ivBubbleOperationImage"
android:layout_marginTop="20px"
android:layout_marginStart="25px"
android:textColor="#FFFFFFFF"
android:textSize="32px"
android:text="运营平台"
/>
<TextView
android:id="@+id/tvBubbleOperationTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/tvBubbleOperationTitle"
app:layout_constraintBottom_toBottomOf="@id/tvBubbleOperationTitle"
app:layout_constraintRight_toRightOf="parent"
android:layout_marginEnd="20px"
android:textColor="#80FFFFFF"
android:textSize="24px"
/>
<TextView
android:id="@+id/tvBubbleOperationContent"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="@id/tvBubbleOperationTitle"
app:layout_constraintRight_toRightOf="@id/tvBubbleOperationTime"
app:layout_constraintTop_toBottomOf="@id/tvBubbleOperationTitle"
android:layout_marginTop="20px"
android:gravity="start"
android:maxLines="2"
android:ellipsize="end"
android:textColor="#B3FFFFFF"
android:textSize="28px"
/>
</com.mogo.eagle.core.widget.RoundConstraintLayout>

View File

@@ -0,0 +1,73 @@
<?xml version="1.0" encoding="utf-8"?>
<com.mogo.eagle.core.widget.RoundConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="804px"
android:layout_height="160px"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="#1B2966"
app:roundLayoutRadius="24px"
android:layout_gravity="center_horizontal"
android:layout_marginStart="30px"
android:layout_marginEnd="30px"
android:layout_marginTop="5px"
android:layout_marginBottom="5px"
>
<ImageView
android:id="@+id/ivBubbleReportImage"
android:layout_width="110px"
android:layout_height="110px"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
android:layout_marginStart="25px"
android:src="@drawable/icon_report_error_normal"
/>
<TextView
android:id="@+id/tvBubbleReportTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toRightOf="@id/ivBubbleReportImage"
android:layout_marginTop="20px"
android:layout_marginStart="25px"
android:textColor="#FFFFFFFF"
android:textSize="32px"
android:text="Error"
/>
<TextView
android:id="@+id/tvBubbleReportTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/tvBubbleReportTitle"
app:layout_constraintLeft_toLeftOf="@id/tvBubbleReportTitle"
android:layout_marginTop="20px"
android:textColor="#B3FFFFFF"
android:textSize="28px"
/>
<TextView
android:id="@+id/tvBubbleReportType"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/tvBubbleReportTime"
app:layout_constraintLeft_toLeftOf="@id/tvBubbleReportTime"
android:layout_marginTop="15px"
android:textColor="#B3FFFFFF"
android:textSize="28px"
/>
<TextView
android:id="@+id/tvBubbleReceiveTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="@id/tvBubbleReportTitle"
app:layout_constraintBottom_toBottomOf="@id/tvBubbleReportTitle"
android:layout_marginEnd="25px"
android:textColor="#80FFFFFF"
android:textSize="24px"
/>
</com.mogo.eagle.core.widget.RoundConstraintLayout>

View File

@@ -0,0 +1,84 @@
<?xml version="1.0" encoding="utf-8"?>
<com.mogo.eagle.core.widget.RoundConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="650px"
android:layout_height="160px"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="#465878"
app:roundLayoutRadius="24px"
android:layout_marginTop="10px"
android:layout_marginBottom="10px"
>
<ImageView
android:id="@+id/ivPassengerNoticeImage"
android:layout_width="160px"
android:layout_height="160px"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
android:src="@drawable/icon_passenger_operation"
/>
<TextView
android:id="@+id/tvPassengerNoticeTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="官方公告"
android:textColor="#FFFFFFFF"
android:textSize="36px"
android:layout_marginStart="20px"
app:layout_constraintLeft_toRightOf="@id/ivPassengerNoticeImage"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@id/tvPassengerNoticeContent"
/>
<TextView
android:id="@+id/tvPassengerNoticeContent"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textColor="#FFFFFFFF"
android:textSize="28px"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="@id/tvPassengerNoticeTitle"
app:layout_constraintTop_toBottomOf="@id/tvPassengerNoticeTitle"
app:layout_constraintRight_toRightOf="@id/tvPassengerNoticeTime"
android:gravity="start"
android:maxLines="1"
android:ellipsize="end"
/>
<TextView
android:id="@+id/tvPassengerNoticeCheck"
android:layout_width="140px"
android:layout_height="160px"
android:text="查 看"
android:textColor="#FF84D4FF"
android:textSize="28px"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:gravity="center"
/>
<View
android:layout_width="1px"
android:layout_height="80px"
android:background="#5E70A6"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintRight_toLeftOf="@id/tvPassengerNoticeCheck"
/>
<TextView
android:id="@+id/tvPassengerNoticeTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFFFFFFF"
android:textSize="26px"
app:layout_constraintTop_toTopOf="@id/tvPassengerNoticeTitle"
app:layout_constraintBottom_toBottomOf="@id/tvPassengerNoticeTitle"
app:layout_constraintRight_toLeftOf="@id/tvPassengerNoticeCheck"
android:layout_marginEnd="20px"
/>
</com.mogo.eagle.core.widget.RoundConstraintLayout>

View File

@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<com.mogo.eagle.core.widget.RoundConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="650px"
android:layout_height="160px"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="#465878"
app:roundLayoutRadius="24px">
<ImageView
android:id="@+id/ivPassengerV2XImage"
android:layout_width="120px"
android:layout_height="120px"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
android:layout_marginStart="20px"
/>
<TextView
android:id="@+id/tvPassengerV2XTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:textColor="#FFFFFFFF"
android:textSize="26px"
android:layout_marginEnd="20px"
/>
<TextView
android:id="@+id/tvPassengerV2XContent"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toRightOf="@id/ivPassengerV2XImage"
app:layout_constraintRight_toLeftOf="@id/tvPassengerV2XTime"
android:gravity="start"
android:maxLines="1"
android:ellipsize="end"
android:textColor="#FFFFFFFF"
android:textSize="36px"
/>
</com.mogo.eagle.core.widget.RoundConstraintLayout>

View File

@@ -0,0 +1,79 @@
<?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="150px"
xmlns:app="http://schemas.android.com/apk/res-auto">
<ImageView
android:id="@+id/ivPassengerNoticeImage"
android:layout_width="96px"
android:layout_height="96px"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
android:src="@drawable/icon_passenger_operation"
/>
<TextView
android:id="@+id/tvPassengerNoticeTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="官方公告"
android:textColor="#FFFFFFFF"
android:textSize="36px"
android:layout_marginStart="20px"
app:layout_constraintLeft_toRightOf="@id/ivPassengerNoticeImage"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@id/tvPassengerNoticeContent"
/>
<TextView
android:id="@+id/tvPassengerNoticeContent"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textColor="#FFFFFFFF"
android:textSize="28px"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="@id/tvPassengerNoticeTitle"
app:layout_constraintTop_toBottomOf="@id/tvPassengerNoticeTitle"
app:layout_constraintRight_toRightOf="@id/tvPassengerNoticeTime"
android:gravity="start"
android:maxLines="1"
android:ellipsize="end"
/>
<TextView
android:id="@+id/tvPassengerNoticeCheck"
android:layout_width="140px"
android:layout_height="150px"
android:text="查 看"
android:textColor="#FF84D4FF"
android:textSize="28px"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:gravity="center"
/>
<View
android:layout_width="1px"
android:layout_height="80px"
android:background="#5E70A6"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintRight_toLeftOf="@id/tvPassengerNoticeCheck"
/>
<TextView
android:id="@+id/tvPassengerNoticeTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFFFFFFF"
android:textSize="26px"
app:layout_constraintTop_toTopOf="@id/tvPassengerNoticeTitle"
app:layout_constraintBottom_toBottomOf="@id/tvPassengerNoticeTitle"
app:layout_constraintRight_toLeftOf="@id/tvPassengerNoticeCheck"
android:layout_marginEnd="20px"
/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,42 @@
<?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="150px"
xmlns:app="http://schemas.android.com/apk/res-auto">
<ImageView
android:id="@+id/ivPassengerV2XImage"
android:layout_width="96px"
android:layout_height="96px"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
/>
<TextView
android:id="@+id/tvPassengerV2XTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:textColor="#FFFFFFFF"
android:textSize="26px"
/>
<TextView
android:id="@+id/tvPassengerV2XContent"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toRightOf="@id/ivPassengerV2XImage"
app:layout_constraintRight_toLeftOf="@id/tvPassengerV2XTime"
android:gravity="start"
android:maxLines="1"
android:ellipsize="end"
android:textColor="#FFFFFFFF"
android:textSize="36px"
/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<com.mogo.eagle.core.widget.RoundConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="864px"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="#3C4783"
app:roundLayoutRadius="40px">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvBubbleList"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</com.mogo.eagle.core.widget.RoundConstraintLayout>

View File

@@ -0,0 +1,89 @@
<?xml version="1.0" encoding="utf-8"?>
<com.mogo.eagle.core.widget.RoundConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="864px"
android:layout_height="746px"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="#3C4783"
app:roundLayoutRadius="40px">
<TextView
android:id="@+id/tvMsgNotice"
android:layout_width="288px"
android:layout_height="90px"
android:text="通知"
android:textColor="@color/msg_box_title_color"
android:textSize="38px"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
android:gravity="center"
/>
<View
android:id="@+id/viewNoticeDivider"
android:layout_width="62.7px"
android:layout_height="5px"
android:background="@drawable/bg_msg_box_divider"
app:layout_constraintLeft_toLeftOf="@id/tvMsgNotice"
app:layout_constraintRight_toRightOf="@id/tvMsgNotice"
app:layout_constraintBottom_toBottomOf="@id/tvMsgNotice"
/>
<TextView
android:id="@+id/tvMsgIpcReport"
android:layout_width="288px"
android:layout_height="90px"
android:text="车辆系统信息"
android:textColor="#FFFFFFFF"
android:textSize="38px"
android:gravity="center"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toRightOf="@id/tvMsgNotice"
app:layout_constraintRight_toLeftOf="@id/tvMsgBadCase"
/>
<View
android:id="@+id/viewIpcReportDivider"
android:layout_width="62.7px"
android:layout_height="5px"
android:background="@drawable/bg_msg_box_divider"
app:layout_constraintLeft_toLeftOf="@id/tvMsgIpcReport"
app:layout_constraintRight_toRightOf="@id/tvMsgIpcReport"
app:layout_constraintBottom_toBottomOf="@id/tvMsgIpcReport"
android:visibility="gone"
/>
<TextView
android:id="@+id/tvMsgBadCase"
android:layout_width="288px"
android:layout_height="90px"
android:text="录包"
android:textColor="#FFFFFFFF"
android:textSize="38px"
android:gravity="center"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintRight_toRightOf="parent"
/>
<View
android:id="@+id/viewBadCaseDivider"
android:layout_width="62.7px"
android:layout_height="5px"
android:background="@drawable/bg_msg_box_divider"
app:layout_constraintLeft_toLeftOf="@id/tvMsgBadCase"
app:layout_constraintRight_toRightOf="@id/tvMsgBadCase"
app:layout_constraintBottom_toBottomOf="@id/tvMsgBadCase"
android:visibility="gone"
/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvMsgBoxList"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintTop_toBottomOf="@id/tvMsgIpcReport"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginTop="20px"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
/>
</com.mogo.eagle.core.widget.RoundConstraintLayout>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.recyclerview.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/rvPassengerBubbleList"
android:layout_width="650px"
android:layout_height="wrap_content"
>
</androidx.recyclerview.widget.RecyclerView>

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<com.mogo.eagle.core.widget.RoundConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="650px"
android:layout_height="750px"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="#31486E"
app:roundLayoutRadius="40px">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvPassengerList"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:layout_marginStart="20px"
android:layout_marginEnd="20px"
/>
</com.mogo.eagle.core.widget.RoundConstraintLayout>

View File

@@ -123,8 +123,8 @@
android:padding="@dimen/dp_20"
android:background="@drawable/radio_button_normal_background_right"
android:textColor="#000"
android:textOff="关闭OBU"
android:textOn="开启OBU"
android:textOff="开启OBU"
android:textOn="关闭OBU"
android:textSize="@dimen/dp_24"
app:layout_constraintTop_toBottomOf="@id/tbRainMode"
/>

View File

@@ -10,6 +10,8 @@
<color name="notice_dialog_back">#3B4577</color>
<color name="notice_video_progressbar_loading_color">#256BFF</color>
<color name="msg_box_title_color">#FF1BB7FF</color>
<color name="colorPrimary">#6200EE</color>
<color name="colorPrimaryDark">#3700B3</color>
<color name="colorAccent">#03DAC5</color>