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:
@@ -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);
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user