From ec95ed2650fd55060548ef4b422826d94ff1f981 Mon Sep 17 00:00:00 2001 From: Stanley Wang Date: Thu, 24 Jun 2021 21:58:28 +0800 Subject: [PATCH] Fix the problem that the ToggleSubscriptionDialogActivity appears twice when switch changed. - Don't trigger the switch change event if the state of Switch and SwitchSettingsMainSwitchPreference are the same. Fix: 190767461 Test: robotest and operate the switch preference manually Change-Id: I6ab4b7e5ca1455948ca9118bb4a674fdc4fdbd50 --- ...oBrightnessDetailPreferenceController.java | 2 +- .../widget/SettingsMainSwitchPreference.java | 24 +++++++++---------- .../SettingsMainSwitchPreferenceTest.java | 4 ++-- 3 files changed, 14 insertions(+), 16 deletions(-) diff --git a/src/com/android/settings/display/AutoBrightnessDetailPreferenceController.java b/src/com/android/settings/display/AutoBrightnessDetailPreferenceController.java index 0a60ed31289..ec311f400f2 100644 --- a/src/com/android/settings/display/AutoBrightnessDetailPreferenceController.java +++ b/src/com/android/settings/display/AutoBrightnessDetailPreferenceController.java @@ -54,7 +54,7 @@ public class AutoBrightnessDetailPreferenceController extends SettingsMainSwitchPreference pref = (SettingsMainSwitchPreference) screen.findPreference( getPreferenceKey()); pref.addOnSwitchChangeListener(this); - pref.updateStatus(isChecked()); + pref.setChecked(isChecked()); } @Override diff --git a/src/com/android/settings/widget/SettingsMainSwitchPreference.java b/src/com/android/settings/widget/SettingsMainSwitchPreference.java index 09e1ca4cdce..f0e8d95b899 100644 --- a/src/com/android/settings/widget/SettingsMainSwitchPreference.java +++ b/src/com/android/settings/widget/SettingsMainSwitchPreference.java @@ -86,9 +86,12 @@ public class SettingsMainSwitchPreference extends TwoStatePreference implements mEnforcedAdmin = mRestrictedHelper.checkRestrictionEnforced(); } mMainSwitchBar = (SettingsMainSwitchBar) holder.findViewById(R.id.main_switch_bar); + initMainSwitchBar(); if (mIsVisible) { mMainSwitchBar.show(); - updateStatus(isChecked()); + if (mMainSwitchBar.isChecked() != isChecked()) { + setChecked(isChecked()); + } registerListenerToSwitchBar(); } else { mMainSwitchBar.hide(); @@ -144,18 +147,6 @@ public class SettingsMainSwitchPreference extends TwoStatePreference implements super.setChecked(isChecked); } - /** - * Update the switch status of preference - */ - public void updateStatus(boolean checked) { - setChecked(checked); - if (mMainSwitchBar != null) { - mMainSwitchBar.setTitle(mTitle); - mMainSwitchBar.setDisabledByAdmin(mEnforcedAdmin); - mMainSwitchBar.show(); - } - } - /** * Show the MainSwitchBar */ @@ -251,6 +242,13 @@ public class SettingsMainSwitchPreference extends TwoStatePreference implements } } + private void initMainSwitchBar() { + if (mMainSwitchBar != null) { + mMainSwitchBar.setTitle(mTitle); + mMainSwitchBar.setDisabledByAdmin(mEnforcedAdmin); + } + } + private void registerListenerToSwitchBar() { for (OnBeforeCheckedChangeListener listener : mBeforeCheckedChangeListeners) { mMainSwitchBar.setOnBeforeCheckedChangeListener(listener); diff --git a/tests/robotests/src/com/android/settings/widget/SettingsMainSwitchPreferenceTest.java b/tests/robotests/src/com/android/settings/widget/SettingsMainSwitchPreferenceTest.java index c0c4fd7baa3..31d10d925ad 100644 --- a/tests/robotests/src/com/android/settings/widget/SettingsMainSwitchPreferenceTest.java +++ b/tests/robotests/src/com/android/settings/widget/SettingsMainSwitchPreferenceTest.java @@ -59,8 +59,8 @@ public class SettingsMainSwitchPreferenceTest { } @Test - public void updateStatus_isRestricted_restrictIconShouldDisplay() { - mPreference.updateStatus(true); + public void onBindViewHolder_isRestricted_restrictIconShouldDisplay() { + mPreference.onBindViewHolder(mHolder); final SettingsMainSwitchBar switchBar = mPreference.getSwitchBar(); final ImageView restrictedIcon = switchBar.findViewById(