package android.support.v4.media.session; import android.annotation.SuppressLint; import android.app.PendingIntent; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.media.AudioAttributes; import android.media.AudioManager; import android.media.MediaDescription; import android.media.MediaMetadata; import android.media.Rating; import android.media.RemoteControlClient; import android.media.VolumeProvider; import android.media.session.MediaSession; import android.media.session.MediaSessionManager; import android.media.session.PlaybackState; import android.net.Uri; import android.os.BadParcelableException; import android.os.Binder; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.IBinder; import android.os.Looper; import android.os.Message; import android.os.Parcel; import android.os.Parcelable; import android.os.RemoteCallbackList; import android.os.RemoteException; import android.os.ResultReceiver; import android.os.SystemClock; import android.support.v4.media.MediaDescriptionCompat; import android.support.v4.media.MediaMetadataCompat; import android.support.v4.media.RatingCompat; import android.support.v4.media.session.IMediaSession; import android.support.v4.media.session.PlaybackStateCompat; import android.text.TextUtils; import android.util.Log; import android.util.TypedValue; import android.view.KeyEvent; import android.view.ViewConfiguration; import androidx.annotation.GuardedBy; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; import androidx.annotation.RestrictTo; import androidx.core.app.BundleCompat; import androidx.media.MediaSessionManager; import androidx.media.VolumeProviderCompat; import androidx.media.session.MediaButtonReceiver; import androidx.versionedparcelable.ParcelUtils; import androidx.versionedparcelable.VersionedParcelable; import com.mbridge.msdk.playercommon.exoplayer2.extractor.ts.TsExtractor; import java.lang.ref.WeakReference; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; import java.util.List; /* loaded from: classes.dex */ public class MediaSessionCompat { @RestrictTo({RestrictTo.Scope.LIBRARY}) public static final String ACTION_ARGUMENT_CAPTIONING_ENABLED = "android.support.v4.media.session.action.ARGUMENT_CAPTIONING_ENABLED"; @RestrictTo({RestrictTo.Scope.LIBRARY}) public static final String ACTION_ARGUMENT_EXTRAS = "android.support.v4.media.session.action.ARGUMENT_EXTRAS"; @RestrictTo({RestrictTo.Scope.LIBRARY}) public static final String ACTION_ARGUMENT_MEDIA_ID = "android.support.v4.media.session.action.ARGUMENT_MEDIA_ID"; @RestrictTo({RestrictTo.Scope.LIBRARY}) public static final String ACTION_ARGUMENT_PLAYBACK_SPEED = "android.support.v4.media.session.action.ARGUMENT_PLAYBACK_SPEED"; @RestrictTo({RestrictTo.Scope.LIBRARY}) public static final String ACTION_ARGUMENT_QUERY = "android.support.v4.media.session.action.ARGUMENT_QUERY"; @RestrictTo({RestrictTo.Scope.LIBRARY}) public static final String ACTION_ARGUMENT_RATING = "android.support.v4.media.session.action.ARGUMENT_RATING"; @RestrictTo({RestrictTo.Scope.LIBRARY}) public static final String ACTION_ARGUMENT_REPEAT_MODE = "android.support.v4.media.session.action.ARGUMENT_REPEAT_MODE"; @RestrictTo({RestrictTo.Scope.LIBRARY}) public static final String ACTION_ARGUMENT_SHUFFLE_MODE = "android.support.v4.media.session.action.ARGUMENT_SHUFFLE_MODE"; @RestrictTo({RestrictTo.Scope.LIBRARY}) public static final String ACTION_ARGUMENT_URI = "android.support.v4.media.session.action.ARGUMENT_URI"; public static final String ACTION_FLAG_AS_INAPPROPRIATE = "android.support.v4.media.session.action.FLAG_AS_INAPPROPRIATE"; public static final String ACTION_FOLLOW = "android.support.v4.media.session.action.FOLLOW"; @RestrictTo({RestrictTo.Scope.LIBRARY}) public static final String ACTION_PLAY_FROM_URI = "android.support.v4.media.session.action.PLAY_FROM_URI"; @RestrictTo({RestrictTo.Scope.LIBRARY}) public static final String ACTION_PREPARE = "android.support.v4.media.session.action.PREPARE"; @RestrictTo({RestrictTo.Scope.LIBRARY}) public static final String ACTION_PREPARE_FROM_MEDIA_ID = "android.support.v4.media.session.action.PREPARE_FROM_MEDIA_ID"; @RestrictTo({RestrictTo.Scope.LIBRARY}) public static final String ACTION_PREPARE_FROM_SEARCH = "android.support.v4.media.session.action.PREPARE_FROM_SEARCH"; @RestrictTo({RestrictTo.Scope.LIBRARY}) public static final String ACTION_PREPARE_FROM_URI = "android.support.v4.media.session.action.PREPARE_FROM_URI"; @RestrictTo({RestrictTo.Scope.LIBRARY}) public static final String ACTION_SET_CAPTIONING_ENABLED = "android.support.v4.media.session.action.SET_CAPTIONING_ENABLED"; @RestrictTo({RestrictTo.Scope.LIBRARY}) public static final String ACTION_SET_PLAYBACK_SPEED = "android.support.v4.media.session.action.SET_PLAYBACK_SPEED"; @RestrictTo({RestrictTo.Scope.LIBRARY}) public static final String ACTION_SET_RATING = "android.support.v4.media.session.action.SET_RATING"; @RestrictTo({RestrictTo.Scope.LIBRARY}) public static final String ACTION_SET_REPEAT_MODE = "android.support.v4.media.session.action.SET_REPEAT_MODE"; @RestrictTo({RestrictTo.Scope.LIBRARY}) public static final String ACTION_SET_SHUFFLE_MODE = "android.support.v4.media.session.action.SET_SHUFFLE_MODE"; public static final String ACTION_SKIP_AD = "android.support.v4.media.session.action.SKIP_AD"; public static final String ACTION_UNFOLLOW = "android.support.v4.media.session.action.UNFOLLOW"; public static final String ARGUMENT_MEDIA_ATTRIBUTE = "android.support.v4.media.session.ARGUMENT_MEDIA_ATTRIBUTE"; public static final String ARGUMENT_MEDIA_ATTRIBUTE_VALUE = "android.support.v4.media.session.ARGUMENT_MEDIA_ATTRIBUTE_VALUE"; private static final String DATA_CALLING_PACKAGE = "data_calling_pkg"; private static final String DATA_CALLING_PID = "data_calling_pid"; private static final String DATA_CALLING_UID = "data_calling_uid"; private static final String DATA_EXTRAS = "data_extras"; @Deprecated public static final int FLAG_HANDLES_MEDIA_BUTTONS = 1; public static final int FLAG_HANDLES_QUEUE_COMMANDS = 4; @Deprecated public static final int FLAG_HANDLES_TRANSPORT_CONTROLS = 2; @RestrictTo({RestrictTo.Scope.LIBRARY}) public static final String KEY_EXTRA_BINDER = "android.support.v4.media.session.EXTRA_BINDER"; @RestrictTo({RestrictTo.Scope.LIBRARY}) public static final String KEY_SESSION2_TOKEN = "android.support.v4.media.session.SESSION_TOKEN2"; @RestrictTo({RestrictTo.Scope.LIBRARY}) public static final String KEY_TOKEN = "android.support.v4.media.session.TOKEN"; private static final int MAX_BITMAP_SIZE_IN_DP = 320; public static final int MEDIA_ATTRIBUTE_ALBUM = 1; public static final int MEDIA_ATTRIBUTE_ARTIST = 0; public static final int MEDIA_ATTRIBUTE_PLAYLIST = 2; @RestrictTo({RestrictTo.Scope.LIBRARY}) public static final int PENDING_INTENT_FLAG_MUTABLE; static final String TAG = "MediaSessionCompat"; static int sMaxBitmapSize; private final ArrayList mActiveListeners; private final MediaControllerCompat mController; private final MediaSessionImpl mImpl; public interface MediaSessionImpl { Callback getCallback(); String getCallingPackage(); MediaSessionManager.RemoteUserInfo getCurrentControllerInfo(); Object getMediaSession(); PlaybackStateCompat getPlaybackState(); Object getRemoteControlClient(); Token getSessionToken(); boolean isActive(); void release(); void sendSessionEvent(String str, Bundle bundle); void setActive(boolean z); void setCallback(Callback callback, Handler handler); void setCaptioningEnabled(boolean z); void setCurrentControllerInfo(MediaSessionManager.RemoteUserInfo remoteUserInfo); void setExtras(Bundle bundle); void setFlags(int i); void setMediaButtonReceiver(PendingIntent pendingIntent); void setMetadata(MediaMetadataCompat mediaMetadataCompat); void setPlaybackState(PlaybackStateCompat playbackStateCompat); void setPlaybackToLocal(int i); void setPlaybackToRemote(VolumeProviderCompat volumeProviderCompat); void setQueue(List list); void setQueueTitle(CharSequence charSequence); void setRatingType(int i); void setRepeatMode(int i); void setSessionActivity(PendingIntent pendingIntent); void setShuffleMode(int i); } public interface OnActiveChangeListener { void onActiveChanged(); } public MediaControllerCompat getController() { return this.mController; } static { PENDING_INTENT_FLAG_MUTABLE = Build.VERSION.CODENAME.equals("S") ? 33554432 : 0; } public MediaSessionCompat(@NonNull Context context, @NonNull String str) { this(context, str, null, null); } public MediaSessionCompat(@NonNull Context context, @NonNull String str, @Nullable ComponentName componentName, @Nullable PendingIntent pendingIntent) { this(context, str, componentName, pendingIntent, null); } public MediaSessionCompat(@NonNull Context context, @NonNull String str, @Nullable ComponentName componentName, @Nullable PendingIntent pendingIntent, @Nullable Bundle bundle) { this(context, str, componentName, pendingIntent, bundle, null); } @SuppressLint({"WrongConstant"}) @RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX}) public MediaSessionCompat(@NonNull Context context, @NonNull String str, @Nullable ComponentName componentName, @Nullable PendingIntent pendingIntent, @Nullable Bundle bundle, @Nullable VersionedParcelable versionedParcelable) { this.mActiveListeners = new ArrayList<>(); if (context == null) { throw new IllegalArgumentException("context must not be null"); } if (TextUtils.isEmpty(str)) { throw new IllegalArgumentException("tag must not be null or empty"); } if (componentName == null && (componentName = MediaButtonReceiver.getMediaButtonReceiverComponent(context)) == null) { Log.w(TAG, "Couldn't find a unique registered media button receiver in the given context."); } if (componentName != null && pendingIntent == null) { Intent intent = new Intent("android.intent.action.MEDIA_BUTTON"); intent.setComponent(componentName); pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PENDING_INTENT_FLAG_MUTABLE); } int i = Build.VERSION.SDK_INT; MediaSession createFwkMediaSession = createFwkMediaSession(context, str, bundle); if (i >= 29) { this.mImpl = new MediaSessionImplApi29(createFwkMediaSession, versionedParcelable, bundle); } else if (i >= 28) { this.mImpl = new MediaSessionImplApi28(createFwkMediaSession, versionedParcelable, bundle); } else { this.mImpl = new MediaSessionImplApi21(createFwkMediaSession, versionedParcelable, bundle); } setCallback(new Callback() { // from class: android.support.v4.media.session.MediaSessionCompat.1 }, new Handler(Looper.myLooper() != null ? Looper.myLooper() : Looper.getMainLooper())); this.mImpl.setMediaButtonReceiver(pendingIntent); this.mController = new MediaControllerCompat(context, this); if (sMaxBitmapSize == 0) { sMaxBitmapSize = (int) (TypedValue.applyDimension(1, 320.0f, context.getResources().getDisplayMetrics()) + 0.5f); } } private MediaSessionCompat(Context context, MediaSessionImpl mediaSessionImpl) { this.mActiveListeners = new ArrayList<>(); this.mImpl = mediaSessionImpl; this.mController = new MediaControllerCompat(context, this); } @RequiresApi(21) private MediaSession createFwkMediaSession(Context context, String str, Bundle bundle) { if (Build.VERSION.SDK_INT >= 29) { return MediaSessionCompat$$ExternalSyntheticApiModelOutline0.m(context, str, bundle); } return new MediaSession(context, str); } public void setCallback(Callback callback) { setCallback(callback, null); } public void setCallback(Callback callback, Handler handler) { if (callback == null) { this.mImpl.setCallback(null, null); return; } MediaSessionImpl mediaSessionImpl = this.mImpl; if (handler == null) { handler = new Handler(); } mediaSessionImpl.setCallback(callback, handler); } public void setSessionActivity(PendingIntent pendingIntent) { this.mImpl.setSessionActivity(pendingIntent); } public void setMediaButtonReceiver(PendingIntent pendingIntent) { this.mImpl.setMediaButtonReceiver(pendingIntent); } public void setFlags(int i) { this.mImpl.setFlags(i); } public void setPlaybackToLocal(int i) { this.mImpl.setPlaybackToLocal(i); } public void setPlaybackToRemote(VolumeProviderCompat volumeProviderCompat) { if (volumeProviderCompat == null) { throw new IllegalArgumentException("volumeProvider may not be null!"); } this.mImpl.setPlaybackToRemote(volumeProviderCompat); } public void setActive(boolean z) { this.mImpl.setActive(z); Iterator it = this.mActiveListeners.iterator(); while (it.hasNext()) { it.next().onActiveChanged(); } } public boolean isActive() { return this.mImpl.isActive(); } public void sendSessionEvent(String str, Bundle bundle) { if (TextUtils.isEmpty(str)) { throw new IllegalArgumentException("event cannot be null or empty"); } this.mImpl.sendSessionEvent(str, bundle); } public void release() { this.mImpl.release(); } public Token getSessionToken() { return this.mImpl.getSessionToken(); } public void setPlaybackState(PlaybackStateCompat playbackStateCompat) { this.mImpl.setPlaybackState(playbackStateCompat); } public void setMetadata(MediaMetadataCompat mediaMetadataCompat) { this.mImpl.setMetadata(mediaMetadataCompat); } public void setQueue(List list) { if (list != null) { HashSet hashSet = new HashSet(); for (QueueItem queueItem : list) { if (queueItem == null) { throw new IllegalArgumentException("queue shouldn't have null items"); } if (hashSet.contains(Long.valueOf(queueItem.getQueueId()))) { Log.e(TAG, "Found duplicate queue id: " + queueItem.getQueueId(), new IllegalArgumentException("id of each queue item should be unique")); } hashSet.add(Long.valueOf(queueItem.getQueueId())); } } this.mImpl.setQueue(list); } public void setQueueTitle(CharSequence charSequence) { this.mImpl.setQueueTitle(charSequence); } public void setRatingType(int i) { this.mImpl.setRatingType(i); } public void setCaptioningEnabled(boolean z) { this.mImpl.setCaptioningEnabled(z); } public void setRepeatMode(int i) { this.mImpl.setRepeatMode(i); } public void setShuffleMode(int i) { this.mImpl.setShuffleMode(i); } public void setExtras(Bundle bundle) { this.mImpl.setExtras(bundle); } public Object getMediaSession() { return this.mImpl.getMediaSession(); } public Object getRemoteControlClient() { return this.mImpl.getRemoteControlClient(); } @NonNull public final MediaSessionManager.RemoteUserInfo getCurrentControllerInfo() { return this.mImpl.getCurrentControllerInfo(); } @RestrictTo({RestrictTo.Scope.LIBRARY}) public String getCallingPackage() { return this.mImpl.getCallingPackage(); } public void addOnActiveChangeListener(OnActiveChangeListener onActiveChangeListener) { if (onActiveChangeListener == null) { throw new IllegalArgumentException("Listener may not be null"); } this.mActiveListeners.add(onActiveChangeListener); } public void removeOnActiveChangeListener(OnActiveChangeListener onActiveChangeListener) { if (onActiveChangeListener == null) { throw new IllegalArgumentException("Listener may not be null"); } this.mActiveListeners.remove(onActiveChangeListener); } public static MediaSessionCompat fromMediaSession(Context context, Object obj) { MediaSessionImpl mediaSessionImplApi21; int i = Build.VERSION.SDK_INT; if (context == null || obj == null) { return null; } if (i >= 29) { mediaSessionImplApi21 = new MediaSessionImplApi29(obj); } else if (i >= 28) { mediaSessionImplApi21 = new MediaSessionImplApi28(obj); } else { mediaSessionImplApi21 = new MediaSessionImplApi21(obj); } return new MediaSessionCompat(context, mediaSessionImplApi21); } @RestrictTo({RestrictTo.Scope.LIBRARY}) public static void ensureClassLoader(@Nullable Bundle bundle) { if (bundle != null) { bundle.setClassLoader(MediaSessionCompat.class.getClassLoader()); } } @Nullable @RestrictTo({RestrictTo.Scope.LIBRARY}) public static Bundle unparcelWithClassLoader(@Nullable Bundle bundle) { if (bundle == null) { return null; } ensureClassLoader(bundle); try { bundle.isEmpty(); return bundle; } catch (BadParcelableException unused) { Log.e(TAG, "Could not unparcel the data."); return null; } } public static PlaybackStateCompat getStateWithUpdatedPosition(PlaybackStateCompat playbackStateCompat, MediaMetadataCompat mediaMetadataCompat) { if (playbackStateCompat == null) { return playbackStateCompat; } long j = -1; if (playbackStateCompat.getPosition() == -1) { return playbackStateCompat; } if (playbackStateCompat.getState() != 3 && playbackStateCompat.getState() != 4 && playbackStateCompat.getState() != 5) { return playbackStateCompat; } if (playbackStateCompat.getLastPositionUpdateTime() <= 0) { return playbackStateCompat; } long elapsedRealtime = SystemClock.elapsedRealtime(); long playbackSpeed = ((long) (playbackStateCompat.getPlaybackSpeed() * (elapsedRealtime - r0))) + playbackStateCompat.getPosition(); if (mediaMetadataCompat != null && mediaMetadataCompat.containsKey(MediaMetadataCompat.METADATA_KEY_DURATION)) { j = mediaMetadataCompat.getLong(MediaMetadataCompat.METADATA_KEY_DURATION); } return new PlaybackStateCompat.Builder(playbackStateCompat).setState(playbackStateCompat.getState(), (j < 0 || playbackSpeed <= j) ? playbackSpeed < 0 ? 0L : playbackSpeed : j, playbackStateCompat.getPlaybackSpeed(), elapsedRealtime).build(); } public static abstract class Callback { @GuardedBy("mLock") CallbackHandler mCallbackHandler; private boolean mMediaPlayPausePendingOnHandler; final Object mLock = new Object(); final MediaSession.Callback mCallbackFwk = new MediaSessionCallbackApi21(); @GuardedBy("mLock") WeakReference mSessionImpl = new WeakReference<>(null); public void onAddQueueItem(MediaDescriptionCompat mediaDescriptionCompat) { } public void onAddQueueItem(MediaDescriptionCompat mediaDescriptionCompat, int i) { } public void onCommand(String str, Bundle bundle, ResultReceiver resultReceiver) { } public void onCustomAction(String str, Bundle bundle) { } public void onFastForward() { } public void onPause() { } public void onPlay() { } public void onPlayFromMediaId(String str, Bundle bundle) { } public void onPlayFromSearch(String str, Bundle bundle) { } public void onPlayFromUri(Uri uri, Bundle bundle) { } public void onPrepare() { } public void onPrepareFromMediaId(String str, Bundle bundle) { } public void onPrepareFromSearch(String str, Bundle bundle) { } public void onPrepareFromUri(Uri uri, Bundle bundle) { } public void onRemoveQueueItem(MediaDescriptionCompat mediaDescriptionCompat) { } @Deprecated public void onRemoveQueueItemAt(int i) { } public void onRewind() { } public void onSeekTo(long j) { } public void onSetCaptioningEnabled(boolean z) { } public void onSetPlaybackSpeed(float f) { } public void onSetRating(RatingCompat ratingCompat) { } public void onSetRating(RatingCompat ratingCompat, Bundle bundle) { } public void onSetRepeatMode(int i) { } public void onSetShuffleMode(int i) { } public void onSkipToNext() { } public void onSkipToPrevious() { } public void onSkipToQueueItem(long j) { } public void onStop() { } public void setSessionImpl(MediaSessionImpl mediaSessionImpl, Handler handler) { synchronized (this.mLock) { try { this.mSessionImpl = new WeakReference<>(mediaSessionImpl); CallbackHandler callbackHandler = this.mCallbackHandler; CallbackHandler callbackHandler2 = null; if (callbackHandler != null) { callbackHandler.removeCallbacksAndMessages(null); } if (mediaSessionImpl != null && handler != null) { callbackHandler2 = new CallbackHandler(handler.getLooper()); } this.mCallbackHandler = callbackHandler2; } catch (Throwable th) { throw th; } } } public boolean onMediaButtonEvent(Intent intent) { MediaSessionImpl mediaSessionImpl; CallbackHandler callbackHandler; KeyEvent keyEvent; if (Build.VERSION.SDK_INT >= 27) { return false; } synchronized (this.mLock) { mediaSessionImpl = this.mSessionImpl.get(); callbackHandler = this.mCallbackHandler; } if (mediaSessionImpl == null || callbackHandler == null || (keyEvent = (KeyEvent) intent.getParcelableExtra("android.intent.extra.KEY_EVENT")) == null || keyEvent.getAction() != 0) { return false; } MediaSessionManager.RemoteUserInfo currentControllerInfo = mediaSessionImpl.getCurrentControllerInfo(); int keyCode = keyEvent.getKeyCode(); if (keyCode == 79 || keyCode == 85) { if (keyEvent.getRepeatCount() != 0) { handleMediaPlayPauseIfPendingOnHandler(mediaSessionImpl, callbackHandler); } else if (this.mMediaPlayPausePendingOnHandler) { callbackHandler.removeMessages(1); this.mMediaPlayPausePendingOnHandler = false; PlaybackStateCompat playbackState = mediaSessionImpl.getPlaybackState(); if (((playbackState == null ? 0L : playbackState.getActions()) & 32) != 0) { onSkipToNext(); } } else { this.mMediaPlayPausePendingOnHandler = true; callbackHandler.sendMessageDelayed(callbackHandler.obtainMessage(1, currentControllerInfo), ViewConfiguration.getDoubleTapTimeout()); } return true; } handleMediaPlayPauseIfPendingOnHandler(mediaSessionImpl, callbackHandler); return false; } public void handleMediaPlayPauseIfPendingOnHandler(MediaSessionImpl mediaSessionImpl, Handler handler) { if (this.mMediaPlayPausePendingOnHandler) { this.mMediaPlayPausePendingOnHandler = false; handler.removeMessages(1); PlaybackStateCompat playbackState = mediaSessionImpl.getPlaybackState(); long actions = playbackState == null ? 0L : playbackState.getActions(); boolean z = playbackState != null && playbackState.getState() == 3; boolean z2 = (516 & actions) != 0; boolean z3 = (actions & 514) != 0; if (z && z3) { onPause(); } else { if (z || !z2) { return; } onPlay(); } } } public class CallbackHandler extends Handler { private static final int MSG_MEDIA_PLAY_PAUSE_KEY_DOUBLE_TAP_TIMEOUT = 1; public CallbackHandler(Looper looper) { super(looper); } @Override // android.os.Handler public void handleMessage(Message message) { MediaSessionImpl mediaSessionImpl; Callback callback; CallbackHandler callbackHandler; if (message.what == 1) { synchronized (Callback.this.mLock) { mediaSessionImpl = Callback.this.mSessionImpl.get(); callback = Callback.this; callbackHandler = callback.mCallbackHandler; } if (mediaSessionImpl == null || callback != mediaSessionImpl.getCallback() || callbackHandler == null) { return; } mediaSessionImpl.setCurrentControllerInfo((MediaSessionManager.RemoteUserInfo) message.obj); Callback.this.handleMediaPlayPauseIfPendingOnHandler(mediaSessionImpl, callbackHandler); mediaSessionImpl.setCurrentControllerInfo(null); } } } @RequiresApi(21) public class MediaSessionCallbackApi21 extends MediaSession.Callback { public void onSetRating(Rating rating, Bundle bundle) { } public MediaSessionCallbackApi21() { } @Override // android.media.session.MediaSession.Callback public void onCommand(String str, Bundle bundle, ResultReceiver resultReceiver) { MediaSessionImplApi21 sessionImplIfCallbackIsSet = getSessionImplIfCallbackIsSet(); if (sessionImplIfCallbackIsSet == null) { return; } MediaSessionCompat.ensureClassLoader(bundle); setCurrentControllerInfo(sessionImplIfCallbackIsSet); try { QueueItem queueItem = null; IBinder asBinder = null; queueItem = null; if (str.equals(MediaControllerCompat.COMMAND_GET_EXTRA_BINDER)) { Bundle bundle2 = new Bundle(); Token sessionToken = sessionImplIfCallbackIsSet.getSessionToken(); IMediaSession extraBinder = sessionToken.getExtraBinder(); if (extraBinder != null) { asBinder = extraBinder.asBinder(); } BundleCompat.putBinder(bundle2, MediaSessionCompat.KEY_EXTRA_BINDER, asBinder); ParcelUtils.putVersionedParcelable(bundle2, MediaSessionCompat.KEY_SESSION2_TOKEN, sessionToken.getSession2Token()); resultReceiver.send(0, bundle2); } else if (str.equals(MediaControllerCompat.COMMAND_ADD_QUEUE_ITEM)) { Callback.this.onAddQueueItem((MediaDescriptionCompat) bundle.getParcelable(MediaControllerCompat.COMMAND_ARGUMENT_MEDIA_DESCRIPTION)); } else if (str.equals(MediaControllerCompat.COMMAND_ADD_QUEUE_ITEM_AT)) { Callback.this.onAddQueueItem((MediaDescriptionCompat) bundle.getParcelable(MediaControllerCompat.COMMAND_ARGUMENT_MEDIA_DESCRIPTION), bundle.getInt(MediaControllerCompat.COMMAND_ARGUMENT_INDEX)); } else if (str.equals(MediaControllerCompat.COMMAND_REMOVE_QUEUE_ITEM)) { Callback.this.onRemoveQueueItem((MediaDescriptionCompat) bundle.getParcelable(MediaControllerCompat.COMMAND_ARGUMENT_MEDIA_DESCRIPTION)); } else if (str.equals(MediaControllerCompat.COMMAND_REMOVE_QUEUE_ITEM_AT)) { if (sessionImplIfCallbackIsSet.mQueue != null) { int i = bundle.getInt(MediaControllerCompat.COMMAND_ARGUMENT_INDEX, -1); if (i >= 0 && i < sessionImplIfCallbackIsSet.mQueue.size()) { queueItem = sessionImplIfCallbackIsSet.mQueue.get(i); } if (queueItem != null) { Callback.this.onRemoveQueueItem(queueItem.getDescription()); } } } else { Callback.this.onCommand(str, bundle, resultReceiver); } } catch (BadParcelableException unused) { Log.e(MediaSessionCompat.TAG, "Could not unparcel the extra data."); } clearCurrentControllerInfo(sessionImplIfCallbackIsSet); } @Override // android.media.session.MediaSession.Callback public boolean onMediaButtonEvent(Intent intent) { MediaSessionImplApi21 sessionImplIfCallbackIsSet = getSessionImplIfCallbackIsSet(); if (sessionImplIfCallbackIsSet == null) { return false; } setCurrentControllerInfo(sessionImplIfCallbackIsSet); boolean onMediaButtonEvent = Callback.this.onMediaButtonEvent(intent); clearCurrentControllerInfo(sessionImplIfCallbackIsSet); return onMediaButtonEvent || super.onMediaButtonEvent(intent); } @Override // android.media.session.MediaSession.Callback public void onPlay() { MediaSessionImplApi21 sessionImplIfCallbackIsSet = getSessionImplIfCallbackIsSet(); if (sessionImplIfCallbackIsSet == null) { return; } setCurrentControllerInfo(sessionImplIfCallbackIsSet); Callback.this.onPlay(); clearCurrentControllerInfo(sessionImplIfCallbackIsSet); } @Override // android.media.session.MediaSession.Callback public void onPlayFromMediaId(String str, Bundle bundle) { MediaSessionImplApi21 sessionImplIfCallbackIsSet = getSessionImplIfCallbackIsSet(); if (sessionImplIfCallbackIsSet == null) { return; } MediaSessionCompat.ensureClassLoader(bundle); setCurrentControllerInfo(sessionImplIfCallbackIsSet); Callback.this.onPlayFromMediaId(str, bundle); clearCurrentControllerInfo(sessionImplIfCallbackIsSet); } @Override // android.media.session.MediaSession.Callback public void onPlayFromSearch(String str, Bundle bundle) { MediaSessionImplApi21 sessionImplIfCallbackIsSet = getSessionImplIfCallbackIsSet(); if (sessionImplIfCallbackIsSet == null) { return; } MediaSessionCompat.ensureClassLoader(bundle); setCurrentControllerInfo(sessionImplIfCallbackIsSet); Callback.this.onPlayFromSearch(str, bundle); clearCurrentControllerInfo(sessionImplIfCallbackIsSet); } @Override // android.media.session.MediaSession.Callback @RequiresApi(23) public void onPlayFromUri(Uri uri, Bundle bundle) { MediaSessionImplApi21 sessionImplIfCallbackIsSet = getSessionImplIfCallbackIsSet(); if (sessionImplIfCallbackIsSet == null) { return; } MediaSessionCompat.ensureClassLoader(bundle); setCurrentControllerInfo(sessionImplIfCallbackIsSet); Callback.this.onPlayFromUri(uri, bundle); clearCurrentControllerInfo(sessionImplIfCallbackIsSet); } @Override // android.media.session.MediaSession.Callback public void onSkipToQueueItem(long j) { MediaSessionImplApi21 sessionImplIfCallbackIsSet = getSessionImplIfCallbackIsSet(); if (sessionImplIfCallbackIsSet == null) { return; } setCurrentControllerInfo(sessionImplIfCallbackIsSet); Callback.this.onSkipToQueueItem(j); clearCurrentControllerInfo(sessionImplIfCallbackIsSet); } @Override // android.media.session.MediaSession.Callback public void onPause() { MediaSessionImplApi21 sessionImplIfCallbackIsSet = getSessionImplIfCallbackIsSet(); if (sessionImplIfCallbackIsSet == null) { return; } setCurrentControllerInfo(sessionImplIfCallbackIsSet); Callback.this.onPause(); clearCurrentControllerInfo(sessionImplIfCallbackIsSet); } @Override // android.media.session.MediaSession.Callback public void onSkipToNext() { MediaSessionImplApi21 sessionImplIfCallbackIsSet = getSessionImplIfCallbackIsSet(); if (sessionImplIfCallbackIsSet == null) { return; } setCurrentControllerInfo(sessionImplIfCallbackIsSet); Callback.this.onSkipToNext(); clearCurrentControllerInfo(sessionImplIfCallbackIsSet); } @Override // android.media.session.MediaSession.Callback public void onSkipToPrevious() { MediaSessionImplApi21 sessionImplIfCallbackIsSet = getSessionImplIfCallbackIsSet(); if (sessionImplIfCallbackIsSet == null) { return; } setCurrentControllerInfo(sessionImplIfCallbackIsSet); Callback.this.onSkipToPrevious(); clearCurrentControllerInfo(sessionImplIfCallbackIsSet); } @Override // android.media.session.MediaSession.Callback public void onFastForward() { MediaSessionImplApi21 sessionImplIfCallbackIsSet = getSessionImplIfCallbackIsSet(); if (sessionImplIfCallbackIsSet == null) { return; } setCurrentControllerInfo(sessionImplIfCallbackIsSet); Callback.this.onFastForward(); clearCurrentControllerInfo(sessionImplIfCallbackIsSet); } @Override // android.media.session.MediaSession.Callback public void onRewind() { MediaSessionImplApi21 sessionImplIfCallbackIsSet = getSessionImplIfCallbackIsSet(); if (sessionImplIfCallbackIsSet == null) { return; } setCurrentControllerInfo(sessionImplIfCallbackIsSet); Callback.this.onRewind(); clearCurrentControllerInfo(sessionImplIfCallbackIsSet); } @Override // android.media.session.MediaSession.Callback public void onStop() { MediaSessionImplApi21 sessionImplIfCallbackIsSet = getSessionImplIfCallbackIsSet(); if (sessionImplIfCallbackIsSet == null) { return; } setCurrentControllerInfo(sessionImplIfCallbackIsSet); Callback.this.onStop(); clearCurrentControllerInfo(sessionImplIfCallbackIsSet); } @Override // android.media.session.MediaSession.Callback public void onSeekTo(long j) { MediaSessionImplApi21 sessionImplIfCallbackIsSet = getSessionImplIfCallbackIsSet(); if (sessionImplIfCallbackIsSet == null) { return; } setCurrentControllerInfo(sessionImplIfCallbackIsSet); Callback.this.onSeekTo(j); clearCurrentControllerInfo(sessionImplIfCallbackIsSet); } @Override // android.media.session.MediaSession.Callback public void onSetRating(Rating rating) { MediaSessionImplApi21 sessionImplIfCallbackIsSet = getSessionImplIfCallbackIsSet(); if (sessionImplIfCallbackIsSet == null) { return; } setCurrentControllerInfo(sessionImplIfCallbackIsSet); Callback.this.onSetRating(RatingCompat.fromRating(rating)); clearCurrentControllerInfo(sessionImplIfCallbackIsSet); } @Override // android.media.session.MediaSession.Callback public void onCustomAction(String str, Bundle bundle) { MediaSessionImplApi21 sessionImplIfCallbackIsSet = getSessionImplIfCallbackIsSet(); if (sessionImplIfCallbackIsSet == null) { return; } MediaSessionCompat.ensureClassLoader(bundle); setCurrentControllerInfo(sessionImplIfCallbackIsSet); try { if (str.equals(MediaSessionCompat.ACTION_PLAY_FROM_URI)) { Uri uri = (Uri) bundle.getParcelable(MediaSessionCompat.ACTION_ARGUMENT_URI); Bundle bundle2 = bundle.getBundle(MediaSessionCompat.ACTION_ARGUMENT_EXTRAS); MediaSessionCompat.ensureClassLoader(bundle2); Callback.this.onPlayFromUri(uri, bundle2); } else if (str.equals(MediaSessionCompat.ACTION_PREPARE)) { Callback.this.onPrepare(); } else if (str.equals(MediaSessionCompat.ACTION_PREPARE_FROM_MEDIA_ID)) { String string = bundle.getString(MediaSessionCompat.ACTION_ARGUMENT_MEDIA_ID); Bundle bundle3 = bundle.getBundle(MediaSessionCompat.ACTION_ARGUMENT_EXTRAS); MediaSessionCompat.ensureClassLoader(bundle3); Callback.this.onPrepareFromMediaId(string, bundle3); } else if (str.equals(MediaSessionCompat.ACTION_PREPARE_FROM_SEARCH)) { String string2 = bundle.getString(MediaSessionCompat.ACTION_ARGUMENT_QUERY); Bundle bundle4 = bundle.getBundle(MediaSessionCompat.ACTION_ARGUMENT_EXTRAS); MediaSessionCompat.ensureClassLoader(bundle4); Callback.this.onPrepareFromSearch(string2, bundle4); } else if (str.equals(MediaSessionCompat.ACTION_PREPARE_FROM_URI)) { Uri uri2 = (Uri) bundle.getParcelable(MediaSessionCompat.ACTION_ARGUMENT_URI); Bundle bundle5 = bundle.getBundle(MediaSessionCompat.ACTION_ARGUMENT_EXTRAS); MediaSessionCompat.ensureClassLoader(bundle5); Callback.this.onPrepareFromUri(uri2, bundle5); } else if (str.equals(MediaSessionCompat.ACTION_SET_CAPTIONING_ENABLED)) { Callback.this.onSetCaptioningEnabled(bundle.getBoolean(MediaSessionCompat.ACTION_ARGUMENT_CAPTIONING_ENABLED)); } else if (str.equals(MediaSessionCompat.ACTION_SET_REPEAT_MODE)) { Callback.this.onSetRepeatMode(bundle.getInt(MediaSessionCompat.ACTION_ARGUMENT_REPEAT_MODE)); } else if (str.equals(MediaSessionCompat.ACTION_SET_SHUFFLE_MODE)) { Callback.this.onSetShuffleMode(bundle.getInt(MediaSessionCompat.ACTION_ARGUMENT_SHUFFLE_MODE)); } else if (str.equals(MediaSessionCompat.ACTION_SET_RATING)) { RatingCompat ratingCompat = (RatingCompat) bundle.getParcelable(MediaSessionCompat.ACTION_ARGUMENT_RATING); Bundle bundle6 = bundle.getBundle(MediaSessionCompat.ACTION_ARGUMENT_EXTRAS); MediaSessionCompat.ensureClassLoader(bundle6); Callback.this.onSetRating(ratingCompat, bundle6); } else if (str.equals(MediaSessionCompat.ACTION_SET_PLAYBACK_SPEED)) { Callback.this.onSetPlaybackSpeed(bundle.getFloat(MediaSessionCompat.ACTION_ARGUMENT_PLAYBACK_SPEED, 1.0f)); } else { Callback.this.onCustomAction(str, bundle); } } catch (BadParcelableException unused) { Log.e(MediaSessionCompat.TAG, "Could not unparcel the data."); } clearCurrentControllerInfo(sessionImplIfCallbackIsSet); } @Override // android.media.session.MediaSession.Callback @RequiresApi(24) public void onPrepare() { MediaSessionImplApi21 sessionImplIfCallbackIsSet = getSessionImplIfCallbackIsSet(); if (sessionImplIfCallbackIsSet == null) { return; } setCurrentControllerInfo(sessionImplIfCallbackIsSet); Callback.this.onPrepare(); clearCurrentControllerInfo(sessionImplIfCallbackIsSet); } @Override // android.media.session.MediaSession.Callback @RequiresApi(24) public void onPrepareFromMediaId(String str, Bundle bundle) { MediaSessionImplApi21 sessionImplIfCallbackIsSet = getSessionImplIfCallbackIsSet(); if (sessionImplIfCallbackIsSet == null) { return; } MediaSessionCompat.ensureClassLoader(bundle); setCurrentControllerInfo(sessionImplIfCallbackIsSet); Callback.this.onPrepareFromMediaId(str, bundle); clearCurrentControllerInfo(sessionImplIfCallbackIsSet); } @Override // android.media.session.MediaSession.Callback @RequiresApi(24) public void onPrepareFromSearch(String str, Bundle bundle) { MediaSessionImplApi21 sessionImplIfCallbackIsSet = getSessionImplIfCallbackIsSet(); if (sessionImplIfCallbackIsSet == null) { return; } MediaSessionCompat.ensureClassLoader(bundle); setCurrentControllerInfo(sessionImplIfCallbackIsSet); Callback.this.onPrepareFromSearch(str, bundle); clearCurrentControllerInfo(sessionImplIfCallbackIsSet); } @Override // android.media.session.MediaSession.Callback @RequiresApi(24) public void onPrepareFromUri(Uri uri, Bundle bundle) { MediaSessionImplApi21 sessionImplIfCallbackIsSet = getSessionImplIfCallbackIsSet(); if (sessionImplIfCallbackIsSet == null) { return; } MediaSessionCompat.ensureClassLoader(bundle); setCurrentControllerInfo(sessionImplIfCallbackIsSet); Callback.this.onPrepareFromUri(uri, bundle); clearCurrentControllerInfo(sessionImplIfCallbackIsSet); } @Override // android.media.session.MediaSession.Callback @RequiresApi(29) public void onSetPlaybackSpeed(float f) { MediaSessionImplApi21 sessionImplIfCallbackIsSet = getSessionImplIfCallbackIsSet(); if (sessionImplIfCallbackIsSet == null) { return; } setCurrentControllerInfo(sessionImplIfCallbackIsSet); Callback.this.onSetPlaybackSpeed(f); clearCurrentControllerInfo(sessionImplIfCallbackIsSet); } private void setCurrentControllerInfo(MediaSessionImpl mediaSessionImpl) { if (Build.VERSION.SDK_INT >= 28) { return; } String callingPackage = mediaSessionImpl.getCallingPackage(); if (TextUtils.isEmpty(callingPackage)) { callingPackage = MediaSessionManager.RemoteUserInfo.LEGACY_CONTROLLER; } mediaSessionImpl.setCurrentControllerInfo(new MediaSessionManager.RemoteUserInfo(callingPackage, -1, -1)); } private void clearCurrentControllerInfo(MediaSessionImpl mediaSessionImpl) { mediaSessionImpl.setCurrentControllerInfo(null); } private MediaSessionImplApi21 getSessionImplIfCallbackIsSet() { MediaSessionImplApi21 mediaSessionImplApi21; synchronized (Callback.this.mLock) { mediaSessionImplApi21 = (MediaSessionImplApi21) Callback.this.mSessionImpl.get(); } if (mediaSessionImplApi21 == null || Callback.this != mediaSessionImplApi21.getCallback()) { return null; } return mediaSessionImplApi21; } } } @SuppressLint({"BanParcelableUsage"}) public static final class Token implements Parcelable { public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { // from class: android.support.v4.media.session.MediaSessionCompat.Token.1 /* JADX WARN: Can't rename method to resolve collision */ @Override // android.os.Parcelable.Creator public Token createFromParcel(Parcel parcel) { return new Token(parcel.readParcelable(null)); } /* JADX WARN: Can't rename method to resolve collision */ @Override // android.os.Parcelable.Creator public Token[] newArray(int i) { return new Token[i]; } }; @GuardedBy("mLock") private IMediaSession mExtraBinder; private final Object mInner; private final Object mLock; @GuardedBy("mLock") private VersionedParcelable mSession2Token; @Override // android.os.Parcelable public int describeContents() { return 0; } public Object getToken() { return this.mInner; } public Token(Object obj) { this(obj, null, null); } public Token(Object obj, IMediaSession iMediaSession) { this(obj, iMediaSession, null); } public Token(Object obj, IMediaSession iMediaSession, VersionedParcelable versionedParcelable) { this.mLock = new Object(); this.mInner = obj; this.mExtraBinder = iMediaSession; this.mSession2Token = versionedParcelable; } public static Token fromToken(Object obj) { return fromToken(obj, null); } @RestrictTo({RestrictTo.Scope.LIBRARY}) public static Token fromToken(Object obj, IMediaSession iMediaSession) { if (obj == null) { return null; } if (!(obj instanceof MediaSession.Token)) { throw new IllegalArgumentException("token is not a valid MediaSession.Token object"); } return new Token(obj, iMediaSession); } @Override // android.os.Parcelable public void writeToParcel(Parcel parcel, int i) { parcel.writeParcelable((Parcelable) this.mInner, i); } public int hashCode() { Object obj = this.mInner; if (obj == null) { return 0; } return obj.hashCode(); } public boolean equals(Object obj) { if (this == obj) { return true; } if (!(obj instanceof Token)) { return false; } Token token = (Token) obj; Object obj2 = this.mInner; if (obj2 == null) { return token.mInner == null; } Object obj3 = token.mInner; if (obj3 == null) { return false; } return obj2.equals(obj3); } @RestrictTo({RestrictTo.Scope.LIBRARY}) public IMediaSession getExtraBinder() { IMediaSession iMediaSession; synchronized (this.mLock) { iMediaSession = this.mExtraBinder; } return iMediaSession; } @RestrictTo({RestrictTo.Scope.LIBRARY}) public void setExtraBinder(IMediaSession iMediaSession) { synchronized (this.mLock) { this.mExtraBinder = iMediaSession; } } @RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX}) public VersionedParcelable getSession2Token() { VersionedParcelable versionedParcelable; synchronized (this.mLock) { versionedParcelable = this.mSession2Token; } return versionedParcelable; } @RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX}) public void setSession2Token(VersionedParcelable versionedParcelable) { synchronized (this.mLock) { this.mSession2Token = versionedParcelable; } } @RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX}) public Bundle toBundle() { Bundle bundle = new Bundle(); bundle.putParcelable(MediaSessionCompat.KEY_TOKEN, this); synchronized (this.mLock) { try { IMediaSession iMediaSession = this.mExtraBinder; if (iMediaSession != null) { BundleCompat.putBinder(bundle, MediaSessionCompat.KEY_EXTRA_BINDER, iMediaSession.asBinder()); } VersionedParcelable versionedParcelable = this.mSession2Token; if (versionedParcelable != null) { ParcelUtils.putVersionedParcelable(bundle, MediaSessionCompat.KEY_SESSION2_TOKEN, versionedParcelable); } } catch (Throwable th) { throw th; } } return bundle; } @RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX}) public static Token fromBundle(Bundle bundle) { if (bundle == null) { return null; } IMediaSession asInterface = IMediaSession.Stub.asInterface(BundleCompat.getBinder(bundle, MediaSessionCompat.KEY_EXTRA_BINDER)); VersionedParcelable versionedParcelable = ParcelUtils.getVersionedParcelable(bundle, MediaSessionCompat.KEY_SESSION2_TOKEN); Token token = (Token) bundle.getParcelable(MediaSessionCompat.KEY_TOKEN); if (token == null) { return null; } return new Token(token.mInner, asInterface, versionedParcelable); } } @SuppressLint({"BanParcelableUsage"}) public static final class QueueItem implements Parcelable { public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { // from class: android.support.v4.media.session.MediaSessionCompat.QueueItem.1 /* JADX WARN: Can't rename method to resolve collision */ @Override // android.os.Parcelable.Creator public QueueItem createFromParcel(Parcel parcel) { return new QueueItem(parcel); } /* JADX WARN: Can't rename method to resolve collision */ @Override // android.os.Parcelable.Creator public QueueItem[] newArray(int i) { return new QueueItem[i]; } }; public static final int UNKNOWN_ID = -1; private final MediaDescriptionCompat mDescription; private final long mId; private MediaSession.QueueItem mItemFwk; @Override // android.os.Parcelable public int describeContents() { return 0; } public MediaDescriptionCompat getDescription() { return this.mDescription; } public long getQueueId() { return this.mId; } public QueueItem(MediaDescriptionCompat mediaDescriptionCompat, long j) { this(null, mediaDescriptionCompat, j); } private QueueItem(MediaSession.QueueItem queueItem, MediaDescriptionCompat mediaDescriptionCompat, long j) { if (mediaDescriptionCompat == null) { throw new IllegalArgumentException("Description cannot be null"); } if (j == -1) { throw new IllegalArgumentException("Id cannot be QueueItem.UNKNOWN_ID"); } this.mDescription = mediaDescriptionCompat; this.mId = j; this.mItemFwk = queueItem; } public QueueItem(Parcel parcel) { this.mDescription = MediaDescriptionCompat.CREATOR.createFromParcel(parcel); this.mId = parcel.readLong(); } @Override // android.os.Parcelable public void writeToParcel(Parcel parcel, int i) { this.mDescription.writeToParcel(parcel, i); parcel.writeLong(this.mId); } public Object getQueueItem() { MediaSession.QueueItem queueItem = this.mItemFwk; if (queueItem != null) { return queueItem; } MediaSession.QueueItem queueItem2 = new MediaSession.QueueItem((MediaDescription) this.mDescription.getMediaDescription(), this.mId); this.mItemFwk = queueItem2; return queueItem2; } public static QueueItem fromQueueItem(Object obj) { if (obj == null) { return null; } MediaSession.QueueItem queueItem = (MediaSession.QueueItem) obj; return new QueueItem(queueItem, MediaDescriptionCompat.fromMediaDescription(queueItem.getDescription()), queueItem.getQueueId()); } public static List fromQueueItemList(List list) { if (list == null) { return null; } ArrayList arrayList = new ArrayList(); Iterator it = list.iterator(); while (it.hasNext()) { arrayList.add(fromQueueItem(it.next())); } return arrayList; } public String toString() { return "MediaSession.QueueItem {Description=" + this.mDescription + ", Id=" + this.mId + " }"; } } @SuppressLint({"BanParcelableUsage"}) public static final class ResultReceiverWrapper implements Parcelable { public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { // from class: android.support.v4.media.session.MediaSessionCompat.ResultReceiverWrapper.1 /* JADX WARN: Can't rename method to resolve collision */ @Override // android.os.Parcelable.Creator public ResultReceiverWrapper createFromParcel(Parcel parcel) { return new ResultReceiverWrapper(parcel); } /* JADX WARN: Can't rename method to resolve collision */ @Override // android.os.Parcelable.Creator public ResultReceiverWrapper[] newArray(int i) { return new ResultReceiverWrapper[i]; } }; ResultReceiver mResultReceiver; @Override // android.os.Parcelable public int describeContents() { return 0; } public ResultReceiverWrapper(@NonNull ResultReceiver resultReceiver) { this.mResultReceiver = resultReceiver; } public ResultReceiverWrapper(Parcel parcel) { this.mResultReceiver = (ResultReceiver) ResultReceiver.CREATOR.createFromParcel(parcel); } @Override // android.os.Parcelable public void writeToParcel(Parcel parcel, int i) { this.mResultReceiver.writeToParcel(parcel, i); } } public static class MediaSessionImplBase implements MediaSessionImpl { static final int RCC_PLAYSTATE_NONE = 0; final AudioManager mAudioManager; volatile Callback mCallback; boolean mCaptioningEnabled; private final Context mContext; Bundle mExtras; private MessageHandler mHandler; int mLocalStream; private final ComponentName mMediaButtonReceiverComponentName; private final PendingIntent mMediaButtonReceiverIntent; MediaMetadataCompat mMetadata; final String mPackageName; List mQueue; CharSequence mQueueTitle; int mRatingType; final RemoteControlClient mRcc; private MediaSessionManager.RemoteUserInfo mRemoteUserInfo; int mRepeatMode; PendingIntent mSessionActivity; final Bundle mSessionInfo; int mShuffleMode; PlaybackStateCompat mState; private final MediaSessionStub mStub; final String mTag; private final Token mToken; VolumeProviderCompat mVolumeProvider; int mVolumeType; final Object mLock = new Object(); final RemoteCallbackList mControllerCallbacks = new RemoteCallbackList<>(); boolean mDestroyed = false; boolean mIsActive = false; int mFlags = 3; private VolumeProviderCompat.Callback mVolumeCallback = new VolumeProviderCompat.Callback() { // from class: android.support.v4.media.session.MediaSessionCompat.MediaSessionImplBase.1 @Override // androidx.media.VolumeProviderCompat.Callback public void onVolumeChanged(VolumeProviderCompat volumeProviderCompat) { if (MediaSessionImplBase.this.mVolumeProvider != volumeProviderCompat) { return; } MediaSessionImplBase mediaSessionImplBase = MediaSessionImplBase.this; MediaSessionImplBase.this.sendVolumeInfoChanged(new ParcelableVolumeInfo(mediaSessionImplBase.mVolumeType, mediaSessionImplBase.mLocalStream, volumeProviderCompat.getVolumeControl(), volumeProviderCompat.getMaxVolume(), volumeProviderCompat.getCurrentVolume())); } }; @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public String getCallingPackage() { return null; } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public Object getMediaSession() { return null; } public int getRccStateFromState(int i) { switch (i) { case 0: return 0; case 1: return 1; case 2: return 2; case 3: return 3; case 4: return 4; case 5: return 5; case 6: case 8: return 8; case 7: return 9; case 9: return 7; case 10: case 11: return 6; default: return -1; } } public int getRccTransportControlFlagsFromActions(long j) { int i = (1 & j) != 0 ? 32 : 0; if ((2 & j) != 0) { i |= 16; } if ((4 & j) != 0) { i |= 4; } if ((8 & j) != 0) { i |= 2; } if ((16 & j) != 0) { i |= 1; } if ((32 & j) != 0) { i |= 128; } if ((64 & j) != 0) { i |= 64; } return (j & 512) != 0 ? i | 8 : i; } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public Object getRemoteControlClient() { return null; } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public Token getSessionToken() { return this.mToken; } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public boolean isActive() { return this.mIsActive; } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public void setMediaButtonReceiver(PendingIntent pendingIntent) { } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public void setRatingType(int i) { this.mRatingType = i; } public MediaSessionImplBase(Context context, String str, ComponentName componentName, PendingIntent pendingIntent, VersionedParcelable versionedParcelable, Bundle bundle) { if (componentName == null) { throw new IllegalArgumentException("MediaButtonReceiver component may not be null"); } this.mContext = context; this.mPackageName = context.getPackageName(); this.mSessionInfo = bundle; this.mAudioManager = (AudioManager) context.getSystemService("audio"); this.mTag = str; this.mMediaButtonReceiverComponentName = componentName; this.mMediaButtonReceiverIntent = pendingIntent; MediaSessionStub mediaSessionStub = new MediaSessionStub(); this.mStub = mediaSessionStub; this.mToken = new Token(mediaSessionStub, null, versionedParcelable); this.mRatingType = 0; this.mVolumeType = 1; this.mLocalStream = 3; this.mRcc = new RemoteControlClient(pendingIntent); } /* JADX WARN: Removed duplicated region for block: B:18:0x0033 A[Catch: all -> 0x000c, TryCatch #0 {all -> 0x000c, blocks: (B:4:0x0003, B:6:0x0008, B:10:0x0013, B:11:0x001e, B:13:0x0024, B:15:0x0028, B:16:0x002d, B:18:0x0033, B:19:0x0038), top: B:3:0x0003 }] */ @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl /* Code decompiled incorrectly, please refer to instructions dump. To view partially-correct add '--show-bad-code' argument */ public void setCallback(android.support.v4.media.session.MediaSessionCompat.Callback r5, android.os.Handler r6) { /* r4 = this; java.lang.Object r0 = r4.mLock monitor-enter(r0) android.support.v4.media.session.MediaSessionCompat$MediaSessionImplBase$MessageHandler r1 = r4.mHandler // Catch: java.lang.Throwable -> Lc r2 = 0 if (r1 == 0) goto Le r1.removeCallbacksAndMessages(r2) // Catch: java.lang.Throwable -> Lc goto Le Lc: r5 = move-exception goto L3a Le: if (r5 == 0) goto L1d if (r6 != 0) goto L13 goto L1d L13: android.support.v4.media.session.MediaSessionCompat$MediaSessionImplBase$MessageHandler r1 = new android.support.v4.media.session.MediaSessionCompat$MediaSessionImplBase$MessageHandler // Catch: java.lang.Throwable -> Lc android.os.Looper r3 = r6.getLooper() // Catch: java.lang.Throwable -> Lc r1.(r3) // Catch: java.lang.Throwable -> Lc goto L1e L1d: r1 = r2 L1e: r4.mHandler = r1 // Catch: java.lang.Throwable -> Lc android.support.v4.media.session.MediaSessionCompat$Callback r1 = r4.mCallback // Catch: java.lang.Throwable -> Lc if (r1 == r5) goto L2d android.support.v4.media.session.MediaSessionCompat$Callback r1 = r4.mCallback // Catch: java.lang.Throwable -> Lc if (r1 == 0) goto L2d android.support.v4.media.session.MediaSessionCompat$Callback r1 = r4.mCallback // Catch: java.lang.Throwable -> Lc r1.setSessionImpl(r2, r2) // Catch: java.lang.Throwable -> Lc L2d: r4.mCallback = r5 // Catch: java.lang.Throwable -> Lc android.support.v4.media.session.MediaSessionCompat$Callback r5 = r4.mCallback // Catch: java.lang.Throwable -> Lc if (r5 == 0) goto L38 android.support.v4.media.session.MediaSessionCompat$Callback r5 = r4.mCallback // Catch: java.lang.Throwable -> Lc r5.setSessionImpl(r4, r6) // Catch: java.lang.Throwable -> Lc L38: monitor-exit(r0) // Catch: java.lang.Throwable -> Lc return L3a: monitor-exit(r0) // Catch: java.lang.Throwable -> Lc throw r5 */ throw new UnsupportedOperationException("Method not decompiled: android.support.v4.media.session.MediaSessionCompat.MediaSessionImplBase.setCallback(android.support.v4.media.session.MediaSessionCompat$Callback, android.os.Handler):void"); } public void postToHandler(int i, int i2, int i3, Object obj, Bundle bundle) { synchronized (this.mLock) { try { MessageHandler messageHandler = this.mHandler; if (messageHandler != null) { Message obtainMessage = messageHandler.obtainMessage(i, i2, i3, obj); Bundle bundle2 = new Bundle(); int callingUid = Binder.getCallingUid(); bundle2.putInt("data_calling_uid", callingUid); bundle2.putString(MediaSessionCompat.DATA_CALLING_PACKAGE, getPackageNameForUid(callingUid)); int callingPid = Binder.getCallingPid(); if (callingPid > 0) { bundle2.putInt("data_calling_pid", callingPid); } else { bundle2.putInt("data_calling_pid", -1); } if (bundle != null) { bundle2.putBundle(MediaSessionCompat.DATA_EXTRAS, bundle); } obtainMessage.setData(bundle2); obtainMessage.sendToTarget(); } } catch (Throwable th) { throw th; } } } public String getPackageNameForUid(int i) { String nameForUid = this.mContext.getPackageManager().getNameForUid(i); return TextUtils.isEmpty(nameForUid) ? MediaSessionManager.RemoteUserInfo.LEGACY_CONTROLLER : nameForUid; } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public void setFlags(int i) { synchronized (this.mLock) { this.mFlags = i | 3; } } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public void setPlaybackToLocal(int i) { VolumeProviderCompat volumeProviderCompat = this.mVolumeProvider; if (volumeProviderCompat != null) { volumeProviderCompat.setCallback(null); } this.mLocalStream = i; this.mVolumeType = 1; int i2 = this.mVolumeType; int i3 = this.mLocalStream; sendVolumeInfoChanged(new ParcelableVolumeInfo(i2, i3, 2, this.mAudioManager.getStreamMaxVolume(i3), this.mAudioManager.getStreamVolume(this.mLocalStream))); } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public void setPlaybackToRemote(VolumeProviderCompat volumeProviderCompat) { if (volumeProviderCompat == null) { throw new IllegalArgumentException("volumeProvider may not be null"); } VolumeProviderCompat volumeProviderCompat2 = this.mVolumeProvider; if (volumeProviderCompat2 != null) { volumeProviderCompat2.setCallback(null); } this.mVolumeType = 2; this.mVolumeProvider = volumeProviderCompat; sendVolumeInfoChanged(new ParcelableVolumeInfo(this.mVolumeType, this.mLocalStream, this.mVolumeProvider.getVolumeControl(), this.mVolumeProvider.getMaxVolume(), this.mVolumeProvider.getCurrentVolume())); volumeProviderCompat.setCallback(this.mVolumeCallback); } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public void setActive(boolean z) { if (z == this.mIsActive) { return; } this.mIsActive = z; updateMbrAndRcc(); } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public void sendSessionEvent(String str, Bundle bundle) { sendEvent(str, bundle); } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public void release() { this.mIsActive = false; this.mDestroyed = true; updateMbrAndRcc(); sendSessionDestroyed(); setCallback(null, null); } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public void setPlaybackState(PlaybackStateCompat playbackStateCompat) { synchronized (this.mLock) { this.mState = playbackStateCompat; } sendState(playbackStateCompat); if (this.mIsActive) { if (playbackStateCompat == null) { this.mRcc.setPlaybackState(0); this.mRcc.setTransportControlFlags(0); } else { setRccState(playbackStateCompat); this.mRcc.setTransportControlFlags(getRccTransportControlFlagsFromActions(playbackStateCompat.getActions())); } } } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public PlaybackStateCompat getPlaybackState() { PlaybackStateCompat playbackStateCompat; synchronized (this.mLock) { playbackStateCompat = this.mState; } return playbackStateCompat; } public void setRccState(PlaybackStateCompat playbackStateCompat) { this.mRcc.setPlaybackState(getRccStateFromState(playbackStateCompat.getState())); } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public void setMetadata(MediaMetadataCompat mediaMetadataCompat) { if (mediaMetadataCompat != null) { mediaMetadataCompat = new MediaMetadataCompat.Builder(mediaMetadataCompat, MediaSessionCompat.sMaxBitmapSize).build(); } synchronized (this.mLock) { this.mMetadata = mediaMetadataCompat; } sendMetadata(mediaMetadataCompat); if (this.mIsActive) { buildRccMetadata(mediaMetadataCompat == null ? null : mediaMetadataCompat.getBundle()).apply(); } } public RemoteControlClient.MetadataEditor buildRccMetadata(Bundle bundle) { RemoteControlClient.MetadataEditor editMetadata = this.mRcc.editMetadata(true); if (bundle == null) { return editMetadata; } if (bundle.containsKey(MediaMetadataCompat.METADATA_KEY_ART)) { Bitmap bitmap = (Bitmap) bundle.getParcelable(MediaMetadataCompat.METADATA_KEY_ART); if (bitmap != null) { bitmap = bitmap.copy(bitmap.getConfig(), false); } editMetadata.putBitmap(100, bitmap); } else if (bundle.containsKey(MediaMetadataCompat.METADATA_KEY_ALBUM_ART)) { Bitmap bitmap2 = (Bitmap) bundle.getParcelable(MediaMetadataCompat.METADATA_KEY_ALBUM_ART); if (bitmap2 != null) { bitmap2 = bitmap2.copy(bitmap2.getConfig(), false); } editMetadata.putBitmap(100, bitmap2); } if (bundle.containsKey(MediaMetadataCompat.METADATA_KEY_ALBUM)) { editMetadata.putString(1, bundle.getString(MediaMetadataCompat.METADATA_KEY_ALBUM)); } if (bundle.containsKey(MediaMetadataCompat.METADATA_KEY_ALBUM_ARTIST)) { editMetadata.putString(13, bundle.getString(MediaMetadataCompat.METADATA_KEY_ALBUM_ARTIST)); } if (bundle.containsKey(MediaMetadataCompat.METADATA_KEY_ARTIST)) { editMetadata.putString(2, bundle.getString(MediaMetadataCompat.METADATA_KEY_ARTIST)); } if (bundle.containsKey(MediaMetadataCompat.METADATA_KEY_AUTHOR)) { editMetadata.putString(3, bundle.getString(MediaMetadataCompat.METADATA_KEY_AUTHOR)); } if (bundle.containsKey(MediaMetadataCompat.METADATA_KEY_COMPILATION)) { editMetadata.putString(15, bundle.getString(MediaMetadataCompat.METADATA_KEY_COMPILATION)); } if (bundle.containsKey(MediaMetadataCompat.METADATA_KEY_COMPOSER)) { editMetadata.putString(4, bundle.getString(MediaMetadataCompat.METADATA_KEY_COMPOSER)); } if (bundle.containsKey(MediaMetadataCompat.METADATA_KEY_DATE)) { editMetadata.putString(5, bundle.getString(MediaMetadataCompat.METADATA_KEY_DATE)); } if (bundle.containsKey(MediaMetadataCompat.METADATA_KEY_DISC_NUMBER)) { editMetadata.putLong(14, bundle.getLong(MediaMetadataCompat.METADATA_KEY_DISC_NUMBER)); } if (bundle.containsKey(MediaMetadataCompat.METADATA_KEY_DURATION)) { editMetadata.putLong(9, bundle.getLong(MediaMetadataCompat.METADATA_KEY_DURATION)); } if (bundle.containsKey(MediaMetadataCompat.METADATA_KEY_GENRE)) { editMetadata.putString(6, bundle.getString(MediaMetadataCompat.METADATA_KEY_GENRE)); } if (bundle.containsKey(MediaMetadataCompat.METADATA_KEY_TITLE)) { editMetadata.putString(7, bundle.getString(MediaMetadataCompat.METADATA_KEY_TITLE)); } if (bundle.containsKey(MediaMetadataCompat.METADATA_KEY_TRACK_NUMBER)) { editMetadata.putLong(0, bundle.getLong(MediaMetadataCompat.METADATA_KEY_TRACK_NUMBER)); } if (bundle.containsKey(MediaMetadataCompat.METADATA_KEY_WRITER)) { editMetadata.putString(11, bundle.getString(MediaMetadataCompat.METADATA_KEY_WRITER)); } return editMetadata; } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public void setSessionActivity(PendingIntent pendingIntent) { synchronized (this.mLock) { this.mSessionActivity = pendingIntent; } } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public void setQueue(List list) { this.mQueue = list; sendQueue(list); } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public void setQueueTitle(CharSequence charSequence) { this.mQueueTitle = charSequence; sendQueueTitle(charSequence); } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public void setCaptioningEnabled(boolean z) { if (this.mCaptioningEnabled != z) { this.mCaptioningEnabled = z; sendCaptioningEnabled(z); } } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public void setRepeatMode(int i) { if (this.mRepeatMode != i) { this.mRepeatMode = i; sendRepeatMode(i); } } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public void setShuffleMode(int i) { if (this.mShuffleMode != i) { this.mShuffleMode = i; sendShuffleMode(i); } } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public void setExtras(Bundle bundle) { this.mExtras = bundle; sendExtras(bundle); } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public MediaSessionManager.RemoteUserInfo getCurrentControllerInfo() { MediaSessionManager.RemoteUserInfo remoteUserInfo; synchronized (this.mLock) { remoteUserInfo = this.mRemoteUserInfo; } return remoteUserInfo; } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public void setCurrentControllerInfo(MediaSessionManager.RemoteUserInfo remoteUserInfo) { synchronized (this.mLock) { this.mRemoteUserInfo = remoteUserInfo; } } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public Callback getCallback() { Callback callback; synchronized (this.mLock) { callback = this.mCallback; } return callback; } public void updateMbrAndRcc() { if (this.mIsActive) { registerMediaButtonEventReceiver(this.mMediaButtonReceiverIntent, this.mMediaButtonReceiverComponentName); this.mAudioManager.registerRemoteControlClient(this.mRcc); setMetadata(this.mMetadata); setPlaybackState(this.mState); return; } unregisterMediaButtonEventReceiver(this.mMediaButtonReceiverIntent, this.mMediaButtonReceiverComponentName); this.mRcc.setPlaybackState(0); this.mAudioManager.unregisterRemoteControlClient(this.mRcc); } public void registerMediaButtonEventReceiver(PendingIntent pendingIntent, ComponentName componentName) { this.mAudioManager.registerMediaButtonEventReceiver(componentName); } public void unregisterMediaButtonEventReceiver(PendingIntent pendingIntent, ComponentName componentName) { this.mAudioManager.unregisterMediaButtonEventReceiver(componentName); } public void adjustVolume(int i, int i2) { if (this.mVolumeType != 2) { this.mAudioManager.adjustStreamVolume(this.mLocalStream, i, i2); return; } VolumeProviderCompat volumeProviderCompat = this.mVolumeProvider; if (volumeProviderCompat != null) { volumeProviderCompat.onAdjustVolume(i); } } public void setVolumeTo(int i, int i2) { if (this.mVolumeType != 2) { this.mAudioManager.setStreamVolume(this.mLocalStream, i, i2); return; } VolumeProviderCompat volumeProviderCompat = this.mVolumeProvider; if (volumeProviderCompat != null) { volumeProviderCompat.onSetVolumeTo(i); } } public void sendVolumeInfoChanged(ParcelableVolumeInfo parcelableVolumeInfo) { for (int beginBroadcast = this.mControllerCallbacks.beginBroadcast() - 1; beginBroadcast >= 0; beginBroadcast--) { try { this.mControllerCallbacks.getBroadcastItem(beginBroadcast).onVolumeInfoChanged(parcelableVolumeInfo); } catch (RemoteException unused) { } } this.mControllerCallbacks.finishBroadcast(); } private void sendSessionDestroyed() { for (int beginBroadcast = this.mControllerCallbacks.beginBroadcast() - 1; beginBroadcast >= 0; beginBroadcast--) { try { this.mControllerCallbacks.getBroadcastItem(beginBroadcast).onSessionDestroyed(); } catch (RemoteException unused) { } } this.mControllerCallbacks.finishBroadcast(); this.mControllerCallbacks.kill(); } private void sendEvent(String str, Bundle bundle) { for (int beginBroadcast = this.mControllerCallbacks.beginBroadcast() - 1; beginBroadcast >= 0; beginBroadcast--) { try { this.mControllerCallbacks.getBroadcastItem(beginBroadcast).onEvent(str, bundle); } catch (RemoteException unused) { } } this.mControllerCallbacks.finishBroadcast(); } private void sendState(PlaybackStateCompat playbackStateCompat) { for (int beginBroadcast = this.mControllerCallbacks.beginBroadcast() - 1; beginBroadcast >= 0; beginBroadcast--) { try { this.mControllerCallbacks.getBroadcastItem(beginBroadcast).onPlaybackStateChanged(playbackStateCompat); } catch (RemoteException unused) { } } this.mControllerCallbacks.finishBroadcast(); } private void sendMetadata(MediaMetadataCompat mediaMetadataCompat) { for (int beginBroadcast = this.mControllerCallbacks.beginBroadcast() - 1; beginBroadcast >= 0; beginBroadcast--) { try { this.mControllerCallbacks.getBroadcastItem(beginBroadcast).onMetadataChanged(mediaMetadataCompat); } catch (RemoteException unused) { } } this.mControllerCallbacks.finishBroadcast(); } private void sendQueue(List list) { for (int beginBroadcast = this.mControllerCallbacks.beginBroadcast() - 1; beginBroadcast >= 0; beginBroadcast--) { try { this.mControllerCallbacks.getBroadcastItem(beginBroadcast).onQueueChanged(list); } catch (RemoteException unused) { } } this.mControllerCallbacks.finishBroadcast(); } private void sendQueueTitle(CharSequence charSequence) { for (int beginBroadcast = this.mControllerCallbacks.beginBroadcast() - 1; beginBroadcast >= 0; beginBroadcast--) { try { this.mControllerCallbacks.getBroadcastItem(beginBroadcast).onQueueTitleChanged(charSequence); } catch (RemoteException unused) { } } this.mControllerCallbacks.finishBroadcast(); } private void sendCaptioningEnabled(boolean z) { for (int beginBroadcast = this.mControllerCallbacks.beginBroadcast() - 1; beginBroadcast >= 0; beginBroadcast--) { try { this.mControllerCallbacks.getBroadcastItem(beginBroadcast).onCaptioningEnabledChanged(z); } catch (RemoteException unused) { } } this.mControllerCallbacks.finishBroadcast(); } private void sendRepeatMode(int i) { for (int beginBroadcast = this.mControllerCallbacks.beginBroadcast() - 1; beginBroadcast >= 0; beginBroadcast--) { try { this.mControllerCallbacks.getBroadcastItem(beginBroadcast).onRepeatModeChanged(i); } catch (RemoteException unused) { } } this.mControllerCallbacks.finishBroadcast(); } private void sendShuffleMode(int i) { for (int beginBroadcast = this.mControllerCallbacks.beginBroadcast() - 1; beginBroadcast >= 0; beginBroadcast--) { try { this.mControllerCallbacks.getBroadcastItem(beginBroadcast).onShuffleModeChanged(i); } catch (RemoteException unused) { } } this.mControllerCallbacks.finishBroadcast(); } private void sendExtras(Bundle bundle) { for (int beginBroadcast = this.mControllerCallbacks.beginBroadcast() - 1; beginBroadcast >= 0; beginBroadcast--) { try { this.mControllerCallbacks.getBroadcastItem(beginBroadcast).onExtrasChanged(bundle); } catch (RemoteException unused) { } } this.mControllerCallbacks.finishBroadcast(); } public class MediaSessionStub extends IMediaSession.Stub { @Override // android.support.v4.media.session.IMediaSession public boolean isShuffleModeEnabledRemoved() { return false; } @Override // android.support.v4.media.session.IMediaSession public boolean isTransportControlEnabled() { return true; } @Override // android.support.v4.media.session.IMediaSession public void setShuffleModeEnabledRemoved(boolean z) throws RemoteException { } public MediaSessionStub() { } @Override // android.support.v4.media.session.IMediaSession public void sendCommand(String str, Bundle bundle, ResultReceiverWrapper resultReceiverWrapper) { postToHandler(1, new Command(str, bundle, resultReceiverWrapper == null ? null : resultReceiverWrapper.mResultReceiver)); } @Override // android.support.v4.media.session.IMediaSession public boolean sendMediaButton(KeyEvent keyEvent) { postToHandler(21, keyEvent); return true; } @Override // android.support.v4.media.session.IMediaSession public void registerCallbackListener(IMediaControllerCallback iMediaControllerCallback) { if (MediaSessionImplBase.this.mDestroyed) { try { iMediaControllerCallback.onSessionDestroyed(); } catch (Exception unused) { } } else { MediaSessionImplBase.this.mControllerCallbacks.register(iMediaControllerCallback, new MediaSessionManager.RemoteUserInfo(MediaSessionImplBase.this.getPackageNameForUid(Binder.getCallingUid()), Binder.getCallingPid(), Binder.getCallingUid())); } } @Override // android.support.v4.media.session.IMediaSession public void unregisterCallbackListener(IMediaControllerCallback iMediaControllerCallback) { MediaSessionImplBase.this.mControllerCallbacks.unregister(iMediaControllerCallback); } @Override // android.support.v4.media.session.IMediaSession public String getPackageName() { return MediaSessionImplBase.this.mPackageName; } @Override // android.support.v4.media.session.IMediaSession public Bundle getSessionInfo() { if (MediaSessionImplBase.this.mSessionInfo == null) { return null; } return new Bundle(MediaSessionImplBase.this.mSessionInfo); } @Override // android.support.v4.media.session.IMediaSession public String getTag() { return MediaSessionImplBase.this.mTag; } @Override // android.support.v4.media.session.IMediaSession public PendingIntent getLaunchPendingIntent() { PendingIntent pendingIntent; synchronized (MediaSessionImplBase.this.mLock) { pendingIntent = MediaSessionImplBase.this.mSessionActivity; } return pendingIntent; } @Override // android.support.v4.media.session.IMediaSession public long getFlags() { long j; synchronized (MediaSessionImplBase.this.mLock) { j = MediaSessionImplBase.this.mFlags; } return j; } @Override // android.support.v4.media.session.IMediaSession public ParcelableVolumeInfo getVolumeAttributes() { int i; int i2; int i3; int streamMaxVolume; int streamVolume; synchronized (MediaSessionImplBase.this.mLock) { try { MediaSessionImplBase mediaSessionImplBase = MediaSessionImplBase.this; i = mediaSessionImplBase.mVolumeType; i2 = mediaSessionImplBase.mLocalStream; VolumeProviderCompat volumeProviderCompat = mediaSessionImplBase.mVolumeProvider; i3 = 2; if (i == 2) { int volumeControl = volumeProviderCompat.getVolumeControl(); int maxVolume = volumeProviderCompat.getMaxVolume(); streamVolume = volumeProviderCompat.getCurrentVolume(); streamMaxVolume = maxVolume; i3 = volumeControl; } else { streamMaxVolume = mediaSessionImplBase.mAudioManager.getStreamMaxVolume(i2); streamVolume = MediaSessionImplBase.this.mAudioManager.getStreamVolume(i2); } } catch (Throwable th) { throw th; } } return new ParcelableVolumeInfo(i, i2, i3, streamMaxVolume, streamVolume); } @Override // android.support.v4.media.session.IMediaSession public void adjustVolume(int i, int i2, String str) { MediaSessionImplBase.this.adjustVolume(i, i2); } @Override // android.support.v4.media.session.IMediaSession public void setVolumeTo(int i, int i2, String str) { MediaSessionImplBase.this.setVolumeTo(i, i2); } @Override // android.support.v4.media.session.IMediaSession public void prepare() throws RemoteException { postToHandler(3); } @Override // android.support.v4.media.session.IMediaSession public void prepareFromMediaId(String str, Bundle bundle) throws RemoteException { postToHandler(4, str, bundle); } @Override // android.support.v4.media.session.IMediaSession public void prepareFromSearch(String str, Bundle bundle) throws RemoteException { postToHandler(5, str, bundle); } @Override // android.support.v4.media.session.IMediaSession public void prepareFromUri(Uri uri, Bundle bundle) throws RemoteException { postToHandler(6, uri, bundle); } @Override // android.support.v4.media.session.IMediaSession public void play() throws RemoteException { postToHandler(7); } @Override // android.support.v4.media.session.IMediaSession public void playFromMediaId(String str, Bundle bundle) throws RemoteException { postToHandler(8, str, bundle); } @Override // android.support.v4.media.session.IMediaSession public void playFromSearch(String str, Bundle bundle) throws RemoteException { postToHandler(9, str, bundle); } @Override // android.support.v4.media.session.IMediaSession public void playFromUri(Uri uri, Bundle bundle) throws RemoteException { postToHandler(10, uri, bundle); } @Override // android.support.v4.media.session.IMediaSession public void skipToQueueItem(long j) { postToHandler(11, Long.valueOf(j)); } @Override // android.support.v4.media.session.IMediaSession public void pause() throws RemoteException { postToHandler(12); } @Override // android.support.v4.media.session.IMediaSession public void stop() throws RemoteException { postToHandler(13); } @Override // android.support.v4.media.session.IMediaSession public void next() throws RemoteException { postToHandler(14); } @Override // android.support.v4.media.session.IMediaSession public void previous() throws RemoteException { postToHandler(15); } @Override // android.support.v4.media.session.IMediaSession public void fastForward() throws RemoteException { postToHandler(16); } @Override // android.support.v4.media.session.IMediaSession public void rewind() throws RemoteException { postToHandler(17); } @Override // android.support.v4.media.session.IMediaSession public void seekTo(long j) throws RemoteException { postToHandler(18, Long.valueOf(j)); } @Override // android.support.v4.media.session.IMediaSession public void rate(RatingCompat ratingCompat) throws RemoteException { postToHandler(19, ratingCompat); } @Override // android.support.v4.media.session.IMediaSession public void rateWithExtras(RatingCompat ratingCompat, Bundle bundle) throws RemoteException { postToHandler(31, ratingCompat, bundle); } @Override // android.support.v4.media.session.IMediaSession public void setPlaybackSpeed(float f) throws RemoteException { postToHandler(32, Float.valueOf(f)); } @Override // android.support.v4.media.session.IMediaSession public void setCaptioningEnabled(boolean z) throws RemoteException { postToHandler(29, Boolean.valueOf(z)); } @Override // android.support.v4.media.session.IMediaSession public void setRepeatMode(int i) throws RemoteException { postToHandler(23, i); } @Override // android.support.v4.media.session.IMediaSession public void setShuffleMode(int i) throws RemoteException { postToHandler(30, i); } @Override // android.support.v4.media.session.IMediaSession public void sendCustomAction(String str, Bundle bundle) throws RemoteException { postToHandler(20, str, bundle); } @Override // android.support.v4.media.session.IMediaSession public MediaMetadataCompat getMetadata() { return MediaSessionImplBase.this.mMetadata; } @Override // android.support.v4.media.session.IMediaSession public PlaybackStateCompat getPlaybackState() { PlaybackStateCompat playbackStateCompat; MediaMetadataCompat mediaMetadataCompat; synchronized (MediaSessionImplBase.this.mLock) { MediaSessionImplBase mediaSessionImplBase = MediaSessionImplBase.this; playbackStateCompat = mediaSessionImplBase.mState; mediaMetadataCompat = mediaSessionImplBase.mMetadata; } return MediaSessionCompat.getStateWithUpdatedPosition(playbackStateCompat, mediaMetadataCompat); } @Override // android.support.v4.media.session.IMediaSession public List getQueue() { List list; synchronized (MediaSessionImplBase.this.mLock) { list = MediaSessionImplBase.this.mQueue; } return list; } @Override // android.support.v4.media.session.IMediaSession public void addQueueItem(MediaDescriptionCompat mediaDescriptionCompat) { postToHandler(25, mediaDescriptionCompat); } @Override // android.support.v4.media.session.IMediaSession public void addQueueItemAt(MediaDescriptionCompat mediaDescriptionCompat, int i) { postToHandler(26, mediaDescriptionCompat, i); } @Override // android.support.v4.media.session.IMediaSession public void removeQueueItem(MediaDescriptionCompat mediaDescriptionCompat) { postToHandler(27, mediaDescriptionCompat); } @Override // android.support.v4.media.session.IMediaSession public void removeQueueItemAt(int i) { postToHandler(28, i); } @Override // android.support.v4.media.session.IMediaSession public CharSequence getQueueTitle() { return MediaSessionImplBase.this.mQueueTitle; } @Override // android.support.v4.media.session.IMediaSession public Bundle getExtras() { Bundle bundle; synchronized (MediaSessionImplBase.this.mLock) { bundle = MediaSessionImplBase.this.mExtras; } return bundle; } @Override // android.support.v4.media.session.IMediaSession public int getRatingType() { return MediaSessionImplBase.this.mRatingType; } @Override // android.support.v4.media.session.IMediaSession public boolean isCaptioningEnabled() { return MediaSessionImplBase.this.mCaptioningEnabled; } @Override // android.support.v4.media.session.IMediaSession public int getRepeatMode() { return MediaSessionImplBase.this.mRepeatMode; } @Override // android.support.v4.media.session.IMediaSession public int getShuffleMode() { return MediaSessionImplBase.this.mShuffleMode; } public void postToHandler(int i) { MediaSessionImplBase.this.postToHandler(i, 0, 0, null, null); } public void postToHandler(int i, int i2) { MediaSessionImplBase.this.postToHandler(i, i2, 0, null, null); } public void postToHandler(int i, Object obj) { MediaSessionImplBase.this.postToHandler(i, 0, 0, obj, null); } public void postToHandler(int i, Object obj, int i2) { MediaSessionImplBase.this.postToHandler(i, i2, 0, obj, null); } public void postToHandler(int i, Object obj, Bundle bundle) { MediaSessionImplBase.this.postToHandler(i, 0, 0, obj, bundle); } } public static final class Command { public final String command; public final Bundle extras; public final ResultReceiver stub; public Command(String str, Bundle bundle, ResultReceiver resultReceiver) { this.command = str; this.extras = bundle; this.stub = resultReceiver; } } public class MessageHandler extends Handler { private static final int KEYCODE_MEDIA_PAUSE = 127; private static final int KEYCODE_MEDIA_PLAY = 126; private static final int MSG_ADD_QUEUE_ITEM = 25; private static final int MSG_ADD_QUEUE_ITEM_AT = 26; private static final int MSG_ADJUST_VOLUME = 2; private static final int MSG_COMMAND = 1; private static final int MSG_CUSTOM_ACTION = 20; private static final int MSG_FAST_FORWARD = 16; private static final int MSG_MEDIA_BUTTON = 21; private static final int MSG_NEXT = 14; private static final int MSG_PAUSE = 12; private static final int MSG_PLAY = 7; private static final int MSG_PLAY_MEDIA_ID = 8; private static final int MSG_PLAY_SEARCH = 9; private static final int MSG_PLAY_URI = 10; private static final int MSG_PREPARE = 3; private static final int MSG_PREPARE_MEDIA_ID = 4; private static final int MSG_PREPARE_SEARCH = 5; private static final int MSG_PREPARE_URI = 6; private static final int MSG_PREVIOUS = 15; private static final int MSG_RATE = 19; private static final int MSG_RATE_EXTRA = 31; private static final int MSG_REMOVE_QUEUE_ITEM = 27; private static final int MSG_REMOVE_QUEUE_ITEM_AT = 28; private static final int MSG_REWIND = 17; private static final int MSG_SEEK_TO = 18; private static final int MSG_SET_CAPTIONING_ENABLED = 29; private static final int MSG_SET_PLAYBACK_SPEED = 32; private static final int MSG_SET_REPEAT_MODE = 23; private static final int MSG_SET_SHUFFLE_MODE = 30; private static final int MSG_SET_VOLUME = 22; private static final int MSG_SKIP_TO_ITEM = 11; private static final int MSG_STOP = 13; public MessageHandler(Looper looper) { super(looper); } @Override // android.os.Handler public void handleMessage(Message message) { Callback callback = MediaSessionImplBase.this.mCallback; if (callback == null) { return; } Bundle data = message.getData(); MediaSessionCompat.ensureClassLoader(data); MediaSessionImplBase.this.setCurrentControllerInfo(new MediaSessionManager.RemoteUserInfo(data.getString(MediaSessionCompat.DATA_CALLING_PACKAGE), data.getInt("data_calling_pid"), data.getInt("data_calling_uid"))); Bundle bundle = data.getBundle(MediaSessionCompat.DATA_EXTRAS); MediaSessionCompat.ensureClassLoader(bundle); try { switch (message.what) { case 1: Command command = (Command) message.obj; callback.onCommand(command.command, command.extras, command.stub); break; case 2: MediaSessionImplBase.this.adjustVolume(message.arg1, 0); break; case 3: callback.onPrepare(); break; case 4: callback.onPrepareFromMediaId((String) message.obj, bundle); break; case 5: callback.onPrepareFromSearch((String) message.obj, bundle); break; case 6: callback.onPrepareFromUri((Uri) message.obj, bundle); break; case 7: callback.onPlay(); break; case 8: callback.onPlayFromMediaId((String) message.obj, bundle); break; case 9: callback.onPlayFromSearch((String) message.obj, bundle); break; case 10: callback.onPlayFromUri((Uri) message.obj, bundle); break; case 11: callback.onSkipToQueueItem(((Long) message.obj).longValue()); break; case 12: callback.onPause(); break; case 13: callback.onStop(); break; case 14: callback.onSkipToNext(); break; case 15: callback.onSkipToPrevious(); break; case 16: callback.onFastForward(); break; case 17: callback.onRewind(); break; case 18: callback.onSeekTo(((Long) message.obj).longValue()); break; case 19: callback.onSetRating((RatingCompat) message.obj); break; case 20: callback.onCustomAction((String) message.obj, bundle); break; case 21: KeyEvent keyEvent = (KeyEvent) message.obj; Intent intent = new Intent("android.intent.action.MEDIA_BUTTON"); intent.putExtra("android.intent.extra.KEY_EVENT", keyEvent); if (!callback.onMediaButtonEvent(intent)) { onMediaButtonEvent(keyEvent, callback); break; } break; case 22: MediaSessionImplBase.this.setVolumeTo(message.arg1, 0); break; case 23: callback.onSetRepeatMode(message.arg1); break; case 25: callback.onAddQueueItem((MediaDescriptionCompat) message.obj); break; case 26: callback.onAddQueueItem((MediaDescriptionCompat) message.obj, message.arg1); break; case 27: callback.onRemoveQueueItem((MediaDescriptionCompat) message.obj); break; case 28: List list = MediaSessionImplBase.this.mQueue; if (list != null) { int i = message.arg1; QueueItem queueItem = (i < 0 || i >= list.size()) ? null : MediaSessionImplBase.this.mQueue.get(message.arg1); if (queueItem != null) { callback.onRemoveQueueItem(queueItem.getDescription()); break; } } break; case 29: callback.onSetCaptioningEnabled(((Boolean) message.obj).booleanValue()); break; case 30: callback.onSetShuffleMode(message.arg1); break; case 31: callback.onSetRating((RatingCompat) message.obj, bundle); break; case 32: callback.onSetPlaybackSpeed(((Float) message.obj).floatValue()); break; } } finally { MediaSessionImplBase.this.setCurrentControllerInfo(null); } } private void onMediaButtonEvent(KeyEvent keyEvent, Callback callback) { if (keyEvent == null || keyEvent.getAction() != 0) { return; } PlaybackStateCompat playbackStateCompat = MediaSessionImplBase.this.mState; long actions = playbackStateCompat == null ? 0L : playbackStateCompat.getActions(); int keyCode = keyEvent.getKeyCode(); if (keyCode != 79) { if (keyCode == 126) { if ((actions & 4) != 0) { callback.onPlay(); return; } return; } if (keyCode == 127) { if ((actions & 2) != 0) { callback.onPause(); return; } return; } switch (keyCode) { case 86: if ((actions & 1) != 0) { callback.onStop(); break; } break; case 87: if ((actions & 32) != 0) { callback.onSkipToNext(); break; } break; case 88: if ((actions & 16) != 0) { callback.onSkipToPrevious(); break; } break; case TsExtractor.TS_STREAM_TYPE_DVBSUBS /* 89 */: if ((actions & 8) != 0) { callback.onRewind(); break; } break; case 90: if ((actions & 64) != 0) { callback.onFastForward(); break; } break; } } Log.w(MediaSessionCompat.TAG, "KEYCODE_MEDIA_PLAY_PAUSE and KEYCODE_HEADSETHOOK are handled already"); } } } @RequiresApi(18) public static class MediaSessionImplApi18 extends MediaSessionImplBase { private static boolean sIsMbrPendingIntentSupported = true; public MediaSessionImplApi18(Context context, String str, ComponentName componentName, PendingIntent pendingIntent, VersionedParcelable versionedParcelable, Bundle bundle) { super(context, str, componentName, pendingIntent, versionedParcelable, bundle); } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImplBase, android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public void setCallback(Callback callback, Handler handler) { super.setCallback(callback, handler); if (callback == null) { this.mRcc.setPlaybackPositionUpdateListener(null); } else { this.mRcc.setPlaybackPositionUpdateListener(new RemoteControlClient.OnPlaybackPositionUpdateListener() { // from class: android.support.v4.media.session.MediaSessionCompat.MediaSessionImplApi18.1 @Override // android.media.RemoteControlClient.OnPlaybackPositionUpdateListener public void onPlaybackPositionUpdate(long j) { MediaSessionImplApi18.this.postToHandler(18, -1, -1, Long.valueOf(j), null); } }); } } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImplBase public void setRccState(PlaybackStateCompat playbackStateCompat) { long position = playbackStateCompat.getPosition(); float playbackSpeed = playbackStateCompat.getPlaybackSpeed(); long lastPositionUpdateTime = playbackStateCompat.getLastPositionUpdateTime(); long elapsedRealtime = SystemClock.elapsedRealtime(); if (playbackStateCompat.getState() == 3) { long j = 0; if (position > 0) { if (lastPositionUpdateTime > 0) { j = elapsedRealtime - lastPositionUpdateTime; if (playbackSpeed > 0.0f && playbackSpeed != 1.0f) { j = (long) (j * playbackSpeed); } } position += j; } } this.mRcc.setPlaybackState(getRccStateFromState(playbackStateCompat.getState()), position, playbackSpeed); } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImplBase public int getRccTransportControlFlagsFromActions(long j) { int rccTransportControlFlagsFromActions = super.getRccTransportControlFlagsFromActions(j); return (j & 256) != 0 ? rccTransportControlFlagsFromActions | 256 : rccTransportControlFlagsFromActions; } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImplBase public void registerMediaButtonEventReceiver(PendingIntent pendingIntent, ComponentName componentName) { if (sIsMbrPendingIntentSupported) { try { this.mAudioManager.registerMediaButtonEventReceiver(pendingIntent); } catch (NullPointerException unused) { Log.w(MediaSessionCompat.TAG, "Unable to register media button event receiver with PendingIntent, falling back to ComponentName."); sIsMbrPendingIntentSupported = false; } } if (sIsMbrPendingIntentSupported) { return; } super.registerMediaButtonEventReceiver(pendingIntent, componentName); } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImplBase public void unregisterMediaButtonEventReceiver(PendingIntent pendingIntent, ComponentName componentName) { if (sIsMbrPendingIntentSupported) { this.mAudioManager.unregisterMediaButtonEventReceiver(pendingIntent); } else { super.unregisterMediaButtonEventReceiver(pendingIntent, componentName); } } } @RequiresApi(19) public static class MediaSessionImplApi19 extends MediaSessionImplApi18 { public MediaSessionImplApi19(Context context, String str, ComponentName componentName, PendingIntent pendingIntent, VersionedParcelable versionedParcelable, Bundle bundle) { super(context, str, componentName, pendingIntent, versionedParcelable, bundle); } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImplApi18, android.support.v4.media.session.MediaSessionCompat.MediaSessionImplBase, android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public void setCallback(Callback callback, Handler handler) { super.setCallback(callback, handler); if (callback == null) { this.mRcc.setMetadataUpdateListener(null); } else { this.mRcc.setMetadataUpdateListener(new RemoteControlClient.OnMetadataUpdateListener() { // from class: android.support.v4.media.session.MediaSessionCompat.MediaSessionImplApi19.1 @Override // android.media.RemoteControlClient.OnMetadataUpdateListener public void onMetadataUpdate(int i, Object obj) { if (i == 268435457 && (obj instanceof Rating)) { MediaSessionImplApi19.this.postToHandler(19, -1, -1, RatingCompat.fromRating(obj), null); } } }); } } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImplApi18, android.support.v4.media.session.MediaSessionCompat.MediaSessionImplBase public int getRccTransportControlFlagsFromActions(long j) { int rccTransportControlFlagsFromActions = super.getRccTransportControlFlagsFromActions(j); return (j & 128) != 0 ? rccTransportControlFlagsFromActions | 512 : rccTransportControlFlagsFromActions; } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImplBase public RemoteControlClient.MetadataEditor buildRccMetadata(Bundle bundle) { RemoteControlClient.MetadataEditor buildRccMetadata = super.buildRccMetadata(bundle); PlaybackStateCompat playbackStateCompat = this.mState; if (((playbackStateCompat == null ? 0L : playbackStateCompat.getActions()) & 128) != 0) { buildRccMetadata.addEditableKey(268435457); } if (bundle == null) { return buildRccMetadata; } if (bundle.containsKey(MediaMetadataCompat.METADATA_KEY_YEAR)) { buildRccMetadata.putLong(8, bundle.getLong(MediaMetadataCompat.METADATA_KEY_YEAR)); } if (bundle.containsKey(MediaMetadataCompat.METADATA_KEY_RATING)) { buildRccMetadata.putObject(101, (Object) bundle.getParcelable(MediaMetadataCompat.METADATA_KEY_RATING)); } if (bundle.containsKey(MediaMetadataCompat.METADATA_KEY_USER_RATING)) { buildRccMetadata.putObject(268435457, (Object) bundle.getParcelable(MediaMetadataCompat.METADATA_KEY_USER_RATING)); } return buildRccMetadata; } } @RequiresApi(21) public static class MediaSessionImplApi21 implements MediaSessionImpl { @GuardedBy("mLock") Callback mCallback; boolean mCaptioningEnabled; MediaMetadataCompat mMetadata; PlaybackStateCompat mPlaybackState; List mQueue; int mRatingType; @GuardedBy("mLock") MediaSessionManager.RemoteUserInfo mRemoteUserInfo; int mRepeatMode; final MediaSession mSessionFwk; Bundle mSessionInfo; int mShuffleMode; final Token mToken; final Object mLock = new Object(); boolean mDestroyed = false; final RemoteCallbackList mExtraControllerCallbacks = new RemoteCallbackList<>(); @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public Object getMediaSession() { return this.mSessionFwk; } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public PlaybackStateCompat getPlaybackState() { return this.mPlaybackState; } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public Object getRemoteControlClient() { return null; } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public Token getSessionToken() { return this.mToken; } public MediaSessionImplApi21(MediaSession mediaSession, VersionedParcelable versionedParcelable, Bundle bundle) { this.mSessionFwk = mediaSession; this.mToken = new Token(mediaSession.getSessionToken(), new ExtraSession(), versionedParcelable); this.mSessionInfo = bundle; setFlags(3); } public MediaSessionImplApi21(Object obj) { if (!(obj instanceof MediaSession)) { throw new IllegalArgumentException("mediaSession is not a valid MediaSession object"); } MediaSession mediaSession = (MediaSession) obj; this.mSessionFwk = mediaSession; this.mToken = new Token(mediaSession.getSessionToken(), new ExtraSession()); this.mSessionInfo = null; setFlags(3); } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public void setCallback(Callback callback, Handler handler) { synchronized (this.mLock) { try { this.mCallback = callback; this.mSessionFwk.setCallback(callback == null ? null : callback.mCallbackFwk, handler); if (callback != null) { callback.setSessionImpl(this, handler); } } catch (Throwable th) { throw th; } } } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl @SuppressLint({"WrongConstant"}) public void setFlags(int i) { this.mSessionFwk.setFlags(i | 3); } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public void setPlaybackToLocal(int i) { AudioAttributes.Builder builder = new AudioAttributes.Builder(); builder.setLegacyStreamType(i); this.mSessionFwk.setPlaybackToLocal(builder.build()); } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public void setPlaybackToRemote(VolumeProviderCompat volumeProviderCompat) { this.mSessionFwk.setPlaybackToRemote((VolumeProvider) volumeProviderCompat.getVolumeProvider()); } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public void setActive(boolean z) { this.mSessionFwk.setActive(z); } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public boolean isActive() { return this.mSessionFwk.isActive(); } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public void sendSessionEvent(String str, Bundle bundle) { this.mSessionFwk.sendSessionEvent(str, bundle); } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public void release() { this.mDestroyed = true; this.mExtraControllerCallbacks.kill(); if (Build.VERSION.SDK_INT == 27) { try { Field declaredField = this.mSessionFwk.getClass().getDeclaredField("mCallback"); declaredField.setAccessible(true); Handler handler = (Handler) declaredField.get(this.mSessionFwk); if (handler != null) { handler.removeCallbacksAndMessages(null); } } catch (Exception e) { Log.w(MediaSessionCompat.TAG, "Exception happened while accessing MediaSession.mCallback.", e); } } this.mSessionFwk.setCallback(null); this.mSessionFwk.release(); } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public void setPlaybackState(PlaybackStateCompat playbackStateCompat) { this.mPlaybackState = playbackStateCompat; for (int beginBroadcast = this.mExtraControllerCallbacks.beginBroadcast() - 1; beginBroadcast >= 0; beginBroadcast--) { try { this.mExtraControllerCallbacks.getBroadcastItem(beginBroadcast).onPlaybackStateChanged(playbackStateCompat); } catch (RemoteException unused) { } } this.mExtraControllerCallbacks.finishBroadcast(); this.mSessionFwk.setPlaybackState(playbackStateCompat == null ? null : (PlaybackState) playbackStateCompat.getPlaybackState()); } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public void setMetadata(MediaMetadataCompat mediaMetadataCompat) { this.mMetadata = mediaMetadataCompat; this.mSessionFwk.setMetadata(mediaMetadataCompat == null ? null : (MediaMetadata) mediaMetadataCompat.getMediaMetadata()); } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public void setSessionActivity(PendingIntent pendingIntent) { this.mSessionFwk.setSessionActivity(pendingIntent); } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public void setMediaButtonReceiver(PendingIntent pendingIntent) { this.mSessionFwk.setMediaButtonReceiver(pendingIntent); } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public void setQueue(List list) { this.mQueue = list; if (list == null) { this.mSessionFwk.setQueue(null); return; } ArrayList arrayList = new ArrayList(); Iterator it = list.iterator(); while (it.hasNext()) { arrayList.add((MediaSession.QueueItem) it.next().getQueueItem()); } this.mSessionFwk.setQueue(arrayList); } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public void setQueueTitle(CharSequence charSequence) { this.mSessionFwk.setQueueTitle(charSequence); } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public void setRatingType(int i) { this.mSessionFwk.setRatingType(i); } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public void setCaptioningEnabled(boolean z) { if (this.mCaptioningEnabled != z) { this.mCaptioningEnabled = z; for (int beginBroadcast = this.mExtraControllerCallbacks.beginBroadcast() - 1; beginBroadcast >= 0; beginBroadcast--) { try { this.mExtraControllerCallbacks.getBroadcastItem(beginBroadcast).onCaptioningEnabledChanged(z); } catch (RemoteException unused) { } } this.mExtraControllerCallbacks.finishBroadcast(); } } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public void setRepeatMode(int i) { if (this.mRepeatMode != i) { this.mRepeatMode = i; for (int beginBroadcast = this.mExtraControllerCallbacks.beginBroadcast() - 1; beginBroadcast >= 0; beginBroadcast--) { try { this.mExtraControllerCallbacks.getBroadcastItem(beginBroadcast).onRepeatModeChanged(i); } catch (RemoteException unused) { } } this.mExtraControllerCallbacks.finishBroadcast(); } } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public void setShuffleMode(int i) { if (this.mShuffleMode != i) { this.mShuffleMode = i; for (int beginBroadcast = this.mExtraControllerCallbacks.beginBroadcast() - 1; beginBroadcast >= 0; beginBroadcast--) { try { this.mExtraControllerCallbacks.getBroadcastItem(beginBroadcast).onShuffleModeChanged(i); } catch (RemoteException unused) { } } this.mExtraControllerCallbacks.finishBroadcast(); } } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public void setExtras(Bundle bundle) { this.mSessionFwk.setExtras(bundle); } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public void setCurrentControllerInfo(MediaSessionManager.RemoteUserInfo remoteUserInfo) { synchronized (this.mLock) { this.mRemoteUserInfo = remoteUserInfo; } } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public String getCallingPackage() { try { return (String) this.mSessionFwk.getClass().getMethod("getCallingPackage", new Class[0]).invoke(this.mSessionFwk, new Object[0]); } catch (Exception e) { Log.e(MediaSessionCompat.TAG, "Cannot execute MediaSession.getCallingPackage()", e); return null; } } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public MediaSessionManager.RemoteUserInfo getCurrentControllerInfo() { MediaSessionManager.RemoteUserInfo remoteUserInfo; synchronized (this.mLock) { remoteUserInfo = this.mRemoteUserInfo; } return remoteUserInfo; } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public Callback getCallback() { Callback callback; synchronized (this.mLock) { callback = this.mCallback; } return callback; } public class ExtraSession extends IMediaSession.Stub { @Override // android.support.v4.media.session.IMediaSession public List getQueue() { return null; } @Override // android.support.v4.media.session.IMediaSession public boolean isShuffleModeEnabledRemoved() { return false; } @Override // android.support.v4.media.session.IMediaSession public void setShuffleModeEnabledRemoved(boolean z) throws RemoteException { } public ExtraSession() { } @Override // android.support.v4.media.session.IMediaSession public void sendCommand(String str, Bundle bundle, ResultReceiverWrapper resultReceiverWrapper) { throw new AssertionError(); } @Override // android.support.v4.media.session.IMediaSession public boolean sendMediaButton(KeyEvent keyEvent) { throw new AssertionError(); } @Override // android.support.v4.media.session.IMediaSession public void registerCallbackListener(IMediaControllerCallback iMediaControllerCallback) { if (MediaSessionImplApi21.this.mDestroyed) { return; } MediaSessionImplApi21.this.mExtraControllerCallbacks.register(iMediaControllerCallback, new MediaSessionManager.RemoteUserInfo(MediaSessionManager.RemoteUserInfo.LEGACY_CONTROLLER, Binder.getCallingPid(), Binder.getCallingUid())); } @Override // android.support.v4.media.session.IMediaSession public void unregisterCallbackListener(IMediaControllerCallback iMediaControllerCallback) { MediaSessionImplApi21.this.mExtraControllerCallbacks.unregister(iMediaControllerCallback); } @Override // android.support.v4.media.session.IMediaSession public String getPackageName() { throw new AssertionError(); } @Override // android.support.v4.media.session.IMediaSession public Bundle getSessionInfo() { if (MediaSessionImplApi21.this.mSessionInfo == null) { return null; } return new Bundle(MediaSessionImplApi21.this.mSessionInfo); } @Override // android.support.v4.media.session.IMediaSession public String getTag() { throw new AssertionError(); } @Override // android.support.v4.media.session.IMediaSession public PendingIntent getLaunchPendingIntent() { throw new AssertionError(); } @Override // android.support.v4.media.session.IMediaSession public long getFlags() { throw new AssertionError(); } @Override // android.support.v4.media.session.IMediaSession public ParcelableVolumeInfo getVolumeAttributes() { throw new AssertionError(); } @Override // android.support.v4.media.session.IMediaSession public void adjustVolume(int i, int i2, String str) { throw new AssertionError(); } @Override // android.support.v4.media.session.IMediaSession public void setVolumeTo(int i, int i2, String str) { throw new AssertionError(); } @Override // android.support.v4.media.session.IMediaSession public void prepare() throws RemoteException { throw new AssertionError(); } @Override // android.support.v4.media.session.IMediaSession public void prepareFromMediaId(String str, Bundle bundle) throws RemoteException { throw new AssertionError(); } @Override // android.support.v4.media.session.IMediaSession public void prepareFromSearch(String str, Bundle bundle) throws RemoteException { throw new AssertionError(); } @Override // android.support.v4.media.session.IMediaSession public void prepareFromUri(Uri uri, Bundle bundle) throws RemoteException { throw new AssertionError(); } @Override // android.support.v4.media.session.IMediaSession public void play() throws RemoteException { throw new AssertionError(); } @Override // android.support.v4.media.session.IMediaSession public void playFromMediaId(String str, Bundle bundle) throws RemoteException { throw new AssertionError(); } @Override // android.support.v4.media.session.IMediaSession public void playFromSearch(String str, Bundle bundle) throws RemoteException { throw new AssertionError(); } @Override // android.support.v4.media.session.IMediaSession public void playFromUri(Uri uri, Bundle bundle) throws RemoteException { throw new AssertionError(); } @Override // android.support.v4.media.session.IMediaSession public void skipToQueueItem(long j) { throw new AssertionError(); } @Override // android.support.v4.media.session.IMediaSession public void pause() throws RemoteException { throw new AssertionError(); } @Override // android.support.v4.media.session.IMediaSession public void stop() throws RemoteException { throw new AssertionError(); } @Override // android.support.v4.media.session.IMediaSession public void next() throws RemoteException { throw new AssertionError(); } @Override // android.support.v4.media.session.IMediaSession public void previous() throws RemoteException { throw new AssertionError(); } @Override // android.support.v4.media.session.IMediaSession public void fastForward() throws RemoteException { throw new AssertionError(); } @Override // android.support.v4.media.session.IMediaSession public void rewind() throws RemoteException { throw new AssertionError(); } @Override // android.support.v4.media.session.IMediaSession public void seekTo(long j) throws RemoteException { throw new AssertionError(); } @Override // android.support.v4.media.session.IMediaSession public void rate(RatingCompat ratingCompat) throws RemoteException { throw new AssertionError(); } @Override // android.support.v4.media.session.IMediaSession public void rateWithExtras(RatingCompat ratingCompat, Bundle bundle) throws RemoteException { throw new AssertionError(); } @Override // android.support.v4.media.session.IMediaSession public void setPlaybackSpeed(float f) throws RemoteException { throw new AssertionError(); } @Override // android.support.v4.media.session.IMediaSession public void setCaptioningEnabled(boolean z) throws RemoteException { throw new AssertionError(); } @Override // android.support.v4.media.session.IMediaSession public void setRepeatMode(int i) throws RemoteException { throw new AssertionError(); } @Override // android.support.v4.media.session.IMediaSession public void setShuffleMode(int i) throws RemoteException { throw new AssertionError(); } @Override // android.support.v4.media.session.IMediaSession public void sendCustomAction(String str, Bundle bundle) throws RemoteException { throw new AssertionError(); } @Override // android.support.v4.media.session.IMediaSession public MediaMetadataCompat getMetadata() { throw new AssertionError(); } @Override // android.support.v4.media.session.IMediaSession public PlaybackStateCompat getPlaybackState() { MediaSessionImplApi21 mediaSessionImplApi21 = MediaSessionImplApi21.this; return MediaSessionCompat.getStateWithUpdatedPosition(mediaSessionImplApi21.mPlaybackState, mediaSessionImplApi21.mMetadata); } @Override // android.support.v4.media.session.IMediaSession public void addQueueItem(MediaDescriptionCompat mediaDescriptionCompat) { throw new AssertionError(); } @Override // android.support.v4.media.session.IMediaSession public void addQueueItemAt(MediaDescriptionCompat mediaDescriptionCompat, int i) { throw new AssertionError(); } @Override // android.support.v4.media.session.IMediaSession public void removeQueueItem(MediaDescriptionCompat mediaDescriptionCompat) { throw new AssertionError(); } @Override // android.support.v4.media.session.IMediaSession public void removeQueueItemAt(int i) { throw new AssertionError(); } @Override // android.support.v4.media.session.IMediaSession public CharSequence getQueueTitle() { throw new AssertionError(); } @Override // android.support.v4.media.session.IMediaSession public Bundle getExtras() { throw new AssertionError(); } @Override // android.support.v4.media.session.IMediaSession public int getRatingType() { return MediaSessionImplApi21.this.mRatingType; } @Override // android.support.v4.media.session.IMediaSession public boolean isCaptioningEnabled() { return MediaSessionImplApi21.this.mCaptioningEnabled; } @Override // android.support.v4.media.session.IMediaSession public int getRepeatMode() { return MediaSessionImplApi21.this.mRepeatMode; } @Override // android.support.v4.media.session.IMediaSession public int getShuffleMode() { return MediaSessionImplApi21.this.mShuffleMode; } @Override // android.support.v4.media.session.IMediaSession public boolean isTransportControlEnabled() { throw new AssertionError(); } } } @RequiresApi(28) public static class MediaSessionImplApi28 extends MediaSessionImplApi21 { @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImplApi21, android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl public void setCurrentControllerInfo(MediaSessionManager.RemoteUserInfo remoteUserInfo) { } public MediaSessionImplApi28(MediaSession mediaSession, VersionedParcelable versionedParcelable, Bundle bundle) { super(mediaSession, versionedParcelable, bundle); } public MediaSessionImplApi28(Object obj) { super(obj); } @Override // android.support.v4.media.session.MediaSessionCompat.MediaSessionImplApi21, android.support.v4.media.session.MediaSessionCompat.MediaSessionImpl @NonNull public final MediaSessionManager.RemoteUserInfo getCurrentControllerInfo() { MediaSessionManager.RemoteUserInfo currentControllerInfo; currentControllerInfo = this.mSessionFwk.getCurrentControllerInfo(); return new MediaSessionManager.RemoteUserInfo(currentControllerInfo); } } @RequiresApi(29) public static class MediaSessionImplApi29 extends MediaSessionImplApi28 { public MediaSessionImplApi29(MediaSession mediaSession, VersionedParcelable versionedParcelable, Bundle bundle) { super(mediaSession, versionedParcelable, bundle); } public MediaSessionImplApi29(Object obj) { super(obj); Bundle sessionInfo; sessionInfo = ((MediaSession) obj).getController().getSessionInfo(); this.mSessionInfo = sessionInfo; } } }