diff options
5 files changed, 82 insertions, 115 deletions
diff --git a/core/java/android/app/INotificationManager.aidl b/core/java/android/app/INotificationManager.aidl index e95a35a23b6c..30232da96e90 100644 --- a/core/java/android/app/INotificationManager.aidl +++ b/core/java/android/app/INotificationManager.aidl @@ -83,10 +83,8 @@ interface INotificationManager 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 f75b22af1139..07b4d39d82f4 100644 --- a/core/java/android/app/NotificationManager.java +++ b/core/java/android/app/NotificationManager.java @@ -348,29 +348,6 @@ public class NotificationManager /** * @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 1cf7a70f7e4d..673a30b30305 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 @@ public class VolumeDialogController { return mAudio; } - public ZenModeConfig getZenModeConfig() { - return mNoMan.getZenModeConfig(); - } - public void dismiss() { mCallbacks.onDismissRequested(Events.DISMISS_REASON_VOLUME_CONTROLLER); } @@ -348,7 +344,6 @@ public class VolumeDialogController { updateRingerModeExternalW(mAudio.getRingerMode()); updateZenModeW(); updateEffectsSuppressorW(mNoMan.getEffectsSuppressor()); - updateZenModeConfigW(); mCallbacks.onStateChanged(mState); } @@ -401,13 +396,6 @@ public class VolumeDialogController { 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 @@ public class VolumeDialogController { 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 class VolumeDialogController { 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 @@ public class VolumeDialogController { 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 @@ public class VolumeDialogController { 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 @@ public class VolumeDialogController { 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 361bbf906d7e..b84811fa8c4d 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 @@ public class NotificationManagerService extends SystemService { } @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 @@ public class NotificationManagerService extends SystemService { }); } - @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 76c64432e54b..a1f8c41619d0 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 class ZenModeHelper { 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 class ZenModeHelper { } 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 @@ public class ZenModeHelper { 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 class ZenModeHelper { 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 class ZenModeHelper { } public AutomaticZenRule addAutomaticZenRule(AutomaticZenRule automaticZenRule, String reason) { - 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"); + 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(); } - final ZenModeConfig newConfig = mConfig.copy(); ZenRule rule = new ZenRule(); populateZenRule(automaticZenRule, rule, true); newConfig.automaticRules.put(rule.id, rule); @@ -242,12 +252,15 @@ public class ZenModeHelper { } 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 class ZenModeHelper { } 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 @@ public class ZenModeHelper { 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 @@ public class ZenModeHelper { 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 class ZenModeHelper { } public ZenModeConfig getConfig() { - return mConfig; + synchronized (mConfig) { + return mConfig.copy(); + } } public boolean setConfig(ZenModeConfig config, String reason) { @@ -462,19 +485,21 @@ public class ZenModeHelper { 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(); - } - if (policyChanged){ - dispatchOnPolicyChanged(); + 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(); + } } - 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 @@ public class ZenModeHelper { } 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() { |