diff options
author | 2025-02-25 08:49:48 +0800 | |
---|---|---|
committer | 2025-02-25 08:49:48 +0800 | |
commit | ed1adfac0e4f324caffe1565867b922913e02deb (patch) | |
tree | bf1a032a71b2528a45ca79447dfc75789802c42e | |
parent | badfb5945b88b604c22142ae37d0602c359d57ba (diff) |
[Catalyst] Allow non persistent preference to notify change
Bug: 397798327
Flag: com.android.settings.flags.catalyst
Test: manual
Change-Id: Ia0f62f92e39e41d3f917e2e394cb29479083857d
-rw-r--r-- | packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceScreenBindingHelper.kt | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceScreenBindingHelper.kt b/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceScreenBindingHelper.kt index 1cb8005ddae0..02bef9fd2fb2 100644 --- a/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceScreenBindingHelper.kt +++ b/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceScreenBindingHelper.kt @@ -59,8 +59,6 @@ class PreferenceScreenBindingHelper( private val preferenceHierarchy: PreferenceHierarchy, ) : KeyedDataObservable<String>() { - private val mainExecutor = HandlerExecutor.main - private val preferenceLifecycleContext = object : PreferenceLifecycleContext(context) { override val lifecycleScope: LifecycleCoroutineScope @@ -88,11 +86,11 @@ class PreferenceScreenBindingHelper( private val preferences: ImmutableMap<String, PreferenceHierarchyNode> private val dependencies: ImmutableMultimap<String, String> private val lifecycleAwarePreferences: Array<PreferenceLifecycleProvider> - private val storages = mutableMapOf<String, KeyedObservable<String>>() + private val observables = mutableMapOf<String, KeyedObservable<String>>() private val preferenceObserver: KeyedObserver<String?> - private val storageObserver = + private val observer = KeyedObserver<String> { key, reason -> if (DataChangeReason.isDataChange(reason)) { notifyChange(key, PreferenceChangeReason.VALUE) @@ -133,15 +131,19 @@ class PreferenceScreenBindingHelper( this.dependencies = dependenciesBuilder.build() this.lifecycleAwarePreferences = lifecycleAwarePreferences.toTypedArray() + val executor = HandlerExecutor.main preferenceObserver = KeyedObserver { key, reason -> onPreferenceChange(key, reason) } - addObserver(preferenceObserver, mainExecutor) + addObserver(preferenceObserver, executor) preferenceScreen.forEachRecursively { - it.preferenceDataStore?.findKeyValueStore()?.let { keyValueStore -> - val key = it.key - storages[key] = keyValueStore - keyValueStore.addObserver(key, storageObserver, mainExecutor) - } + val key = it.key ?: return@forEachRecursively + @Suppress("UNCHECKED_CAST") + val observable = + it.preferenceDataStore?.findKeyValueStore() + ?: (preferences[key]?.metadata as? KeyedObservable<String>) + ?: return@forEachRecursively + observables[key] = observable + observable.addObserver(key, observer, executor) } } @@ -212,7 +214,7 @@ class PreferenceScreenBindingHelper( fun onDestroy() { removeObserver(preferenceObserver) - for ((key, storage) in storages) storage.removeObserver(key, storageObserver) + for ((key, observable) in observables) observable.removeObserver(key, observer) for (preference in lifecycleAwarePreferences) { preference.onDestroy(preferenceLifecycleContext) } |