Loading services/core/java/com/android/server/notification/ZenModeHelper.java +9 −6 Original line number Diff line number Diff line Loading @@ -822,21 +822,24 @@ public class ZenModeHelper { @VisibleForTesting protected void applyRestrictions() { final boolean zen = mZenMode != Global.ZEN_MODE_OFF; final boolean zenPriorityOnly = mZenMode == Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS; final boolean zenSilence = mZenMode == Global.ZEN_MODE_NO_INTERRUPTIONS; final boolean zenAlarmsOnly = mZenMode == Global.ZEN_MODE_ALARMS; // notification restrictions final boolean muteNotifications = (mSuppressedEffects & SUPPRESSED_EFFECT_NOTIFICATIONS) != 0; // call restrictions final boolean muteCalls = zen && !mConfig.allowCalls && !mConfig.allowRepeatCallers final boolean muteCalls = zenAlarmsOnly || (zenPriorityOnly && !mConfig.allowCalls && !mConfig.allowRepeatCallers) || (mSuppressedEffects & SUPPRESSED_EFFECT_CALLS) != 0; // alarm restrictions final boolean muteAlarms = zen && !mConfig.allowAlarms; final boolean muteAlarms = zenPriorityOnly && !mConfig.allowAlarms; // alarm restrictions final boolean muteMediaAndSystemSounds = zen && !mConfig.allowMediaSystemOther; final boolean muteMediaAndSystemSounds = zenPriorityOnly && !mConfig.allowMediaSystemOther; // total silence restrictions final boolean muteEverything = mZenMode == Global.ZEN_MODE_NO_INTERRUPTIONS || areAllBehaviorSoundsMuted(); final boolean muteEverything = zenSilence || (zenPriorityOnly && areAllBehaviorSoundsMuted()); for (int usage : AudioAttributes.SDK_USAGES) { final int suppressionBehavior = AudioAttributes.SUPPRESSIBLE_USAGES.get(usage); Loading services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java +62 −0 Original line number Diff line number Diff line Loading @@ -106,6 +106,68 @@ public class ZenModeHelperTest extends UiServiceTestCase { AudioAttributes.USAGE_UNKNOWN); } @Test public void testAlarmsOnly_alarmMediaMuteNotApplied() { mZenModeHelperSpy.mZenMode = Settings.Global.ZEN_MODE_ALARMS; mZenModeHelperSpy.mConfig.allowAlarms = false; mZenModeHelperSpy.mConfig.allowMediaSystemOther = false; assertFalse(mZenModeHelperSpy.mConfig.allowAlarms); assertFalse(mZenModeHelperSpy.mConfig.allowMediaSystemOther); mZenModeHelperSpy.applyRestrictions(); // Alarms only mode will not silence alarms verify(mZenModeHelperSpy, atLeastOnce()).applyRestrictions(false, AudioAttributes.USAGE_ALARM); // Alarms only mode will not silence media verify(mZenModeHelperSpy, atLeastOnce()).applyRestrictions(false, AudioAttributes.USAGE_MEDIA); verify(mZenModeHelperSpy, atLeastOnce()).applyRestrictions(false, AudioAttributes.USAGE_GAME); verify(mZenModeHelperSpy, atLeastOnce()).applyRestrictions(false, AudioAttributes.USAGE_ASSISTANCE_SONIFICATION); verify(mZenModeHelperSpy, atLeastOnce()).applyRestrictions(false, AudioAttributes.USAGE_UNKNOWN); } @Test public void testAlarmsOnly_callsMuteApplied() { mZenModeHelperSpy.mZenMode = Settings.Global.ZEN_MODE_ALARMS; mZenModeHelperSpy.mConfig.allowCalls = true; assertTrue(mZenModeHelperSpy.mConfig.allowCalls); mZenModeHelperSpy.applyRestrictions(); // Alarms only mode will silence calls despite priority-mode config verify(mZenModeHelperSpy, atLeastOnce()).applyRestrictions(true, AudioAttributes.USAGE_NOTIFICATION_RINGTONE); verify(mZenModeHelperSpy, atLeastOnce()).applyRestrictions(true, AudioAttributes.USAGE_NOTIFICATION_COMMUNICATION_REQUEST); } @Test public void testAlarmsOnly_allZenConfigToggledCannotBypass_alarmMuteNotApplied() { // Only audio attributes with SUPPRESIBLE_NEVER can bypass mZenModeHelperSpy.mZenMode = Settings.Global.ZEN_MODE_ALARMS; mZenModeHelperSpy.mConfig.allowAlarms = false; mZenModeHelperSpy.mConfig.allowMediaSystemOther = false; mZenModeHelperSpy.mConfig.allowReminders = false; mZenModeHelperSpy.mConfig.allowCalls = false; mZenModeHelperSpy.mConfig.allowMessages = false; mZenModeHelperSpy.mConfig.allowEvents = false; mZenModeHelperSpy.mConfig.allowRepeatCallers= false; assertFalse(mZenModeHelperSpy.mConfig.allowAlarms); assertFalse(mZenModeHelperSpy.mConfig.allowMediaSystemOther); assertFalse(mZenModeHelperSpy.mConfig.allowReminders); assertFalse(mZenModeHelperSpy.mConfig.allowCalls); assertFalse(mZenModeHelperSpy.mConfig.allowMessages); assertFalse(mZenModeHelperSpy.mConfig.allowEvents); assertFalse(mZenModeHelperSpy.mConfig.allowRepeatCallers); mZenModeHelperSpy.applyRestrictions(); verify(mZenModeHelperSpy, atLeastOnce()).applyRestrictions(false, AudioAttributes.USAGE_ALARM); } @Test public void testZenAllCannotBypass() { // Only audio attributes with SUPPRESIBLE_NEVER can bypass Loading Loading
services/core/java/com/android/server/notification/ZenModeHelper.java +9 −6 Original line number Diff line number Diff line Loading @@ -822,21 +822,24 @@ public class ZenModeHelper { @VisibleForTesting protected void applyRestrictions() { final boolean zen = mZenMode != Global.ZEN_MODE_OFF; final boolean zenPriorityOnly = mZenMode == Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS; final boolean zenSilence = mZenMode == Global.ZEN_MODE_NO_INTERRUPTIONS; final boolean zenAlarmsOnly = mZenMode == Global.ZEN_MODE_ALARMS; // notification restrictions final boolean muteNotifications = (mSuppressedEffects & SUPPRESSED_EFFECT_NOTIFICATIONS) != 0; // call restrictions final boolean muteCalls = zen && !mConfig.allowCalls && !mConfig.allowRepeatCallers final boolean muteCalls = zenAlarmsOnly || (zenPriorityOnly && !mConfig.allowCalls && !mConfig.allowRepeatCallers) || (mSuppressedEffects & SUPPRESSED_EFFECT_CALLS) != 0; // alarm restrictions final boolean muteAlarms = zen && !mConfig.allowAlarms; final boolean muteAlarms = zenPriorityOnly && !mConfig.allowAlarms; // alarm restrictions final boolean muteMediaAndSystemSounds = zen && !mConfig.allowMediaSystemOther; final boolean muteMediaAndSystemSounds = zenPriorityOnly && !mConfig.allowMediaSystemOther; // total silence restrictions final boolean muteEverything = mZenMode == Global.ZEN_MODE_NO_INTERRUPTIONS || areAllBehaviorSoundsMuted(); final boolean muteEverything = zenSilence || (zenPriorityOnly && areAllBehaviorSoundsMuted()); for (int usage : AudioAttributes.SDK_USAGES) { final int suppressionBehavior = AudioAttributes.SUPPRESSIBLE_USAGES.get(usage); Loading
services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java +62 −0 Original line number Diff line number Diff line Loading @@ -106,6 +106,68 @@ public class ZenModeHelperTest extends UiServiceTestCase { AudioAttributes.USAGE_UNKNOWN); } @Test public void testAlarmsOnly_alarmMediaMuteNotApplied() { mZenModeHelperSpy.mZenMode = Settings.Global.ZEN_MODE_ALARMS; mZenModeHelperSpy.mConfig.allowAlarms = false; mZenModeHelperSpy.mConfig.allowMediaSystemOther = false; assertFalse(mZenModeHelperSpy.mConfig.allowAlarms); assertFalse(mZenModeHelperSpy.mConfig.allowMediaSystemOther); mZenModeHelperSpy.applyRestrictions(); // Alarms only mode will not silence alarms verify(mZenModeHelperSpy, atLeastOnce()).applyRestrictions(false, AudioAttributes.USAGE_ALARM); // Alarms only mode will not silence media verify(mZenModeHelperSpy, atLeastOnce()).applyRestrictions(false, AudioAttributes.USAGE_MEDIA); verify(mZenModeHelperSpy, atLeastOnce()).applyRestrictions(false, AudioAttributes.USAGE_GAME); verify(mZenModeHelperSpy, atLeastOnce()).applyRestrictions(false, AudioAttributes.USAGE_ASSISTANCE_SONIFICATION); verify(mZenModeHelperSpy, atLeastOnce()).applyRestrictions(false, AudioAttributes.USAGE_UNKNOWN); } @Test public void testAlarmsOnly_callsMuteApplied() { mZenModeHelperSpy.mZenMode = Settings.Global.ZEN_MODE_ALARMS; mZenModeHelperSpy.mConfig.allowCalls = true; assertTrue(mZenModeHelperSpy.mConfig.allowCalls); mZenModeHelperSpy.applyRestrictions(); // Alarms only mode will silence calls despite priority-mode config verify(mZenModeHelperSpy, atLeastOnce()).applyRestrictions(true, AudioAttributes.USAGE_NOTIFICATION_RINGTONE); verify(mZenModeHelperSpy, atLeastOnce()).applyRestrictions(true, AudioAttributes.USAGE_NOTIFICATION_COMMUNICATION_REQUEST); } @Test public void testAlarmsOnly_allZenConfigToggledCannotBypass_alarmMuteNotApplied() { // Only audio attributes with SUPPRESIBLE_NEVER can bypass mZenModeHelperSpy.mZenMode = Settings.Global.ZEN_MODE_ALARMS; mZenModeHelperSpy.mConfig.allowAlarms = false; mZenModeHelperSpy.mConfig.allowMediaSystemOther = false; mZenModeHelperSpy.mConfig.allowReminders = false; mZenModeHelperSpy.mConfig.allowCalls = false; mZenModeHelperSpy.mConfig.allowMessages = false; mZenModeHelperSpy.mConfig.allowEvents = false; mZenModeHelperSpy.mConfig.allowRepeatCallers= false; assertFalse(mZenModeHelperSpy.mConfig.allowAlarms); assertFalse(mZenModeHelperSpy.mConfig.allowMediaSystemOther); assertFalse(mZenModeHelperSpy.mConfig.allowReminders); assertFalse(mZenModeHelperSpy.mConfig.allowCalls); assertFalse(mZenModeHelperSpy.mConfig.allowMessages); assertFalse(mZenModeHelperSpy.mConfig.allowEvents); assertFalse(mZenModeHelperSpy.mConfig.allowRepeatCallers); mZenModeHelperSpy.applyRestrictions(); verify(mZenModeHelperSpy, atLeastOnce()).applyRestrictions(false, AudioAttributes.USAGE_ALARM); } @Test public void testZenAllCannotBypass() { // Only audio attributes with SUPPRESIBLE_NEVER can bypass Loading