diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/bone/status/StartAutoPilotStatusView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/bone/status/StartAutoPilotStatusView.kt index 8710c64a88..551dfe6341 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/bone/status/StartAutoPilotStatusView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/bone/status/StartAutoPilotStatusView.kt @@ -7,13 +7,18 @@ import android.view.View import androidx.constraintlayout.widget.ConstraintLayout import androidx.core.content.ContextCompat import chassis.Chassis +import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener +import com.mogo.eagle.core.function.api.hmi.view.IViewControlListener +import com.mogo.eagle.core.function.api.hmi.view.IViewControlListener.Companion.FUNC_MODE_DEMO import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager import com.mogo.eagle.core.function.call.hmi.CallerHmiManager +import com.mogo.eagle.core.function.call.hmi.CallerHmiViewControlListenerManager import com.mogo.eagle.core.function.hmi.R import com.mogo.eagle.core.utilcode.kotlin.onClick import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.Logger +import com.mogo.eagle.core.utilcode.util.UiThreadHandler import com.zhjt.mogo_core_function_devatools.status.StatusManager import com.zhjt.mogo_core_function_devatools.status.entity.AcceleratorStatus import com.zhjt.mogo_core_function_devatools.status.entity.BrakeStatus @@ -44,7 +49,8 @@ class StartAutoPilotStatusView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 -) : ConstraintLayout(context, attrs, defStyleAttr), StatusManager.IStatusListener { +) : ConstraintLayout(context, attrs, defStyleAttr), StatusManager.IStatusListener, + IViewControlListener { companion object { private const val TAG = "StartAutoPilotStatusView" @@ -89,7 +95,7 @@ class StartAutoPilotStatusView @JvmOverloads constructor( } private fun handleFSM(status: FSMStatus) { - Logger.d(TAG, "--- handleFSM ---FSMStatus: code=${status.state} isError=${status.isException()} ") + Logger.d(TAG, "--- handleFSM ---FSMStatus: code=${status.state} isError=${status.isException()} isDemoMode=${FunctionBuildConfig.isDemoMode}") val lastHasFSM = hasFSM.get() val newHasFSM = status.hasFSMModule() Logger.d(TAG, "--- handleFSM ---lastHasFSM=${lastHasFSM} newHasFSM=${newHasFSM}") @@ -98,6 +104,11 @@ class StartAutoPilotStatusView @JvmOverloads constructor( } hasFSM.set(newHasFSM) + if (FunctionBuildConfig.isDemoMode && status.isException()) { + // 美化模式下如果是异常的,修改成正常的 + status.state = FSMStateCode.ExistNormal + } + when (status.state) { FSMStateCode.UnKnown -> { fSMStatusLayout?.setOnClickListener(null) @@ -145,9 +156,15 @@ class StartAutoPilotStatusView @JvmOverloads constructor( } private fun handleWithoutFSM(status: Status) { - val isError = + var isError = status.isException() && CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().state != IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING - Logger.d(TAG, "--- handleWithoutFSM ---${status::class.simpleName}: $isError") + Logger.d(TAG, "--- handleWithoutFSM --- isError=${status::class.simpleName}: $isError isDemoMode=${FunctionBuildConfig.isDemoMode}") + + if (FunctionBuildConfig.isDemoMode && isError) { + // 美化模式下如果是异常的,修改成正常的 + isError = false + } + when (status) { is GearStatus -> { val position = try { @@ -224,6 +241,34 @@ class StartAutoPilotStatusView @JvmOverloads constructor( } } + /** + * 处理无FSM模块时 && 美化模式时 + */ + private fun handleWithoutFSMDemoMode() { + Logger.d(TAG, "--- handleWithoutFSMDemoMode ---") + UiThreadHandler.post { + tv_gear?.isEnabled = false + iv_accelerator?.isSelected = false + iv_brake?.isSelected = false + iv_double_flash?.isSelected = false + iv_steer?.isSelected = false + withoutFSMStatusLayout?.background = + ContextCompat.getDrawable( + context, + R.drawable.icon_no_fsm_status_bg_normal + ) + notifyStatus(false) + } + } + + /** + * 处理有FSM模块时 && 美化模式时 + */ + private fun handleFSMDemoMode() { + Logger.d(TAG, "--- handleFSMDemoMode ---") + handleFSM(FSMStatus(FSMStateCode.ExistNormal, listOf("正常"))) + } + private fun notifyStatus(isError: Boolean) { Logger.d(TAG, "--- notifyStatus ---: $isError") statusChangedListeners.values.forEach { itx -> @@ -238,11 +283,27 @@ class StartAutoPilotStatusView @JvmOverloads constructor( override fun onAttachedToWindow() { super.onAttachedToWindow() StatusManager.addListener(TAG, this) + CallerHmiViewControlListenerManager.addListener(TAG,this) } override fun onDetachedFromWindow() { super.onDetachedFromWindow() StatusManager.removeListener(TAG) + CallerHmiViewControlListenerManager.removeListener(TAG) + } + + override fun updateFuncMode(tag: String, boolean: Boolean) { + if(tag == FUNC_MODE_DEMO){ + Logger.i(TAG, "updateFuncMode: tag=$tag value=$boolean") + if (FunctionBuildConfig.isDemoMode) { + // 构建数据,强制刷新成正常的状态 + if (hasFSM.get()) { + handleFSMDemoMode() + } else { + handleWithoutFSMDemoMode() + } + } + } } /**