From e765f7a8eb0e095007d896d8b4020cf2c2c275ff Mon Sep 17 00:00:00 2001 From: olly Date: Mon, 6 Dec 2021 12:08:04 +0000 Subject: [PATCH] Further media3 session cleanup * Remove casting getInstance and getCallback methods and just use member variables that have the more specific types. I didn't manage to get rid of casting completely; there are still one-off casts during construction. We should look at removing those in the future, but it's not completely trivial due to the way the Impl classes back-reference their wrapping classes. * Move all callback invocations inside the Impl classes for consistency, and properly encapsulate the callbacks there. Sticking with the "OnHandler" naming convention for these methods, but we should probably tweak that in a subsequent change. * Encapsulate MediaItemFiller in MediaSessionImpl. * Some misc cleanup (e.g., converting anonymous inner classes to lambdas where possible). PiperOrigin-RevId: 414401978 --- .../session/ConnectedControllersManager.java | 2 +- .../media3/session/MediaLibraryService.java | 9 ++- .../MediaLibraryServiceLegacyStub.java | 6 +- .../session/MediaLibrarySessionImpl.java | 37 ++++----- .../androidx/media3/session/MediaSession.java | 15 ---- .../media3/session/MediaSessionImpl.java | 75 +++++++++++++------ .../session/MediaSessionLegacyStub.java | 42 +++-------- .../MediaSessionServiceLegacyStub.java | 6 +- .../media3/session/MediaSessionStub.java | 71 +++++------------- 9 files changed, 105 insertions(+), 158 deletions(-) diff --git a/libraries/session/src/main/java/androidx/media3/session/ConnectedControllersManager.java b/libraries/session/src/main/java/androidx/media3/session/ConnectedControllersManager.java index 834974aa46..8e557953d2 100644 --- a/libraries/session/src/main/java/androidx/media3/session/ConnectedControllersManager.java +++ b/libraries/session/src/main/java/androidx/media3/session/ConnectedControllersManager.java @@ -128,7 +128,7 @@ import org.checkerframework.checker.nullness.qual.NonNull; if (sessionImpl.isReleased()) { return; } - sessionImpl.getCallback().onDisconnected(sessionImpl.getInstance(), controllerInfo); + sessionImpl.onDisconnectedOnHandler(controllerInfo); }); } diff --git a/libraries/session/src/main/java/androidx/media3/session/MediaLibraryService.java b/libraries/session/src/main/java/androidx/media3/session/MediaLibraryService.java index 781d87cf3f..ab632ef646 100644 --- a/libraries/session/src/main/java/androidx/media3/session/MediaLibraryService.java +++ b/libraries/session/src/main/java/androidx/media3/session/MediaLibraryService.java @@ -465,7 +465,14 @@ public abstract class MediaLibraryService extends MediaSessionService { MediaItemFiller mediaItemFiller, Bundle tokenExtras) { return new MediaLibrarySessionImpl( - this, context, id, player, sessionActivity, callback, mediaItemFiller, tokenExtras); + this, + context, + id, + player, + sessionActivity, + (MediaLibrarySession.MediaLibrarySessionCallback) callback, + mediaItemFiller, + tokenExtras); } @Override diff --git a/libraries/session/src/main/java/androidx/media3/session/MediaLibraryServiceLegacyStub.java b/libraries/session/src/main/java/androidx/media3/session/MediaLibraryServiceLegacyStub.java index 419cb57000..8e06166bdd 100644 --- a/libraries/session/src/main/java/androidx/media3/session/MediaLibraryServiceLegacyStub.java +++ b/libraries/session/src/main/java/androidx/media3/session/MediaLibraryServiceLegacyStub.java @@ -308,11 +308,7 @@ import java.util.concurrent.atomic.AtomicReference; return; } ListenableFuture future = - checkNotNull( - librarySessionImpl - .getCallback() - .onCustomCommand( - librarySessionImpl.getInstance(), controller, command, extras)); + librarySessionImpl.onCustomCommandOnHandler(controller, command, extras); sendCustomActionResultWhenReady(result, future); }); } diff --git a/libraries/session/src/main/java/androidx/media3/session/MediaLibrarySessionImpl.java b/libraries/session/src/main/java/androidx/media3/session/MediaLibrarySessionImpl.java index a2326eda63..df05207dd5 100644 --- a/libraries/session/src/main/java/androidx/media3/session/MediaLibrarySessionImpl.java +++ b/libraries/session/src/main/java/androidx/media3/session/MediaLibrarySessionImpl.java @@ -47,19 +47,25 @@ import java.util.concurrent.Future; /* package */ class MediaLibrarySessionImpl extends MediaSessionImpl { + private final MediaLibrarySession instance; + private final MediaLibrarySession.MediaLibrarySessionCallback callback; + @GuardedBy("lock") - private final ArrayMap> subscriptions = new ArrayMap<>(); + private final ArrayMap> subscriptions; public MediaLibrarySessionImpl( - MediaSession instance, + MediaLibrarySession instance, Context context, String id, Player player, @Nullable PendingIntent sessionActivity, - MediaSession.SessionCallback callback, + MediaLibrarySession.MediaLibrarySessionCallback callback, MediaSession.MediaItemFiller mediaItemFiller, Bundle tokenExtras) { super(instance, context, id, player, sessionActivity, callback, mediaItemFiller, tokenExtras); + this.instance = instance; + this.callback = callback; + subscriptions = new ArrayMap<>(); } @Override @@ -115,7 +121,7 @@ import java.util.concurrent.Future; // onGetLibraryRoot is defined to return a non-null result but it's implemented by applications, // so we explicitly null-check the result to fail early if an app accidentally returns null. return checkNotNull( - getCallback().onGetLibraryRoot(getInstance(), browser, params), + callback.onGetLibraryRoot(instance, browser, params), "onGetLibraryRoot must return non-null future"); } @@ -124,8 +130,7 @@ import java.util.concurrent.Future; // onGetItem is defined to return a non-null result but it's implemented by applications, // so we explicitly null-check the result to fail early if an app accidentally returns null. return checkNotNull( - getCallback().onGetItem(getInstance(), browser, mediaId), - "onGetItem must return non-null future"); + callback.onGetItem(instance, browser, mediaId), "onGetItem must return non-null future"); } public ListenableFuture>> onGetChildrenOnHandler( @@ -138,7 +143,7 @@ import java.util.concurrent.Future; // so we explicitly null-check the result to fail early if an app accidentally returns null. ListenableFuture>> future = checkNotNull( - getCallback().onGetChildren(getInstance(), browser, parentId, page, pageSize, params), + callback.onGetChildren(instance, browser, parentId, page, pageSize, params), "onGetChildren must return non-null future"); future.addListener( () -> { @@ -170,7 +175,7 @@ import java.util.concurrent.Future; // so we explicitly null-check the result to fail early if an app accidentally returns null. ListenableFuture> future = checkNotNull( - getCallback().onSubscribe(getInstance(), browser, parentId, params), + callback.onSubscribe(instance, browser, parentId, params), "onSubscribe must return non-null future"); // When error happens, remove from the subscription list. @@ -194,7 +199,7 @@ import java.util.concurrent.Future; // so we explicitly null-check the result to fail early if an app accidentally returns null. ListenableFuture> future = checkNotNull( - getCallback().onUnsubscribe(getInstance(), browser, parentId), + callback.onUnsubscribe(instance, browser, parentId), "onUnsubscribe must return non-null future"); future.addListener( @@ -213,7 +218,7 @@ import java.util.concurrent.Future; // onSearch is defined to return a non-null result but it's implemented by applications, // so we explicitly null-check the result to fail early if an app accidentally returns null. return checkNotNull( - getCallback().onSearch(getInstance(), browser, query, params), + callback.onSearch(instance, browser, query, params), "onSearch must return non-null future"); } @@ -228,7 +233,7 @@ import java.util.concurrent.Future; // returns null. ListenableFuture>> future = checkNotNull( - getCallback().onGetSearchResult(getInstance(), browser, query, page, pageSize, params), + callback.onGetSearchResult(instance, browser, query, page, pageSize, params), "onGetSearchResult must return non-null future"); future.addListener( () -> { @@ -241,16 +246,6 @@ import java.util.concurrent.Future; return future; } - @Override - protected MediaLibrarySession getInstance() { - return (MediaLibrarySession) super.getInstance(); - } - - @Override - protected MediaLibrarySession.MediaLibrarySessionCallback getCallback() { - return (MediaLibrarySession.MediaLibrarySessionCallback) super.getCallback(); - } - @Override @Nullable protected MediaLibraryServiceLegacyStub getLegacyBrowserService() { diff --git a/libraries/session/src/main/java/androidx/media3/session/MediaSession.java b/libraries/session/src/main/java/androidx/media3/session/MediaSession.java index 50d5c455ad..2ff846577e 100644 --- a/libraries/session/src/main/java/androidx/media3/session/MediaSession.java +++ b/libraries/session/src/main/java/androidx/media3/session/MediaSession.java @@ -1018,21 +1018,6 @@ public class MediaSession { * Called to fill in the {@link MediaItem#localConfiguration} of the media item from * controllers. * - *

Specifically, it's called by the following methods - * - *

    - *
  1. {@link MediaController#setMediaItem(MediaItem)} - *
  2. {@link MediaController#setMediaItem(MediaItem,long)} - *
  3. {@link MediaController#setMediaItem(MediaItem, boolean)} - *
  4. {@link MediaController#setMediaItems(List)} - *
  5. {@link MediaController#setMediaItems(List, boolean)} - *
  6. {@link MediaController#setMediaItems(List, int, long)} - *
  7. {@link MediaController#addMediaItem(MediaItem)} - *
  8. {@link MediaController#addMediaItem(int, MediaItem)} - *
  9. {@link MediaController#addMediaItems(List)} - *
  10. {@link MediaController#addMediaItems(int, List)} - *
- * * @param session The session for this event. * @param controller The controller information. * @param mediaItem The media item whose local configuration will be filled in. diff --git a/libraries/session/src/main/java/androidx/media3/session/MediaSessionImpl.java b/libraries/session/src/main/java/androidx/media3/session/MediaSessionImpl.java index 373f8a0605..6385e1eebe 100644 --- a/libraries/session/src/main/java/androidx/media3/session/MediaSessionImpl.java +++ b/libraries/session/src/main/java/androidx/media3/session/MediaSessionImpl.java @@ -15,6 +15,7 @@ */ package androidx.media3.session; +import static androidx.media3.common.util.Assertions.checkNotNull; import static androidx.media3.common.util.Assertions.checkStateNotNull; import static androidx.media3.common.util.Util.castNonNull; import static androidx.media3.common.util.Util.postOrRun; @@ -57,6 +58,7 @@ import androidx.media3.common.Player; import androidx.media3.common.Player.DiscontinuityReason; import androidx.media3.common.Player.PositionInfo; import androidx.media3.common.Player.RepeatMode; +import androidx.media3.common.Rating; import androidx.media3.common.Timeline; import androidx.media3.common.TrackSelectionParameters; import androidx.media3.common.VideoSize; @@ -346,13 +348,7 @@ import org.checkerframework.checker.initialization.qual.Initialized; public ListenableFuture setCustomLayout( ControllerInfo controller, List layout) { return dispatchRemoteControllerTask( - controller, - new RemoteControllerTask() { - @Override - public void run(ControllerCb controller, int seq) throws RemoteException { - controller.setCustomLayout(seq, layout); - } - }); + controller, (controller1, seq) -> controller1.setCustomLayout(seq, layout)); } public void setAvailableCommands( @@ -363,12 +359,8 @@ import org.checkerframework.checker.initialization.qual.Initialized; .updateCommandsFromSession(controller, sessionCommands, playerCommands); dispatchRemoteControllerTaskWithoutReturn( controller, - new RemoteControllerTask() { - @Override - public void run(ControllerCb callback, int seq) throws RemoteException { - callback.onAvailableCommandsChangedFromSession(seq, sessionCommands, playerCommands); - } - }); + (callback, seq) -> + callback.onAvailableCommandsChangedFromSession(seq, sessionCommands, playerCommands)); onPlayerInfoChangedHandler.sendPlayerInfoChangedMessage(/* excludeTimeline= */ false); } else { sessionLegacyStub @@ -438,6 +430,50 @@ import org.checkerframework.checker.initialization.qual.Initialized; controller, (cb, seq) -> cb.sendCustomCommand(seq, command, args)); } + public MediaSession.ConnectionResult onConnectOnHandler(ControllerInfo controller) { + return checkNotNull( + callback.onConnect(instance, controller), "onConntext must return non-null future"); + } + + public void onPostConnectOnHandler(ControllerInfo controller) { + callback.onPostConnect(instance, controller); + } + + public void onDisconnectedOnHandler(ControllerInfo controller) { + callback.onDisconnected(instance, controller); + } + + public @SessionResult.Code int onSetMediaUriOnHandler( + ControllerInfo controller, Uri uri, Bundle extras) { + return callback.onSetMediaUri(instance, controller, uri, extras); + } + + public @SessionResult.Code int onPlayerCommandRequestOnHandler( + ControllerInfo controller, @Player.Command int playerCommand) { + return callback.onPlayerCommandRequest(instance, controller, playerCommand); + } + + public ListenableFuture onSetRatingOnHandler( + ControllerInfo controller, String mediaId, Rating rating) { + return checkNotNull( + callback.onSetRating(instance, controller, mediaId, rating), + "onSetRating must return non-null future"); + } + + public ListenableFuture onSetRatingOnHandler( + ControllerInfo controller, Rating rating) { + return checkNotNull( + callback.onSetRating(instance, controller, rating), + "onSetRating must return non-null future"); + } + + public ListenableFuture onCustomCommandOnHandler( + ControllerInfo browser, SessionCommand command, Bundle extras) { + return checkNotNull( + callback.onCustomCommand(instance, browser, command, extras), + "onCustomCommandOnHandler must return non-null future"); + } + public void connectFromService( IMediaController caller, int controllerVersion, @@ -457,10 +493,6 @@ import org.checkerframework.checker.initialization.qual.Initialized; sessionLegacyStub.setLegacyControllerDisconnectTimeoutMs(timeoutMs); } - protected MediaSession getInstance() { - return instance; - } - protected Context getContext() { return context; } @@ -469,12 +501,9 @@ import org.checkerframework.checker.initialization.qual.Initialized; return applicationHandler; } - protected SessionCallback getCallback() { - return callback; - } - - protected MediaItemFiller getMediaItemFiller() { - return mediaItemFiller; + protected MediaItem fillInLocalConfiguration( + MediaSession.ControllerInfo controller, MediaItem mediaItem) { + return mediaItemFiller.fillInLocalConfiguration(instance, controller, mediaItem); } protected boolean isReleased() { diff --git a/libraries/session/src/main/java/androidx/media3/session/MediaSessionLegacyStub.java b/libraries/session/src/main/java/androidx/media3/session/MediaSessionLegacyStub.java index b04b6fcda7..2aef615164 100644 --- a/libraries/session/src/main/java/androidx/media3/session/MediaSessionLegacyStub.java +++ b/libraries/session/src/main/java/androidx/media3/session/MediaSessionLegacyStub.java @@ -177,15 +177,8 @@ import org.checkerframework.checker.initialization.qual.Initialized; command, controller -> { ListenableFuture future = - checkNotNull( - sessionImpl - .getCallback() - .onCustomCommand( - sessionImpl.getInstance(), - controller, - command, - args == null ? Bundle.EMPTY : args), - "SessionCallback#onCustomCommand must not return null"); + sessionImpl.onCustomCommandOnHandler( + controller, command, args == null ? Bundle.EMPTY : args); if (cb != null) { sendCustomCommandResultWhenReady(cb, future); } else { @@ -280,13 +273,8 @@ import org.checkerframework.checker.initialization.qual.Initialized; dispatchSessionTaskWithSessionCommand( SessionCommand.COMMAND_CODE_SESSION_SET_MEDIA_URI, controller -> { - if (sessionImpl - .getCallback() - .onSetMediaUri( - sessionImpl.getInstance(), - controller, - mediaUri, - extras == null ? Bundle.EMPTY : extras) + if (sessionImpl.onSetMediaUriOnHandler( + controller, mediaUri, extras == null ? Bundle.EMPTY : extras) == RESULT_SUCCESS) { sessionImpl.getPlayerWrapper().prepare(); } @@ -330,13 +318,8 @@ import org.checkerframework.checker.initialization.qual.Initialized; dispatchSessionTaskWithSessionCommand( SessionCommand.COMMAND_CODE_SESSION_SET_MEDIA_URI, controller -> { - if (sessionImpl - .getCallback() - .onSetMediaUri( - sessionImpl.getInstance(), - controller, - mediaUri, - extras == null ? Bundle.EMPTY : extras) + if (sessionImpl.onSetMediaUriOnHandler( + controller, mediaUri, extras == null ? Bundle.EMPTY : extras) == RESULT_SUCCESS) { sessionImpl.getPlayerWrapper().play(); } @@ -440,10 +423,7 @@ import org.checkerframework.checker.initialization.qual.Initialized; return; } // MediaControllerCompat#setRating doesn't return a value. - ignoreFuture( - sessionImpl - .getCallback() - .onSetRating(sessionImpl.getInstance(), controller, currentItem.mediaId, rating)); + ignoreFuture(sessionImpl.onSetRatingOnHandler(controller, currentItem.mediaId, rating)); }); } @@ -597,10 +577,7 @@ import org.checkerframework.checker.initialization.qual.Initialized; if (!connectedControllersManager.isPlayerCommandAvailable(controller, command)) { return; } - int resultCode = - sessionImpl - .getCallback() - .onPlayerCommandRequest(sessionImpl.getInstance(), controller, command); + int resultCode = sessionImpl.onPlayerCommandRequestOnHandler(controller, command); if (resultCode != RESULT_SUCCESS) { // Don't run rejected command. return; @@ -702,8 +679,7 @@ import org.checkerframework.checker.initialization.qual.Initialized; sessionManager.isTrustedForMediaControl(remoteUserInfo), controllerCb, /* connectionHints= */ Bundle.EMPTY); - MediaSession.ConnectionResult connectionResult = - sessionImpl.getCallback().onConnect(sessionImpl.getInstance(), controller); + MediaSession.ConnectionResult connectionResult = sessionImpl.onConnectOnHandler(controller); if (!connectionResult.isAccepted) { try { controllerCb.onDisconnected(/* seq= */ 0); diff --git a/libraries/session/src/main/java/androidx/media3/session/MediaSessionServiceLegacyStub.java b/libraries/session/src/main/java/androidx/media3/session/MediaSessionServiceLegacyStub.java index 6a8005118a..110f7c1f92 100644 --- a/libraries/session/src/main/java/androidx/media3/session/MediaSessionServiceLegacyStub.java +++ b/libraries/session/src/main/java/androidx/media3/session/MediaSessionServiceLegacyStub.java @@ -15,7 +15,6 @@ */ package androidx.media3.session; -import static androidx.media3.common.util.Assertions.checkNotNull; import static androidx.media3.common.util.Util.postOrRun; import android.os.Bundle; @@ -69,10 +68,7 @@ import java.util.concurrent.atomic.AtomicReference; postOrRun( sessionImpl.getApplicationHandler(), () -> { - resultReference.set( - checkNotNull( - sessionImpl.getCallback().onConnect(sessionImpl.getInstance(), controller), - "onConnect must return non-null future")); + resultReference.set(sessionImpl.onConnectOnHandler(controller)); haveResult.open(); }); try { diff --git a/libraries/session/src/main/java/androidx/media3/session/MediaSessionStub.java b/libraries/session/src/main/java/androidx/media3/session/MediaSessionStub.java index 2f7b1b76ac..41b3db0dd9 100644 --- a/libraries/session/src/main/java/androidx/media3/session/MediaSessionStub.java +++ b/libraries/session/src/main/java/androidx/media3/session/MediaSessionStub.java @@ -220,10 +220,7 @@ import java.util.concurrent.ExecutionException; return; } @SessionResult.Code - int resultCode = - sessionImpl - .getCallback() - .onPlayerCommandRequest(sessionImpl.getInstance(), controller, command); + int resultCode = sessionImpl.onPlayerCommandRequestOnHandler(controller, command); if (resultCode != SessionResult.RESULT_SUCCESS) { // Don't run rejected command. sendSessionResult(controller, seq, new SessionResult(resultCode)); @@ -346,7 +343,7 @@ import java.util.concurrent.ExecutionException; checkStateNotNull((Controller2Cb) controllerInfo.getControllerCb()) .getCallbackBinder(); MediaSession.ConnectionResult connectionResult = - sessionImpl.getCallback().onConnect(sessionImpl.getInstance(), controllerInfo); + sessionImpl.onConnectOnHandler(controllerInfo); // Don't reject connection for the request from trusted app. // Otherwise server will fail to retrieve session's information to dispatch // media keys to. @@ -406,7 +403,7 @@ import java.util.concurrent.ExecutionException; // Controller may be died prematurely. } - sessionImpl.getCallback().onPostConnect(sessionImpl.getInstance(), controllerInfo); + sessionImpl.onPostConnectOnHandler(controllerInfo); } else { try { caller.onDisconnected(0); @@ -674,10 +671,7 @@ import java.util.concurrent.ExecutionException; seq, command, (sessionImpl, controller) -> - checkNotNull( - sessionImpl - .getCallback() - .onCustomCommand(sessionImpl.getInstance(), controller, command, args)), + sessionImpl.onCustomCommandOnHandler(controller, command, args), MediaSessionStub::sendSessionResultWhenReady); } @@ -702,11 +696,7 @@ import java.util.concurrent.ExecutionException; caller, seq, COMMAND_CODE_SESSION_SET_RATING, - (sessionImpl, controller) -> - checkNotNull( - sessionImpl - .getCallback() - .onSetRating(sessionImpl.getInstance(), controller, mediaId, rating)), + (sessionImpl, controller) -> sessionImpl.onSetRatingOnHandler(controller, mediaId, rating), MediaSessionStub::sendSessionResultWhenReady); } @@ -726,11 +716,7 @@ import java.util.concurrent.ExecutionException; caller, seq, COMMAND_CODE_SESSION_SET_RATING, - (sessionImpl, controller) -> - checkNotNull( - sessionImpl - .getCallback() - .onSetRating(sessionImpl.getInstance(), controller, rating)), + (sessionImpl, controller) -> sessionImpl.onSetRatingOnHandler(controller, rating), MediaSessionStub::sendSessionResultWhenReady); } @@ -788,9 +774,7 @@ import java.util.concurrent.ExecutionException; COMMAND_CHANGE_MEDIA_ITEMS, (sessionImpl, controller) -> { MediaItem mediaItemWithPlaybackProperties = - sessionImpl - .getMediaItemFiller() - .fillInLocalConfiguration(sessionImpl.getInstance(), controller, mediaItem); + sessionImpl.fillInLocalConfiguration(controller, mediaItem); sessionImpl.getPlayerWrapper().setMediaItem(mediaItemWithPlaybackProperties); return SessionResult.RESULT_SUCCESS; }, @@ -819,9 +803,7 @@ import java.util.concurrent.ExecutionException; COMMAND_CHANGE_MEDIA_ITEMS, (sessionImpl, controller) -> { MediaItem mediaItemWithPlaybackProperties = - sessionImpl - .getMediaItemFiller() - .fillInLocalConfiguration(sessionImpl.getInstance(), controller, mediaItem); + sessionImpl.fillInLocalConfiguration(controller, mediaItem); sessionImpl .getPlayerWrapper() .setMediaItem(mediaItemWithPlaybackProperties, startPositionMs); @@ -852,9 +834,7 @@ import java.util.concurrent.ExecutionException; COMMAND_CHANGE_MEDIA_ITEMS, (sessionImpl, controller) -> { MediaItem mediaItemWithPlaybackProperties = - sessionImpl - .getMediaItemFiller() - .fillInLocalConfiguration(sessionImpl.getInstance(), controller, mediaItem); + sessionImpl.fillInLocalConfiguration(controller, mediaItem); sessionImpl .getPlayerWrapper() .setMediaItem(mediaItemWithPlaybackProperties, resetPosition); @@ -888,9 +868,7 @@ import java.util.concurrent.ExecutionException; ImmutableList.builder(); for (MediaItem mediaItem : mediaItemList) { MediaItem mediaItemWithPlaybackProperties = - sessionImpl - .getMediaItemFiller() - .fillInLocalConfiguration(sessionImpl.getInstance(), controller, mediaItem); + sessionImpl.fillInLocalConfiguration(controller, mediaItem); mediaItemWithPlaybackPropertiesListBuilder.add(mediaItemWithPlaybackProperties); } sessionImpl @@ -928,9 +906,7 @@ import java.util.concurrent.ExecutionException; ImmutableList.builder(); for (MediaItem mediaItem : mediaItemList) { MediaItem mediaItemWithPlaybackProperties = - sessionImpl - .getMediaItemFiller() - .fillInLocalConfiguration(sessionImpl.getInstance(), controller, mediaItem); + sessionImpl.fillInLocalConfiguration(controller, mediaItem); mediaItemWithPlaybackPropertiesListBuilder.add(mediaItemWithPlaybackProperties); } sessionImpl @@ -969,9 +945,7 @@ import java.util.concurrent.ExecutionException; ImmutableList.builder(); for (MediaItem mediaItem : mediaItemList) { MediaItem mediaItemWithPlaybackProperties = - sessionImpl - .getMediaItemFiller() - .fillInLocalConfiguration(sessionImpl.getInstance(), controller, mediaItem); + sessionImpl.fillInLocalConfiguration(controller, mediaItem); mediaItemWithPlaybackPropertiesListBuilder.add(mediaItemWithPlaybackProperties); } @@ -995,10 +969,7 @@ import java.util.concurrent.ExecutionException; seq, COMMAND_CODE_SESSION_SET_MEDIA_URI, (sessionImpl, controller) -> - new SessionResult( - sessionImpl - .getCallback() - .onSetMediaUri(sessionImpl.getInstance(), controller, uri, extras)), + new SessionResult(sessionImpl.onSetMediaUriOnHandler(controller, uri, extras)), MediaSessionStub::sendSessionResult); } @@ -1044,9 +1015,7 @@ import java.util.concurrent.ExecutionException; COMMAND_CHANGE_MEDIA_ITEMS, (sessionImpl, controller) -> { MediaItem mediaItemWithPlaybackProperties = - sessionImpl - .getMediaItemFiller() - .fillInLocalConfiguration(sessionImpl.getInstance(), controller, mediaItem); + sessionImpl.fillInLocalConfiguration(controller, mediaItem); sessionImpl.getPlayerWrapper().addMediaItem(mediaItemWithPlaybackProperties); return SessionResult.RESULT_SUCCESS; }, @@ -1072,9 +1041,7 @@ import java.util.concurrent.ExecutionException; COMMAND_CHANGE_MEDIA_ITEMS, (sessionImpl, controller) -> { MediaItem mediaItemWithPlaybackProperties = - sessionImpl - .getMediaItemFiller() - .fillInLocalConfiguration(sessionImpl.getInstance(), controller, mediaItem); + sessionImpl.fillInLocalConfiguration(controller, mediaItem); sessionImpl.getPlayerWrapper().addMediaItem(index, mediaItemWithPlaybackProperties); return SessionResult.RESULT_SUCCESS; }, @@ -1105,9 +1072,7 @@ import java.util.concurrent.ExecutionException; ImmutableList.builder(); for (MediaItem mediaItem : mediaItems) { MediaItem mediaItemWithPlaybackProperties = - sessionImpl - .getMediaItemFiller() - .fillInLocalConfiguration(sessionImpl.getInstance(), controller, mediaItem); + sessionImpl.fillInLocalConfiguration(controller, mediaItem); mediaItemsWithPlaybackPropertiesBuilder.add(mediaItemWithPlaybackProperties); } @@ -1146,9 +1111,7 @@ import java.util.concurrent.ExecutionException; ImmutableList.builder(); for (MediaItem mediaItem : mediaItems) { MediaItem mediaItemWithPlaybackProperties = - sessionImpl - .getMediaItemFiller() - .fillInLocalConfiguration(sessionImpl.getInstance(), controller, mediaItem); + sessionImpl.fillInLocalConfiguration(controller, mediaItem); mediaItemsWithPlaybackPropertiesBuilder.add(mediaItemWithPlaybackProperties); }