[自主算路验证] opt: 优化模式切换互斥逻辑,优化启自驾逻辑,优化选择路线item UI;

This commit is contained in:
aibingbing
2023-11-28 16:16:48 +08:00
parent eec68fe3bc
commit de59d9f166
19 changed files with 163 additions and 66 deletions

View File

@@ -201,21 +201,22 @@ abstract class BaseTaxiTabFragment<V : IView, P : Presenter<V>> : MvpFragment<V,
module_mogo_och_operation_status.setOnClickListener(object : OnPreventFastClickListener() {
override fun onClickImpl(v: View?) {
if (MogoStatusManager.getInstance().isTaxiUnmanedDriverLineRoutingVerifyMode) {
ToastUtils.showLong("请先切换到Taxi无人化流程模式")
ToastUtils.showLong("请先切换到Taxi无人化流程模式后使用")
return
}
onChangeOperationStatus()
}
})
MogoStatusManager.getInstance()
.registerStatusChangedListener(TAG, StatusDescriptor.TAXI_UNMANED_DRIVER_LINE_ROUTING_VERIFY_MODE
) { descriptor, isTrue ->
if (StatusDescriptor.TAXI_UNMANED_DRIVER_LINE_ROUTING_VERIFY_MODE == descriptor) {
UiThreadHandler.post {
module_mogo_och_operation_status.isEnabled = !isTrue
}
}
}
// 20231128 如果设置enable=false, 需要切图,所以先不设置了
// MogoStatusManager.getInstance()
// .registerStatusChangedListener(TAG, StatusDescriptor.TAXI_UNMANED_DRIVER_LINE_ROUTING_VERIFY_MODE
// ) { descriptor, isTrue ->
// if (StatusDescriptor.TAXI_UNMANED_DRIVER_LINE_ROUTING_VERIFY_MODE == descriptor) {
// UiThreadHandler.post {
// module_mogo_och_operation_status.isEnabled = !isTrue
// }
// }
// }
taxi_close_navi_icon.setOnClickListener {
showAmapNaviToStationFragment(false)

View File

@@ -262,6 +262,7 @@ class TaxiFragment : BaseTaxiTabFragment<TaxiFragment, TaxiPresenter>(),
null
)
}
MogoStatusManager.getInstance().setTaxiUnmanedDriverTakingOrders(TAG, inOperation)
}
override fun onMapLoaded() {}

View File

@@ -6,6 +6,7 @@ import androidx.annotation.NonNull;
import androidx.lifecycle.LifecycleOwner;
import com.mogo.commons.AbsMogoApplication;
import com.mogo.commons.module.status.MogoStatusManager;
import com.mogo.commons.mvp.Presenter;
import com.mogo.eagle.core.data.map.MogoLocation;
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener;
@@ -79,7 +80,11 @@ public class TaxiPresenter extends Presenter<TaxiFragment> implements ITaxiADASS
* 开启自动驾驶 自驾模式
*/
public void startAutoPilot() {
TaxiTaskModel.INSTANCE.startAutopilotByClick();
if (MogoStatusManager.getInstance().isTaxiUnmanedDriverLineRoutingVerifyMode()) {
TaxiRoutingModel.INSTANCE.startAutoPilotByClick();
} else {
TaxiTaskModel.INSTANCE.startAutopilotByClick();
}
}
// 登出

View File

@@ -154,7 +154,7 @@ class TaxiRoutingChooseLineActivity : AppCompatActivity() {
}
private fun loadData() {
mViewModel.sendUiIntent(TaxiRoutingUiIntent.QueryRoutingGrayLineList)
mViewModel.sendUiIntent(TaxiRoutingUiIntent.QueryRoutingGrayLineList(System.currentTimeMillis()))
}
private fun onRoutingGrayLineListChanged(data: MutableList<GrayLineBean>) {

View File

@@ -81,7 +81,7 @@ class TaxiRoutingFragment : BaseFragment(), ICommonNaviChangedCallback {
private fun initViewListener() {
btnChooseTask.setOnClickListener {
mViewModel.sendUiIntent(TaxiRoutingUiIntent.StartChooseLineAction)
mViewModel.sendUiIntent(TaxiRoutingUiIntent.StartChooseLineAction(System.currentTimeMillis()))
}
}

View File

@@ -3,6 +3,7 @@ package com.mogo.och.taxi.ui.routing
import android.content.Context
import android.content.Intent
import com.mogo.commons.AbsMogoApplication
import com.mogo.commons.module.status.MogoStatusManager
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.mogo.eagle.core.utilcode.util.ToastUtils
@@ -51,6 +52,8 @@ class TaxiRoutingFragmentViewModel : BaseViewModel<TaxiRoutingUiState, TaxiRouti
)
)
}
// 设置灰度路线任务执行状态,切换模式时判断使用
MogoStatusManager.getInstance().setTaxiUnmanedDriverLineRoutingPerformTask(TAG, true)
}
is TaxiRoutingUiIntent.StartTaskAction -> {
@@ -63,6 +66,7 @@ class TaxiRoutingFragmentViewModel : BaseViewModel<TaxiRoutingUiState, TaxiRouti
return
}
DebugView.printInfoMsg("[启自驾] 准备启动自驾")
TaxiRoutingModel.updateCurrentGrayLineAndContrail(grayLineBean, contrailBean)
TaxiRoutingModel.startAutoPilot(grayLineBean!!, contrailBean!!)
sendUiState {
copy(
@@ -129,6 +133,9 @@ class TaxiRoutingFragmentViewModel : BaseViewModel<TaxiRoutingUiState, TaxiRouti
routingUiState = RoutingUIState.Init
)
}
TaxiRoutingModel.updateCurrentGrayLineAndContrail(null, null)
// 设置灰度路线任务执行状态,切换模式时判断使用
MogoStatusManager.getInstance().setTaxiUnmanedDriverLineRoutingPerformTask(TAG, false)
}
override fun onSubmitEndTaskFailed(errorStr: String) {

View File

@@ -37,6 +37,9 @@ object TaxiRoutingModel {
private val mContext: Context
get() = AbsMogoApplication.getApp().applicationContext
private var currentGrayLineBean: GrayLineBean? = null
private var currentContrailBean: ContrailBean? = null
private val mTaxiRoutingCallbackMap: ConcurrentHashMap<String, ITaxiRoutingCallback> =
ConcurrentHashMap()
@@ -299,6 +302,20 @@ object TaxiRoutingModel {
})
}
fun updateCurrentGrayLineAndContrail(grayLineBean: GrayLineBean?, contrailBean: ContrailBean?) {
currentGrayLineBean = grayLineBean
currentContrailBean = contrailBean
}
fun startAutoPilotByClick() {
if (currentGrayLineBean == null || currentContrailBean == null) {
CallerLogger.e(TAG, "startAutoPilotByClick 异常currentGrayLineBean == null || currentContrailBean == null")
DebugView.printErrorMsg("[启自驾] startAutoPilotByClick 异常currentGrayLineBean == null || currentContrailBean == null")
return
}
startAutoPilot(currentGrayLineBean!!, currentContrailBean!!)
}
fun startAutoPilot(grayLineBean: GrayLineBean, contrailBean: ContrailBean) {
if (grayLineBean.startSite == null || grayLineBean.endSite == null) {
CallerLogger.e(TAG, "start site or end site is null")

View File

@@ -7,10 +7,10 @@ import com.mogo.och.taxi.bean.GrayLineBean
sealed class TaxiRoutingUiIntent : IUiIntent {
//打开选择路线页面
object StartChooseLineAction : TaxiRoutingUiIntent()
data class StartChooseLineAction(val currentTimestamp: Long) : TaxiRoutingUiIntent()
//查询灰度线路列表
object QueryRoutingGrayLineList : TaxiRoutingUiIntent()
data class QueryRoutingGrayLineList(val currentTimestamp: Long) : TaxiRoutingUiIntent()
//开始一个任务并查询此任务对应的轨迹详情
data class StartTaskAndQueryContrail(val grayLineBean: GrayLineBean) : TaxiRoutingUiIntent()

View File

@@ -1,6 +1,7 @@
package com.mogo.och.taxi.ui.task
import com.mogo.commons.AbsMogoApplication
import com.mogo.commons.module.status.MogoStatusManager
import com.mogo.eagle.core.data.BaseData
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.data.map.MogoLocation
@@ -229,6 +230,12 @@ class TaxiCurrentTaskViewModel : BaseViewModel<UnmannedState, TaskUiIntent>(),
d(TAG, "onTaskWithOrderChanged = result = " + GsonUtil.jsonFromObject(result))
DebugView.printInfoMsg("[查询TaskWithOrder信息] 更新数据, 刷新UI")
updateTaskAndOrderUi(result)
// 设置task执行相关状态切换模式时判断使用
if (result == null || result.taskType == TaskTypeEnum.None.code) {
MogoStatusManager.getInstance().setTaxiUnmanedDriverPerformTask(TAG, false)
} else {
MogoStatusManager.getInstance().setTaxiUnmanedDriverPerformTask(TAG, true)
}
}
override fun onTaskStarted(result: QueryCurrentTaskRespBean.Result?) {
@@ -318,6 +325,8 @@ class TaxiCurrentTaskViewModel : BaseViewModel<UnmannedState, TaskUiIntent>(),
VoiceNotice.showNotice("已取消行程")
//取消自驾,D档位会溜车 map3.6.0 修改
TaxiTaskModel.cancelAutopilot()
// 设置task执行相关状态切换模式时判断使用
MogoStatusManager.getInstance().setTaxiUnmanedDriverPerformTask(TAG, false)
}
override fun onOrderArriveAtEnd(orderNo: String) {
@@ -339,6 +348,8 @@ class TaxiCurrentTaskViewModel : BaseViewModel<UnmannedState, TaskUiIntent>(),
TaxiTaskModel.startPrepareTaskDelay(CallerUnmannedListenerManager.getPullTime().toLong(),
it.siteId)
}
// 设置task执行相关状态切换模式时判断使用
MogoStatusManager.getInstance().setTaxiUnmanedDriverPerformTask(TAG, false)
}
override fun onStartAutopilot(postDelayTime: Long) {

View File

@@ -31,7 +31,11 @@ import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.e
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.i
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.mogo.eagle.core.utilcode.util.*
import com.mogo.eagle.core.utilcode.util.CoordinateUtils
import com.mogo.eagle.core.utilcode.util.DrivingDirectionUtils
import com.mogo.eagle.core.utilcode.util.NetworkUtils
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import com.mogo.och.common.module.biz.common.socketmessage.OCHSocketMessageManager
import com.mogo.och.common.module.biz.common.socketmessage.data.OCHOperationalMessage
import com.mogo.och.common.module.biz.constant.LoginStatusManager
@@ -48,9 +52,22 @@ import com.mogo.och.common.module.manager.distancemamager.TrajectoryAndDistanceM
import com.mogo.och.common.module.map.AmapNaviToDestinationModel
import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil.coordinateConverterWgsToGcjLocations
import com.mogo.och.common.module.voice.VoiceNotice
import com.mogo.och.taxi.bean.*
import com.mogo.och.taxi.callback.*
import com.mogo.och.taxi.constant.*
import com.mogo.och.taxi.bean.PrepareTaskRespBean
import com.mogo.och.taxi.bean.QueryCarOrderByNoRespBean
import com.mogo.och.taxi.bean.QueryCurrentTaskRespBean
import com.mogo.och.taxi.bean.StartServiceRespBean
import com.mogo.och.taxi.bean.TrajectoryListRespBean
import com.mogo.och.taxi.callback.IOCHTaxiAutopilotPlanningCallback
import com.mogo.och.taxi.callback.ITaxiADASStatusCallback
import com.mogo.och.taxi.callback.ITaxiCarServiceCallback
import com.mogo.och.taxi.callback.ITaxiControllerStatusCallback
import com.mogo.och.taxi.callback.ITaxiOrderStatusCallback
import com.mogo.och.taxi.callback.ITaxiTaskWithOrderCallback
import com.mogo.och.taxi.constant.TaskStatusEnum
import com.mogo.och.taxi.constant.TaskTypeEnum
import com.mogo.och.taxi.constant.TaxiCarServingStatusManager
import com.mogo.och.taxi.constant.TaxiOrderStatusEnum
import com.mogo.och.taxi.constant.TaxiUnmannedConst
import com.mogo.och.taxi.constant.TaxiUnmannedConst.Companion.BUSINESSTYPE
import com.mogo.och.taxi.network.TaxiTaskWithOrderServiceManager
import com.mogo.och.taxi.ui.debug.DebugView
@@ -1406,6 +1423,10 @@ object TaxiTaskModel {
mCurrentTaskWithOrder = null
mDriveToNearestStationTask = null
DebugView.printInfoMsg("[登出] 退出登陆")
MogoStatusManager.getInstance().setTaxiUnmanedDriverPerformTask(TAG, false)
MogoStatusManager.getInstance().setTaxiUnmanedDriverTakingOrders(TAG, false)
MogoStatusManager.getInstance().setTaxiUnmanedDriverLineRoutingPerformTask(TAG, false)
MogoStatusManager.getInstance().setTaxiUnmanedDriverLineRoutingVerifyMode(TAG, false)
}
//导航去订单终点目的地

View File

@@ -1,61 +1,56 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_5"
android:background="@drawable/routing_choose_line_shape_select_line_item_bg_normal">
android:paddingStart="@dimen/dp_78"
android:paddingEnd="@dimen/dp_78"
android:layout_marginTop="@dimen/dp_8"
android:background="@drawable/routing_choose_line_shape_select_line_item_bg_normal"
android:orientation="vertical">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/switchLineNameTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_20"
android:layout_marginTop="@dimen/dp_20"
android:layout_marginEnd="@dimen/dp_20"
android:ellipsize="end"
android:gravity="left|center_vertical"
android:maxLines="1"
android:singleLine="true"
android:textColor="@android:color/white"
android:textSize="@dimen/dp_40"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintWidth_default="spread"
android:textSize="@dimen/dp_44"
tools:text="线路名称线路名称线路" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/todayVerifyNumTextView"
android:layout_width="wrap_content"
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_20"
android:layout_gravity="center_vertical"
android:layout_marginTop="@dimen/dp_20"
android:layout_marginEnd="@dimen/dp_20"
android:gravity="left|center_vertical"
android:maxLines="1"
android:textColor="@android:color/white"
android:textSize="@dimen/dp_32"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/historyVerifyNumTextView"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/switchLineNameTextView"
tools:text="本车今日已验证1次" />
android:layout_marginEnd="@dimen/dp_20">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/historyVerifyNumTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_20"
android:layout_marginEnd="@dimen/dp_20"
android:gravity="right|center_vertical"
android:maxLines="1"
android:textColor="@color/taxi_color_ccb9c3e9"
android:textSize="@dimen/dp_28"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/todayVerifyNumTextView"
app:layout_constraintTop_toTopOf="@+id/todayVerifyNumTextView"
tools:text="路线累计反馈0可用1不可用" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/todayVerifyNumTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:gravity="left|center_vertical"
android:maxLines="1"
android:textColor="@android:color/white"
android:textSize="@dimen/dp_34"
tools:text="本车今日已验证1次" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/historyVerifyNumTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_toRightOf="@+id/todayVerifyNumTextView"
android:gravity="right|center_vertical"
android:maxLines="1"
android:textColor="@color/taxi_color_ccb9c3e9"
android:textSize="@dimen/dp_30"
tools:text="路线累计反馈0可用1不可用" />
</RelativeLayout>
</LinearLayout>

View File

@@ -20,9 +20,7 @@
<com.mogo.och.common.module.wigets.MarqueeTextView
android:id="@+id/taskTitleTv"
android:layout_width="@dimen/dp_420"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_45"
android:layout_marginBottom="@dimen/dp_45"
android:layout_height="@dimen/dp_132"
android:ellipsize="marquee"
android:gravity="center_vertical"
android:marqueeRepeatLimit="marquee_forever"

View File

@@ -365,6 +365,10 @@ class MoGoHmiProvider : IMoGoHmiProvider {
return MogoStatusManager.getInstance().isTaxiUnmanedDriverTakingOrders
}
override fun isTaxiUnmanedDriverLineRoutingPerformTask(): Boolean {
return MogoStatusManager.getInstance().isTaxiUnmanedDriverLineRoutingPerformTask
}
override fun isTaxiUnmanedDriverLineRoutingVerifyMode(): Boolean {
return MogoStatusManager.getInstance().isTaxiUnmanedDriverLineRoutingVerifyMode
}

View File

@@ -589,7 +589,7 @@ internal class SOPSettingView @JvmOverloads constructor(
}
CallerHmiManager.setTaxiUnmanedDriverLineRoutingVerifyMode(true)
} else {
if (CallerHmiManager.isTaxiUnmanedDriverPerformTask()) {
if (CallerHmiManager.isTaxiUnmanedDriverLineRoutingPerformTask()) {
ToastUtils.showLong("请先结束当前任务")
buttonView.isChecked = !isChecked
return@setOnCheckedChangeListener

View File

@@ -180,6 +180,11 @@ interface IMoGoHmiProvider :IProvider{
*/
fun isTaxiUnmanedDriverTakingOrders(): Boolean
/**
* taxi自主算路验证 是否在执行任务中
*/
fun isTaxiUnmanedDriverLineRoutingPerformTask(): Boolean
/**
* taxi无人化司机端 是否自主算路验证模式
*/

View File

@@ -266,6 +266,13 @@ object CallerHmiManager {
return hmiProviderApi?.isTaxiUnmanedDriverTakingOrders() ?: false
}
/**
* taxi自主算路验证 是否在执行任务中
*/
fun isTaxiUnmanedDriverLineRoutingPerformTask() :Boolean {
return hmiProviderApi?.isTaxiUnmanedDriverLineRoutingPerformTask() ?: false
}
/**
* taxi无人化司机端 是否自主算路验证模式
*/

View File

@@ -111,7 +111,7 @@ public interface IMogoStatusManager extends IProvider {
void setSeekHelping( String tag, boolean seekHelping );
/**
* taxi无人化司机端 是否在执行任务中(无人化模式和算路验证模式 都复用此变量)
* taxi无人化司机端 是否在执行任务中
*
* @param tag
* @param isPerformingTask
@@ -130,6 +130,16 @@ public interface IMogoStatusManager extends IProvider {
boolean isTaxiUnmanedDriverTakingOrders();
/**
* taxi自主算路验证 是否在执行任务中
*
* @param tag
* @param isPerformTask
*/
void setTaxiUnmanedDriverLineRoutingPerformTask( String tag, boolean isPerformTask );
boolean isTaxiUnmanedDriverLineRoutingPerformTask();
/**
* taxi无人化司机端 是否是在自主算路验证模式
*

View File

@@ -137,6 +137,16 @@ public class MogoStatusManager implements IMogoStatusManager {
return get_bool_val(StatusDescriptor.TAXI_UNMANED_DRIVER_TAKING_ORDERS);
}
@Override
public void setTaxiUnmanedDriverLineRoutingPerformTask(String tag, boolean isPerformTask) {
doSetStatus(tag, StatusDescriptor.TAXI_UNMANED_DRIVER_LINE_ROUTING_PERFORM_TASK, isPerformTask);
}
@Override
public boolean isTaxiUnmanedDriverLineRoutingPerformTask() {
return get_bool_val(StatusDescriptor.TAXI_UNMANED_DRIVER_LINE_ROUTING_PERFORM_TASK);
}
@Override
public void setTaxiUnmanedDriverLineRoutingVerifyMode(String tag, boolean isLineRoutingVerifyMode) {
doSetStatus(tag, StatusDescriptor.TAXI_UNMANED_DRIVER_LINE_ROUTING_VERIFY_MODE, isLineRoutingVerifyMode);

View File

@@ -49,15 +49,20 @@ public enum StatusDescriptor {
SCREEN_COVER,
/**
* taxi无人化 是否执行任务
* taxi无人化 是否执行任务
*/
TAXI_UNMANED_DRIVER_PERFORM_TASK,
/**
* taxi无人化 是否接单
* taxi无人化 是否接单状态中
*/
TAXI_UNMANED_DRIVER_TAKING_ORDERS,
/**
* taxi自主算路验证 是否执行任务中
*/
TAXI_UNMANED_DRIVER_LINE_ROUTING_PERFORM_TASK,
/**
* taxi无人化 是否在自主算路验证模式
*/