443 lines
17 KiB
Java
443 lines
17 KiB
Java
package android.support.v4.media.session;
|
|
|
|
import android.content.Context;
|
|
import android.os.Build;
|
|
import android.os.Bundle;
|
|
import android.os.Handler;
|
|
import android.os.IBinder;
|
|
import android.os.Message;
|
|
import android.os.RemoteException;
|
|
import android.os.ResultReceiver;
|
|
import android.support.v4.media.MediaMetadataCompat;
|
|
import android.support.v4.media.session.IMediaControllerCallback;
|
|
import android.support.v4.media.session.IMediaSession;
|
|
import android.support.v4.media.session.MediaControllerCompatApi21;
|
|
import android.support.v4.media.session.MediaSessionCompat;
|
|
import android.util.Log;
|
|
import android.view.KeyEvent;
|
|
import androidx.core.app.BundleCompat;
|
|
import java.lang.ref.WeakReference;
|
|
import java.util.ArrayList;
|
|
import java.util.HashMap;
|
|
import java.util.HashSet;
|
|
import java.util.List;
|
|
|
|
/* loaded from: classes.dex */
|
|
public final class MediaControllerCompat {
|
|
private final MediaControllerImpl a;
|
|
|
|
public static abstract class Callback implements IBinder.DeathRecipient {
|
|
MessageHandler a;
|
|
IMediaControllerCallback b;
|
|
|
|
private class MessageHandler extends Handler {
|
|
}
|
|
|
|
public Callback() {
|
|
if (Build.VERSION.SDK_INT >= 21) {
|
|
MediaControllerCompatApi21.a(new StubApi21(this));
|
|
} else {
|
|
this.b = new StubCompat(this);
|
|
}
|
|
}
|
|
|
|
public void a() {
|
|
}
|
|
|
|
void a(int i, Object obj, Bundle bundle) {
|
|
MessageHandler messageHandler = this.a;
|
|
if (messageHandler != null) {
|
|
Message obtainMessage = messageHandler.obtainMessage(i, obj);
|
|
obtainMessage.setData(bundle);
|
|
obtainMessage.sendToTarget();
|
|
}
|
|
}
|
|
|
|
public void a(Bundle bundle) {
|
|
}
|
|
|
|
public void a(MediaMetadataCompat mediaMetadataCompat) {
|
|
}
|
|
|
|
public void a(PlaybackInfo playbackInfo) {
|
|
}
|
|
|
|
public void a(PlaybackStateCompat playbackStateCompat) {
|
|
}
|
|
|
|
public void a(CharSequence charSequence) {
|
|
}
|
|
|
|
public void a(String str, Bundle bundle) {
|
|
}
|
|
|
|
public void a(List<MediaSessionCompat.QueueItem> list) {
|
|
}
|
|
|
|
@Override // android.os.IBinder.DeathRecipient
|
|
public void binderDied() {
|
|
a(8, null, null);
|
|
}
|
|
|
|
private static class StubApi21 implements MediaControllerCompatApi21.Callback {
|
|
private final WeakReference<Callback> a;
|
|
|
|
StubApi21(Callback callback) {
|
|
this.a = new WeakReference<>(callback);
|
|
}
|
|
|
|
@Override // android.support.v4.media.session.MediaControllerCompatApi21.Callback
|
|
public void a(String str, Bundle bundle) {
|
|
Callback callback = this.a.get();
|
|
if (callback != null) {
|
|
if (callback.b == null || Build.VERSION.SDK_INT >= 23) {
|
|
callback.a(str, bundle);
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override // android.support.v4.media.session.MediaControllerCompatApi21.Callback
|
|
public void b() {
|
|
Callback callback = this.a.get();
|
|
if (callback != null) {
|
|
callback.a();
|
|
}
|
|
}
|
|
|
|
@Override // android.support.v4.media.session.MediaControllerCompatApi21.Callback
|
|
public void b(Object obj) {
|
|
Callback callback = this.a.get();
|
|
if (callback == null || callback.b != null) {
|
|
return;
|
|
}
|
|
callback.a(PlaybackStateCompat.fromPlaybackState(obj));
|
|
}
|
|
|
|
@Override // android.support.v4.media.session.MediaControllerCompatApi21.Callback
|
|
public void a(Object obj) {
|
|
Callback callback = this.a.get();
|
|
if (callback != null) {
|
|
callback.a(MediaMetadataCompat.fromMediaMetadata(obj));
|
|
}
|
|
}
|
|
|
|
@Override // android.support.v4.media.session.MediaControllerCompatApi21.Callback
|
|
public void a(List<?> list) {
|
|
Callback callback = this.a.get();
|
|
if (callback != null) {
|
|
callback.a(MediaSessionCompat.QueueItem.fromQueueItemList(list));
|
|
}
|
|
}
|
|
|
|
@Override // android.support.v4.media.session.MediaControllerCompatApi21.Callback
|
|
public void a(CharSequence charSequence) {
|
|
Callback callback = this.a.get();
|
|
if (callback != null) {
|
|
callback.a(charSequence);
|
|
}
|
|
}
|
|
|
|
@Override // android.support.v4.media.session.MediaControllerCompatApi21.Callback
|
|
public void a(Bundle bundle) {
|
|
Callback callback = this.a.get();
|
|
if (callback != null) {
|
|
callback.a(bundle);
|
|
}
|
|
}
|
|
|
|
@Override // android.support.v4.media.session.MediaControllerCompatApi21.Callback
|
|
public void a(int i, int i2, int i3, int i4, int i5) {
|
|
Callback callback = this.a.get();
|
|
if (callback != null) {
|
|
callback.a(new PlaybackInfo(i, i2, i3, i4, i5));
|
|
}
|
|
}
|
|
}
|
|
|
|
private static class StubCompat extends IMediaControllerCallback.Stub {
|
|
private final WeakReference<Callback> a;
|
|
|
|
StubCompat(Callback callback) {
|
|
this.a = new WeakReference<>(callback);
|
|
}
|
|
|
|
@Override // android.support.v4.media.session.IMediaControllerCallback
|
|
public void a(PlaybackStateCompat playbackStateCompat) throws RemoteException {
|
|
Callback callback = this.a.get();
|
|
if (callback != null) {
|
|
callback.a(2, playbackStateCompat, null);
|
|
}
|
|
}
|
|
|
|
@Override // android.support.v4.media.session.IMediaControllerCallback
|
|
public void b() throws RemoteException {
|
|
Callback callback = this.a.get();
|
|
if (callback != null) {
|
|
callback.a(8, null, null);
|
|
}
|
|
}
|
|
|
|
@Override // android.support.v4.media.session.IMediaControllerCallback
|
|
public void c(String str, Bundle bundle) throws RemoteException {
|
|
Callback callback = this.a.get();
|
|
if (callback != null) {
|
|
callback.a(1, str, bundle);
|
|
}
|
|
}
|
|
|
|
@Override // android.support.v4.media.session.IMediaControllerCallback
|
|
public void c(boolean z) throws RemoteException {
|
|
}
|
|
|
|
@Override // android.support.v4.media.session.IMediaControllerCallback
|
|
public void f() throws RemoteException {
|
|
Callback callback = this.a.get();
|
|
if (callback != null) {
|
|
callback.a(13, null, null);
|
|
}
|
|
}
|
|
|
|
@Override // android.support.v4.media.session.IMediaControllerCallback
|
|
public void g(int i) throws RemoteException {
|
|
Callback callback = this.a.get();
|
|
if (callback != null) {
|
|
callback.a(9, Integer.valueOf(i), null);
|
|
}
|
|
}
|
|
|
|
@Override // android.support.v4.media.session.IMediaControllerCallback
|
|
public void h(int i) throws RemoteException {
|
|
Callback callback = this.a.get();
|
|
if (callback != null) {
|
|
callback.a(12, Integer.valueOf(i), null);
|
|
}
|
|
}
|
|
|
|
@Override // android.support.v4.media.session.IMediaControllerCallback
|
|
public void a(MediaMetadataCompat mediaMetadataCompat) throws RemoteException {
|
|
Callback callback = this.a.get();
|
|
if (callback != null) {
|
|
callback.a(3, mediaMetadataCompat, null);
|
|
}
|
|
}
|
|
|
|
@Override // android.support.v4.media.session.IMediaControllerCallback
|
|
public void b(boolean z) throws RemoteException {
|
|
Callback callback = this.a.get();
|
|
if (callback != null) {
|
|
callback.a(11, Boolean.valueOf(z), null);
|
|
}
|
|
}
|
|
|
|
@Override // android.support.v4.media.session.IMediaControllerCallback
|
|
public void a(List<MediaSessionCompat.QueueItem> list) throws RemoteException {
|
|
Callback callback = this.a.get();
|
|
if (callback != null) {
|
|
callback.a(5, list, null);
|
|
}
|
|
}
|
|
|
|
@Override // android.support.v4.media.session.IMediaControllerCallback
|
|
public void a(CharSequence charSequence) throws RemoteException {
|
|
Callback callback = this.a.get();
|
|
if (callback != null) {
|
|
callback.a(6, charSequence, null);
|
|
}
|
|
}
|
|
|
|
@Override // android.support.v4.media.session.IMediaControllerCallback
|
|
public void a(Bundle bundle) throws RemoteException {
|
|
Callback callback = this.a.get();
|
|
if (callback != null) {
|
|
callback.a(7, bundle, null);
|
|
}
|
|
}
|
|
|
|
@Override // android.support.v4.media.session.IMediaControllerCallback
|
|
public void a(ParcelableVolumeInfo parcelableVolumeInfo) throws RemoteException {
|
|
Callback callback = this.a.get();
|
|
if (callback != null) {
|
|
callback.a(4, parcelableVolumeInfo != null ? new PlaybackInfo(parcelableVolumeInfo.volumeType, parcelableVolumeInfo.audioStream, parcelableVolumeInfo.controlType, parcelableVolumeInfo.maxVolume, parcelableVolumeInfo.currentVolume) : null, null);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
interface MediaControllerImpl {
|
|
boolean a(KeyEvent keyEvent);
|
|
}
|
|
|
|
static class MediaControllerImplApi21 implements MediaControllerImpl {
|
|
protected final Object a;
|
|
final Object b = new Object();
|
|
private final List<Callback> c = new ArrayList();
|
|
private HashMap<Callback, ExtraCallback> d = new HashMap<>();
|
|
final MediaSessionCompat.Token e;
|
|
|
|
private static class ExtraBinderRequestResultReceiver extends ResultReceiver {
|
|
private WeakReference<MediaControllerImplApi21> mMediaControllerImpl;
|
|
|
|
ExtraBinderRequestResultReceiver(MediaControllerImplApi21 mediaControllerImplApi21) {
|
|
super(null);
|
|
this.mMediaControllerImpl = new WeakReference<>(mediaControllerImplApi21);
|
|
}
|
|
|
|
@Override // android.os.ResultReceiver
|
|
protected void onReceiveResult(int i, Bundle bundle) {
|
|
MediaControllerImplApi21 mediaControllerImplApi21 = this.mMediaControllerImpl.get();
|
|
if (mediaControllerImplApi21 == null || bundle == null) {
|
|
return;
|
|
}
|
|
synchronized (mediaControllerImplApi21.b) {
|
|
mediaControllerImplApi21.e.setExtraBinder(IMediaSession.Stub.a(BundleCompat.a(bundle, "android.support.v4.media.session.EXTRA_BINDER")));
|
|
mediaControllerImplApi21.e.setSessionToken2Bundle(bundle.getBundle("android.support.v4.media.session.SESSION_TOKEN2_BUNDLE"));
|
|
mediaControllerImplApi21.a();
|
|
}
|
|
}
|
|
}
|
|
|
|
private static class ExtraCallback extends Callback.StubCompat {
|
|
ExtraCallback(Callback callback) {
|
|
super(callback);
|
|
}
|
|
|
|
@Override // android.support.v4.media.session.MediaControllerCompat.Callback.StubCompat, android.support.v4.media.session.IMediaControllerCallback
|
|
public void a(MediaMetadataCompat mediaMetadataCompat) throws RemoteException {
|
|
throw new AssertionError();
|
|
}
|
|
|
|
@Override // android.support.v4.media.session.MediaControllerCompat.Callback.StubCompat, android.support.v4.media.session.IMediaControllerCallback
|
|
public void b() throws RemoteException {
|
|
throw new AssertionError();
|
|
}
|
|
|
|
@Override // android.support.v4.media.session.MediaControllerCompat.Callback.StubCompat, android.support.v4.media.session.IMediaControllerCallback
|
|
public void a(List<MediaSessionCompat.QueueItem> list) throws RemoteException {
|
|
throw new AssertionError();
|
|
}
|
|
|
|
@Override // android.support.v4.media.session.MediaControllerCompat.Callback.StubCompat, android.support.v4.media.session.IMediaControllerCallback
|
|
public void a(CharSequence charSequence) throws RemoteException {
|
|
throw new AssertionError();
|
|
}
|
|
|
|
@Override // android.support.v4.media.session.MediaControllerCompat.Callback.StubCompat, android.support.v4.media.session.IMediaControllerCallback
|
|
public void a(Bundle bundle) throws RemoteException {
|
|
throw new AssertionError();
|
|
}
|
|
|
|
@Override // android.support.v4.media.session.MediaControllerCompat.Callback.StubCompat, android.support.v4.media.session.IMediaControllerCallback
|
|
public void a(ParcelableVolumeInfo parcelableVolumeInfo) throws RemoteException {
|
|
throw new AssertionError();
|
|
}
|
|
}
|
|
|
|
public MediaControllerImplApi21(Context context, MediaSessionCompat.Token token) throws RemoteException {
|
|
this.e = token;
|
|
this.a = MediaControllerCompatApi21.a(context, this.e.getToken());
|
|
if (this.a == null) {
|
|
throw new RemoteException();
|
|
}
|
|
if (this.e.getExtraBinder() == null) {
|
|
b();
|
|
}
|
|
}
|
|
|
|
private void b() {
|
|
a("android.support.v4.media.session.command.GET_EXTRA_BINDER", null, new ExtraBinderRequestResultReceiver(this));
|
|
}
|
|
|
|
@Override // android.support.v4.media.session.MediaControllerCompat.MediaControllerImpl
|
|
public boolean a(KeyEvent keyEvent) {
|
|
return MediaControllerCompatApi21.a(this.a, keyEvent);
|
|
}
|
|
|
|
public void a(String str, Bundle bundle, ResultReceiver resultReceiver) {
|
|
MediaControllerCompatApi21.a(this.a, str, bundle, resultReceiver);
|
|
}
|
|
|
|
void a() {
|
|
if (this.e.getExtraBinder() == null) {
|
|
return;
|
|
}
|
|
for (Callback callback : this.c) {
|
|
ExtraCallback extraCallback = new ExtraCallback(callback);
|
|
this.d.put(callback, extraCallback);
|
|
callback.b = extraCallback;
|
|
try {
|
|
this.e.getExtraBinder().a(extraCallback);
|
|
callback.a(13, null, null);
|
|
} catch (RemoteException e) {
|
|
Log.e("MediaControllerCompat", "Dead object in registerCallback.", e);
|
|
}
|
|
}
|
|
this.c.clear();
|
|
}
|
|
}
|
|
|
|
static class MediaControllerImplApi23 extends MediaControllerImplApi21 {
|
|
public MediaControllerImplApi23(Context context, MediaSessionCompat.Token token) throws RemoteException {
|
|
super(context, token);
|
|
}
|
|
}
|
|
|
|
static class MediaControllerImplApi24 extends MediaControllerImplApi23 {
|
|
public MediaControllerImplApi24(Context context, MediaSessionCompat.Token token) throws RemoteException {
|
|
super(context, token);
|
|
}
|
|
}
|
|
|
|
static class MediaControllerImplBase implements MediaControllerImpl {
|
|
private IMediaSession a;
|
|
|
|
public MediaControllerImplBase(MediaSessionCompat.Token token) {
|
|
this.a = IMediaSession.Stub.a((IBinder) token.getToken());
|
|
}
|
|
|
|
@Override // android.support.v4.media.session.MediaControllerCompat.MediaControllerImpl
|
|
public boolean a(KeyEvent keyEvent) {
|
|
if (keyEvent == null) {
|
|
throw new IllegalArgumentException("event may not be null.");
|
|
}
|
|
try {
|
|
this.a.a(keyEvent);
|
|
return false;
|
|
} catch (RemoteException e) {
|
|
Log.e("MediaControllerCompat", "Dead object in dispatchMediaButtonEvent.", e);
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
|
|
public static final class PlaybackInfo {
|
|
PlaybackInfo(int i, int i2, int i3, int i4, int i5) {
|
|
}
|
|
}
|
|
|
|
public MediaControllerCompat(Context context, MediaSessionCompat.Token token) throws RemoteException {
|
|
new HashSet();
|
|
if (token == null) {
|
|
throw new IllegalArgumentException("sessionToken must not be null");
|
|
}
|
|
int i = Build.VERSION.SDK_INT;
|
|
if (i >= 24) {
|
|
this.a = new MediaControllerImplApi24(context, token);
|
|
return;
|
|
}
|
|
if (i >= 23) {
|
|
this.a = new MediaControllerImplApi23(context, token);
|
|
} else if (i >= 21) {
|
|
this.a = new MediaControllerImplApi21(context, token);
|
|
} else {
|
|
this.a = new MediaControllerImplBase(token);
|
|
}
|
|
}
|
|
|
|
public boolean a(KeyEvent keyEvent) {
|
|
if (keyEvent != null) {
|
|
return this.a.a(keyEvent);
|
|
}
|
|
throw new IllegalArgumentException("KeyEvent may not be null");
|
|
}
|
|
}
|