diff options
| -rw-r--r-- | services/core/java/com/android/server/notification/ZenLog.java | 7 | ||||
| -rw-r--r-- | services/core/java/com/android/server/notification/ZenModeHelper.java | 31 |
2 files changed, 38 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/notification/ZenLog.java b/services/core/java/com/android/server/notification/ZenLog.java index 3069ad96797b..64efa676ae43 100644 --- a/services/core/java/com/android/server/notification/ZenLog.java +++ b/services/core/java/com/android/server/notification/ZenLog.java @@ -57,6 +57,7 @@ public class ZenLog { private static final int TYPE_SUBSCRIBE = 7; private static final int TYPE_UNSUBSCRIBE = 8; private static final int TYPE_CONFIG = 9; + private static final int TYPE_FOLLOW_RINGER_MODE = 10; private static int sNext; private static int sSize; @@ -100,6 +101,11 @@ public class ZenLog { append(TYPE_CONFIG, newConfig != null ? newConfig.toString() : null); } + public static void traceFollowRingerMode(int ringerMode, int oldZen, int newZen) { + append(TYPE_FOLLOW_RINGER_MODE, ringerModeToString(ringerMode) + ", " + + zenModeToString(oldZen) + " -> " + zenModeToString(newZen)); + } + private static String subscribeResult(IConditionProvider provider, RemoteException e) { return provider == null ? "no provider" : e != null ? e.getMessage() : "ok"; } @@ -115,6 +121,7 @@ public class ZenLog { case TYPE_SUBSCRIBE: return "subscribe"; case TYPE_UNSUBSCRIBE: return "unsubscribe"; case TYPE_CONFIG: return "config"; + case TYPE_FOLLOW_RINGER_MODE: return "follow_ringer_mode"; default: return "unknown"; } } diff --git a/services/core/java/com/android/server/notification/ZenModeHelper.java b/services/core/java/com/android/server/notification/ZenModeHelper.java index 1289cf78c9f2..c61ce03b746b 100644 --- a/services/core/java/com/android/server/notification/ZenModeHelper.java +++ b/services/core/java/com/android/server/notification/ZenModeHelper.java @@ -96,6 +96,7 @@ public class ZenModeHelper { final IntentFilter filter = new IntentFilter(); filter.addAction(ACTION_ENTER_ZEN); filter.addAction(ACTION_EXIT_ZEN); + filter.addAction(AudioManager.RINGER_MODE_CHANGED_ACTION); mContext.registerReceiver(new ZenBroadcastReceiver(), filter); } @@ -279,6 +280,27 @@ public class ZenModeHelper { return true; } + private void handleRingerModeChanged() { + if (mAudioManager != null) { + // follow ringer mode if necessary + final int ringerMode = mAudioManager.getRingerMode(); + int newZen = -1; + if (ringerMode == AudioManager.RINGER_MODE_SILENT) { + if (mZenMode != Global.ZEN_MODE_NO_INTERRUPTIONS) { + newZen = Global.ZEN_MODE_NO_INTERRUPTIONS; + } + } else if ((ringerMode == AudioManager.RINGER_MODE_NORMAL + || ringerMode == AudioManager.RINGER_MODE_VIBRATE) + && mZenMode == Global.ZEN_MODE_NO_INTERRUPTIONS) { + newZen = Global.ZEN_MODE_OFF; + } + if (newZen != -1) { + ZenLog.traceFollowRingerMode(ringerMode, mZenMode, newZen); + setZenMode(newZen); + } + } + } + private void dispatchOnConfigChanged() { for (Callback callback : mCallbacks) { callback.onConfigChanged(); @@ -376,6 +398,13 @@ public class ZenModeHelper { return new Date(time) + " (" + time + ")"; } + private final Runnable mRingerModeChanged = new Runnable() { + @Override + public void run() { + handleRingerModeChanged(); + } + }; + private class SettingsObserver extends ContentObserver { private final Uri ZEN_MODE = Global.getUriFor(Global.ZEN_MODE); @@ -410,6 +439,8 @@ public class ZenModeHelper { setZenMode(intent, Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS); } else if (ACTION_EXIT_ZEN.equals(intent.getAction())) { setZenMode(intent, Global.ZEN_MODE_OFF); + } else if (AudioManager.RINGER_MODE_CHANGED_ACTION.equals(intent.getAction())) { + mHandler.post(mRingerModeChanged); } } |