Revert "Introduce ControllerCallbackLink"

This reverts commit e521669b5d.

Reason for revert: Another CL will be uploaded which makes the APIs public, not @SystemApi.

Bug: 122169124
Change-Id: Ie9ed1067596fe1724879e81d768ac8252eda7841
This commit is contained in:
Hyundo Moon
2019-01-04 03:22:05 +00:00
parent fcaaba066a
commit 7053844db7
11 changed files with 245 additions and 555 deletions

View File

@@ -3163,34 +3163,6 @@ package android.media.audiopolicy {
package android.media.session {
public final class ControllerCallbackLink implements android.os.Parcelable {
ctor public ControllerCallbackLink(android.media.session.ControllerCallbackLink.CallbackStub);
method public android.os.IBinder asBinder();
method public int describeContents();
method public void notifyEvent(java.lang.String, android.os.Bundle);
method public void notifyExtrasChanged(android.os.Bundle);
method public void notifyMetadataChanged(android.media.MediaMetadata);
method public void notifyPlaybackStateChanged(android.media.session.PlaybackState);
method public void notifyQueueChanged(java.util.List<android.media.session.MediaSession.QueueItem>);
method public void notifyQueueTitleChanged(java.lang.CharSequence);
method public void notifySessionDestroyed();
method public void notifyVolumeInfoChanged(int, android.media.AudioAttributes, int, int, int);
method public void writeToParcel(android.os.Parcel, int);
field public static final android.os.Parcelable.Creator<android.media.session.ControllerCallbackLink> CREATOR;
}
public static abstract class ControllerCallbackLink.CallbackStub {
ctor public ControllerCallbackLink.CallbackStub();
method public void onEvent(java.lang.String, android.os.Bundle);
method public void onExtrasChanged(android.os.Bundle);
method public void onMetadataChanged(android.media.MediaMetadata);
method public void onPlaybackStateChanged(android.media.session.PlaybackState);
method public void onQueueChanged(java.util.List<android.media.session.MediaSession.QueueItem>);
method public void onQueueTitleChanged(java.lang.CharSequence);
method public void onSessionDestroyed();
method public void onVolumeInfoChanged(int, android.media.AudioAttributes, int, int, int);
}
public final class MediaSessionManager {
method public void setOnMediaKeyListener(android.media.session.MediaSessionManager.OnMediaKeyListener, android.os.Handler);
method public void setOnVolumeKeyLongPressListener(android.media.session.MediaSessionManager.OnVolumeKeyLongPressListener, android.os.Handler);

View File

@@ -19,12 +19,12 @@ package com.android.commands.media;
import android.app.ActivityManager;
import android.content.Context;
import android.media.AudioAttributes;
import android.content.pm.ParceledListSlice;
import android.media.MediaMetadata;
import android.media.session.ControllerCallbackLink;
import android.media.session.ISessionController;
import android.media.session.ISessionControllerCallback;
import android.media.session.ISessionManager;
import android.media.session.MediaSession.QueueItem;
import android.media.session.ParcelableVolumeInfo;
import android.media.session.PlaybackState;
import android.os.Bundle;
import android.os.HandlerThread;
@@ -178,7 +178,13 @@ public class Media extends BaseCommand {
KeyCharacterMap.VIRTUAL_KEYBOARD, 0, 0, InputDevice.SOURCE_KEYBOARD));
}
class ControllerCallbackStub extends ControllerCallbackLink.CallbackStub {
class ControllerMonitor extends ISessionControllerCallback.Stub {
private final ISessionController mController;
public ControllerMonitor(ISessionController controller) {
mController = controller;
}
@Override
public void onSessionDestroyed() {
System.out.println("onSessionDestroyed. Enter q to quit.");
@@ -202,37 +208,24 @@ public class Media extends BaseCommand {
}
@Override
public void onQueueChanged(List<QueueItem> queue) {
public void onQueueChanged(ParceledListSlice queue) throws RemoteException {
System.out.println("onQueueChanged, "
+ (queue == null ? "null queue" : " size=" + queue.size()));
+ (queue == null ? "null queue" : " size=" + queue.getList().size()));
}
@Override
public void onQueueTitleChanged(CharSequence title) {
public void onQueueTitleChanged(CharSequence title) throws RemoteException {
System.out.println("onQueueTitleChange " + title);
}
@Override
public void onExtrasChanged(Bundle extras) {
public void onExtrasChanged(Bundle extras) throws RemoteException {
System.out.println("onExtrasChanged " + extras);
}
@Override
public void onVolumeInfoChanged(int volumeType, AudioAttributes attrs, int controlType,
int maxVolume, int currentVolume) {
System.out.println("onVolumeInfoChanged " + "volumeType=" + volumeType + ", attrs="
+ attrs + ", controlType=" + controlType + ", maxVolume=" + maxVolume
+ ", currentVolume=" + currentVolume);
}
}
private class ControllerMonitor {
private final ISessionController mController;
private final ControllerCallbackLink mControllerCallbackLink;
ControllerMonitor(ISessionController controller) {
mController = controller;
mControllerCallbackLink = new ControllerCallbackLink(new ControllerCallbackStub());
public void onVolumeInfoChanged(ParcelableVolumeInfo info) throws RemoteException {
System.out.println("onVolumeInfoChanged " + info);
}
void printUsageMessage() {
@@ -251,7 +244,7 @@ public class Media extends BaseCommand {
@Override
protected void onLooperPrepared() {
try {
mController.registerCallbackListener(PACKAGE_NAME, mControllerCallbackLink);
mController.registerCallbackListener(PACKAGE_NAME, ControllerMonitor.this);
} catch (RemoteException e) {
System.out.println("Error registering monitor callback");
}
@@ -294,7 +287,7 @@ public class Media extends BaseCommand {
} finally {
cbThread.getLooper().quit();
try {
mController.unregisterCallbackListener(mControllerCallbackLink);
mController.unregisterCallbackListener(this);
} catch (Exception e) {
// ignoring
}

View File

@@ -1,18 +0,0 @@
/*
* Copyright 2018 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;

View File

@@ -1,240 +0,0 @@
/*
* Copyright 2018 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.annotation.NonNull;
import android.annotation.SystemApi;
import android.media.AudioAttributes;
import android.media.MediaMetadata;
import android.media.session.MediaSession.QueueItem;
import android.os.Bundle;
import android.os.IBinder;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.RemoteException;
import java.util.List;
/**
* Handles incoming commands to {@link MediaController.Callback}.
* @hide
*/
@SystemApi
public final class ControllerCallbackLink implements Parcelable {
CallbackStub mCallbackStub;
ISessionControllerCallback mIControllerCallback;
/**
* Creator for stub (Callee)
*/
public ControllerCallbackLink(@NonNull CallbackStub callbackStub) {
mCallbackStub = callbackStub;
mIControllerCallback = new CallbackStubProxy();
}
/**
* Creator for interface (Caller)
*/
ControllerCallbackLink(Parcel in) {
mCallbackStub = null;
mIControllerCallback = ISessionControllerCallback.Stub.asInterface(in.readStrongBinder());
}
/** Interface method for ISessionControllerCallback.notifySessionDestroyed */
public void notifySessionDestroyed() {
try {
mIControllerCallback.notifySessionDestroyed();
} catch (RemoteException e) {
throw new RuntimeException(e);
}
}
/** Interface method for ISessionControllerCallback.notifyEvent */
public void notifyEvent(String event, Bundle extras) {
try {
mIControllerCallback.notifyEvent(event, extras);
} catch (RemoteException e) {
throw new RuntimeException(e);
}
}
/** Interface method for ISessionControllerCallback.notifyPlaybackStateChanged */
public void notifyPlaybackStateChanged(PlaybackState state) {
try {
mIControllerCallback.notifyPlaybackStateChanged(state);
} catch (RemoteException e) {
throw new RuntimeException(e);
}
}
/** Interface method for ISessionControllerCallback.notifyMetadataChanged */
public void notifyMetadataChanged(MediaMetadata metadata) {
try {
mIControllerCallback.notifyMetadataChanged(metadata);
} catch (RemoteException e) {
throw new RuntimeException(e);
}
}
/** Interface method for ISessionControllerCallback.notifyQueueChanged */
public void notifyQueueChanged(List<QueueItem> queue) {
try {
mIControllerCallback.notifyQueueChanged(queue);
} catch (RemoteException e) {
throw new RuntimeException(e);
}
}
/** Interface method for ISessionControllerCallback.notifyQueueTitleChanged */
public void notifyQueueTitleChanged(CharSequence title) {
try {
mIControllerCallback.notifyQueueTitleChanged(title);
} catch (RemoteException e) {
throw new RuntimeException(e);
}
}
/** Interface method for ISessionControllerCallback.notifyExtrasChanged */
public void notifyExtrasChanged(Bundle extras) {
try {
mIControllerCallback.notifyExtrasChanged(extras);
} catch (RemoteException e) {
throw new RuntimeException(e);
}
}
/** Interface method for ISessionControllerCallback.notifyVolumeInfoChanged */
public void notifyVolumeInfoChanged(int volumeType, AudioAttributes attrs, int controlType,
int maxVolume, int currentVolume) {
try {
mIControllerCallback.notifyVolumeInfoChanged(volumeType, attrs, controlType, maxVolume,
currentVolume);
} catch (RemoteException e) {
throw new RuntimeException(e);
}
}
/** Gets the binder */
public IBinder asBinder() {
return mIControllerCallback.asBinder();
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeStrongBinder(mIControllerCallback.asBinder());
}
public static final Parcelable.Creator<ControllerCallbackLink> CREATOR =
new Parcelable.Creator<ControllerCallbackLink>() {
@Override
public ControllerCallbackLink createFromParcel(Parcel in) {
return new ControllerCallbackLink(in);
}
@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(String event, Bundle extras) {
}
/** Stub method for ISessionControllerCallback.notifyPlaybackStateChanged */
public void onPlaybackStateChanged(PlaybackState state) {
}
/** Stub method for ISessionControllerCallback.notifyMetadataChanged */
public void onMetadataChanged(MediaMetadata metadata) {
}
/** Stub method for ISessionControllerCallback.notifyQueueChanged */
public void onQueueChanged(List<QueueItem> queue) {
}
/** Stub method for ISessionControllerCallback.notifyQueueTitleChanged */
public void onQueueTitleChanged(CharSequence title) {
}
/** Stub method for ISessionControllerCallback.notifyExtrasChanged */
public void onExtrasChanged(Bundle extras) {
}
/** Stub method for ISessionControllerCallback.notifyVolumeInfoChanged */
public void onVolumeInfoChanged(int volumeType, AudioAttributes attrs, int controlType,
int maxVolume, int currentVolume) {
}
}
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) {
mCallbackStub.onPlaybackStateChanged(state);
}
@Override
public void notifyMetadataChanged(MediaMetadata metadata) {
mCallbackStub.onMetadataChanged(metadata);
}
@Override
public void notifyQueueChanged(List<QueueItem> queue) {
mCallbackStub.onQueueChanged(queue);
}
@Override
public void notifyQueueTitleChanged(CharSequence title) {
mCallbackStub.onQueueTitleChanged(title);
}
@Override
public void notifyExtrasChanged(Bundle extras) {
mCallbackStub.onExtrasChanged(extras);
}
@Override
public void notifyVolumeInfoChanged(int volumeType, AudioAttributes attrs, int controlType,
int maxVolume, int currentVolume) {
mCallbackStub.onVolumeInfoChanged(volumeType, attrs, controlType, maxVolume,
currentVolume);
}
}
}

View File

@@ -16,6 +16,7 @@
package android.media.session;
import android.app.PendingIntent;
import android.content.pm.ParceledListSlice;
import android.media.AudioAttributes;
import android.media.MediaMetadata;
import android.media.session.ISessionController;
@@ -40,7 +41,7 @@ interface ISession {
// These commands are for the TransportPerformer
void setMetadata(in MediaMetadata metadata, long duration, String metadataDescription);
void setPlaybackState(in PlaybackState state);
void setQueue(in List<MediaSession.QueueItem> queue);
void setQueue(in ParceledListSlice queue);
void setQueueTitle(CharSequence title);
void setExtras(in Bundle extras);
void setRatingType(int type);

View File

@@ -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,46 +26,46 @@ 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 TransportPerformer
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);
void onPrepareFromUri(String packageName, int pid, int uid, in ControllerCallbackLink caller,
ISessionControllerCallback caller, String query, in Bundle extras);
void onPrepareFromUri(String packageName, int pid, int uid, ISessionControllerCallback caller,
in Uri uri, in Bundle extras);
void onPlay(String packageName, int pid, int uid, in ControllerCallbackLink caller);
void onPlayFromMediaId(String packageName, int pid, int uid, in ControllerCallbackLink caller,
void onPlay(String packageName, int pid, int uid, ISessionControllerCallback caller);
void onPlayFromMediaId(String packageName, int pid, int uid, ISessionControllerCallback caller,
String mediaId, in Bundle extras);
void onPlayFromSearch(String packageName, int pid, int uid, in ControllerCallbackLink caller,
void onPlayFromSearch(String packageName, int pid, int uid, ISessionControllerCallback caller,
String query, in Bundle extras);
void onPlayFromUri(String packageName, int pid, int uid, in ControllerCallbackLink caller,
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 onCustomAction(String packageName, int pid, int uid, in ControllerCallbackLink caller,
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);
}

View File

@@ -17,9 +17,10 @@ package android.media.session;
import android.app.PendingIntent;
import android.content.Intent;
import android.content.pm.ParceledListSlice;
import android.media.MediaMetadata;
import android.media.Rating;
import android.media.session.ControllerCallbackLink;
import android.media.session.ISessionControllerCallback;
import android.media.session.MediaSession;
import android.media.session.ParcelableVolumeInfo;
import android.media.session.PlaybackState;
@@ -35,52 +36,53 @@ import java.util.List;
* @hide
*/
interface ISessionController {
void sendCommand(String packageName, in ControllerCallbackLink caller,
void sendCommand(String packageName, ISessionControllerCallback caller,
String command, in Bundle args, in ResultReceiver cb);
boolean sendMediaButton(String packageName, in ControllerCallbackLink caller,
boolean sendMediaButton(String packageName, ISessionControllerCallback caller,
boolean asSystemService, in KeyEvent mediaButton);
void registerCallbackListener(String packageName, in ControllerCallbackLink cb);
void unregisterCallbackListener(in ControllerCallbackLink cb);
void registerCallbackListener(String packageName, ISessionControllerCallback cb);
void unregisterCallbackListener(ISessionControllerCallback cb);
boolean isTransportControlEnabled();
String getPackageName();
String getTag();
PendingIntent getLaunchPendingIntent();
long getFlags();
ParcelableVolumeInfo getVolumeAttributes();
void adjustVolume(String packageName, String opPackageName, in ControllerCallbackLink caller,
boolean asSystemService, int direction, int flags);
void setVolumeTo(String packageName, String opPackageName, in ControllerCallbackLink caller,
void adjustVolume(String packageName, String opPackageName,
in ISessionControllerCallback caller, boolean asSystemService, 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, ISessionControllerCallback caller);
void prepareFromMediaId(String packageName, ISessionControllerCallback caller,
String mediaId, in Bundle extras);
void prepareFromSearch(String packageName, in ControllerCallbackLink caller,
void prepareFromSearch(String packageName, ISessionControllerCallback caller,
String string, in Bundle extras);
void prepareFromUri(String packageName, in ControllerCallbackLink caller,
void prepareFromUri(String packageName, 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, ISessionControllerCallback caller);
void playFromMediaId(String packageName, ISessionControllerCallback caller,
String mediaId, in Bundle extras);
void playFromSearch(String packageName, in ControllerCallbackLink caller,
void playFromSearch(String packageName, ISessionControllerCallback caller,
String string, in Bundle extras);
void playFromUri(String packageName, in ControllerCallbackLink caller,
void playFromUri(String packageName, 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 sendCustomAction(String packageName, in ControllerCallbackLink caller,
void skipToQueueItem(String packageName, ISessionControllerCallback caller, long id);
void pause(String packageName, ISessionControllerCallback caller);
void stop(String packageName, ISessionControllerCallback caller);
void next(String packageName, ISessionControllerCallback caller);
void previous(String packageName, ISessionControllerCallback caller);
void fastForward(String packageName, ISessionControllerCallback caller);
void rewind(String packageName, ISessionControllerCallback caller);
void seekTo(String packageName, ISessionControllerCallback caller, long pos);
void rate(String packageName, ISessionControllerCallback caller, in Rating rating);
void sendCustomAction(String packageName, ISessionControllerCallback caller,
String action, in Bundle args);
MediaMetadata getMetadata();
PlaybackState getPlaybackState();
List<MediaSession.QueueItem> getQueue();
ParceledListSlice getQueue();
CharSequence getQueueTitle();
Bundle getExtras();
int getRatingType();

View File

@@ -15,26 +15,25 @@
package android.media.session;
import android.media.AudioAttributes;
import android.content.pm.ParceledListSlice;
import android.media.MediaMetadata;
import android.media.session.MediaSession;
import android.media.session.ParcelableVolumeInfo;
import android.media.session.PlaybackState;
import android.media.session.MediaSession;
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 List<MediaSession.QueueItem> queue);
void notifyQueueTitleChanged(CharSequence title);
void notifyExtrasChanged(in Bundle extras);
void notifyVolumeInfoChanged(int volumeType, in AudioAttributes attrs, int controlType,
int maxVolume, int currentVolume);
void onPlaybackStateChanged(in PlaybackState state);
void onMetadataChanged(in MediaMetadata metadata);
void onQueueChanged(in ParceledListSlice queue);
void onQueueTitleChanged(CharSequence title);
void onExtrasChanged(in Bundle extras);
void onVolumeInfoChanged(in ParcelableVolumeInfo info);
}

View File

@@ -21,12 +21,12 @@ import android.annotation.Nullable;
import android.annotation.UnsupportedAppUsage;
import android.app.PendingIntent;
import android.content.Context;
import android.content.pm.ParceledListSlice;
import android.media.AudioAttributes;
import android.media.AudioManager;
import android.media.MediaMetadata;
import android.media.Rating;
import android.media.VolumeProvider;
import android.media.session.MediaSession.QueueItem;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
@@ -70,8 +70,7 @@ public final class MediaController {
private final MediaSession.Token mToken;
private final Context mContext;
private final ControllerCallbackLink mCbStub =
new ControllerCallbackLink(new CallbackStub(this));
private final CallbackStub mCbStub = new CallbackStub(this);
private final ArrayList<MessageHandler> mCallbacks = new ArrayList<MessageHandler>();
private final Object mLock = new Object();
@@ -250,7 +249,10 @@ public final class MediaController {
*/
public @Nullable List<MediaSession.QueueItem> getQueue() {
try {
return mSessionBinder.getQueue();
ParceledListSlice queue = mSessionBinder.getQueue();
if (queue != null) {
return queue.getList();
}
} catch (RemoteException e) {
Log.wtf(TAG, "Error calling getQueue.", e);
}
@@ -1070,10 +1072,10 @@ public final class MediaController {
}
}
private static final class CallbackStub extends ControllerCallbackLink.CallbackStub {
private final static class CallbackStub extends ISessionControllerCallback.Stub {
private final WeakReference<MediaController> mController;
CallbackStub(MediaController controller) {
public CallbackStub(MediaController controller) {
mController = new WeakReference<MediaController>(controller);
}
@@ -1110,7 +1112,9 @@ public final class MediaController {
}
@Override
public void onQueueChanged(List<QueueItem> queue) {
public void onQueueChanged(ParceledListSlice parceledQueue) {
List<MediaSession.QueueItem> queue = parceledQueue == null ? null : parceledQueue
.getList();
MediaController controller = mController.get();
if (controller != null) {
controller.postMessage(MSG_UPDATE_QUEUE, queue, null);
@@ -1134,15 +1138,15 @@ public final class MediaController {
}
@Override
public void onVolumeInfoChanged(int volumeType, AudioAttributes attrs, int controlType,
int maxVolume, int currentVolume) {
public void onVolumeInfoChanged(ParcelableVolumeInfo pvi) {
MediaController controller = mController.get();
if (controller != null) {
PlaybackInfo info = new PlaybackInfo(volumeType, attrs, controlType, maxVolume,
currentVolume);
PlaybackInfo info = new PlaybackInfo(pvi.volumeType, pvi.audioAttrs,
pvi.controlType, pvi.maxVolume, pvi.currentVolume);
controller.postMessage(MSG_UPDATE_VOLUME, info, null);
}
}
}
private final static class MessageHandler extends Handler {

View File

@@ -24,6 +24,7 @@ import android.app.Activity;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ParceledListSlice;
import android.media.AudioAttributes;
import android.media.MediaDescription;
import android.media.MediaMetadata;
@@ -466,7 +467,7 @@ public final class MediaSession {
*/
public void setQueue(@Nullable List<QueueItem> queue) {
try {
mBinder.setQueue(queue);
mBinder.setQueue(queue == null ? null : new ParceledListSlice<QueueItem>(queue));
} catch (RemoteException e) {
Log.wtf("Dead object in setQueue.", e);
}
@@ -1070,14 +1071,14 @@ public final class MediaSession {
}
private static RemoteUserInfo createRemoteUserInfo(String packageName, int pid, int uid,
ControllerCallbackLink caller) {
ISessionControllerCallback caller) {
return new RemoteUserInfo(packageName, pid, uid,
caller != null ? caller.asBinder() : null);
}
@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, caller),
@@ -1103,7 +1104,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, caller),
@@ -1113,7 +1114,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, caller));
@@ -1122,7 +1123,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) {
@@ -1133,7 +1134,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) {
@@ -1144,7 +1145,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, caller),
@@ -1154,7 +1155,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, caller));
@@ -1163,7 +1164,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) {
@@ -1174,7 +1175,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) {
@@ -1185,7 +1186,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, caller),
@@ -1195,7 +1196,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, caller), id);
@@ -1204,7 +1205,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, caller));
@@ -1213,7 +1214,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, caller));
@@ -1222,7 +1223,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, caller));
@@ -1231,7 +1232,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, caller));
@@ -1240,7 +1241,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, caller));
@@ -1249,7 +1250,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, caller));
@@ -1258,7 +1259,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, caller), pos);
@@ -1266,7 +1267,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) {
@@ -1276,7 +1277,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, caller),
@@ -1286,7 +1287,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, caller),
@@ -1296,7 +1297,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, caller),

View File

@@ -19,6 +19,7 @@ package com.android.server.media;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ParceledListSlice;
import android.media.AudioAttributes;
import android.media.AudioManager;
import android.media.AudioManagerInternal;
@@ -26,14 +27,13 @@ import android.media.AudioSystem;
import android.media.MediaMetadata;
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;
import android.media.session.MediaSession.QueueItem;
import android.media.session.ParcelableVolumeInfo;
import android.media.session.PlaybackState;
import android.net.Uri;
@@ -56,7 +56,6 @@ import com.android.server.LocalServices;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
/**
* This is the system implementation of a Session. Apps will interact with the
@@ -86,7 +85,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient {
private final Context mContext;
private final Object mLock = new Object();
private final ArrayList<ControllerCallbackLinkHolder> mControllerCallbackHolders =
private final ArrayList<ISessionControllerCallbackHolder> mControllerCallbackHolders =
new ArrayList<>();
private long mFlags;
@@ -99,7 +98,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient {
// may result in throwing an exception.
private MediaMetadata mMetadata;
private PlaybackState mPlaybackState;
private List<QueueItem> mQueue;
private ParceledListSlice mQueue;
private CharSequence mQueueTitle;
private int mRatingType;
// End TransportPerformer fields
@@ -251,7 +250,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)) {
@@ -293,7 +292,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;
@@ -470,7 +469,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient {
+ ", max=" + mMaxVolume + ", current=" + mCurrentVolume);
pw.println(indent + "metadata: " + mMetadataDescription);
pw.println(indent + "queueTitle=" + mQueueTitle + ", size="
+ (mQueue == null ? 0 : mQueue.size()));
+ (mQueue == null ? 0 : mQueue.getList().size()));
}
@Override
@@ -520,7 +519,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);
}
@@ -531,18 +530,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("Removed dead callback in pushPlaybackStateUpdate",
holder, e);
} catch (RemoteException e) {
logCallbackException("unexpected exception in pushPlaybackStateUpdate",
holder, e);
}
}
}
@@ -554,18 +551,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) {
logCallbackException("Removing dead callback in pushMetadataUpdate", holder, e);
mControllerCallbackHolders.remove(i);
} catch (RemoteException e) {
logCallbackException("unexpected exception in pushMetadataUpdate", holder, e);
}
}
}
@@ -577,17 +570,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.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);
} catch (DeadObjectException e) {
mControllerCallbackHolders.remove(i);
logCallbackException("Removed dead callback in pushQueueUpdate", holder, e);
} catch (RemoteException e) {
logCallbackException("unexpected exception in pushQueueUpdate", holder, e);
}
}
}
@@ -599,18 +589,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.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("Removed dead callback in pushQueueTitleUpdate",
holder, e);
} catch (RemoteException e) {
logCallbackException("unexpected exception in pushQueueTitleUpdate",
holder, e);
}
}
}
@@ -622,17 +610,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("Removed dead callback in pushExtrasUpdate", holder, e);
} catch (RemoteException e) {
logCallbackException("unexpected exception in pushExtrasUpdate", holder, e);
}
}
}
@@ -645,18 +630,14 @@ public class MediaSessionRecord implements IBinder.DeathRecipient {
}
ParcelableVolumeInfo info = mController.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.volumeType, info.audioAttrs,
info.controlType, info.maxVolume, info.currentVolume);
} 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);
}
}
}
@@ -668,16 +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.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);
}
}
}
@@ -691,18 +670,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.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) {
logCallbackException("Removing dead callback in pushEvent", holder, e);
mControllerCallbackHolders.remove(i);
} catch (RemoteException e) {
logCallbackException("unexpected exception in pushEvent", holder, e);
}
}
// After notifying clear all listeners
@@ -742,7 +717,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient {
return result == null ? state : result;
}
private int getControllerHolderIndexForCb(ControllerCallbackLink cb) {
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.asBinder())) {
@@ -869,7 +844,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient {
}
@Override
public void setQueue(List<QueueItem> queue) {
public void setQueue(ParceledListSlice queue) {
synchronized (mLock) {
mQueue = queue;
}
@@ -970,7 +945,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) {
@@ -988,7 +963,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) {
@@ -997,7 +972,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);
@@ -1007,7 +982,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) {
@@ -1016,7 +991,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) {
@@ -1025,7 +1000,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) {
@@ -1034,7 +1009,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) {
@@ -1042,7 +1017,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) {
@@ -1051,7 +1026,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) {
@@ -1060,7 +1035,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) {
@@ -1069,7 +1044,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) {
@@ -1078,7 +1053,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) {
@@ -1086,7 +1061,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) {
@@ -1094,7 +1069,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) {
@@ -1102,7 +1077,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) {
@@ -1111,7 +1086,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) {
@@ -1120,7 +1095,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) {
@@ -1129,7 +1104,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) {
@@ -1137,7 +1112,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);
@@ -1146,7 +1121,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);
@@ -1156,7 +1131,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(),
@@ -1170,7 +1145,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) {
@@ -1187,34 +1162,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,
boolean asSystemService, KeyEvent keyEvent) {
return mSessionCb.sendMediaButton(packageName, Binder.getCallingPid(),
Binder.getCallingUid(), cb, asSystemService, keyEvent);
}
@Override
public void registerCallbackListener(String packageName, ControllerCallbackLink cb) {
public void registerCallbackListener(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"
@@ -1225,7 +1200,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient {
}
@Override
public void unregisterCallbackListener(ControllerCallbackLink cb) {
public void unregisterCallbackListener(ISessionControllerCallback cb) {
synchronized (mLock) {
int index = getControllerHolderIndexForCb(cb);
if (index != -1) {
@@ -1279,7 +1254,8 @@ public class MediaSessionRecord implements IBinder.DeathRecipient {
@Override
public void adjustVolume(String packageName, String opPackageName,
ControllerCallbackLink caller, boolean asSystemService, int direction, int flags) {
ISessionControllerCallback caller, boolean asSystemService, int direction,
int flags) {
int pid = Binder.getCallingPid();
int uid = Binder.getCallingUid();
final long token = Binder.clearCallingIdentity();
@@ -1293,7 +1269,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();
@@ -1306,110 +1282,110 @@ 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 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);
@@ -1428,7 +1404,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient {
}
@Override
public List<QueueItem> getQueue() {
public ParceledListSlice getQueue() {
synchronized (mLock) {
return mQueue;
}
@@ -1457,12 +1433,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;