From 6e2b01ce75fb1d5647d5d788d8a5644c30cb3068 Mon Sep 17 00:00:00 2001 From: Jaewan Kim Date: Thu, 19 Jan 2017 16:33:14 -0800 Subject: [PATCH] Allow privileged app to set media key event listener If the media key listener is set, the listener will receive the media key events before any other sessions, but after the global priority session. If the event is handled by the listener, other sessions cannot get the event. Privileged app needs permission android.permission.SET_MEDIA_KEY_LISTENER to set the listener. Bug: 30125811 Change-Id: I2b2cf4ac7873b70899194701c6921990dcb9de02 --- Android.mk | 1 + api/system-current.txt | 6 + core/res/AndroidManifest.xml | 8 + .../media/session/IOnMediaKeyListener.aidl | 28 +++ .../media/session/ISessionManager.aidl | 2 + .../media/session/MediaSessionManager.java | 90 +++++++++ .../server/media/MediaSessionService.java | 174 ++++++++++++++---- 7 files changed, 278 insertions(+), 31 deletions(-) create mode 100644 media/java/android/media/session/IOnMediaKeyListener.aidl diff --git a/Android.mk b/Android.mk index fac4d55494439..663f429f5977a 100644 --- a/Android.mk +++ b/Android.mk @@ -423,6 +423,7 @@ LOCAL_SRC_FILES += \ media/java/android/media/projection/IMediaProjectionManager.aidl \ media/java/android/media/projection/IMediaProjectionWatcherCallback.aidl \ media/java/android/media/session/IActiveSessionsListener.aidl \ + media/java/android/media/session/IOnMediaKeyListener.aidl \ media/java/android/media/session/IOnVolumeKeyLongPressListener.aidl \ media/java/android/media/session/ISession.aidl \ media/java/android/media/session/ISessionCallback.aidl \ diff --git a/api/system-current.txt b/api/system-current.txt index 07f2ce5b3876b..b7a537ea24891 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -215,6 +215,7 @@ package android { field public static final java.lang.String SET_ALWAYS_FINISH = "android.permission.SET_ALWAYS_FINISH"; field public static final java.lang.String SET_ANIMATION_SCALE = "android.permission.SET_ANIMATION_SCALE"; field public static final java.lang.String SET_DEBUG_APP = "android.permission.SET_DEBUG_APP"; + field public static final java.lang.String SET_MEDIA_KEY_LISTENER = "android.permission.SET_MEDIA_KEY_LISTENER"; field public static final java.lang.String SET_ORIENTATION = "android.permission.SET_ORIENTATION"; field public static final java.lang.String SET_POINTER_SPEED = "android.permission.SET_POINTER_SPEED"; field public static final deprecated java.lang.String SET_PREFERRED_APPLICATIONS = "android.permission.SET_PREFERRED_APPLICATIONS"; @@ -24820,6 +24821,7 @@ package android.media.session { method public void addOnActiveSessionsChangedListener(android.media.session.MediaSessionManager.OnActiveSessionsChangedListener, android.content.ComponentName, android.os.Handler); method public java.util.List getActiveSessions(android.content.ComponentName); method public void removeOnActiveSessionsChangedListener(android.media.session.MediaSessionManager.OnActiveSessionsChangedListener); + method public void setOnMediaKeyListener(android.media.session.MediaSessionManager.OnMediaKeyListener, android.os.Handler); method public void setOnVolumeKeyLongPressListener(android.media.session.MediaSessionManager.OnVolumeKeyLongPressListener, android.os.Handler); } @@ -24827,6 +24829,10 @@ package android.media.session { method public abstract void onActiveSessionsChanged(java.util.List); } + public static abstract interface MediaSessionManager.OnMediaKeyListener { + method public abstract boolean onMediaKey(android.view.KeyEvent); + } + public static abstract interface MediaSessionManager.OnVolumeKeyLongPressListener { method public abstract void onVolumeKeyLongPress(android.view.KeyEvent); } diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index f7cec81cd6442..b4e3dd26a8d37 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -2632,6 +2632,14 @@ + + +