[6.7.0][运营面板] 增加缓存

This commit is contained in:
renwj
2024-09-29 11:14:19 +08:00
parent 484dd8bdc4
commit 9259507295

View File

@@ -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<String, Preference>() }
@CallSuper
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val toRemove = ArrayList<Preference>()
@@ -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<Preference>()
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 <T : Preference> 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<T>(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<SwitchPreferenceCompat>(KEY_V2N_NEW_LINKED)?.also { changeValue(it, false) }
if (!isChecked) { // preferenceScreen.findPreferenceReal<SwitchPreferenceCompat>(KEY_V2N_NEW_LINKED)?.also { changeValue(it, false) }
preferenceScreen.findPreferenceReal<SwitchPreferenceCompat>(KEY_V2N_NEW_LINKED_TO_PNC)?.also { changeValue(it, false) }
preferenceScreen.findPreferenceReal<SwitchPreferenceCompat>(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<SwitchPreferenceCompat>(KEY_RAIN_DAY)?.also {
it.extras.putBoolean("is_pressed", false)
it.extras.putBoolean("is_pressed", false)
changeValue(it, checked)
}
}