[1.1.2]
[结束订单跳转到还车页面]
This commit is contained in:
yangyakun
2023-03-01 21:08:23 +08:00
parent a66d00efc3
commit 822ceb71d5
10 changed files with 407 additions and 82 deletions

View File

@@ -27,6 +27,7 @@ import com.mogo.eagle.core.utilcode.util.CoordinateUtils
import com.mogo.eagle.core.utilcode.util.CountDownTimer
import com.mogo.eagle.core.utilcode.util.NetworkUtils
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import com.mogo.och.bus.passenger.bean.LoopInfo
import com.mogo.och.bus.passenger.bean.response.*
import com.mogo.och.bus.passenger.callback.IBusPassengerADASStatusCallback
@@ -87,7 +88,9 @@ object CharterPassengerModel {
private var orderStatus: OrderStatusEnum = OrderStatusEnum.NoOrderUnuse
private var orderStatusChangeListener: IOrderStatusChangeListener? = null
private val orderStatusChangeListeners =
ConcurrentHashMap<String, IOrderStatusChangeListener>()
private var iDistanceTimeCallback: IDistanceTimeCallback? = null
@@ -250,8 +253,13 @@ object CharterPassengerModel {
mRoutePoints.addAll(latLngModels)
}
fun setStatusChangeListener(orderStatusChangeListener: IOrderStatusChangeListener?) {
this.orderStatusChangeListener = orderStatusChangeListener
fun setStatusChangeListener(tag:String,orderStatusChangeListener: IOrderStatusChangeListener?) {
if (tag.isBlank()) return
if (orderStatusChangeListener == null) {
orderStatusChangeListeners.remove(tag)
return
}
orderStatusChangeListeners[tag] = orderStatusChangeListener
}
fun setCarTypeChangeListener(carTypeChageListener: ICarTypeCallback?){
this.carTypeChageListener = carTypeChageListener
@@ -597,10 +605,18 @@ object CharterPassengerModel {
private fun setOrderStatus(orderStatus: OrderStatusEnum) {
if (this.orderStatus != orderStatus) {
this.orderStatus = orderStatus
orderStatusChangeListener?.onStatusChange(this.orderStatus)
for (callback in orderStatusChangeListeners.values) {
callback.onStatusChange(this.orderStatus)
}
}
}
fun setEndOrderStatus(){
UiThreadHandler.postDelayed({
setOrderStatus(OrderStatusEnum.NoOrderUse)
},1000)
}
/**
* 计算需要禁用的站点
*/

View File

@@ -0,0 +1,100 @@
package com.mogo.och.bus.passenger.presenter
import androidx.lifecycle.LifecycleOwner
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.mogo.och.bus.passenger.model.CharterPassengerModel
import com.mogo.och.bus.passenger.model.VoiceManager
import com.mogo.och.bus.passenger.ui.M1CarUserNoOrderFragment
import com.mogo.och.bus.passenger.ui.M1ContainFragment
import com.mogo.och.common.module.manager.OCHM1LightAirconditionDoorStatusManager
import com.mogo.och.common.module.manager.OCHPlanningStopSideStatusManager
import com.mogo.och.common.module.voice.VoiceNotice
import io.reactivex.disposables.Disposable
class BusPassengerCarUseAndNoOrderPresenter(view: M1CarUserNoOrderFragment?) :
BusBasePassengerFunctionDevicePresenter<M1CarUserNoOrderFragment?>(view),
OCHM1LightAirconditionDoorStatusManager.OCHM1LightAirconditionDoorCallback {
companion object {
private const val TAG = "BusPassengerFunctionPresenter"
}
private var subscribe: Disposable? = null
private var subscribeDoorStatus: Disposable? = null
private var gnssSpeed = 0.0
override fun onCreate(owner: LifecycleOwner) {
super.onCreate(owner)
OCHM1LightAirconditionDoorStatusManager.addListener(TAG, this)
CharterPassengerModel.setControllerStatusCallback(TAG) { location ->
location?.let {
gnssSpeed = it.gnssInfo.vehicleSpeed
}
}
}
override fun onDestroy(owner: LifecycleOwner) {
super.onDestroy(owner)
OCHM1LightAirconditionDoorStatusManager.removeListener(TAG)
disposeSubscribe(subscribe)
disposeSubscribe(subscribeDoorStatus)
}
override fun onDoorStatusCallback(isOpen: Boolean, isFirst: Boolean) {
if (!isFirst) {
if (isOpen) {
ToastUtils.showShort("已开启车门")
} else {
ToastUtils.showShort("已关门车门")
}
}
}
fun openDoor() {
val canOpenOrCloseDoor = canOpenOrCloseDoor()
if (!canOpenOrCloseDoor.isNullOrEmpty()) {
ToastUtils.showShort(canOpenOrCloseDoor)
return
}
disposeSubscribe(subscribe)
subscribe = createSubscribe(1000) {
CallerAutoPilotControlManager.sendRoboBusJinlvM1FrontDoorCmd(0)
}
CallerAutoPilotControlManager.sendRoboBusJinlvM1FrontDoorCmd(1)
disposeSubscribe(subscribeDoorStatus)
subscribeDoorStatus = createSubscribe {
if (!OCHM1LightAirconditionDoorStatusManager.doorStatus.isOpen) {
ToastUtils.showShort("车门无法开启,请使用车内物理按钮")
}
}
}
fun closeDoor() {
val canOpenOrCloseDoor = canOpenOrCloseDoor()
if (!canOpenOrCloseDoor.isNullOrBlank()) {
ToastUtils.showShort(canOpenOrCloseDoor)
return
}
disposeSubscribe(subscribe)
subscribe = createSubscribe(1000) {
CallerAutoPilotControlManager.sendRoboBusJinlvM1FrontDoorCmd(0)
}
CallerAutoPilotControlManager.sendRoboBusJinlvM1FrontDoorCmd(2)
disposeSubscribe(subscribeDoorStatus)
subscribeDoorStatus = createSubscribe {
if (OCHM1LightAirconditionDoorStatusManager.doorStatus.isOpen) {
ToastUtils.showShort("车门无法关闭,请使用车内物理按钮")
}
}
}
private fun canOpenOrCloseDoor(): String? {
if (gnssSpeed < 0.01) {
return null
} else {
return "车辆正在运行、请稍后再试"
}
}
}

View File

@@ -3,7 +3,9 @@ package com.mogo.och.bus.passenger.presenter
import androidx.lifecycle.LifecycleOwner
import com.mogo.eagle.core.data.BaseData
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import com.mogo.och.bus.passenger.model.CharterPassengerModel
import com.mogo.och.bus.passenger.model.OrderStatusEnum
import com.mogo.och.bus.passenger.ui.M1EarlyEndOrderFragment
import com.mogo.och.common.module.biz.network.OchCommonServiceCallback
@@ -28,6 +30,7 @@ class BusPassengerFunctionEarlyEndOrderPresenter(view: M1EarlyEndOrderFragment?)
override fun onSuccess(data: BaseData?) {
if (null != data && 0 == data.code) {
ToastUtils.showShort("结束成功")
CharterPassengerModel.setEndOrderStatus()
mView?.closeDialogContaion()
}
}

View File

@@ -9,9 +9,13 @@ import com.mogo.och.bus.passenger.ui.M1OrderFragment
class BusPassengerFunctionOrderPresenter(view: M1OrderFragment?) :
BusBasePassengerFunctionDevicePresenter<M1OrderFragment?>(view), IOrderStatusChangeListener {
companion object{
const val TAG = "BusPassengerFunctionOrderPresenter"
}
override fun onCreate(owner: LifecycleOwner) {
super.onCreate(owner)
CharterPassengerModel.setStatusChangeListener(this)
CharterPassengerModel.setStatusChangeListener(TAG,this)
}
override fun onResume(owner: LifecycleOwner) {
@@ -21,7 +25,7 @@ class BusPassengerFunctionOrderPresenter(view: M1OrderFragment?) :
override fun onDestroy(owner: LifecycleOwner) {
super.onDestroy(owner)
CharterPassengerModel.setStatusChangeListener(null)
CharterPassengerModel.setStatusChangeListener(TAG,null)
}
override fun onStatusChange(currentStatus: OrderStatusEnum) {
mView?.setViewByOrderStatus(currentStatus)

View File

@@ -17,6 +17,8 @@ import com.mogo.och.bus.passenger.callback.IBusPassengerControllerStatusCallback
import com.mogo.och.bus.passenger.callback.ICarTypeCallback
import com.mogo.och.bus.passenger.callback.IDistanceTimeCallback
import com.mogo.och.bus.passenger.model.CharterPassengerModel
import com.mogo.och.bus.passenger.model.IOrderStatusChangeListener
import com.mogo.och.bus.passenger.model.OrderStatusEnum
import com.mogo.och.bus.passenger.ui.MainFragment
import com.mogo.och.common.module.bean.dpmsg.ChangeDestMsg
import com.mogo.och.common.module.bean.dpmsg.DPMsgType
@@ -28,7 +30,8 @@ import java.util.*
class BusPassengerPresenter(view: MainFragment?) :
BusBasePassengerFunctionDevicePresenter<MainFragment?>(view),
IBusPassengerControllerStatusCallback, IDistanceTimeCallback, ICarTypeCallback {
IBusPassengerControllerStatusCallback, IDistanceTimeCallback, ICarTypeCallback,
IOrderStatusChangeListener {
private var subscribe: Disposable? = null
private var gnssSpeed = 0.0f
@@ -39,6 +42,7 @@ class BusPassengerPresenter(view: MainFragment?) :
CharterPassengerModel.setControllerStatusCallback(TAG,this)
CharterPassengerModel.setiDistanceTimeCallback(this)
CharterPassengerModel.setCarTypeChangeListener(this)
CharterPassengerModel.setStatusChangeListener(TAG,this)
CallerTelematicListenerManager.addListener(TAG, msgReceived)
setCarChangeListener(R.raw.aiqinghao)
//BusPassengerModel.setMoGoAutopilotPlanningListener(this)
@@ -174,4 +178,18 @@ class BusPassengerPresenter(view: MainFragment?) :
fun haveOrder():Boolean {
return CharterPassengerModel.hasOrder()
}
override fun onStatusChange(currentStatus: OrderStatusEnum) {
when (currentStatus) {
OrderStatusEnum.Nothing -> {}
OrderStatusEnum.NoOrderUnuse -> {
mView?.closeOpenAndCloseDoor()
}
OrderStatusEnum.OrderNoLine -> {}
OrderStatusEnum.OrdersWithLine -> {}
OrderStatusEnum.NoOrderUse -> {
mView?.showOpenAndCloseDoor()
}
}
}
}

View File

@@ -0,0 +1,124 @@
package com.mogo.och.bus.passenger.ui
import android.os.Bundle
import android.util.Log
import android.view.View
import android.view.WindowManager
import android.widget.CompoundButton
import androidx.fragment.app.DialogFragment
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentTransaction
import com.mogo.commons.mvp.MvpDialogFragment
import com.mogo.eagle.core.utilcode.kotlin.onClick
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_BUS_P
import com.mogo.eagle.core.utilcode.util.BarUtils
import com.mogo.eagle.core.utilcode.util.SharedPrefs
import com.mogo.och.bus.passenger.R
import com.mogo.och.bus.passenger.presenter.BusPassengerCarUseAndNoOrderPresenter
import com.mogo.och.bus.passenger.presenter.BusPassengerFunctionPresenter
import kotlinx.android.synthetic.m1.m1_contain_fragment.*
import kotlinx.android.synthetic.m1.m1_order_end.*
/**
* @author: yangyakun
* @date: 2023/1/28
*/
class M1CarUserNoOrderFragment :
MvpDialogFragment<M1CarUserNoOrderFragment?, BusPassengerCarUseAndNoOrderPresenter?>() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setStyle(STYLE_NO_TITLE, R.style.DialogFullScreen) //dialog全屏
}
private fun initFragment() {
}
override fun getLayoutId(): Int = R.layout.m1_order_end
override fun getTagName(): String = TAG
override fun initViews() {
dialog?.setCancelable(false)
iv_end_order_opendoor.onClick {
mPresenter?.openDoor()
}
iv_end_order_closedoor.onClick {
mPresenter?.closeDoor()
}
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
dialog?.window?.let {
BarUtils.hideStatusBarAndSticky(it)
it.addFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE)
dialog?.setOnShowListener { _ ->
it.clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE)
BarUtils.hideStatusBarAndSticky(it)
}
}
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
}
override fun createPresenter(): BusPassengerCarUseAndNoOrderPresenter =
BusPassengerCarUseAndNoOrderPresenter(this)
/**
* 重写父类show()方法
* 避免出现java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
*/
override fun show(manager: FragmentManager, tag: String?) {
try {
var cls = this.javaClass.superclass ?: return
while (true) {
if (cls.name == "java.lang.Object") {
break
}
cls = cls.superclass!!
if (cls == DialogFragment::class.java) {
break
}
}
val mDismissed = cls.getDeclaredField("mDismissed")
val mShownByMe = cls.getDeclaredField("mShownByMe")
mDismissed.isAccessible = true
mShownByMe.isAccessible = true
mDismissed.setBoolean(this, false)
mShownByMe.setBoolean(this, true)
if (isAdded) { //解决方法就是添加这行代码如果已经添加了就移除掉然后再show就不会出现Fragment already added的错误了。
return
}
val ft: FragmentTransaction = manager.beginTransaction()
ft.add(this, tag)
ft.commitAllowingStateLoss()
} catch (e: Exception) {
Log.e("DialogFragment", "show", e.fillInStackTrace())
}
}
override fun onViewStateRestored(savedInstanceState: Bundle?) {
CallerLogger.d(M_BUS_P+TAG, "onViewStateRestored")
super.onViewStateRestored(savedInstanceState)
}
companion object {
const val TAG = "BusPassengerFunctionFragment"
@JvmStatic
fun newInstance(): M1CarUserNoOrderFragment {
val args = Bundle()
val fragment = M1CarUserNoOrderFragment()
fragment.arguments = args
return fragment
}
}
}

View File

@@ -18,6 +18,7 @@ import com.mogo.eagle.core.utilcode.util.ClickUtils
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.mogo.och.bus.passenger.R
import com.mogo.och.bus.passenger.model.CharterPassengerModel
import com.mogo.och.bus.passenger.model.VoiceManager
import com.mogo.och.bus.passenger.presenter.BusPassengerPresenter
import com.mogo.och.common.module.biz.constant.LoginStatusManager
import kotlinx.android.synthetic.m1.m1_main_fragment.*
@@ -31,6 +32,7 @@ class MainFragment :
MvpFragment<MainFragment?, BusPassengerPresenter?>() {
private var bpFunctionGroupDialogFragment: WeakReference<M1ContainFragment>? = null
private var m1CarUserNoOrderFragment: WeakReference<M1CarUserNoOrderFragment>? = null
override fun getLayoutId(): Int {
return R.layout.m1_main_fragment
@@ -70,7 +72,7 @@ class MainFragment :
}
ll_car_speed.onClick {
if (LoginStatusManager.isLogin()) {
// TODO: 结束订单
VoiceManager.endOrder()
CharterPassengerModel.arriveDest()
}else{
ToastUtils.showShort(AbsMogoApplication.getApp().getString(R.string.m1_please_login_driver))
@@ -196,6 +198,50 @@ class MainFragment :
super.onDestroyView()
}
fun showOpenAndCloseDoor() {
val fragmentByTag: Fragment? = childFragmentManager.findFragmentByTag(M1ContainFragment.TAG)
if (fragmentByTag is DialogFragment) {
if (fragmentByTag.dialog != null && fragmentByTag.dialog!!.isShowing) {
CallerLogger.d(SceneConstant.M_BUS_P + TAG, "正在展示")
return
}
if (fragmentByTag.dialog != null && fragmentByTag.isAdded) {
if (AppStateManager.currentActivity() == null) { // 没有在当前应用内 在启动页面关闭应用
CallerLogger.d(SceneConstant.M_BUS_P + TAG, "权限验证")
return
}
}
}
if (m1CarUserNoOrderFragment?.get() == null) {
m1CarUserNoOrderFragment = WeakReference(M1CarUserNoOrderFragment.newInstance())
}
val bpFunctionGroup = m1CarUserNoOrderFragment?.get()
if (bpFunctionGroup != null) {
if (bpFunctionGroup.dialog != null && bpFunctionGroup.dialog!!.isShowing) {
return
}
if (bpFunctionGroup.isAdded) { //解决方法就是添加这行代码如果已经添加了就移除掉然后再show就不会出现Fragment already added的错误了。
parentFragmentManager.beginTransaction().remove(bpFunctionGroup)
.commitAllowingStateLoss()
}
if (ClickUtils.isFastClick()) {
bpFunctionGroup.show(parentFragmentManager, TAG)
CallerLogger.d(SceneConstant.M_BUS_P + TAG, "展示开关门")
} else {
CallerLogger.d(
SceneConstant.M_BUS_P + TAG, "dialog 1s内执行一次"
)
}
}
}
fun closeOpenAndCloseDoor(){
val bpFunctionGroup = m1CarUserNoOrderFragment?.get()
bpFunctionGroup?.let {
bpFunctionGroup.dismissAllowingStateLoss()
}
}
companion object {
private const val TAG = "BusPassengerRouteFragment"
}

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/m1_order_closedoor_press" android:state_pressed="true"/>
<item android:drawable="@drawable/m1_order_closedoor_press" android:state_pressed="false"/>
<item android:drawable="@drawable/m1_order_closedoor_normal" android:state_pressed="false"/>
<item android:drawable="@drawable/m1_order_closedoor_normal"/>
</selector>

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/m1_order_opendoor_press" android:state_pressed="true"/>
<item android:drawable="@drawable/m1_order_opendoor_press" android:state_pressed="false"/>
<item android:drawable="@drawable/m1_order_opendoor_normal" android:state_pressed="false"/>
<item android:drawable="@drawable/m1_order_opendoor_normal"/>
</selector>

View File

@@ -1,85 +1,99 @@
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
<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:background="@drawable/m1_function_bg"
tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout">
<!-- 结束包车 后展示的界面 根据车辆状态来显示 -->
<ImageView
android:id="@+id/iv_early_end"
android:layout_width="@dimen/dp_252"
android:layout_height="@dimen/dp_172"
android:layout_marginTop="@dimen/dp_63"
android:layout_marginStart="@dimen/dp_56"
android:src="@drawable/m1_order_end_car"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_end_title"
android:text="本次包车旅程已结束。"
android:textSize="@dimen/dp_44"
app:layout_constraintVertical_chainStyle="packed"
android:textColor="@color/bus_p_m1_23293b"
app:layout_constraintStart_toEndOf="@+id/iv_early_end"
app:layout_constraintTop_toTopOf="@+id/iv_early_end"
app:layout_constraintBottom_toTopOf="@+id/tv_next_cloud"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/tv_next_cloud"
android:text="蘑菇车联祝您旅途愉快,欢迎下次乘坐!"
android:textSize="@dimen/dp_31"
android:textColor="@color/bus_p_m1_485173"
app:layout_constraintStart_toEndOf="@+id/iv_early_end"
app:layout_constraintBottom_toBottomOf="@+id/iv_early_end"
app:layout_constraintTop_toBottomOf="@+id/tv_end_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<ImageView
android:id="@+id/iv_end_order_opendoor"
android:layout_width="@dimen/dp_108"
android:layout_height="@dimen/dp_108"
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@drawable/bus_p_function_setting_soft_b_shape"
android:clickable="true"
app:layout_constraintBottom_toBottomOf="parent"
android:src="@drawable/m1_order_end_opendoor_selecotr"
android:layout_marginBottom="@dimen/dp_100"
app:layout_constraintEnd_toStartOf="@+id/iv_end_order_closedoor"
app:layout_constraintStart_toStartOf="parent" />
<ImageView
android:id="@+id/iv_end_order_closedoor"
android:layout_width="@dimen/dp_108"
android:layout_height="@dimen/dp_108"
android:layout_marginBottom="@dimen/dp_100"
app:layout_constraintBottom_toBottomOf="parent"
android:src="@drawable/m1_order_end_closedoor_selecotr"
app:layout_constraintDimensionRatio="1031:500"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/iv_end_order_opendoor" />
android:layout_marginBottom="@dimen/dp_179"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintWidth_percent="0.53698">
<!-- 结束包车 后展示的界面 根据车辆状态来显示 -->
<ImageView
android:id="@+id/iv_early_end"
android:layout_width="@dimen/dp_252"
android:layout_height="@dimen/dp_172"
android:layout_marginStart="@dimen/dp_56"
android:layout_marginTop="@dimen/dp_63"
android:src="@drawable/m1_order_end_car"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:text="开车门"
android:textSize="@dimen/dp_28"
android:textColor="@color/bus_p_m1_23293b"
app:layout_constraintStart_toStartOf="@+id/iv_end_order_opendoor"
app:layout_constraintEnd_toEndOf="@+id/iv_end_order_opendoor"
app:layout_constraintTop_toBottomOf="@+id/iv_end_order_opendoor"
android:layout_marginTop="@dimen/dp_19"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/tv_end_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="本次包车旅程已结束。"
android:textColor="@color/bus_p_m1_23293b"
android:textSize="@dimen/dp_44"
app:layout_constraintBottom_toTopOf="@+id/tv_next_cloud"
app:layout_constraintStart_toEndOf="@+id/iv_early_end"
app:layout_constraintTop_toTopOf="@+id/iv_early_end"
app:layout_constraintVertical_chainStyle="packed" />
<TextView
android:text="关车门"
android:textSize="@dimen/dp_28"
android:textColor="@color/bus_p_m1_23293b"
app:layout_constraintStart_toStartOf="@+id/iv_end_order_closedoor"
app:layout_constraintEnd_toEndOf="@+id/iv_end_order_closedoor"
app:layout_constraintTop_toBottomOf="@+id/iv_end_order_closedoor"
android:layout_marginTop="@dimen/dp_19"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/tv_next_cloud"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="蘑菇车联祝您旅途愉快,欢迎下次乘坐!"
android:textColor="@color/bus_p_m1_485173"
android:textSize="@dimen/dp_31"
app:layout_constraintBottom_toBottomOf="@+id/iv_early_end"
app:layout_constraintStart_toEndOf="@+id/iv_early_end"
app:layout_constraintTop_toBottomOf="@+id/tv_end_title" />
<ImageView
android:id="@+id/iv_end_order_opendoor"
android:layout_width="@dimen/dp_108"
android:layout_height="@dimen/dp_108"
android:layout_marginBottom="@dimen/dp_100"
android:src="@drawable/m1_order_end_opendoor_selecotr"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/iv_end_order_closedoor"
app:layout_constraintStart_toStartOf="parent" />
<ImageView
android:id="@+id/iv_end_order_closedoor"
android:layout_width="@dimen/dp_108"
android:layout_height="@dimen/dp_108"
android:layout_marginBottom="@dimen/dp_100"
android:src="@drawable/m1_order_end_closedoor_selecotr"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/iv_end_order_opendoor" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_19"
android:text="开车门"
android:textColor="@color/bus_p_m1_23293b"
android:textSize="@dimen/dp_28"
app:layout_constraintEnd_toEndOf="@+id/iv_end_order_opendoor"
app:layout_constraintStart_toStartOf="@+id/iv_end_order_opendoor"
app:layout_constraintTop_toBottomOf="@+id/iv_end_order_opendoor" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_19"
android:text="关车门"
android:textColor="@color/bus_p_m1_23293b"
android:textSize="@dimen/dp_28"
app:layout_constraintEnd_toEndOf="@+id/iv_end_order_closedoor"
app:layout_constraintStart_toStartOf="@+id/iv_end_order_closedoor"
app:layout_constraintTop_toBottomOf="@+id/iv_end_order_closedoor" />
</merge>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>