Merge "[Catalyst] Prevent flicker on "Use Data Saver"" into main
This commit is contained in:
committed by
Android (Google) Code Review
commit
03d71f7262
@@ -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) =
|
||||
|
@@ -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) {
|
||||
|
@@ -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)
|
||||
}
|
||||
|
Reference in New Issue
Block a user