summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Fan Wu <cechkahn@google.com> 2025-01-09 14:53:31 +0800
committer Fan Wu <cechkahn@google.com> 2025-01-09 20:02:54 -0800
commitdd9da695d7e14501ac19b737eb35391d01f92138 (patch)
treec63a37555a8a91141e629cc8080f3fd429c2310b
parent1b74931d1da32473886a6e41019683f1502ff914 (diff)
[Catalyst] Add PreferenceChangeReason IntDef
Bug: 388677104 Test: atest and manual Flag: EXEMPT refactor Change-Id: I4b8308d2f05d8a8c8121b9f66cdc91cb2d057a40
-rw-r--r--packages/SettingsLib/DataStore/src/com/android/settingslib/datastore/DataChangeReason.kt2
-rw-r--r--packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/PersistentPreference.kt18
-rw-r--r--packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceScreenBindingHelper.kt23
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) {