From ab9937f5f63fecb0948e46b06f446a9a460a64b4 Mon Sep 17 00:00:00 2001 From: Stanley Wang Date: Mon, 17 May 2021 17:36:27 +0800 Subject: [PATCH] Synchronize the states of MainSwitchBar and MainSwitchPreference. MainSwitchPreference should synchronize the switch state of MainSwitchBar. Fix: 187391143 Test: robotest and see the UI Change-Id: Ifa3d21f7ce3ba6bdcfa3c254b2aa1a7668618829 --- .../MainSwitchPreference/AndroidManifest.xml | 4 +++- .../settingslib/widget/MainSwitchPreference.java | 13 +++++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/packages/SettingsLib/MainSwitchPreference/AndroidManifest.xml b/packages/SettingsLib/MainSwitchPreference/AndroidManifest.xml index 96d9e518663f9..26075295c1555 100644 --- a/packages/SettingsLib/MainSwitchPreference/AndroidManifest.xml +++ b/packages/SettingsLib/MainSwitchPreference/AndroidManifest.xml @@ -18,6 +18,8 @@ - + 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 6f371ce2e3c1b..b78eae49c0d5e 100644 --- a/packages/SettingsLib/MainSwitchPreference/src/com/android/settingslib/widget/MainSwitchPreference.java +++ b/packages/SettingsLib/MainSwitchPreference/src/com/android/settingslib/widget/MainSwitchPreference.java @@ -19,6 +19,7 @@ package com.android.settingslib.widget; import android.content.Context; import android.content.res.TypedArray; import android.util.AttributeSet; +import android.widget.Switch; import androidx.preference.PreferenceViewHolder; import androidx.preference.TwoStatePreference; @@ -31,7 +32,7 @@ import java.util.List; * This component is used as the main switch of the page * to enable or disable the prefereces on the page. */ -public class MainSwitchPreference extends TwoStatePreference { +public class MainSwitchPreference extends TwoStatePreference implements OnMainSwitchChangeListener { private final List mSwitchChangeListeners = new ArrayList<>(); @@ -73,7 +74,7 @@ public class MainSwitchPreference extends TwoStatePreference { private void init(Context context, AttributeSet attrs) { setLayoutResource(R.layout.settingslib_main_switch_layout); - + mSwitchChangeListeners.add(this); if (attrs != null) { final TypedArray a = context.obtainStyledAttributes(attrs, androidx.preference.R.styleable.Preference, 0 /*defStyleAttr*/, @@ -88,7 +89,7 @@ public class MainSwitchPreference extends TwoStatePreference { @Override public void setChecked(boolean checked) { super.setChecked(checked); - if (mMainSwitchBar != null) { + if (mMainSwitchBar != null && mMainSwitchBar.isChecked() != checked) { mMainSwitchBar.setChecked(checked); } } @@ -101,13 +102,17 @@ public class MainSwitchPreference extends TwoStatePreference { } } + @Override + public void onSwitchChanged(Switch switchView, boolean isChecked) { + super.setChecked(isChecked); + } + /** * Update the switch status of preference */ public void updateStatus(boolean checked) { setChecked(checked); if (mMainSwitchBar != null) { - mMainSwitchBar.setChecked(checked); mMainSwitchBar.setTitle(mTitle); mMainSwitchBar.show(); }