From 4e3060c8244970cdecdc6083ee888a242c33a072 Mon Sep 17 00:00:00 2001 From: Julia Reynolds Date: Thu, 25 Jan 2018 11:07:55 -0500 Subject: [PATCH] Use checkboxes on notification settings pages Test: make RunSettingsRoboTests Bug: 63927402 Change-Id: Id751b807eae8a7a9165b0d020f10dd42f51382d1 --- .../notification/NotificationSettingsBase.java | 5 +++-- .../widget/MasterCheckBoxPreference.java | 12 +++++++++--- .../widget/MasterCheckBoxPreferenceTest.java | 17 +++++++++++++++++ 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/src/com/android/settings/notification/NotificationSettingsBase.java b/src/com/android/settings/notification/NotificationSettingsBase.java index 8b0ed463a80..18b77bc0883 100644 --- a/src/com/android/settings/notification/NotificationSettingsBase.java +++ b/src/com/android/settings/notification/NotificationSettingsBase.java @@ -30,6 +30,7 @@ import com.android.settings.applications.LayoutPreference; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.search.Indexable; +import com.android.settings.widget.MasterCheckBoxPreference; import com.android.settings.widget.MasterSwitchPreference; import com.android.settings.widget.SwitchBar; import com.android.settings.wrapper.NotificationChannelGroupWrapper; @@ -277,9 +278,9 @@ abstract public class NotificationSettingsBase extends DashboardFragment { protected Preference populateSingleChannelPrefs(PreferenceGroup parent, final NotificationChannel channel, final boolean groupBlocked) { - MasterSwitchPreference channelPref = new MasterSwitchPreference( + MasterCheckBoxPreference channelPref = new MasterCheckBoxPreference( getPrefContext()); - channelPref.setSwitchEnabled(mSuspendedAppsAdmin == null + channelPref.setCheckBoxEnabled(mSuspendedAppsAdmin == null && isChannelBlockable(channel) && isChannelConfigurable(channel) && !groupBlocked); diff --git a/src/com/android/settings/widget/MasterCheckBoxPreference.java b/src/com/android/settings/widget/MasterCheckBoxPreference.java index 333c9aa799a..552f51c115f 100644 --- a/src/com/android/settings/widget/MasterCheckBoxPreference.java +++ b/src/com/android/settings/widget/MasterCheckBoxPreference.java @@ -34,6 +34,7 @@ public class MasterCheckBoxPreference extends TwoTargetPreference { private CheckBox mCheckBox; private boolean mChecked; + private boolean mEnableCheckBox = true; public MasterCheckBoxPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { @@ -88,9 +89,7 @@ public class MasterCheckBoxPreference extends TwoTargetPreference { @Override public void setEnabled(boolean enabled) { super.setEnabled(enabled); - if (mCheckBox != null) { - mCheckBox.setEnabled(enabled); - } + setCheckBoxEnabled(enabled); } public boolean isChecked() { @@ -104,6 +103,13 @@ public class MasterCheckBoxPreference extends TwoTargetPreference { } } + public void setCheckBoxEnabled(boolean enabled) { + mEnableCheckBox = enabled; + if (mCheckBox != null) { + mCheckBox.setEnabled(enabled); + } + } + public CheckBox getCheckBox() { return mCheckBox; } diff --git a/tests/robotests/src/com/android/settings/widget/MasterCheckBoxPreferenceTest.java b/tests/robotests/src/com/android/settings/widget/MasterCheckBoxPreferenceTest.java index e6530d5eb53..ac3e0b64471 100644 --- a/tests/robotests/src/com/android/settings/widget/MasterCheckBoxPreferenceTest.java +++ b/tests/robotests/src/com/android/settings/widget/MasterCheckBoxPreferenceTest.java @@ -88,6 +88,23 @@ public class MasterCheckBoxPreferenceTest { assertThat(checkBox.isEnabled()).isFalse(); } + @Test + public void setCheckboxEnabled_shouldOnlyUpdateCheckBoxEnabledState() { + final PreferenceViewHolder holder = PreferenceViewHolder.createInstanceForTests( + LayoutInflater.from(mContext).inflate( + R.layout.preference_widget_master_checkbox, null)); + final CheckBox checkBox = (CheckBox) holder.findViewById(R.id.checkboxWidget); + mPreference.onBindViewHolder(holder); + + mPreference.setCheckBoxEnabled(false); + assertThat(mPreference.isEnabled()).isTrue(); + assertThat(checkBox.isEnabled()).isFalse(); + + mPreference.setCheckBoxEnabled(true); + assertThat(mPreference.isEnabled()).isTrue(); + assertThat(checkBox.isEnabled()).isTrue(); + } + @Test public void clickWidgetView_shouldToggleCheckBox() { final LayoutInflater inflater = LayoutInflater.from(mContext);