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
|
override val title
|
||||||
get() = R.string.data_saver_switch_title
|
get() = R.string.data_saver_switch_title
|
||||||
|
|
||||||
|
override val disableWidgetOnCheckedChanged: Boolean
|
||||||
|
get() = false
|
||||||
|
|
||||||
override fun storage(context: Context) = createDataStore(context)
|
override fun storage(context: Context) = createDataStore(context)
|
||||||
|
|
||||||
override fun getReadPermissions(context: Context) =
|
override fun getReadPermissions(context: Context) =
|
||||||
|
|||||||
@@ -27,6 +27,16 @@ import com.android.settingslib.preference.TwoStatePreferenceBinding
|
|||||||
interface MainSwitchBarMetadata :
|
interface MainSwitchBarMetadata :
|
||||||
TwoStatePreference, TwoStatePreferenceBinding, PreferenceBindingPlaceholder {
|
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 createWidget(context: Context) = MainSwitchBarPreference(context, this)
|
||||||
|
|
||||||
override fun bind(preference: Preference, metadata: PreferenceMetadata) {
|
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) {
|
override fun onCheckedChanged(buttonView: CompoundButton, isChecked: Boolean) {
|
||||||
// prevent user from toggling the switch before data store operation is done
|
// 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
|
// once data store is updated, isEnabled will be reset due to rebind
|
||||||
persistBoolean(isChecked)
|
persistBoolean(isChecked)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user