diff --git a/api/system-current.txt b/api/system-current.txt index 27f730075ab4b..e656f0c129aec 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -3664,7 +3664,7 @@ package android.media.session { } public final class MediaSessionEngine implements java.lang.AutoCloseable { - ctor public MediaSessionEngine(@NonNull android.content.Context, @NonNull android.media.session.SessionLink, @NonNull android.media.session.SessionCallbackLink, @NonNull android.media.session.MediaSessionEngine.CallbackStub); + ctor public MediaSessionEngine(@NonNull android.content.Context, @NonNull android.media.session.SessionLink, @NonNull android.media.session.SessionCallbackLink); method public void close(); method public String getCallingPackage(); method @NonNull public android.media.session.MediaController getController(); @@ -3689,33 +3689,6 @@ package android.media.session { method public void setSessionActivity(@Nullable android.app.PendingIntent); } - public static final class MediaSessionEngine.CallbackStub { - ctor public MediaSessionEngine.CallbackStub(); - method public void onAdjustVolume(String, int, int, android.media.session.ControllerCallbackLink, int); - method public void onCommand(String, int, int, android.media.session.ControllerCallbackLink, String, android.os.Bundle, android.os.ResultReceiver); - method public void onCustomAction(String, int, int, android.media.session.ControllerCallbackLink, String, android.os.Bundle); - method public void onFastForward(String, int, int, android.media.session.ControllerCallbackLink); - method public void onMediaButton(String, int, int, android.content.Intent, int, android.os.ResultReceiver); - method public void onMediaButtonFromController(String, int, int, android.media.session.ControllerCallbackLink, android.content.Intent); - method public void onNext(String, int, int, android.media.session.ControllerCallbackLink); - method public void onPause(String, int, int, android.media.session.ControllerCallbackLink); - method public void onPlay(String, int, int, android.media.session.ControllerCallbackLink); - method public void onPlayFromMediaId(String, int, int, android.media.session.ControllerCallbackLink, String, android.os.Bundle); - method public void onPlayFromSearch(String, int, int, android.media.session.ControllerCallbackLink, String, android.os.Bundle); - method public void onPlayFromUri(String, int, int, android.media.session.ControllerCallbackLink, android.net.Uri, android.os.Bundle); - method public void onPrepare(String, int, int, android.media.session.ControllerCallbackLink); - method public void onPrepareFromMediaId(String, int, int, android.media.session.ControllerCallbackLink, String, android.os.Bundle); - method public void onPrepareFromSearch(String, int, int, android.media.session.ControllerCallbackLink, String, android.os.Bundle); - method public void onPrepareFromUri(String, int, int, android.media.session.ControllerCallbackLink, android.net.Uri, android.os.Bundle); - method public void onPrevious(String, int, int, android.media.session.ControllerCallbackLink); - method public void onRate(String, int, int, android.media.session.ControllerCallbackLink, android.media.Rating); - method public void onRewind(String, int, int, android.media.session.ControllerCallbackLink); - method public void onSeekTo(String, int, int, android.media.session.ControllerCallbackLink, long); - method public void onSetVolumeTo(String, int, int, android.media.session.ControllerCallbackLink, int); - method public void onSkipToTrack(String, int, int, android.media.session.ControllerCallbackLink, long); - method public void onStop(String, int, int, android.media.session.ControllerCallbackLink); - } - public static interface MediaSessionEngine.MediaButtonEventDelegate { method public boolean onMediaButtonIntent(android.content.Intent); } diff --git a/media/apex/java/android/media/session/MediaSessionEngine.java b/media/apex/java/android/media/session/MediaSessionEngine.java index 31714e1bde7f2..7fea90dd0c43a 100644 --- a/media/apex/java/android/media/session/MediaSessionEngine.java +++ b/media/apex/java/android/media/session/MediaSessionEngine.java @@ -19,7 +19,6 @@ package android.media.session; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SystemApi; -import android.annotation.UnsupportedAppUsage; import android.app.Activity; import android.app.PendingIntent; import android.content.Context; @@ -44,7 +43,6 @@ import android.util.Pair; import android.view.KeyEvent; import android.view.ViewConfiguration; -import java.lang.ref.WeakReference; import java.util.List; import java.util.Objects; @@ -60,10 +58,7 @@ public final class MediaSessionEngine implements AutoCloseable { private final MediaSession.Token mSessionToken; private final MediaController mController; private final SessionLink mSessionLink; - private final SessionCallbackLink mCbLink; - // Do not change the name of mCallbackWrapper. Support lib accesses this by using reflection. - @UnsupportedAppUsage private CallbackMessageHandler mCallbackHandler; private VolumeProvider mVolumeProvider; private PlaybackState mPlaybackState; @@ -78,14 +73,12 @@ public final class MediaSessionEngine implements AutoCloseable { * * @param context The context to use to create the session. * @param sessionLink A session link for the binder of MediaSessionRecord - * @param cbStub A callback link that handles incoming command to {@link MediaSession.Callback}. */ public MediaSessionEngine(@NonNull Context context, @NonNull SessionLink sessionLink, - @NonNull SessionCallbackLink cbLink, @NonNull CallbackStub cbStub) { + @NonNull SessionCallbackLink cbLink) { mSessionLink = sessionLink; - mCbLink = cbLink; - cbStub.setSessionImpl(this); + cbLink.setSessionEngine(this); mSessionToken = new MediaSession.Token(mSessionLink.getController()); mController = new MediaController(context, mSessionToken); } @@ -479,97 +472,97 @@ public final class MediaSessionEngine implements AutoCloseable { } } - private void dispatchPrepare(RemoteUserInfo caller) { + void dispatchPrepare(RemoteUserInfo caller) { postToCallback(caller, CallbackMessageHandler.MSG_PREPARE, null, null); } - private void dispatchPrepareFromMediaId(RemoteUserInfo caller, String mediaId, Bundle extras) { + void dispatchPrepareFromMediaId(RemoteUserInfo caller, String mediaId, Bundle extras) { postToCallback(caller, CallbackMessageHandler.MSG_PREPARE_MEDIA_ID, mediaId, extras); } - private void dispatchPrepareFromSearch(RemoteUserInfo caller, String query, Bundle extras) { + void dispatchPrepareFromSearch(RemoteUserInfo caller, String query, Bundle extras) { postToCallback(caller, CallbackMessageHandler.MSG_PREPARE_SEARCH, query, extras); } - private void dispatchPrepareFromUri(RemoteUserInfo caller, Uri uri, Bundle extras) { + void dispatchPrepareFromUri(RemoteUserInfo caller, Uri uri, Bundle extras) { postToCallback(caller, CallbackMessageHandler.MSG_PREPARE_URI, uri, extras); } - private void dispatchPlay(RemoteUserInfo caller) { + void dispatchPlay(RemoteUserInfo caller) { postToCallback(caller, CallbackMessageHandler.MSG_PLAY, null, null); } - private void dispatchPlayFromMediaId(RemoteUserInfo caller, String mediaId, Bundle extras) { + void dispatchPlayFromMediaId(RemoteUserInfo caller, String mediaId, Bundle extras) { postToCallback(caller, CallbackMessageHandler.MSG_PLAY_MEDIA_ID, mediaId, extras); } - private void dispatchPlayFromSearch(RemoteUserInfo caller, String query, Bundle extras) { + void dispatchPlayFromSearch(RemoteUserInfo caller, String query, Bundle extras) { postToCallback(caller, CallbackMessageHandler.MSG_PLAY_SEARCH, query, extras); } - private void dispatchPlayFromUri(RemoteUserInfo caller, Uri uri, Bundle extras) { + void dispatchPlayFromUri(RemoteUserInfo caller, Uri uri, Bundle extras) { postToCallback(caller, CallbackMessageHandler.MSG_PLAY_URI, uri, extras); } - private void dispatchSkipToItem(RemoteUserInfo caller, long id) { + void dispatchSkipToItem(RemoteUserInfo caller, long id) { postToCallback(caller, CallbackMessageHandler.MSG_SKIP_TO_ITEM, id, null); } - private void dispatchPause(RemoteUserInfo caller) { + void dispatchPause(RemoteUserInfo caller) { postToCallback(caller, CallbackMessageHandler.MSG_PAUSE, null, null); } - private void dispatchStop(RemoteUserInfo caller) { + void dispatchStop(RemoteUserInfo caller) { postToCallback(caller, CallbackMessageHandler.MSG_STOP, null, null); } - private void dispatchNext(RemoteUserInfo caller) { + void dispatchNext(RemoteUserInfo caller) { postToCallback(caller, CallbackMessageHandler.MSG_NEXT, null, null); } - private void dispatchPrevious(RemoteUserInfo caller) { + void dispatchPrevious(RemoteUserInfo caller) { postToCallback(caller, CallbackMessageHandler.MSG_PREVIOUS, null, null); } - private void dispatchFastForward(RemoteUserInfo caller) { + void dispatchFastForward(RemoteUserInfo caller) { postToCallback(caller, CallbackMessageHandler.MSG_FAST_FORWARD, null, null); } - private void dispatchRewind(RemoteUserInfo caller) { + void dispatchRewind(RemoteUserInfo caller) { postToCallback(caller, CallbackMessageHandler.MSG_REWIND, null, null); } - private void dispatchSeekTo(RemoteUserInfo caller, long pos) { + void dispatchSeekTo(RemoteUserInfo caller, long pos) { postToCallback(caller, CallbackMessageHandler.MSG_SEEK_TO, pos, null); } - private void dispatchRate(RemoteUserInfo caller, Rating rating) { + void dispatchRate(RemoteUserInfo caller, Rating rating) { postToCallback(caller, CallbackMessageHandler.MSG_RATE, rating, null); } - private void dispatchCustomAction(RemoteUserInfo caller, String action, Bundle args) { + void dispatchCustomAction(RemoteUserInfo caller, String action, Bundle args) { postToCallback(caller, CallbackMessageHandler.MSG_CUSTOM_ACTION, action, args); } - private void dispatchMediaButton(RemoteUserInfo caller, Intent mediaButtonIntent) { + void dispatchMediaButton(RemoteUserInfo caller, Intent mediaButtonIntent) { postToCallback(caller, CallbackMessageHandler.MSG_MEDIA_BUTTON, mediaButtonIntent, null); } - private void dispatchMediaButtonDelayed(RemoteUserInfo info, Intent mediaButtonIntent, + void dispatchMediaButtonDelayed(RemoteUserInfo info, Intent mediaButtonIntent, long delay) { postToCallbackDelayed(info, CallbackMessageHandler.MSG_PLAY_PAUSE_KEY_DOUBLE_TAP_TIMEOUT, mediaButtonIntent, null, delay); } - private void dispatchAdjustVolume(RemoteUserInfo caller, int direction) { + void dispatchAdjustVolume(RemoteUserInfo caller, int direction) { postToCallback(caller, CallbackMessageHandler.MSG_ADJUST_VOLUME, direction, null); } - private void dispatchSetVolumeTo(RemoteUserInfo caller, int volume) { + void dispatchSetVolumeTo(RemoteUserInfo caller, int volume) { postToCallback(caller, CallbackMessageHandler.MSG_SET_VOLUME, volume, null); } - private void dispatchCommand(RemoteUserInfo caller, String command, Bundle args, + void dispatchCommand(RemoteUserInfo caller, String command, Bundle args, ResultReceiver resultCb) { Command cmd = new Command(command, args, resultCb); postToCallback(caller, CallbackMessageHandler.MSG_COMMAND, cmd, null); @@ -979,259 +972,7 @@ public final class MediaSessionEngine implements AutoCloseable { } } - /** - * @hide - */ - @SystemApi - public static final class CallbackStub extends SessionCallbackLink.CallbackStub { - private WeakReference mSessionImpl; - - private static RemoteUserInfo createRemoteUserInfo(String packageName, int pid, int uid) { - return new RemoteUserInfo(packageName, pid, uid); - } - - public CallbackStub() { - } - - @Override - public void onCommand(String packageName, int pid, int uid, - ControllerCallbackLink caller, String command, Bundle args, ResultReceiver cb) { - MediaSessionEngine sessionImpl = mSessionImpl.get(); - if (sessionImpl != null) { - sessionImpl.dispatchCommand(createRemoteUserInfo(packageName, pid, uid), - command, args, cb); - } - } - - @Override - public void onMediaButton(String packageName, int pid, int uid, Intent mediaButtonIntent, - int sequenceNumber, ResultReceiver cb) { - MediaSessionEngine sessionImpl = mSessionImpl.get(); - try { - if (sessionImpl != null) { - sessionImpl.dispatchMediaButton( - createRemoteUserInfo(packageName, pid, uid), mediaButtonIntent); - } - } finally { - if (cb != null) { - cb.send(sequenceNumber, null); - } - } - } - - @Override - public void onMediaButtonFromController(String packageName, int pid, int uid, - ControllerCallbackLink caller, Intent mediaButtonIntent) { - MediaSessionEngine sessionImpl = mSessionImpl.get(); - if (sessionImpl != null) { - sessionImpl.dispatchMediaButton(createRemoteUserInfo(packageName, pid, uid), - mediaButtonIntent); - } - } - - @Override - public void onPrepare(String packageName, int pid, int uid, - ControllerCallbackLink caller) { - MediaSessionEngine sessionImpl = mSessionImpl.get(); - if (sessionImpl != null) { - sessionImpl.dispatchPrepare(createRemoteUserInfo(packageName, pid, uid)); - } - } - - @Override - public void onPrepareFromMediaId(String packageName, int pid, int uid, - ControllerCallbackLink caller, String mediaId, - Bundle extras) { - MediaSessionEngine sessionImpl = mSessionImpl.get(); - if (sessionImpl != null) { - sessionImpl.dispatchPrepareFromMediaId( - createRemoteUserInfo(packageName, pid, uid), mediaId, extras); - } - } - - @Override - public void onPrepareFromSearch(String packageName, int pid, int uid, - ControllerCallbackLink caller, String query, - Bundle extras) { - MediaSessionEngine sessionImpl = mSessionImpl.get(); - if (sessionImpl != null) { - sessionImpl.dispatchPrepareFromSearch( - createRemoteUserInfo(packageName, pid, uid), query, extras); - } - } - - @Override - public void onPrepareFromUri(String packageName, int pid, int uid, - ControllerCallbackLink caller, Uri uri, Bundle extras) { - MediaSessionEngine sessionImpl = mSessionImpl.get(); - if (sessionImpl != null) { - sessionImpl.dispatchPrepareFromUri( - createRemoteUserInfo(packageName, pid, uid), uri, extras); - } - } - - @Override - public void onPlay(String packageName, int pid, int uid, - ControllerCallbackLink caller) { - MediaSessionEngine sessionImpl = mSessionImpl.get(); - if (sessionImpl != null) { - sessionImpl.dispatchPlay(createRemoteUserInfo(packageName, pid, uid)); - } - } - - @Override - public void onPlayFromMediaId(String packageName, int pid, int uid, - ControllerCallbackLink caller, String mediaId, - Bundle extras) { - MediaSessionEngine sessionImpl = mSessionImpl.get(); - if (sessionImpl != null) { - sessionImpl.dispatchPlayFromMediaId( - createRemoteUserInfo(packageName, pid, uid), mediaId, extras); - } - } - - @Override - public void onPlayFromSearch(String packageName, int pid, int uid, - ControllerCallbackLink caller, String query, - Bundle extras) { - MediaSessionEngine sessionImpl = mSessionImpl.get(); - if (sessionImpl != null) { - sessionImpl.dispatchPlayFromSearch( - createRemoteUserInfo(packageName, pid, uid), query, extras); - } - } - - @Override - public void onPlayFromUri(String packageName, int pid, int uid, - ControllerCallbackLink caller, Uri uri, Bundle extras) { - MediaSessionEngine sessionImpl = mSessionImpl.get(); - if (sessionImpl != null) { - sessionImpl.dispatchPlayFromUri( - createRemoteUserInfo(packageName, pid, uid), uri, extras); - } - } - - @Override - public void onSkipToTrack(String packageName, int pid, int uid, - ControllerCallbackLink caller, long id) { - MediaSessionEngine sessionImpl = mSessionImpl.get(); - if (sessionImpl != null) { - sessionImpl.dispatchSkipToItem( - createRemoteUserInfo(packageName, pid, uid), id); - } - } - - @Override - public void onPause(String packageName, int pid, int uid, - ControllerCallbackLink caller) { - MediaSessionEngine sessionImpl = mSessionImpl.get(); - if (sessionImpl != null) { - sessionImpl.dispatchPause(createRemoteUserInfo(packageName, pid, uid)); - } - } - - @Override - public void onStop(String packageName, int pid, int uid, - ControllerCallbackLink caller) { - MediaSessionEngine sessionImpl = mSessionImpl.get(); - if (sessionImpl != null) { - sessionImpl.dispatchStop(createRemoteUserInfo(packageName, pid, uid)); - } - } - - @Override - public void onNext(String packageName, int pid, int uid, - ControllerCallbackLink caller) { - MediaSessionEngine sessionImpl = mSessionImpl.get(); - if (sessionImpl != null) { - sessionImpl.dispatchNext(createRemoteUserInfo(packageName, pid, uid)); - } - } - - @Override - public void onPrevious(String packageName, int pid, int uid, - ControllerCallbackLink caller) { - MediaSessionEngine sessionImpl = mSessionImpl.get(); - if (sessionImpl != null) { - sessionImpl.dispatchPrevious(createRemoteUserInfo(packageName, pid, uid)); - } - } - - @Override - public void onFastForward(String packageName, int pid, int uid, - ControllerCallbackLink caller) { - MediaSessionEngine sessionImpl = mSessionImpl.get(); - if (sessionImpl != null) { - sessionImpl.dispatchFastForward( - createRemoteUserInfo(packageName, pid, uid)); - } - } - - @Override - public void onRewind(String packageName, int pid, int uid, - ControllerCallbackLink caller) { - MediaSessionEngine sessionImpl = mSessionImpl.get(); - if (sessionImpl != null) { - sessionImpl.dispatchRewind(createRemoteUserInfo(packageName, pid, uid)); - } - } - - @Override - public void onSeekTo(String packageName, int pid, int uid, - ControllerCallbackLink caller, long pos) { - MediaSessionEngine sessionImpl = mSessionImpl.get(); - if (sessionImpl != null) { - sessionImpl.dispatchSeekTo( - createRemoteUserInfo(packageName, pid, uid), pos); - } - } - - @Override - public void onRate(String packageName, int pid, int uid, ControllerCallbackLink caller, - Rating rating) { - MediaSessionEngine sessionImpl = mSessionImpl.get(); - if (sessionImpl != null) { - sessionImpl.dispatchRate( - createRemoteUserInfo(packageName, pid, uid), rating); - } - } - - @Override - public void onCustomAction(String packageName, int pid, int uid, - ControllerCallbackLink caller, String action, Bundle args) { - MediaSessionEngine sessionImpl = mSessionImpl.get(); - if (sessionImpl != null) { - sessionImpl.dispatchCustomAction( - createRemoteUserInfo(packageName, pid, uid), action, args); - } - } - - @Override - public void onAdjustVolume(String packageName, int pid, int uid, - ControllerCallbackLink caller, int direction) { - MediaSessionEngine sessionImpl = mSessionImpl.get(); - if (sessionImpl != null) { - sessionImpl.dispatchAdjustVolume( - createRemoteUserInfo(packageName, pid, uid), direction); - } - } - - @Override - public void onSetVolumeTo(String packageName, int pid, int uid, - ControllerCallbackLink caller, int value) { - MediaSessionEngine sessionImpl = mSessionImpl.get(); - if (sessionImpl != null) { - sessionImpl.dispatchSetVolumeTo( - createRemoteUserInfo(packageName, pid, uid), value); - } - } - - void setSessionImpl(MediaSessionEngine sessionImpl) { - mSessionImpl = new WeakReference<>(sessionImpl); - } - } - - /** + /** * A single item that is part of the play queue. It contains a description * of the item and its id in the queue. */ diff --git a/media/apex/java/android/media/session/SessionCallbackLink.java b/media/apex/java/android/media/session/SessionCallbackLink.java index 3bcb65c420106..4c2918a0fa948 100644 --- a/media/apex/java/android/media/session/SessionCallbackLink.java +++ b/media/apex/java/android/media/session/SessionCallbackLink.java @@ -25,6 +25,7 @@ import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.media.Rating; +import android.media.session.MediaSessionManager.RemoteUserInfo; import android.net.Uri; import android.os.Binder; import android.os.Bundle; @@ -35,6 +36,8 @@ import android.os.Process; import android.os.RemoteException; import android.os.ResultReceiver; +import java.lang.ref.WeakReference; + /** * Handles incoming commands to {@link MediaSession.Callback}. * @hide @@ -42,16 +45,15 @@ import android.os.ResultReceiver; @SystemApi public final class SessionCallbackLink implements Parcelable { final Context mContext; - final CallbackStub mCallbackStub; final ISessionCallback mISessionCallback; /** * Constructor for stub (Callee) + * @hide */ - SessionCallbackLink(@NonNull Context context, @NonNull CallbackStub callbackStub) { + public SessionCallbackLink(@NonNull Context context) { mContext = context; - mCallbackStub = callbackStub; - mISessionCallback = new CallbackStubProxy(); + mISessionCallback = new CallbackStub(); } /** @@ -59,10 +61,18 @@ public final class SessionCallbackLink implements Parcelable { */ public SessionCallbackLink(IBinder binder) { mContext = null; - mCallbackStub = null; mISessionCallback = ISessionCallback.Stub.asInterface(binder); } + /** + * Set {@link MediaSessionEngine} which will be used by {@link CallbackStub}. + */ + void setSessionEngine(@Nullable MediaSessionEngine sessionImpl) { + if (mISessionCallback instanceof CallbackStub) { + ((CallbackStub) mISessionCallback).mSessionImpl = new WeakReference<>(sessionImpl); + } + } + /** * Notify session that a controller sends a command. * @@ -540,139 +550,24 @@ public final class SessionCallbackLink implements Parcelable { } }; - /** - * Class for Stub implementation - */ - abstract static class CallbackStub { - /** Stub method for ISessionCallback.notifyCommand */ - public void onCommand(@NonNull String packageName, int pid, int uid, - @NonNull ControllerCallbackLink caller, @NonNull String command, - @Nullable Bundle args, @Nullable ResultReceiver cb) { + private class CallbackStub extends ISessionCallback.Stub { + private WeakReference mSessionImpl; + + private RemoteUserInfo createRemoteUserInfo(String packageName, int pid, int uid) { + return new RemoteUserInfo(packageName, pid, uid); } - /** Stub method for ISessionCallback.notifyMediaButton */ - public void onMediaButton(@NonNull String packageName, int pid, int uid, - @NonNull Intent mediaButtonIntent, int sequenceNumber, - @Nullable ResultReceiver cb) { - } - - /** Stub method for ISessionCallback.notifyMediaButtonFromController */ - public void onMediaButtonFromController(@NonNull String packageName, int pid, int uid, - @NonNull ControllerCallbackLink caller, @NonNull Intent mediaButtonIntent) { - } - - /** Stub method for ISessionCallback.notifyPrepare */ - public void onPrepare(@NonNull String packageName, int pid, int uid, - @NonNull ControllerCallbackLink caller) { - } - - /** Stub method for ISessionCallback.notifyPrepareFromMediaId */ - public void onPrepareFromMediaId(@NonNull String packageName, int pid, int uid, - @NonNull ControllerCallbackLink caller, @NonNull String mediaId, - @Nullable Bundle extras) { - } - - /** Stub method for ISessionCallback.notifyPrepareFromSearch */ - public void onPrepareFromSearch(@NonNull String packageName, int pid, int uid, - @NonNull ControllerCallbackLink caller, String query, @Nullable Bundle extras) { - } - - /** Stub method for ISessionCallback.notifyPrepareFromUri */ - public void onPrepareFromUri(@NonNull String packageName, int pid, int uid, - @NonNull ControllerCallbackLink caller, @NonNull Uri uri, @Nullable Bundle extras) { - } - - /** Stub method for ISessionCallback.notifyPlay */ - public void onPlay(@NonNull String packageName, int pid, int uid, - @NonNull ControllerCallbackLink caller) { - } - - /** Stub method for ISessionCallback.notifyPlayFromMediaId */ - public void onPlayFromMediaId(@NonNull String packageName, int pid, int uid, - @NonNull ControllerCallbackLink caller, @NonNull String mediaId, - @Nullable Bundle extras) { - } - - /** Stub method for ISessionCallback.notifyPlayFromSearch */ - public void onPlayFromSearch(@NonNull String packageName, int pid, int uid, - @NonNull ControllerCallbackLink caller, String query, @Nullable Bundle extras) { - } - - /** Stub method for ISessionCallback.notifyPlayFromUri */ - public void onPlayFromUri(@NonNull String packageName, int pid, int uid, - @NonNull ControllerCallbackLink caller, @NonNull Uri uri, @Nullable Bundle extras) { - } - - /** Stub method for ISessionCallback.notifySkipToTrack */ - public void onSkipToTrack(@NonNull String packageName, int pid, int uid, - @NonNull ControllerCallbackLink caller, long id) { - } - - /** Stub method for ISessionCallback.notifyPause */ - public void onPause(@NonNull String packageName, int pid, int uid, - @NonNull ControllerCallbackLink caller) { - } - - /** Stub method for ISessionCallback.notifyStop */ - public void onStop(@NonNull String packageName, int pid, int uid, - @NonNull ControllerCallbackLink caller) { - } - - /** Stub method for ISessionCallback.notifyNext */ - public void onNext(@NonNull String packageName, int pid, int uid, - @NonNull ControllerCallbackLink caller) { - } - - /** Stub method for ISessionCallback.notifyPrevious */ - public void onPrevious(@NonNull String packageName, int pid, int uid, - @NonNull ControllerCallbackLink caller) { - } - - /** Stub method for ISessionCallback.notifyFastForward */ - public void onFastForward(@NonNull String packageName, int pid, int uid, - @NonNull ControllerCallbackLink caller) { - } - - /** Stub method for ISessionCallback.notifyRewind */ - public void onRewind(@NonNull String packageName, int pid, int uid, - @NonNull ControllerCallbackLink caller) { - } - - /** Stub method for ISessionCallback.notifySeekTo */ - public void onSeekTo(@NonNull String packageName, int pid, int uid, - @NonNull ControllerCallbackLink caller, long pos) { - } - - /** Stub method for ISessionCallback.notifyRate */ - public void onRate(@NonNull String packageName, int pid, int uid, - @NonNull ControllerCallbackLink caller, @NonNull Rating rating) { - } - - /** Stub method for ISessionCallback.notifyCustomAction */ - public void onCustomAction(@NonNull String packageName, int pid, int uid, - @NonNull ControllerCallbackLink caller, @NonNull String action, - @Nullable Bundle args) { - } - - /** Stub method for ISessionCallback.notifyAdjustVolume */ - public void onAdjustVolume(@NonNull String packageName, int pid, int uid, - @NonNull ControllerCallbackLink caller, int direction) { - } - - /** Stub method for ISessionCallback.notifySetVolumeTo */ - public void onSetVolumeTo(@NonNull String packageName, int pid, int uid, - @NonNull ControllerCallbackLink caller, int value) { - } - } - - private class CallbackStubProxy extends ISessionCallback.Stub { @Override public void notifyCommand(String packageName, int pid, int uid, ControllerCallbackLink caller, String command, Bundle args, ResultReceiver cb) { ensureMediaControlPermission(); final long token = Binder.clearCallingIdentity(); try { - mCallbackStub.onCommand(packageName, pid, uid, caller, command, args, cb); + MediaSessionEngine sessionImpl = mSessionImpl.get(); + if (sessionImpl != null) { + sessionImpl.dispatchCommand(createRemoteUserInfo(packageName, pid, uid), + command, args, cb); + } } finally { Binder.restoreCallingIdentity(token); } @@ -684,9 +579,15 @@ public final class SessionCallbackLink implements Parcelable { ensureMediaControlPermission(); final long token = Binder.clearCallingIdentity(); try { - mCallbackStub.onMediaButton(packageName, pid, uid, mediaButtonIntent, - sequenceNumber, cb); + MediaSessionEngine sessionImpl = mSessionImpl.get(); + if (sessionImpl != null) { + sessionImpl.dispatchMediaButton( + createRemoteUserInfo(packageName, pid, uid), mediaButtonIntent); + } } finally { + if (cb != null) { + cb.send(sequenceNumber, null); + } Binder.restoreCallingIdentity(token); } } @@ -697,8 +598,11 @@ public final class SessionCallbackLink implements Parcelable { ensureMediaControlPermission(); final long token = Binder.clearCallingIdentity(); try { - mCallbackStub.onMediaButtonFromController(packageName, pid, uid, caller, - mediaButtonIntent); + MediaSessionEngine sessionImpl = mSessionImpl.get(); + if (sessionImpl != null) { + sessionImpl.dispatchMediaButton(createRemoteUserInfo(packageName, pid, uid), + mediaButtonIntent); + } } finally { Binder.restoreCallingIdentity(token); } @@ -710,7 +614,10 @@ public final class SessionCallbackLink implements Parcelable { ensureMediaControlPermission(); final long token = Binder.clearCallingIdentity(); try { - mCallbackStub.onPrepare(packageName, pid, uid, caller); + MediaSessionEngine sessionImpl = mSessionImpl.get(); + if (sessionImpl != null) { + sessionImpl.dispatchPrepare(createRemoteUserInfo(packageName, pid, uid)); + } } finally { Binder.restoreCallingIdentity(token); } @@ -722,7 +629,11 @@ public final class SessionCallbackLink implements Parcelable { ensureMediaControlPermission(); final long token = Binder.clearCallingIdentity(); try { - mCallbackStub.onPrepareFromMediaId(packageName, pid, uid, caller, mediaId, extras); + MediaSessionEngine sessionImpl = mSessionImpl.get(); + if (sessionImpl != null) { + sessionImpl.dispatchPrepareFromMediaId( + createRemoteUserInfo(packageName, pid, uid), mediaId, extras); + } } finally { Binder.restoreCallingIdentity(token); } @@ -734,7 +645,11 @@ public final class SessionCallbackLink implements Parcelable { ensureMediaControlPermission(); final long token = Binder.clearCallingIdentity(); try { - mCallbackStub.onPrepareFromSearch(packageName, pid, uid, caller, query, extras); + MediaSessionEngine sessionImpl = mSessionImpl.get(); + if (sessionImpl != null) { + sessionImpl.dispatchPrepareFromSearch( + createRemoteUserInfo(packageName, pid, uid), query, extras); + } } finally { Binder.restoreCallingIdentity(token); } @@ -746,7 +661,11 @@ public final class SessionCallbackLink implements Parcelable { ensureMediaControlPermission(); final long token = Binder.clearCallingIdentity(); try { - mCallbackStub.onPrepareFromUri(packageName, pid, uid, caller, uri, extras); + MediaSessionEngine sessionImpl = mSessionImpl.get(); + if (sessionImpl != null) { + sessionImpl.dispatchPrepareFromUri( + createRemoteUserInfo(packageName, pid, uid), uri, extras); + } } finally { Binder.restoreCallingIdentity(token); } @@ -758,7 +677,10 @@ public final class SessionCallbackLink implements Parcelable { ensureMediaControlPermission(); final long token = Binder.clearCallingIdentity(); try { - mCallbackStub.onPlay(packageName, pid, uid, caller); + MediaSessionEngine sessionImpl = mSessionImpl.get(); + if (sessionImpl != null) { + sessionImpl.dispatchPlay(createRemoteUserInfo(packageName, pid, uid)); + } } finally { Binder.restoreCallingIdentity(token); } @@ -770,7 +692,11 @@ public final class SessionCallbackLink implements Parcelable { ensureMediaControlPermission(); final long token = Binder.clearCallingIdentity(); try { - mCallbackStub.onPlayFromMediaId(packageName, pid, uid, caller, mediaId, extras); + MediaSessionEngine sessionImpl = mSessionImpl.get(); + if (sessionImpl != null) { + sessionImpl.dispatchPlayFromMediaId( + createRemoteUserInfo(packageName, pid, uid), mediaId, extras); + } } finally { Binder.restoreCallingIdentity(token); } @@ -782,7 +708,11 @@ public final class SessionCallbackLink implements Parcelable { ensureMediaControlPermission(); final long token = Binder.clearCallingIdentity(); try { - mCallbackStub.onPlayFromSearch(packageName, pid, uid, caller, query, extras); + MediaSessionEngine sessionImpl = mSessionImpl.get(); + if (sessionImpl != null) { + sessionImpl.dispatchPlayFromSearch( + createRemoteUserInfo(packageName, pid, uid), query, extras); + } } finally { Binder.restoreCallingIdentity(token); } @@ -794,7 +724,11 @@ public final class SessionCallbackLink implements Parcelable { ensureMediaControlPermission(); final long token = Binder.clearCallingIdentity(); try { - mCallbackStub.onPlayFromUri(packageName, pid, uid, caller, uri, extras); + MediaSessionEngine sessionImpl = mSessionImpl.get(); + if (sessionImpl != null) { + sessionImpl.dispatchPlayFromUri( + createRemoteUserInfo(packageName, pid, uid), uri, extras); + } } finally { Binder.restoreCallingIdentity(token); } @@ -806,7 +740,11 @@ public final class SessionCallbackLink implements Parcelable { ensureMediaControlPermission(); final long token = Binder.clearCallingIdentity(); try { - mCallbackStub.onSkipToTrack(packageName, pid, uid, caller, id); + MediaSessionEngine sessionImpl = mSessionImpl.get(); + if (sessionImpl != null) { + sessionImpl.dispatchSkipToItem( + createRemoteUserInfo(packageName, pid, uid), id); + } } finally { Binder.restoreCallingIdentity(token); } @@ -818,7 +756,10 @@ public final class SessionCallbackLink implements Parcelable { ensureMediaControlPermission(); final long token = Binder.clearCallingIdentity(); try { - mCallbackStub.onPause(packageName, pid, uid, caller); + MediaSessionEngine sessionImpl = mSessionImpl.get(); + if (sessionImpl != null) { + sessionImpl.dispatchPause(createRemoteUserInfo(packageName, pid, uid)); + } } finally { Binder.restoreCallingIdentity(token); } @@ -830,7 +771,10 @@ public final class SessionCallbackLink implements Parcelable { ensureMediaControlPermission(); final long token = Binder.clearCallingIdentity(); try { - mCallbackStub.onStop(packageName, pid, uid, caller); + MediaSessionEngine sessionImpl = mSessionImpl.get(); + if (sessionImpl != null) { + sessionImpl.dispatchStop(createRemoteUserInfo(packageName, pid, uid)); + } } finally { Binder.restoreCallingIdentity(token); } @@ -842,7 +786,10 @@ public final class SessionCallbackLink implements Parcelable { ensureMediaControlPermission(); final long token = Binder.clearCallingIdentity(); try { - mCallbackStub.onNext(packageName, pid, uid, caller); + MediaSessionEngine sessionImpl = mSessionImpl.get(); + if (sessionImpl != null) { + sessionImpl.dispatchNext(createRemoteUserInfo(packageName, pid, uid)); + } } finally { Binder.restoreCallingIdentity(token); } @@ -854,7 +801,10 @@ public final class SessionCallbackLink implements Parcelable { ensureMediaControlPermission(); final long token = Binder.clearCallingIdentity(); try { - mCallbackStub.onPrevious(packageName, pid, uid, caller); + MediaSessionEngine sessionImpl = mSessionImpl.get(); + if (sessionImpl != null) { + sessionImpl.dispatchPrevious(createRemoteUserInfo(packageName, pid, uid)); + } } finally { Binder.restoreCallingIdentity(token); } @@ -866,7 +816,11 @@ public final class SessionCallbackLink implements Parcelable { ensureMediaControlPermission(); final long token = Binder.clearCallingIdentity(); try { - mCallbackStub.onFastForward(packageName, pid, uid, caller); + MediaSessionEngine sessionImpl = mSessionImpl.get(); + if (sessionImpl != null) { + sessionImpl.dispatchFastForward( + createRemoteUserInfo(packageName, pid, uid)); + } } finally { Binder.restoreCallingIdentity(token); } @@ -878,7 +832,10 @@ public final class SessionCallbackLink implements Parcelable { ensureMediaControlPermission(); final long token = Binder.clearCallingIdentity(); try { - mCallbackStub.onRewind(packageName, pid, uid, caller); + MediaSessionEngine sessionImpl = mSessionImpl.get(); + if (sessionImpl != null) { + sessionImpl.dispatchRewind(createRemoteUserInfo(packageName, pid, uid)); + } } finally { Binder.restoreCallingIdentity(token); } @@ -890,7 +847,11 @@ public final class SessionCallbackLink implements Parcelable { ensureMediaControlPermission(); final long token = Binder.clearCallingIdentity(); try { - mCallbackStub.onSeekTo(packageName, pid, uid, caller, pos); + MediaSessionEngine sessionImpl = mSessionImpl.get(); + if (sessionImpl != null) { + sessionImpl.dispatchSeekTo( + createRemoteUserInfo(packageName, pid, uid), pos); + } } finally { Binder.restoreCallingIdentity(token); } @@ -902,7 +863,11 @@ public final class SessionCallbackLink implements Parcelable { ensureMediaControlPermission(); final long token = Binder.clearCallingIdentity(); try { - mCallbackStub.onRate(packageName, pid, uid, caller, rating); + MediaSessionEngine sessionImpl = mSessionImpl.get(); + if (sessionImpl != null) { + sessionImpl.dispatchRate( + createRemoteUserInfo(packageName, pid, uid), rating); + } } finally { Binder.restoreCallingIdentity(token); } @@ -913,7 +878,11 @@ public final class SessionCallbackLink implements Parcelable { ensureMediaControlPermission(); final long token = Binder.clearCallingIdentity(); try { - mCallbackStub.onCustomAction(packageName, pid, uid, caller, action, args); + MediaSessionEngine sessionImpl = mSessionImpl.get(); + if (sessionImpl != null) { + sessionImpl.dispatchCustomAction( + createRemoteUserInfo(packageName, pid, uid), action, args); + } } finally { Binder.restoreCallingIdentity(token); } @@ -925,7 +894,11 @@ public final class SessionCallbackLink implements Parcelable { ensureMediaControlPermission(); final long token = Binder.clearCallingIdentity(); try { - mCallbackStub.onAdjustVolume(packageName, pid, uid, caller, direction); + MediaSessionEngine sessionImpl = mSessionImpl.get(); + if (sessionImpl != null) { + sessionImpl.dispatchAdjustVolume( + createRemoteUserInfo(packageName, pid, uid), direction); + } } finally { Binder.restoreCallingIdentity(token); } @@ -937,7 +910,11 @@ public final class SessionCallbackLink implements Parcelable { ensureMediaControlPermission(); final long token = Binder.clearCallingIdentity(); try { - mCallbackStub.onSetVolumeTo(packageName, pid, uid, caller, value); + MediaSessionEngine sessionImpl = mSessionImpl.get(); + if (sessionImpl != null) { + sessionImpl.dispatchSetVolumeTo( + createRemoteUserInfo(packageName, pid, uid), value); + } } finally { Binder.restoreCallingIdentity(token); } diff --git a/media/java/android/media/session/MediaSession.java b/media/java/android/media/session/MediaSession.java index ca3346c9a8c47..03627de9343ca 100644 --- a/media/java/android/media/session/MediaSession.java +++ b/media/java/android/media/session/MediaSession.java @@ -142,10 +142,9 @@ public final class MediaSession { MediaSessionManager manager = (MediaSessionManager) context .getSystemService(Context.MEDIA_SESSION_SERVICE); try { - MediaSessionEngine.CallbackStub cbStub = new MediaSessionEngine.CallbackStub(); - SessionCallbackLink cbLink = new SessionCallbackLink(context, cbStub); + SessionCallbackLink cbLink = new SessionCallbackLink(context); SessionLink sessionLink = manager.createSession(cbLink, tag); - mImpl = new MediaSessionEngine(context, sessionLink, cbLink, cbStub); + mImpl = new MediaSessionEngine(context, sessionLink, cbLink); mMaxBitmapSize = context.getResources().getDimensionPixelSize( android.R.dimen.config_mediaMetadataBitmapMaxSize); } catch (RuntimeException e) {