[6.7.0][FSM] refactor: 调整逻辑;
This commit is contained in:
@@ -167,7 +167,10 @@ class FSMStatus(var state: FSMStateCode, var desc: String = ""): Status(), IAuto
|
||||
|
||||
override fun isException(): Boolean = state == FSMStateCode.ExistError
|
||||
|
||||
fun hasFSMModule(): Boolean = (state == FSMStateCode.ExistNormal) || (state == FSMStateCode.ExistError)
|
||||
/**
|
||||
* 是否有 FSM 模块,Unknown展示 FSM 样式,算存在
|
||||
*/
|
||||
fun hasFSMModule(): Boolean = (state == FSMStateCode.UnKnown) || (state == FSMStateCode.ExistNormal) || (state == FSMStateCode.ExistError)
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -62,7 +62,7 @@ class StartAutoPilotStatusView @JvmOverloads constructor(
|
||||
}
|
||||
}
|
||||
|
||||
private val hasFSM by lazy { AtomicBoolean(false) }
|
||||
private val hasFSM by lazy { AtomicBoolean(true) }
|
||||
|
||||
|
||||
init {
|
||||
@@ -71,8 +71,7 @@ class StartAutoPilotStatusView @JvmOverloads constructor(
|
||||
}
|
||||
|
||||
private fun initView() {
|
||||
// 默认展示 有 FSM 的情况,未知状态
|
||||
changeStatusContainer(true)
|
||||
// 默认展示 FSM 情况未知的状态
|
||||
handleFSM(FSMStatus(FSMStateCode.UnKnown, "未知"))
|
||||
}
|
||||
|
||||
@@ -91,13 +90,14 @@ class StartAutoPilotStatusView @JvmOverloads constructor(
|
||||
}
|
||||
|
||||
private fun handleFSM(status: FSMStatus) {
|
||||
Logger.d(TAG, "--- handleFSM ---:${status.isException()}")
|
||||
Logger.d(TAG, "--- handleFSM ---FSMStatus: code=${status.state} isError=${status.isException()} ")
|
||||
val lastHasFSM = hasFSM.get()
|
||||
val newHasFSM = status.hasFSMModule()
|
||||
hasFSM.set(newHasFSM)
|
||||
Logger.d(TAG, "--- handleFSM ---lastHasFSM=${lastHasFSM} newHasFSM=${newHasFSM}")
|
||||
if (lastHasFSM != newHasFSM) {
|
||||
changeStatusContainer(status.hasFSMModule())
|
||||
changeStatusContainer(newHasFSM)
|
||||
}
|
||||
hasFSM.set(newHasFSM)
|
||||
|
||||
when (status.state) {
|
||||
FSMStateCode.UnKnown -> {
|
||||
@@ -149,7 +149,7 @@ class StartAutoPilotStatusView @JvmOverloads constructor(
|
||||
private fun handleWithoutFSM(status: Status) {
|
||||
val isError =
|
||||
status.isException() && CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().state != IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING
|
||||
Logger.d(TAG, "--- handleWithoutFSM ---: $isError")
|
||||
Logger.d(TAG, "--- handleWithoutFSM ---${status::class.simpleName}: $isError")
|
||||
when (status) {
|
||||
is GearStatus -> {
|
||||
val position = try {
|
||||
@@ -163,28 +163,28 @@ class StartAutoPilotStatusView @JvmOverloads constructor(
|
||||
|
||||
when (position) {
|
||||
Chassis.GearPosition.GEAR_N -> {
|
||||
tv_gear.isEnabled = isError
|
||||
tv_gear.text = "N"
|
||||
tv_gear?.isEnabled = isError
|
||||
tv_gear?.text = "N"
|
||||
}
|
||||
|
||||
Chassis.GearPosition.GEAR_R -> {
|
||||
tv_gear.isEnabled = isError
|
||||
tv_gear.text = "R"
|
||||
tv_gear?.isEnabled = isError
|
||||
tv_gear?.text = "R"
|
||||
}
|
||||
|
||||
Chassis.GearPosition.GEAR_P -> {
|
||||
tv_gear.isEnabled = isError
|
||||
tv_gear.text = "P"
|
||||
tv_gear?.isEnabled = isError
|
||||
tv_gear?.text = "P"
|
||||
}
|
||||
|
||||
Chassis.GearPosition.GEAR_D -> {
|
||||
tv_gear.isEnabled = isError
|
||||
tv_gear.text = "D"
|
||||
tv_gear?.isEnabled = isError
|
||||
tv_gear?.text = "D"
|
||||
}
|
||||
|
||||
Chassis.GearPosition.GEAR_NONE -> {
|
||||
tv_gear.isEnabled = false
|
||||
tv_gear.text = ""
|
||||
tv_gear?.isEnabled = false
|
||||
tv_gear?.text = ""
|
||||
}
|
||||
|
||||
else -> {}
|
||||
@@ -207,18 +207,22 @@ class StartAutoPilotStatusView @JvmOverloads constructor(
|
||||
iv_steer?.isSelected = isError
|
||||
}
|
||||
|
||||
is SpeedStatus -> {
|
||||
// TODO
|
||||
}
|
||||
|
||||
else -> {
|
||||
Logger.d(TAG, "other state: $status")
|
||||
}
|
||||
}
|
||||
notifyStatus(isError)
|
||||
val isAnyOneError = tv_gear?.isEnabled == true || iv_accelerator?.isSelected == true || iv_brake?.isSelected == true || iv_double_flash?.isSelected == true || iv_steer?.isSelected == true
|
||||
withoutFSMStatusLayout?.background =
|
||||
ContextCompat.getDrawable(
|
||||
context,
|
||||
if (isAnyOneError) R.drawable.icon_no_fsm_status_bg_error
|
||||
else R.drawable.icon_no_fsm_status_bg_normal
|
||||
)
|
||||
notifyStatus(isAnyOneError)
|
||||
}
|
||||
|
||||
private fun notifyStatus(isError: Boolean) {
|
||||
Logger.d(TAG, "--- notifyStatus ---: $isError")
|
||||
statusChangedListeners.values.forEach { itx ->
|
||||
if (isError) {
|
||||
itx.onStatusError()
|
||||
@@ -245,11 +249,16 @@ class StartAutoPilotStatusView @JvmOverloads constructor(
|
||||
*/
|
||||
override fun onStatusChanged(changed: List<Status>, all: List<Status>) {
|
||||
changed.filter { it is IAutopilotPreLaunchStatus }.forEach { status ->
|
||||
Logger.d(TAG, "onStatusChanged --> ${status::class.simpleName}")
|
||||
when (status) {
|
||||
is FSMStatus -> {
|
||||
handleFSM(status)
|
||||
}
|
||||
|
||||
is SpeedStatus -> {
|
||||
// TODO
|
||||
}
|
||||
|
||||
else -> {
|
||||
handleWithoutFSM(status)
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
android:layout_height="match_parent"
|
||||
android:scaleType="fitXY"
|
||||
android:src="@drawable/icon_fsm_status_bg_normal"
|
||||
android:visibility="visible"
|
||||
tools:visibility="visible"/>
|
||||
|
||||
<LinearLayout
|
||||
@@ -20,7 +21,6 @@
|
||||
android:paddingStart="@dimen/dp_34"
|
||||
android:gravity="center_vertical"
|
||||
android:visibility="gone"
|
||||
tools:visibility="gone"
|
||||
tools:background="@drawable/icon_no_fsm_status_bg_error">
|
||||
|
||||
<TextView
|
||||
|
||||
Reference in New Issue
Block a user