From 03fbfcbd95453f82ebca8947bb9b5be920df75fb Mon Sep 17 00:00:00 2001 From: Stanley Wang Date: Wed, 27 Apr 2022 17:24:05 +0800 Subject: [PATCH] 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 --- .../settingslib/widget/MainSwitchPreference.java | 10 +++++----- 1 file 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 7c9a045f4a425..fc0e05f7fb464 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); } }