[6.1.0]
[unmanned] [车门]
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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<DoorStateCallback>() {
|
||||
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<VehicleStateOuterClass.DoorStateV2>){
|
||||
doSomeAfterAddListenerInner(doorList)
|
||||
doorList.forEach {
|
||||
onAutopilotSingleDoorState(it.number,it.status)
|
||||
}
|
||||
}else{
|
||||
doSomeAfterAddListenerInner(mutableListOf())
|
||||
}
|
||||
}
|
||||
|
||||
private fun doSomeAfterAddListenerInner(doorList: MutableList<VehicleStateOuterClass.DoorStateV2>){
|
||||
var have = false
|
||||
doorList.forEach {
|
||||
if (it.status == 1) {//0关闭 1开着 2未知
|
||||
have = true
|
||||
}
|
||||
}
|
||||
haveOpenDoor = have
|
||||
invokeOpenState(have)
|
||||
}
|
||||
|
||||
/**
|
||||
* 主要用来判断是否有门开着
|
||||
*/
|
||||
override fun onAutopilotDoorState(doorList: MutableList<VehicleStateOuterClass.DoorStateV2>) {
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -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){}
|
||||
}
|
||||
@@ -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
|
||||
@@ -1,3 +1,12 @@
|
||||
package com.mogo.och.common.module.manager.devicemanage.data
|
||||
|
||||
data class DoorStatus(var isOpen: Boolean)
|
||||
data class DoorStatus(var isOpen: Boolean)
|
||||
|
||||
|
||||
enum class DoorPosition {
|
||||
FRONT_LEFT, FRONT_RIGHT, REAR_LEFT, REAR_RIGHT, MIDDLE
|
||||
}
|
||||
|
||||
enum class DoorState {
|
||||
OPEN,CLOSE,UNKNOWN
|
||||
}
|
||||
@@ -121,6 +121,10 @@ class FrameAnimatorContainer (resId: Int, fps: Int, imageView: ImageView,initFir
|
||||
mShouldRun = false
|
||||
}
|
||||
|
||||
fun isPlaying():Boolean{
|
||||
return mShouldRun
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置停止播放监听
|
||||
* @param listener 设置监听
|
||||
|
||||
@@ -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 导致出现崩溃
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
BIN
OCH/taxi/passenger/src/main/res/drawable/image_00000_0.webp
Normal file
BIN
OCH/taxi/passenger/src/main/res/drawable/image_00000_0.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.0 KiB |
@@ -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"
|
||||
|
||||
@@ -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<TaxiPassengerBaseRespBean> {
|
||||
override fun onSuccess(data: TaxiPassengerBaseRespBean) {
|
||||
VoiceNotice.showNotice("坐稳扶好,我们出发咯!", AIAssist.LEVEL2)
|
||||
}
|
||||
|
||||
override fun onFail(code: Int, msg: String) {}
|
||||
|
||||
@@ -255,7 +255,9 @@ class TaxiPassengerBaseFragment() :
|
||||
OverlayViewUtils.showOverlayView(activity, it)
|
||||
}
|
||||
} else {
|
||||
mStartAutopilotView?.get()?.closeAllAnimsAndView()
|
||||
mStartAutopilotView?.get()?.let {
|
||||
OverlayViewUtils.dismissOverlayView(it)
|
||||
}
|
||||
mStartAutopilotView = null
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 1.0 KiB |
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user