diff --git a/media/java/android/media/session/ControllerCallbackLink.aidl b/media/java/android/media/session/ControllerCallbackLink.aidl deleted file mode 100644 index 8ee8c7d001483..0000000000000 --- a/media/java/android/media/session/ControllerCallbackLink.aidl +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package android.media.session; - -parcelable ControllerCallbackLink; diff --git a/media/java/android/media/session/ControllerCallbackLink.java b/media/java/android/media/session/ControllerCallbackLink.java deleted file mode 100644 index 67d849a132b56..0000000000000 --- a/media/java/android/media/session/ControllerCallbackLink.java +++ /dev/null @@ -1,327 +0,0 @@ -/* - * Copyright 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.media.session; - -import android.Manifest; -import android.annotation.NonNull; -import android.annotation.Nullable; -import android.annotation.RequiresPermission; -import android.content.Context; -import android.content.pm.PackageManager; -import android.media.MediaMetadata; -import android.media.MediaParceledListSlice; -import android.media.session.MediaController.PlaybackInfo; -import android.media.session.MediaSession.QueueItem; -import android.os.Binder; -import android.os.Bundle; -import android.os.IBinder; -import android.os.Parcel; -import android.os.Parcelable; -import android.os.Process; -import android.os.RemoteException; - -import java.util.List; - -/** - * Handles incoming commands to {@link MediaController.Callback}. - * @hide - */ -public final class ControllerCallbackLink implements Parcelable { - final Context mContext; - final CallbackStub mCallbackStub; - final ISessionControllerCallback mIControllerCallback; - - /** - * Constructor for stub (Callee) - */ - public ControllerCallbackLink(@NonNull Context context, @NonNull CallbackStub callbackStub) { - mContext = context; - mCallbackStub = callbackStub; - mIControllerCallback = new CallbackStubProxy(); - } - - /** - * Constructor for interface (Caller) - */ - public ControllerCallbackLink(IBinder binder) { - mContext = null; - mCallbackStub = null; - mIControllerCallback = ISessionControllerCallback.Stub.asInterface(binder); - } - - /** - * Notify controller that the connected session is destroyed. - */ - @RequiresPermission(Manifest.permission.MEDIA_CONTENT_CONTROL) - public void notifySessionDestroyed() { - try { - mIControllerCallback.notifySessionDestroyed(); - } catch (RemoteException e) { - throw new RuntimeException(e); - } - } - - /** - * Notify controller that the connected session sends an event. - * - * @param event the name of the event - * @param extras the extras included with the event - */ - @RequiresPermission(Manifest.permission.MEDIA_CONTENT_CONTROL) - public void notifyEvent(@NonNull String event, @Nullable Bundle extras) { - try { - mIControllerCallback.notifyEvent(event, extras); - } catch (RemoteException e) { - throw new RuntimeException(e); - } - } - - /** - * Notify controller that the current playback state is changed. - * - * @param state the new playback state - */ - @RequiresPermission(Manifest.permission.MEDIA_CONTENT_CONTROL) - public void notifyPlaybackStateChanged(@Nullable PlaybackState state) { - try { - mIControllerCallback.notifyPlaybackStateChanged(state); - } catch (RemoteException e) { - throw new RuntimeException(e); - } - } - - /** - * Notify controller that the current metadata is changed. - * - * @param metadata the new metadata - */ - @RequiresPermission(Manifest.permission.MEDIA_CONTENT_CONTROL) - public void notifyMetadataChanged(@Nullable MediaMetadata metadata) { - try { - mIControllerCallback.notifyMetadataChanged(metadata); - } catch (RemoteException e) { - throw new RuntimeException(e); - } - } - - /** - * Notify controller that the current queue is changed. - * - * @param queue the new queue - */ - @RequiresPermission(Manifest.permission.MEDIA_CONTENT_CONTROL) - public void notifyQueueChanged(@Nullable List queue) { - try { - mIControllerCallback.notifyQueueChanged(queue == null ? null : - new MediaParceledListSlice(queue)); - } catch (RemoteException e) { - throw new RuntimeException(e); - } - } - - /** - * Notify controller that the current queue title is changed. - * - * @param title the new queue title - */ - @RequiresPermission(Manifest.permission.MEDIA_CONTENT_CONTROL) - public void notifyQueueTitleChanged(@Nullable CharSequence title) { - try { - mIControllerCallback.notifyQueueTitleChanged(title); - } catch (RemoteException e) { - throw new RuntimeException(e); - } - } - - /** - * Notify controller that the extras are changed. - * - * @param extras the new extras - */ - @RequiresPermission(Manifest.permission.MEDIA_CONTENT_CONTROL) - public void notifyExtrasChanged(@Nullable Bundle extras) { - try { - mIControllerCallback.notifyExtrasChanged(extras); - } catch (RemoteException e) { - throw new RuntimeException(e); - } - } - - /** - * Notify controller that the playback info is changed. - * - * @param info the new playback info - */ - @RequiresPermission(Manifest.permission.MEDIA_CONTENT_CONTROL) - public void notifyVolumeInfoChanged(@NonNull PlaybackInfo info) { - try { - mIControllerCallback.notifyVolumeInfoChanged(info); - } catch (RemoteException e) { - throw new RuntimeException(e); - } - } - - /** Gets the binder */ - @NonNull - public IBinder getBinder() { - return mIControllerCallback.asBinder(); - } - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - dest.writeStrongBinder(mIControllerCallback.asBinder()); - } - - public static final @android.annotation.NonNull Parcelable.Creator CREATOR = - new Parcelable.Creator() { - @Override - public ControllerCallbackLink createFromParcel(Parcel in) { - return new ControllerCallbackLink(in.readStrongBinder()); - } - - @Override - public ControllerCallbackLink[] newArray(int size) { - return new ControllerCallbackLink[size]; - } - }; - - /** - * Class for Stub implementation - */ - public abstract static class CallbackStub { - /** Stub method for ISessionControllerCallback.notifySessionDestroyed */ - public void onSessionDestroyed() { - } - - /** Stub method for ISessionControllerCallback.notifyEvent */ - public void onEvent(@NonNull String event, @Nullable Bundle extras) { - } - - /** Stub method for ISessionControllerCallback.notifyPlaybackStateChanged */ - public void onPlaybackStateChanged(@Nullable PlaybackState state) { - } - - /** Stub method for ISessionControllerCallback.notifyMetadataChanged */ - public void onMetadataChanged(@Nullable MediaMetadata metadata) { - } - - /** Stub method for ISessionControllerCallback.notifyQueueChanged */ - public void onQueueChanged(@Nullable List queue) { - } - - /** Stub method for ISessionControllerCallback.notifyQueueTitleChanged */ - public void onQueueTitleChanged(@Nullable CharSequence title) { - } - - /** Stub method for ISessionControllerCallback.notifyExtrasChanged */ - public void onExtrasChanged(@Nullable Bundle extras) { - } - - /** Stub method for ISessionControllerCallback.notifyVolumeInfoChanged */ - public void onVolumeInfoChanged(@NonNull PlaybackInfo info) { - } - } - - private class CallbackStubProxy extends ISessionControllerCallback.Stub { - @Override - public void notifyEvent(String event, Bundle extras) { - mCallbackStub.onEvent(event, extras); - } - - @Override - public void notifySessionDestroyed() { - mCallbackStub.onSessionDestroyed(); - } - - @Override - public void notifyPlaybackStateChanged(PlaybackState state) { - ensureMediaControlPermission(); - final long token = Binder.clearCallingIdentity(); - try { - mCallbackStub.onPlaybackStateChanged(state); - } finally { - Binder.restoreCallingIdentity(token); - } - } - - @Override - public void notifyMetadataChanged(MediaMetadata metadata) { - ensureMediaControlPermission(); - final long token = Binder.clearCallingIdentity(); - try { - mCallbackStub.onMetadataChanged(metadata); - } finally { - Binder.restoreCallingIdentity(token); - } - } - - @Override - public void notifyQueueChanged(MediaParceledListSlice queue) { - ensureMediaControlPermission(); - final long token = Binder.clearCallingIdentity(); - try { - mCallbackStub.onQueueChanged(queue == null ? null : queue.getList()); - } finally { - Binder.restoreCallingIdentity(token); - } - } - - @Override - public void notifyQueueTitleChanged(CharSequence title) { - ensureMediaControlPermission(); - final long token = Binder.clearCallingIdentity(); - try { - mCallbackStub.onQueueTitleChanged(title); - } finally { - Binder.restoreCallingIdentity(token); - } - } - - @Override - public void notifyExtrasChanged(Bundle extras) { - mCallbackStub.onExtrasChanged(extras); - } - - @Override - public void notifyVolumeInfoChanged(PlaybackInfo info) { - ensureMediaControlPermission(); - final long token = Binder.clearCallingIdentity(); - try { - mCallbackStub.onVolumeInfoChanged(info); - } finally { - Binder.restoreCallingIdentity(token); - } - } - - private void ensureMediaControlPermission() { - // Check if it's system server or has MEDIA_CONTENT_CONTROL. - // Note that system server doesn't have MEDIA_CONTENT_CONTROL, so we need extra - // check here. - if (getCallingUid() == Process.SYSTEM_UID || mContext.checkCallingPermission( - android.Manifest.permission.MEDIA_CONTENT_CONTROL) - == PackageManager.PERMISSION_GRANTED) { - return; - } - throw new SecurityException("Must hold the MEDIA_CONTENT_CONTROL permission."); - } - } -} diff --git a/media/java/android/media/session/ISessionCallback.aidl b/media/java/android/media/session/ISessionCallback.aidl index 0add1b417c4f6..a294088dd7517 100644 --- a/media/java/android/media/session/ISessionCallback.aidl +++ b/media/java/android/media/session/ISessionCallback.aidl @@ -17,7 +17,7 @@ package android.media.session; import android.content.Intent; import android.media.Rating; -import android.media.session.ControllerCallbackLink; +import android.media.session.ISessionControllerCallback; import android.net.Uri; import android.os.Bundle; import android.os.ResultReceiver; @@ -26,48 +26,48 @@ import android.os.ResultReceiver; * @hide */ oneway interface ISessionCallback { - void onCommand(String packageName, int pid, int uid, in ControllerCallbackLink caller, + void onCommand(String packageName, int pid, int uid, ISessionControllerCallback caller, String command, in Bundle args, in ResultReceiver cb); void onMediaButton(String packageName, int pid, int uid, in Intent mediaButtonIntent, int sequenceNumber, in ResultReceiver cb); void onMediaButtonFromController(String packageName, int pid, int uid, - in ControllerCallbackLink caller, in Intent mediaButtonIntent); + ISessionControllerCallback caller, in Intent mediaButtonIntent); // These callbacks are for the TransportControls - void onPrepare(String packageName, int pid, int uid, in ControllerCallbackLink caller); + void onPrepare(String packageName, int pid, int uid, ISessionControllerCallback caller); void onPrepareFromMediaId(String packageName, int pid, int uid, - in ControllerCallbackLink caller, String mediaId, in Bundle extras); + ISessionControllerCallback caller, String mediaId, in Bundle extras); void onPrepareFromSearch(String packageName, int pid, int uid, - in ControllerCallbackLink caller, String query, in Bundle extras); + ISessionControllerCallback caller, String query, in Bundle extras); void onPrepareFromUri(String packageName, int pid, int uid, - in ControllerCallbackLink caller, in Uri uri, in Bundle extras); - void onPlay(String packageName, int pid, int uid, in ControllerCallbackLink caller); + ISessionControllerCallback caller, in Uri uri, in Bundle extras); + void onPlay(String packageName, int pid, int uid, ISessionControllerCallback caller); void onPlayFromMediaId(String packageName, int pid, int uid, - in ControllerCallbackLink caller, String mediaId, in Bundle extras); + ISessionControllerCallback caller, String mediaId, in Bundle extras); void onPlayFromSearch(String packageName, int pid, int uid, - in ControllerCallbackLink caller, String query, in Bundle extras); - void onPlayFromUri(String packageName, int pid, int uid, in ControllerCallbackLink caller, + ISessionControllerCallback caller, String query, in Bundle extras); + void onPlayFromUri(String packageName, int pid, int uid, ISessionControllerCallback caller, in Uri uri, in Bundle extras); - void onSkipToTrack(String packageName, int pid, int uid, in ControllerCallbackLink caller, + void onSkipToTrack(String packageName, int pid, int uid, ISessionControllerCallback caller, long id); - void onPause(String packageName, int pid, int uid, in ControllerCallbackLink caller); - void onStop(String packageName, int pid, int uid, in ControllerCallbackLink caller); - void onNext(String packageName, int pid, int uid, in ControllerCallbackLink caller); - void onPrevious(String packageName, int pid, int uid, in ControllerCallbackLink caller); - void onFastForward(String packageName, int pid, int uid, in ControllerCallbackLink caller); - void onRewind(String packageName, int pid, int uid, in ControllerCallbackLink caller); - void onSeekTo(String packageName, int pid, int uid, in ControllerCallbackLink caller, + void onPause(String packageName, int pid, int uid, ISessionControllerCallback caller); + void onStop(String packageName, int pid, int uid, ISessionControllerCallback caller); + void onNext(String packageName, int pid, int uid, ISessionControllerCallback caller); + void onPrevious(String packageName, int pid, int uid, ISessionControllerCallback caller); + void onFastForward(String packageName, int pid, int uid, ISessionControllerCallback caller); + void onRewind(String packageName, int pid, int uid, ISessionControllerCallback caller); + void onSeekTo(String packageName, int pid, int uid, ISessionControllerCallback caller, long pos); - void onRate(String packageName, int pid, int uid, in ControllerCallbackLink caller, + void onRate(String packageName, int pid, int uid, ISessionControllerCallback caller, in Rating rating); void onSetPlaybackSpeed(String packageName, int pid, int uid, - in ControllerCallbackLink caller, float speed); - void onCustomAction(String packageName, int pid, int uid, in ControllerCallbackLink caller, + ISessionControllerCallback caller, float speed); + void onCustomAction(String packageName, int pid, int uid, ISessionControllerCallback caller, String action, in Bundle args); // These callbacks are for volume handling - void onAdjustVolume(String packageName, int pid, int uid, in ControllerCallbackLink caller, + void onAdjustVolume(String packageName, int pid, int uid, ISessionControllerCallback caller, int direction); void onSetVolumeTo(String packageName, int pid, int uid, - in ControllerCallbackLink caller, int value); + ISessionControllerCallback caller, int value); } diff --git a/media/java/android/media/session/ISessionController.aidl b/media/java/android/media/session/ISessionController.aidl index 298085f005dad..9b1223cc48bac 100644 --- a/media/java/android/media/session/ISessionController.aidl +++ b/media/java/android/media/session/ISessionController.aidl @@ -20,7 +20,7 @@ import android.content.Intent; import android.media.MediaMetadata; import android.media.MediaParceledListSlice; import android.media.Rating; -import android.media.session.ControllerCallbackLink; +import android.media.session.ISessionControllerCallback; import android.media.session.MediaController; import android.media.session.MediaSession; import android.media.session.PlaybackState; @@ -36,12 +36,12 @@ import java.util.List; * @hide */ interface ISessionController { - void sendCommand(String packageName, in ControllerCallbackLink caller, + void sendCommand(String packageName, in ISessionControllerCallback caller, String command, in Bundle args, in ResultReceiver cb); - boolean sendMediaButton(String packageName, in ControllerCallbackLink caller, + boolean sendMediaButton(String packageName, in ISessionControllerCallback caller, in KeyEvent mediaButton); - void registerCallback(String packageName, in ControllerCallbackLink cb); - void unregisterCallback(in ControllerCallbackLink cb); + void registerCallback(String packageName, in ISessionControllerCallback cb); + void unregisterCallback(in ISessionControllerCallback cb); String getPackageName(); String getTag(); Bundle getSessionInfo(); @@ -49,36 +49,36 @@ interface ISessionController { long getFlags(); MediaController.PlaybackInfo getVolumeAttributes(); void adjustVolume(String packageName, String opPackageName, - in ControllerCallbackLink caller, int direction, int flags); - void setVolumeTo(String packageName, String opPackageName, in ControllerCallbackLink caller, + in ISessionControllerCallback caller, int direction, int flags); + void setVolumeTo(String packageName, String opPackageName, in ISessionControllerCallback caller, int value, int flags); // These commands are for the TransportControls - void prepare(String packageName, in ControllerCallbackLink caller); - void prepareFromMediaId(String packageName, in ControllerCallbackLink caller, + void prepare(String packageName, in ISessionControllerCallback caller); + void prepareFromMediaId(String packageName, in ISessionControllerCallback caller, String mediaId, in Bundle extras); - void prepareFromSearch(String packageName, in ControllerCallbackLink caller, + void prepareFromSearch(String packageName, in ISessionControllerCallback caller, String string, in Bundle extras); - void prepareFromUri(String packageName, in ControllerCallbackLink caller, + void prepareFromUri(String packageName, in ISessionControllerCallback caller, in Uri uri, in Bundle extras); - void play(String packageName, in ControllerCallbackLink caller); - void playFromMediaId(String packageName, in ControllerCallbackLink caller, + void play(String packageName, in ISessionControllerCallback caller); + void playFromMediaId(String packageName, in ISessionControllerCallback caller, String mediaId, in Bundle extras); - void playFromSearch(String packageName, in ControllerCallbackLink caller, + void playFromSearch(String packageName, in ISessionControllerCallback caller, String string, in Bundle extras); - void playFromUri(String packageName, in ControllerCallbackLink caller, + void playFromUri(String packageName, in ISessionControllerCallback caller, in Uri uri, in Bundle extras); - void skipToQueueItem(String packageName, in ControllerCallbackLink caller, long id); - void pause(String packageName, in ControllerCallbackLink caller); - void stop(String packageName, in ControllerCallbackLink caller); - void next(String packageName, in ControllerCallbackLink caller); - void previous(String packageName, in ControllerCallbackLink caller); - void fastForward(String packageName, in ControllerCallbackLink caller); - void rewind(String packageName, in ControllerCallbackLink caller); - void seekTo(String packageName, in ControllerCallbackLink caller, long pos); - void rate(String packageName, in ControllerCallbackLink caller, in Rating rating); - void setPlaybackSpeed(String packageName, in ControllerCallbackLink caller, float speed); - void sendCustomAction(String packageName, in ControllerCallbackLink caller, + void skipToQueueItem(String packageName, in ISessionControllerCallback caller, long id); + void pause(String packageName, in ISessionControllerCallback caller); + void stop(String packageName, in ISessionControllerCallback caller); + void next(String packageName, in ISessionControllerCallback caller); + void previous(String packageName, in ISessionControllerCallback caller); + void fastForward(String packageName, in ISessionControllerCallback caller); + void rewind(String packageName, in ISessionControllerCallback caller); + void seekTo(String packageName, in ISessionControllerCallback caller, long pos); + void rate(String packageName, in ISessionControllerCallback caller, in Rating rating); + void setPlaybackSpeed(String packageName, in ISessionControllerCallback caller, float speed); + void sendCustomAction(String packageName, in ISessionControllerCallback caller, String action, in Bundle args); MediaMetadata getMetadata(); PlaybackState getPlaybackState(); diff --git a/media/java/android/media/session/ISessionControllerCallback.aidl b/media/java/android/media/session/ISessionControllerCallback.aidl index 56ae852d6f508..f284133708fef 100644 --- a/media/java/android/media/session/ISessionControllerCallback.aidl +++ b/media/java/android/media/session/ISessionControllerCallback.aidl @@ -25,14 +25,14 @@ import android.os.Bundle; * @hide */ oneway interface ISessionControllerCallback { - void notifyEvent(String event, in Bundle extras); - void notifySessionDestroyed(); + void onEvent(String event, in Bundle extras); + void onSessionDestroyed(); // These callbacks are for the TransportController - void notifyPlaybackStateChanged(in PlaybackState state); - void notifyMetadataChanged(in MediaMetadata metadata); - void notifyQueueChanged(in MediaParceledListSlice queue); - void notifyQueueTitleChanged(CharSequence title); - void notifyExtrasChanged(in Bundle extras); - void notifyVolumeInfoChanged(in MediaController.PlaybackInfo info); + void onPlaybackStateChanged(in PlaybackState state); + void onMetadataChanged(in MediaMetadata metadata); + void onQueueChanged(in MediaParceledListSlice queue); + void onQueueTitleChanged(CharSequence title); + void onExtrasChanged(in Bundle extras); + void onVolumeInfoChanged(in MediaController.PlaybackInfo info); } diff --git a/media/java/android/media/session/MediaController.java b/media/java/android/media/session/MediaController.java index 036cd78631dd0..79d8be1a04a42 100644 --- a/media/java/android/media/session/MediaController.java +++ b/media/java/android/media/session/MediaController.java @@ -73,7 +73,7 @@ public final class MediaController { private final MediaSession.Token mToken; private final Context mContext; - private final ControllerCallbackLink mCbStub; + private final CallbackStub mCbStub = new CallbackStub(this); private final ArrayList mCallbacks = new ArrayList(); private final Object mLock = new Object(); @@ -104,7 +104,6 @@ public final class MediaController { mTransportControls = new TransportControls(); mToken = token; mContext = context; - mCbStub = new ControllerCallbackLink(context, new CallbackStub(this)); } /** @@ -1065,7 +1064,7 @@ public final class MediaController { }; } - private static final class CallbackStub extends ControllerCallbackLink.CallbackStub { + private static final class CallbackStub extends ISessionControllerCallback.Stub { private final WeakReference mController; CallbackStub(MediaController controller) { @@ -1105,7 +1104,7 @@ public final class MediaController { } @Override - public void onQueueChanged(List queue) { + public void onQueueChanged(MediaParceledListSlice queue) { MediaController controller = mController.get(); if (controller != null) { controller.postMessage(MSG_UPDATE_QUEUE, queue, null); @@ -1162,7 +1161,8 @@ public final class MediaController { mCallback.onMetadataChanged((MediaMetadata) msg.obj); break; case MSG_UPDATE_QUEUE: - mCallback.onQueueChanged((List) msg.obj); + mCallback.onQueueChanged(msg.obj == null ? null : + (List) ((MediaParceledListSlice) msg.obj).getList()); break; case MSG_UPDATE_QUEUE_TITLE: mCallback.onQueueTitleChanged((CharSequence) msg.obj); diff --git a/media/java/android/media/session/MediaSession.java b/media/java/android/media/session/MediaSession.java index aa61a01310c93..c577469477e06 100644 --- a/media/java/android/media/session/MediaSession.java +++ b/media/java/android/media/session/MediaSession.java @@ -1120,7 +1120,7 @@ public final class MediaSession { @Override public void onCommand(String packageName, int pid, int uid, - ControllerCallbackLink caller, String command, Bundle args, ResultReceiver cb) { + ISessionControllerCallback caller, String command, Bundle args, ResultReceiver cb) { MediaSession session = mMediaSession.get(); if (session != null) { session.dispatchCommand(createRemoteUserInfo(packageName, pid, uid), @@ -1146,7 +1146,7 @@ public final class MediaSession { @Override public void onMediaButtonFromController(String packageName, int pid, int uid, - ControllerCallbackLink caller, Intent mediaButtonIntent) { + ISessionControllerCallback caller, Intent mediaButtonIntent) { MediaSession session = mMediaSession.get(); if (session != null) { session.dispatchMediaButton(createRemoteUserInfo(packageName, pid, uid), @@ -1156,7 +1156,7 @@ public final class MediaSession { @Override public void onPrepare(String packageName, int pid, int uid, - ControllerCallbackLink caller) { + ISessionControllerCallback caller) { MediaSession session = mMediaSession.get(); if (session != null) { session.dispatchPrepare(createRemoteUserInfo(packageName, pid, uid)); @@ -1165,7 +1165,7 @@ public final class MediaSession { @Override public void onPrepareFromMediaId(String packageName, int pid, int uid, - ControllerCallbackLink caller, String mediaId, + ISessionControllerCallback caller, String mediaId, Bundle extras) { MediaSession session = mMediaSession.get(); if (session != null) { @@ -1176,7 +1176,7 @@ public final class MediaSession { @Override public void onPrepareFromSearch(String packageName, int pid, int uid, - ControllerCallbackLink caller, String query, + ISessionControllerCallback caller, String query, Bundle extras) { MediaSession session = mMediaSession.get(); if (session != null) { @@ -1187,7 +1187,7 @@ public final class MediaSession { @Override public void onPrepareFromUri(String packageName, int pid, int uid, - ControllerCallbackLink caller, Uri uri, Bundle extras) { + ISessionControllerCallback caller, Uri uri, Bundle extras) { MediaSession session = mMediaSession.get(); if (session != null) { session.dispatchPrepareFromUri(createRemoteUserInfo(packageName, pid, uid), @@ -1197,7 +1197,7 @@ public final class MediaSession { @Override public void onPlay(String packageName, int pid, int uid, - ControllerCallbackLink caller) { + ISessionControllerCallback caller) { MediaSession session = mMediaSession.get(); if (session != null) { session.dispatchPlay(createRemoteUserInfo(packageName, pid, uid)); @@ -1206,7 +1206,7 @@ public final class MediaSession { @Override public void onPlayFromMediaId(String packageName, int pid, int uid, - ControllerCallbackLink caller, String mediaId, + ISessionControllerCallback caller, String mediaId, Bundle extras) { MediaSession session = mMediaSession.get(); if (session != null) { @@ -1217,7 +1217,7 @@ public final class MediaSession { @Override public void onPlayFromSearch(String packageName, int pid, int uid, - ControllerCallbackLink caller, String query, + ISessionControllerCallback caller, String query, Bundle extras) { MediaSession session = mMediaSession.get(); if (session != null) { @@ -1228,7 +1228,7 @@ public final class MediaSession { @Override public void onPlayFromUri(String packageName, int pid, int uid, - ControllerCallbackLink caller, Uri uri, Bundle extras) { + ISessionControllerCallback caller, Uri uri, Bundle extras) { MediaSession session = mMediaSession.get(); if (session != null) { session.dispatchPlayFromUri(createRemoteUserInfo(packageName, pid, uid), @@ -1238,7 +1238,7 @@ public final class MediaSession { @Override public void onSkipToTrack(String packageName, int pid, int uid, - ControllerCallbackLink caller, long id) { + ISessionControllerCallback caller, long id) { MediaSession session = mMediaSession.get(); if (session != null) { session.dispatchSkipToItem(createRemoteUserInfo(packageName, pid, uid), id); @@ -1247,7 +1247,7 @@ public final class MediaSession { @Override public void onPause(String packageName, int pid, int uid, - ControllerCallbackLink caller) { + ISessionControllerCallback caller) { MediaSession session = mMediaSession.get(); if (session != null) { session.dispatchPause(createRemoteUserInfo(packageName, pid, uid)); @@ -1256,7 +1256,7 @@ public final class MediaSession { @Override public void onStop(String packageName, int pid, int uid, - ControllerCallbackLink caller) { + ISessionControllerCallback caller) { MediaSession session = mMediaSession.get(); if (session != null) { session.dispatchStop(createRemoteUserInfo(packageName, pid, uid)); @@ -1265,7 +1265,7 @@ public final class MediaSession { @Override public void onNext(String packageName, int pid, int uid, - ControllerCallbackLink caller) { + ISessionControllerCallback caller) { MediaSession session = mMediaSession.get(); if (session != null) { session.dispatchNext(createRemoteUserInfo(packageName, pid, uid)); @@ -1274,7 +1274,7 @@ public final class MediaSession { @Override public void onPrevious(String packageName, int pid, int uid, - ControllerCallbackLink caller) { + ISessionControllerCallback caller) { MediaSession session = mMediaSession.get(); if (session != null) { session.dispatchPrevious(createRemoteUserInfo(packageName, pid, uid)); @@ -1283,7 +1283,7 @@ public final class MediaSession { @Override public void onFastForward(String packageName, int pid, int uid, - ControllerCallbackLink caller) { + ISessionControllerCallback caller) { MediaSession session = mMediaSession.get(); if (session != null) { session.dispatchFastForward(createRemoteUserInfo(packageName, pid, uid)); @@ -1292,7 +1292,7 @@ public final class MediaSession { @Override public void onRewind(String packageName, int pid, int uid, - ControllerCallbackLink caller) { + ISessionControllerCallback caller) { MediaSession session = mMediaSession.get(); if (session != null) { session.dispatchRewind(createRemoteUserInfo(packageName, pid, uid)); @@ -1301,7 +1301,7 @@ public final class MediaSession { @Override public void onSeekTo(String packageName, int pid, int uid, - ControllerCallbackLink caller, long pos) { + ISessionControllerCallback caller, long pos) { MediaSession session = mMediaSession.get(); if (session != null) { session.dispatchSeekTo(createRemoteUserInfo(packageName, pid, uid), pos); @@ -1309,7 +1309,7 @@ public final class MediaSession { } @Override - public void onRate(String packageName, int pid, int uid, ControllerCallbackLink caller, + public void onRate(String packageName, int pid, int uid, ISessionControllerCallback caller, Rating rating) { MediaSession session = mMediaSession.get(); if (session != null) { @@ -1319,7 +1319,7 @@ public final class MediaSession { @Override public void onSetPlaybackSpeed(String packageName, int pid, int uid, - ControllerCallbackLink caller, float speed) { + ISessionControllerCallback caller, float speed) { MediaSession session = mMediaSession.get(); if (session != null) { session.dispatchSetPlaybackSpeed( @@ -1329,7 +1329,7 @@ public final class MediaSession { @Override public void onCustomAction(String packageName, int pid, int uid, - ControllerCallbackLink caller, String action, Bundle args) { + ISessionControllerCallback caller, String action, Bundle args) { MediaSession session = mMediaSession.get(); if (session != null) { session.dispatchCustomAction(createRemoteUserInfo(packageName, pid, uid), @@ -1339,7 +1339,7 @@ public final class MediaSession { @Override public void onAdjustVolume(String packageName, int pid, int uid, - ControllerCallbackLink caller, int direction) { + ISessionControllerCallback caller, int direction) { MediaSession session = mMediaSession.get(); if (session != null) { session.dispatchAdjustVolume(createRemoteUserInfo(packageName, pid, uid), @@ -1349,7 +1349,7 @@ public final class MediaSession { @Override public void onSetVolumeTo(String packageName, int pid, int uid, - ControllerCallbackLink caller, int value) { + ISessionControllerCallback caller, int value) { MediaSession session = mMediaSession.get(); if (session != null) { session.dispatchSetVolumeTo(createRemoteUserInfo(packageName, pid, uid), diff --git a/services/core/java/com/android/server/media/MediaSessionRecord.java b/services/core/java/com/android/server/media/MediaSessionRecord.java index e0fb9e7e679f7..a8c16c769b91e 100644 --- a/services/core/java/com/android/server/media/MediaSessionRecord.java +++ b/services/core/java/com/android/server/media/MediaSessionRecord.java @@ -27,10 +27,10 @@ import android.media.MediaMetadata; import android.media.MediaParceledListSlice; import android.media.Rating; import android.media.VolumeProvider; -import android.media.session.ControllerCallbackLink; import android.media.session.ISession; import android.media.session.ISessionCallback; import android.media.session.ISessionController; +import android.media.session.ISessionControllerCallback; import android.media.session.MediaController; import android.media.session.MediaController.PlaybackInfo; import android.media.session.MediaSession; @@ -88,7 +88,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { private final Context mContext; private final Object mLock = new Object(); - private final ArrayList mControllerCallbackHolders = + private final ArrayList mControllerCallbackHolders = new ArrayList<>(); private long mFlags; @@ -265,7 +265,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { * @param useSuggested True to use adjustSuggestedStreamVolume instead of */ public void adjustVolume(String packageName, String opPackageName, int pid, int uid, - ControllerCallbackLink caller, boolean asSystemService, int direction, int flags, + ISessionControllerCallback caller, boolean asSystemService, int direction, int flags, boolean useSuggested) { int previousFlagPlaySound = flags & AudioManager.FLAG_PLAY_SOUND; if (isPlaybackActive() || hasFlag(MediaSession.FLAG_EXCLUSIVE_GLOBAL_PRIORITY)) { @@ -311,7 +311,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { } private void setVolumeTo(String packageName, String opPackageName, int pid, int uid, - ControllerCallbackLink caller, int value, int flags) { + ISessionControllerCallback caller, int value, int flags) { if (mVolumeType == PlaybackInfo.PLAYBACK_TYPE_LOCAL) { int stream = AudioAttributes.toLegacyStreamType(mAudioAttrs); final int volumeValue = value; @@ -558,7 +558,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { } private void logCallbackException( - String msg, ControllerCallbackLinkHolder holder, Exception e) { + String msg, ISessionControllerCallbackHolder holder, Exception e) { Log.v(TAG, msg + ", this=" + this + ", callback package=" + holder.mPackageName + ", exception=" + e); } @@ -569,18 +569,16 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { return; } for (int i = mControllerCallbackHolders.size() - 1; i >= 0; i--) { - ControllerCallbackLinkHolder holder = mControllerCallbackHolders.get(i); + ISessionControllerCallbackHolder holder = mControllerCallbackHolders.get(i); try { - holder.mCallback.notifyPlaybackStateChanged(mPlaybackState); - } catch (RuntimeException e) { - if (e.getCause() instanceof DeadObjectException) { - mControllerCallbackHolders.remove(i); - logCallbackException("Removing dead callback in pushPlaybackStateUpdate", - holder, e); - } else { - logCallbackException("unexpected exception in pushPlaybackStateUpdate", - holder, e); - } + holder.mCallback.onPlaybackStateChanged(mPlaybackState); + } catch (DeadObjectException e) { + mControllerCallbackHolders.remove(i); + logCallbackException("Removing dead callback in pushPlaybackStateUpdate", + holder, e); + } catch (RemoteException e) { + logCallbackException("unexpected exception in pushPlaybackStateUpdate", + holder, e); } } } @@ -592,18 +590,14 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { return; } for (int i = mControllerCallbackHolders.size() - 1; i >= 0; i--) { - ControllerCallbackLinkHolder holder = mControllerCallbackHolders.get(i); + ISessionControllerCallbackHolder holder = mControllerCallbackHolders.get(i); try { - holder.mCallback.notifyMetadataChanged(mMetadata); - } catch (RuntimeException e) { - if (e.getCause() instanceof DeadObjectException) { - mControllerCallbackHolders.remove(i); - logCallbackException("Removing dead callback in pushMetadataUpdate", - holder, e); - } else { - logCallbackException("unexpected exception in pushMetadataUpdate", - holder, e); - } + holder.mCallback.onMetadataChanged(mMetadata); + } catch (DeadObjectException e) { + mControllerCallbackHolders.remove(i); + logCallbackException("Removing dead callback in pushMetadataUpdate", holder, e); + } catch (RemoteException e) { + logCallbackException("unexpected exception in pushMetadataUpdate", holder, e); } } } @@ -615,17 +609,15 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { return; } for (int i = mControllerCallbackHolders.size() - 1; i >= 0; i--) { - ControllerCallbackLinkHolder holder = mControllerCallbackHolders.get(i); + ISessionControllerCallbackHolder holder = mControllerCallbackHolders.get(i); try { - holder.mCallback.notifyQueueChanged(mQueue); - } catch (RuntimeException e) { - if (e.getCause() instanceof DeadObjectException) { - mControllerCallbackHolders.remove(i); - logCallbackException("Removing dead callback in pushQueueUpdate", - holder, e); - } else { - logCallbackException("unexpected exception in pushQueueUpdate", holder, e); - } + holder.mCallback.onQueueChanged(mQueue == null ? null : + new MediaParceledListSlice<>(mQueue)); + } catch (DeadObjectException e) { + mControllerCallbackHolders.remove(i); + logCallbackException("Removing dead callback in pushQueueUpdate", holder, e); + } catch (RemoteException e) { + logCallbackException("unexpected exception in pushQueueUpdate", holder, e); } } } @@ -637,18 +629,15 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { return; } for (int i = mControllerCallbackHolders.size() - 1; i >= 0; i--) { - ControllerCallbackLinkHolder holder = mControllerCallbackHolders.get(i); + ISessionControllerCallbackHolder holder = mControllerCallbackHolders.get(i); try { - holder.mCallback.notifyQueueTitleChanged(mQueueTitle); - } catch (RuntimeException e) { - if (e.getCause() instanceof DeadObjectException) { - mControllerCallbackHolders.remove(i); - logCallbackException("Removing dead callback in pushQueueTitleUpdate", - holder, e); - } else { - logCallbackException("unexpected exception in pushQueueTitleUpdate", - holder, e); - } + holder.mCallback.onQueueTitleChanged(mQueueTitle); + } catch (DeadObjectException e) { + mControllerCallbackHolders.remove(i); + logCallbackException("Removing dead callback in pushQueueTitleUpdate", + holder, e); + } catch (RemoteException e) { + logCallbackException("unexpected exception in pushQueueTitleUpdate", holder, e); } } } @@ -660,17 +649,14 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { return; } for (int i = mControllerCallbackHolders.size() - 1; i >= 0; i--) { - ControllerCallbackLinkHolder holder = mControllerCallbackHolders.get(i); + ISessionControllerCallbackHolder holder = mControllerCallbackHolders.get(i); try { - holder.mCallback.notifyExtrasChanged(mExtras); - } catch (RuntimeException e) { - if (e.getCause() instanceof DeadObjectException) { - mControllerCallbackHolders.remove(i); - logCallbackException("Removing dead callback in pushExtrasUpdate", - holder, e); - } else { - logCallbackException("unexpected exception in pushExtrasUpdate", holder, e); - } + holder.mCallback.onExtrasChanged(mExtras); + } catch (DeadObjectException e) { + mControllerCallbackHolders.remove(i); + logCallbackException("Removing dead callback in pushExtrasUpdate", holder, e); + } catch (RemoteException e) { + logCallbackException("unexpected exception in pushExtrasUpdate", holder, e); } } } @@ -683,17 +669,14 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { } PlaybackInfo info = getVolumeAttributes(); for (int i = mControllerCallbackHolders.size() - 1; i >= 0; i--) { - ControllerCallbackLinkHolder holder = mControllerCallbackHolders.get(i); + ISessionControllerCallbackHolder holder = mControllerCallbackHolders.get(i); try { - holder.mCallback.notifyVolumeInfoChanged(info); - } catch (RuntimeException e) { - if (e.getCause() instanceof DeadObjectException) { - mControllerCallbackHolders.remove(i); - logCallbackException("Removing dead callback in pushVolumeUpdate", - holder, e); - } else { - logCallbackException("unexpected exception in pushVolumeUpdate", holder, e); - } + holder.mCallback.onVolumeInfoChanged(info); + } catch (DeadObjectException e) { + mControllerCallbackHolders.remove(i); + logCallbackException("Removing dead callback in pushVolumeUpdate", holder, e); + } catch (RemoteException e) { + logCallbackException("unexpected exception in pushVolumeUpdate", holder, e); } } } @@ -705,16 +688,14 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { return; } for (int i = mControllerCallbackHolders.size() - 1; i >= 0; i--) { - ControllerCallbackLinkHolder holder = mControllerCallbackHolders.get(i); + ISessionControllerCallbackHolder holder = mControllerCallbackHolders.get(i); try { - holder.mCallback.notifyEvent(event, data); - } catch (RuntimeException e) { - if (e.getCause() instanceof DeadObjectException) { - mControllerCallbackHolders.remove(i); - logCallbackException("Removing dead callback in pushEvent", holder, e); - } else { - logCallbackException("unexpected exception in pushEvent", holder, e); - } + holder.mCallback.onEvent(event, data); + } catch (DeadObjectException e) { + mControllerCallbackHolders.remove(i); + logCallbackException("Removing dead callback in pushEvent", holder, e); + } catch (RemoteException e) { + logCallbackException("unexpected exception in pushEvent", holder, e); } } } @@ -728,18 +709,15 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { return; } for (int i = mControllerCallbackHolders.size() - 1; i >= 0; i--) { - ControllerCallbackLinkHolder holder = mControllerCallbackHolders.get(i); + ISessionControllerCallbackHolder holder = mControllerCallbackHolders.get(i); try { - holder.mCallback.notifySessionDestroyed(); - } catch (RuntimeException e) { - if (e.getCause() instanceof DeadObjectException) { - mControllerCallbackHolders.remove(i); - logCallbackException("Removing dead callback in pushSessionDestroyed", - holder, e); - } else { - logCallbackException("unexpected exception in pushSessionDestroyed", - holder, e); - } + holder.mCallback.onSessionDestroyed(); + } catch (DeadObjectException e) { + mControllerCallbackHolders.remove(i); + logCallbackException("Removing dead callback in pushSessionDestroyed", + holder, e); + } catch (RemoteException e) { + logCallbackException("unexpected exception in pushSessionDestroyed", holder, e); } } // After notifying clear all listeners @@ -779,10 +757,10 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { return result == null ? state : result; } - private int getControllerHolderIndexForCb(ControllerCallbackLink cb) { - IBinder binder = cb.getBinder(); + private int getControllerHolderIndexForCb(ISessionControllerCallback cb) { + IBinder binder = cb.asBinder(); for (int i = mControllerCallbackHolders.size() - 1; i >= 0; i--) { - if (binder.equals(mControllerCallbackHolders.get(i).mCallback.getBinder())) { + if (binder.equals(mControllerCallbackHolders.get(i).mCallback.asBinder())) { return i; } } @@ -1027,7 +1005,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { } public boolean sendMediaButton(String packageName, int pid, int uid, - ControllerCallbackLink caller, boolean asSystemService, + ISessionControllerCallback caller, boolean asSystemService, KeyEvent keyEvent) { try { if (asSystemService) { @@ -1045,7 +1023,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { } public void sendCommand(String packageName, int pid, int uid, - ControllerCallbackLink caller, String command, Bundle args, ResultReceiver cb) { + ISessionControllerCallback caller, String command, Bundle args, ResultReceiver cb) { try { mCb.onCommand(packageName, pid, uid, caller, command, args, cb); } catch (RemoteException e) { @@ -1054,7 +1032,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { } public void sendCustomAction(String packageName, int pid, int uid, - ControllerCallbackLink caller, String action, + ISessionControllerCallback caller, String action, Bundle args) { try { mCb.onCustomAction(packageName, pid, uid, caller, action, args); @@ -1064,7 +1042,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { } public void prepare(String packageName, int pid, int uid, - ControllerCallbackLink caller) { + ISessionControllerCallback caller) { try { mCb.onPrepare(packageName, pid, uid, caller); } catch (RemoteException e) { @@ -1073,7 +1051,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { } public void prepareFromMediaId(String packageName, int pid, int uid, - ControllerCallbackLink caller, String mediaId, Bundle extras) { + ISessionControllerCallback caller, String mediaId, Bundle extras) { try { mCb.onPrepareFromMediaId(packageName, pid, uid, caller, mediaId, extras); } catch (RemoteException e) { @@ -1082,7 +1060,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { } public void prepareFromSearch(String packageName, int pid, int uid, - ControllerCallbackLink caller, String query, Bundle extras) { + ISessionControllerCallback caller, String query, Bundle extras) { try { mCb.onPrepareFromSearch(packageName, pid, uid, caller, query, extras); } catch (RemoteException e) { @@ -1091,7 +1069,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { } public void prepareFromUri(String packageName, int pid, int uid, - ControllerCallbackLink caller, Uri uri, Bundle extras) { + ISessionControllerCallback caller, Uri uri, Bundle extras) { try { mCb.onPrepareFromUri(packageName, pid, uid, caller, uri, extras); } catch (RemoteException e) { @@ -1099,7 +1077,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { } } - public void play(String packageName, int pid, int uid, ControllerCallbackLink caller) { + public void play(String packageName, int pid, int uid, ISessionControllerCallback caller) { try { mCb.onPlay(packageName, pid, uid, caller); } catch (RemoteException e) { @@ -1108,7 +1086,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { } public void playFromMediaId(String packageName, int pid, int uid, - ControllerCallbackLink caller, String mediaId, Bundle extras) { + ISessionControllerCallback caller, String mediaId, Bundle extras) { try { mCb.onPlayFromMediaId(packageName, pid, uid, caller, mediaId, extras); } catch (RemoteException e) { @@ -1117,7 +1095,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { } public void playFromSearch(String packageName, int pid, int uid, - ControllerCallbackLink caller, String query, Bundle extras) { + ISessionControllerCallback caller, String query, Bundle extras) { try { mCb.onPlayFromSearch(packageName, pid, uid, caller, query, extras); } catch (RemoteException e) { @@ -1126,7 +1104,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { } public void playFromUri(String packageName, int pid, int uid, - ControllerCallbackLink caller, Uri uri, Bundle extras) { + ISessionControllerCallback caller, Uri uri, Bundle extras) { try { mCb.onPlayFromUri(packageName, pid, uid, caller, uri, extras); } catch (RemoteException e) { @@ -1135,7 +1113,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { } public void skipToTrack(String packageName, int pid, int uid, - ControllerCallbackLink caller, long id) { + ISessionControllerCallback caller, long id) { try { mCb.onSkipToTrack(packageName, pid, uid, caller, id); } catch (RemoteException e) { @@ -1143,7 +1121,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { } } - public void pause(String packageName, int pid, int uid, ControllerCallbackLink caller) { + public void pause(String packageName, int pid, int uid, ISessionControllerCallback caller) { try { mCb.onPause(packageName, pid, uid, caller); } catch (RemoteException e) { @@ -1151,7 +1129,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { } } - public void stop(String packageName, int pid, int uid, ControllerCallbackLink caller) { + public void stop(String packageName, int pid, int uid, ISessionControllerCallback caller) { try { mCb.onStop(packageName, pid, uid, caller); } catch (RemoteException e) { @@ -1159,7 +1137,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { } } - public void next(String packageName, int pid, int uid, ControllerCallbackLink caller) { + public void next(String packageName, int pid, int uid, ISessionControllerCallback caller) { try { mCb.onNext(packageName, pid, uid, caller); } catch (RemoteException e) { @@ -1168,7 +1146,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { } public void previous(String packageName, int pid, int uid, - ControllerCallbackLink caller) { + ISessionControllerCallback caller) { try { mCb.onPrevious(packageName, pid, uid, caller); } catch (RemoteException e) { @@ -1177,7 +1155,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { } public void fastForward(String packageName, int pid, int uid, - ControllerCallbackLink caller) { + ISessionControllerCallback caller) { try { mCb.onFastForward(packageName, pid, uid, caller); } catch (RemoteException e) { @@ -1186,7 +1164,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { } public void rewind(String packageName, int pid, int uid, - ControllerCallbackLink caller) { + ISessionControllerCallback caller) { try { mCb.onRewind(packageName, pid, uid, caller); } catch (RemoteException e) { @@ -1194,7 +1172,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { } } - public void seekTo(String packageName, int pid, int uid, ControllerCallbackLink caller, + public void seekTo(String packageName, int pid, int uid, ISessionControllerCallback caller, long pos) { try { mCb.onSeekTo(packageName, pid, uid, caller, pos); @@ -1203,7 +1181,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { } } - public void rate(String packageName, int pid, int uid, ControllerCallbackLink caller, + public void rate(String packageName, int pid, int uid, ISessionControllerCallback caller, Rating rating) { try { mCb.onRate(packageName, pid, uid, caller, rating); @@ -1213,7 +1191,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { } public void setPlaybackSpeed(String packageName, int pid, int uid, - ControllerCallbackLink caller, float speed) { + ISessionControllerCallback caller, float speed) { try { mCb.onSetPlaybackSpeed(packageName, pid, uid, caller, speed); } catch (RemoteException e) { @@ -1222,7 +1200,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { } public void adjustVolume(String packageName, int pid, int uid, - ControllerCallbackLink caller, boolean asSystemService, int direction) { + ISessionControllerCallback caller, boolean asSystemService, int direction) { try { if (asSystemService) { mCb.onAdjustVolume(mContext.getPackageName(), Process.myPid(), @@ -1236,7 +1214,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { } public void setVolumeTo(String packageName, int pid, int uid, - ControllerCallbackLink caller, int value) { + ISessionControllerCallback caller, int value) { try { mCb.onSetVolumeTo(packageName, pid, uid, caller, value); } catch (RemoteException e) { @@ -1253,34 +1231,34 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { class ControllerStub extends ISessionController.Stub { @Override - public void sendCommand(String packageName, ControllerCallbackLink caller, + public void sendCommand(String packageName, ISessionControllerCallback caller, String command, Bundle args, ResultReceiver cb) { mSessionCb.sendCommand(packageName, Binder.getCallingPid(), Binder.getCallingUid(), caller, command, args, cb); } @Override - public boolean sendMediaButton(String packageName, ControllerCallbackLink cb, + public boolean sendMediaButton(String packageName, ISessionControllerCallback cb, KeyEvent keyEvent) { return mSessionCb.sendMediaButton(packageName, Binder.getCallingPid(), Binder.getCallingUid(), cb, false, keyEvent); } @Override - public void registerCallback(String packageName, ControllerCallbackLink cb) { + public void registerCallback(String packageName, ISessionControllerCallback cb) { synchronized (mLock) { // If this session is already destroyed tell the caller and // don't add them. if (mDestroyed) { try { - cb.notifySessionDestroyed(); + cb.onSessionDestroyed(); } catch (Exception e) { // ignored } return; } if (getControllerHolderIndexForCb(cb) < 0) { - mControllerCallbackHolders.add(new ControllerCallbackLinkHolder(cb, + mControllerCallbackHolders.add(new ISessionControllerCallbackHolder(cb, packageName, Binder.getCallingUid())); if (DEBUG) { Log.d(TAG, "registering controller callback " + cb + " from controller" @@ -1291,14 +1269,14 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { } @Override - public void unregisterCallback(ControllerCallbackLink cb) { + public void unregisterCallback(ISessionControllerCallback cb) { synchronized (mLock) { int index = getControllerHolderIndexForCb(cb); if (index != -1) { mControllerCallbackHolders.remove(index); } if (DEBUG) { - Log.d(TAG, "unregistering callback " + cb.getBinder()); + Log.d(TAG, "unregistering callback " + cb.asBinder()); } } } @@ -1335,7 +1313,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { @Override public void adjustVolume(String packageName, String opPackageName, - ControllerCallbackLink caller, int direction, int flags) { + ISessionControllerCallback caller, int direction, int flags) { int pid = Binder.getCallingPid(); int uid = Binder.getCallingUid(); final long token = Binder.clearCallingIdentity(); @@ -1349,7 +1327,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { @Override public void setVolumeTo(String packageName, String opPackageName, - ControllerCallbackLink caller, int value, int flags) { + ISessionControllerCallback caller, int value, int flags) { int pid = Binder.getCallingPid(); int uid = Binder.getCallingUid(); final long token = Binder.clearCallingIdentity(); @@ -1362,117 +1340,117 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { } @Override - public void prepare(String packageName, ControllerCallbackLink caller) { + public void prepare(String packageName, ISessionControllerCallback caller) { mSessionCb.prepare(packageName, Binder.getCallingPid(), Binder.getCallingUid(), caller); } @Override - public void prepareFromMediaId(String packageName, ControllerCallbackLink caller, + public void prepareFromMediaId(String packageName, ISessionControllerCallback caller, String mediaId, Bundle extras) { mSessionCb.prepareFromMediaId(packageName, Binder.getCallingPid(), Binder.getCallingUid(), caller, mediaId, extras); } @Override - public void prepareFromSearch(String packageName, ControllerCallbackLink caller, + public void prepareFromSearch(String packageName, ISessionControllerCallback caller, String query, Bundle extras) { mSessionCb.prepareFromSearch(packageName, Binder.getCallingPid(), Binder.getCallingUid(), caller, query, extras); } @Override - public void prepareFromUri(String packageName, ControllerCallbackLink caller, + public void prepareFromUri(String packageName, ISessionControllerCallback caller, Uri uri, Bundle extras) { mSessionCb.prepareFromUri(packageName, Binder.getCallingPid(), Binder.getCallingUid(), caller, uri, extras); } @Override - public void play(String packageName, ControllerCallbackLink caller) { + public void play(String packageName, ISessionControllerCallback caller) { mSessionCb.play(packageName, Binder.getCallingPid(), Binder.getCallingUid(), caller); } @Override - public void playFromMediaId(String packageName, ControllerCallbackLink caller, + public void playFromMediaId(String packageName, ISessionControllerCallback caller, String mediaId, Bundle extras) { mSessionCb.playFromMediaId(packageName, Binder.getCallingPid(), Binder.getCallingUid(), caller, mediaId, extras); } @Override - public void playFromSearch(String packageName, ControllerCallbackLink caller, + public void playFromSearch(String packageName, ISessionControllerCallback caller, String query, Bundle extras) { mSessionCb.playFromSearch(packageName, Binder.getCallingPid(), Binder.getCallingUid(), caller, query, extras); } @Override - public void playFromUri(String packageName, ControllerCallbackLink caller, + public void playFromUri(String packageName, ISessionControllerCallback caller, Uri uri, Bundle extras) { mSessionCb.playFromUri(packageName, Binder.getCallingPid(), Binder.getCallingUid(), caller, uri, extras); } @Override - public void skipToQueueItem(String packageName, ControllerCallbackLink caller, + public void skipToQueueItem(String packageName, ISessionControllerCallback caller, long id) { mSessionCb.skipToTrack(packageName, Binder.getCallingPid(), Binder.getCallingUid(), caller, id); } @Override - public void pause(String packageName, ControllerCallbackLink caller) { + public void pause(String packageName, ISessionControllerCallback caller) { mSessionCb.pause(packageName, Binder.getCallingPid(), Binder.getCallingUid(), caller); } @Override - public void stop(String packageName, ControllerCallbackLink caller) { + public void stop(String packageName, ISessionControllerCallback caller) { mSessionCb.stop(packageName, Binder.getCallingPid(), Binder.getCallingUid(), caller); } @Override - public void next(String packageName, ControllerCallbackLink caller) { + public void next(String packageName, ISessionControllerCallback caller) { mSessionCb.next(packageName, Binder.getCallingPid(), Binder.getCallingUid(), caller); } @Override - public void previous(String packageName, ControllerCallbackLink caller) { + public void previous(String packageName, ISessionControllerCallback caller) { mSessionCb.previous(packageName, Binder.getCallingPid(), Binder.getCallingUid(), caller); } @Override - public void fastForward(String packageName, ControllerCallbackLink caller) { + public void fastForward(String packageName, ISessionControllerCallback caller) { mSessionCb.fastForward(packageName, Binder.getCallingPid(), Binder.getCallingUid(), caller); } @Override - public void rewind(String packageName, ControllerCallbackLink caller) { + public void rewind(String packageName, ISessionControllerCallback caller) { mSessionCb.rewind(packageName, Binder.getCallingPid(), Binder.getCallingUid(), caller); } @Override - public void seekTo(String packageName, ControllerCallbackLink caller, long pos) { + public void seekTo(String packageName, ISessionControllerCallback caller, long pos) { mSessionCb.seekTo(packageName, Binder.getCallingPid(), Binder.getCallingUid(), caller, pos); } @Override - public void rate(String packageName, ControllerCallbackLink caller, Rating rating) { + public void rate(String packageName, ISessionControllerCallback caller, Rating rating) { mSessionCb.rate(packageName, Binder.getCallingPid(), Binder.getCallingUid(), caller, rating); } @Override - public void setPlaybackSpeed(String packageName, ControllerCallbackLink caller, + public void setPlaybackSpeed(String packageName, ISessionControllerCallback caller, float speed) { mSessionCb.setPlaybackSpeed(packageName, Binder.getCallingPid(), Binder.getCallingUid(), caller, speed); } @Override - public void sendCustomAction(String packageName, ControllerCallbackLink caller, + public void sendCustomAction(String packageName, ISessionControllerCallback caller, String action, Bundle args) { mSessionCb.sendCustomAction(packageName, Binder.getCallingPid(), Binder.getCallingUid(), caller, action, args); @@ -1515,12 +1493,12 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { } } - private class ControllerCallbackLinkHolder { - private final ControllerCallbackLink mCallback; + private class ISessionControllerCallbackHolder { + private final ISessionControllerCallback mCallback; private final String mPackageName; private final int mUid; - ControllerCallbackLinkHolder(ControllerCallbackLink callback, String packageName, + ISessionControllerCallbackHolder(ISessionControllerCallback callback, String packageName, int uid) { mCallback = callback; mPackageName = packageName;