[6.7.0][运营面板] 增加缓存
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user