Synchronize updates to zen config.
Also, remove some dead code.
Change-Id: If6f4432638aebcedf59a4804a3b5d14b73f12549
diff --git a/core/java/android/app/INotificationManager.aidl b/core/java/android/app/INotificationManager.aidl
index e95a35a..30232da 100644
--- a/core/java/android/app/INotificationManager.aidl
+++ b/core/java/android/app/INotificationManager.aidl
@@ -83,10 +83,8 @@
int getZenMode();
ZenModeConfig getZenModeConfig();
- boolean setZenModeConfig(in ZenModeConfig config, String reason);
oneway void setZenMode(int mode, in Uri conditionId, String reason);
oneway void notifyConditions(String pkg, in IConditionProvider provider, in Condition[] conditions);
- oneway void requestZenModeConditions(in IConditionListener callback, int relevance);
boolean isNotificationPolicyAccessGranted(String pkg);
NotificationManager.Policy getNotificationPolicy(String pkg);
void setNotificationPolicy(String pkg, in NotificationManager.Policy policy);
diff --git a/core/java/android/app/NotificationManager.java b/core/java/android/app/NotificationManager.java
index f75b22a..07b4d39 100644
--- a/core/java/android/app/NotificationManager.java
+++ b/core/java/android/app/NotificationManager.java
@@ -348,29 +348,6 @@
/**
* @hide
*/
- public boolean setZenModeConfig(ZenModeConfig config, String reason) {
- INotificationManager service = getService();
- try {
- return service.setZenModeConfig(config, reason);
- } catch (RemoteException e) {
- return false;
- }
- }
-
- /**
- * @hide
- */
- public void requestZenModeConditions(IConditionListener listener, int relevance) {
- INotificationManager service = getService();
- try {
- service.requestZenModeConditions(listener, relevance);
- } catch (RemoteException e) {
- }
- }
-
- /**
- * @hide
- */
public int getZenMode() {
INotificationManager service = getService();
try {
diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogController.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogController.java
index 1cf7a70f..673a30b 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogController.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogController.java
@@ -125,10 +125,6 @@
return mAudio;
}
- public ZenModeConfig getZenModeConfig() {
- return mNoMan.getZenModeConfig();
- }
-
public void dismiss() {
mCallbacks.onDismissRequested(Events.DISMISS_REASON_VOLUME_CONTROLLER);
}
@@ -348,7 +344,6 @@
updateRingerModeExternalW(mAudio.getRingerMode());
updateZenModeW();
updateEffectsSuppressorW(mNoMan.getEffectsSuppressor());
- updateZenModeConfigW();
mCallbacks.onStateChanged(mState);
}
@@ -401,13 +396,6 @@
return stream == AudioManager.STREAM_RING || stream == AudioManager.STREAM_NOTIFICATION;
}
- private boolean updateZenModeConfigW() {
- final ZenModeConfig zenModeConfig = getZenModeConfig();
- if (Objects.equals(mState.zenModeConfig, zenModeConfig)) return false;
- mState.zenModeConfig = zenModeConfig;
- return true;
- }
-
private boolean updateEffectsSuppressorW(ComponentName effectsSuppressor) {
if (Objects.equals(mState.effectsSuppressor, effectsSuppressor)) return false;
mState.effectsSuppressor = effectsSuppressor;
@@ -748,9 +736,6 @@
if (ZEN_MODE_URI.equals(uri)) {
changed = updateZenModeW();
}
- if (ZEN_MODE_CONFIG_URI.equals(uri)) {
- changed = updateZenModeConfigW();
- }
if (changed) {
mCallbacks.onStateChanged(mState);
}
@@ -947,7 +932,6 @@
public int zenMode;
public ComponentName effectsSuppressor;
public String effectsSuppressorName;
- public ZenModeConfig zenModeConfig;
public int activeStream = NO_ACTIVE_STREAM;
public State copy() {
@@ -960,7 +944,6 @@
rt.zenMode = zenMode;
if (effectsSuppressor != null) rt.effectsSuppressor = effectsSuppressor.clone();
rt.effectsSuppressorName = effectsSuppressorName;
- if (zenModeConfig != null) rt.zenModeConfig = zenModeConfig.copy();
rt.activeStream = activeStream;
return rt;
}
@@ -989,7 +972,6 @@
sep(sb, indent); sb.append("zenMode:").append(zenMode);
sep(sb, indent); sb.append("effectsSuppressor:").append(effectsSuppressor);
sep(sb, indent); sb.append("effectsSuppressorName:").append(effectsSuppressorName);
- sep(sb, indent); sb.append("zenModeConfig:").append(zenModeConfig);
sep(sb, indent); sb.append("activeStream:").append(activeStream);
if (indent > 0) sep(sb, indent);
return sb.append('}').toString();
@@ -1005,11 +987,6 @@
sb.append(',');
}
}
-
- public Condition getManualExitCondition() {
- return zenModeConfig != null && zenModeConfig.manualRule != null
- ? zenModeConfig.manualRule.condition : null;
- }
}
public interface Callbacks {
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index 361bbf9..b84811f 100644
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -1579,12 +1579,6 @@
}
@Override
- public boolean setZenModeConfig(ZenModeConfig config, String reason) {
- checkCallerIsSystem();
- return mZenModeHelper.setConfig(config, reason);
- }
-
- @Override
public void setZenMode(int mode, Uri conditionId, String reason) throws RemoteException {
enforceSystemOrSystemUIOrVolume("INotificationManager.setZenMode");
final long identity = Binder.clearCallingIdentity();
@@ -1669,12 +1663,6 @@
});
}
- @Override
- public void requestZenModeConditions(IConditionListener callback, int relevance) {
- enforceSystemOrSystemUIOrVolume("INotificationManager.requestZenModeConditions");
- mZenModeHelper.requestZenModeConditions(callback, relevance);
- }
-
private void enforceSystemOrSystemUIOrVolume(String message) {
if (mAudioManagerInternal != null) {
final int vcuid = mAudioManagerInternal.getVolumeControllerUid();
diff --git a/services/core/java/com/android/server/notification/ZenModeHelper.java b/services/core/java/com/android/server/notification/ZenModeHelper.java
index 76c6443..a1f8c41 100644
--- a/services/core/java/com/android/server/notification/ZenModeHelper.java
+++ b/services/core/java/com/android/server/notification/ZenModeHelper.java
@@ -121,8 +121,11 @@
public boolean matchesCallFilter(UserHandle userHandle, Bundle extras,
ValidateNotificationPeople validator, int contactsTimeoutMs, float timeoutAffinity) {
- return ZenModeFiltering.matchesCallFilter(mContext, mZenMode, mConfig, userHandle, extras,
- validator, contactsTimeoutMs, timeoutAffinity);
+ synchronized (mConfig) {
+ return ZenModeFiltering.matchesCallFilter(mContext, mZenMode, mConfig, userHandle,
+ extras,
+ validator, contactsTimeoutMs, timeoutAffinity);
+ }
}
public boolean isCall(NotificationRecord record) {
@@ -130,7 +133,9 @@
}
public boolean shouldIntercept(NotificationRecord record) {
- return mFiltering.shouldIntercept(mZenMode, mConfig, record);
+ synchronized (mConfig) {
+ return mFiltering.shouldIntercept(mZenMode, mConfig, record);
+ }
}
public void addCallback(Callback callback) {
@@ -175,10 +180,6 @@
mConfigs.remove(user);
}
- public void requestZenModeConditions(IConditionListener callback, int relevance) {
- mConditions.requestConditions(callback, relevance);
- }
-
public int getZenModeListenerInterruptionFilter() {
return NotificationManager.zenModeToInterruptionFilter(mZenMode);
}
@@ -203,18 +204,23 @@
public List<AutomaticZenRule> getAutomaticZenRules() {
List<AutomaticZenRule> rules = new ArrayList<>();
- if (mConfig == null) return rules;
- for(ZenRule rule : mConfig.automaticRules.values()) {
- if (canManageAutomaticZenRule(rule)) {
- rules.add(createAutomaticZenRule(rule));
+ synchronized (mConfig) {
+ if (mConfig == null) return rules;
+ for (ZenRule rule : mConfig.automaticRules.values()) {
+ if (canManageAutomaticZenRule(rule)) {
+ rules.add(createAutomaticZenRule(rule));
+ }
}
}
return rules;
}
public AutomaticZenRule getAutomaticZenRule(String id) {
- if (mConfig == null) return null;
- ZenRule rule = mConfig.automaticRules.get(id);
+ ZenRule rule;
+ synchronized (mConfig) {
+ if (mConfig == null) return null;
+ rule = mConfig.automaticRules.get(id);
+ }
if (rule == null) return null;
if (canManageAutomaticZenRule(rule)) {
return createAutomaticZenRule(rule);
@@ -223,14 +229,18 @@
}
public AutomaticZenRule addAutomaticZenRule(AutomaticZenRule automaticZenRule, String reason) {
- if (mConfig == null) return null;
- if (DEBUG) {
- Log.d(TAG, "addAutomaticZenRule zenRule= " + automaticZenRule + " reason=" +reason);
+ ZenModeConfig newConfig;
+ synchronized (mConfig) {
+ if (mConfig == null) return null;
+ if (DEBUG) {
+ Log.d(TAG,
+ "addAutomaticZenRule zenRule= " + automaticZenRule + " reason=" + reason);
+ }
+ if (!TextUtils.isEmpty(automaticZenRule.getId())) {
+ throw new IllegalArgumentException("Rule already exists");
+ }
+ newConfig = mConfig.copy();
}
- if (!TextUtils.isEmpty(automaticZenRule.getId())) {
- throw new IllegalArgumentException("Rule already exists");
- }
- final ZenModeConfig newConfig = mConfig.copy();
ZenRule rule = new ZenRule();
populateZenRule(automaticZenRule, rule, true);
newConfig.automaticRules.put(rule.id, rule);
@@ -242,12 +252,15 @@
}
public boolean updateAutomaticZenRule(AutomaticZenRule automaticZenRule, String reason) {
- if (mConfig == null) return false;
- if (DEBUG) {
- Log.d(TAG, "updateAutomaticZenRule zenRule=" + automaticZenRule
- + " reason=" + reason);
+ ZenModeConfig newConfig;
+ synchronized (mConfig) {
+ if (mConfig == null) return false;
+ if (DEBUG) {
+ Log.d(TAG, "updateAutomaticZenRule zenRule=" + automaticZenRule
+ + " reason=" + reason);
+ }
+ newConfig = mConfig.copy();
}
- final ZenModeConfig newConfig = mConfig.copy();
final String ruleId = automaticZenRule.getId();
ZenModeConfig.ZenRule rule = new ZenModeConfig.ZenRule();
if (ruleId == null) {
@@ -265,8 +278,11 @@
}
public boolean removeAutomaticZenRule(String id, String reason) {
- if (mConfig == null) return false;
- final ZenModeConfig newConfig = mConfig.copy();
+ ZenModeConfig newConfig;
+ synchronized (mConfig) {
+ if (mConfig == null) return false;
+ newConfig = mConfig.copy();
+ }
ZenRule rule = newConfig.automaticRules.get(id);
if (rule == null) return false;
if (canManageAutomaticZenRule(rule)) {
@@ -328,12 +344,15 @@
private void setManualZenMode(int zenMode, Uri conditionId, String reason,
boolean setRingerMode) {
- if (mConfig == null) return;
- if (!Global.isValidZenMode(zenMode)) return;
- if (DEBUG) Log.d(TAG, "setManualZenMode " + Global.zenModeToString(zenMode)
- + " conditionId=" + conditionId + " reason=" + reason
- + " setRingerMode=" + setRingerMode);
- final ZenModeConfig newConfig = mConfig.copy();
+ ZenModeConfig newConfig;
+ synchronized (mConfig) {
+ if (mConfig == null) return;
+ if (!Global.isValidZenMode(zenMode)) return;
+ if (DEBUG) Log.d(TAG, "setManualZenMode " + Global.zenModeToString(zenMode)
+ + " conditionId=" + conditionId + " reason=" + reason
+ + " setRingerMode=" + setRingerMode);
+ newConfig = mConfig.copy();
+ }
if (zenMode == Global.ZEN_MODE_OFF) {
newConfig.manualRule = null;
for (ZenRule automaticRule : newConfig.automaticRules.values()) {
@@ -360,7 +379,9 @@
dump(pw, prefix, "mConfigs[u=" + mConfigs.keyAt(i) + "]", mConfigs.valueAt(i));
}
pw.print(prefix); pw.print("mUser="); pw.println(mUser);
- dump(pw, prefix, "mConfig", mConfig);
+ synchronized (mConfig) {
+ dump(pw, prefix, "mConfig", mConfig);
+ }
pw.print(prefix); pw.print("mEffectsSuppressed="); pw.println(mEffectsSuppressed);
mFiltering.dump(pw, prefix);
mConditions.dump(pw, prefix);
@@ -437,7 +458,9 @@
}
public ZenModeConfig getConfig() {
- return mConfig;
+ synchronized (mConfig) {
+ return mConfig.copy();
+ }
}
public boolean setConfig(ZenModeConfig config, String reason) {
@@ -462,19 +485,21 @@
return true;
}
mConditions.evaluateConfig(config, false /*processSubscriptions*/); // may modify config
- mConfigs.put(config.user, config);
- if (DEBUG) Log.d(TAG, "setConfig reason=" + reason, new Throwable());
- ZenLog.traceConfig(reason, mConfig, config);
- final boolean policyChanged = !Objects.equals(getNotificationPolicy(mConfig),
- getNotificationPolicy(config));
- mConfig = config;
- if (config.equals(mConfig)) {
- dispatchOnConfigChanged();
+ synchronized (mConfig) {
+ mConfigs.put(config.user, config);
+ if (DEBUG) Log.d(TAG, "setConfig reason=" + reason, new Throwable());
+ ZenLog.traceConfig(reason, mConfig, config);
+ final boolean policyChanged = !Objects.equals(getNotificationPolicy(mConfig),
+ getNotificationPolicy(config));
+ mConfig = config;
+ if (config.equals(mConfig)) {
+ dispatchOnConfigChanged();
+ }
+ if (policyChanged) {
+ dispatchOnPolicyChanged();
+ }
}
- if (policyChanged){
- dispatchOnPolicyChanged();
- }
- final String val = Integer.toString(mConfig.hashCode());
+ final String val = Integer.toString(config.hashCode());
Global.putString(mContext.getContentResolver(), Global.ZEN_MODE_CONFIG_ETAG, val);
if (!evaluateZenMode(reason, setRingerMode)) {
applyRestrictions(); // evaluateZenMode will also apply restrictions if changed
@@ -529,17 +554,19 @@
}
private int computeZenMode() {
- if (mConfig == null) return Global.ZEN_MODE_OFF;
- if (mConfig.manualRule != null) return mConfig.manualRule.zenMode;
- int zen = Global.ZEN_MODE_OFF;
- for (ZenRule automaticRule : mConfig.automaticRules.values()) {
- if (automaticRule.isAutomaticActive()) {
- if (zenSeverity(automaticRule.zenMode) > zenSeverity(zen)) {
- zen = automaticRule.zenMode;
+ synchronized (mConfig) {
+ if (mConfig == null) return Global.ZEN_MODE_OFF;
+ if (mConfig.manualRule != null) return mConfig.manualRule.zenMode;
+ int zen = Global.ZEN_MODE_OFF;
+ for (ZenRule automaticRule : mConfig.automaticRules.values()) {
+ if (automaticRule.isAutomaticActive()) {
+ if (zenSeverity(automaticRule.zenMode) > zenSeverity(zen)) {
+ zen = automaticRule.zenMode;
+ }
}
}
+ return zen;
}
- return zen;
}
private void applyRestrictions() {