diff options
author | John Spurlock <jspurlock@google.com> | 2015-04-30 16:16:13 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2015-04-30 16:16:13 +0000 |
commit | 0f4c6a8bdf6444d05a6d9de3b32ec2bc7f39f1b3 (patch) | |
tree | c12b0cd8b7617abdb1cb9fa1ec4e69a02879e0a1 /services/core/java | |
parent | 5054f906170f343312a299ec9e72aefb2ac24b7a (diff) | |
parent | 1642e354ed10bc606f403ac6f529392f3f25dd2d (diff) | |
download | frameworks_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')
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; |