From 0a10c1876c768af00b417910649cc2f40ed91587 Mon Sep 17 00:00:00 2001 From: xuxinchao Date: Tue, 31 Jan 2023 16:56:57 +0800 Subject: [PATCH] =?UTF-8?q?[Opt3.0]=E6=B6=88=E6=81=AF=E7=9B=92=E5=AD=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../passenger/model/TaxiPassengerModel.java | 18 + .../core/function/hmi/ui/MoGoHmiFragment.kt | 52 +-- .../hmi/ui/msgbox/DriverMsgBoxButtonView.kt | 33 ++ .../hmi/ui/msgbox/DriverMsgBoxListView.kt | 12 +- .../ui/msgbox/PassengerMsgBoxButtonView.kt | 33 ++ .../adapter/DriverMsgBoxBubbleAdapter.kt | 178 ++++--- .../msgbox/adapter/DriverMsgBoxListAdapter.kt | 437 ++++++++++-------- .../adapter/PassengerMsgBoxBubbleAdapter.kt | 139 +++--- .../adapter/PassengerMsgBoxListAdapter.kt | 134 +++--- .../main/res/layout/item_msg_box_summary.xml | 64 +++ .../res/layout/item_msg_bubble_summary.xml | 62 +++ .../layout/item_passenger_msg_box_summary.xml | 83 ++++ .../item_passenger_msg_list_summary.xml | 78 ++++ .../res/layout/view_driver_msg_box_button.xml | 34 ++ .../layout/view_passenger_msg_box_button.xml | 31 ++ .../api/msgbox/IMsgBoxEventListener.kt | 9 + .../CallerMsgBoxEventListenerManager.kt | 30 ++ 17 files changed, 1007 insertions(+), 420 deletions(-) create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/DriverMsgBoxButtonView.kt create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/PassengerMsgBoxButtonView.kt create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_box_summary.xml create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_bubble_summary.xml create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_passenger_msg_box_summary.xml create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_passenger_msg_list_summary.xml create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_driver_msg_box_button.xml create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_passenger_msg_box_button.xml create mode 100644 core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/msgbox/IMsgBoxEventListener.kt create mode 100644 core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/msgbox/CallerMsgBoxEventListenerManager.kt diff --git a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.java b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.java index d59f010623..c8c5c06ab6 100644 --- a/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.java +++ b/OCH/mogo-och-taxi-passenger/src/main/java/com/mogo/och/taxi/passenger/model/TaxiPassengerModel.java @@ -29,11 +29,13 @@ import com.mogo.eagle.core.data.map.MogoLocation; import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener; import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationGCJ02Listener; import com.mogo.eagle.core.function.api.autopilot.IMoGoPlanningRottingListener; +import com.mogo.eagle.core.function.api.msgbox.IMsgBoxEventListener; import com.mogo.eagle.core.function.api.v2x.ILimitingVelocityListener; import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotManager; import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager; import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ20ListenerManager; import com.mogo.eagle.core.function.call.autopilot.CallerPlanningRottingListenerManager; +import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxEventListenerManager; import com.mogo.eagle.core.function.call.v2x.CallerLimitingVelocityListenerManager; import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; @@ -66,6 +68,7 @@ import com.mogo.och.taxi.passenger.callback.ITaxiPassengerVeloctityCallback; import com.mogo.och.taxi.passenger.constant.TaxiPassengerConst; import com.mogo.och.taxi.passenger.constant.TaxiPassengerOrderStatusEnum; import com.mogo.och.taxi.passenger.network.TaxiPassengerServiceManager; +import com.mogo.och.taxi.passenger.ui.leftmenu.OverlayLeftViewUtils; import com.mogo.och.taxi.passenger.utils.TaxiPassengerAnalyticsManager; import org.jetbrains.annotations.NotNull; @@ -249,6 +252,8 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback //开启自驾后 异常信息返回 OCHAdasAbilityManager.getInstance().setAdasStartFailureCallback(mAdasStartFailureListener); + + CallerMsgBoxEventListenerManager.INSTANCE.addListener(TAG,iMsgBoxEventListener); } private void releaseListeners() { @@ -267,6 +272,8 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback AbnormalFactorsLoopManager.INSTANCE.stopLoopAbnormalFactors(); OCHAdasAbilityManager.getInstance().setAdasStartFailureCallback(null); + + CallerMsgBoxEventListenerManager.INSTANCE.removeListener(iMsgBoxEventListener); } /** @@ -599,6 +606,17 @@ public class TaxiPassengerModel implements IOCHTaxiPassengerNaviChangedCallback } }; + private final IMsgBoxEventListener iMsgBoxEventListener = new IMsgBoxEventListener() { + @Override + public void onSummaryClickEvent() { + if (mCurrentOCHOrder == null){ + ToastUtils.showLong("行程已结束"); + }else { + OverlayLeftViewUtils.INSTANCE.transmissionIndexGet(OverlayLeftViewUtils.OVERVIEW); + } + } + }; + public void startToRouteAndWipe(List models) { List locationsModels = CoordinateCalculateRouteUtil .coordinateConverterWgsToGcjLocations(mContext,models); diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt index 8bd6b1baef..64fc8b9c27 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt @@ -96,64 +96,16 @@ class MoGoHmiFragment : MvpFragment(), override fun initViews() { - //todo 新超,封装至消息盒子 - cbMsgBoxDriver.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - viewDriverMsgBoxList.visibility = View.VISIBLE - viewDriverMsgBoxList.notifyData() - viewDriverMsgBoxBubble.visibility = View.GONE - viewDriverMsgBoxBubble.isShowData(false) - CallerHmiManager.updateDriverMsgBoxTipView(false) - } else { - viewDriverMsgBoxList.visibility = View.GONE - viewDriverMsgBoxBubble.visibility = View.VISIBLE - viewDriverMsgBoxBubble.isShowData(true) - } - } - - //todo 新超,封装至消息盒子 - cbMsgBoxPassenger.setOnCheckedChangeListener { _, isChecked -> - if (isChecked) { - viewPassengerMsgBoxList.visibility = View.VISIBLE - viewPassengerMsgBoxBubble.visibility = View.GONE - viewPassengerMsgBoxBubble.isShowData(false) - CallerHmiManager.updatePassengerMsgBoxTipView(false) - } else { - viewPassengerMsgBoxList.visibility = View.GONE - viewPassengerMsgBoxBubble.visibility = View.VISIBLE - viewPassengerMsgBoxBubble.isShowData(true) - } - } - - //todo 加载端自己控制 --- 新超 本期我们设置到bus,taxi,sweep Fragment - 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 - } } // todo 新超 override fun updateDriverMsgBoxTipView(show: Boolean) { - if (show) { - MsgBoxTipView.visibility = View.VISIBLE - } else { - MsgBoxTipView.visibility = View.GONE - } + } // todo 新超 override fun updatePassengerMsgBoxTipView(show: Boolean) { - if (show) { - MsgBoxPTipView.visibility = View.VISIBLE - } else { - MsgBoxPTipView.visibility = View.GONE - } + } /** todo ----------------------------------------------**/ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/DriverMsgBoxButtonView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/DriverMsgBoxButtonView.kt new file mode 100644 index 0000000000..0156087370 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/DriverMsgBoxButtonView.kt @@ -0,0 +1,33 @@ +package com.mogo.eagle.core.function.hmi.ui.msgbox + +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import androidx.constraintlayout.widget.ConstraintLayout +import com.mogo.eagle.core.function.hmi.R + +/** + * @author XuXinChao + * @description 消息盒子司机端视图切换按钮 + * @since: 2023/1/31 + */ +class DriverMsgBoxButtonView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +):ConstraintLayout(context, attrs, defStyleAttr) { + + companion object { + const val TAG = "DriverMsgBoxButtonView" + } + + init{ + LayoutInflater.from(context).inflate(R.layout.view_driver_msg_box_button, this, true) + initView() + } + + private fun initView(){ + + } + +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/DriverMsgBoxListView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/DriverMsgBoxListView.kt index 7260d1ef2f..547b6c8719 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/DriverMsgBoxListView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/DriverMsgBoxListView.kt @@ -45,7 +45,7 @@ class DriverMsgBoxListView @JvmOverloads constructor( private var driverMsgBoxListAdapter: DriverMsgBoxListAdapter ?=null private fun initView() { - driverMsgBoxListAdapter= DriverMsgBoxListAdapter(context) + driverMsgBoxListAdapter= DriverMsgBoxListAdapter(context as Activity) rvMsgBoxList.adapter = driverMsgBoxListAdapter rvMsgBoxList.layoutManager = LinearLayoutManager(context) @@ -171,13 +171,21 @@ class DriverMsgBoxListView @JvmOverloads constructor( when (category) { MsgCategory.NOTICE -> { noticeList?.add(0,msgBoxList) + if(MsgBoxConfig.getUserRecord() == 0){ + noticeList?.let { driverMsgBoxListAdapter?.setData(it) } + } } MsgCategory.SYS_INFO -> { ipcReportList?.add(0,msgBoxList) + if(MsgBoxConfig.getUserRecord() == 1){ + ipcReportList?.let { driverMsgBoxListAdapter?.setData(it) } + } } MsgCategory.RECORD_BAG -> { badCaseList?.add(0,msgBoxList) - badCaseList?.let { driverMsgBoxListAdapter?.setData(it) } + if(MsgBoxConfig.getUserRecord() == 2){ + badCaseList?.let { driverMsgBoxListAdapter?.setData(it) } + } } } } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/PassengerMsgBoxButtonView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/PassengerMsgBoxButtonView.kt new file mode 100644 index 0000000000..9cc340ca74 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/PassengerMsgBoxButtonView.kt @@ -0,0 +1,33 @@ +package com.mogo.eagle.core.function.hmi.ui.msgbox + +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import androidx.constraintlayout.widget.ConstraintLayout +import com.mogo.eagle.core.function.hmi.R + +/** + * @author XuXinChao + * @description 消息盒子乘客端视图切换按钮 + * @since: 2023/1/31 + */ +class PassengerMsgBoxButtonView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +): ConstraintLayout(context, attrs, defStyleAttr) { + + companion object { + const val TAG = "PassengerMsgBoxButtonView" + } + + init{ + LayoutInflater.from(context).inflate(R.layout.view_passenger_msg_box_button, this, true) + initView() + } + + private fun initView(){ + + } + +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxBubbleAdapter.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxBubbleAdapter.kt index e6917eee75..59bf3c18f6 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxBubbleAdapter.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxBubbleAdapter.kt @@ -8,6 +8,7 @@ import android.view.ViewGroup import android.widget.ImageView import android.widget.TextView 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.report.ReportEntity @@ -33,6 +34,7 @@ class DriverMsgBoxBubbleAdapter(private val activity: Activity) : RecyclerView.A private val notice: Int = 2 private val v2x: Int = 3 private val report: Int = 4 + private val summary: Int = 5 var countDownTimer: CountDownTimer?=null private var changeViewListener: ChangeViewListener?=null @@ -46,91 +48,107 @@ class DriverMsgBoxBubbleAdapter(private val activity: Activity) : RecyclerView.A } 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_bubble_notice,parent,false) - return BubbleNoticeHolder(view) - }else{ - val view = LayoutInflater.from(parent.context).inflate(R.layout.item_msg_bubble_v2x,parent,false) - return BubbleV2XHolder(view) + when (viewType) { + operation -> { + val view = LayoutInflater.from(parent.context).inflate(R.layout.item_msg_bubble_operation,parent,false) + return BubbleOperationHolder(view) + } + report -> { + val view = LayoutInflater.from(parent.context).inflate(R.layout.item_msg_bubble_report,parent,false) + return BubbleReportHolder(view) + } + notice -> { + val view = LayoutInflater.from(parent.context).inflate(R.layout.item_msg_bubble_notice,parent,false) + return BubbleNoticeHolder(view) + } + summary -> { + val view = LayoutInflater.from(parent.context).inflate(R.layout.item_msg_bubble_summary,parent,false) + return BubbleSummaryHolder(view) + } + else -> { + val view = LayoutInflater.from(parent.context).inflate(R.layout.item_msg_bubble_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)}" + when (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 } - holder.tvBubbleReportType.text = resultStr } - }else if(holder is BubbleNoticeHolder){ - data?.let { - val msgBoxBean = it[position].bean - val noticeFrCloudMsg = msgBoxBean 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 { - //云公告 - if (noticeNormalData != null) { - CallerHmiManager.showNoticeNormalData(noticeNormalData) - } + 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)}" } - }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 { - //云公告 - if (noticeTrafficStylePushData != null) { - CallerHmiManager.showTrafficBanner(noticeTrafficStylePushData) + holder.tvBubbleReportType.text = resultStr + } + } + is BubbleNoticeHolder -> { + data?.let { + val msgBoxBean = it[position].bean + val noticeFrCloudMsg = msgBoxBean 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 { + //云公告 + if (noticeNormalData != null) { + CallerHmiManager.showNoticeNormalData(noticeNormalData) + } + } + }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 { + //云公告 + if (noticeTrafficStylePushData != null) { + CallerHmiManager.showTrafficBanner(noticeTrafficStylePushData) + } } } } } - }else if(holder is BubbleV2XHolder){ - 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 - if(msgBoxBean.type == MsgBoxType.OBU){ - holder.ivV2XImage.setImageDrawable(activity.resources.getDrawable( - EventTypeEnumNew.getUpdateIconRes(v2XMsg.type))) - }else{ + is BubbleV2XHolder -> { + 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(activity.resources.getDrawable( EventTypeEnumNew.getUpdateIconRes(v2XMsg.type))) } } + is BubbleSummaryHolder -> { + data?.let { + val summaryMsg = it[position].bean as V2XMsg + holder.tvSummaryTime.text = TimeUtils.millis2String(it[position].timestamp,getHourMinFormat()) + holder.tvSummaryContent.text = summaryMsg.content + } + } } val msgBoxBean: MsgBoxBean = data!![position] @@ -155,14 +173,16 @@ class DriverMsgBoxBubbleAdapter(private val activity: Activity) : RecyclerView.A override fun getItemCount() = data?.size ?: 0 override fun getItemViewType(position: Int): Int { - if(data!![position].type == MsgBoxType.OPERATION){ - return operation + return if(data!![position].type == MsgBoxType.OPERATION){ + operation }else if(data!![position].type == MsgBoxType.REPORT){ - return report + report }else if(data!![position].type == MsgBoxType.NOTICE){ - return notice - }else{ - return v2x + notice + }else if(data!![position].type == MsgBoxType.V2X && data!![position].sourceType == DataSourceType.SUMMARY){ + summary + } else{ + v2x } } @@ -195,6 +215,12 @@ class DriverMsgBoxBubbleAdapter(private val activity: Activity) : RecyclerView.A var tvV2XContent: TextView = itemView.findViewById(R.id.tvV2XContent) } + //汇总消息 + class BubbleSummaryHolder(itemView: View): RecyclerView.ViewHolder(itemView){ + var tvSummaryContent: TextView = itemView.findViewById(R.id.tvSummaryContent) + var tvSummaryTime: TextView = itemView.findViewById(R.id.tvSummaryTime) + } + fun setChangeListener(listener: ChangeViewListener){ changeViewListener = listener } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxListAdapter.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxListAdapter.kt index 8cf5e4c611..a47e4bdcd6 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxListAdapter.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/DriverMsgBoxListAdapter.kt @@ -2,7 +2,6 @@ package com.mogo.eagle.core.function.hmi.ui.msgbox.adapter import android.annotation.SuppressLint import android.app.Activity -import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -10,6 +9,7 @@ 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.DataSourceType import com.mogo.eagle.core.data.enums.EventTypeEnumNew import com.mogo.eagle.core.data.msgbox.* import com.mogo.eagle.core.data.report.ReportEntity @@ -28,201 +28,263 @@ import com.mogo.eagle.core.utilcode.util.TimeUtils.getHourMinFormat * @description 司机端消息盒子列表视图RecyclerView适配器 * @since: 2022/11/25 */ -class DriverMsgBoxListAdapter(private val context: Context) : RecyclerView.Adapter(){ +class DriverMsgBoxListAdapter(private val activity: Activity) : + RecyclerView.Adapter() { - private var data: List ?= null + private var data: List? = 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 + private val summary: Int = 8 - companion object{ - //Error - private const val RESULT_AUTOPILOT_DISABLE = "RESULT_AUTOPILOT_DISABLE" - private const val RESULT_AUTOPILOT_SYSTEM_UNSTARTED = "RESULT_AUTOPILOT_SYSTEM_UNSTARTED" - private const val RESULT_REMOTEPILOT_DISABLE = "RESULT_REMOTEPILOT_DISABLE" - } + //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){ + fun setData(data: List) { 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) + when (viewType) { + record -> { + val view = LayoutInflater.from(parent.context) + .inflate(R.layout.item_bad_case, parent, false) + return BadCaseHolder(view) + } + report -> { + val view = LayoutInflater.from(parent.context) + .inflate(R.layout.item_msg_box_ipc_report, parent, false) + return MsgBoxIpcReportHolder(view) + } + operation -> { + val view = LayoutInflater.from(parent.context) + .inflate(R.layout.item_msg_box_operation, parent, false) + return MsgBoxOperation(view) + } + notice -> { + val view = LayoutInflater.from(parent.context) + .inflate(R.layout.item_msg_box_notice, parent, false) + return MsgBoxNotice(view) + } + summary -> { + val view = LayoutInflater.from(parent.context) + .inflate(R.layout.item_msg_box_summary, parent, false) + return MsgBoxSummary(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] - holder.tvRecordCheck.setOnClickListener { - //打开被动录包弹窗 - CallerDevaToolsManager.onReceiveBadCaseRecord(msgBoxBean,context as 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)}" - holder.tvReportTime.text =TimeUtils.millis2String(it[position].timestamp,getHourMinFormat()) - 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}" - var actionStr = "" - for (action in reportEntity.actionsList){ - actionStr = "${actionStr}${CallerAutoPilotManager.getReportActionDesc(action)}" - } - holder.tvReportActionOpen.text = "建议操作:$actionStr" - 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 - holder.tvReportActionOpen.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 - holder.tvReportActionOpen.visibility = View.GONE + 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] + holder.tvRecordCheck.setOnClickListener { + //打开被动录包弹窗 + CallerDevaToolsManager.onReceiveBadCaseRecord(msgBoxBean, activity, false) } } } - }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 + 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)}" + holder.tvReportTime.text = + TimeUtils.millis2String(it[position].timestamp, getHourMinFormat()) + 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}" + var actionStr = "" + for (action in reportEntity.actionsList) { + actionStr = + "${actionStr}${CallerAutoPilotManager.getReportActionDesc(action)}" + } + holder.tvReportActionOpen.text = "建议操作:$actionStr" + 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.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.ivReportImageOpen.visibility = View.VISIBLE + holder.tvReportLevelOpen.visibility = View.VISIBLE + holder.tvReportTimeOpen.visibility = View.VISIBLE + holder.tvReportTypeOpen.visibility = View.VISIBLE + holder.tvReportReasonOpen.visibility = View.VISIBLE + holder.tvReportActionOpen.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.ivOperationImageOpen.visibility = View.GONE - holder.tvOperationTitleOpen.visibility = View.GONE - holder.tvOperationContentOpen.visibility = View.GONE + 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 + holder.tvReportActionOpen.visibility = View.GONE + } } } } - }else if(holder 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(context).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(context).load(noticeTrafficStylePushData?.poiImgUrl).optionalTransform( - GlideRoundedCornersTransform( - 20f, - GlideRoundedCornersTransform.CornerType.ALL - ) - ).into(holder.ivNoticeImage) - holder.tvNoticeCheck.setOnClickListener { - //云公告 - noticeTrafficStylePushData?.let { it1 -> CallerHmiManager.showTrafficBanner(it1) } + 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 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 - if(msgBoxBean.type == MsgBoxType.OBU){ - holder.ivV2XImage.setImageDrawable(context.resources.getDrawable( - EventTypeEnumNew.getUpdateIconRes(v2XMsg.type))) - }else{ - holder.ivV2XImage.setImageDrawable(context.resources.getDrawable( - EventTypeEnumNew.getUpdateIconRes(v2XMsg.type))) + 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(activity.resources.getDrawable( + EventTypeEnumNew.getUpdateIconRes(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 } } } @@ -232,26 +294,30 @@ class DriverMsgBoxListAdapter(private val context: Context) : RecyclerView.Adapt 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 - } + return if (data!![position].type == MsgBoxType.OPERATION) { + 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 { + v2x + } } //录包实体 - class BadCaseHolder(itemView: View): RecyclerView.ViewHolder(itemView){ - var tvBagRecordTime: TextView= itemView.findViewById(R.id.tvBagRecordTime) + 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){ + 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) @@ -267,10 +333,11 @@ class DriverMsgBoxListAdapter(private val context: Context) : RecyclerView.Adapt } //运营平台 - class MsgBoxOperation(itemView: View): RecyclerView.ViewHolder(itemView){ + 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 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) @@ -279,7 +346,7 @@ class DriverMsgBoxListAdapter(private val context: Context) : RecyclerView.Adapt } //Notice - class MsgBoxNotice(itemView: View): RecyclerView.ViewHolder(itemView){ + 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) @@ -288,11 +355,17 @@ class DriverMsgBoxListAdapter(private val context: Context) : RecyclerView.Adapt } //V2X,OBU - class MsgBoxV2X(itemView: View): RecyclerView.ViewHolder(itemView){ + 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) } + //汇总消息 + class MsgBoxSummary(itemView: View) : RecyclerView.ViewHolder(itemView) { + var tvSummaryContent: TextView = itemView.findViewById(R.id.tvSummaryContent) + var tvSummaryTime: TextView = itemView.findViewById(R.id.tvSummaryTime) + } + } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/PassengerMsgBoxBubbleAdapter.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/PassengerMsgBoxBubbleAdapter.kt index 858f15e6cd..110a8bcb9f 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/PassengerMsgBoxBubbleAdapter.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/PassengerMsgBoxBubbleAdapter.kt @@ -8,15 +8,14 @@ import android.view.ViewGroup import android.widget.ImageView import android.widget.TextView 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.MsgBoxBean -import com.mogo.eagle.core.data.msgbox.MsgBoxType -import com.mogo.eagle.core.data.msgbox.NoticeFrCloudMsg -import com.mogo.eagle.core.data.msgbox.V2XMsg +import com.mogo.eagle.core.data.msgbox.* +import com.mogo.eagle.core.utilcode.mogo.glide.GlideApp import com.mogo.eagle.core.function.call.hmi.CallerHmiManager +import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxEventListenerManager import com.mogo.eagle.core.function.call.msgbox.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 @@ -32,6 +31,7 @@ class PassengerMsgBoxBubbleAdapter(private val activity: Activity): RecyclerView private val notice: Int = 1 private val v2x: Int = 2 + private val summary: Int = 3 var countDownTimer: CountDownTimer?=null @@ -44,65 +44,83 @@ class PassengerMsgBoxBubbleAdapter(private val activity: Activity): RecyclerView } 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) + return when (viewType) { + notice -> { + val view = LayoutInflater.from(parent.context).inflate(R.layout.item_passenger_msg_box_notice,parent,false) + BubbleNoticeHolder(view) + } + summary -> { + val view = LayoutInflater.from(parent.context).inflate(R.layout.item_passenger_msg_box_summary,parent,false) + BubbleSummaryHolder(view) + } + else -> { + val view = LayoutInflater.from(parent.context).inflate(R.layout.item_passenger_msg_box_v2x,parent,false) + BubbleV2XHolder(view) + } } } override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { - if(holder is BubbleNoticeHolder){ - data?.let { - val noticeFrCloudMsg = it[position].bean as NoticeFrCloudMsg - if(noticeFrCloudMsg.type == 0){ - val noticeNormalData = noticeFrCloudMsg.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 { - //云公告 - noticeNormalData?.let { it1 -> CallerHmiManager.showNoticeNormalData(it1) } + when (holder) { + is BubbleNoticeHolder -> { + data?.let { + val noticeFrCloudMsg = it[position].bean as NoticeFrCloudMsg + if(noticeFrCloudMsg.type == 0){ + val noticeNormalData = noticeFrCloudMsg.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 { + //云公告 + noticeNormalData?.let { it1 -> CallerHmiManager.showNoticeNormalData(it1) } + } + }else if(noticeFrCloudMsg.type == 1){ + val noticeTrafficStylePushData = noticeFrCloudMsg.trafficPushData + holder.tvPassengerNoticeTime.text = TimeUtils.millis2String(it[position].timestamp,getHourMinFormat()) + holder.tvPassengerNoticeContent.text = noticeTrafficStylePushData?.content + GlideApp.with(activity).load(noticeTrafficStylePushData?.poiImgUrl).optionalTransform( + GlideRoundedCornersTransform( + 20f, + GlideRoundedCornersTransform.CornerType.ALL + ) + ).into(holder.ivPassengerNoticeImage) + holder.tvPassengerNoticeCheck.setOnClickListener { + //云公告 + noticeTrafficStylePushData?.let { it1 -> CallerHmiManager.showTrafficBanner(it1) } + } } - }else if(noticeFrCloudMsg.type == 1){ - val noticeTrafficStylePushData = noticeFrCloudMsg.trafficPushData - holder.tvPassengerNoticeTime.text = TimeUtils.millis2String(it[position].timestamp,getHourMinFormat()) - holder.tvPassengerNoticeContent.text = noticeTrafficStylePushData?.content - GlideApp.with(activity).load(noticeTrafficStylePushData?.poiImgUrl).optionalTransform( - GlideRoundedCornersTransform( - 20f, - GlideRoundedCornersTransform.CornerType.ALL - ) - ).into(holder.ivPassengerNoticeImage) - holder.tvPassengerNoticeCheck.setOnClickListener { - //云公告 - noticeTrafficStylePushData?.let { it1 -> CallerHmiManager.showTrafficBanner(it1) } - } - } + } } - }else if(holder is BubbleV2XHolder){ - data?.let { - val msgBoxBean = it[position] - val v2XMsg = msgBoxBean.bean as V2XMsg - holder.tvPassengerV2XTime.text = TimeUtils.millis2String(it[position].timestamp,getHourMinFormat()) - holder.tvPassengerV2XContent.text = v2XMsg.content - if(msgBoxBean.type == MsgBoxType.OBU){ - holder.ivPassengerV2XImage.setImageDrawable(activity.resources.getDrawable( - EventTypeEnumNew.getUpdateIconRes(v2XMsg.type))) - }else{ + is BubbleV2XHolder -> { + data?.let { + val msgBoxBean = it[position] + val v2XMsg = msgBoxBean.bean as V2XMsg + holder.tvPassengerV2XTime.text = TimeUtils.millis2String(it[position].timestamp,getHourMinFormat()) + holder.tvPassengerV2XContent.text = v2XMsg.content holder.ivPassengerV2XImage.setImageDrawable(activity.resources.getDrawable( EventTypeEnumNew.getUpdateIconRes(v2XMsg.type))) } } + is BubbleSummaryHolder -> { + data?.let { + val summaryMsg= it[position].bean as V2XMsg + holder.tvPassengerSummaryTime.text = TimeUtils.millis2String(it[position].timestamp,getHourMinFormat()) + holder.tvPassengerSummaryContent.text = summaryMsg.content + holder.tvPassengerSummaryCheck.setOnClickListener { + //跳转全览模式 +// CallerHmiManager.showSmallFragment() + CallerMsgBoxEventListenerManager.invokeListener() + } + } + } } + val msgBoxBean: MsgBoxBean = data!![position] countDownTimer =object: CountDownTimer(CallerMsgBoxManager.getDismissTime(),1000){ override fun onTick(p0: Long) { @@ -123,10 +141,12 @@ class PassengerMsgBoxBubbleAdapter(private val activity: Activity): RecyclerView override fun getItemCount() = data?.size ?: 0 override fun getItemViewType(position: Int): Int { - if(data!![position].type == MsgBoxType.NOTICE){ - return notice - }else{ - return v2x + return if(data!![position].type == MsgBoxType.NOTICE){ + notice + }else if(data!![position].type == MsgBoxType.V2X && data!![position].sourceType == DataSourceType.SUMMARY){ + summary + } else{ + v2x } } @@ -146,4 +166,11 @@ class PassengerMsgBoxBubbleAdapter(private val activity: Activity): RecyclerView var tvPassengerV2XContent: TextView = itemView.findViewById(R.id.tvPassengerV2XContent) } + //汇总消息 + class BubbleSummaryHolder(itemView: View): RecyclerView.ViewHolder(itemView){ + var tvPassengerSummaryContent: TextView = itemView.findViewById(R.id.tvPassengerSummaryContent) + var tvPassengerSummaryCheck: TextView = itemView.findViewById(R.id.tvPassengerSummaryCheck) + var tvPassengerSummaryTime: TextView = itemView.findViewById(R.id.tvPassengerSummaryTime) + } + } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/PassengerMsgBoxListAdapter.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/PassengerMsgBoxListAdapter.kt index 1dbb6a3be9..de61704d89 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/PassengerMsgBoxListAdapter.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/adapter/PassengerMsgBoxListAdapter.kt @@ -7,12 +7,11 @@ import android.view.ViewGroup import android.widget.ImageView import android.widget.TextView 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.MsgBoxBean -import com.mogo.eagle.core.data.msgbox.MsgBoxType -import com.mogo.eagle.core.data.msgbox.NoticeFrCloudMsg -import com.mogo.eagle.core.data.msgbox.V2XMsg +import com.mogo.eagle.core.data.msgbox.* import com.mogo.eagle.core.function.call.hmi.CallerHmiManager +import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxEventListenerManager 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 @@ -30,6 +29,7 @@ class PassengerMsgBoxListAdapter(private val activity: Activity): RecyclerView.A private val notice: Int = 1 private val v2x: Int = 2 + private val summary: Int = 3 fun setData(data: List){ this.data = data @@ -37,73 +37,92 @@ class PassengerMsgBoxListAdapter(private val activity: Activity): RecyclerView.A } 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) + return when (viewType) { + notice -> { + val view = LayoutInflater.from(parent.context).inflate(R.layout.item_passenger_msg_list_notice,parent,false) + ListNoticeHolder(view) + } + summary -> { + val view = LayoutInflater.from(parent.context).inflate(R.layout.item_passenger_msg_list_summary,parent,false) + ListSummaryHolder(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 noticeFrCloudMsg = it[position].bean as NoticeFrCloudMsg - if(noticeFrCloudMsg.type == 0){ - val noticeNormalData = noticeFrCloudMsg.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 { - //云公告 - noticeNormalData?.let { it1 -> CallerHmiManager.showNoticeNormalData(it1) } - } - }else if(noticeFrCloudMsg.type == 1){ - val noticeTrafficStylePushData = noticeFrCloudMsg.trafficPushData - holder.tvPassengerNoticeTime.text = TimeUtils.millis2String(it[position].timestamp,getHourMinFormat()) - holder.tvPassengerNoticeContent.text = noticeTrafficStylePushData?.content - GlideApp.with(activity).load(noticeTrafficStylePushData?.poiImgUrl).optionalTransform( - GlideRoundedCornersTransform( - 20f, - GlideRoundedCornersTransform.CornerType.ALL - ) - ).into(holder.ivPassengerNoticeImage) - holder.tvPassengerNoticeCheck.setOnClickListener { - //云公告 - noticeTrafficStylePushData?.let { it1 -> CallerHmiManager.showTrafficBanner(it1) } + when (holder) { + is ListNoticeHolder -> { + data?.let { + val noticeFrCloudMsg = it[position].bean as NoticeFrCloudMsg + if(noticeFrCloudMsg.type == 0){ + val noticeNormalData = noticeFrCloudMsg.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 { + //云公告 + noticeNormalData?.let { it1 -> CallerHmiManager.showNoticeNormalData(it1) } + } + }else if(noticeFrCloudMsg.type == 1){ + val noticeTrafficStylePushData = noticeFrCloudMsg.trafficPushData + holder.tvPassengerNoticeTime.text = TimeUtils.millis2String(it[position].timestamp,getHourMinFormat()) + holder.tvPassengerNoticeContent.text = noticeTrafficStylePushData?.content + GlideApp.with(activity).load(noticeTrafficStylePushData?.poiImgUrl).optionalTransform( + GlideRoundedCornersTransform( + 20f, + GlideRoundedCornersTransform.CornerType.ALL + ) + ).into(holder.ivPassengerNoticeImage) + holder.tvPassengerNoticeCheck.setOnClickListener { + //云公告 + noticeTrafficStylePushData?.let { it1 -> CallerHmiManager.showTrafficBanner(it1) } + } } } } - }else if(holder is ListV2XHolder){ - data?.let { - val msgBoxBean = it[position] - val v2XMsg = msgBoxBean.bean as V2XMsg - holder.tvPassengerV2XTime.text = TimeUtils.millis2String(it[position].timestamp,getHourMinFormat()) - holder.tvPassengerV2XContent.text = v2XMsg.content - if(msgBoxBean.type == MsgBoxType.OBU){ - holder.ivPassengerV2XImage.setImageDrawable(activity.resources.getDrawable( - EventTypeEnumNew.getUpdateIconRes(v2XMsg.type))) - }else{ + is ListV2XHolder -> { + data?.let { + val msgBoxBean = it[position] + val v2XMsg = msgBoxBean.bean as V2XMsg + holder.tvPassengerV2XTime.text = TimeUtils.millis2String(it[position].timestamp,getHourMinFormat()) + holder.tvPassengerV2XContent.text = v2XMsg.content holder.ivPassengerV2XImage.setImageDrawable(activity.resources.getDrawable( EventTypeEnumNew.getUpdateIconRes(v2XMsg.type))) } } + is ListSummaryHolder -> { + data?.let { + val summaryMsg= it[position].bean as V2XMsg + holder.tvPassengerSummaryTime.text = TimeUtils.millis2String(it[position].timestamp,getHourMinFormat()) + holder.tvPassengerSummaryContent.text = summaryMsg.content + holder.tvPassengerSummaryCheck.setOnClickListener { + //跳转全览模式 +// CallerHmiManager.showSmallFragment() + CallerMsgBoxEventListenerManager.invokeListener() + } + } + } } } override fun getItemCount() = data?.size ?: 0 override fun getItemViewType(position: Int): Int { - if(data!![position].type == MsgBoxType.NOTICE){ - return notice - }else{ - return v2x + return if(data!![position].type == MsgBoxType.NOTICE){ + notice + }else if(data!![position].type == MsgBoxType.V2X && data!![position].sourceType == DataSourceType.SUMMARY){ + summary + } else{ + v2x } } @@ -123,4 +142,11 @@ class PassengerMsgBoxListAdapter(private val activity: Activity): RecyclerView.A var tvPassengerV2XContent: TextView = itemView.findViewById(R.id.tvPassengerV2XContent) } + //汇总消息 + class ListSummaryHolder(itemView: View): RecyclerView.ViewHolder(itemView){ + var tvPassengerSummaryContent: TextView = itemView.findViewById(R.id.tvPassengerSummaryContent) + var tvPassengerSummaryCheck: TextView = itemView.findViewById(R.id.tvPassengerSummaryCheck) + var tvPassengerSummaryTime: TextView = itemView.findViewById(R.id.tvPassengerSummaryTime) + } + } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_box_summary.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_box_summary.xml new file mode 100644 index 0000000000..9f2439221a --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_box_summary.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_bubble_summary.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_bubble_summary.xml new file mode 100644 index 0000000000..25f2eedcd9 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_msg_bubble_summary.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_passenger_msg_box_summary.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_passenger_msg_box_summary.xml new file mode 100644 index 0000000000..3c58b979c0 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_passenger_msg_box_summary.xml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_passenger_msg_list_summary.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_passenger_msg_list_summary.xml new file mode 100644 index 0000000000..964715f577 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_passenger_msg_list_summary.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_driver_msg_box_button.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_driver_msg_box_button.xml new file mode 100644 index 0000000000..05d9447d64 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_driver_msg_box_button.xml @@ -0,0 +1,34 @@ + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_passenger_msg_box_button.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_passenger_msg_box_button.xml new file mode 100644 index 0000000000..6362adc21d --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_passenger_msg_box_button.xml @@ -0,0 +1,31 @@ + + + + + + + + + + \ No newline at end of file diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/msgbox/IMsgBoxEventListener.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/msgbox/IMsgBoxEventListener.kt new file mode 100644 index 0000000000..cebfca9d9b --- /dev/null +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/msgbox/IMsgBoxEventListener.kt @@ -0,0 +1,9 @@ +package com.mogo.eagle.core.function.api.msgbox +/** + * @author XuXinChao + * @date 2023/1/16 + * 消息盒子事件监听回调 + */ +interface IMsgBoxEventListener { + fun onSummaryClickEvent() +} \ No newline at end of file diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/msgbox/CallerMsgBoxEventListenerManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/msgbox/CallerMsgBoxEventListenerManager.kt new file mode 100644 index 0000000000..9b61eec3f2 --- /dev/null +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/msgbox/CallerMsgBoxEventListenerManager.kt @@ -0,0 +1,30 @@ +package com.mogo.eagle.core.function.call.msgbox + +import androidx.annotation.Nullable +import com.mogo.eagle.core.function.api.msgbox.IMsgBoxEventListener +import com.mogo.eagle.core.function.call.base.CallerBase +import java.util.concurrent.ConcurrentHashMap + +/** + * @author XuXinChao + * @date 2023/1/16 + * 消息盒子事件监听管理 + */ +object CallerMsgBoxEventListenerManager: CallerBase() { + + private val statusListeners: ConcurrentHashMap = + ConcurrentHashMap() + + /** + * 触发监听 + */ + fun invokeListener(){ + statusListeners.forEach { + val tag = it.key + val listener = it.value + listener.onSummaryClickEvent() + } + } + + +} \ No newline at end of file