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();
}