diff options
author | 2025-01-09 14:53:31 +0800 | |
---|---|---|
committer | 2025-01-09 20:02:54 -0800 | |
commit | dd9da695d7e14501ac19b737eb35391d01f92138 (patch) | |
tree | c63a37555a8a91141e629cc8080f3fd429c2310b | |
parent | 1b74931d1da32473886a6e41019683f1502ff914 (diff) |
[Catalyst] Add PreferenceChangeReason IntDef
Bug: 388677104
Test: atest and manual
Flag: EXEMPT refactor
Change-Id: I4b8308d2f05d8a8c8121b9f66cdc91cb2d057a40
3 files changed, 32 insertions, 11 deletions
diff --git a/packages/SettingsLib/DataStore/src/com/android/settingslib/datastore/DataChangeReason.kt b/packages/SettingsLib/DataStore/src/com/android/settingslib/datastore/DataChangeReason.kt index 145fabea52af..ac36b08512e8 100644 --- a/packages/SettingsLib/DataStore/src/com/android/settingslib/datastore/DataChangeReason.kt +++ b/packages/SettingsLib/DataStore/src/com/android/settingslib/datastore/DataChangeReason.kt @@ -39,5 +39,7 @@ annotation class DataChangeReason { const val RESTORE = 3 /** Data is synced from another profile (e.g. personal profile to work profile). */ const val SYNC_ACROSS_PROFILES = 4 + + fun isDataChange(reason: Int): Boolean = reason in UNKNOWN..SYNC_ACROSS_PROFILES } } diff --git a/packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/PersistentPreference.kt b/packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/PersistentPreference.kt index e5bf41f87999..83725aaec377 100644 --- a/packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/PersistentPreference.kt +++ b/packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/PersistentPreference.kt @@ -44,6 +44,24 @@ annotation class ReadWritePermit { } } +/** The reason of preference change. */ +@IntDef( + PreferenceChangeReason.VALUE, + PreferenceChangeReason.STATE, + PreferenceChangeReason.DEPENDENT, +) +@Retention(AnnotationRetention.SOURCE) +annotation class PreferenceChangeReason { + companion object { + /** Preference value is changed. */ + const val VALUE = 1000 + /** Preference state (title/summary, enable state, etc.) is changed. */ + const val STATE = 1001 + /** Dependent preference state is changed. */ + const val DEPENDENT = 1002 + } +} + /** Indicates how sensitive of the data. */ @Retention(AnnotationRetention.SOURCE) @Target(AnnotationTarget.TYPE) 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 91abd8b4c9e9..8358ab921fb6 100644 --- a/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceScreenBindingHelper.kt +++ b/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceScreenBindingHelper.kt @@ -25,12 +25,14 @@ import androidx.preference.Preference import androidx.preference.PreferenceDataStore import androidx.preference.PreferenceGroup import androidx.preference.PreferenceScreen +import com.android.settingslib.datastore.DataChangeReason import com.android.settingslib.datastore.HandlerExecutor import com.android.settingslib.datastore.KeyValueStore import com.android.settingslib.datastore.KeyedDataObservable import com.android.settingslib.datastore.KeyedObservable import com.android.settingslib.datastore.KeyedObserver import com.android.settingslib.metadata.PersistentPreference +import com.android.settingslib.metadata.PreferenceChangeReason import com.android.settingslib.metadata.PreferenceHierarchy import com.android.settingslib.metadata.PreferenceHierarchyNode import com.android.settingslib.metadata.PreferenceLifecycleContext @@ -73,7 +75,7 @@ class PreferenceScreenBindingHelper( ?.keyValueStore override fun notifyPreferenceChange(key: String) = - notifyChange(key, CHANGE_REASON_STATE) + notifyChange(key, PreferenceChangeReason.STATE) @Suppress("DEPRECATION") override fun startActivityForResult( @@ -91,7 +93,13 @@ class PreferenceScreenBindingHelper( private val preferenceObserver: KeyedObserver<String?> private val storageObserver = - KeyedObserver<String> { key, _ -> notifyChange(key, CHANGE_REASON_VALUE) } + KeyedObserver<String> { key, reason -> + if (DataChangeReason.isDataChange(reason)) { + notifyChange(key, PreferenceChangeReason.VALUE) + } else { + notifyChange(key, PreferenceChangeReason.STATE) + } + } init { val preferencesBuilder = ImmutableMap.builder<String, PreferenceHierarchyNode>() @@ -148,7 +156,7 @@ class PreferenceScreenBindingHelper( } // check reason to avoid potential infinite loop - if (reason != CHANGE_REASON_DEPENDENT) { + if (reason != PreferenceChangeReason.DEPENDENT) { notifyDependents(key, mutableSetOf()) } } @@ -157,7 +165,7 @@ class PreferenceScreenBindingHelper( private fun notifyDependents(key: String, notifiedKeys: MutableSet<String>) { if (!notifiedKeys.add(key)) return for (dependency in dependencies[key]) { - notifyChange(dependency, CHANGE_REASON_DEPENDENT) + notifyChange(dependency, PreferenceChangeReason.DEPENDENT) notifyDependents(dependency, notifiedKeys) } } @@ -210,13 +218,6 @@ class PreferenceScreenBindingHelper( } companion object { - /** Preference value is changed. */ - const val CHANGE_REASON_VALUE = 0 - /** Preference state (title/summary, enable state, etc.) is changed. */ - const val CHANGE_REASON_STATE = 1 - /** Dependent preference state is changed. */ - const val CHANGE_REASON_DEPENDENT = 2 - /** Updates preference screen that has incomplete hierarchy. */ @JvmStatic fun bind(preferenceScreen: PreferenceScreen) { |