[自主算路验证] feat: 运营面板增加调试开关和相关调用接口;

This commit is contained in:
aibingbing
2023-11-15 20:41:45 +08:00
parent 96bba1eb5a
commit 632255913b
9 changed files with 228 additions and 19 deletions

View File

@@ -11,6 +11,8 @@ import android.view.animation.LinearInterpolator
import androidx.fragment.app.FragmentTransaction
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import com.mogo.commons.AbsMogoApplication
import com.mogo.commons.module.status.MogoStatusManager
import com.mogo.commons.module.status.StatusDescriptor
import com.mogo.commons.mvp.IView
import com.mogo.commons.mvp.MvpFragment
import com.mogo.commons.mvp.Presenter
@@ -26,6 +28,7 @@ import com.mogo.eagle.core.function.hmi.ui.widget.ParallelDriveView
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.mogo.eagle.core.utilcode.mogo.view.OnPreventFastClickListener
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import com.mogo.map.listener.IMogoMapListener
import com.mogo.map.uicontroller.VisualAngleMode
@@ -197,9 +200,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无人化流程模式")
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
}
}
}
taxi_close_navi_icon.setOnClickListener {
showAmapNaviToStationFragment(false)
@@ -222,13 +238,13 @@ abstract class BaseTaxiTabFragment<V : IView, P : Presenter<V>> : MvpFragment<V,
val width = AutoSizeUtils.dp2px(AbsMogoApplication.getApp(), 420f)
val height = AutoSizeUtils.dp2px(AbsMogoApplication.getApp(), 220f)
startAutopilotAnimator = FrameAnimatorContainer(R.array.anim_flow, 20,anim_flow_iv,false,width,height)
startAutopilotAnimator = FrameAnimatorContainer(R.array.anim_flow, 20,anim_flow_iv,false, width=width, height = height)
startAutopilotAnimator?.setOnAnimStopListener(object : FrameAnimatorContainer.OnAnimationStoppedListener{
override fun AnimationStopped() {
d(SceneConstant.M_TAXI_P + TAG, "自动驾驶动画暂停")
}
})
startManCOAnimator = FrameAnimatorContainer(R.array.nim_flow_man_co, 20,anim_flow_iv,false,width,height)
startManCOAnimator = FrameAnimatorContainer(R.array.nim_flow_man_co, 20,anim_flow_iv,false, width=width, height=height)
startManCOAnimator?.setOnAnimStopListener(object : FrameAnimatorContainer.OnAnimationStoppedListener{
override fun AnimationStopped() {
d(SceneConstant.M_TAXI_P + TAG, "平行驾驶动画暂停")

View File

@@ -2,30 +2,32 @@ package com.mogo.eagle.core.function.hmi.ui
import android.content.Context
import android.text.TextUtils
import android.view.*
import android.view.Gravity
import android.view.ViewGroup
import androidx.lifecycle.ProcessLifecycleOwner
import androidx.lifecycle.lifecycleScope
import com.alibaba.android.arouter.facade.annotation.Route
import com.mogo.commons.module.status.MogoStatusManager
import com.mogo.commons.voice.AIAssist
import com.mogo.eagle.core.data.deva.bindingcar.IPCUpgradeStateInfo
import com.mogo.eagle.core.data.biz.dispatch.DispatchAdasAutoPilotLocReceiverBean
import com.mogo.eagle.core.data.biz.notice.NoticeNormalData
import com.mogo.eagle.core.data.biz.notice.NoticeTrafficStylePushData
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.data.config.HmiBuildConfig
import com.mogo.eagle.core.data.constants.MogoServicePaths.PATH_FRAGMENT_HMI
import com.mogo.eagle.core.data.deva.bindingcar.IPCUpgradeStateInfo
import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.BIZ_RTS
import com.mogo.eagle.core.data.deva.bizconfig.FuncBizConfig.Companion.V2I
import com.mogo.eagle.core.data.biz.dispatch.DispatchAdasAutoPilotLocReceiverBean
import com.mogo.eagle.core.data.enums.EventTypeEnumNew
import com.mogo.eagle.core.data.enums.WarningDirectionEnum
import com.mogo.eagle.core.data.map.Infrastructure
import com.mogo.eagle.core.data.biz.notice.NoticeNormalData
import com.mogo.eagle.core.data.biz.notice.NoticeTrafficStylePushData
import com.mogo.eagle.core.data.config.HmiBuildConfig
import com.mogo.eagle.core.function.api.hmi.warning.IMoGoHmiProvider
import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWarningStatusListener
import com.mogo.eagle.core.function.call.hmi.*
import com.mogo.eagle.core.function.call.hmi.CallerHmiViewControlListenerManager
import com.mogo.eagle.core.function.call.v2x.CallerTrafficLightListenerManager
import com.mogo.eagle.core.function.call.v2x.CallerTurnLightListenerManager
import com.mogo.eagle.core.function.hmi.ui.camera.RoadVideoDialog
import com.mogo.eagle.core.function.hmi.ui.lookaround.*
import com.mogo.eagle.core.function.hmi.ui.lookaround.M1LookAroundView
import com.mogo.eagle.core.function.hmi.ui.notice.DispatchDialogManager
import com.mogo.eagle.core.function.hmi.ui.notice.NoticeCheckDialog
import com.mogo.eagle.core.function.hmi.ui.notice.traffic.NoticeTrafficDialog
@@ -38,15 +40,18 @@ import com.mogo.eagle.core.function.hmi.ui.tools.ToBindingCarDialog
import com.mogo.eagle.core.function.hmi.ui.tools.UpgradeAppDialog
import com.mogo.eagle.core.function.hmi.ui.utils.HmiActionLog
import com.mogo.eagle.core.function.hmi.ui.widget.StatusBarView
import com.mogo.eagle.core.utilcode.floating.*
import com.mogo.eagle.core.utilcode.floating.MoGoPopWindow
import com.mogo.eagle.core.utilcode.kotlin.safeCancel
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_HMI
import com.mogo.eagle.core.utilcode.util.*
import com.mogo.eagle.core.utilcode.util.AppStateManager
import com.mogo.eagle.core.utilcode.util.ThreadUtils
import com.mogo.tts.base.IMogoTTSCallback
import com.zhjt.service_biz.BizConfig
import kotlinx.coroutines.*
import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import java.util.concurrent.atomic.AtomicBoolean
import java.util.concurrent.atomic.AtomicReference
@@ -352,4 +357,20 @@ class MoGoHmiProvider : IMoGoHmiProvider {
CallerTurnLightListenerManager.invokeHideTurnLightView()
}
override fun isTaxiUnmanedDriverPerformTask(): Boolean {
return MogoStatusManager.getInstance().isTaxiUnmanedDriverPerformTask
}
override fun isTaxiUnmanedDriverTakingOrders(): Boolean {
return MogoStatusManager.getInstance().isTaxiUnmanedDriverTakingOrders
}
override fun isTaxiUnmanedDriverLineRoutingVerifyMode(): Boolean {
return MogoStatusManager.getInstance().isTaxiUnmanedDriverLineRoutingVerifyMode
}
override fun setTaxiUnmanedDriverLineRoutingVerifyMode(isMode: Boolean) {
MogoStatusManager.getInstance().setTaxiUnmanedDriverLineRoutingVerifyMode(TAG, isMode)
}
}

View File

@@ -569,6 +569,41 @@ internal class SOPSettingView @JvmOverloads constructor(
}
}
// Taxi无人化司机端自主算路验证模式
scLineRoutingVerify?.also {
if (AppIdentityModeUtils.isTaxiDriver(FunctionBuildConfig.appIdentityMode)) {
it.isEnabled = true
it.visibility = View.VISIBLE
it.setOnCheckedChangeListener { buttonView, isChecked ->
if(!buttonView.isPressed) return@setOnCheckedChangeListener
if (isChecked) {
if (CallerHmiManager.isTaxiUnmanedDriverPerformTask()) {
ToastUtils.showLong("请先结束当前任务")
buttonView.isChecked = !isChecked
return@setOnCheckedChangeListener
}
if (CallerHmiManager.isTaxiUnmanedDriverTakingOrders()) {
ToastUtils.showLong("请先结束接单状态")
buttonView.isChecked = !isChecked
return@setOnCheckedChangeListener
}
CallerHmiManager.setTaxiUnmanedDriverLineRoutingVerifyMode(true)
} else {
if (CallerHmiManager.isTaxiUnmanedDriverPerformTask()) {
ToastUtils.showLong("请先结束当前任务")
buttonView.isChecked = !isChecked
return@setOnCheckedChangeListener
}
CallerHmiManager.setTaxiUnmanedDriverLineRoutingVerifyMode(false)
}
}
it.isChecked = CallerHmiManager.isTaxiUnmanedDriverLineRoutingVerifyMode()
} else {
it.isEnabled = false
it.visibility = View.GONE
}
}
//是否展示被动触发的录包弹窗(自动驾驶下出现问题触发的录包)
scShowBagRecordWindow.isChecked = FunctionBuildConfig.isShowBagRecordWindow
scShowBagRecordWindow.setOnCheckedChangeListener { _, isChecked ->

View File

@@ -548,6 +548,19 @@
app:layout_constraintRight_toRightOf="@id/otherGuideLine"
app:layout_constraintTop_toBottomOf="@id/scIPCReport" />
<!--自主算路验证模式-->
<androidx.appcompat.widget.SwitchCompat
android:id="@+id/scLineRoutingVerify"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_25"
android:scaleX="1.2"
android:scaleY="1.2"
android:text="自主算路验证模式"
app:layout_constraintLeft_toLeftOf="@id/otherGuideLine"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/scShowBagRecordWindow" />
<TextView
android:id="@+id/tvPullTimeTitle"
android:layout_width="wrap_content"
@@ -558,7 +571,7 @@
android:textColor="@color/black"
android:textSize="32dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/scShowBagRecordWindow" />
app:layout_constraintTop_toBottomOf="@id/scLineRoutingVerify" />
<RadioGroup
android:id="@+id/rgPullTime"

View File

@@ -169,4 +169,25 @@ interface IMoGoHmiProvider :IProvider{
* 隐藏转向灯
*/
fun hideTurnLightView()
/**
* taxi无人化 是否在执行任务中(无人化模式和算路验证模式 都复用此变量)
*/
fun isTaxiUnmanedDriverPerformTask(): Boolean
/**
* taxi无人化司机端 是否在接单中
*/
fun isTaxiUnmanedDriverTakingOrders(): Boolean
/**
* taxi无人化司机端 是否自主算路验证模式
*/
fun isTaxiUnmanedDriverLineRoutingVerifyMode(): Boolean
/**
* taxi无人化司机端 设置是否自主算路验证模式
*/
fun setTaxiUnmanedDriverLineRoutingVerifyMode(isMode: Boolean)
}

View File

@@ -3,14 +3,14 @@ package com.mogo.eagle.core.function.call.hmi
import android.content.Context
import android.view.ViewGroup
import com.alibaba.android.arouter.launcher.ARouter
import com.mogo.eagle.core.data.deva.bindingcar.IPCUpgradeStateInfo
import com.mogo.eagle.core.data.constants.MogoServicePaths
import com.mogo.eagle.core.data.biz.dispatch.DispatchAdasAutoPilotLocReceiverBean
import com.mogo.eagle.core.data.enums.WarningDirectionEnum
import com.mogo.eagle.core.data.map.Infrastructure
import com.mogo.eagle.core.data.biz.notice.NoticeNormalData
import com.mogo.eagle.core.data.biz.notice.NoticeTrafficStylePushData
import com.mogo.eagle.core.data.constants.MogoServicePaths
import com.mogo.eagle.core.data.deva.bindingcar.IPCUpgradeStateInfo
import com.mogo.eagle.core.data.enums.WarningDirectionEnum
import com.mogo.eagle.core.data.enums.WarningDirectionEnum.ALERT_WARNING_NON
import com.mogo.eagle.core.data.map.Infrastructure
import com.mogo.eagle.core.function.api.hmi.warning.IMoGoHmiProvider
import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWarningStatusListener
@@ -252,4 +252,32 @@ object CallerHmiManager {
hmiProviderApi?.hideTurnLightView()
}
/**
* taxi无人化司机端 是否在执行任务中(无人化模式和算路验证模式 都复用此变量)
*/
fun isTaxiUnmanedDriverPerformTask() :Boolean {
return hmiProviderApi?.isTaxiUnmanedDriverPerformTask() ?: false
}
/**
* taxi无人化司机端 是否在接单中
*/
fun isTaxiUnmanedDriverTakingOrders() :Boolean {
return hmiProviderApi?.isTaxiUnmanedDriverTakingOrders() ?: false
}
/**
* taxi无人化司机端 是否自主算路验证模式
*/
fun isTaxiUnmanedDriverLineRoutingVerifyMode() :Boolean {
return hmiProviderApi?.isTaxiUnmanedDriverLineRoutingVerifyMode() ?: false
}
/**
* taxi无人化司机端 设置是否自主算路验证模式
*/
fun setTaxiUnmanedDriverLineRoutingVerifyMode(isMode: Boolean) {
hmiProviderApi?.setTaxiUnmanedDriverLineRoutingVerifyMode(isMode)
}
}

View File

@@ -110,6 +110,36 @@ public interface IMogoStatusManager extends IProvider {
*/
void setSeekHelping( String tag, boolean seekHelping );
/**
* taxi无人化司机端 是否在执行任务中(无人化模式和算路验证模式 都复用此变量)
*
* @param tag
* @param isPerformingTask
*/
void setTaxiUnmanedDriverPerformTask( String tag, boolean isPerformingTask );
boolean isTaxiUnmanedDriverPerformTask();
/**
* taxi无人化司机端 是否在接单中
*
* @param tag
* @param isTakingOrders
*/
void setTaxiUnmanedDriverTakingOrders( String tag, boolean isTakingOrders );
boolean isTaxiUnmanedDriverTakingOrders();
/**
* taxi无人化司机端 是否是在自主算路验证模式
*
* @param tag
* @param isLineRoutingVerifyMode
*/
void setTaxiUnmanedDriverLineRoutingVerifyMode( String tag, boolean isLineRoutingVerifyMode );
boolean isTaxiUnmanedDriverLineRoutingVerifyMode();
/**
* 注册监听
*

View File

@@ -117,6 +117,36 @@ public class MogoStatusManager implements IMogoStatusManager {
doSetStatus(tag, StatusDescriptor.SEEK_HELPING, seekHelping);
}
@Override
public void setTaxiUnmanedDriverPerformTask(String tag, boolean isPerformingTask) {
doSetStatus(tag, StatusDescriptor.TAXI_UNMANED_DRIVER_PERFORM_TASK, isPerformingTask);
}
@Override
public boolean isTaxiUnmanedDriverPerformTask() {
return get_bool_val(StatusDescriptor.TAXI_UNMANED_DRIVER_PERFORM_TASK);
}
@Override
public void setTaxiUnmanedDriverTakingOrders(String tag, boolean isTakingOrders) {
doSetStatus(tag, StatusDescriptor.TAXI_UNMANED_DRIVER_TAKING_ORDERS, isTakingOrders);
}
@Override
public boolean isTaxiUnmanedDriverTakingOrders() {
return get_bool_val(StatusDescriptor.TAXI_UNMANED_DRIVER_TAKING_ORDERS);
}
@Override
public void setTaxiUnmanedDriverLineRoutingVerifyMode(String tag, boolean isLineRoutingVerifyMode) {
doSetStatus(tag, StatusDescriptor.TAXI_UNMANED_DRIVER_LINE_ROUTING_VERIFY_MODE, isLineRoutingVerifyMode);
}
@Override
public boolean isTaxiUnmanedDriverLineRoutingVerifyMode() {
return get_bool_val(StatusDescriptor.TAXI_UNMANED_DRIVER_LINE_ROUTING_VERIFY_MODE);
}
private void doSetStatus(String tag, StatusDescriptor target, boolean value) {
mStatus.put(target, value);
invokeStatusChangedListener(target, value);

View File

@@ -46,6 +46,21 @@ public enum StatusDescriptor {
/**
* 压屏状态
*/
SCREEN_COVER
SCREEN_COVER,
/**
* taxi无人化 是否执行任务
*/
TAXI_UNMANED_DRIVER_PERFORM_TASK,
/**
* taxi无人化 是否接单
*/
TAXI_UNMANED_DRIVER_TAKING_ORDERS,
/**
* taxi无人化 是否在自主算路验证模式
*/
TAXI_UNMANED_DRIVER_LINE_ROUTING_VERIFY_MODE
}