Merge remote-tracking branch 'origin/dev_robobus-m1-p-app-module_1.0.0_230112_1.0.0' into dev_robobus-m1-p-app-module_1.0.0_230112_1.0.0

This commit is contained in:
yangyakun
2023-02-13 17:24:30 +08:00
41 changed files with 1332 additions and 158 deletions

View File

@@ -0,0 +1,14 @@
package com.mogo.och.bus.passenger.callback
/**
* @author: wangmingjun
* @date: 2023/2/13
*/
interface AutoPilotStatusCallback {
/**
* false: 未开启自驾, true 开启自驾
*/
fun updateAutoStatus(isOpen: Boolean)
fun updateAutoStatus(status: Int)
}

View File

@@ -4,6 +4,7 @@ import android.content.Context
import android.os.Handler
import com.mogo.cloud.commons.utils.CoordinateUtils
import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo
import com.mogo.eagle.core.data.config.FunctionBuildConfig
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
@@ -19,6 +20,7 @@ import com.mogo.och.bus.passenger.bean.PM2OperationStatusResponse
import com.mogo.och.bus.passenger.bean.PM2RoutesResponse
import com.mogo.och.bus.passenger.bean.PM2RoutesResult
import com.mogo.och.bus.passenger.bean.PM2Station
import com.mogo.och.bus.passenger.callback.AutoPilotStatusCallback
import com.mogo.och.bus.passenger.callback.DrivingInfoCallback
import com.mogo.och.bus.passenger.constant.BusPassengerConst
import com.mogo.och.bus.passenger.network.PM2ModelLoopManager
@@ -39,14 +41,18 @@ class PM2DrivingModel private constructor() {
private var mRoutePoints = mutableListOf<MogoLocation>()
private var routesResult: PM2RoutesResult? = null
private var mCurrentAutoStatus = -1
var mStations = mutableListOf<PM2Station>()
private var mNextStationIndex = 0 // 要到达站的index
private var mNextStationIndex = 0 // A-B要到达站的index
private var isGoingToNextStation = false //是否前往下一站过程中
private var mTwoStationsRouts = mutableListOf<MogoLocation>()
private var mPreRouteIndex = 0
private var mWipePreIndex = 0
private var mDrivingInfoCallback : DrivingInfoCallback? = null //行程信息
private var mDrivingInfoCallback: DrivingInfoCallback? = null //行程信息
private var mAutoStatusCallback: AutoPilotStatusCallback? = null //自动驾驶状态
private val handler = Handler(Handler.Callback { msg ->
if (msg.what == MSG_QUERY_BUS_P_STATION) {
@@ -78,7 +84,7 @@ class PM2DrivingModel private constructor() {
CallerChassisLocationGCJ02ListenerManager.setListenerHz(TAG,5)//设置5hz, 1s返回一次
}
public fun releaseListener(){
fun releaseListener(){
//自动驾驶状态监听
CallerAutoPilotStatusListenerManager.removeListener(TAG)
@@ -90,6 +96,10 @@ class PM2DrivingModel private constructor() {
mDrivingInfoCallback = drivingInfoCallback
}
fun setAutoStatusCallback(autoPilotStatusCallback: AutoPilotStatusCallback){
mAutoStatusCallback = autoPilotStatusCallback
}
private val mMapLocationListener: IMoGoChassisLocationGCJ02Listener =
object : IMoGoChassisLocationGCJ02Listener{
override fun onChassisLocationGCJ02(mogoLocation: MogoLocation?) {
@@ -116,7 +126,22 @@ class PM2DrivingModel private constructor() {
override fun onAutopilotStatusResponse(autoPilotStatusInfo: AutopilotStatusInfo) {
super.onAutopilotStatusResponse(autoPilotStatusInfo)
//todo 自动驾驶状态展示, 注意美化模式下的处理
val status = autoPilotStatusInfo.state
if (mCurrentAutoStatus == status) return
if (IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING != status){
//美化模式下且行程中
if (FunctionBuildConfig.isDemoMode &&
mNextStationIndex>= 0 && mNextStationIndex <= mStations.size - 1
&& isGoingToNextStation){
mAutoStatusCallback?.updateAutoStatus(true)
}else{//非美化模式下
mAutoStatusCallback?.updateAutoStatus(false)
}
}else{//自驾状态 2
mAutoStatusCallback?.updateAutoStatus(true)
}
}
}
@@ -163,6 +188,7 @@ class PM2DrivingModel private constructor() {
if (data?.result == null || data.result.sites == null) {
routesResult = null
mNextStationIndex = 0
isGoingToNextStation = false
startOrStopCalculateRouteInfo(false)
mDrivingInfoCallback?.showNoTaskView(true)
return
@@ -177,6 +203,7 @@ class PM2DrivingModel private constructor() {
override fun onFail(code: Int, msg: String?) {
if (code == 1003) {
routesResult = null
isGoingToNextStation = false
startOrStopCalculateRouteInfo(false)
queryDriverOperationDelay()
return
@@ -197,20 +224,22 @@ class PM2DrivingModel private constructor() {
mStations.addAll(stations)
for (i in stations.indices) {
val station: PM2Station = stations[i]
if (station.drivingStatus === BusPassengerConst.STATION_STATUS_STOPPED
if (station.drivingStatus == BusPassengerConst.STATION_STATUS_STOPPED
&& station.isLeaving && i + 1 < stations.size) {
// mRouteLineInfoCallback.updateStationsInfo(stations, i + 1, false)
if (mNextStationIndex != i + 1) {
mTwoStationsRouts.clear()
startRemainRouteInfo()
}
isGoingToNextStation = true
mNextStationIndex = i + 1
return
} else if (station.drivingStatus === BusPassengerConst.STATION_STATUS_STOPPED && !station.isLeaving) {
} else if (station.drivingStatus == BusPassengerConst.STATION_STATUS_STOPPED && !station.isLeaving) {
if (i == 0) {
startOrStopRouteAndWipe(false)
}
mPreRouteIndex = 0
isGoingToNextStation = false
startOrStopCalculateRouteInfo(false)
// mRouteLineInfoCallback.updateStationsInfo(stations, i, true)
return

View File

@@ -3,12 +3,13 @@ package com.mogo.och.bus.passenger.presenter
import androidx.lifecycle.LifecycleOwner
import com.mogo.commons.mvp.Presenter
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import com.mogo.och.bus.passenger.callback.AutoPilotStatusCallback
import com.mogo.och.bus.passenger.callback.DrivingInfoCallback
import com.mogo.och.bus.passenger.model.PM2DrivingModel
import com.mogo.och.bus.passenger.ui.PM2DrivingInfoFragment
class PM2DrivingPresenter(view: PM2DrivingInfoFragment?) :
Presenter<PM2DrivingInfoFragment?>(view), DrivingInfoCallback {
Presenter<PM2DrivingInfoFragment?>(view), DrivingInfoCallback, AutoPilotStatusCallback {
init {
PM2DrivingModel.INSTANCE.init(context)
@@ -22,6 +23,7 @@ class PM2DrivingPresenter(view: PM2DrivingInfoFragment?) :
private fun initListener(){
PM2DrivingModel.INSTANCE.setDrivingInfoCallback(this)
PM2DrivingModel.INSTANCE.setAutoStatusCallback(this)
}
private fun destroyListener(){
@@ -58,4 +60,14 @@ class PM2DrivingPresenter(view: PM2DrivingInfoFragment?) :
override fun showNoTaskView(isTrue: Boolean) {
TODO("Not yet implemented")
}
override fun updateAutoStatus(isOpen: Boolean) {
UiThreadHandler.post {
mView?.updateAutoStatus(isOpen)
}
}
override fun updateAutoStatus(status: Int) {
TODO("Not yet implemented")
}
}

View File

@@ -1,9 +1,13 @@
package com.mogo.och.bus.passenger.ui
import android.os.Bundle
import androidx.core.content.ContextCompat
import com.mogo.commons.mvp.MvpFragment
import com.mogo.eagle.core.utilcode.util.DateTimeUtils
import com.mogo.och.bus.passenger.R
import com.mogo.och.bus.passenger.presenter.PM2DrivingPresenter
import com.mogo.och.common.module.utils.DateTimeUtil
import com.mogo.och.common.module.utils.DateTimeUtil.*
import kotlinx.android.synthetic.m2.p_m2_driving_info_fragment.*
/**
@@ -53,7 +57,7 @@ class PM2DrivingInfoFragment :
}
fun updateCarPlateNum(plateNum : String){
car_plate_tv.text = plateNum
}
fun updateTaskName(name: String){
@@ -65,17 +69,39 @@ class PM2DrivingInfoFragment :
}
fun updateCurrentTime(){
// current_time_tv.text =
// current_weekday_tv.text =
current_time_tv.text = formatCalendarToString(
DateTimeUtils.getCurrentDateTime(),HH_mm)
val date = formatCalendarToString(
DateTimeUtils.getCurrentDateTime(), yyyy_MM_dd)
val weekDay = DateTimeUtils.getWeekDayFromCalendar1(DateTimeUtils.getCurrentDateTime())
current_weekday_tv.text = "$date $weekDay"
}
fun changeOperationStatus(status:Boolean){
if (!status){ //暂无路线
}else{
}
}
override fun createPresenter(): PM2DrivingPresenter {
return PM2DrivingPresenter(this)
}
fun updateAutoStatus(isAutoPilot: Boolean) {
if (isAutoPilot){
context?.let { auto_tv.setTextColor(ContextCompat.getColor(it,R.color.m2_p_white_color)) }
context?.let { auto_tv.background = ContextCompat.getDrawable(it,R.drawable.auto_button_bg) }
}else{
context?.let { auto_tv.setTextColor(ContextCompat.getColor(it,R.color.m2_button_auto_tv_color)) }
context?.let { auto_tv.background = ContextCompat.getDrawable(it,R.drawable.bg_p_m2_auto_bg) }
}
}
companion object {
private val TAG = PM2DrivingInfoFragment::class.java.simpleName
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/m2_button_un_auto_bg_color"/>
<corners android:radius="@dimen/dp_20"/>
</shape>

View File

@@ -1,144 +1,162 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_height="@dimen/dp_556">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/driving_view"
android:layout_width="@dimen/dp_800"
android:layout_height="@dimen/dp_600"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:padding="@dimen/dp_30">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/img_drive_bg"
android:layout_width="@dimen/dp_290"
android:layout_height="@dimen/dp_140"
android:layout_marginTop="@dimen/dp_24"
android:layout_marginLeft="@dimen/dp_24"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
android:src="@drawable/img_drive_bg"/>
<!-- 行车卡片-->
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/speed_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0"
android:textSize="@dimen/dp_45"
android:text="--"
android:textColor="@color/m2_p_speed_tv_color"
android:textSize="@dimen/dp_56"
android:textStyle="bold"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
app:layout_constraintLeft_toLeftOf="@+id/img_drive_bg"
android:layout_marginLeft="@dimen/dp_24"
app:layout_constraintTop_toTopOf="@+id/img_drive_bg"
tools:ignore="SpUsage" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_10"
android:textSize="@dimen/dp_20"
android:layout_marginLeft="@dimen/dp_8"
android:textSize="@dimen/dp_18"
android:text="KM/H"
android:layout_marginBottom="@dimen/dp_16"
app:layout_constraintBottom_toBottomOf="@+id/speed_tv"
app:layout_constraintLeft_toRightOf="@+id/speed_tv" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/auto_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_40"
android:text="--"
android:textColor="@color/color_FFFFFF"
app:layout_constraintLeft_toLeftOf="parent"
android:layout_width="@dimen/dp_66"
android:layout_height="@dimen/dp_38"
android:background="@drawable/bg_p_m2_auto_bg"
android:layout_marginTop="@dimen/dp_12"
android:text="Auto"
android:textSize="@dimen/dp_18"
android:gravity="center"
android:textColor="@color/m2_button_auto_tv_color"
app:layout_constraintLeft_toLeftOf="@+id/speed_tv"
app:layout_constraintTop_toBottomOf="@+id/speed_tv" />
<!-- 转向灯 IMoGoChassisLamplightListener-->
<com.mogo.eagle.core.function.hmi.ui.vehicle.TurnLightViewStatus
android:id="@+id/turn_light_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_30"
android:layout_width="@dimen/dp_68"
android:layout_height="@dimen/dp_38"
android:layout_marginLeft="@dimen/dp_12"
app:layout_constraintLeft_toRightOf="@+id/auto_tv"
app:layout_constraintTop_toTopOf="@+id/auto_tv" />
<!-- 红绿灯-->
<com.mogo.eagle.core.function.hmi.ui.widget.SingleTrafficLightView
android:id="@+id/traffic_light_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_30"
android:layout_width="@dimen/dp_60"
android:layout_height="@dimen/dp_38"
android:layout_marginLeft="@dimen/dp_12"
app:layout_constraintLeft_toRightOf="@+id/turn_light_view"
app:layout_constraintTop_toTopOf="@+id/auto_tv" />
<View
android:id="@+id/dividing_line_1"
android:layout_width="match_parent"
android:layout_height="@dimen/bus_p_route_line_dividing_view_height"
android:layout_marginTop="@dimen/dp_40"
android:background="@color/bus_p_traffic_light_bg_stroke"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/auto_tv" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/img_line_bg"
android:layout_width="@dimen/dp_290"
android:layout_height="@dimen/dp_140"
android:layout_marginTop="@dimen/dp_22"
app:layout_constraintTop_toBottomOf="@+id/img_drive_bg"
app:layout_constraintLeft_toLeftOf="@+id/img_drive_bg"
android:src="@drawable/img_line_bg"/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/car_plate_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/dividing_line_1"
android:textStyle="bold"
android:text="--"
android:textSize="@dimen/dp_24"/>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/img_line_location_bg"
android:layout_width="@dimen/dp_74"
android:layout_height="@dimen/dp_79"
android:layout_marginRight="@dimen/dp_20"
app:layout_constraintTop_toTopOf="@+id/img_line_bg"
app:layout_constraintBottom_toBottomOf="@+id/img_line_bg"
app:layout_constraintRight_toRightOf="@+id/img_line_bg"
android:src="@drawable/m2_line_location_bg"/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/task_name_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintLeft_toRightOf="@+id/car_plate_tv"
app:layout_constraintBottom_toBottomOf="@+id/car_plate_tv"
android:textStyle="bold"
android:text="--"
android:textSize="@dimen/dp_24"
android:textColor="@color/bus_p_line_name_color"/>
app:layout_constraintTop_toTopOf="@+id/img_line_location_bg"
app:layout_constraintLeft_toLeftOf="@+id/speed_tv"
android:textColor="@color/m2_line_name_tv_color"/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/task_during_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/car_plate_tv"
android:layout_marginTop="@dimen/dp_20"
android:textSize="@dimen/dp_20"
android:layout_marginTop="@dimen/dp_10"
android:textSize="@dimen/dp_18"
android:text="--"
android:textColor="@color/bus_p_line_name_color"/>
app:layout_constraintLeft_toLeftOf="@+id/task_name_tv"
app:layout_constraintTop_toBottomOf="@+id/task_name_tv"
android:textColor="@color/m2_line_during_tv_color"/>
<View
android:id="@+id/dividing_line_2"
android:layout_width="match_parent"
android:layout_height="@dimen/bus_p_route_line_dividing_view_height"
android:layout_marginTop="@dimen/dp_40"
android:background="@color/bus_p_traffic_light_bg_stroke"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/task_during_tv" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/img_time_bg"
android:layout_width="@dimen/dp_290"
android:layout_height="@dimen/dp_140"
android:layout_marginTop="@dimen/dp_22"
app:layout_constraintTop_toBottomOf="@+id/img_line_bg"
app:layout_constraintLeft_toLeftOf="@+id/img_drive_bg"
android:src="@drawable/img_time_bg"/>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/img_time_clock_bg"
android:layout_width="@dimen/dp_97"
android:layout_height="@dimen/dp_66"
android:layout_marginRight="@dimen/dp_25"
app:layout_constraintTop_toTopOf="@+id/img_time_bg"
app:layout_constraintBottom_toBottomOf="@+id/img_time_bg"
app:layout_constraintRight_toRightOf="@+id/img_time_bg"
android:src="@drawable/clock_bg"/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/current_time_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/dividing_line_2"
android:textSize="@dimen/dp_24"
android:textSize="@dimen/dp_42"
android:textStyle="bold"
android:text="--"/>
android:text="--"
app:layout_constraintTop_toTopOf="@+id/img_time_clock_bg"
app:layout_constraintLeft_toLeftOf="@+id/speed_tv"
android:textColor="@color/m2_current_time_tv_color"/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/current_weekday_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toBottomOf="@+id/current_time_tv"
android:textSize="@dimen/dp_24"
android:text="--"/>
</androidx.constraintlayout.widget.ConstraintLayout>
app:layout_constraintLeft_toLeftOf="@+id/current_time_tv"
app:layout_constraintTop_toBottomOf="@+id/current_time_tv"
android:textSize="@dimen/dp_18"
android:text="--"
android:textColor="@color/m2_line_during_tv_color"/>
<!-- 全览地图带站点-->
<com.mogo.eagle.core.function.view.OverMapView
android:id="@+id/overMapView"
android:layout_width="0dp"
android:layout_height="@dimen/dp_600"
app:layout_constraintLeft_toRightOf="@+id/driving_view"
app:layout_constraintTop_toTopOf="parent" />
<com.mogo.eagle.core.function.view.OverMapView
android:id="@+id/overMapView"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -13,19 +13,19 @@
<!-- 消息盒子气泡-->
<!-- <com.mogo.eagle.core.function.hmi.ui.msgbox.PassengerMsgBoxBubbleView-->
<!-- android:id="@+id/box_bubble_view"-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- app:layout_constraintBottom_toBottomOf="parent"-->
<!-- app:layout_constraintLeft_toLeftOf="parent" />-->
<com.mogo.eagle.core.function.hmi.ui.msgbox.PassengerMsgBoxBubbleView
android:id="@+id/box_bubble_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent" />
<!--pnc行为决策-->
<!-- <com.mogo.eagle.core.function.hmi.ui.vehicle.PncActionsView-->
<!-- android:id="@+id/pnc_actions_view"-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- app:layout_constraintBottom_toBottomOf="parent"-->
<!-- app:layout_constraintLeft_toLeftOf="parent"-->
<!-- app:layout_constraintRight_toRightOf="parent" />-->
<com.mogo.eagle.core.function.hmi.ui.vehicle.PncActionsView
android:id="@+id/pnc_actions_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_height="@dimen/dp_565">
<!-- 图片或视频广告-->

View File

@@ -1,32 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="bus_p_speed_txt_color">#2D3E5F</color>
<color name="bus_p_traffic_light_bg_color">#CCE9EFFC</color>
<color name="bus_p_traffic_light_bg_stroke">#C7D2E1</color>
<color name="bus_p_driver_number_plate_color">#2D3E5F</color>
<color name="bus_p_line_name_color">#0043FF</color>
<color name="bus_p_line_operation_time_color">#2D3E5F</color>
<color name="bus_p_no_data_color">#596A8A</color>
<color name="bus_p_station_circle_color">#D8E5F8</color>
<color name="bus_p_start_station_circle_borner_color">#FFB327</color>
<color name="bus_p_station_txt_color">#2D3E5F</color>
<color name="bus_p_current_station_txt_color">#0043FF</color>
<color name="bus_p_middle_station_circle_color2">#276AFE</color>
<color name="bus_p_middle_station_circle_color1">#0043FF</color>
<color name="bus_p_end_station_circle_borner_color">#276AFE</color>
<color name="bus_p_start_tag_bg_color1">#FFC125</color>
<color name="bus_p_start_tag_bg_color2">#FF8131</color>
<color name="bus_p_end_tag_bg_color1">#31BFF2</color>
<color name="bus_p_end_tag_bg_color2">#3257E9</color>
<color name="bus_p_end_tag_txt_color">#FFFFFF</color>
<color name="bus_p_tag_line_color">#CDDBF6</color>
<color name="bus_p_panel_cur_txt_color">#2D3E5F</color>
<color name="bus_p_panel_cur_station_txt_color">#0043FF</color>
<color name="bus_p_panel_cur_station_tips_color">#2D3E5F</color>
<color name="bus_p_panel_cur_station_panel_color">#E6E9EFFC</color>
<color name="bus_p_route_view_left_edge_shadow">#33394C63</color>
<color name="bus_p_traffic_txt_color">#2D3E5F</color>
<color name="bus_p_panel_edge_shadow">#33394C63</color>
<color name="m2_p_white_color">#FFFFFF</color>
<color name="m2_p_speed_tv_color">#0B1E38</color>
<color name="m2_button_auto_tv_color">#2D3E5F</color>
<color name="m2_button_un_auto_bg_color">#B3C0D4ED</color>
<color name="m2_line_name_tv_color">#0B1E38</color>
<color name="m2_line_during_tv_color">#5D7199</color>
<color name="m2_current_time_tv_color">#0B1E38</color>
<color name="bus_traffic_light_red_color_up">#FFFFA28B</color>
<color name="bus_traffic_light_red_color_down">#FFDA1100</color>

View File

@@ -499,7 +499,7 @@ public class OrderModel {
String lineTime = DateTimeUtil.formatLongToString(
busRoutesResult.getTaskTime(),
DateTimeUtil.TAXI_HH_mm);
DateTimeUtil.HH_mm);
if (arrivingOrArrivedStationIndex == 0 ||
arrivingOrArrivedStation.getDrivingStatus() == STATION_STATUS_STOPPED

View File

@@ -11,11 +11,12 @@ import java.util.Date;
* @date: 2022/5/6
*/
public class DateTimeUtil {
public static final String TAXI_HH_mm = "HH:mm";
public static final String TAXI_MM_dd = "MM-dd";
public static final String TAXI_MM_dd_HH_mm = "MM-dd HH:mm";
public static final String TAXI_yyyy_MM_dd = "yyyy-MM-dd";
public static final String TAXI_yyyy_MM_dd_HH_mm = "yyyy-MM-dd HH:mm";
public static final String HH_mm = "HH:mm";
public static final String MM_dd = "MM-dd";
public static final String MM_dd_HH_mm = "MM-dd HH:mm";
public static final String yyyy_MM_dd = "yyyy-MM-dd";
public static final String yy_MM_dd = "yy-MM-dd";
public static final String yyyy_MM_dd_HH_mm = "yyyy-MM-dd HH:mm";
public static String formatCalendarToString(Calendar calendar, String format){
if (calendar == null) return "";
@@ -30,8 +31,8 @@ public class DateTimeUtil {
public static boolean compareDateIsCurrentDay(Calendar targetCalendar){
Calendar currentCale = DateTimeUtils.getCurrentDateTime();
String currentDay = formatCalendarToString(currentCale, TAXI_yyyy_MM_dd);
if (currentDay.equals(formatCalendarToString(targetCalendar, TAXI_yyyy_MM_dd))){
String currentDay = formatCalendarToString(currentCale, yyyy_MM_dd);
if (currentDay.equals(formatCalendarToString(targetCalendar, yyyy_MM_dd))){
return true;
}else {
return false;

View File

@@ -334,7 +334,7 @@ public class TaxiPassengerServingOrderFragment extends
Calendar beforeTime = Calendar.getInstance();
beforeTime.add(Calendar.MINUTE,time);
String arriveTime = DateTimeUtil.formatCalendarToString(beforeTime,DateTimeUtil.TAXI_HH_mm);
String arriveTime = DateTimeUtil.formatCalendarToString(beforeTime,DateTimeUtil.HH_mm);
updateOrderDisAndTimeView(remainDis, disUnit,time, arriveTime);
updateDriveProcessLoading(new Long(meters).intValue());
}

View File

@@ -429,7 +429,7 @@ object LeftMenuOpen {
val beforeTime = Calendar.getInstance()
beforeTime.add(Calendar.MINUTE, time)
//到达时间
val arriveTime = DateTimeUtil.formatCalendarToString(beforeTime, DateTimeUtil.TAXI_HH_mm)
val arriveTime = DateTimeUtil.formatCalendarToString(beforeTime, DateTimeUtil.HH_mm)
FloatingDistanceInfoUtils.setDistance(meters,remainDis,disUnit,time,arriveTime)
}else{
FloatingDistanceInfoUtils.setSpeed(speed)

View File

@@ -22,7 +22,6 @@ import com.mogo.eagle.core.data.map.CenterLine;
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener;
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager;
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager;
import com.mogo.eagle.core.function.call.map.CallerSmpManager;
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
import com.mogo.eagle.core.utilcode.util.DateTimeUtils;
import com.mogo.eagle.core.utilcode.util.ToastUtils;
@@ -34,7 +33,6 @@ import com.mogo.och.common.module.map.ICommonNaviChangedCallback;
import com.mogo.och.common.module.utils.DateTimeUtil;
import com.mogo.och.common.module.utils.NumberFormatUtil;
import com.mogo.och.common.module.utils.OCHThreadPoolManager;
import com.mogo.och.common.module.utils.ToastUtilsOch;
import com.mogo.och.common.module.voice.VoiceNotice;
import com.mogo.och.common.module.wigets.OCHCommitDialog;
import com.mogo.och.taxi.R;
@@ -239,8 +237,8 @@ public class TaxiBeingServerdOrdersFragment extends BaseTaxiUIFragment
mOrderOtherContent3.setVisibility(View.GONE);
Calendar currentCale = DateTimeUtils.getCurrentDateTime();
String currentHM = DateTimeUtil.formatCalendarToString(currentCale, DateTimeUtil.TAXI_HH_mm);
String currentDay = DateTimeUtil.formatCalendarToString(currentCale, DateTimeUtil.TAXI_yyyy_MM_dd);
String currentHM = DateTimeUtil.formatCalendarToString(currentCale, DateTimeUtil.HH_mm);
String currentDay = DateTimeUtil.formatCalendarToString(currentCale, DateTimeUtil.yyyy_MM_dd);
String strHtml11 = "<font color=\"#CAD6FF\">已于</font><br>"
+ "<b><font color=\"#FFFFFF\"><big><big>" + currentHM + "</big></big></font></b>"
+ "<font color=\"#CAD6FF\">" + " " + "到达乘客上车地点</font>";
@@ -251,13 +249,13 @@ public class TaxiBeingServerdOrdersFragment extends BaseTaxiUIFragment
mStationTv32.setText(order.endSiteAddr);
currentCale.add(Calendar.MINUTE, 10);
String strHtml13 = "";
if (currentDay.equals(DateTimeUtil.formatCalendarToString(currentCale, DateTimeUtil.TAXI_yyyy_MM_dd))) {
if (currentDay.equals(DateTimeUtil.formatCalendarToString(currentCale, DateTimeUtil.yyyy_MM_dd))) {
strHtml13 = "<font color=\"#CAD6FF\">免费等待至 </font>"
+ "<b><font color=\"#FFFFFF\"><big>" + DateTimeUtil.formatCalendarToString(currentCale, DateTimeUtil.TAXI_HH_mm) + "</big></b></font>";
+ "<b><font color=\"#FFFFFF\"><big>" + DateTimeUtil.formatCalendarToString(currentCale, DateTimeUtil.HH_mm) + "</big></b></font>";
} else {
strHtml13 = "<font color=\"#CAD6FF\">免费等待至</font>"
+ "<font color=\"#FFFFFF\"><big>" + DateTimeUtil.formatCalendarToString(currentCale, DateTimeUtil.TAXI_MM_dd_HH_mm) + "</big></font>";
+ "<font color=\"#FFFFFF\"><big>" + DateTimeUtil.formatCalendarToString(currentCale, DateTimeUtil.MM_dd_HH_mm) + "</big></font>";
}
mDistanceAndTime3.setText(Html.fromHtml(strHtml13));
@@ -315,16 +313,16 @@ public class TaxiBeingServerdOrdersFragment extends BaseTaxiUIFragment
Calendar currentCale = DateTimeUtils.getCurrentDateTime();
Calendar startCale = DateTimeUtil.formatLongToCalendar(order.bookingTime);
String currentDay = DateTimeUtil.formatCalendarToString(currentCale, DateTimeUtil.TAXI_yyyy_MM_dd);
String startDay = DateTimeUtil.formatCalendarToString(startCale, DateTimeUtil.TAXI_yyyy_MM_dd);
String currentDay = DateTimeUtil.formatCalendarToString(currentCale, DateTimeUtil.yyyy_MM_dd);
String startDay = DateTimeUtil.formatCalendarToString(startCale, DateTimeUtil.yyyy_MM_dd);
String strHtml1 = "";
if (currentDay.equals(startDay)) {
strHtml1 = "<font color=\"#CAD6FF\">乘客将于</font><br>"
+ "<b><font color=\"#FFFFFF\"><big><big>" + DateTimeUtil.formatCalendarToString(startCale, DateTimeUtil.TAXI_HH_mm) + "</big></big></font></b>"
+ "<b><font color=\"#FFFFFF\"><big><big>" + DateTimeUtil.formatCalendarToString(startCale, DateTimeUtil.HH_mm) + "</big></big></font></b>"
+ "<font color=\"#CAD6FF\"> 用车</font>";
} else {
strHtml1 = "<font color=\"#CAD6FF\">乘客将于</font><br>"
+ "<b><font color=\"#FFFFFF\"><big><big>" + DateTimeUtil.formatCalendarToString(startCale, DateTimeUtil.TAXI_MM_dd_HH_mm) + "</big></big></font></b>"
+ "<b><font color=\"#FFFFFF\"><big><big>" + DateTimeUtil.formatCalendarToString(startCale, DateTimeUtil.MM_dd_HH_mm) + "</big></big></font></b>"
+ "<font color=\"#CAD6FF\"> 用车</font>";
}
mOrderOtherContent3.setText(Html.fromHtml(strHtml1));

View File

@@ -94,12 +94,12 @@ public class TaxiGrabOrderFragment extends BaseTaxiUIFragment implements View.On
mGrabResultAnimView.setVisibility(View.GONE);
Calendar calendar = DateTimeUtil.formatLongToCalendar(order.bookingTime);
if (DateTimeUtil.compareDateIsCurrentDay(calendar)){
mOrderReserverTime.setText("用车时间:今天 "+ DateTimeUtil.formatCalendarToString(calendar, DateTimeUtil.TAXI_HH_mm));
VoiceNotice.showNotice("预约单,今天"+ DateTimeUtil.formatCalendarToString(calendar, DateTimeUtil.TAXI_HH_mm)+""
mOrderReserverTime.setText("用车时间:今天 "+ DateTimeUtil.formatCalendarToString(calendar, DateTimeUtil.HH_mm));
VoiceNotice.showNotice("预约单,今天"+ DateTimeUtil.formatCalendarToString(calendar, DateTimeUtil.HH_mm)+""
+order.startSiteAddr+""+order.endSiteAddr);
}else {
mOrderReserverTime.setText("用车时间:"+ DateTimeUtil.formatCalendarToString(calendar, DateTimeUtil.TAXI_MM_dd_HH_mm));
VoiceNotice.showNotice("预约单,"+ DateTimeUtil.formatCalendarToString(calendar, DateTimeUtil.TAXI_MM_dd)+""
mOrderReserverTime.setText("用车时间:"+ DateTimeUtil.formatCalendarToString(calendar, DateTimeUtil.MM_dd_HH_mm));
VoiceNotice.showNotice("预约单,"+ DateTimeUtil.formatCalendarToString(calendar, DateTimeUtil.MM_dd)+""
+order.startSiteAddr+""+order.endSiteAddr);
}
mOrderStartStation.setText(order.startSiteAddr);

View File

@@ -398,7 +398,7 @@ public class TaxiPersonalDialogFragment extends
Button orderStatusBt, Button orderTypeBt, TextView orderNumTv){
Calendar calendar= Calendar.getInstance();
calendar.setTimeInMillis(queryRespBean.createTime);
orderTimeTv.setText(DateTimeUtil.formatCalendarToString(calendar, DateTimeUtil.TAXI_HH_mm));
orderTimeTv.setText(DateTimeUtil.formatCalendarToString(calendar, DateTimeUtil.HH_mm));
startStationTv.setText(queryRespBean.startSiteAddr);
endStationTv.setText(queryRespBean.endSiteAddr);
orderStatusBt.setText(getOrderStatus(queryRespBean.orderStatus,orderStatusBt));

View File

@@ -130,9 +130,9 @@ public class TaxiReserveOrdersFragment extends BaseTaxiUIFragment {
OrderQueryRespBean.Result order = datas.get(position);
Calendar calendar = DateTimeUtil.formatLongToCalendar(order.bookingTime);
if (DateTimeUtil.compareDateIsCurrentDay(calendar)){
viewHolder.orderTime.setText("用车时间:今天"+ DateTimeUtil.formatCalendarToString(calendar, DateTimeUtil.TAXI_HH_mm));
viewHolder.orderTime.setText("用车时间:今天"+ DateTimeUtil.formatCalendarToString(calendar, DateTimeUtil.HH_mm));
}else {
viewHolder.orderTime.setText("用车时间:"+ DateTimeUtil.formatCalendarToString(calendar, DateTimeUtil.TAXI_MM_dd_HH_mm));
viewHolder.orderTime.setText("用车时间:"+ DateTimeUtil.formatCalendarToString(calendar, DateTimeUtil.MM_dd_HH_mm));
}
viewHolder.orderCancel.setOnClickListener(new View.OnClickListener() {
@Override

View File

@@ -0,0 +1,79 @@
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.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.function.api.msgbox.IMsgBoxListener
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxEventListenerManager
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.MMsgBoxBubbleAdapter
import com.mogo.eagle.core.function.msgbox.MsgBoxConfig
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import kotlinx.android.synthetic.main.layout_m_msg_box_bubble.view.*
class MMsgBoxBubbleView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : ConstraintLayout(context, attrs, defStyleAttr), IMsgBoxListener {
private val TAG = "MMsgBoxBubbleView"
private val dataList :ArrayList<MsgBoxBean> = ArrayList()
private var mMsgBoxBubbleAdapter: MMsgBoxBubbleAdapter?= null
private var isShowData = true
init {
LayoutInflater.from(context).inflate(R.layout.layout_m_msg_box_bubble, this, true)
initView()
}
private fun initView(){
val linearLayoutManager = LinearLayoutManager(context)
linearLayoutManager.orientation = LinearLayoutManager.VERTICAL
mMsgBoxBubbleAdapter = MMsgBoxBubbleAdapter(context as Activity)
rvMBubbleList.adapter = mMsgBoxBubbleAdapter
rvMBubbleList.layoutManager = linearLayoutManager
}
/**
* 是否展示接收消息,消息盒子打开状态下不再展示气泡消息
* @param show true 展示false 不展示
*/
fun isShowData(show: Boolean){
isShowData = show
}
override fun onDataChanged(category: MsgCategory, msgBoxList: MsgBoxBean) {
UiThreadHandler.post {
if(category == MsgCategory.NOTICE){
if(msgBoxList.type == MsgBoxType.NOTICE || msgBoxList.type == MsgBoxType.V2X
|| msgBoxList.type == MsgBoxType.OBU){
MsgBoxConfig.noticeList.add(msgBoxList)
if(isShowData){
CallerMsgBoxEventListenerManager.invokeUpdateTipListener(true)
dataList.add(msgBoxList)
mMsgBoxBubbleAdapter?.setData(dataList)
}
}
}
}
}
override fun onAttachedToWindow() {
super.onAttachedToWindow()
CallerMsgBoxListenerManager.addListener(TAG,this)
}
override fun onDetachedFromWindow() {
super.onDetachedFromWindow()
CallerMsgBoxListenerManager.removeListener(TAG)
}
}

View File

@@ -0,0 +1,85 @@
package com.mogo.eagle.core.function.hmi.ui.msgbox
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.View
import androidx.constraintlayout.widget.ConstraintLayout
import com.mogo.eagle.core.data.msgbox.MsgBoxBean
import com.mogo.eagle.core.function.api.msgbox.IMsgBoxEventListener
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxEventListenerManager
import com.mogo.eagle.core.function.hmi.R
import kotlinx.android.synthetic.main.view_m1_msg_box_button.view.*
class MMsgBoxButtonView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
): ConstraintLayout(context, attrs, defStyleAttr), IMsgBoxEventListener {
companion object {
const val TAG = "MMsgBoxButtonView"
}
private var clickListener: ClickListener? = null
init{
LayoutInflater.from(context).inflate(R.layout.view_m1_msg_box_button, this, true)
initView()
}
private fun initView(){
cbMsgBoxM1.setOnCheckedChangeListener { _, isChecked ->
clickListener?.showMsgBoxList(isChecked)
msgBoxMTipView.visibility = View.GONE
}
}
override fun onAttachedToWindow() {
super.onAttachedToWindow()
CallerMsgBoxEventListenerManager.addListener(TAG,this)
}
override fun onDetachedFromWindow() {
super.onDetachedFromWindow()
CallerMsgBoxEventListenerManager.removeListener(TAG)
}
override fun onSummaryClickEvent() {
}
/**
* 更新新消息提醒红点
* @param isShow true:展示false:不展示
*/
override fun onUpdateTipEvent(isShow: Boolean) {
if(isShow){
msgBoxMTipView.visibility = View.VISIBLE
}else{
msgBoxMTipView.visibility = View.GONE
}
}
override fun onBubbleOperationClickEvent(msgBoxBean: MsgBoxBean) {
cbMsgBoxM1.performClick()
}
override fun onBubbleV2XClickEvent(msgBoxBean: MsgBoxBean) {
cbMsgBoxM1.performClick()
}
override fun onBubbleReportClickEvent(msgBoxBean: MsgBoxBean) {
cbMsgBoxM1.performClick()
}
fun setClickListener(clickListener: ClickListener) {
this.clickListener = clickListener
}
interface ClickListener{
fun showMsgBoxList(show: Boolean)
}
}

View File

@@ -0,0 +1,105 @@
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.MsgCategory
import com.mogo.eagle.core.function.api.msgbox.IMsgBoxEventListener
import com.mogo.eagle.core.function.api.msgbox.IMsgBoxListener
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxEventListenerManager
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxListenerManager
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.MMsgBoxListAdapter
import com.mogo.eagle.core.utilcode.util.ResourceUtils.getDrawable
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import kotlinx.android.synthetic.main.layout_m_msg_box_list.view.*
class MMsgBoxListView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : ConstraintLayout(context, attrs, defStyleAttr), IMsgBoxListener, IMsgBoxEventListener {
private val TAG = "MMsgBoxListView"
var mMsgBoxListAdapter: MMsgBoxListAdapter?= null
private var noticeList: ArrayList<MsgBoxBean> ?= null
init{
LayoutInflater.from(context).inflate(R.layout.layout_m_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_m)?.let { divider.setDrawable(it) }
mMsgBoxListAdapter = MMsgBoxListAdapter(context as Activity)
rvMList.adapter = mMsgBoxListAdapter
rvMList.layoutManager = linearLayoutManager
rvMList.addItemDecoration(divider)
//获取通知消息列表
noticeList= CallerMsgBoxManager.getCachedNotifyData() as ArrayList<MsgBoxBean>?
noticeList = noticeList?.let { ArrayList(it.reversed()) }
noticeList?.let {
mMsgBoxListAdapter?.setData(it)
}
}
override fun onDataChanged(category: MsgCategory, msgBoxList: MsgBoxBean) {
UiThreadHandler.post{
if(category == MsgCategory.NOTICE){
if(msgBoxList.type == MsgBoxType.NOTICE || msgBoxList.type == MsgBoxType.V2X
|| msgBoxList.type == MsgBoxType.OBU){
noticeList?.add(0,msgBoxList)
noticeList?.let {
mMsgBoxListAdapter?.setData(it)
}
}
}
}
}
override fun onAttachedToWindow() {
super.onAttachedToWindow()
CallerMsgBoxListenerManager.addListener(TAG,this)
CallerMsgBoxEventListenerManager.addListener(TAG,this)
}
override fun onDetachedFromWindow() {
super.onDetachedFromWindow()
CallerMsgBoxListenerManager.removeListener(TAG)
CallerMsgBoxEventListenerManager.removeListener(TAG)
}
override fun onSummaryClickEvent() {
}
override fun onUpdateTipEvent(isShow: Boolean) {
}
override fun onBubbleOperationClickEvent(msgBoxBean: MsgBoxBean) {
}
override fun onBubbleV2XClickEvent(msgBoxBean: MsgBoxBean) {
noticeList?.let {
rvMList.scrollToPosition(it.indexOf(msgBoxBean))
}
}
override fun onBubbleReportClickEvent(msgBoxBean: MsgBoxBean) {
}
}

View File

@@ -0,0 +1,176 @@
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.DataSourceType
import com.mogo.eagle.core.data.enums.EventTypeEnumNew
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.transform.GlideRoundedCornersTransform
import com.mogo.eagle.core.utilcode.util.TimeUtils
import com.mogo.eagle.core.utilcode.util.TimeUtils.getHourMinFormat
import com.mogo.eagle.core.widget.RoundCanClickConstraintLayout
class MMsgBoxBubbleAdapter(private val activity: Activity): RecyclerView.Adapter<RecyclerView.ViewHolder>() {
private var data: ArrayList<MsgBoxBean> ?= null
private val notice: Int = 1
private val v2x: Int = 2
private val summary: Int = 3
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 {
return when (viewType) {
notice -> {
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_m_msg_box_notice,parent,false)
BubbleNoticeHolder(view)
}
summary -> {
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_m_msg_box_summary,parent,false)
BubbleSummaryHolder(view)
}
else -> {
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_m_msg_box_v2x,parent,false)
BubbleV2XHolder(view)
}
}
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
when (holder) {
is BubbleNoticeHolder -> {
data?.let {
val noticeFrCloudMsg = it[position].bean as NoticeFrCloudMsg
if(noticeFrCloudMsg.type == 0){
val noticeNormalData = noticeFrCloudMsg.noticeNormalData
holder.tvMNoticeTime.text = TimeUtils.millis2String(it[position].timestamp,getHourMinFormat())
holder.tvMNoticeContent.text = noticeNormalData?.content
GlideApp.with(activity).load(noticeNormalData?.imageUrl).optionalTransform(
GlideRoundedCornersTransform(
20f,
GlideRoundedCornersTransform.CornerType.ALL
)
).into(holder.ivMNoticeImage)
holder.tvMNoticeCheck.setOnClickListener {
//云公告
noticeNormalData?.let { it1 -> CallerHmiManager.showNoticeNormalData(it1) }
}
}else if(noticeFrCloudMsg.type == 1){
val noticeTrafficStylePushData = noticeFrCloudMsg.trafficPushData
holder.tvMNoticeTime.text = TimeUtils.millis2String(it[position].timestamp,getHourMinFormat())
holder.tvMNoticeContent.text = noticeTrafficStylePushData?.content
GlideApp.with(activity).load(noticeTrafficStylePushData?.poiImgUrl).optionalTransform(
GlideRoundedCornersTransform(
20f,
GlideRoundedCornersTransform.CornerType.ALL
)
).into(holder.ivMNoticeImage)
holder.tvMNoticeCheck.setOnClickListener {
//云公告
noticeTrafficStylePushData?.let { it1 -> CallerHmiManager.showTrafficBanner(it1) }
}
}
}
}
is BubbleV2XHolder -> {
data?.let {
val msgBoxBean = it[position]
val v2XMsg = msgBoxBean.bean as V2XMsg
holder.tvMV2XTime.text = TimeUtils.millis2String(it[position].timestamp,getHourMinFormat())
holder.tvMV2XContent.text = v2XMsg.content
holder.ivMV2XImage.setImageDrawable(activity.resources.getDrawable(
EventTypeEnumNew.getUpdateIconRes(v2XMsg.type)))
holder.clMVeXLayout.setOnClickListener {
CallerMsgBoxEventListenerManager.invokeBubbleV2XListener(msgBoxBean)
}
}
}
is BubbleSummaryHolder -> {
data?.let {
val summaryMsg= it[position].bean as V2XMsg
holder.tvMSummaryTime.text = TimeUtils.millis2String(it[position].timestamp,getHourMinFormat())
holder.tvMSummaryContent.text = summaryMsg.content
holder.tvMSummaryCheck.setOnClickListener {
//跳转全览模式
// CallerHmiManager.showSmallFragment()
CallerMsgBoxEventListenerManager.invokeSummaryListener()
}
}
}
}
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 {
return if(data!![position].type == MsgBoxType.NOTICE){
notice
}else if(data!![position].type == MsgBoxType.V2X && data!![position].sourceType == DataSourceType.SUMMARY){
summary
} else{
v2x
}
}
//Notice
class BubbleNoticeHolder(itemView: View): RecyclerView.ViewHolder(itemView){
var ivMNoticeImage: ImageView = itemView.findViewById(R.id.ivMNoticeImage)
var tvMNoticeTitle: TextView = itemView.findViewById(R.id.tvMNoticeTitle)
var tvMNoticeContent: TextView = itemView.findViewById(R.id.tvMNoticeContent)
var tvMNoticeCheck: TextView = itemView.findViewById(R.id.tvMNoticeCheck)
var tvMNoticeTime: TextView = itemView.findViewById(R.id.tvMNoticeTime)
}
//OBU、V2X
class BubbleV2XHolder(itemView: View): RecyclerView.ViewHolder(itemView){
var ivMV2XImage: ImageView = itemView.findViewById(R.id.ivMV2XImage)
var tvMV2XTime: TextView = itemView.findViewById(R.id.tvMV2XTime)
var tvMV2XContent: TextView = itemView.findViewById(R.id.tvMV2XContent)
var clMVeXLayout: RoundCanClickConstraintLayout = itemView.findViewById(R.id.clMVeXLayout)
}
//汇总消息
class BubbleSummaryHolder(itemView: View): RecyclerView.ViewHolder(itemView){
var tvMSummaryContent: TextView = itemView.findViewById(R.id.tvMSummaryContent)
var tvMSummaryCheck: TextView = itemView.findViewById(R.id.tvMSummaryCheck)
var tvMSummaryTime: TextView = itemView.findViewById(R.id.tvMSummaryTime)
}
}

View File

@@ -0,0 +1,150 @@
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.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.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.transform.GlideRoundedCornersTransform
import com.mogo.eagle.core.utilcode.util.TimeUtils
import com.mogo.eagle.core.utilcode.util.TimeUtils.getHourMinFormat
import com.mogo.eagle.core.utilcode.mogo.glide.GlideApp
class MMsgBoxListAdapter(private val activity: Activity): RecyclerView.Adapter<RecyclerView.ViewHolder>() {
private var data: List<MsgBoxBean> ?= null
private val notice: Int = 1
private val v2x: Int = 2
private val summary: Int = 3
fun setData(data: List<MsgBoxBean>){
this.data = data
notifyDataSetChanged()
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return when (viewType) {
notice -> {
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_m_msg_list_notice,parent,false)
ListNoticeHolder(view)
}
summary -> {
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_m_msg_list_summary,parent,false)
ListSummaryHolder(view)
}
else -> {
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_m_msg_list_v2x,parent,false)
ListV2XHolder(view)
}
}
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
when (holder) {
is ListNoticeHolder -> {
data?.let {
val noticeFrCloudMsg = it[position].bean as NoticeFrCloudMsg
if(noticeFrCloudMsg.type == 0){
val noticeNormalData = noticeFrCloudMsg.noticeNormalData
holder.tvMNoticeTime.text = TimeUtils.millis2String(it[position].timestamp,getHourMinFormat())
holder.tvMNoticeContent.text = noticeNormalData?.content
GlideApp.with(activity).load(noticeNormalData?.imageUrl).optionalTransform(
GlideRoundedCornersTransform(
20f,
GlideRoundedCornersTransform.CornerType.ALL
)
).into(holder.ivMNoticeImage)
holder.tvMNoticeCheck.setOnClickListener {
//云公告
noticeNormalData?.let { it1 -> CallerHmiManager.showNoticeNormalData(it1) }
}
}else if(noticeFrCloudMsg.type == 1){
val noticeTrafficStylePushData = noticeFrCloudMsg.trafficPushData
holder.tvMNoticeTime.text = TimeUtils.millis2String(it[position].timestamp,getHourMinFormat())
holder.tvMNoticeContent.text = noticeTrafficStylePushData?.content
GlideApp.with(activity).load(noticeTrafficStylePushData?.poiImgUrl).optionalTransform(
GlideRoundedCornersTransform(
20f,
GlideRoundedCornersTransform.CornerType.ALL
)
).into(holder.ivMNoticeImage)
holder.tvMNoticeCheck.setOnClickListener {
//云公告
noticeTrafficStylePushData?.let { it1 -> CallerHmiManager.showTrafficBanner(it1) }
}
}
}
}
is ListV2XHolder -> {
data?.let {
val msgBoxBean = it[position]
val v2XMsg = msgBoxBean.bean as V2XMsg
holder.tvMV2XTime.text = TimeUtils.millis2String(it[position].timestamp,getHourMinFormat())
holder.tvMV2XContent.text = v2XMsg.content
holder.ivMV2XImage.setImageDrawable(activity.resources.getDrawable(
EventTypeEnumNew.getUpdateIconRes(v2XMsg.type)))
}
}
is ListSummaryHolder -> {
data?.let {
val summaryMsg= it[position].bean as V2XMsg
holder.tvMSummaryTime.text = TimeUtils.millis2String(it[position].timestamp,getHourMinFormat())
holder.tvMSummaryContent.text = summaryMsg.content
holder.tvMSummaryCheck.setOnClickListener {
//跳转全览模式
// CallerHmiManager.showSmallFragment()
CallerMsgBoxEventListenerManager.invokeSummaryListener()
}
}
}
}
}
override fun getItemCount() = data?.size ?: 0
override fun getItemViewType(position: Int): Int {
return if(data!![position].type == MsgBoxType.NOTICE){
notice
}else if(data!![position].type == MsgBoxType.V2X && data!![position].sourceType == DataSourceType.SUMMARY){
summary
} else{
v2x
}
}
//Notice
class ListNoticeHolder(itemView: View): RecyclerView.ViewHolder(itemView){
var ivMNoticeImage: ImageView = itemView.findViewById(R.id.ivMNoticeImage)
var tvMNoticeTitle: TextView = itemView.findViewById(R.id.tvMNoticeTitle)
var tvMNoticeContent: TextView = itemView.findViewById(R.id.tvMNoticeContent)
var tvMNoticeCheck: TextView = itemView.findViewById(R.id.tvMNoticeCheck)
var tvMNoticeTime: TextView = itemView.findViewById(R.id.tvMNoticeTime)
}
//OBU、V2X
class ListV2XHolder(itemView: View): RecyclerView.ViewHolder(itemView){
var ivMV2XImage: ImageView = itemView.findViewById(R.id.ivMV2XImage)
var tvMV2XTime: TextView = itemView.findViewById(R.id.tvMV2XTime)
var tvMV2XContent: TextView = itemView.findViewById(R.id.tvMV2XContent)
}
//汇总消息
class ListSummaryHolder(itemView: View): RecyclerView.ViewHolder(itemView){
var tvMSummaryContent: TextView = itemView.findViewById(R.id.tvMSummaryContent)
var tvMSummaryCheck: TextView = itemView.findViewById(R.id.tvMSummaryCheck)
var tvMSummaryTime: TextView = itemView.findViewById(R.id.tvMSummaryTime)
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

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="#C0C7DA"/>
<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_m_normal" android:state_checked="false" />
<item android:drawable="@drawable/icon_msg_box_m_select" android:state_checked="true" />
</selector>

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="450dp"
android:layout_height="110dp"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="#FFFFFFFF"
app:roundLayoutRadius="24dp"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
>
<ImageView
android:id="@+id/ivMNoticeImage"
android:layout_width="110dp"
android:layout_height="110dp"
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/tvMNoticeTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="官方公告"
android:textColor="#FF203555"
android:textSize="25dp"
android:layout_marginStart="10dp"
app:layout_constraintLeft_toRightOf="@id/ivMNoticeImage"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@id/tvMNoticeContent"
/>
<TextView
android:id="@+id/tvMNoticeContent"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textColor="#CC203555"
android:textSize="20dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="@id/tvMNoticeTitle"
app:layout_constraintTop_toBottomOf="@id/tvMNoticeTitle"
app:layout_constraintRight_toRightOf="@id/tvMNoticeTime"
android:gravity="start"
android:maxLines="1"
android:ellipsize="end"
/>
<TextView
android:id="@+id/tvMNoticeCheck"
android:layout_width="110dp"
android:layout_height="110dp"
android:text="查 看"
android:textColor="#FF1366FB"
android:textSize="20dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:gravity="center"
/>
<View
android:layout_width="1dp"
android:layout_height="64dp"
android:background="#C0C7DA"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintRight_toLeftOf="@id/tvMNoticeCheck"
/>
<TextView
android:id="@+id/tvMNoticeTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#B34A5B77"
android:textSize="18dp"
app:layout_constraintTop_toTopOf="@id/tvMNoticeTitle"
app:layout_constraintBottom_toBottomOf="@id/tvMNoticeTitle"
app:layout_constraintRight_toLeftOf="@id/tvMNoticeCheck"
android:layout_marginEnd="10dp"
/>
</com.mogo.eagle.core.widget.RoundConstraintLayout>

View File

@@ -0,0 +1,82 @@
<?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="450dp"
android:layout_height="110dp"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="#FFFFFFFF"
app:roundLayoutRadius="24dp"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
>
<ImageView
android:id="@+id/ivMSummaryImage"
android:layout_width="110dp"
android:layout_height="110dp"
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/tvMSummaryTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="蘑菇小助手"
android:textColor="#FF203555"
android:textSize="25dp"
android:layout_marginStart="10dp"
app:layout_constraintLeft_toRightOf="@id/ivMSummaryImage"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@id/tvMSummaryContent"
/>
<TextView
android:id="@+id/tvMSummaryContent"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textColor="#CC203555"
android:textSize="20dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="@id/tvMSummaryTitle"
app:layout_constraintTop_toBottomOf="@id/tvMSummaryTitle"
app:layout_constraintRight_toRightOf="@id/tvMSummaryTime"
android:gravity="start"
/>
<TextView
android:id="@+id/tvMSummaryCheck"
android:layout_width="110dp"
android:layout_height="110dp"
android:text="查 看"
android:textColor="#FF1366FB"
android:textSize="20dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:gravity="center"
/>
<View
android:layout_width="1dp"
android:layout_height="64dp"
android:background="#C0C7DA"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintRight_toLeftOf="@id/tvMSummaryCheck"
/>
<TextView
android:id="@+id/tvMSummaryTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#B34A5B77"
android:textSize="18dp"
app:layout_constraintTop_toTopOf="@id/tvMSummaryTitle"
app:layout_constraintBottom_toBottomOf="@id/tvMSummaryTitle"
app:layout_constraintRight_toLeftOf="@id/tvMSummaryCheck"
android:layout_marginEnd="10dp"
/>
</com.mogo.eagle.core.widget.RoundConstraintLayout>

View File

@@ -0,0 +1,51 @@
<?xml version="1.0" encoding="utf-8"?>
<com.mogo.eagle.core.widget.RoundCanClickConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/clMVeXLayout"
android:layout_width="450dp"
android:layout_height="110dp"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="#FFFFFFFF"
app:roundLayoutRadius="24dp"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp">
<ImageView
android:id="@+id/ivMV2XImage"
android:layout_width="83dp"
android:layout_height="83dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
android:layout_marginStart="10dp"
/>
<TextView
android:id="@+id/tvMV2XTime"
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="#99203555"
android:textSize="18dp"
android:layout_marginEnd="20dp"
/>
<TextView
android:id="@+id/tvMV2XContent"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toRightOf="@id/ivMV2XImage"
app:layout_constraintRight_toLeftOf="@id/tvMV2XTime"
android:gravity="start"
android:maxLines="1"
android:ellipsize="end"
android:textColor="#FF203555"
android:textSize="25dp"
android:layout_marginStart="20dp"
android:layout_marginEnd="20dp"
/>
</com.mogo.eagle.core.widget.RoundCanClickConstraintLayout>

View File

@@ -0,0 +1,80 @@
<?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="100dp"
xmlns:app="http://schemas.android.com/apk/res-auto">
<ImageView
android:id="@+id/ivMNoticeImage"
android:layout_width="68dp"
android:layout_height="68dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
android:src="@drawable/icon_passenger_operation"
android:layout_marginStart="10dp"
/>
<TextView
android:id="@+id/tvMNoticeTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="官方公告"
android:textColor="#FF203555"
android:textSize="25dp"
android:layout_marginStart="10dp"
app:layout_constraintLeft_toRightOf="@id/ivMNoticeImage"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@id/tvMNoticeContent"
/>
<TextView
android:id="@+id/tvMNoticeContent"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textColor="#CC203555"
android:textSize="20dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="@id/tvMNoticeTitle"
app:layout_constraintTop_toBottomOf="@id/tvMNoticeTitle"
app:layout_constraintRight_toRightOf="@id/tvMNoticeTime"
android:gravity="start"
android:maxLines="1"
android:ellipsize="end"
/>
<TextView
android:id="@+id/tvMNoticeCheck"
android:layout_width="100dp"
android:layout_height="100dp"
android:text="查 看"
android:textColor="#FF1366FB"
android:textSize="20dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:gravity="center"
/>
<View
android:layout_width="1dp"
android:layout_height="50dp"
android:background="#C0C7DA"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintRight_toLeftOf="@id/tvMNoticeCheck"
/>
<TextView
android:id="@+id/tvMNoticeTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#CC203555"
android:textSize="18dp"
app:layout_constraintTop_toTopOf="@id/tvMNoticeTitle"
app:layout_constraintBottom_toBottomOf="@id/tvMNoticeTitle"
app:layout_constraintRight_toLeftOf="@id/tvMNoticeCheck"
android:layout_marginEnd="10dp"
/>
</androidx.constraintlayout.widget.ConstraintLayout>

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="100dp"
xmlns:app="http://schemas.android.com/apk/res-auto">
<ImageView
android:id="@+id/ivMSummaryImage"
android:layout_width="68dp"
android:layout_height="68dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
android:src="@drawable/icon_passenger_operation"
android:layout_marginStart="10dp"
/>
<TextView
android:id="@+id/tvMSummaryTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="蘑菇小助手"
android:textColor="#FF203555"
android:textSize="25dp"
android:layout_marginStart="20dp"
app:layout_constraintLeft_toRightOf="@id/ivMSummaryImage"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@id/tvMSummaryContent"
/>
<TextView
android:id="@+id/tvMSummaryContent"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textColor="#CC203555"
android:textSize="20dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvMSummaryTitle"
app:layout_constraintLeft_toLeftOf="@id/tvMSummaryTitle"
app:layout_constraintRight_toRightOf="@id/tvMSummaryTime"
android:gravity="start"
/>
<TextView
android:id="@+id/tvMSummaryCheck"
android:layout_width="100dp"
android:layout_height="100dp"
android:text="查 看"
android:textColor="#FF1366FB"
android:textSize="20dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:gravity="center"
/>
<View
android:layout_width="1dp"
android:layout_height="50dp"
android:background="#C0C7DA"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintRight_toLeftOf="@id/tvMSummaryCheck"
/>
<TextView
android:id="@+id/tvMSummaryTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#CC203555"
android:textSize="18dp"
app:layout_constraintTop_toTopOf="@id/tvMSummaryTitle"
app:layout_constraintBottom_toBottomOf="@id/tvMSummaryTitle"
app:layout_constraintRight_toLeftOf="@id/tvMSummaryCheck"
android:layout_marginEnd="10dp"
/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,46 @@
<?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="100dp"
xmlns:app="http://schemas.android.com/apk/res-auto">
<ImageView
android:id="@+id/ivMV2XImage"
android:layout_width="68dp"
android:layout_height="68dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
android:layout_marginStart="10dp"
/>
<TextView
android:id="@+id/tvMV2XTime"
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="#CC203555"
android:textSize="18dp"
android:layout_marginEnd="10dp"
/>
<TextView
android:id="@+id/tvMV2XContent"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toRightOf="@id/ivMV2XImage"
app:layout_constraintRight_toLeftOf="@id/tvMV2XTime"
android:gravity="start"
android:maxLines="1"
android:ellipsize="end"
android:textColor="#FF203555"
android:textSize="25dp"
android:layout_marginStart="20dp"
android:layout_marginEnd="20dp"
/>
</androidx.constraintlayout.widget.ConstraintLayout>

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/rvMBubbleList"
android:layout_width="450dp"
android:layout_height="wrap_content"
>
</androidx.recyclerview.widget.RecyclerView>

View File

@@ -0,0 +1,21 @@
<com.mogo.eagle.core.widget.RoundConstraintLayout
android:layout_width="450dp"
android:layout_height="520dp"
android:background="#FFFFFFFF"
app:roundLayoutRadius="40dp"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_marginBottom="16dp">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvMList"
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="30dp"
android:layout_marginEnd="30dp"
/>
</com.mogo.eagle.core.widget.RoundConstraintLayout>

View File

@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="79dp"
android:layout_height="79dp"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<!--消息盒子M1选择入口-->
<CheckBox
android:id="@+id/cbMsgBoxM1"
android:layout_width="79dp"
android:layout_height="79dp"
android:background="@drawable/selector_msg_box_m"
android:button="@null"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent" />
<!--乘客端消息提示-->
<View
android:id="@+id/msgBoxMTipView"
android:layout_width="15dp"
android:layout_height="15dp"
android:background="@drawable/version_upgrade_tips_background"
android:translationZ="30dp"
android:visibility="gone"
app:layout_constraintCircle="@id/cbMsgBoxM1"
app:layout_constraintCircleAngle="40"
app:layout_constraintCircleRadius="50dp"
tools:ignore="MissingConstraints" />
</androidx.constraintlayout.widget.ConstraintLayout>