Merge "Synchronize the states of MainSwitchBar and MainSwitchPreference." into sc-dev

This commit is contained in:
Stanley Wang
2021-05-21 02:06:53 +00:00
committed by Android (Google) Code Review
2 changed files with 12 additions and 5 deletions

View File

@@ -18,6 +18,8 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.settingslib.widget">
<uses-sdk android:minSdkVersion="21" />
<uses-sdk
android:minSdkVersion="21"
android:targetSdkVersion="31"/>
</manifest>

View File

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