Use checkboxes on notification settings pages

Test: make RunSettingsRoboTests
Bug: 63927402
Change-Id: Id751b807eae8a7a9165b0d020f10dd42f51382d1
This commit is contained in:
Julia Reynolds
2018-01-25 11:07:55 -05:00
parent 9ce68a204c
commit 4e3060c824
3 changed files with 29 additions and 5 deletions

View File

@@ -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);

View File

@@ -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;
}

View File

@@ -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);