diff options
author | Chris Wren <cwren@android.com> | 2014-05-14 15:20:51 -0400 |
---|---|---|
committer | Chris Wren <cwren@android.com> | 2014-05-16 11:23:50 -0400 |
commit | 1941fc718690d6b87db68b6a133c71fb470599d0 (patch) | |
tree | 145e3bc13e8d4b328cb6a2348e2001e747487fd4 /core | |
parent | 3242f51c936d804c5308971a8cc10a251f9690fe (diff) | |
download | frameworks_base-1941fc718690d6b87db68b6a133c71fb470599d0.zip frameworks_base-1941fc718690d6b87db68b6a133c71fb470599d0.tar.gz frameworks_base-1941fc718690d6b87db68b6a133c71fb470599d0.tar.bz2 |
Extend NotificationListenerService to support system use cases.
Bug: 14846846
Change-Id: Ic308b2f78c86393304d446c57fd677294e01717c
Diffstat (limited to 'core')
-rw-r--r-- | core/java/android/service/notification/NotificationListenerService.java | 44 |
1 files changed, 41 insertions, 3 deletions
diff --git a/core/java/android/service/notification/NotificationListenerService.java b/core/java/android/service/notification/NotificationListenerService.java index a94f45a..e2e9ff4 100644 --- a/core/java/android/service/notification/NotificationListenerService.java +++ b/core/java/android/service/notification/NotificationListenerService.java @@ -16,9 +16,11 @@ package android.service.notification; +import android.annotation.PrivateApi; import android.annotation.SdkConstant; import android.app.INotificationManager; import android.app.Service; +import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.os.IBinder; @@ -26,9 +28,6 @@ import android.os.RemoteException; import android.os.ServiceManager; import android.util.Log; -import java.util.Comparator; -import java.util.HashMap; - /** * A service that receives calls from the system when new notifications are posted or removed. * <p>To extend this class, you must declare the service in your manifest file with @@ -53,6 +52,9 @@ public abstract class NotificationListenerService extends Service { private INotificationManager mNoMan; + /** Only valid after a successful call to (@link registerAsService}. */ + private int mCurrentUser; + /** * The {@link Intent} that must be declared as handled by the service. */ @@ -267,6 +269,42 @@ public abstract class NotificationListenerService extends Service { return true; } + /** + * Directly register this service with the Notification Manager. + * + * <p>Only system services may use this call. It will fail for non-system callers. + * Apps should ask the user to add their listener in Settings. + * + * @param componentName the component that will consume the notification information + * @param currentUser the user to use as the stream filter + * @hide + */ + @PrivateApi + public void registerAsSystemService(ComponentName componentName, int currentUser) + throws RemoteException { + if (mWrapper == null) { + mWrapper = new INotificationListenerWrapper(); + } + INotificationManager noMan = getNotificationInterface(); + noMan.registerListener(mWrapper, componentName, currentUser); + mCurrentUser = currentUser; + } + + /** + * Directly unregister this service from the Notification Manager. + * + * <P>This method will fail for listeners that were not registered + * with (@link registerAsService). + * @hide + */ + @PrivateApi + public void unregisterAsSystemService() throws RemoteException { + if (mWrapper != null) { + INotificationManager noMan = getNotificationInterface(); + noMan.unregisterListener(mWrapper, mCurrentUser); + } + } + private class INotificationListenerWrapper extends INotificationListener.Stub { @Override public void onNotificationPosted(StatusBarNotification sbn, |