diff options
author | John Spurlock <jspurlock@google.com> | 2014-12-10 12:47:01 -0500 |
---|---|---|
committer | John Spurlock <jspurlock@google.com> | 2014-12-10 13:56:13 -0500 |
commit | 8403b7535b7b13e5aed732963fc49cf477b9a92e (patch) | |
tree | 7a52b46aaea2098b1d0a47440bd564551b5f7fe8 | |
parent | 33cd463bbbbe47010ed44815fbfd0ab5e8fbf825 (diff) | |
download | frameworks_base-8403b7535b7b13e5aed732963fc49cf477b9a92e.zip frameworks_base-8403b7535b7b13e5aed732963fc49cf477b9a92e.tar.gz frameworks_base-8403b7535b7b13e5aed732963fc49cf477b9a92e.tar.bz2 |
NoMan: Apply audio restrictions when effects are disabled by listeners.
Bug: 17990185
Change-Id: Id946fab4dd27e2354919de6a98c009bc2e711240
-rw-r--r-- | services/core/java/com/android/server/notification/NotificationManagerService.java | 1 | ||||
-rw-r--r-- | services/core/java/com/android/server/notification/ZenModeHelper.java | 45 |
2 files changed, 31 insertions, 15 deletions
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index bb99916..650f0e2 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 012e22f..31d5cd7 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, + applyRestrictions(muteAlarms, USAGE_ALARM); + } + + 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_ALARM, - muteAlarms ? AppOpsManager.MODE_IGNORED : AppOpsManager.MODE_ALLOWED, + mAppOps.setRestriction(AppOpsManager.OP_PLAY_AUDIO, usage, + mute ? AppOpsManager.MODE_IGNORED : AppOpsManager.MODE_ALLOWED, exceptionPackages); - - onZenUpdated(oldMode, newMode); - dispatchOnZenModeChanged(); } 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 { |