diff --git a/src/com/android/settings/datausage/DataSaverMainSwitchPreference.kt b/src/com/android/settings/datausage/DataSaverMainSwitchPreference.kt index 9127659b8e6..e73fe948c74 100644 --- a/src/com/android/settings/datausage/DataSaverMainSwitchPreference.kt +++ b/src/com/android/settings/datausage/DataSaverMainSwitchPreference.kt @@ -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) = diff --git a/src/com/android/settings/widget/MainSwitchBarMetadata.kt b/src/com/android/settings/widget/MainSwitchBarMetadata.kt index f55cfd03789..4fc89bc19b6 100644 --- a/src/com/android/settings/widget/MainSwitchBarMetadata.kt +++ b/src/com/android/settings/widget/MainSwitchBarMetadata.kt @@ -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) { diff --git a/src/com/android/settings/widget/MainSwitchBarPreference.kt b/src/com/android/settings/widget/MainSwitchBarPreference.kt index b3b341c75a9..a23409a8cc8 100644 --- a/src/com/android/settings/widget/MainSwitchBarPreference.kt +++ b/src/com/android/settings/widget/MainSwitchBarPreference.kt @@ -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) }