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