summaryrefslogtreecommitdiffstats
path: root/services/core/java
diff options
context:
space:
mode:
authorJohn Spurlock <jspurlock@google.com>2015-04-30 16:16:13 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2015-04-30 16:16:13 +0000
commit0f4c6a8bdf6444d05a6d9de3b32ec2bc7f39f1b3 (patch)
treec12b0cd8b7617abdb1cb9fa1ec4e69a02879e0a1 /services/core/java
parent5054f906170f343312a299ec9e72aefb2ac24b7a (diff)
parent1642e354ed10bc606f403ac6f529392f3f25dd2d (diff)
downloadframeworks_base-0f4c6a8bdf6444d05a6d9de3b32ec2bc7f39f1b3.zip
frameworks_base-0f4c6a8bdf6444d05a6d9de3b32ec2bc7f39f1b3.tar.gz
frameworks_base-0f4c6a8bdf6444d05a6d9de3b32ec2bc7f39f1b3.tar.bz2
am 1642e354: am 8f72b403: Merge "Zen: New event condition data model." into mnc-dev
* commit '1642e354ed10bc606f403ac6f529392f3f25dd2d': Zen: New event condition data model.
Diffstat (limited to 'services/core/java')
-rw-r--r--services/core/java/com/android/server/notification/CountdownConditionProvider.java2
-rw-r--r--services/core/java/com/android/server/notification/EventConditionProvider.java142
-rw-r--r--services/core/java/com/android/server/notification/ScheduleConditionProvider.java2
-rw-r--r--services/core/java/com/android/server/notification/SystemConditionProviderService.java2
-rw-r--r--services/core/java/com/android/server/notification/ZenModeConditions.java13
5 files changed, 151 insertions, 10 deletions
diff --git a/services/core/java/com/android/server/notification/CountdownConditionProvider.java b/services/core/java/com/android/server/notification/CountdownConditionProvider.java
index 6a04688..b5b97d6 100644
--- a/services/core/java/com/android/server/notification/CountdownConditionProvider.java
+++ b/services/core/java/com/android/server/notification/CountdownConditionProvider.java
@@ -64,7 +64,7 @@ public class CountdownConditionProvider extends SystemConditionProviderService {
}
@Override
- public boolean isValidConditionid(Uri id) {
+ public boolean isValidConditionId(Uri id) {
return ZenModeConfig.isValidCountdownConditionId(id);
}
diff --git a/services/core/java/com/android/server/notification/EventConditionProvider.java b/services/core/java/com/android/server/notification/EventConditionProvider.java
new file mode 100644
index 0000000..425e222
--- /dev/null
+++ b/services/core/java/com/android/server/notification/EventConditionProvider.java
@@ -0,0 +1,142 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.notification;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.net.Uri;
+import android.service.notification.Condition;
+import android.service.notification.IConditionProvider;
+import android.service.notification.ZenModeConfig;
+import android.util.ArraySet;
+import android.util.Log;
+import android.util.Slog;
+
+import com.android.server.notification.NotificationManagerService.DumpFilter;
+
+import java.io.PrintWriter;
+
+/**
+ * Built-in zen condition provider for calendar event-based conditions.
+ */
+public class EventConditionProvider extends SystemConditionProviderService {
+ private static final String TAG = "ConditionProviders";
+ private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
+
+ public static final ComponentName COMPONENT =
+ new ComponentName("android", EventConditionProvider.class.getName());
+ private static final String NOT_SHOWN = "...";
+
+ private final ArraySet<Uri> mSubscriptions = new ArraySet<Uri>();
+
+ private boolean mConnected;
+ private boolean mRegistered;
+
+ public EventConditionProvider() {
+ if (DEBUG) Slog.d(TAG, "new EventConditionProvider()");
+ }
+
+ @Override
+ public ComponentName getComponent() {
+ return COMPONENT;
+ }
+
+ @Override
+ public boolean isValidConditionId(Uri id) {
+ return ZenModeConfig.isValidEventConditionId(id);
+ }
+
+ @Override
+ public void dump(PrintWriter pw, DumpFilter filter) {
+ pw.println(" EventConditionProvider:");
+ pw.print(" mConnected="); pw.println(mConnected);
+ pw.print(" mRegistered="); pw.println(mRegistered);
+ pw.println(" mSubscriptions=");
+ for (Uri conditionId : mSubscriptions) {
+ pw.print(" ");
+ pw.println(conditionId);
+ }
+ }
+
+ @Override
+ public void onConnected() {
+ if (DEBUG) Slog.d(TAG, "onConnected");
+ mConnected = true;
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ if (DEBUG) Slog.d(TAG, "onDestroy");
+ mConnected = false;
+ }
+
+ @Override
+ public void onRequestConditions(int relevance) {
+ if (DEBUG) Slog.d(TAG, "onRequestConditions relevance=" + relevance);
+ // does not advertise conditions
+ }
+
+ @Override
+ public void onSubscribe(Uri conditionId) {
+ if (DEBUG) Slog.d(TAG, "onSubscribe " + conditionId);
+ if (!ZenModeConfig.isValidEventConditionId(conditionId)) {
+ notifyCondition(conditionId, Condition.STATE_FALSE, "badCondition");
+ return;
+ }
+ mSubscriptions.add(conditionId);
+ evaluateSubscriptions();
+ }
+
+ @Override
+ public void onUnsubscribe(Uri conditionId) {
+ if (DEBUG) Slog.d(TAG, "onUnsubscribe " + conditionId);
+ if (mSubscriptions.remove(conditionId)) {
+ evaluateSubscriptions();
+ }
+ }
+
+ @Override
+ public void attachBase(Context base) {
+ attachBaseContext(base);
+ }
+
+ @Override
+ public IConditionProvider asInterface() {
+ return (IConditionProvider) onBind(null);
+ }
+
+ private void evaluateSubscriptions() {
+ for (Uri conditionId : mSubscriptions) {
+ notifyCondition(conditionId, Condition.STATE_FALSE, "notImplemented");
+ }
+ }
+
+ private void notifyCondition(Uri conditionId, int state, String reason) {
+ if (DEBUG) Slog.d(TAG, "notifyCondition " + Condition.stateToString(state)
+ + " reason=" + reason);
+ notifyCondition(createCondition(conditionId, state));
+ }
+
+ private Condition createCondition(Uri id, int state) {
+ final String summary = NOT_SHOWN;
+ final String line1 = NOT_SHOWN;
+ final String line2 = NOT_SHOWN;
+ return new Condition(id, summary, line1, line2, 0, state, Condition.FLAG_RELEVANT_ALWAYS);
+ }
+
+}
diff --git a/services/core/java/com/android/server/notification/ScheduleConditionProvider.java b/services/core/java/com/android/server/notification/ScheduleConditionProvider.java
index 383d56c..0912e97 100644
--- a/services/core/java/com/android/server/notification/ScheduleConditionProvider.java
+++ b/services/core/java/com/android/server/notification/ScheduleConditionProvider.java
@@ -69,7 +69,7 @@ public class ScheduleConditionProvider extends SystemConditionProviderService {
}
@Override
- public boolean isValidConditionid(Uri id) {
+ public boolean isValidConditionId(Uri id) {
return ZenModeConfig.isValidScheduleConditionId(id);
}
diff --git a/services/core/java/com/android/server/notification/SystemConditionProviderService.java b/services/core/java/com/android/server/notification/SystemConditionProviderService.java
index a217623..3282a69a 100644
--- a/services/core/java/com/android/server/notification/SystemConditionProviderService.java
+++ b/services/core/java/com/android/server/notification/SystemConditionProviderService.java
@@ -32,5 +32,5 @@ public abstract class SystemConditionProviderService extends ConditionProviderSe
abstract public void attachBase(Context context);
abstract public IConditionProvider asInterface();
abstract public ComponentName getComponent();
- abstract public boolean isValidConditionid(Uri id);
+ abstract public boolean isValidConditionId(Uri id);
}
diff --git a/services/core/java/com/android/server/notification/ZenModeConditions.java b/services/core/java/com/android/server/notification/ZenModeConditions.java
index 766d6c5..fa314de 100644
--- a/services/core/java/com/android/server/notification/ZenModeConditions.java
+++ b/services/core/java/com/android/server/notification/ZenModeConditions.java
@@ -38,20 +38,19 @@ public class ZenModeConditions implements ConditionProviders.Callback {
private final ConditionProviders mConditionProviders;
private final ArrayMap<Uri, ComponentName> mSubscriptions = new ArrayMap<>();
- private CountdownConditionProvider mCountdown;
- private ScheduleConditionProvider mSchedule;
private boolean mFirstEvaluation = true;
public ZenModeConditions(ZenModeHelper helper, ConditionProviders conditionProviders) {
mHelper = helper;
mConditionProviders = conditionProviders;
if (mConditionProviders.isSystemProviderEnabled(ZenModeConfig.COUNTDOWN_PATH)) {
- mCountdown = new CountdownConditionProvider();
- mConditionProviders.addSystemProvider(mCountdown);
+ mConditionProviders.addSystemProvider(new CountdownConditionProvider());
}
if (mConditionProviders.isSystemProviderEnabled(ZenModeConfig.SCHEDULE_PATH)) {
- mSchedule = new ScheduleConditionProvider();
- mConditionProviders.addSystemProvider(mSchedule);
+ mConditionProviders.addSystemProvider(new ScheduleConditionProvider());
+ }
+ if (mConditionProviders.isSystemProviderEnabled(ZenModeConfig.EVENT_PATH)) {
+ mConditionProviders.addSystemProvider(new EventConditionProvider());
}
mConditionProviders.setCallback(this);
}
@@ -128,7 +127,7 @@ public class ZenModeConditions implements ConditionProviders.Callback {
final Uri id = rule.conditionId;
boolean isSystemCondition = false;
for (SystemConditionProviderService sp : mConditionProviders.getSystemProviders()) {
- if (sp.isValidConditionid(id)) {
+ if (sp.isValidConditionId(id)) {
mConditionProviders.ensureRecordExists(sp.getComponent(), id, sp.asInterface());
rule.component = sp.getComponent();
isSystemCondition = true;