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 9dd3593284..a10995bcdf 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 @@ -311,7 +311,13 @@ class MoGoHmiFragment : MvpFragment(), } 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)){ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/PassengerMsgBoxBubbleView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/PassengerMsgBoxBubbleView.kt index 5f4404e3e7..29ecb340f5 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/PassengerMsgBoxBubbleView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/PassengerMsgBoxBubbleView.kt @@ -31,6 +31,7 @@ class PassengerMsgBoxBubbleView @JvmOverloads constructor( ) : ConstraintLayout(context, attrs, defStyleAttr), IMsgBoxListener { private val TAG = "PassengerMsgBoxBubbleView" + private val dataList :ArrayList = ArrayList() var passengerMsgBoxBubbleAdapter: PassengerMsgBoxBubbleAdapter ?= null init { LayoutInflater.from(context).inflate(R.layout.layout_passenger_msg_box_bubble, this, true) @@ -42,7 +43,7 @@ class PassengerMsgBoxBubbleView @JvmOverloads constructor( linearLayoutManager.orientation = LinearLayoutManager.VERTICAL linearLayoutManager.stackFromEnd = true linearLayoutManager.reverseLayout = true - passengerMsgBoxBubbleAdapter = PassengerMsgBoxBubbleAdapter() + passengerMsgBoxBubbleAdapter = PassengerMsgBoxBubbleAdapter(context as Activity) rvPassengerBubbleList.adapter = passengerMsgBoxBubbleAdapter rvPassengerBubbleList.layoutManager = linearLayoutManager @@ -50,7 +51,13 @@ class PassengerMsgBoxBubbleView @JvmOverloads constructor( } 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(){ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/PassengerMsgBoxListView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/PassengerMsgBoxListView.kt new file mode 100644 index 0000000000..da5e6580b6 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/msgbox/PassengerMsgBoxListView.kt @@ -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? = CallerMsgBoxManager.getCachedNotifyData() + noticeList?.let { + passengerMsgBoxListAdapter?.setData(it.reversed()) + } + +// setData() + } + + fun setData(){ + val list :ArrayList = 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) + } + +} \ 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 3693ece7ce..8a813a512e 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 @@ -1,5 +1,6 @@ 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 @@ -7,11 +8,16 @@ 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.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 @@ -20,40 +26,57 @@ import com.mogo.eagle.core.utilcode.util.TimeUtils.getHourMinFormat * @description 乘客端消息盒子气泡视图RecyclerView适配器 * @since: 2022/11/25 */ -class PassengerMsgBoxBubbleAdapter: RecyclerView.Adapter() { +class PassengerMsgBoxBubbleAdapter(private val activity: Activity): RecyclerView.Adapter() { private var data: ArrayList ?= null - private val operation: Int = 1 - private val notice: Int = 2 + private val notice: Int = 1 + private val v2x: Int = 2 var countDownTimer: CountDownTimer?=null fun setData(data: ArrayList){ this.data = data + if(data.size>3){ + 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_passenger_msg_box_operation,parent,false) - return BubbleOperationHolder(view) - }else{ + 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 BubbleOperationHolder){ + if(holder is BubbleNoticeHolder){ data?.let { - val operationMsg = it[position].bean as OperationMsg - holder.tvPassengerOperationTime.text = TimeUtils.millis2String(it[position].timestamp,getHourMinFormat()) - holder.tvPassengerOperationContent.text = operationMsg.content + 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{ + }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] @@ -76,27 +99,27 @@ class PassengerMsgBoxBubbleAdapter: RecyclerView.Adapter(){ + + private var data: List ?= null + + private val notice: Int = 1 + private val v2x: Int = 2 + + fun setData(data: List){ + 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) + } + +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/rv_divider_line.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/rv_divider_line.xml new file mode 100644 index 0000000000..7ff979d888 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/rv_divider_line.xml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/fragment_hmi.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/fragment_hmi.xml index 5a2ea87992..c64df3ff3c 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/fragment_hmi.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/fragment_hmi.xml @@ -201,7 +201,7 @@ android:layout_height="150dp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintBottom_toBottomOf="parent" - android:layout_marginStart="220dp" + android:layout_marginStart="300dp" android:layout_marginBottom="30px" android:button="@null" android:background="@drawable/selector_msg_box" @@ -243,10 +243,19 @@ android:id="@+id/viewPassengerMsgBoxBubble" android:layout_width="864px" android:layout_height="wrap_content" - app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintBottom_toTopOf="@id/cbMsgBoxPassenger" - android:layout_marginStart="40dp" - android:layout_marginBottom="40dp" + app:layout_constraintLeft_toLeftOf="@id/cbMsgBoxPassenger" + app:layout_constraintRight_toRightOf="@id/cbMsgBoxPassenger" + android:visibility="gone" + /> + + diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_passenger_msg_box_notice.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_passenger_msg_box_notice.xml index 12439dc04e..dadb719dc4 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_passenger_msg_box_notice.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_passenger_msg_box_notice.xml @@ -4,43 +4,81 @@ android:layout_height="160px" xmlns:app="http://schemas.android.com/apk/res-auto" android:background="#465878" - app:roundLayoutRadius="24px"> + app:roundLayoutRadius="24px" + android:layout_marginTop="10px" + android:layout_marginBottom="10px" + > + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_passenger_msg_box_v2x.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_passenger_msg_box_v2x.xml new file mode 100644 index 0000000000..bc3c8901a2 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_passenger_msg_box_v2x.xml @@ -0,0 +1,46 @@ + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_passenger_msg_box_operation.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_passenger_msg_list_notice.xml similarity index 53% rename from core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_passenger_msg_box_operation.xml rename to core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_passenger_msg_list_notice.xml index 1218bd88b2..b56115e291 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_passenger_msg_box_operation.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_passenger_msg_list_notice.xml @@ -1,18 +1,13 @@ - + - \ No newline at end of file + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_passenger_msg_list_v2x.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_passenger_msg_list_v2x.xml new file mode 100644 index 0000000000..6dfe51625c --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/item_passenger_msg_list_v2x.xml @@ -0,0 +1,42 @@ + + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/layout_passenger_msg_box_list.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/layout_passenger_msg_box_list.xml new file mode 100644 index 0000000000..d85fde31aa --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/layout_passenger_msg_box_list.xml @@ -0,0 +1,20 @@ + + + + + + \ No newline at end of file