Merge "[Catalyst] Prevent flicker on "Use Data Saver"" into main

This commit is contained in:
Treehugger Robot
2025-01-10 10:58:10 -08:00
committed by Android (Google) Code Review
3 changed files with 14 additions and 1 deletions

View File

@@ -36,6 +36,9 @@ class DataSaverMainSwitchPreference : MainSwitchBarMetadata, PreferenceLifecycle
override val title
get() = R.string.data_saver_switch_title
override val disableWidgetOnCheckedChanged: Boolean
get() = false
override fun storage(context: Context) = createDataStore(context)
override fun getReadPermissions(context: Context) =

View File

@@ -27,6 +27,16 @@ import com.android.settingslib.preference.TwoStatePreferenceBinding
interface MainSwitchBarMetadata :
TwoStatePreference, TwoStatePreferenceBinding, PreferenceBindingPlaceholder {
/**
* Disable main switch bar when user toggles the switch. By this way, user cannot toggle again
* before last operation is done.
*
* Side-effect: If the underlying operation is completed quickly, this will causes UI flicker.
* Override and return `false` to get rid of the flicker.
*/
val disableWidgetOnCheckedChanged: Boolean
get() = true
override fun createWidget(context: Context) = MainSwitchBarPreference(context, this)
override fun bind(preference: Preference, metadata: PreferenceMetadata) {

View File

@@ -80,7 +80,7 @@ class MainSwitchBarPreference(context: Context, private val metadata: MainSwitch
override fun onCheckedChanged(buttonView: CompoundButton, isChecked: Boolean) {
// prevent user from toggling the switch before data store operation is done
isEnabled = false
if (metadata.disableWidgetOnCheckedChanged) isEnabled = false
// once data store is updated, isEnabled will be reset due to rebind
persistBoolean(isChecked)
}