summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Eric Laurent <elaurent@google.com> 2015-10-07 14:00:42 +0000
committer Android Git Automerger <android-git-automerger@android.com> 2015-10-07 14:00:42 +0000
commit2dafb47c528ac6076d0ae62f8f2166c223e323ec (patch)
treeb91e486ef3ba1d9f9a5174167f2301393a2ddc6a
parentb5e171529dfc0a39878feb6c5e0ed2210cb61b29 (diff)
parentbbf804ca0dc173c73df300c177aff344c9e4074f (diff)
am bbf804ca: am c6865806: am f5d3f960: am 2a6f1d4a: Merge "ZenModeHelper: fix cross deadlock with AudioService" into mnc-dr-dev
* commit 'bbf804ca0dc173c73df300c177aff344c9e4074f': ZenModeHelper: fix cross deadlock with AudioService
-rw-r--r--services/core/java/com/android/server/notification/ZenModeConditions.java4
-rw-r--r--services/core/java/com/android/server/notification/ZenModeHelper.java23
2 files changed, 25 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/notification/ZenModeConditions.java b/services/core/java/com/android/server/notification/ZenModeConditions.java
index b89a654323f3..c2e434979c01 100644
--- a/services/core/java/com/android/server/notification/ZenModeConditions.java
+++ b/services/core/java/com/android/server/notification/ZenModeConditions.java
@@ -104,7 +104,7 @@ public class ZenModeConditions implements ConditionProviders.Callback {
public void onServiceAdded(ComponentName component) {
if (DEBUG) Log.d(TAG, "onServiceAdded " + component);
if (isAutomaticActive(component)) {
- mHelper.setConfig(mHelper.getConfig(), "zmc.onServiceAdded");
+ mHelper.setConfigAsync(mHelper.getConfig(), "zmc.onServiceAdded");
}
}
@@ -120,7 +120,7 @@ public class ZenModeConditions implements ConditionProviders.Callback {
updated |= updateSnoozing(automaticRule);
}
if (updated) {
- mHelper.setConfig(config, "conditionChanged");
+ mHelper.setConfigAsync(config, "conditionChanged");
}
}
diff --git a/services/core/java/com/android/server/notification/ZenModeHelper.java b/services/core/java/com/android/server/notification/ZenModeHelper.java
index 0d09fc2c7083..07c4323c30a7 100644
--- a/services/core/java/com/android/server/notification/ZenModeHelper.java
+++ b/services/core/java/com/android/server/notification/ZenModeHelper.java
@@ -449,6 +449,10 @@ public class ZenModeHelper {
return setConfig(config, reason, true /*setRingerMode*/);
}
+ public void setConfigAsync(ZenModeConfig config, String reason) {
+ mHandler.postSetConfig(config, reason);
+ }
+
private boolean setConfig(ZenModeConfig config, String reason, boolean setRingerMode) {
final long identity = Binder.clearCallingIdentity();
try {
@@ -892,6 +896,17 @@ public class ZenModeHelper {
private final class H extends Handler {
private static final int MSG_DISPATCH = 1;
private static final int MSG_METRICS = 2;
+ private static final int MSG_SET_CONFIG = 3;
+
+ private final class ConfigMessageData {
+ public final ZenModeConfig config;
+ public final String reason;
+
+ ConfigMessageData(ZenModeConfig config, String reason) {
+ this.config = config;
+ this.reason = reason;
+ }
+ }
private static final long METRICS_PERIOD_MS = 6 * 60 * 60 * 1000;
@@ -909,6 +924,10 @@ public class ZenModeHelper {
sendEmptyMessageDelayed(MSG_METRICS, METRICS_PERIOD_MS);
}
+ private void postSetConfig(ZenModeConfig config, String reason) {
+ sendMessage(obtainMessage(MSG_SET_CONFIG, new ConfigMessageData(config, reason)));
+ }
+
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
@@ -918,6 +937,10 @@ public class ZenModeHelper {
case MSG_METRICS:
mMetrics.emit();
break;
+ case MSG_SET_CONFIG:
+ ConfigMessageData configData = (ConfigMessageData)msg.obj;
+ setConfig(configData.config, configData.reason);
+ break;
}
}
}