From a031d0441dcc28d0b2ae3f1ddd6dd393e94da862 Mon Sep 17 00:00:00 2001 From: yangyakun Date: Wed, 13 Sep 2023 21:00:20 +0800 Subject: [PATCH] =?UTF-8?q?[6.1.0]=20[unmanned]=20[=E8=BD=A6=E9=97=A8]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presenter/BusPassengerPresenter.kt | 2 +- .../ui/softcontrol/SoftControlViewModel.kt | 2 +- .../LightAirconditionDoorStatusManager.kt | 1 + .../devicemanage/TaxiDoorStateManager.kt | 129 +++++++++ .../callback/DoorStateCallback.kt | 19 ++ .../LightAirconditionDoorCallback.kt | 2 +- .../manager/devicemanage/data/DoorStatus.kt | 11 +- .../module/utils/FrameAnimatorContainer.kt | 4 + .../mogo/och/common/module/utils/RxUtils.kt | 9 +- .../ui/startautopilot/StartAutopilotView.kt | 105 ++++--- .../startautopilot/StartAutopilotViewModel.kt | 77 ++---- .../src/main/res/drawable/image_00000_0.webp | Bin 0 -> 1044 bytes .../layout/taxi_p_start_autopilot_view.xml | 1 + .../taxi/passenger/model/AutopilotManager.kt | 16 +- .../passenger/ui/TaxiPassengerBaseFragment.kt | 4 +- .../ui/startautopilot/StartAutopilotView.kt | 260 +++++++++--------- .../startautopilot/StartAutopilotViewModel.kt | 116 ++++---- .../src/main/res/drawable/image_00000_0.webp | Bin 0 -> 1044 bytes .../layout/taxi_p_start_autopilot_view.xml | 1 + 19 files changed, 464 insertions(+), 295 deletions(-) create mode 100644 OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/devicemanage/TaxiDoorStateManager.kt create mode 100644 OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/devicemanage/callback/DoorStateCallback.kt rename OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/devicemanage/{ => callback}/LightAirconditionDoorCallback.kt (92%) create mode 100644 OCH/taxi/passenger/src/main/res/drawable/image_00000_0.webp create mode 100644 OCH/taxi/unmanned-passenger/src/main/res/drawable/image_00000_0.webp diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/presenter/BusPassengerPresenter.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/presenter/BusPassengerPresenter.kt index 50f6138ea2..e71b9228e4 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/presenter/BusPassengerPresenter.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/presenter/BusPassengerPresenter.kt @@ -34,7 +34,7 @@ import com.mogo.och.charter.passenger.ui.overmapview.MakerWithSiteNamewithCheck import com.mogo.och.common.module.biz.network.OchCommonServiceCallback import com.mogo.och.common.module.manager.autopilotmanager.OCHAdasAbilityManager import com.mogo.och.common.module.manager.StopSideStatusManager -import com.mogo.och.common.module.manager.devicemanage.LightAirconditionDoorCallback +import com.mogo.och.common.module.manager.devicemanage.callback.LightAirconditionDoorCallback import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil import com.mogo.och.common.module.voice.VoiceNotice import com.mogo.och.common.module.wigets.toast.ToastCharterUtils diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/softcontrol/SoftControlViewModel.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/softcontrol/SoftControlViewModel.kt index af30004679..37c887b1dd 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/softcontrol/SoftControlViewModel.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/softcontrol/SoftControlViewModel.kt @@ -6,7 +6,7 @@ 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.UiThreadHandler import com.mogo.och.common.module.wigets.toast.ToastCharterUtils -import com.mogo.och.common.module.manager.devicemanage.LightAirconditionDoorCallback +import com.mogo.och.common.module.manager.devicemanage.callback.LightAirconditionDoorCallback import com.mogo.och.common.module.manager.devicemanage.LightAirconditionDoorStatusManager import com.mogo.och.common.module.manager.devicemanage.data.AirconditionStatus import com.mogo.och.common.module.manager.devicemanage.data.HeaterStatue diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/devicemanage/LightAirconditionDoorStatusManager.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/devicemanage/LightAirconditionDoorStatusManager.kt index 9f514b0204..af3e06b237 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/devicemanage/LightAirconditionDoorStatusManager.kt +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/devicemanage/LightAirconditionDoorStatusManager.kt @@ -3,6 +3,7 @@ package com.mogo.och.common.module.manager.devicemanage import chassis.VehicleStateOuterClass import com.mogo.eagle.core.function.api.autopilot.IMoGoRoboBusJinlvM1StatesListener import com.mogo.eagle.core.function.call.autopilot.CallerRoboBusJinlvM1StatesListenerManager +import com.mogo.och.common.module.manager.devicemanage.callback.LightAirconditionDoorCallback import com.mogo.och.common.module.manager.devicemanage.data.AirconditionStatus import com.mogo.och.common.module.manager.devicemanage.data.DoorStatus import com.mogo.och.common.module.manager.devicemanage.data.HeaterStatue diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/devicemanage/TaxiDoorStateManager.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/devicemanage/TaxiDoorStateManager.kt new file mode 100644 index 0000000000..daf0ec52eb --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/devicemanage/TaxiDoorStateManager.kt @@ -0,0 +1,129 @@ +package com.mogo.och.common.module.manager.devicemanage + +import chassis.Chassis +import chassis.VehicleStateOuterClass +import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisDoorStateListener +import com.mogo.eagle.core.function.call.autopilot.CallerChassisDoorStateListenerManager +import com.mogo.eagle.core.function.call.base.CallerBase +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant +import com.mogo.och.common.module.manager.devicemanage.callback.DoorStateCallback +import com.mogo.och.common.module.manager.devicemanage.data.DoorPosition +import com.mogo.och.common.module.manager.devicemanage.data.DoorState + +object TaxiDoorStateManager : IMoGoChassisDoorStateListener, + CallerBase() { + private val TAG = TaxiDoorStateManager::class.java.simpleName + + @Volatile + private var haveOpenDoor: Boolean? = null + + init { + CallerChassisDoorStateListenerManager.addListener(TAG, this) + } + + override fun doSomeAfterAddListener(tag: String, listener: DoorStateCallback) { + val doorList = CallerChassisDoorStateListenerManager.getDoorList() + if(doorList is MutableList){ + doSomeAfterAddListenerInner(doorList) + doorList.forEach { + onAutopilotSingleDoorState(it.number,it.status) + } + }else{ + doSomeAfterAddListenerInner(mutableListOf()) + } + } + + private fun doSomeAfterAddListenerInner(doorList: MutableList){ + var have = false + doorList.forEach { + if (it.status == 1) {//0关闭 1开着 2未知 + have = true + } + } + haveOpenDoor = have + invokeOpenState(have) + } + + /** + * 主要用来判断是否有门开着 + */ + override fun onAutopilotDoorState(doorList: MutableList) { + var have = false + doorList.forEach { + if (it.status == 1) {//0关闭 1开着 2未知 + have = true + } + } + if (have != haveOpenDoor) { + haveOpenDoor = have + invokeOpenState(have) + } + } + + /** + * 判断单个车门是否开着 + */ + override fun onAutopilotSingleDoorState(num: Chassis.DoorNumber, status: Int) { + CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "门太变化:${num}--${status}") + when (status) { + 0 -> { exchangeEnum(num, DoorState.CLOSE)} + 1 -> {exchangeEnum(num, DoorState.OPEN)} + 2 -> {exchangeEnum(num, DoorState.UNKNOWN)} + else -> {} + } + + } + + private fun exchangeEnum(num: Chassis.DoorNumber, state: DoorState) { + when (num) { + Chassis.DoorNumber.FRONT_LEFT -> { + invokeSingleDoorOpenState(DoorPosition.FRONT_LEFT, state) + } + + Chassis.DoorNumber.FRONT_RIGHT -> { + invokeSingleDoorOpenState(DoorPosition.FRONT_RIGHT, state) + } + + Chassis.DoorNumber.REAR_LEFT -> { + invokeSingleDoorOpenState(DoorPosition.REAR_LEFT, state) + } + + Chassis.DoorNumber.REAR_RIGHT -> { + invokeSingleDoorOpenState(DoorPosition.REAR_RIGHT, state) + } + + Chassis.DoorNumber.MIDDLE -> { + invokeSingleDoorOpenState(DoorPosition.MIDDLE, state) + } + + else -> {} + } + } + + /** + * @param have true 有车门开着 + * false 没有车门开着(可能开着可能未知) + */ + @Synchronized + private fun invokeOpenState(have: Boolean) { + M_LISTENERS.forEach { + val listener = it.value + listener.hasOpenDoor(have) + } + } + + /** + * @param doorPosition 车门位置 + * @param doorState 车门状态 + */ + @Synchronized + private fun invokeSingleDoorOpenState(doorPosition: DoorPosition,doorState: DoorState) { + M_LISTENERS.forEach { + val listener = it.value + listener.doorStateChangeCallback(doorPosition,doorState) + } + } + + +} \ No newline at end of file diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/devicemanage/callback/DoorStateCallback.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/devicemanage/callback/DoorStateCallback.kt new file mode 100644 index 0000000000..37886350be --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/devicemanage/callback/DoorStateCallback.kt @@ -0,0 +1,19 @@ +package com.mogo.och.common.module.manager.devicemanage.callback + +import com.mogo.och.common.module.manager.devicemanage.data.DoorPosition +import com.mogo.och.common.module.manager.devicemanage.data.DoorState + +interface DoorStateCallback { + + /** + * @param have true 有车门开着 + * false 没有车门开着(可能开着可能未知) + */ + fun hasOpenDoor(have:Boolean){} + + /** + * @param position 车门位置 + * @param state 当前车门状态 + */ + fun doorStateChangeCallback(position: DoorPosition,state: DoorState){} +} \ No newline at end of file diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/devicemanage/LightAirconditionDoorCallback.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/devicemanage/callback/LightAirconditionDoorCallback.kt similarity index 92% rename from OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/devicemanage/LightAirconditionDoorCallback.kt rename to OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/devicemanage/callback/LightAirconditionDoorCallback.kt index 69e1292ef4..a9a5f7f607 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/devicemanage/LightAirconditionDoorCallback.kt +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/devicemanage/callback/LightAirconditionDoorCallback.kt @@ -1,4 +1,4 @@ -package com.mogo.och.common.module.manager.devicemanage +package com.mogo.och.common.module.manager.devicemanage.callback import com.mogo.och.common.module.manager.devicemanage.data.AirconditionStatus import com.mogo.och.common.module.manager.devicemanage.data.HeaterStatue diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/devicemanage/data/DoorStatus.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/devicemanage/data/DoorStatus.kt index 370f8a5dac..7f6121e562 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/devicemanage/data/DoorStatus.kt +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/devicemanage/data/DoorStatus.kt @@ -1,3 +1,12 @@ package com.mogo.och.common.module.manager.devicemanage.data -data class DoorStatus(var isOpen: Boolean) \ No newline at end of file +data class DoorStatus(var isOpen: Boolean) + + +enum class DoorPosition { + FRONT_LEFT, FRONT_RIGHT, REAR_LEFT, REAR_RIGHT, MIDDLE +} + +enum class DoorState { + OPEN,CLOSE,UNKNOWN +} \ No newline at end of file diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/FrameAnimatorContainer.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/FrameAnimatorContainer.kt index e60bb084d5..a68c11dca2 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/FrameAnimatorContainer.kt +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/FrameAnimatorContainer.kt @@ -121,6 +121,10 @@ class FrameAnimatorContainer (resId: Int, fps: Int, imageView: ImageView,initFir mShouldRun = false } + fun isPlaying():Boolean{ + return mShouldRun + } + /** * 设置停止播放监听 * @param listener 设置监听 diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/RxUtils.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/RxUtils.kt index 8d41c08fec..f0216e8b3b 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/RxUtils.kt +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/RxUtils.kt @@ -36,12 +36,11 @@ object RxUtils { } } - fun isDisposed(disposable: Disposable?):Boolean{ - if(disposable!=null){ - return true + fun isNotDisposed(disposable: Disposable?):Boolean{ + if(disposable==null){ + return false } - - return false + return !disposable.isDisposed } // 调用Disposable.dispose() 时候会出现InterruptedException 导致出现崩溃 diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/startautopilot/StartAutopilotView.kt b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/startautopilot/StartAutopilotView.kt index c98aeccbac..75898fbfb0 100644 --- a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/startautopilot/StartAutopilotView.kt +++ b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/startautopilot/StartAutopilotView.kt @@ -5,6 +5,7 @@ import android.content.Context import android.util.AttributeSet import android.view.LayoutInflater import android.view.View +import androidx.core.content.ContextCompat import androidx.core.content.res.ResourcesCompat import androidx.lifecycle.ViewModelProvider import com.elegant.utils.UiThreadHandler @@ -14,6 +15,8 @@ import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant import com.mogo.eagle.core.utilcode.util.OverlayViewUtils import com.mogo.eagle.core.utilcode.util.ToastUtils +import com.mogo.och.common.module.manager.devicemanage.data.DoorPosition +import com.mogo.och.common.module.manager.devicemanage.data.DoorState import com.mogo.och.common.module.utils.FrameAnimatorContainer import com.mogo.och.taxi.passenger.R import com.mogo.och.taxi.passenger.widget.WindowRelativeLayout @@ -33,15 +36,24 @@ import kotlinx.android.synthetic.main.taxi_p_start_autopilot_view.view.cl_car_ty * @author: wangmingjun * @date: 2022/6/14 */ -class StartAutopilotView : WindowRelativeLayout, StartAutopilotViewModel.StartAutopilotCallback{ +class StartAutopilotView : WindowRelativeLayout, StartAutopilotViewModel.StartAutopilotCallback { constructor(context: Context) : super(context) constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet) - constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int) : super(context, attributeSet, defStyleAttr) + constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int) : super( + context, + attributeSet, + defStyleAttr + ) - constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super(context, attributeSet, defStyleAttr, defStyleRes) + constructor( + context: Context, + attributeSet: AttributeSet, + defStyleAttr: Int, + defStyleRes: Int + ) : super(context, attributeSet, defStyleAttr, defStyleRes) companion object { private val TAG = StartAutopilotView::class.java.simpleName @@ -50,9 +62,9 @@ class StartAutopilotView : WindowRelativeLayout, StartAutopilotViewModel.StartAu var isStarting = false - private var taxiPStartAutopilot: FrameAnimatorContainer?=null - private var taxiPStartAutopilotCar: FrameAnimatorContainer?=null - private var taxiPXiaozhiBelt: FrameAnimatorContainer?=null + private var taxiPStartAutopilot: FrameAnimatorContainer? = null + private var taxiPStartAutopilotCar: FrameAnimatorContainer? = null + private var taxiPXiaozhiBelt: FrameAnimatorContainer? = null init { @@ -61,27 +73,35 @@ class StartAutopilotView : WindowRelativeLayout, StartAutopilotViewModel.StartAu private fun initView() { LayoutInflater.from(context).inflate(R.layout.taxi_p_start_autopilot_view, this, true) - taxiPStartAutopilotCar = FrameAnimatorContainer(R.array.taxi_p_start_autopilot_car, 20,taxi_p_autopilot_starting) - taxiPStartAutopilotCar?.setOnAnimStopListener(object :FrameAnimatorContainer.OnAnimationStoppedListener{ + taxiPStartAutopilotCar = FrameAnimatorContainer( + R.array.taxi_p_start_autopilot_car, + 20, + taxi_p_autopilot_starting + ) + taxiPStartAutopilotCar?.setOnAnimStopListener(object : + FrameAnimatorContainer.OnAnimationStoppedListener { override fun AnimationStopped() { CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "动画暂停") } }) - taxiPStartAutopilot = FrameAnimatorContainer(R.array.taxi_p_start_autopilot, 15,taxi_p_autopilot_btn_bg) - taxiPStartAutopilot?.setOnAnimStopListener(object :FrameAnimatorContainer.OnAnimationStoppedListener{ + taxiPStartAutopilot = + FrameAnimatorContainer(R.array.taxi_p_start_autopilot, 15, taxi_p_autopilot_btn_bg,false) + taxiPStartAutopilot?.setOnAnimStopListener(object : + FrameAnimatorContainer.OnAnimationStoppedListener { override fun AnimationStopped() { CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "动画暂停") } }) - taxiPXiaozhiBelt = FrameAnimatorContainer(R.array.xiaozhi_belt, 15,iv_xiaozhi_belt) - taxiPXiaozhiBelt?.setOnAnimStopListener(object :FrameAnimatorContainer.OnAnimationStoppedListener{ + taxiPXiaozhiBelt = FrameAnimatorContainer(R.array.xiaozhi_belt, 15, iv_xiaozhi_belt) + taxiPXiaozhiBelt?.setOnAnimStopListener(object : + FrameAnimatorContainer.OnAnimationStoppedListener { override fun AnimationStopped() { CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "动画暂停") } }) } - fun startAutopilotBgAnimatorDrawable(isStart: Boolean) { + private fun startAutopilotBgAnimatorDrawable(isStart: Boolean) { if (isStart) { taxiPStartAutopilot?.start() } else { @@ -104,42 +124,43 @@ class StartAutopilotView : WindowRelativeLayout, StartAutopilotViewModel.StartAu actv_orderinfo.text = show } - override fun setDoorStatus( - doorPosition: StartAutopilotViewModel.DoorPosition, - isOpen: Boolean - ) { + override fun setDoorStatus(doorPosition: DoorPosition, state: DoorState) { when (doorPosition) { - StartAutopilotViewModel.DoorPosition.FRONT_LEFT -> { - if(isOpen){ + DoorPosition.FRONT_LEFT -> { + if (state == DoorState.OPEN) { actv_front_left_door.visibility = VISIBLE - }else{ + } else { actv_front_left_door.visibility = GONE } } - StartAutopilotViewModel.DoorPosition.FRONT_RIGHT -> { - if(isOpen){ + + DoorPosition.FRONT_RIGHT -> { + if (state == DoorState.OPEN) { actv_front_right_door.visibility = VISIBLE - }else{ + } else { actv_front_right_door.visibility = GONE } } - StartAutopilotViewModel.DoorPosition.REAR_LEFT -> { - if(isOpen){ + + DoorPosition.REAR_LEFT -> { + if (state == DoorState.OPEN) { actv_rear_left_door.visibility = VISIBLE - }else{ + } else { actv_rear_left_door.visibility = GONE } } - StartAutopilotViewModel.DoorPosition.REAR_RIGHT -> { - if(isOpen){ + + DoorPosition.REAR_RIGHT -> { + if (state == DoorState.OPEN) { actv_rear_right_door.visibility = VISIBLE - }else{ + } else { actv_rear_right_door.visibility = GONE } } - else ->{ - } + else -> { + + } } } @@ -150,15 +171,20 @@ class StartAutopilotView : WindowRelativeLayout, StartAutopilotViewModel.StartAu OverlayViewUtils.dismissOverlayView(this) } - fun updateStartAutopilotBtnStatus(isBoarded: Boolean) { + private fun updateStartAutopilotBtnStatus(isBoarded: Boolean) { taxi_p_start_autopilot?.let { if (isBoarded) { - it.setTextColor(resources.getColor(R.color.taxi_p_start_autopilot_txt_color)) + it.setTextColor( + ContextCompat.getColor(context, R.color.taxi_p_start_autopilot_txt_color) + ) it.background = null } else { - it.background = ResourcesCompat.getDrawable(resources,R.drawable.taxi_p_start_autopilot_txt_btn_bg,null) + it.background = + ContextCompat.getDrawable(context, R.drawable.taxi_p_start_autopilot_txt_btn_bg) taxi_p_autopilot_btn_bg!!.background = null - it.setTextColor(resources.getColor(R.color.taxi_p_start_autopilot_txt_un_color)) + it.setTextColor( + ContextCompat.getColor(context, R.color.taxi_p_start_autopilot_txt_un_color) + ) } it.tag = isBoarded it.text = resources.getString(R.string.taxi_p_start_autopilot_txt) @@ -166,7 +192,6 @@ class StartAutopilotView : WindowRelativeLayout, StartAutopilotViewModel.StartAu } - private fun startingCarBgAnimatorDrawable(isStart: Boolean) { if (isStart) { taxi_p_autopilot_starting!!.setImageResource(0) @@ -182,7 +207,9 @@ class StartAutopilotView : WindowRelativeLayout, StartAutopilotViewModel.StartAu if (start) { isStarting = true taxi_p_start_autopilot?.text = resources.getString(R.string.taxi_p_start_autopilot_loading) - taxi_p_start_autopilot?.setTextColor(resources.getColor(R.color.taxi_p_start_autopilot_txt_color)) + taxi_p_start_autopilot?.setTextColor( + ContextCompat.getColor(context, R.color.taxi_p_start_autopilot_txt_color) + ) startingAutopilotCountDown() } else { clearBgAnimDrawable() @@ -217,9 +244,9 @@ class StartAutopilotView : WindowRelativeLayout, StartAutopilotViewModel.StartAu override fun onVisibilityChanged(changedView: View, visibility: Int) { super.onVisibilityChanged(changedView, visibility) - if(HdMapBuildConfig.currentCarVrIconRes == R.raw.hq_h9){ + if (HdMapBuildConfig.currentCarVrIconRes == R.raw.hq_h9) { cl_car_type.setBackgroundResource(R.drawable.taxi_p_start_panel__hq_bg) - }else{ + } else { cl_car_type.setBackgroundResource(R.drawable.taxi_p_start_panel__df_bg) } } diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/startautopilot/StartAutopilotViewModel.kt b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/startautopilot/StartAutopilotViewModel.kt index 971ae44dff..6926be8ce1 100644 --- a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/startautopilot/StartAutopilotViewModel.kt +++ b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/startautopilot/StartAutopilotViewModel.kt @@ -1,19 +1,19 @@ package com.mogo.och.taxi.passenger.ui.startautopilot import androidx.lifecycle.ViewModel -import chassis.Chassis -import chassis.Chassis.DoorNumber -import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisDoorStateListener -import com.mogo.eagle.core.function.call.autopilot.CallerChassisDoorStateListenerManager import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant import com.mogo.eagle.core.utilcode.util.UiThreadHandler +import com.mogo.och.common.module.manager.devicemanage.data.DoorPosition import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerOrderStatusCallback import com.mogo.och.taxi.passenger.model.AutopilotManager import com.mogo.och.taxi.passenger.model.TaxiPassengerModel +import com.mogo.och.common.module.manager.devicemanage.TaxiDoorStateManager +import com.mogo.och.common.module.manager.devicemanage.callback.DoorStateCallback +import com.mogo.och.common.module.manager.devicemanage.data.DoorState class StartAutopilotViewModel : ViewModel(), IOCHTaxiPassengerOrderStatusCallback, - IMoGoChassisDoorStateListener { + DoorStateCallback { private val TAG = StartAutopilotViewModel::class.java.simpleName @@ -21,38 +21,28 @@ class StartAutopilotViewModel : ViewModel(), IOCHTaxiPassengerOrderStatusCallbac init { TaxiPassengerModel.setOrderStatusCallback(TAG, this) - CallerChassisDoorStateListenerManager.addListener(TAG, this) + TaxiDoorStateManager.addListener(TAG,this) } fun setStartAutopilotCallback(viewCallback: StartAutopilotCallback) { this.viewCallback = viewCallback TaxiPassengerModel.startOrStopReadyToAutopilotLoop(true) setOrderInfo() - setDoorInfo() - } - - private fun setDoorInfo() { - val doorList = CallerChassisDoorStateListenerManager.getDoorList() - CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "门太变化初始化:${doorList}") - doorList?.forEach { - exchangeEnum(it.number,it.status==1) - } } private fun setOrderInfo() { val currentOCHOrder = TaxiPassengerModel.currentOCHOrder currentOCHOrder?.let { val phone = it.passengerPhone - var show = "" - if (phone.length > 8) { + val show = if (phone.length > 8) { //截取电话号码前三位 - val phoneNumPre = phone.substring(0, 3); + val phoneNumPre = phone.substring(0, 3) //截取电话号码后四位 - val phoneNumFix = phone.substring(7); + val phoneNumFix = phone.substring(7) - show = "用户:$phoneNumPre****$phoneNumFix 目的地:${it.endSiteAddr}" + "用户:$phoneNumPre****$phoneNumFix 目的地:${it.endSiteAddr}" } else { - show = "用户:${phone} 目的地:${it.endSiteAddr}" + "用户:${phone} 目的地:${it.endSiteAddr}" } viewCallback?.setOrderInfo(show) } @@ -62,7 +52,7 @@ class StartAutopilotViewModel : ViewModel(), IOCHTaxiPassengerOrderStatusCallbac super.onCleared() this.viewCallback = null TaxiPassengerModel.setOrderStatusCallback(TAG, null) - CallerChassisDoorStateListenerManager.removeListener(TAG) + TaxiDoorStateManager.removeListener(TAG) } override fun onDriverHasCheckedPilotCondition(isBoarded: Boolean) { @@ -76,41 +66,18 @@ class StartAutopilotViewModel : ViewModel(), IOCHTaxiPassengerOrderStatusCallbac AutopilotManager.startAutopilot() } - override fun onAutopilotSingleDoorState(num: Chassis.DoorNumber, state: Int) { - super.onAutopilotSingleDoorState(num, state) - CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "门太变化:${num}--${state}") -// exchangeEnum(num,open) + override fun hasOpenDoor(have: Boolean) { + CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "车门是否开着:${have}") } - private fun exchangeEnum(num: Chassis.DoorNumber,open: Boolean){ - when (num) { - DoorNumber.FRONT_LEFT -> { - runMain(DoorPosition.FRONT_LEFT,open) - } - - DoorNumber.FRONT_RIGHT -> { - runMain(DoorPosition.FRONT_RIGHT,open) - } - - DoorNumber.REAR_LEFT -> { - runMain(DoorPosition.REAR_LEFT,open) - } - - DoorNumber.REAR_RIGHT -> { - runMain(DoorPosition.REAR_RIGHT,open) - } - - DoorNumber.MIDDLE -> { - runMain(DoorPosition.MIDDLE,open) - } - - else -> {} - } + override fun doorStateChangeCallback(position: DoorPosition, state: DoorState) { + CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "门太变化:${position}--${state}") + runMain(position,state) } - private fun runMain(posttion:DoorPosition,isOpen: Boolean){ + private fun runMain(posttion:DoorPosition,state: DoorState){ UiThreadHandler.post { - viewCallback?.setDoorStatus(posttion,isOpen) + viewCallback?.setDoorStatus(posttion,state) } } @@ -118,10 +85,6 @@ class StartAutopilotViewModel : ViewModel(), IOCHTaxiPassengerOrderStatusCallbac interface StartAutopilotCallback { fun handleStartAutopilotBtnStatus(isBoarded: Boolean) fun setOrderInfo(show: String) - fun setDoorStatus(doorPosition: DoorPosition,isOpen:Boolean) - } - - enum class DoorPosition { - FRONT_LEFT, FRONT_RIGHT, REAR_LEFT, REAR_RIGHT, MIDDLE + fun setDoorStatus(doorPosition: DoorPosition, state: DoorState) } } \ No newline at end of file diff --git a/OCH/taxi/passenger/src/main/res/drawable/image_00000_0.webp b/OCH/taxi/passenger/src/main/res/drawable/image_00000_0.webp new file mode 100644 index 0000000000000000000000000000000000000000..e0ca986452ca2a61c7ccf99f14b8c755b9c40e51 GIT binary patch literal 1044 zcmWIYbaUfjVPFV%bqWXzu!!JdU|^bNl~4&)5I^JRi=KXJ!EES2)1Tz_1~oVJ@TA3+6A3b`w1o`l>EbR#M<#*dWB2 znfI_fQQCp?4fFk+IqmyyTJqO!Dw6x1^2GMr$rIIYCr|i(TV3(}Hb3W4>Cs>rO%9Y~ UgEb5c|Nh_OSixlg%)TT70EgcriU0rr literal 0 HcmV?d00001 diff --git a/OCH/taxi/passenger/src/main/res/layout/taxi_p_start_autopilot_view.xml b/OCH/taxi/passenger/src/main/res/layout/taxi_p_start_autopilot_view.xml index 8f5a14ef0e..94a1d91d07 100644 --- a/OCH/taxi/passenger/src/main/res/layout/taxi_p_start_autopilot_view.xml +++ b/OCH/taxi/passenger/src/main/res/layout/taxi_p_start_autopilot_view.xml @@ -34,6 +34,7 @@ android:layout_width="1000dp" android:layout_height="500dp" android:clickable="false" + android:src="@drawable/image_00000_0" android:layout_marginBottom="@dimen/dp_62" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" diff --git a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/model/AutopilotManager.kt b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/model/AutopilotManager.kt index 0f953397ee..ebe3e8aa55 100644 --- a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/model/AutopilotManager.kt +++ b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/model/AutopilotManager.kt @@ -23,6 +23,8 @@ object AutopilotManager : IMoGoAutopilotStatusListener { private const val TAG = "AutopilotManager" + private var needSpeakByStartAutopilot = false + init { CallerAutoPilotStatusListenerManager.addListener(TAG, this) } @@ -33,14 +35,14 @@ object AutopilotManager : IMoGoAutopilotStatusListener { } - fun startAutopilot() { + fun startAutopilot():String { if (!checkCurrentOCHOrder()) { CallerLogger.e( SceneConstant.M_TAXI_P + TAG, "no order or order is empty." ) ToastUtils.showShort("当前订单不存在或异常!") - return + return "当前订单不存在或异常!" } if (TaxiPassengerModel.currentOCHOrder!!.orderStatus == TaxiPassengerOrderStatusEnum.UserArriveAtStart.code) { startAutoPilotServiceByPassenger() @@ -63,7 +65,7 @@ object AutopilotManager : IMoGoAutopilotStatusListener { TaxiPassengerModel.currentOCHOrder!!.orderNo, OCHAdasAbilityManager.getInstance().autopilotUnAbilityReason ) - return + return OCHAdasAbilityManager.getInstance().autopilotUnAbilityReason + ", 请稍候重试" } val parameters = initAutopilotControlParameters() if (parameters == null) { @@ -71,7 +73,7 @@ object AutopilotManager : IMoGoAutopilotStatusListener { SceneConstant.M_TAXI_P + TAG, "AutopilotControlParameters is empty." ) - return + return "自动化驾驶参数异常" } CallerAutoPilotControlManager.startAutoPilot(parameters) CallerLogger.d( @@ -89,6 +91,8 @@ object AutopilotManager : IMoGoAutopilotStatusListener { TaxiPassengerModel.currentOCHOrder!!.orderNo, TaxiPassengerModel.currentLineId ) + needSpeakByStartAutopilot = true + return "" } private fun initAutopilotControlParameters(): AutopilotControlParameters? { @@ -177,6 +181,9 @@ object AutopilotManager : IMoGoAutopilotStatusListener { TaxiPassengerModel.currentOCHOrder!!.orderNo, TaxiPassengerModel.currentLineId ) + if(needSpeakByStartAutopilot) { + VoiceNotice.showNotice("坐稳扶好,我们出发咯!", AIAssist.LEVEL2) + } //startServicePilotDone() } } @@ -196,7 +203,6 @@ object AutopilotManager : IMoGoAutopilotStatusListener { TaxiPassengerModel.currentLineId, object : OchCommonServiceCallback { override fun onSuccess(data: TaxiPassengerBaseRespBean) { - VoiceNotice.showNotice("坐稳扶好,我们出发咯!", AIAssist.LEVEL2) } override fun onFail(code: Int, msg: String) {} diff --git a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.kt b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.kt index 5478dd1fb8..0de99afb1c 100644 --- a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.kt +++ b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/TaxiPassengerBaseFragment.kt @@ -255,7 +255,9 @@ class TaxiPassengerBaseFragment() : OverlayViewUtils.showOverlayView(activity, it) } } else { - mStartAutopilotView?.get()?.closeAllAnimsAndView() + mStartAutopilotView?.get()?.let { + OverlayViewUtils.dismissOverlayView(it) + } mStartAutopilotView = null } } diff --git a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/startautopilot/StartAutopilotView.kt b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/startautopilot/StartAutopilotView.kt index ac4c02da94..e21bdecb8f 100644 --- a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/startautopilot/StartAutopilotView.kt +++ b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/startautopilot/StartAutopilotView.kt @@ -15,9 +15,13 @@ import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant import com.mogo.eagle.core.utilcode.util.OverlayViewUtils import com.mogo.eagle.core.utilcode.util.ToastUtils +import com.mogo.och.common.module.manager.devicemanage.data.DoorPosition +import com.mogo.och.common.module.manager.devicemanage.data.DoorState import com.mogo.och.common.module.utils.FrameAnimatorContainer +import com.mogo.och.common.module.utils.RxUtils import com.mogo.och.taxi.passenger.R import com.mogo.och.taxi.passenger.widget.WindowRelativeLayout +import io.reactivex.disposables.Disposable import kotlinx.android.synthetic.main.taxi_p_start_autopilot_view.view.actv_front_left_door import kotlinx.android.synthetic.main.taxi_p_start_autopilot_view.view.actv_front_right_door import kotlinx.android.synthetic.main.taxi_p_start_autopilot_view.view.actv_orderinfo @@ -31,29 +35,40 @@ import kotlinx.android.synthetic.main.taxi_p_start_autopilot_view.view.taxi_p_st import kotlinx.android.synthetic.main.taxi_p_start_autopilot_view.view.cl_car_type /** - * @author: wangmingjun - * @date: 2022/6/14 + * @author: yangyakun + * 页面状态: + * ①:不能启动自驾 + * ②:可以启动自驾 + * ③:启动自驾中 + * ④:启动自驾失败 + * ⑤:初始状态 */ -class StartAutopilotView : WindowRelativeLayout, StartAutopilotViewModel.StartAutopilotCallback{ +class StartAutopilotView : WindowRelativeLayout, StartAutopilotViewModel.StartAutopilotCallback { constructor(context: Context) : super(context) constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet) - constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int) : super(context, attributeSet, defStyleAttr) + constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int) : super( + context, + attributeSet, + defStyleAttr + ) - constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super(context, attributeSet, defStyleAttr, defStyleRes) + constructor( + context: Context, + attributeSet: AttributeSet, + defStyleAttr: Int, + defStyleRes: Int + ) : super(context, attributeSet, defStyleAttr, defStyleRes) companion object { private val TAG = StartAutopilotView::class.java.simpleName - private const val TIMER_START_AUTOPILOT_INTERVAL = 20 * 1000L } - var isStarting = false - - private var taxiPStartAutopilot: FrameAnimatorContainer?=null - private var taxiPStartAutopilotCar: FrameAnimatorContainer?=null - private var taxiPXiaozhiBelt: FrameAnimatorContainer?=null + private var taxiPStartAutopilot: FrameAnimatorContainer? = null + private var taxiPStartAutopilotCar: FrameAnimatorContainer? = null + private var taxiPXiaozhiBelt: FrameAnimatorContainer? = null init { @@ -62,186 +77,177 @@ class StartAutopilotView : WindowRelativeLayout, StartAutopilotViewModel.StartAu private fun initView() { LayoutInflater.from(context).inflate(R.layout.taxi_p_start_autopilot_view, this, true) - taxiPStartAutopilotCar = FrameAnimatorContainer(R.array.taxi_p_start_autopilot_car, 20,taxi_p_autopilot_starting) - taxiPStartAutopilotCar?.setOnAnimStopListener(object :FrameAnimatorContainer.OnAnimationStoppedListener{ + taxiPStartAutopilotCar = FrameAnimatorContainer( + R.array.taxi_p_start_autopilot_car, + 20, + taxi_p_autopilot_starting + ) + taxiPStartAutopilotCar?.setOnAnimStopListener(object : + FrameAnimatorContainer.OnAnimationStoppedListener { override fun AnimationStopped() { - CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "动画暂停") + CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "光圈动画暂停") } }) - taxiPStartAutopilot = FrameAnimatorContainer(R.array.taxi_p_start_autopilot, 15,taxi_p_autopilot_btn_bg) - taxiPStartAutopilot?.setOnAnimStopListener(object :FrameAnimatorContainer.OnAnimationStoppedListener{ + taxiPStartAutopilot = FrameAnimatorContainer( + R.array.taxi_p_start_autopilot, + 15, + taxi_p_autopilot_btn_bg, + false + ) + taxiPStartAutopilot?.setOnAnimStopListener(object : + FrameAnimatorContainer.OnAnimationStoppedListener { override fun AnimationStopped() { - CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "动画暂停") + CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "可以启动自驾动画暂停") } }) - taxiPXiaozhiBelt = FrameAnimatorContainer(R.array.xiaozhi_belt, 15,iv_xiaozhi_belt) - taxiPXiaozhiBelt?.setOnAnimStopListener(object :FrameAnimatorContainer.OnAnimationStoppedListener{ + taxiPXiaozhiBelt = FrameAnimatorContainer(R.array.xiaozhi_belt, 15, iv_xiaozhi_belt) + taxiPXiaozhiBelt?.setOnAnimStopListener(object : + FrameAnimatorContainer.OnAnimationStoppedListener { override fun AnimationStopped() { - CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "动画暂停") + CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "小智动画暂停") } }) - handleStartAutopilotBtnStatus(true) - } - - @SuppressLint("UseCompatLoadingForDrawables") - fun handleStartAutopilotBtnStatus(isBoarded: Boolean) { - updateStartAutopilotBtnStatus(isBoarded) - taxiPStartAutopilot?.start() } override fun setOrderInfo(show: String) { actv_orderinfo.text = show } - override fun setDoorStatus( - doorPosition: StartAutopilotViewModel.DoorPosition, - isOpen: Boolean - ) { + override fun setDoorStatus(doorPosition: DoorPosition, state: DoorState) { when (doorPosition) { - StartAutopilotViewModel.DoorPosition.FRONT_LEFT -> { - if(isOpen){ + DoorPosition.FRONT_LEFT -> { + if (state == DoorState.OPEN) { actv_front_left_door.visibility = VISIBLE - }else{ + } else { actv_front_left_door.visibility = GONE } } - StartAutopilotViewModel.DoorPosition.FRONT_RIGHT -> { - if(isOpen){ + + DoorPosition.FRONT_RIGHT -> { + if (state == DoorState.OPEN) { actv_front_right_door.visibility = VISIBLE - }else{ + } else { actv_front_right_door.visibility = GONE } } - StartAutopilotViewModel.DoorPosition.REAR_LEFT -> { - if(isOpen){ + + DoorPosition.REAR_LEFT -> { + if (state == DoorState.OPEN) { actv_rear_left_door.visibility = VISIBLE - }else{ + } else { actv_rear_left_door.visibility = GONE } } - StartAutopilotViewModel.DoorPosition.REAR_RIGHT -> { - if(isOpen){ + + DoorPosition.REAR_RIGHT -> { + if (state == DoorState.OPEN) { actv_rear_right_door.visibility = VISIBLE - }else{ + } else { actv_rear_right_door.visibility = GONE } } - else ->{ - } - } - } + else -> { - fun closeAllAnimsAndView() { - isStarting = false - clearStartingAnimFrame() - clearBgAnimDrawable() - OverlayViewUtils.dismissOverlayView(this) - } - - fun updateStartAutopilotBtnStatus(isBoarded: Boolean) { - taxi_p_start_autopilot?.let { - if (isBoarded) { - it.setTextColor(ContextCompat.getColor(context,R.color.taxi_p_start_autopilot_txt_color)) - it.background = null - } else { - it.background = ResourcesCompat.getDrawable(resources,R.drawable.taxi_p_start_autopilot_txt_btn_bg,null) - taxi_p_autopilot_btn_bg!!.background = null - it.setTextColor( ContextCompat.getColor(context,R.color.taxi_p_start_autopilot_txt_un_color)) } - it.tag = isBoarded - it.text = resources.getString(R.string.taxi_p_start_autopilot_txt) } } - - - private fun startingCarBgAnimatorDrawable(isStart: Boolean) { - if (isStart) { - taxi_p_autopilot_starting!!.setImageResource(0) - taxiPStartAutopilotCar?.start() + override fun canStartAutopilot(can: Boolean) { + if (can) { + ableStartAutopilot() } else { - taxiPStartAutopilotCar?.stop() - taxi_p_autopilot_starting!!.setImageResource(R.drawable.light_00003) + unableStartAutopilot() } } - private fun startOrStopLoadingAnim(start: Boolean) { - startingCarBgAnimatorDrawable(start) - if (start) { - isStarting = true - taxi_p_start_autopilot?.text = resources.getString(R.string.taxi_p_start_autopilot_loading) - taxi_p_start_autopilot?.setTextColor(ContextCompat.getColor(context,R.color.taxi_p_start_autopilot_txt_color)) - startingAutopilotCountDown() - } else { - clearBgAnimDrawable() - isStarting = false - handleStartAutopilotBtnStatus(true) - } - } - - private fun clearBgAnimDrawable() { - taxiPStartAutopilot?.stop() - } - - fun clearStartingAnimFrame() { - taxiPStartAutopilotCar?.stop() - } - - private fun startingAutopilotCountDown() { - UiThreadHandler.postDelayed({ - //未启动成功20s后做处理 - if (isStarting) { //判断动画是否在进行 - ToastUtils.showLong(R.string.taxi_p_start_autopilot_fail_10s_tip) - updateStatusCountDownOver() - } - }, TIMER_START_AUTOPILOT_INTERVAL) - } - - private fun updateStatusCountDownOver() { - isStarting = false - startingCarBgAnimatorDrawable(false) - taxi_p_start_autopilot?.text = resources.getString(R.string.taxi_p_start_autopilot_txt) - } - - override fun onVisibilityChanged(changedView: View, visibility: Int) { super.onVisibilityChanged(changedView, visibility) - if(HdMapBuildConfig.currentCarVrIconRes == R.raw.hq_h9){ + if (changedView != this) { + return + } + if (HdMapBuildConfig.currentCarVrIconRes == R.raw.hq_h9) { cl_car_type.setBackgroundResource(R.drawable.taxi_p_start_panel__hq_bg) - }else{ + } else { cl_car_type.setBackgroundResource(R.drawable.taxi_p_start_panel__df_bg) } } - override fun onAttachedToWindow() { super.onAttachedToWindow() + CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "onAttachedToWindow") val viewModel = ViewModelProvider(this).get(StartAutopilotViewModel::class.java) viewModel.setStartAutopilotCallback(this) taxi_p_start_autopilot.onClick { //开启动画和自动驾驶 - if (!(taxi_p_start_autopilot!!.tag as Boolean)) { - ToastUtils.showLong(R.string.taxi_p_start_autopilot_un_click_tip) - return@onClick - } - if (!isStarting) { - startOrStopLoadingAnim(true) - viewModel.startAutopilot() - } + startAutopiloting() + viewModel.startAutopilot() } starting_autopilot_view_close.onClick { - closeAllAnimsAndView() + unableStartAutopilot() + OverlayViewUtils.dismissOverlayView(this) } taxiPXiaozhiBelt?.start() } + // ①:不能启动自驾 + private fun unableStartAutopilot() { + taxiPStartAutopilot?.stop() + taxiPStartAutopilotCar?.stop() + taxi_p_autopilot_starting.setImageResource(R.drawable.light_00003) + taxi_p_autopilot_btn_bg.setImageResource(R.drawable.image_00000_0) + taxi_p_start_autopilot.background = + ContextCompat.getDrawable(context, R.drawable.taxi_p_start_autopilot_txt_btn_bg) + taxi_p_start_autopilot.text = resources.getString(R.string.taxi_p_start_autopilot_txt) + } + + // ②:可以启动自驾 + private fun ableStartAutopilot() { + taxiPStartAutopilot?.reStart() + taxiPStartAutopilotCar?.stop() + taxi_p_autopilot_starting.setImageResource(R.drawable.light_00003) + taxi_p_start_autopilot.background = null + taxi_p_start_autopilot.text = resources.getString(R.string.taxi_p_start_autopilot_txt) + } + + // ③:启动自驾中 + fun startAutopiloting() { + taxiPStartAutopilot?.reStart() + taxiPStartAutopilotCar?.reStart() + taxi_p_start_autopilot.background = null + taxi_p_start_autopilot?.text = resources.getString(R.string.taxi_p_start_autopilot_loading) + taxi_p_start_autopilot?.setTextColor( + ContextCompat.getColor(context, R.color.taxi_p_start_autopilot_txt_color) + ) + } + + // ④:启动自驾超时 + override fun startAutopilotingTimeout() { + ableStartAutopilot() + } + + // ⑤:启动自驾失败 + override fun startAutopilotingFail() { + ableStartAutopilot() + } + + private fun goneAllDoorState(){ + actv_front_left_door.visibility = GONE + actv_front_right_door.visibility = GONE + actv_rear_left_door.visibility = GONE + actv_rear_right_door.visibility = GONE + } override fun onDetachedFromWindow() { - isStarting = false - clearStartingAnimFrame() - clearBgAnimDrawable() + CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "onDetachedFromWindow") + unableStartAutopilot() taxiPXiaozhiBelt?.stop() + goneAllDoorState() super.onDetachedFromWindow() } + + override fun unableStartAutopilotByDoorState() { + unableStartAutopilot() + } + } \ No newline at end of file diff --git a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/startautopilot/StartAutopilotViewModel.kt b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/startautopilot/StartAutopilotViewModel.kt index 9394b1cc53..72ce542835 100644 --- a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/startautopilot/StartAutopilotViewModel.kt +++ b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/ui/startautopilot/StartAutopilotViewModel.kt @@ -1,40 +1,39 @@ package com.mogo.och.taxi.passenger.ui.startautopilot import androidx.lifecycle.ViewModel -import chassis.Chassis.DoorNumber -import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisDoorStateListener -import com.mogo.eagle.core.function.call.autopilot.CallerChassisDoorStateListenerManager +import com.mogo.commons.voice.AIAssist import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant +import com.mogo.eagle.core.utilcode.util.ToastUtils import com.mogo.eagle.core.utilcode.util.UiThreadHandler -import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerOrderStatusCallback +import com.mogo.och.common.module.manager.devicemanage.TaxiDoorStateManager +import com.mogo.och.common.module.manager.devicemanage.callback.DoorStateCallback +import com.mogo.och.common.module.manager.devicemanage.data.DoorPosition +import com.mogo.och.common.module.manager.devicemanage.data.DoorState +import com.mogo.och.common.module.utils.RxUtils +import com.mogo.och.common.module.voice.VoiceNotice +import com.mogo.och.taxi.passenger.R import com.mogo.och.taxi.passenger.model.AutopilotManager import com.mogo.och.taxi.passenger.model.TaxiPassengerModel +import io.reactivex.disposables.Disposable -class StartAutopilotViewModel : ViewModel(), IOCHTaxiPassengerOrderStatusCallback, - IMoGoChassisDoorStateListener { +class StartAutopilotViewModel : ViewModel(), + DoorStateCallback { private val TAG = StartAutopilotViewModel::class.java.simpleName private var viewCallback: StartAutopilotCallback? = null - init { - TaxiPassengerModel.setOrderStatusCallback(TAG, this) - CallerChassisDoorStateListenerManager.addListener(TAG, this) - } + private val TIMER_START_AUTOPILOT_INTERVAL = 20 * 1000L + + var startCountDown: Disposable?=null + + var doorOpenState = true fun setStartAutopilotCallback(viewCallback: StartAutopilotCallback) { + TaxiDoorStateManager.addListener(TAG,this) this.viewCallback = viewCallback setOrderInfo() - setDoorInfo() - } - - private fun setDoorInfo() { - val doorList = CallerChassisDoorStateListenerManager.getDoorList() - CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "门太变化初始化:${doorList}") - doorList?.forEach { - exchangeEnum(it.number,it.status==1) - } } private fun setOrderInfo() { @@ -58,62 +57,65 @@ class StartAutopilotViewModel : ViewModel(), IOCHTaxiPassengerOrderStatusCallbac override fun onCleared() { super.onCleared() this.viewCallback = null - TaxiPassengerModel.setOrderStatusCallback(TAG, null) - CallerChassisDoorStateListenerManager.removeListener(TAG) + RxUtils.disposeSubscribe(startCountDown) + TaxiDoorStateManager.removeListener(TAG) } /** * 开启自动驾驶 */ fun startAutopilot() { - AutopilotManager.startAutopilot() + if(doorOpenState){ + VoiceNotice.showNotice("关紧车门后再出发吧!") + viewCallback?.unableStartAutopilotByDoorState() + return + } + if (RxUtils.isNotDisposed(startCountDown)) { + ToastUtils.showLong("启动中……") + return + } + if (AutopilotManager.startAutopilot().isEmpty()) { + startCountDown = RxUtils.createSubscribe(TIMER_START_AUTOPILOT_INTERVAL) { + viewCallback?.startAutopilotingTimeout() + //未启动成功20s后做处理 + ToastUtils.showLong(R.string.taxi_p_start_autopilot_fail_10s_tip) + VoiceNotice.showNotice("啊哦!系统繁忙中,稍后再试试吧~", AIAssist.LEVEL2) + } + }else{ + VoiceNotice.showNotice("啊哦!系统繁忙中,稍后再试试吧~", AIAssist.LEVEL2) + viewCallback?.startAutopilotingFail() + } + } - override fun onAutopilotSingleDoorState(num: DoorNumber, state: Int) { - super.onAutopilotSingleDoorState(num, state) - CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "门太变化:${num}--${state}") -// exchangeEnum(num,open) - } - - private fun exchangeEnum(num: DoorNumber,open: Boolean){ - when (num) { - DoorNumber.FRONT_LEFT -> { - runMain(DoorPosition.FRONT_LEFT,open) - } - - DoorNumber.FRONT_RIGHT -> { - runMain(DoorPosition.FRONT_RIGHT,open) - } - - DoorNumber.REAR_LEFT -> { - runMain(DoorPosition.REAR_LEFT,open) - } - - DoorNumber.REAR_RIGHT -> { - runMain(DoorPosition.REAR_RIGHT,open) - } - - DoorNumber.MIDDLE -> { - runMain(DoorPosition.MIDDLE,open) - } - - else -> {} + override fun hasOpenDoor(have: Boolean) { + CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "车门是否开着:${have}") + doorOpenState = have + UiThreadHandler.post { + viewCallback?.canStartAutopilot(!doorOpenState) } } - private fun runMain(posttion:DoorPosition,isOpen: Boolean){ + override fun doorStateChangeCallback(position: DoorPosition, state: DoorState) { + CallerLogger.d(SceneConstant.M_TAXI_P + TAG, "门太变化:${position}--${state}") + runMain(position,state) + } + + private fun runMain(posttion: DoorPosition, state: DoorState){ UiThreadHandler.post { - viewCallback?.setDoorStatus(posttion,isOpen) + viewCallback?.setDoorStatus(posttion,state) } } interface StartAutopilotCallback { fun setOrderInfo(show: String) - fun setDoorStatus(doorPosition: DoorPosition,isOpen:Boolean) - } + fun setDoorStatus(doorPosition: DoorPosition,state: DoorState) - enum class DoorPosition { - FRONT_LEFT, FRONT_RIGHT, REAR_LEFT, REAR_RIGHT, MIDDLE + fun canStartAutopilot(can:Boolean) + fun startAutopilotingTimeout() + fun startAutopilotingFail() + + fun unableStartAutopilotByDoorState() } } \ No newline at end of file diff --git a/OCH/taxi/unmanned-passenger/src/main/res/drawable/image_00000_0.webp b/OCH/taxi/unmanned-passenger/src/main/res/drawable/image_00000_0.webp new file mode 100644 index 0000000000000000000000000000000000000000..e0ca986452ca2a61c7ccf99f14b8c755b9c40e51 GIT binary patch literal 1044 zcmWIYbaUfjVPFV%bqWXzu!!JdU|^bNl~4&)5I^JRi=KXJ!EES2)1Tz_1~oVJ@TA3+6A3b`w1o`l>EbR#M<#*dWB2 znfI_fQQCp?4fFk+IqmyyTJqO!Dw6x1^2GMr$rIIYCr|i(TV3(}Hb3W4>Cs>rO%9Y~ UgEb5c|Nh_OSixlg%)TT70EgcriU0rr literal 0 HcmV?d00001 diff --git a/OCH/taxi/unmanned-passenger/src/main/res/layout/taxi_p_start_autopilot_view.xml b/OCH/taxi/unmanned-passenger/src/main/res/layout/taxi_p_start_autopilot_view.xml index 11276e2011..1cb2fa5375 100644 --- a/OCH/taxi/unmanned-passenger/src/main/res/layout/taxi_p_start_autopilot_view.xml +++ b/OCH/taxi/unmanned-passenger/src/main/res/layout/taxi_p_start_autopilot_view.xml @@ -35,6 +35,7 @@ android:layout_width="1000dp" android:layout_height="500dp" android:clickable="false" + android:src="@drawable/image_00000_0" android:layout_marginBottom="@dimen/dp_62" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent"