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;
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";
}
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";
}
}
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);
}
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();
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);
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);
}
}