From 43e006b69ba8479daafbb9b877b167550af43ed4 Mon Sep 17 00:00:00 2001 From: Edgar Wang Date: Tue, 9 Mar 2021 02:35:57 +0800 Subject: [PATCH] Add backward compatible for MainSwitchPreference - Before Android S, it will apply SwitchBar layout - Fix TypedArrayUtils can't build pass in another path. Bug: 182179573 Test: robotest & manual Change-Id: I33ca1991cef359f8e95650c7616bb76cee3bb7ff --- .../res/layout-v31/main_switch_bar.xml | 75 +++++++++++++++++ .../res/layout/main_switch_bar.xml | 80 +++++++------------ .../res/values-night/colors.xml | 2 + .../res/values-sw600dp/dmiens.xml | 22 +++++ .../res/values-sw720dp-land/dmiens.xml | 23 ++++++ .../res/values-sw720dp/dmiens.xml | 23 ++++++ .../res/values/colors.xml | 3 + .../res/values/dimens.xml | 4 + .../res/values/styles.xml | 6 ++ .../settingslib/widget/MainSwitchBar.java | 32 ++++++-- .../widget/MainSwitchPreference.java | 4 +- 11 files changed, 217 insertions(+), 57 deletions(-) create mode 100644 packages/SettingsLib/MainSwitchPreference/res/layout-v31/main_switch_bar.xml create mode 100644 packages/SettingsLib/MainSwitchPreference/res/values-sw600dp/dmiens.xml create mode 100644 packages/SettingsLib/MainSwitchPreference/res/values-sw720dp-land/dmiens.xml create mode 100644 packages/SettingsLib/MainSwitchPreference/res/values-sw720dp/dmiens.xml diff --git a/packages/SettingsLib/MainSwitchPreference/res/layout-v31/main_switch_bar.xml b/packages/SettingsLib/MainSwitchPreference/res/layout-v31/main_switch_bar.xml new file mode 100644 index 0000000000000..3ce9421f8e973 --- /dev/null +++ b/packages/SettingsLib/MainSwitchPreference/res/layout-v31/main_switch_bar.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + diff --git a/packages/SettingsLib/MainSwitchPreference/res/layout/main_switch_bar.xml b/packages/SettingsLib/MainSwitchPreference/res/layout/main_switch_bar.xml index 85c01c5732cab..5dc320924da22 100644 --- a/packages/SettingsLib/MainSwitchPreference/res/layout/main_switch_bar.xml +++ b/packages/SettingsLib/MainSwitchPreference/res/layout/main_switch_bar.xml @@ -1,6 +1,6 @@ + + + + + 80dp + diff --git a/packages/SettingsLib/MainSwitchPreference/res/values-sw720dp-land/dmiens.xml b/packages/SettingsLib/MainSwitchPreference/res/values-sw720dp-land/dmiens.xml new file mode 100644 index 0000000000000..3e941c22f52b6 --- /dev/null +++ b/packages/SettingsLib/MainSwitchPreference/res/values-sw720dp-land/dmiens.xml @@ -0,0 +1,23 @@ + + + + + + + 128dp + 128dp + diff --git a/packages/SettingsLib/MainSwitchPreference/res/values-sw720dp/dmiens.xml b/packages/SettingsLib/MainSwitchPreference/res/values-sw720dp/dmiens.xml new file mode 100644 index 0000000000000..2f040daf0d7a7 --- /dev/null +++ b/packages/SettingsLib/MainSwitchPreference/res/values-sw720dp/dmiens.xml @@ -0,0 +1,23 @@ + + + + + + + 80dp + 80dp + diff --git a/packages/SettingsLib/MainSwitchPreference/res/values/colors.xml b/packages/SettingsLib/MainSwitchPreference/res/values/colors.xml index 147db773fd050..b5a73b17ed340 100644 --- a/packages/SettingsLib/MainSwitchPreference/res/values/colors.xml +++ b/packages/SettingsLib/MainSwitchPreference/res/values/colors.xml @@ -20,4 +20,7 @@ #BFFFFFFF @*android:color/material_grey_600 + @*android:color/material_grey_600 + #BFFFFFFF + @android:color/white diff --git a/packages/SettingsLib/MainSwitchPreference/res/values/dimens.xml b/packages/SettingsLib/MainSwitchPreference/res/values/dimens.xml index b145c9bc4b396..c471bcd645a67 100644 --- a/packages/SettingsLib/MainSwitchPreference/res/values/dimens.xml +++ b/packages/SettingsLib/MainSwitchPreference/res/values/dimens.xml @@ -34,4 +34,8 @@ 16dp + + + 72dp + 16dp diff --git a/packages/SettingsLib/MainSwitchPreference/res/values/styles.xml b/packages/SettingsLib/MainSwitchPreference/res/values/styles.xml index 59b5899a4173c..e058097998651 100644 --- a/packages/SettingsLib/MainSwitchPreference/res/values/styles.xml +++ b/packages/SettingsLib/MainSwitchPreference/res/values/styles.xml @@ -25,4 +25,10 @@ @dimen/min_switch_width + diff --git a/packages/SettingsLib/MainSwitchPreference/src/com/android/settingslib/widget/MainSwitchBar.java b/packages/SettingsLib/MainSwitchPreference/src/com/android/settingslib/widget/MainSwitchBar.java index ae9261c48419e..2be3f0d815aaa 100644 --- a/packages/SettingsLib/MainSwitchPreference/src/com/android/settingslib/widget/MainSwitchBar.java +++ b/packages/SettingsLib/MainSwitchPreference/src/com/android/settingslib/widget/MainSwitchBar.java @@ -28,7 +28,8 @@ import android.widget.LinearLayout; import android.widget.Switch; import android.widget.TextView; -import androidx.core.content.res.TypedArrayUtils; +import androidx.annotation.ColorInt; +import androidx.core.os.BuildCompat; import java.util.ArrayList; import java.util.List; @@ -42,8 +43,11 @@ public class MainSwitchBar extends LinearLayout implements CompoundButton.OnChec private final List mSwitchChangeListeners = new ArrayList<>(); - private View mAboveDivider; - private View mBelowDivider; + @ColorInt + private int mBackgroundColor; + @ColorInt + private int mBackgroundActivatedColor; + protected TextView mTextView; protected Switch mSwitch; @@ -66,6 +70,14 @@ public class MainSwitchBar extends LinearLayout implements CompoundButton.OnChec LayoutInflater.from(context).inflate(resourceId(context, "layout", "main_switch_bar"), this); + if (!BuildCompat.isAtLeastS()) { + final TypedArray a = context.obtainStyledAttributes( + new int[]{android.R.attr.colorAccent}); + mBackgroundActivatedColor = a.getColor(0, 0); + mBackgroundColor = context.getColor(R.color.switchbar_background_color); + a.recycle(); + } + setFocusable(true); setClickable(true); @@ -80,12 +92,13 @@ public class MainSwitchBar extends LinearLayout implements CompoundButton.OnChec final TypedArray a = context.obtainStyledAttributes(attrs, androidx.preference.R.styleable.Preference, 0 /*defStyleAttr*/, 0 /*defStyleRes*/); - final CharSequence title = TypedArrayUtils.getText(a, - androidx.preference.R.styleable.Preference_title, + final CharSequence title = a.getText( androidx.preference.R.styleable.Preference_android_title); setTitle(title); a.recycle(); } + + setBackground(true); } @Override @@ -105,6 +118,7 @@ public class MainSwitchBar extends LinearLayout implements CompoundButton.OnChec if (mSwitch != null) { mSwitch.setChecked(checked); } + setBackground(checked); } /** @@ -189,6 +203,14 @@ public class MainSwitchBar extends LinearLayout implements CompoundButton.OnChec } } + private void setBackground(boolean checked) { + if (BuildCompat.isAtLeastS()) { + return; + } + + setBackgroundColor(checked ? mBackgroundActivatedColor : mBackgroundColor); + } + static class SavedState extends BaseSavedState { boolean mChecked; boolean mVisible; 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 ebeffcc3c3617..1f7f8d44d610a 100644 --- a/packages/SettingsLib/MainSwitchPreference/src/com/android/settingslib/widget/MainSwitchPreference.java +++ b/packages/SettingsLib/MainSwitchPreference/src/com/android/settingslib/widget/MainSwitchPreference.java @@ -20,7 +20,6 @@ import android.content.Context; import android.content.res.TypedArray; import android.util.AttributeSet; -import androidx.core.content.res.TypedArrayUtils; import androidx.preference.PreferenceViewHolder; import androidx.preference.TwoStatePreference; @@ -79,8 +78,7 @@ public class MainSwitchPreference extends TwoStatePreference { final TypedArray a = context.obtainStyledAttributes(attrs, androidx.preference.R.styleable.Preference, 0 /*defStyleAttr*/, 0 /*defStyleRes*/); - final CharSequence title = TypedArrayUtils.getText(a, - androidx.preference.R.styleable.Preference_title, + final CharSequence title = a.getText( androidx.preference.R.styleable.Preference_android_title); setTitle(title); a.recycle();