From 9259507295501f51aa15dc6c3b026869ecd792f4 Mon Sep 17 00:00:00 2001 From: renwj Date: Sun, 29 Sep 2024 11:14:19 +0800 Subject: [PATCH] =?UTF-8?q?[6.7.0][=E8=BF=90=E8=90=A5=E9=9D=A2=E6=9D=BF]?= =?UTF-8?q?=20=E5=A2=9E=E5=8A=A0=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hmi/ui/operate/OperatePanelLayout.kt | 172 +++++++++--------- 1 file changed, 84 insertions(+), 88 deletions(-) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/operate/OperatePanelLayout.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/operate/OperatePanelLayout.kt index cd2dba7b31..9993d23ffe 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/operate/OperatePanelLayout.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/operate/OperatePanelLayout.kt @@ -59,6 +59,7 @@ import kotlinx.android.synthetic.main.layout_operate_panel.view.iv_operate_panel import kotlinx.coroutines.launch import me.jessyan.autosize.utils.AutoSizeUtils import mogo.telematics.pad.MessagePad +import java.util.concurrent.ConcurrentHashMap class OperatePanelLayout : LinearLayout { @@ -70,6 +71,8 @@ class OperatePanelLayout : LinearLayout { private var header: PreferenceFragmentCompat? = null + private var prev: Preference? = null + override fun onCreatePreferenceHeader(): PreferenceFragmentCompat { return PreferenceHeader().also { header = it } } @@ -94,6 +97,10 @@ class OperatePanelLayout : LinearLayout { override fun onPreferenceStartFragment(caller: PreferenceFragmentCompat, pref: Preference): Boolean { + if (prev == pref) { + return true + } + prev = pref try { return super.onPreferenceStartFragment(caller, pref) } finally { @@ -119,12 +126,11 @@ class OperatePanelLayout : LinearLayout { } } - class PreferenceHeader : PreferenceFragmentCompat() { + abstract class PreferenceFragmentBase : PreferenceFragmentCompat() { - companion object { - private const val KEY_WELCOME_WORDS = "welcome_words" - } + protected val dp by lazy { ConcurrentHashMap() } + @CallSuper override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val toRemove = ArrayList() @@ -138,107 +144,99 @@ class OperatePanelLayout : LinearLayout { } } - private fun isEnabled(pref: Preference): Boolean { + open fun isEnabled(pref: Preference): Boolean { + return true + } + + private fun walk(block: (Preference) -> Unit) { + + fun inner(pref: Preference) { + if (pref is PreferenceGroup) { + pref.forEach { + inner(it) + } + } else { + if (pref.key != null) { + dp[pref.key] = pref + } + block(pref) + } + } + inner(preferenceScreen) + } + } + + class PreferenceHeader : PreferenceFragmentBase() { + + companion object { + private const val KEY_WELCOME_WORDS = "welcome_words" + } + + override fun isEnabled(pref: Preference): Boolean { if (pref.key == KEY_WELCOME_WORDS) { return AppIdentityModeUtils.isM1(FunctionBuildConfig.appIdentityMode) || AppIdentityModeUtils.isB2(FunctionBuildConfig.appIdentityMode) } return true } - private fun walk(block: (Preference) -> Unit) { - fun inner(pref: Preference) { - if (pref is PreferenceGroup) { - pref.forEach { - inner(it) - } - } else { - block(pref) - } - } - inner(preferenceScreen) - } - override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.operate_panel_preference_headers, rootKey) } - } - abstract class OperatePanelDetailBase : PreferenceFragmentCompat(), Preference.OnPreferenceChangeListener, Preference.OnPreferenceClickListener { + abstract class OperatePanelDetailBase : PreferenceFragmentBase(), Preference.OnPreferenceChangeListener, Preference.OnPreferenceClickListener { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setPreferenceChangeListener(preferenceScreen) setPreferenceClickListener(preferenceScreen) setDefaultVal(preferenceScreen) - setEnabled(preferenceScreen) - val toRemove = ArrayList() - walk { pref -> - if (!isEnabled(pref)) { - toRemove.add(pref) - } - } - toRemove.forEach { - preferenceScreen.removePreferenceRecursively(it.key) - } - } - - private fun walk(block: (Preference) -> Unit) { - fun inner(pref: Preference) { - if (pref is PreferenceGroup) { - pref.forEach { - inner(it) - } - } else { - block(pref) - } - } - inner(preferenceScreen) } protected open fun getDefaultVal(pref: Preference): Any? { return null } - protected open fun isEnabled(pref: Preference): Boolean { - return true - } - private fun setDefaultVal(pref: Preference) { + if (pref.key != null) { + val old = dp[pref.key] + if (old != null) { + setDefaultValInner(old) + return + } + } if (pref is PreferenceGroup) { pref.forEach { setDefaultVal(it) } } else { - if (!pref.isPersistent) { - val defVal = getDefaultVal(pref) - if (defVal != null) { - if (pref is TwoStatePreference) { - changeValue(pref, defVal as Boolean) - } else { - pref.setDefaultValue(defVal) - } - } - } else { //TODO renwj 处理持久化存储时,将持久化的值重新赋给业务层的静态变量 - } + dp[pref.key] = pref + setDefaultValInner(pref) } } - private fun setEnabled(pref: Preference) { - if (pref is PreferenceGroup) { - pref.forEach { - setEnabled(it) - } - } else { - val curr = isEnabled(pref) - val prev = pref.isEnabled - if (curr != prev) { - pref.isEnabled = curr + private fun setDefaultValInner(pref: Preference) { + if (!pref.isPersistent) { + val defVal = getDefaultVal(pref) + if (defVal != null) { + if (pref is TwoStatePreference) { + changeValue(pref, defVal as Boolean) + } else { + pref.setDefaultValue(defVal) + } } + } else { //TODO renwj 处理持久化存储时,将持久化的值重新赋给业务层的静态变量 } } private fun setPreferenceChangeListener(pref: Preference) { + if (pref.key != null) { + val old = dp[pref.key] + if (old != null) { + old.onPreferenceChangeListener = this + return + } + } if (pref is PreferenceGroup) { pref.forEach { setPreferenceChangeListener(it) } } else { @@ -247,6 +245,13 @@ class OperatePanelLayout : LinearLayout { } private fun setPreferenceClickListener(pref: Preference) { + if (pref.key != null) { + val old = dp[pref.key] + if (old != null) { + old.onPreferenceClickListener = this + return + } + } if (pref is PreferenceGroup) { pref.forEach { setPreferenceClickListener(it) @@ -258,6 +263,10 @@ class OperatePanelLayout : LinearLayout { @Suppress("UNCHECKED_CAST") fun Preference.findPreferenceReal(key: String): T? { + val old = dp[key] + if (old != null) { + return old as T + } if (this is PreferenceGroup) { this.forEach { val find = it.findPreferenceReal(key) @@ -301,7 +310,6 @@ class OperatePanelLayout : LinearLayout { companion object { private const val KEY_V2X_TOTAL_SWITCH = "v2x_total_switch" private const val KEY_V2N_TOTAL_SWITCH = "v2n_total_switch" -// private const val KEY_V2N_NEW_LINKED = "v2n_new_linked" private const val KEY_V2N_NEW_LINKED_TO_PNC = "v2n_new_linked_to_pnc" private const val KEY_V2N_NEW_LINKED_GREEN_WAVE = "v2n_new_linked_green_wave" private const val KEY_V2I_TOTAL_SWITCH = "v2i_total_switch" @@ -324,9 +332,6 @@ class OperatePanelLayout : LinearLayout { KEY_V2N_TOTAL_SWITCH -> { return FunctionBuildConfig.v2nTotalSwitch } -// KEY_V2N_NEW_LINKED -> { -// return FunctionBuildConfig.v2nNewLinked -// } KEY_V2N_NEW_LINKED_TO_PNC -> { return FunctionBuildConfig.v2nNewLinkedToPNC } @@ -381,20 +386,12 @@ class OperatePanelLayout : LinearLayout { FunctionBuildConfig.v2nTotalSwitch = isChecked hmiAction("V2N总开关, ", isChecked) clickEventAnalytics("V2N总开关", isChecked) - if (!isChecked) { -// preferenceScreen.findPreferenceReal(KEY_V2N_NEW_LINKED)?.also { changeValue(it, false) } + if (!isChecked) { // preferenceScreen.findPreferenceReal(KEY_V2N_NEW_LINKED)?.also { changeValue(it, false) } preferenceScreen.findPreferenceReal(KEY_V2N_NEW_LINKED_TO_PNC)?.also { changeValue(it, false) } preferenceScreen.findPreferenceReal(KEY_V2N_NEW_LINKED_GREEN_WAVE)?.also { changeValue(it, false) } } return true } -// KEY_V2N_NEW_LINKED -> { -// val isChecked = newValue as? Boolean ?: false -// FunctionBuildConfig.v2nNewLinked = isChecked -// hmiAction("V2N新链路", isChecked) -// clickEventAnalytics("V2N新链路", isChecked) -// return true -// } KEY_V2N_NEW_LINKED_TO_PNC -> { val isChecked = newValue as? Boolean ?: false FunctionBuildConfig.v2nNewLinkedToPNC = isChecked @@ -750,6 +747,7 @@ class OperatePanelLayout : LinearLayout { KEY_RED_OR_GREEN_LIGHT_MARKER -> { val isChecked = newValue as? Boolean ?: false hmiAction("SOP 红绿灯标识开关, ", isChecked) + HmiBuildConfig.isShowTrafficLightView = isChecked clickEventAnalytics("红绿灯标识", isChecked) if (isChecked) { CallerHmiManager.showTrafficLightView() @@ -839,12 +837,10 @@ class OperatePanelLayout : LinearLayout { val activity = AppStateManager.currentActivity() if (activity != null) { val confirmDialog = SweeperModeChangedConfirmDialog(activity) - confirmDialog.setClickListener(object: SweeperModeChangedConfirmDialog.ClickListener { + confirmDialog.setClickListener(object : SweeperModeChangedConfirmDialog.ClickListener { override fun confirm() { - CallerSweeperModeListenerManager.invokeSweeperModeListeners( - if (isChecked) SweeperVehicleConfigUtils.BUSINESS_MODE_CLOUD - else SweeperVehicleConfigUtils.BUSINESS_MODE_OPERATE - ) + CallerSweeperModeListenerManager.invokeSweeperModeListeners(if (isChecked) SweeperVehicleConfigUtils.BUSINESS_MODE_CLOUD + else SweeperVehicleConfigUtils.BUSINESS_MODE_OPERATE) } override fun cancel() { @@ -853,7 +849,7 @@ class OperatePanelLayout : LinearLayout { }) confirmDialog.showSweeperModeChangeConfirmDialog() } - clickEventAnalytics("清扫云控业务",isChecked) + clickEventAnalytics("清扫云控业务", isChecked) } } return super.onPreferenceChange(preference, newValue) @@ -973,7 +969,7 @@ class OperatePanelLayout : LinearLayout { super.updateFuncMode(tag, checked) if (tag == FUNC_MODE_RAIN) { preferenceScreen.findPreferenceReal(KEY_RAIN_DAY)?.also { - it.extras.putBoolean("is_pressed", false) + it.extras.putBoolean("is_pressed", false) changeValue(it, checked) } }