From 51fa6bcb22a52b283f6d0756d286101f0d354f54 Mon Sep 17 00:00:00 2001 From: RoboErik Date: Fri, 20 Jun 2014 14:59:58 -0700 Subject: [PATCH] b/15757378 Expose APIs for listening to active sessions This allows apps that are registered notification listeners to listen to the set of active sessions. Change-Id: I1e108951a5049d138208e88b155c0ec9b95fbdb0 --- api/current.txt | 7 +++++++ .../java/android/media/RemoteController.java | 7 ++++--- .../media/session/MediaSessionManager.java | 21 ++++++++++++++++--- .../server/media/MediaSessionService.java | 3 +++ 4 files changed, 32 insertions(+), 6 deletions(-) diff --git a/api/current.txt b/api/current.txt index 6a8b2be9d8add..08691663a2445 100644 --- a/api/current.txt +++ b/api/current.txt @@ -15829,7 +15829,14 @@ package android.media.session { } public final class MediaSessionManager { + method public void addActiveSessionsListener(android.media.session.MediaSessionManager.SessionListener, android.content.ComponentName); method public android.media.session.MediaSession createSession(java.lang.String); + method public java.util.List getActiveSessions(android.content.ComponentName); + } + + public static abstract class MediaSessionManager.SessionListener { + ctor public MediaSessionManager.SessionListener(); + method public abstract void onActiveSessionsChanged(java.util.List); } public final class MediaSessionToken implements android.os.Parcelable { diff --git a/media/java/android/media/RemoteController.java b/media/java/android/media/RemoteController.java index be9639814346d..1f5b216983448 100644 --- a/media/java/android/media/RemoteController.java +++ b/media/java/android/media/RemoteController.java @@ -35,6 +35,7 @@ import android.os.Handler; import android.os.Looper; import android.os.Message; import android.os.SystemClock; +import android.os.UserHandle; import android.util.DisplayMetrics; import android.util.Log; import android.view.KeyEvent; @@ -793,12 +794,12 @@ public final class RemoteController final ComponentName listenerComponent = new ComponentName(mContext, mOnClientUpdateListener.getClass()); mSessionManager.addActiveSessionsListener(mSessionListener, listenerComponent, - ActivityManager.getCurrentUser()); + UserHandle.myUserId()); mSessionListener.onActiveSessionsChanged(mSessionManager .getActiveSessions(listenerComponent)); if (DEBUG) { Log.d(TAG, "Registered session listener with component " + listenerComponent - + " for user " + ActivityManager.getCurrentUser()); + + " for user " + UserHandle.myUserId()); } } @@ -809,7 +810,7 @@ public final class RemoteController mSessionManager.removeActiveSessionsListener(mSessionListener); if (DEBUG) { Log.d(TAG, "Unregistered session listener for user " - + ActivityManager.getCurrentUser()); + + UserHandle.myUserId()); } } diff --git a/media/java/android/media/session/MediaSessionManager.java b/media/java/android/media/session/MediaSessionManager.java index 2e6b86ea322b5..1ff49d86038b9 100644 --- a/media/java/android/media/session/MediaSessionManager.java +++ b/media/java/android/media/session/MediaSessionManager.java @@ -109,7 +109,6 @@ public final class MediaSessionManager { * @param notificationListener The enabled notification listener component. * May be null. * @return A list of controllers for ongoing sessions - * @hide */ public List getActiveSessions(ComponentName notificationListener) { return getActiveSessionsForUser(notificationListener, UserHandle.myUserId()); @@ -145,6 +144,24 @@ public final class MediaSessionManager { return controllers; } + /** + * Add a listener to be notified when the list of active sessions + * changes.This requires the + * android.Manifest.permission.MEDIA_CONTENT_CONTROL permission be held by + * the calling app. You may also retrieve this list if your app is an + * enabled notification listener using the + * {@link NotificationListenerService} APIs, in which case you must pass the + * {@link ComponentName} of your enabled listener. + * + * @param sessionListener The listener to add. + * @param notificationListener The enabled notification listener component. + * May be null. + */ + public void addActiveSessionsListener(SessionListener sessionListener, + ComponentName notificationListener) { + addActiveSessionsListener(sessionListener, notificationListener, UserHandle.myUserId()); + } + /** * Add a listener to be notified when the list of active sessions * changes.This requires the @@ -236,8 +253,6 @@ public final class MediaSessionManager { /** * Listens for changes to the list of active sessions. This can be added * using {@link #addActiveSessionsListener}. - * - * @hide */ public static abstract class SessionListener { /** diff --git a/services/core/java/com/android/server/media/MediaSessionService.java b/services/core/java/com/android/server/media/MediaSessionService.java index 685717f0fe676..c0b7d68a25898 100644 --- a/services/core/java/com/android/server/media/MediaSessionService.java +++ b/services/core/java/com/android/server/media/MediaSessionService.java @@ -383,6 +383,9 @@ public class MediaSessionService extends SystemService implements Monitor { // You may not access another user's content as an enabled listener. return false; } + if (DEBUG) { + Log.d(TAG, "Checking if enabled notification listener " + compName); + } if (compName != null) { final String enabledNotifListeners = Settings.Secure.getStringForUser(mContentResolver, Settings.Secure.ENABLED_NOTIFICATION_LISTENERS,