From fe292515d88e803057a5b6077f67ce284b595d7a Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Wed, 22 Mar 2017 11:43:22 -0700 Subject: [PATCH] Refactor the layout for MasterSwitch to a 2 target pref And move the layout to settingslib. The new TwoTargetPreference is a preference object that has a vertical divider between main panel and widget (if it exists). Converted master switch, restricted preference, gear preference to use the new style Change-Id: Ia3848cebb06b8edc4e60abf9b0caf13cdb29c22c Fix: 36511169 Test: make RunSettingsRoboTests --- AndroidManifest.xml | 2 + res/layout/preference_master_switch.xml | 90 ------------------- res/layout/preference_widget_gear.xml | 30 +++++++ .../preference_widget_master_switch.xml | 34 ++----- res/layout/preference_widget_settings.xml | 33 ------- .../inputmethod/SpellCheckerPreference.java | 3 +- .../settings/nfc/NfcPaymentPreference.java | 4 +- .../settings/widget/GearPreference.java | 11 ++- .../widget/MasterSwitchPreference.java | 28 +++--- .../widget/MasterSwitchPreferenceTest.java | 46 +++++----- 10 files changed, 83 insertions(+), 198 deletions(-) delete mode 100644 res/layout/preference_master_switch.xml create mode 100644 res/layout/preference_widget_gear.xml delete mode 100644 res/layout/preference_widget_settings.xml diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 0404d0b5f2c..10b91cbed06 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1014,6 +1014,8 @@ + diff --git a/res/layout/preference_master_switch.xml b/res/layout/preference_master_switch.xml deleted file mode 100644 index c7dd6d69693..00000000000 --- a/res/layout/preference_master_switch.xml +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/res/layout/preference_widget_gear.xml b/res/layout/preference_widget_gear.xml new file mode 100644 index 00000000000..f533dcfc63d --- /dev/null +++ b/res/layout/preference_widget_gear.xml @@ -0,0 +1,30 @@ + + + + + + diff --git a/res/layout/preference_widget_master_switch.xml b/res/layout/preference_widget_master_switch.xml index ee335f173b3..7e28be90d13 100644 --- a/res/layout/preference_widget_master_switch.xml +++ b/res/layout/preference_widget_master_switch.xml @@ -15,28 +15,12 @@ limitations under the License. --> - - - - - - - - - + diff --git a/res/layout/preference_widget_settings.xml b/res/layout/preference_widget_settings.xml deleted file mode 100644 index dfeca1a4431..00000000000 --- a/res/layout/preference_widget_settings.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - diff --git a/src/com/android/settings/inputmethod/SpellCheckerPreference.java b/src/com/android/settings/inputmethod/SpellCheckerPreference.java index c730bcc01d7..02a2e291b5d 100644 --- a/src/com/android/settings/inputmethod/SpellCheckerPreference.java +++ b/src/com/android/settings/inputmethod/SpellCheckerPreference.java @@ -21,7 +21,6 @@ import android.content.ActivityNotFoundException; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.support.v7.preference.ListPreference; import android.support.v7.preference.PreferenceViewHolder; import android.text.TextUtils; import android.view.View; @@ -46,7 +45,7 @@ class SpellCheckerPreference extends CustomListPreference { public SpellCheckerPreference(final Context context, final SpellCheckerInfo[] scis) { super(context, null); mScis = scis; - setWidgetLayoutResource(R.layout.preference_widget_settings); + setWidgetLayoutResource(R.layout.preference_widget_gear); CharSequence[] labels = new CharSequence[scis.length]; CharSequence[] values = new CharSequence[scis.length]; for (int i = 0 ; i < scis.length; i++) { diff --git a/src/com/android/settings/nfc/NfcPaymentPreference.java b/src/com/android/settings/nfc/NfcPaymentPreference.java index 4738728a5f4..072d454ff58 100644 --- a/src/com/android/settings/nfc/NfcPaymentPreference.java +++ b/src/com/android/settings/nfc/NfcPaymentPreference.java @@ -15,7 +15,6 @@ */ package com.android.settings.nfc; -import android.app.Activity; import android.app.AlertDialog; import android.content.ActivityNotFoundException; import android.content.Context; @@ -33,7 +32,6 @@ import android.widget.RadioButton; import com.android.settings.CustomDialogPreference; import com.android.settings.R; -import com.android.settings.dashboard.SummaryLoader; import com.android.settings.nfc.PaymentBackend.PaymentAppInfo; import java.util.List; @@ -59,7 +57,7 @@ public class NfcPaymentPreference extends CustomDialogPreference implements mAdapter = new NfcPaymentAdapter(); setDialogTitle(context.getString(R.string.nfc_payment_pay_with)); mLayoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - setWidgetLayoutResource(R.layout.preference_widget_settings); + setWidgetLayoutResource(R.layout.preference_widget_gear); refresh(); } diff --git a/src/com/android/settings/widget/GearPreference.java b/src/com/android/settings/widget/GearPreference.java index 7659f0ff5d9..95937989b49 100644 --- a/src/com/android/settings/widget/GearPreference.java +++ b/src/com/android/settings/widget/GearPreference.java @@ -33,7 +33,6 @@ public class GearPreference extends RestrictedPreference implements View.OnClick public GearPreference(Context context, AttributeSet attrs) { super(context, attrs); - setWidgetLayoutResource(R.layout.preference_widget_settings); } public void setOnGearClickListener(OnGearClickListener l) { @@ -41,6 +40,16 @@ public class GearPreference extends RestrictedPreference implements View.OnClick notifyChanged(); } + @Override + protected int getSecondTargetResId() { + return R.layout.preference_widget_gear; + } + + @Override + protected boolean shouldHideSecondTarget() { + return mOnGearClickListener == null; + } + @Override public void onBindViewHolder(PreferenceViewHolder holder) { super.onBindViewHolder(holder); diff --git a/src/com/android/settings/widget/MasterSwitchPreference.java b/src/com/android/settings/widget/MasterSwitchPreference.java index 84f1532dab8..3a771bbbbf3 100644 --- a/src/com/android/settings/widget/MasterSwitchPreference.java +++ b/src/com/android/settings/widget/MasterSwitchPreference.java @@ -17,7 +17,6 @@ package com.android.settings.widget; import android.content.Context; -import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceViewHolder; import android.util.AttributeSet; import android.view.View; @@ -27,12 +26,13 @@ import android.widget.TextView; import com.android.settings.R; import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; +import com.android.settingslib.TwoTargetPreference; /** * A custom preference that provides inline switch toggle. It has a mandatory field for title, and * optional fields for icon and sub-text. */ -public class MasterSwitchPreference extends Preference { +public class MasterSwitchPreference extends TwoTargetPreference { private Switch mSwitch; private boolean mChecked; @@ -41,28 +41,29 @@ public class MasterSwitchPreference extends Preference { public MasterSwitchPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); - init(); } public MasterSwitchPreference(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); - init(); } public MasterSwitchPreference(Context context, AttributeSet attrs) { super(context, attrs); - init(); } public MasterSwitchPreference(Context context) { super(context); - init(); + } + + @Override + protected int getSecondTargetResId() { + return R.layout.preference_widget_master_switch; } @Override public void onBindViewHolder(PreferenceViewHolder holder) { super.onBindViewHolder(holder); - final View widgetView = holder.itemView.findViewById(android.R.id.widget_frame); + final View widgetView = holder.findViewById(android.R.id.widget_frame); if (widgetView != null) { widgetView.setOnClickListener(new OnClickListener() { @Override @@ -76,12 +77,12 @@ public class MasterSwitchPreference extends Preference { } }); } - mSwitch = (Switch) holder.itemView.findViewById(R.id.switchWidget); + mSwitch = (Switch) holder.findViewById(R.id.switchWidget); if (mSwitch != null) { mSwitch.setChecked(mChecked); } if (mMultiLine) { - TextView textView = (TextView)holder.findViewById(android.R.id.title); + TextView textView = (TextView) holder.findViewById(android.R.id.title); if (textView != null) { textView.setSingleLine(false); } @@ -99,10 +100,6 @@ public class MasterSwitchPreference extends Preference { } } - public boolean isSwitchEnabled() { - return mSwitch != null && mSwitch.isEnabled(); - } - public void setSwitchEnabled(boolean enabled) { if (mSwitch != null) { mSwitch.setEnabled(enabled); @@ -128,9 +125,4 @@ public class MasterSwitchPreference extends Preference { public Switch getSwitch() { return mSwitch; } - - private void init() { - setLayoutResource(R.layout.preference_master_switch); - setWidgetLayoutResource(R.layout.preference_widget_master_switch); - } } diff --git a/tests/robotests/src/com/android/settings/widget/MasterSwitchPreferenceTest.java b/tests/robotests/src/com/android/settings/widget/MasterSwitchPreferenceTest.java index 7d2e24061b3..3936d14edd7 100644 --- a/tests/robotests/src/com/android/settings/widget/MasterSwitchPreferenceTest.java +++ b/tests/robotests/src/com/android/settings/widget/MasterSwitchPreferenceTest.java @@ -17,13 +17,10 @@ package com.android.settings.widget; import android.content.Context; -import android.support.v7.preference.Preference; -import android.support.v7.preference.PreferenceViewHolder; import android.support.v7.preference.Preference.OnPreferenceChangeListener; +import android.support.v7.preference.PreferenceViewHolder; import android.view.LayoutInflater; import android.view.View; -import android.view.View.OnClickListener; -import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.LinearLayout; import android.widget.Switch; @@ -35,14 +32,11 @@ import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; -import org.robolectric.shadows.ShadowApplication; import static com.google.common.truth.Truth.assertThat; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; @RunWith(SettingsRobolectricTestRunner.class) @@ -53,23 +47,23 @@ public class MasterSwitchPreferenceTest { @Before public void setUp() { - mContext = ShadowApplication.getInstance().getApplicationContext(); + mContext = RuntimeEnvironment.application; } @Test public void createNewPreference_shouldSetLayout() { final MasterSwitchPreference preference = new MasterSwitchPreference(mContext); - assertThat(preference.getWidgetLayoutResource()).isEqualTo( - R.layout.preference_widget_master_switch); + assertThat(preference.getWidgetLayoutResource()) + .isEqualTo(R.layout.preference_widget_master_switch); } @Test public void setChecked_shouldUpdateButtonCheckedState() { final MasterSwitchPreference preference = new MasterSwitchPreference(mContext); final PreferenceViewHolder holder = new PreferenceViewHolder(LayoutInflater.from(mContext) - .inflate(R.layout.preference_widget_master_switch, null)); - final Switch toggle = (Switch) holder.itemView.findViewById(R.id.switchWidget); + .inflate(R.layout.preference_widget_master_switch, null)); + final Switch toggle = (Switch) holder.findViewById(R.id.switchWidget); preference.onBindViewHolder(holder); preference.setChecked(true); @@ -82,9 +76,9 @@ public class MasterSwitchPreferenceTest { @Test public void setSwitchEnabled_shouldUpdateButtonEnabledState() { final MasterSwitchPreference preference = new MasterSwitchPreference(mContext); - final PreferenceViewHolder holder = new PreferenceViewHolder( - LayoutInflater.from(mContext).inflate(R.layout.preference_widget_master_switch, null)); - final Switch toggle = (Switch) holder.itemView.findViewById(R.id.switchWidget); + final PreferenceViewHolder holder = new PreferenceViewHolder(LayoutInflater.from(mContext) + .inflate(R.layout.preference_widget_master_switch, null)); + final Switch toggle = (Switch) holder.findViewById(R.id.switchWidget); preference.onBindViewHolder(holder); preference.setSwitchEnabled(true); @@ -99,10 +93,10 @@ public class MasterSwitchPreferenceTest { final MasterSwitchPreference preference = new MasterSwitchPreference(mContext); final LayoutInflater inflater = LayoutInflater.from(mContext); final PreferenceViewHolder holder = new PreferenceViewHolder( - inflater.inflate(R.layout.preference_master_switch, null)); + inflater.inflate(R.layout.preference_two_target, null)); final LinearLayout widgetView = holder.itemView.findViewById(android.R.id.widget_frame); inflater.inflate(R.layout.preference_widget_master_switch, widgetView, true); - final Switch toggle = (Switch) holder.itemView.findViewById(R.id.switchWidget); + final Switch toggle = (Switch) holder.findViewById(R.id.switchWidget); preference.onBindViewHolder(holder); widgetView.performClick(); @@ -116,8 +110,8 @@ public class MasterSwitchPreferenceTest { public void clickWidgetView_shouldNotifyPreferenceChanged() { final MasterSwitchPreference preference = new MasterSwitchPreference(mContext); final PreferenceViewHolder holder = new PreferenceViewHolder( - LayoutInflater.from(mContext).inflate(R.layout.preference_master_switch, null)); - final View widgetView = holder.itemView.findViewById(android.R.id.widget_frame); + LayoutInflater.from(mContext).inflate(R.layout.preference_two_target, null)); + final View widgetView = holder.findViewById(android.R.id.widget_frame); final OnPreferenceChangeListener listener = mock(OnPreferenceChangeListener.class); preference.setOnPreferenceChangeListener(listener); preference.onBindViewHolder(holder); @@ -134,9 +128,9 @@ public class MasterSwitchPreferenceTest { @Test public void setDisabledByAdmin_hasEnforcedAdmin_shouldDisableButton() { final MasterSwitchPreference preference = new MasterSwitchPreference(mContext); - final PreferenceViewHolder holder = new PreferenceViewHolder( - LayoutInflater.from(mContext).inflate(R.layout.preference_widget_master_switch, null)); - final Switch toggle = (Switch) holder.itemView.findViewById(R.id.switchWidget); + final PreferenceViewHolder holder = new PreferenceViewHolder(LayoutInflater.from(mContext) + .inflate(R.layout.preference_widget_master_switch, null)); + final Switch toggle = (Switch) holder.findViewById(R.id.switchWidget); toggle.setEnabled(true); preference.onBindViewHolder(holder); @@ -147,9 +141,9 @@ public class MasterSwitchPreferenceTest { @Test public void setDisabledByAdmin_noEnforcedAdmin_shouldEnableButton() { final MasterSwitchPreference preference = new MasterSwitchPreference(mContext); - final PreferenceViewHolder holder = new PreferenceViewHolder( - LayoutInflater.from(mContext).inflate(R.layout.preference_widget_master_switch, null)); - final Switch toggle = (Switch) holder.itemView.findViewById(R.id.switchWidget); + final PreferenceViewHolder holder = new PreferenceViewHolder(LayoutInflater.from(mContext) + .inflate(R.layout.preference_widget_master_switch, null)); + final Switch toggle = (Switch) holder.findViewById(R.id.switchWidget); toggle.setEnabled(false); preference.onBindViewHolder(holder);