diff options
| author | John Spurlock <jspurlock@google.com> | 2014-04-26 10:24:59 -0400 |
|---|---|---|
| committer | John Spurlock <jspurlock@google.com> | 2014-04-27 11:36:32 -0400 |
| commit | e77bb36d48b6b8b5c3bb6a1195aca469bb237919 (patch) | |
| tree | 29f877996112bebd253e25a18a2b731a086abfb3 /core/java/android | |
| parent | 31dc634be3610b062fbcc4afa02607ce8f4125f5 (diff) | |
Wire up condition providers to zen mode exit triggers.
Bug:13743109
Change-Id: I4e45d7050d1f9aaa379f46379a3203e61e216a3d
Diffstat (limited to 'core/java/android')
5 files changed, 91 insertions, 39 deletions
diff --git a/core/java/android/app/INotificationManager.aidl b/core/java/android/app/INotificationManager.aidl index 045fab18fbae..ad4027de4f60 100644 --- a/core/java/android/app/INotificationManager.aidl +++ b/core/java/android/app/INotificationManager.aidl @@ -18,13 +18,15 @@ package android.app; import android.app.ITransientNotification; -import android.service.notification.StatusBarNotification; import android.app.Notification; import android.content.ComponentName; import android.content.Intent; +import android.net.Uri; import android.service.notification.Condition; +import android.service.notification.IConditionListener; import android.service.notification.IConditionProvider; import android.service.notification.INotificationListener; +import android.service.notification.StatusBarNotification; import android.service.notification.ZenModeConfig; /** {@hide} */ @@ -55,5 +57,7 @@ interface INotificationManager ZenModeConfig getZenModeConfig(); boolean setZenModeConfig(in ZenModeConfig config); - void notifyCondition(in IConditionProvider provider, in Condition condition); + oneway void notifyConditions(String pkg, in IConditionProvider provider, in Condition[] conditions); + oneway void requestZenModeConditions(in IConditionListener callback, boolean requested); + oneway void setZenModeCondition(in Uri conditionId); }
\ No newline at end of file diff --git a/core/java/android/service/notification/Condition.java b/core/java/android/service/notification/Condition.java index cfd40f3880fd..71e31663a76f 100644 --- a/core/java/android/service/notification/Condition.java +++ b/core/java/android/service/notification/Condition.java @@ -16,6 +16,7 @@ package android.service.notification; +import android.content.Context; import android.net.Uri; import android.os.Parcel; import android.os.Parcelable; @@ -29,18 +30,25 @@ import java.util.Objects; */ public class Condition implements Parcelable { + public static final String SCHEME = "condition"; + + public static final int STATE_FALSE = 0; + public static final int STATE_TRUE = 1; + public static final int STATE_UNKNOWN = 2; + public static final int STATE_ERROR = 3; + public static final int FLAG_RELEVANT_NOW = 1 << 0; public static final int FLAG_RELEVANT_ALWAYS = 1 << 1; public final Uri id; public String caption; - public boolean state; + public int state; public int flags; - - public Condition(Uri id, String caption, boolean state, int flags) { + public Condition(Uri id, String caption, int state, int flags) { if (id == null) throw new IllegalArgumentException("id is required"); if (caption == null) throw new IllegalArgumentException("caption is required"); + if (!isValidState(state)) throw new IllegalArgumentException("state is invalid: " + state); this.id = id; this.caption = caption; this.state = state; @@ -48,17 +56,21 @@ public class Condition implements Parcelable { } private Condition(Parcel source) { - id = Uri.CREATOR.createFromParcel(source); - caption = source.readString(); - state = source.readInt() == 1; - flags = source.readInt(); + this((Uri)source.readParcelable(Condition.class.getClassLoader()), + source.readString(), + source.readInt(), + source.readInt()); + } + + private static boolean isValidState(int state) { + return state >= STATE_FALSE && state <= STATE_ERROR; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeParcelable(id, 0); dest.writeString(caption); - dest.writeInt(state ? 1 : 0); + dest.writeInt(state); dest.writeInt(flags); } @@ -67,11 +79,19 @@ public class Condition implements Parcelable { return new StringBuilder(Condition.class.getSimpleName()).append('[') .append("id=").append(id) .append(",caption=").append(caption) - .append(",state=").append(state) + .append(",state=").append(stateToString(state)) .append(",flags=").append(flags) .append(']').toString(); } + public static String stateToString(int state) { + if (state == STATE_FALSE) return "STATE_FALSE"; + if (state == STATE_TRUE) return "STATE_TRUE"; + if (state == STATE_UNKNOWN) return "STATE_UNKNOWN"; + if (state == STATE_ERROR) return "STATE_ERROR"; + throw new IllegalArgumentException("state is invalid: " + state); + } + @Override public boolean equals(Object o) { if (!(o instanceof Condition)) return false; @@ -104,6 +124,14 @@ public class Condition implements Parcelable { } } + public static Uri.Builder newId(Context context) { + return new Uri.Builder().scheme(SCHEME).authority(context.getPackageName()); + } + + public static boolean isValidId(Uri id, String pkg) { + return id != null && id.getScheme().equals(SCHEME) && id.getAuthority().equals(pkg); + } + public static final Parcelable.Creator<Condition> CREATOR = new Parcelable.Creator<Condition>() { @Override diff --git a/core/java/android/service/notification/ConditionProviderService.java b/core/java/android/service/notification/ConditionProviderService.java index 8777e500b719..70d474eb353f 100644 --- a/core/java/android/service/notification/ConditionProviderService.java +++ b/core/java/android/service/notification/ConditionProviderService.java @@ -56,11 +56,10 @@ public abstract class ConditionProviderService extends Service { public static final String SERVICE_INTERFACE = "android.service.notification.ConditionProviderService"; - - abstract public Condition[] queryConditions(int relevance); - abstract public Condition[] getConditions(Uri[] conditionIds); - abstract public boolean subscribe(Uri conditionId); - abstract public boolean unsubscribe(Uri conditionId); + abstract public void onConnected(); + abstract public void onRequestConditions(int relevance); + abstract public void onSubscribe(Uri conditionId); + abstract public void onUnsubscribe(Uri conditionId); private final INotificationManager getNotificationInterface() { if (mNoMan == null) { @@ -70,10 +69,10 @@ public abstract class ConditionProviderService extends Service { return mNoMan; } - public final void notifyCondition(Condition condition) { + public final void notifyConditions(Condition[] conditions) { if (!isBound()) return; try { - getNotificationInterface().notifyCondition(mProvider, condition); + getNotificationInterface().notifyConditions(getPackageName(), mProvider, conditions); } catch (android.os.RemoteException ex) { Log.v(TAG, "Unable to contact notification manager", ex); } @@ -99,42 +98,38 @@ public abstract class ConditionProviderService extends Service { private final ConditionProviderService mService = ConditionProviderService.this; @Override - public Condition[] queryConditions(int relevance) { + public void onConnected() { try { - return mService.queryConditions(relevance); + mService.onConnected(); } catch (Throwable t) { - Log.w(TAG, "Error running queryConditions", t); - return null; + Log.w(TAG, "Error running onConnected", t); } } @Override - public Condition[] getConditions(Uri[] conditionIds) { + public void onRequestConditions(int relevance) { try { - return mService.getConditions(conditionIds); + mService.onRequestConditions(relevance); } catch (Throwable t) { - Log.w(TAG, "Error running getConditions", t); - return null; + Log.w(TAG, "Error running onRequestConditions", t); } } @Override - public boolean subscribe(Uri conditionId) { + public void onSubscribe(Uri conditionId) { try { - return mService.subscribe(conditionId); + mService.onSubscribe(conditionId); } catch (Throwable t) { - Log.w(TAG, "Error running subscribe", t); - return false; + Log.w(TAG, "Error running onSubscribe", t); } } @Override - public boolean unsubscribe(Uri conditionId) { + public void onUnsubscribe(Uri conditionId) { try { - return mService.unsubscribe(conditionId); + mService.onUnsubscribe(conditionId); } catch (Throwable t) { - Log.w(TAG, "Error running unsubscribe", t); - return false; + Log.w(TAG, "Error running onUnsubscribe", t); } } } diff --git a/core/java/android/service/notification/IConditionListener.aidl b/core/java/android/service/notification/IConditionListener.aidl new file mode 100644 index 000000000000..01f874f2012e --- /dev/null +++ b/core/java/android/service/notification/IConditionListener.aidl @@ -0,0 +1,25 @@ +/** + * Copyright (c) 2014, 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 android.service.notification; + +import android.net.Uri; +import android.service.notification.Condition; + +/** @hide */ +oneway interface IConditionListener { + void onConditionsReceived(in Condition[] conditions); +}
\ No newline at end of file diff --git a/core/java/android/service/notification/IConditionProvider.aidl b/core/java/android/service/notification/IConditionProvider.aidl index cb582daa261e..ada8939b01f2 100644 --- a/core/java/android/service/notification/IConditionProvider.aidl +++ b/core/java/android/service/notification/IConditionProvider.aidl @@ -20,9 +20,9 @@ import android.net.Uri; import android.service.notification.Condition; /** @hide */ -interface IConditionProvider { - Condition[] queryConditions(int relevance); - Condition[] getConditions(in Uri[] conditionIds); - boolean subscribe(in Uri conditionId); - boolean unsubscribe(in Uri conditionId); +oneway interface IConditionProvider { + void onConnected(); + void onRequestConditions(int relevance); + void onSubscribe(in Uri conditionId); + void onUnsubscribe(in Uri conditionId); }
\ No newline at end of file |
