Be more strict about what sounds can play in DND
- Mute all notification usages when DND is on - Allow packages android and systemui to break through DND so they can continue to vibrate and play sound (respectively) for exceptions Test: atest Fixes: 139961234 Change-Id: Id3c7223311ca8f797a054068f7aed82991975a12
This commit is contained in:
@@ -3532,6 +3532,8 @@
|
||||
mode -->
|
||||
<string-array translatable="false" name="config_priorityOnlyDndExemptPackages">
|
||||
<item>com.android.dialer</item>
|
||||
<item>com.android.systemui</item>
|
||||
<item>android</item>
|
||||
</string-array>
|
||||
|
||||
<!-- The default value for transition animation scale found in developer settings.
|
||||
|
||||
@@ -19,6 +19,7 @@ package com.android.server.notification;
|
||||
import static android.app.NotificationManager.AUTOMATIC_RULE_STATUS_DISABLED;
|
||||
import static android.app.NotificationManager.AUTOMATIC_RULE_STATUS_ENABLED;
|
||||
import static android.app.NotificationManager.AUTOMATIC_RULE_STATUS_REMOVED;
|
||||
import static android.app.NotificationManager.Policy.PRIORITY_SENDERS_ANY;
|
||||
|
||||
import android.app.AppOpsManager;
|
||||
import android.app.AutomaticZenRule;
|
||||
@@ -1011,21 +1012,23 @@ public class ZenModeHelper {
|
||||
|
||||
@VisibleForTesting
|
||||
protected void applyRestrictions() {
|
||||
final boolean zenOn = 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;
|
||||
final boolean allowCalls = mConsolidatedPolicy.allowCalls();
|
||||
final boolean allowCalls = mConsolidatedPolicy.allowCalls()
|
||||
&& mConsolidatedPolicy.allowCallsFrom() == PRIORITY_SENDERS_ANY;
|
||||
final boolean allowRepeatCallers = mConsolidatedPolicy.allowRepeatCallers();
|
||||
final boolean allowSystem = mConsolidatedPolicy.allowSystem();
|
||||
final boolean allowMedia = mConsolidatedPolicy.allowMedia();
|
||||
final boolean allowAlarms = mConsolidatedPolicy.allowAlarms();
|
||||
|
||||
// notification restrictions
|
||||
final boolean muteNotifications =
|
||||
(mSuppressedEffects & SUPPRESSED_EFFECT_NOTIFICATIONS) != 0;
|
||||
final boolean muteNotifications = zenOn
|
||||
|| (mSuppressedEffects & SUPPRESSED_EFFECT_NOTIFICATIONS) != 0;
|
||||
// call restrictions
|
||||
final boolean muteCalls = zenAlarmsOnly
|
||||
|| (zenPriorityOnly && !allowCalls && !allowRepeatCallers)
|
||||
|| (zenPriorityOnly && !(allowCalls || allowRepeatCallers))
|
||||
|| (mSuppressedEffects & SUPPRESSED_EFFECT_CALLS) != 0;
|
||||
// alarm restrictions
|
||||
final boolean muteAlarms = zenPriorityOnly && !allowAlarms;
|
||||
|
||||
@@ -16,6 +16,19 @@
|
||||
|
||||
package com.android.server.notification;
|
||||
|
||||
import static android.app.NotificationManager.Policy.CONVERSATION_SENDERS_ANYONE;
|
||||
import static android.app.NotificationManager.Policy.PRIORITY_CATEGORY_ALARMS;
|
||||
import static android.app.NotificationManager.Policy.PRIORITY_CATEGORY_CALLS;
|
||||
import static android.app.NotificationManager.Policy.PRIORITY_CATEGORY_CONVERSATIONS;
|
||||
import static android.app.NotificationManager.Policy.PRIORITY_CATEGORY_EVENTS;
|
||||
import static android.app.NotificationManager.Policy.PRIORITY_CATEGORY_MEDIA;
|
||||
import static android.app.NotificationManager.Policy.PRIORITY_CATEGORY_MESSAGES;
|
||||
import static android.app.NotificationManager.Policy.PRIORITY_CATEGORY_REMINDERS;
|
||||
import static android.app.NotificationManager.Policy.PRIORITY_CATEGORY_REPEAT_CALLERS;
|
||||
import static android.app.NotificationManager.Policy.PRIORITY_CATEGORY_SYSTEM;
|
||||
import static android.app.NotificationManager.Policy.PRIORITY_SENDERS_ANY;
|
||||
import static android.app.NotificationManager.Policy.PRIORITY_SENDERS_CONTACTS;
|
||||
import static android.app.NotificationManager.Policy.PRIORITY_SENDERS_STARRED;
|
||||
import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_BADGE;
|
||||
import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_FULL_SCREEN_INTENT;
|
||||
import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_LIGHTS;
|
||||
@@ -219,7 +232,7 @@ public class ZenModeHelperTest extends UiServiceTestCase {
|
||||
public void testZenOff_NoMuteApplied() {
|
||||
mZenModeHelperSpy.mZenMode = Settings.Global.ZEN_MODE_OFF;
|
||||
mZenModeHelperSpy.mConsolidatedPolicy = new Policy(Policy.PRIORITY_CATEGORY_ALARMS |
|
||||
Policy.PRIORITY_CATEGORY_MEDIA, 0, 0, 0, 0, 0);
|
||||
PRIORITY_CATEGORY_MEDIA, 0, 0, 0, 0, 0);
|
||||
mZenModeHelperSpy.applyRestrictions();
|
||||
|
||||
doNothing().when(mZenModeHelperSpy).applyRestrictions(eq(false), anyBoolean(), anyInt());
|
||||
@@ -229,11 +242,74 @@ public class ZenModeHelperTest extends UiServiceTestCase {
|
||||
AudioAttributes.USAGE_MEDIA);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testZenOn_NotificationApplied() {
|
||||
mZenModeHelperSpy.mZenMode = Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS;
|
||||
// The most permissive policy
|
||||
mZenModeHelperSpy.mConsolidatedPolicy = new Policy(Policy.PRIORITY_CATEGORY_ALARMS |
|
||||
PRIORITY_CATEGORY_MEDIA | PRIORITY_CATEGORY_MESSAGES
|
||||
| PRIORITY_CATEGORY_CONVERSATIONS | PRIORITY_CATEGORY_CALLS
|
||||
| PRIORITY_CATEGORY_ALARMS | PRIORITY_CATEGORY_EVENTS | PRIORITY_CATEGORY_REMINDERS
|
||||
| PRIORITY_CATEGORY_REPEAT_CALLERS | PRIORITY_CATEGORY_SYSTEM, PRIORITY_SENDERS_ANY,
|
||||
PRIORITY_SENDERS_ANY, 0, CONVERSATION_SENDERS_ANYONE);
|
||||
mZenModeHelperSpy.applyRestrictions();
|
||||
|
||||
doNothing().when(mZenModeHelperSpy).applyRestrictions(anyBoolean(), anyBoolean(), anyInt());
|
||||
verify(mZenModeHelperSpy).applyRestrictions(true, true,
|
||||
AudioAttributes.USAGE_NOTIFICATION);
|
||||
verify(mZenModeHelperSpy).applyRestrictions(true, true,
|
||||
AudioAttributes.USAGE_NOTIFICATION_EVENT);
|
||||
verify(mZenModeHelperSpy).applyRestrictions(true, true,
|
||||
AudioAttributes.USAGE_NOTIFICATION_COMMUNICATION_DELAYED);
|
||||
verify(mZenModeHelperSpy).applyRestrictions(true, true,
|
||||
AudioAttributes.USAGE_NOTIFICATION_COMMUNICATION_INSTANT);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testZenOn_StarredCallers_CallTypesBlocked() {
|
||||
mZenModeHelperSpy.mZenMode = Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS;
|
||||
// The most permissive policy
|
||||
mZenModeHelperSpy.mConsolidatedPolicy = new Policy(Policy.PRIORITY_CATEGORY_ALARMS |
|
||||
PRIORITY_CATEGORY_MEDIA | PRIORITY_CATEGORY_MESSAGES
|
||||
| PRIORITY_CATEGORY_CONVERSATIONS | PRIORITY_CATEGORY_CALLS
|
||||
| PRIORITY_CATEGORY_ALARMS | PRIORITY_CATEGORY_EVENTS | PRIORITY_CATEGORY_REMINDERS
|
||||
| PRIORITY_CATEGORY_SYSTEM,
|
||||
PRIORITY_SENDERS_STARRED,
|
||||
PRIORITY_SENDERS_ANY, 0, CONVERSATION_SENDERS_ANYONE);
|
||||
mZenModeHelperSpy.applyRestrictions();
|
||||
|
||||
doNothing().when(mZenModeHelperSpy).applyRestrictions(anyBoolean(), anyBoolean(), anyInt());
|
||||
verify(mZenModeHelperSpy).applyRestrictions(true, true,
|
||||
AudioAttributes.USAGE_NOTIFICATION_RINGTONE);
|
||||
verify(mZenModeHelperSpy).applyRestrictions(true, true,
|
||||
AudioAttributes.USAGE_NOTIFICATION_COMMUNICATION_REQUEST);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testZenOn_AllCallers_CallTypesAllowed() {
|
||||
mZenModeHelperSpy.mZenMode = Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS;
|
||||
// The most permissive policy
|
||||
mZenModeHelperSpy.mConsolidatedPolicy = new Policy(Policy.PRIORITY_CATEGORY_ALARMS |
|
||||
PRIORITY_CATEGORY_MEDIA | PRIORITY_CATEGORY_MESSAGES
|
||||
| PRIORITY_CATEGORY_CONVERSATIONS | PRIORITY_CATEGORY_CALLS
|
||||
| PRIORITY_CATEGORY_ALARMS | PRIORITY_CATEGORY_EVENTS | PRIORITY_CATEGORY_REMINDERS
|
||||
| PRIORITY_CATEGORY_REPEAT_CALLERS | PRIORITY_CATEGORY_SYSTEM,
|
||||
PRIORITY_SENDERS_ANY,
|
||||
PRIORITY_SENDERS_ANY, 0, CONVERSATION_SENDERS_ANYONE);
|
||||
mZenModeHelperSpy.applyRestrictions();
|
||||
|
||||
doNothing().when(mZenModeHelperSpy).applyRestrictions(anyBoolean(), anyBoolean(), anyInt());
|
||||
verify(mZenModeHelperSpy).applyRestrictions(true, false,
|
||||
AudioAttributes.USAGE_NOTIFICATION_RINGTONE);
|
||||
verify(mZenModeHelperSpy).applyRestrictions(true, false,
|
||||
AudioAttributes.USAGE_NOTIFICATION_COMMUNICATION_REQUEST);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testZenOn_AllowAlarmsMedia_NoAlarmMediaMuteApplied() {
|
||||
mZenModeHelperSpy.mZenMode = Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS;
|
||||
mZenModeHelperSpy.mConsolidatedPolicy = new Policy(Policy.PRIORITY_CATEGORY_ALARMS |
|
||||
Policy.PRIORITY_CATEGORY_MEDIA, 0, 0, 0, 0, 0);
|
||||
PRIORITY_CATEGORY_MEDIA, 0, 0, 0, 0, 0);
|
||||
|
||||
mZenModeHelperSpy.applyRestrictions();
|
||||
verify(mZenModeHelperSpy, atLeastOnce()).applyRestrictions(true, false,
|
||||
@@ -261,7 +337,7 @@ public class ZenModeHelperTest extends UiServiceTestCase {
|
||||
public void testTotalSilence() {
|
||||
mZenModeHelperSpy.mZenMode = Settings.Global.ZEN_MODE_NO_INTERRUPTIONS;
|
||||
mZenModeHelperSpy.mConsolidatedPolicy = new Policy(Policy.PRIORITY_CATEGORY_ALARMS |
|
||||
Policy.PRIORITY_CATEGORY_MEDIA, 0, 0, 0, 0, 0);
|
||||
PRIORITY_CATEGORY_MEDIA, 0, 0, 0, 0, 0);
|
||||
mZenModeHelperSpy.applyRestrictions();
|
||||
|
||||
// Total silence will silence alarms, media and system noises (but not vibrations)
|
||||
|
||||
Reference in New Issue
Block a user