summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author John Spurlock <jspurlock@google.com> 2014-07-28 13:37:13 -0400
committer John Spurlock <jspurlock@google.com> 2014-07-28 20:39:17 -0400
commit8c01d88208e17af01268ea01a08c46c2d2f96721 (patch)
tree1e15979c7c4ff218389086ef763404ad12bc6e12
parentf4e0c0cb8ef22fdb20ae74b444c9f4b7d15ded8b (diff)
Zen: follow independent ringer mode changes.
Bug:16624498 Change-Id: Ib623118970a82c8406c714687b1b516378fe7824
-rw-r--r--services/core/java/com/android/server/notification/ZenLog.java7
-rw-r--r--services/core/java/com/android/server/notification/ZenModeHelper.java31
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);
}
}