summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jacky Wang <jiannan@google.com> 2025-02-13 12:43:33 +0800
committer Jacky Wang <jiannan@google.com> 2025-02-13 12:43:33 +0800
commitd3e4bb5c4d8231ed89472caa4316b424f8182e40 (patch)
tree3866698739095e4c78f6a96e582b3d5ba7664fd2
parentc3bac3f4d3c1b6b4d0c923ceda81dfe14760b0ac (diff)
[Catalyst] Default value is written to datastore unexpectedly
Fix: 396260949 Flag: com.android.settings.flags.catalyst Test: manual Change-Id: I28aba526ab068e2de52d562c403d856c98c385fe
-rw-r--r--packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceBindings.kt6
1 files changed, 6 insertions, 0 deletions
diff --git a/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceBindings.kt b/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceBindings.kt
index dbac17d4e8b8..44c93c77e33b 100644
--- a/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceBindings.kt
+++ b/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceBindings.kt
@@ -74,8 +74,14 @@ interface BooleanValuePreferenceBinding : PreferenceBinding {
override fun bind(preference: Preference, metadata: PreferenceMetadata) {
super.bind(preference, metadata)
(preference as TwoStatePreference).apply {
+ // MUST suppress persistent when initializing the checked state:
+ // 1. default value is written to datastore if not set (b/396260949)
+ // 2. avoid redundant read to the datastore
+ val suppressPersistent = isPersistent
+ if (suppressPersistent) isPersistent = false
// "false" is kind of placeholder, metadata datastore should provide the default value
isChecked = preferenceDataStore!!.getBoolean(key, false)
+ if (suppressPersistent) isPersistent = true
}
}
}