Remove MediaSessionEngine.CallbackStub

This CL also removes SessionCallbackLink.CallbackStub class
from the system API list.

Bug: 123500993
Test: make update-api -j; make -j;
      atest CtsMediaTestCases:android.media.cts.MediaSessionTest;
      atest CtsMediaTestCases:android.media.cts.MediaControllerTest;
Change-Id: I59b4d4ce058c53c82d816152039c51b109f0c245
This commit is contained in:
Hyundo Moon
2019-01-29 20:19:04 +09:00
parent 0cc58077bb
commit 2a5179df15
4 changed files with 160 additions and 470 deletions

View File

@@ -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);
}

View File

@@ -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<MediaSessionEngine> 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.
*/

View File

@@ -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<MediaSessionEngine> 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);
}

View File

@@ -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) {