From 8403b7535b7b13e5aed732963fc49cf477b9a92e Mon Sep 17 00:00:00 2001 From: John Spurlock Date: Wed, 10 Dec 2014 12:47:01 -0500 Subject: [PATCH] NoMan: Apply audio restrictions when effects are disabled by listeners. Bug: 17990185 Change-Id: Id946fab4dd27e2354919de6a98c009bc2e711240 --- .../NotificationManagerService.java | 1 + .../server/notification/ZenModeHelper.java | 47 ++++++++++++------- 2 files changed, 32 insertions(+), 16 deletions(-) diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index bb999168509ff..650f0e27dc11c 100644 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -1028,6 +1028,7 @@ public class NotificationManagerService extends SystemService { ? mListenersDisablingEffects.valueAt(0).component : null; if (Objects.equals(suppressor, mEffectsSuppressor)) return; mEffectsSuppressor = suppressor; + mZenModeHelper.setEffectsSuppressed(suppressor != null); getContext().sendBroadcast(new Intent(NotificationManager.ACTION_EFFECTS_SUPPRESSOR_CHANGED) .addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY)); } diff --git a/services/core/java/com/android/server/notification/ZenModeHelper.java b/services/core/java/com/android/server/notification/ZenModeHelper.java index 012e22f2eb420..31d5cd7d6cce0 100644 --- a/services/core/java/com/android/server/notification/ZenModeHelper.java +++ b/services/core/java/com/android/server/notification/ZenModeHelper.java @@ -17,6 +17,7 @@ package com.android.server.notification; import static android.media.AudioAttributes.USAGE_ALARM; +import static android.media.AudioAttributes.USAGE_NOTIFICATION; import static android.media.AudioAttributes.USAGE_NOTIFICATION_RINGTONE; import android.app.AppOpsManager; @@ -77,6 +78,7 @@ public class ZenModeHelper implements AudioManagerInternal.RingerModeDelegate { private ZenModeConfig mConfig; private AudioManagerInternal mAudioManager; private int mPreviousRingerMode = -1; + private boolean mEffectsSuppressed; public ZenModeHelper(Context context, Looper looper) { mContext = context; @@ -153,6 +155,12 @@ public class ZenModeHelper implements AudioManagerInternal.RingerModeDelegate { } } + public void setEffectsSuppressed(boolean effectsSuppressed) { + if (mEffectsSuppressed == effectsSuppressed) return; + mEffectsSuppressed = effectsSuppressed; + applyRestrictions(); + } + public boolean shouldIntercept(NotificationRecord record) { if (isSystem(record)) { return false; @@ -225,29 +233,35 @@ public class ZenModeHelper implements AudioManagerInternal.RingerModeDelegate { ZenLog.traceUpdateZenMode(oldMode, newMode); } mZenMode = newMode; + applyRestrictions(); + onZenUpdated(oldMode, newMode); + dispatchOnZenModeChanged(); + } + + private void applyRestrictions() { final boolean zen = mZenMode != Global.ZEN_MODE_OFF; - final String[] exceptionPackages = null; // none (for now) + + // notification restrictions + final boolean muteNotifications = mEffectsSuppressed; + applyRestrictions(muteNotifications, USAGE_NOTIFICATION); // call restrictions - final boolean muteCalls = zen && !mConfig.allowCalls; - mAppOps.setRestriction(AppOpsManager.OP_VIBRATE, USAGE_NOTIFICATION_RINGTONE, - muteCalls ? AppOpsManager.MODE_IGNORED : AppOpsManager.MODE_ALLOWED, - exceptionPackages); - mAppOps.setRestriction(AppOpsManager.OP_PLAY_AUDIO, USAGE_NOTIFICATION_RINGTONE, - muteCalls ? AppOpsManager.MODE_IGNORED : AppOpsManager.MODE_ALLOWED, - exceptionPackages); + final boolean muteCalls = zen && !mConfig.allowCalls || mEffectsSuppressed; + applyRestrictions(muteCalls, USAGE_NOTIFICATION_RINGTONE); // alarm restrictions final boolean muteAlarms = mZenMode == Global.ZEN_MODE_NO_INTERRUPTIONS; - mAppOps.setRestriction(AppOpsManager.OP_VIBRATE, USAGE_ALARM, - muteAlarms ? AppOpsManager.MODE_IGNORED : AppOpsManager.MODE_ALLOWED, - exceptionPackages); - mAppOps.setRestriction(AppOpsManager.OP_PLAY_AUDIO, USAGE_ALARM, - muteAlarms ? AppOpsManager.MODE_IGNORED : AppOpsManager.MODE_ALLOWED, - exceptionPackages); + applyRestrictions(muteAlarms, USAGE_ALARM); + } - onZenUpdated(oldMode, newMode); - dispatchOnZenModeChanged(); + private void applyRestrictions(boolean mute, int usage) { + final String[] exceptionPackages = null; // none (for now) + mAppOps.setRestriction(AppOpsManager.OP_VIBRATE, usage, + mute ? AppOpsManager.MODE_IGNORED : AppOpsManager.MODE_ALLOWED, + exceptionPackages); + mAppOps.setRestriction(AppOpsManager.OP_PLAY_AUDIO, usage, + mute ? AppOpsManager.MODE_IGNORED : AppOpsManager.MODE_ALLOWED, + exceptionPackages); } public void dump(PrintWriter pw, String prefix) { @@ -257,6 +271,7 @@ public class ZenModeHelper implements AudioManagerInternal.RingerModeDelegate { pw.print(prefix); pw.print("mDefaultConfig="); pw.println(mDefaultConfig); pw.print(prefix); pw.print("mPreviousRingerMode="); pw.println(mPreviousRingerMode); pw.print(prefix); pw.print("mDefaultPhoneApp="); pw.println(mDefaultPhoneApp); + pw.print(prefix); pw.print("mEffectsSuppressed="); pw.println(mEffectsSuppressed); } public void readXml(XmlPullParser parser) throws XmlPullParserException, IOException {