From 50c954923f34c88ad4460817b4ca64e8fabc2cc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C3=ADas=20Hern=C3=A1ndez?= Date: Fri, 30 Aug 2024 11:03:45 +0200 Subject: [PATCH] Support (non-editable) display of DND with a filter != PRIORITY Whenever setInterruptionFilter() is called with NONE or ALARMS, the Do Not Disturb mode now shows the current policy (nothing allowed or alarms/media allowed), instead of the normal PRIORITY policy. This policy is read-only in the UI since it cannot be customized. This should be, or at least become, pretty rare (with small exceptions, apps targeting V that call setInterruptionFilter() will use an implicit mode instead of changing the global zen mode, plus using these filters is quite nonstandard in itself). Fixes: 361586248 Test: atest & manual (toggling DND via cmd shell) Flag: android.app.modes_ui Change-Id: If2439480235d30aa310ad8925341183b9761784c --- ...nterruptionFilterPreferenceController.java | 6 +- .../modes/SetupInterstitialActivity.java | 2 +- .../ZenModeAppsLinkPreferenceController.java | 4 +- ...ModeDisplayEffectPreferenceController.java | 2 +- ...enModeDisplayLinkPreferenceController.java | 2 +- ...enModeExitAtAlarmPreferenceController.java | 3 +- .../notification/modes/ZenModeFragment.java | 2 +- ...nModeNotifVisLinkPreferenceController.java | 2 +- .../ZenModeOtherLinkPreferenceController.java | 4 +- ...ZenModePeopleLinkPreferenceController.java | 4 +- .../modes/ZenModeSummaryHelper.java | 68 +++++++++---------- ...ModeTriggerUpdatePreferenceController.java | 4 +- .../ZenModesListPreferenceController.java | 2 +- ...ruptionFilterPreferenceControllerTest.java | 21 ++++++ ...nModeAppsLinkPreferenceControllerTest.java | 15 ++++ ...deDisplayLinkPreferenceControllerTest.java | 22 ++++++ ...deExitAtAlarmPreferenceControllerTest.java | 4 ++ ...ModeOtherLinkPreferenceControllerTest.java | 22 ++++++ ...odePeopleLinkPreferenceControllerTest.java | 15 ++++ 19 files changed, 151 insertions(+), 53 deletions(-) diff --git a/src/com/android/settings/notification/modes/InterruptionFilterPreferenceController.java b/src/com/android/settings/notification/modes/InterruptionFilterPreferenceController.java index d69b3173fef..e5c65707bb1 100644 --- a/src/com/android/settings/notification/modes/InterruptionFilterPreferenceController.java +++ b/src/com/android/settings/notification/modes/InterruptionFilterPreferenceController.java @@ -44,8 +44,8 @@ class InterruptionFilterPreferenceController extends AbstractZenModePreferenceCo @Override public void updateState(Preference preference, @NonNull ZenMode zenMode) { - preference.setEnabled(zenMode.isEnabled()); - boolean allowingAll = zenMode.getRule().getInterruptionFilter() == INTERRUPTION_FILTER_ALL; + preference.setEnabled(zenMode.isEnabled() && zenMode.canEditPolicy()); + boolean allowingAll = zenMode.getInterruptionFilter() == INTERRUPTION_FILTER_ALL; ((TwoStatePreference) preference).setChecked(allowingAll); preference.setSummary(allowingAll @@ -57,7 +57,7 @@ class InterruptionFilterPreferenceController extends AbstractZenModePreferenceCo public boolean onPreferenceChange(@NonNull Preference preference, Object newValue) { final boolean allowAll = ((Boolean) newValue); return saveMode(zenMode -> { - zenMode.getRule().setInterruptionFilter(allowAll + zenMode.setInterruptionFilter(allowAll ? INTERRUPTION_FILTER_ALL : INTERRUPTION_FILTER_PRIORITY); return zenMode; diff --git a/src/com/android/settings/notification/modes/SetupInterstitialActivity.java b/src/com/android/settings/notification/modes/SetupInterstitialActivity.java index c5beb36c11c..fcd5fd5cf00 100644 --- a/src/com/android/settings/notification/modes/SetupInterstitialActivity.java +++ b/src/com/android/settings/notification/modes/SetupInterstitialActivity.java @@ -228,7 +228,7 @@ public class SetupInterstitialActivity extends FragmentActivity { return false; } - modeToUpdate.getRule().setEnabled(true); + modeToUpdate.setEnabled(true); mBackend.updateMode(modeToUpdate); return true; } diff --git a/src/com/android/settings/notification/modes/ZenModeAppsLinkPreferenceController.java b/src/com/android/settings/notification/modes/ZenModeAppsLinkPreferenceController.java index 7b17f0c77e6..c133f515f30 100644 --- a/src/com/android/settings/notification/modes/ZenModeAppsLinkPreferenceController.java +++ b/src/com/android/settings/notification/modes/ZenModeAppsLinkPreferenceController.java @@ -92,7 +92,7 @@ class ZenModeAppsLinkPreferenceController extends AbstractZenModePreferenceContr @Override public boolean isAvailable(ZenMode zenMode) { - return zenMode.getRule().getInterruptionFilter() != INTERRUPTION_FILTER_ALL; + return zenMode.getInterruptionFilter() != INTERRUPTION_FILTER_ALL; } @Override @@ -102,7 +102,7 @@ class ZenModeAppsLinkPreferenceController extends AbstractZenModePreferenceContr preference.setIntent( ZenSubSettingLauncher.forModeFragment(mContext, ZenModeAppsFragment.class, zenMode.getId(), SettingsEnums.ZEN_PRIORITY_MODE).toIntent()); - preference.setEnabled(zenMode.isEnabled()); + preference.setEnabled(zenMode.isEnabled() && zenMode.canEditPolicy()); mZenMode = zenMode; mPreference = (CircularIconsPreference) preference; diff --git a/src/com/android/settings/notification/modes/ZenModeDisplayEffectPreferenceController.java b/src/com/android/settings/notification/modes/ZenModeDisplayEffectPreferenceController.java index b0d395296e9..afd9b76b88a 100644 --- a/src/com/android/settings/notification/modes/ZenModeDisplayEffectPreferenceController.java +++ b/src/com/android/settings/notification/modes/ZenModeDisplayEffectPreferenceController.java @@ -74,7 +74,7 @@ class ZenModeDisplayEffectPreferenceController extends AbstractZenModePreference updatedEffects.setShouldUseNightMode(allow); break; } - zenMode.getRule().setDeviceEffects(updatedEffects.build()); + zenMode.setDeviceEffects(updatedEffects.build()); return zenMode; }); } diff --git a/src/com/android/settings/notification/modes/ZenModeDisplayLinkPreferenceController.java b/src/com/android/settings/notification/modes/ZenModeDisplayLinkPreferenceController.java index 57dce89a35c..14c8cb6435b 100644 --- a/src/com/android/settings/notification/modes/ZenModeDisplayLinkPreferenceController.java +++ b/src/com/android/settings/notification/modes/ZenModeDisplayLinkPreferenceController.java @@ -45,7 +45,7 @@ class ZenModeDisplayLinkPreferenceController extends AbstractZenModePreferenceCo preference.setIntent( ZenSubSettingLauncher.forModeFragment(mContext, ZenModeDisplayFragment.class, zenMode.getId(), SettingsEnums.ZEN_PRIORITY_MODE).toIntent()); - preference.setEnabled(zenMode.isEnabled()); + preference.setEnabled(zenMode.isEnabled() && zenMode.canEditPolicy()); } @Override diff --git a/src/com/android/settings/notification/modes/ZenModeExitAtAlarmPreferenceController.java b/src/com/android/settings/notification/modes/ZenModeExitAtAlarmPreferenceController.java index 326bc97715b..18e3fc15c09 100644 --- a/src/com/android/settings/notification/modes/ZenModeExitAtAlarmPreferenceController.java +++ b/src/com/android/settings/notification/modes/ZenModeExitAtAlarmPreferenceController.java @@ -50,7 +50,8 @@ class ZenModeExitAtAlarmPreferenceController extends if (mSchedule.exitAtAlarm != exitAtAlarm) { mSchedule.exitAtAlarm = exitAtAlarm; return saveMode(mode -> { - mode.getRule().setConditionId(ZenModeConfig.toScheduleConditionId(mSchedule)); + mode.setCustomModeConditionId(mContext, + ZenModeConfig.toScheduleConditionId(mSchedule)); return mode; }); } diff --git a/src/com/android/settings/notification/modes/ZenModeFragment.java b/src/com/android/settings/notification/modes/ZenModeFragment.java index 8eef7083995..08075b464df 100644 --- a/src/com/android/settings/notification/modes/ZenModeFragment.java +++ b/src/com/android/settings/notification/modes/ZenModeFragment.java @@ -171,7 +171,7 @@ public class ZenModeFragment extends ZenModeFragmentBase { } else if (menuItem.getItemId() == DELETE_MODE) { new AlertDialog.Builder(mContext) .setTitle(mContext.getString(R.string.zen_mode_delete_mode_confirmation, - mZenMode.getRule().getName())) + mZenMode.getName())) .setPositiveButton(R.string.zen_mode_schedule_delete, (dialog, which) -> { // start finishing before calling removeMode() so that we diff --git a/src/com/android/settings/notification/modes/ZenModeNotifVisLinkPreferenceController.java b/src/com/android/settings/notification/modes/ZenModeNotifVisLinkPreferenceController.java index cd1e8c7d3ba..f08a05da256 100644 --- a/src/com/android/settings/notification/modes/ZenModeNotifVisLinkPreferenceController.java +++ b/src/com/android/settings/notification/modes/ZenModeNotifVisLinkPreferenceController.java @@ -41,7 +41,7 @@ class ZenModeNotifVisLinkPreferenceController extends AbstractZenModePreferenceC @Override public boolean isAvailable(ZenMode zenMode) { - return zenMode.getRule().getInterruptionFilter() != INTERRUPTION_FILTER_ALL; + return zenMode.getInterruptionFilter() != INTERRUPTION_FILTER_ALL; } @Override diff --git a/src/com/android/settings/notification/modes/ZenModeOtherLinkPreferenceController.java b/src/com/android/settings/notification/modes/ZenModeOtherLinkPreferenceController.java index 9613d98eb1e..9adc7681f41 100644 --- a/src/com/android/settings/notification/modes/ZenModeOtherLinkPreferenceController.java +++ b/src/com/android/settings/notification/modes/ZenModeOtherLinkPreferenceController.java @@ -61,7 +61,7 @@ class ZenModeOtherLinkPreferenceController extends AbstractZenModePreferenceCont @Override public boolean isAvailable(ZenMode zenMode) { - return zenMode.getRule().getInterruptionFilter() != INTERRUPTION_FILTER_ALL; + return zenMode.getInterruptionFilter() != INTERRUPTION_FILTER_ALL; } @Override @@ -70,7 +70,7 @@ class ZenModeOtherLinkPreferenceController extends AbstractZenModePreferenceCont ZenSubSettingLauncher.forModeFragment(mContext, ZenModeOtherFragment.class, zenMode.getId(), SettingsEnums.ZEN_PRIORITY_MODE).toIntent()); - preference.setEnabled(zenMode.isEnabled()); + preference.setEnabled(zenMode.isEnabled() && zenMode.canEditPolicy()); preference.setSummary(mSummaryHelper.getOtherSoundCategoriesSummary(zenMode)); ((CircularIconsPreference) preference).setIcons(getSoundIcons(zenMode.getPolicy())); } diff --git a/src/com/android/settings/notification/modes/ZenModePeopleLinkPreferenceController.java b/src/com/android/settings/notification/modes/ZenModePeopleLinkPreferenceController.java index bf554711637..c635ad80028 100644 --- a/src/com/android/settings/notification/modes/ZenModePeopleLinkPreferenceController.java +++ b/src/com/android/settings/notification/modes/ZenModePeopleLinkPreferenceController.java @@ -84,7 +84,7 @@ class ZenModePeopleLinkPreferenceController extends AbstractZenModePreferenceCon @Override public boolean isAvailable(ZenMode zenMode) { - return zenMode.getRule().getInterruptionFilter() != INTERRUPTION_FILTER_ALL; + return zenMode.getInterruptionFilter() != INTERRUPTION_FILTER_ALL; } @Override @@ -94,7 +94,7 @@ class ZenModePeopleLinkPreferenceController extends AbstractZenModePreferenceCon ZenSubSettingLauncher.forModeFragment(mContext, ZenModePeopleFragment.class, zenMode.getId(), SettingsEnums.ZEN_PRIORITY_MODE).toIntent()); - preference.setEnabled(zenMode.isEnabled()); + preference.setEnabled(zenMode.isEnabled() && zenMode.canEditPolicy()); preference.setSummary(mSummaryHelper.getPeopleSummary(zenMode.getPolicy())); ((CircularIconsPreference) preference).setIcons(getPeopleIcons(zenMode.getPolicy()), PEOPLE_ITEM_EQUIVALENCE); diff --git a/src/com/android/settings/notification/modes/ZenModeSummaryHelper.java b/src/com/android/settings/notification/modes/ZenModeSummaryHelper.java index c5300da0cee..483b8f07d20 100644 --- a/src/com/android/settings/notification/modes/ZenModeSummaryHelper.java +++ b/src/com/android/settings/notification/modes/ZenModeSummaryHelper.java @@ -209,48 +209,46 @@ class ZenModeSummaryHelper { boolean isFirst = true; List enabledEffects = new ArrayList<>(); if (!zenMode.getPolicy().shouldShowAllVisualEffects() - && zenMode.getRule().getInterruptionFilter() != INTERRUPTION_FILTER_ALL) { + && zenMode.getInterruptionFilter() != INTERRUPTION_FILTER_ALL) { enabledEffects.add(getBlockedEffectsSummary(zenMode)); isFirst = false; } - ZenDeviceEffects currEffects = zenMode.getRule().getDeviceEffects(); - if (currEffects != null) { - if (currEffects.shouldDisplayGrayscale()) { - if (isFirst) { - enabledEffects.add(mContext.getString(R.string.mode_grayscale_title)); - } else { - enabledEffects.add(mContext.getString( - R.string.mode_grayscale_title_secondary_list)); - } - isFirst = false; + ZenDeviceEffects currEffects = zenMode.getDeviceEffects(); + if (currEffects.shouldDisplayGrayscale()) { + if (isFirst) { + enabledEffects.add(mContext.getString(R.string.mode_grayscale_title)); + } else { + enabledEffects.add(mContext.getString( + R.string.mode_grayscale_title_secondary_list)); } - if (currEffects.shouldSuppressAmbientDisplay()) { - if (isFirst) { - enabledEffects.add(mContext.getString(R.string.mode_aod_title)); - } else { - enabledEffects.add(mContext.getString( - R.string.mode_aod_title_secondary_list)); - } - isFirst = false; + isFirst = false; + } + if (currEffects.shouldSuppressAmbientDisplay()) { + if (isFirst) { + enabledEffects.add(mContext.getString(R.string.mode_aod_title)); + } else { + enabledEffects.add(mContext.getString( + R.string.mode_aod_title_secondary_list)); } - if (currEffects.shouldDimWallpaper()) { - if (isFirst) { - enabledEffects.add(mContext.getString(R.string.mode_wallpaper_title)); - } else { - enabledEffects.add(mContext.getString( - R.string.mode_wallpaper_title_secondary_list)); - } - isFirst = false; + isFirst = false; + } + if (currEffects.shouldDimWallpaper()) { + if (isFirst) { + enabledEffects.add(mContext.getString(R.string.mode_wallpaper_title)); + } else { + enabledEffects.add(mContext.getString( + R.string.mode_wallpaper_title_secondary_list)); } - if (currEffects.shouldUseNightMode()) { - if (isFirst) { - enabledEffects.add(mContext.getString(R.string.mode_dark_theme_title)); - } else { - enabledEffects.add(mContext.getString( - R.string.mode_dark_theme_title_secondary_list)); - } - isFirst = false; + isFirst = false; + } + if (currEffects.shouldUseNightMode()) { + if (isFirst) { + enabledEffects.add(mContext.getString(R.string.mode_dark_theme_title)); + } else { + enabledEffects.add(mContext.getString( + R.string.mode_dark_theme_title_secondary_list)); } + isFirst = false; } int numCategories = enabledEffects.size(); diff --git a/src/com/android/settings/notification/modes/ZenModeTriggerUpdatePreferenceController.java b/src/com/android/settings/notification/modes/ZenModeTriggerUpdatePreferenceController.java index f2302c0b335..193363585f1 100644 --- a/src/com/android/settings/notification/modes/ZenModeTriggerUpdatePreferenceController.java +++ b/src/com/android/settings/notification/modes/ZenModeTriggerUpdatePreferenceController.java @@ -87,7 +87,7 @@ class ZenModeTriggerUpdatePreferenceController extends AbstractZenModePreference mModeName = zenMode.getName(); PrimarySwitchPreference triggerPref = (PrimarySwitchPreference) preference; - triggerPref.setChecked(zenMode.getRule().isEnabled()); + triggerPref.setChecked(zenMode.isEnabled()); triggerPref.setOnPreferenceChangeListener(mSwitchChangeListener); if (zenMode.isSystemOwned()) { setUpForSystemOwnedTrigger(triggerPref, zenMode); @@ -213,7 +213,7 @@ class ZenModeTriggerUpdatePreferenceController extends AbstractZenModePreference private void setModeEnabled(boolean enabled) { saveMode((zenMode) -> { - if (enabled != zenMode.getRule().isEnabled()) { + if (enabled != zenMode.isEnabled()) { zenMode.getRule().setEnabled(enabled); } return zenMode; diff --git a/src/com/android/settings/notification/modes/ZenModesListPreferenceController.java b/src/com/android/settings/notification/modes/ZenModesListPreferenceController.java index 5e36469f39c..75d4ee3aaaa 100644 --- a/src/com/android/settings/notification/modes/ZenModesListPreferenceController.java +++ b/src/com/android/settings/notification/modes/ZenModesListPreferenceController.java @@ -118,7 +118,7 @@ class ZenModesListPreferenceController extends BasePreferenceController for (ZenMode mode : mBackend.getModes()) { SearchIndexableRaw data = new SearchIndexableRaw(mContext); data.key = mode.getId(); - data.title = mode.getRule().getName(); + data.title = mode.getName(); data.screenTitle = res.getString(R.string.zen_modes_list_title); rawData.add(data); } diff --git a/tests/robotests/src/com/android/settings/notification/modes/InterruptionFilterPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/modes/InterruptionFilterPreferenceControllerTest.java index 777d213142f..8653d958a6a 100644 --- a/tests/robotests/src/com/android/settings/notification/modes/InterruptionFilterPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/notification/modes/InterruptionFilterPreferenceControllerTest.java @@ -17,6 +17,7 @@ package com.android.settings.notification.modes; import static android.app.NotificationManager.INTERRUPTION_FILTER_ALL; +import static android.app.NotificationManager.INTERRUPTION_FILTER_NONE; import static android.app.NotificationManager.INTERRUPTION_FILTER_PRIORITY; import static android.service.notification.ZenPolicy.STATE_DISALLOW; @@ -67,6 +68,26 @@ public final class InterruptionFilterPreferenceControllerTest { mController = new InterruptionFilterPreferenceController(mContext, "something", mBackend); } + @Test + public void updateState_dnd_enabled() { + TwoStatePreference preference = mock(TwoStatePreference.class); + ZenMode dnd = TestModeBuilder.MANUAL_DND_ACTIVE; + + mController.updateState(preference, dnd); + + verify(preference).setEnabled(true); + } + + @Test + public void updateState_specialDnd_disabled() { + TwoStatePreference preference = mock(TwoStatePreference.class); + ZenMode specialDnd = TestModeBuilder.manualDnd(INTERRUPTION_FILTER_NONE, true); + + mController.updateState(preference, specialDnd); + + verify(preference).setEnabled(false); + } + @Test public void testUpdateState_disabled() { TwoStatePreference preference = mock(TwoStatePreference.class); diff --git a/tests/robotests/src/com/android/settings/notification/modes/ZenModeAppsLinkPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/modes/ZenModeAppsLinkPreferenceControllerTest.java index 4148fa3cd33..fa83f309db1 100644 --- a/tests/robotests/src/com/android/settings/notification/modes/ZenModeAppsLinkPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/notification/modes/ZenModeAppsLinkPreferenceControllerTest.java @@ -16,6 +16,7 @@ package com.android.settings.notification.modes; +import static android.app.NotificationManager.INTERRUPTION_FILTER_NONE; import static android.app.NotificationManager.INTERRUPTION_FILTER_PRIORITY; import static android.provider.Settings.EXTRA_AUTOMATIC_ZEN_RULE_ID; @@ -149,6 +150,20 @@ public final class ZenModeAppsLinkPreferenceControllerTest { assertThat(mController.isAvailable()).isTrue(); } + @Test + public void updateState_dnd_enabled() { + ZenMode dnd = TestModeBuilder.MANUAL_DND_ACTIVE; + mController.updateState(mPreference, dnd); + assertThat(mPreference.isEnabled()).isTrue(); + } + + @Test + public void updateState_specialDnd_disabled() { + ZenMode specialDnd = TestModeBuilder.manualDnd(INTERRUPTION_FILTER_NONE, true); + mController.updateState(mPreference, specialDnd); + assertThat(mPreference.isEnabled()).isFalse(); + } + @Test public void testUpdateState_disabled() { ZenMode zenMode = new TestModeBuilder() diff --git a/tests/robotests/src/com/android/settings/notification/modes/ZenModeDisplayLinkPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/modes/ZenModeDisplayLinkPreferenceControllerTest.java index 7cf0109d436..05486e09d3c 100644 --- a/tests/robotests/src/com/android/settings/notification/modes/ZenModeDisplayLinkPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/notification/modes/ZenModeDisplayLinkPreferenceControllerTest.java @@ -16,6 +16,8 @@ package com.android.settings.notification.modes; +import static android.app.NotificationManager.INTERRUPTION_FILTER_NONE; + import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; @@ -63,6 +65,26 @@ public final class ZenModeDisplayLinkPreferenceControllerTest { mContext, "something", mBackend, mHelperBackend); } + @Test + public void updateState_dnd_enabled() { + Preference preference = mock(Preference.class); + ZenMode dnd = TestModeBuilder.MANUAL_DND_ACTIVE; + + mController.updateState(preference, dnd); + + verify(preference).setEnabled(true); + } + + @Test + public void updateState_specialDnd_disabled() { + Preference preference = mock(Preference.class); + ZenMode specialDnd = TestModeBuilder.manualDnd(INTERRUPTION_FILTER_NONE, true); + + mController.updateState(preference, specialDnd); + + verify(preference).setEnabled(false); + } + @Test public void testUpdateState_disabled() { Preference preference = mock(Preference.class); diff --git a/tests/robotests/src/com/android/settings/notification/modes/ZenModeExitAtAlarmPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/modes/ZenModeExitAtAlarmPreferenceControllerTest.java index 3efa5f0e7aa..c949fb8adc1 100644 --- a/tests/robotests/src/com/android/settings/notification/modes/ZenModeExitAtAlarmPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/notification/modes/ZenModeExitAtAlarmPreferenceControllerTest.java @@ -16,6 +16,8 @@ package com.android.settings.notification.modes; +import static android.service.notification.SystemZenRules.PACKAGE_ANDROID; + import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.mock; @@ -77,6 +79,7 @@ public class ZenModeExitAtAlarmPreferenceControllerTest { scheduleInfo.exitAtAlarm = false; ZenMode mode = new TestModeBuilder() + .setPackage(PACKAGE_ANDROID) .setConditionId(ZenModeConfig.toScheduleConditionId(scheduleInfo)) .build(); @@ -105,6 +108,7 @@ public class ZenModeExitAtAlarmPreferenceControllerTest { scheduleInfo.exitAtAlarm = true; ZenMode mode = new TestModeBuilder() + .setPackage(PACKAGE_ANDROID) .setConditionId(ZenModeConfig.toScheduleConditionId(scheduleInfo)) .build(); mPrefController.updateZenMode(preference, mode); diff --git a/tests/robotests/src/com/android/settings/notification/modes/ZenModeOtherLinkPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/modes/ZenModeOtherLinkPreferenceControllerTest.java index 3db70fa67bc..38790b2729c 100644 --- a/tests/robotests/src/com/android/settings/notification/modes/ZenModeOtherLinkPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/notification/modes/ZenModeOtherLinkPreferenceControllerTest.java @@ -16,6 +16,8 @@ package com.android.settings.notification.modes; +import static android.app.NotificationManager.INTERRUPTION_FILTER_NONE; + import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.argThat; import static org.mockito.Mockito.mock; @@ -61,6 +63,26 @@ public final class ZenModeOtherLinkPreferenceControllerTest { mContext, "something", mHelperBackend); } + @Test + public void updateState_dnd_enabled() { + CircularIconsPreference preference = mock(CircularIconsPreference.class); + ZenMode dnd = TestModeBuilder.MANUAL_DND_ACTIVE; + + mController.updateState(preference, dnd); + + verify(preference).setEnabled(true); + } + + @Test + public void updateState_specialDnd_disabled() { + CircularIconsPreference preference = mock(CircularIconsPreference.class); + ZenMode specialDnd = TestModeBuilder.manualDnd(INTERRUPTION_FILTER_NONE, true); + + mController.updateState(preference, specialDnd); + + verify(preference).setEnabled(false); + } + @Test public void updateState_disabled() { CircularIconsPreference pref = mock(CircularIconsPreference.class); diff --git a/tests/robotests/src/com/android/settings/notification/modes/ZenModePeopleLinkPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/modes/ZenModePeopleLinkPreferenceControllerTest.java index 8555d710fa0..85fd0043039 100644 --- a/tests/robotests/src/com/android/settings/notification/modes/ZenModePeopleLinkPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/notification/modes/ZenModePeopleLinkPreferenceControllerTest.java @@ -16,6 +16,7 @@ package com.android.settings.notification.modes; +import static android.app.NotificationManager.INTERRUPTION_FILTER_NONE; import static android.service.notification.ZenPolicy.CONVERSATION_SENDERS_IMPORTANT; import static android.service.notification.ZenPolicy.PEOPLE_TYPE_ANYONE; import static android.service.notification.ZenPolicy.PEOPLE_TYPE_CONTACTS; @@ -116,6 +117,20 @@ public final class ZenModePeopleLinkPreferenceControllerTest { anyBoolean())).thenReturn(new ColorDrawable(Color.BLACK)); } + @Test + public void updateState_dnd_enabled() { + ZenMode dnd = TestModeBuilder.MANUAL_DND_ACTIVE; + mController.updateState(mPreference, dnd); + assertThat(mPreference.isEnabled()).isTrue(); + } + + @Test + public void updateState_specialDnd_disabled() { + ZenMode specialDnd = TestModeBuilder.manualDnd(INTERRUPTION_FILTER_NONE, true); + mController.updateState(mPreference, specialDnd); + assertThat(mPreference.isEnabled()).isFalse(); + } + @Test public void updateState_disabled() { ZenMode zenMode = new TestModeBuilder()