diff options
author | 2025-02-13 12:43:33 +0800 | |
---|---|---|
committer | 2025-02-13 12:43:33 +0800 | |
commit | d3e4bb5c4d8231ed89472caa4316b424f8182e40 (patch) | |
tree | 3866698739095e4c78f6a96e582b3d5ba7664fd2 | |
parent | c3bac3f4d3c1b6b4d0c923ceda81dfe14760b0ac (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.kt | 6 |
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 } } } |