diff options
| author | Stanley Wang <stanleytfwang@google.com> | 2022-04-27 17:24:05 +0800 |
|---|---|---|
| committer | Stanley Wang <stanleytfwang@google.com> | 2022-04-27 17:24:05 +0800 |
| commit | 03fbfcbd95453f82ebca8947bb9b5be920df75fb (patch) | |
| tree | 699b4748abd5a7041c7efbdfd42899032b4d68b4 | |
| parent | a61b748e3906a150a12e5a27653722206b4790c7 (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.java | 10 |
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); } } |
