Fix Zen mode for different notification usage types
am: e743bda5de
Change-Id: Id5820ab61a8672b7b1a2857c8e6356a11f78be07
This commit is contained in:
@@ -24,6 +24,7 @@ import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
import android.util.SparseIntArray;
|
||||
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
@@ -169,6 +170,66 @@ public final class AudioAttributes implements Parcelable {
|
||||
*/
|
||||
public final static int USAGE_VIRTUAL_SOURCE = 15;
|
||||
|
||||
/**
|
||||
* IMPORTANT: when adding new usage types, add them to SDK_USAGES and update SUPPRESSIBLE_USAGES
|
||||
* if applicable.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @hide
|
||||
* Denotes a usage for notifications that do not expect immediate intervention from the user,
|
||||
* will be muted when the Zen mode disables notifications
|
||||
* @see #SUPPRESSIBLE_USAGES
|
||||
*/
|
||||
public final static int SUPPRESSIBLE_NOTIFICATION = 1;
|
||||
/**
|
||||
* @hide
|
||||
* Denotes a usage for notifications that do expect immediate intervention from the user,
|
||||
* will be muted when the Zen mode disables calls
|
||||
* @see #SUPPRESSIBLE_USAGES
|
||||
*/
|
||||
public final static int SUPPRESSIBLE_CALL = 2;
|
||||
|
||||
/**
|
||||
* @hide
|
||||
* Array of all usage types for calls and notifications to assign the suppression behavior,
|
||||
* used by the Zen mode restrictions.
|
||||
* @see com.android.server.notification.ZenModeHelper
|
||||
*/
|
||||
public static final SparseIntArray SUPPRESSIBLE_USAGES;
|
||||
|
||||
static {
|
||||
SUPPRESSIBLE_USAGES = new SparseIntArray();
|
||||
SUPPRESSIBLE_USAGES.put(USAGE_NOTIFICATION, SUPPRESSIBLE_NOTIFICATION);
|
||||
SUPPRESSIBLE_USAGES.put(USAGE_NOTIFICATION_RINGTONE, SUPPRESSIBLE_CALL);
|
||||
SUPPRESSIBLE_USAGES.put(USAGE_NOTIFICATION_COMMUNICATION_REQUEST,SUPPRESSIBLE_CALL);
|
||||
SUPPRESSIBLE_USAGES.put(USAGE_NOTIFICATION_COMMUNICATION_INSTANT,SUPPRESSIBLE_NOTIFICATION);
|
||||
SUPPRESSIBLE_USAGES.put(USAGE_NOTIFICATION_COMMUNICATION_DELAYED,SUPPRESSIBLE_NOTIFICATION);
|
||||
SUPPRESSIBLE_USAGES.put(USAGE_NOTIFICATION_EVENT, SUPPRESSIBLE_NOTIFICATION);
|
||||
}
|
||||
|
||||
/**
|
||||
* @hide
|
||||
* Array of all usage types exposed in the SDK that applications can use.
|
||||
*/
|
||||
public final static int[] SDK_USAGES = {
|
||||
USAGE_UNKNOWN,
|
||||
USAGE_MEDIA,
|
||||
USAGE_VOICE_COMMUNICATION,
|
||||
USAGE_VOICE_COMMUNICATION_SIGNALLING,
|
||||
USAGE_ALARM,
|
||||
USAGE_NOTIFICATION,
|
||||
USAGE_NOTIFICATION_RINGTONE,
|
||||
USAGE_NOTIFICATION_COMMUNICATION_REQUEST,
|
||||
USAGE_NOTIFICATION_COMMUNICATION_INSTANT,
|
||||
USAGE_NOTIFICATION_COMMUNICATION_DELAYED,
|
||||
USAGE_NOTIFICATION_EVENT,
|
||||
USAGE_ASSISTANCE_ACCESSIBILITY,
|
||||
USAGE_ASSISTANCE_NAVIGATION_GUIDANCE,
|
||||
USAGE_ASSISTANCE_SONIFICATION,
|
||||
USAGE_GAME
|
||||
};
|
||||
|
||||
/**
|
||||
* Flag defining a behavior where the audibility of the sound will be ensured by the system.
|
||||
*/
|
||||
|
||||
@@ -35,6 +35,7 @@ import android.content.pm.ServiceInfo;
|
||||
import android.content.res.Resources;
|
||||
import android.content.res.XmlResourceParser;
|
||||
import android.database.ContentObserver;
|
||||
import android.media.AudioAttributes;
|
||||
import android.media.AudioManager;
|
||||
import android.media.AudioManagerInternal;
|
||||
import android.media.AudioSystem;
|
||||
@@ -736,13 +737,14 @@ public class ZenModeHelper {
|
||||
// total silence restrictions
|
||||
final boolean muteEverything = mZenMode == Global.ZEN_MODE_NO_INTERRUPTIONS;
|
||||
|
||||
for (int i = USAGE_UNKNOWN; i <= USAGE_VIRTUAL_SOURCE; i++) {
|
||||
if (i == USAGE_NOTIFICATION) {
|
||||
applyRestrictions(muteNotifications || muteEverything, i);
|
||||
} else if (i == USAGE_NOTIFICATION_RINGTONE) {
|
||||
applyRestrictions(muteCalls || muteEverything, i);
|
||||
for (int usage : AudioAttributes.SDK_USAGES) {
|
||||
final int suppressionBehavior = AudioAttributes.SUPPRESSIBLE_USAGES.get(usage);
|
||||
if (suppressionBehavior == AudioAttributes.SUPPRESSIBLE_NOTIFICATION) {
|
||||
applyRestrictions(muteNotifications || muteEverything, usage);
|
||||
} else if (suppressionBehavior == AudioAttributes.SUPPRESSIBLE_CALL) {
|
||||
applyRestrictions(muteCalls || muteEverything, usage);
|
||||
} else {
|
||||
applyRestrictions(muteEverything, i);
|
||||
applyRestrictions(muteEverything, usage);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user