summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStanley Wang <stanleytfwang@google.com>2022-04-27 17:24:05 +0800
committerStanley Wang <stanleytfwang@google.com>2022-04-27 17:24:05 +0800
commit03fbfcbd95453f82ebca8947bb9b5be920df75fb (patch)
tree699b4748abd5a7041c7efbdfd42899032b4d68b4
parenta61b748e3906a150a12e5a27653722206b4790c7 (diff)
Fixe the problem of invalid switch preference.
The source of this problem is that onBindViewHolder is called after the user add the OnMainSwitchChangeListener. Then preference gets a new MainSwitchBar in onBindViewHolder and causes the listener to fail. Bug: 223325900 Test: Manually test and observe the UI Change-Id: Icc2e3c774ae1a8cb81b8ec5a16a82405aedc7c1c
-rw-r--r--packages/SettingsLib/MainSwitchPreference/src/com/android/settingslib/widget/MainSwitchPreference.java10
1 files changed, 5 insertions, 5 deletions
diff --git a/packages/SettingsLib/MainSwitchPreference/src/com/android/settingslib/widget/MainSwitchPreference.java b/packages/SettingsLib/MainSwitchPreference/src/com/android/settingslib/widget/MainSwitchPreference.java
index 7c9a045f4a42..fc0e05f7fb46 100644
--- a/packages/SettingsLib/MainSwitchPreference/src/com/android/settingslib/widget/MainSwitchPreference.java
+++ b/packages/SettingsLib/MainSwitchPreference/src/com/android/settingslib/widget/MainSwitchPreference.java
@@ -122,9 +122,10 @@ public class MainSwitchPreference extends TwoStatePreference implements OnMainSw
* Adds a listener for switch changes
*/
public void addOnSwitchChangeListener(OnMainSwitchChangeListener listener) {
- if (mMainSwitchBar == null) {
+ if (!mSwitchChangeListeners.contains(listener)) {
mSwitchChangeListeners.add(listener);
- } else {
+ }
+ if (mMainSwitchBar != null) {
mMainSwitchBar.addOnSwitchChangeListener(listener);
}
}
@@ -133,9 +134,8 @@ public class MainSwitchPreference extends TwoStatePreference implements OnMainSw
* Remove a listener for switch changes
*/
public void removeOnSwitchChangeListener(OnMainSwitchChangeListener listener) {
- if (mMainSwitchBar == null) {
- mSwitchChangeListeners.remove(listener);
- } else {
+ mSwitchChangeListeners.remove(listener);
+ if (mMainSwitchBar != null) {
mMainSwitchBar.removeOnSwitchChangeListener(listener);
}
}