Commit 45f1f5b3 by tonihei Committed by Rohit Singh

Properly chain commands in MediaSessionStub

The commands currently use a task and a postTask that are chained
together manually. In some cases, e.g. when adding MediaItems,
the postTask is already a chain of commands in itself.

To allow using the entire command handling as a single task
(for simplified queueing), we can change the implementation to
always create a single task. If multiple subtasks need to be
chained together, we can do that by wrapping the method calls.
In case a task is asynchronous, we can also use Futures to
chain them together.

Overall, this is just a refactoring and changes no logic.

Issue: androidx/media#85
PiperOrigin-RevId: 462085724
parent ac300c4a
...@@ -41,6 +41,8 @@ import static androidx.media3.common.Player.COMMAND_STOP; ...@@ -41,6 +41,8 @@ import static androidx.media3.common.Player.COMMAND_STOP;
import static androidx.media3.common.util.Assertions.checkNotNull; import static androidx.media3.common.util.Assertions.checkNotNull;
import static androidx.media3.common.util.Assertions.checkStateNotNull; import static androidx.media3.common.util.Assertions.checkStateNotNull;
import static androidx.media3.common.util.Util.postOrRun; import static androidx.media3.common.util.Util.postOrRun;
import static androidx.media3.common.util.Util.postOrRunWithCompletion;
import static androidx.media3.common.util.Util.transformFutureAsync;
import static androidx.media3.session.SessionCommand.COMMAND_CODE_CUSTOM; import static androidx.media3.session.SessionCommand.COMMAND_CODE_CUSTOM;
import static androidx.media3.session.SessionCommand.COMMAND_CODE_LIBRARY_GET_CHILDREN; import static androidx.media3.session.SessionCommand.COMMAND_CODE_LIBRARY_GET_CHILDREN;
import static androidx.media3.session.SessionCommand.COMMAND_CODE_LIBRARY_GET_ITEM; import static androidx.media3.session.SessionCommand.COMMAND_CODE_LIBRARY_GET_ITEM;
...@@ -69,6 +71,7 @@ import androidx.media3.common.Player; ...@@ -69,6 +71,7 @@ import androidx.media3.common.Player;
import androidx.media3.common.Rating; import androidx.media3.common.Rating;
import androidx.media3.common.TrackSelectionParameters; import androidx.media3.common.TrackSelectionParameters;
import androidx.media3.common.util.BundleableUtil; import androidx.media3.common.util.BundleableUtil;
import androidx.media3.common.util.Consumer;
import androidx.media3.common.util.Log; import androidx.media3.common.util.Log;
import androidx.media3.common.util.Util; import androidx.media3.common.util.Util;
import androidx.media3.session.MediaLibraryService.LibraryParams; import androidx.media3.session.MediaLibraryService.LibraryParams;
...@@ -115,13 +118,7 @@ import java.util.concurrent.ExecutionException; ...@@ -115,13 +118,7 @@ import java.util.concurrent.ExecutionException;
return connectedControllersManager; return connectedControllersManager;
} }
private static <K extends MediaSessionImpl> void sendSessionResult( private static void sendSessionResult(ControllerInfo controller, int seq, SessionResult result) {
K sessionImpl, ControllerInfo controller, int seq, @SessionResult.Code int resultCode) {
sendSessionResult(sessionImpl, controller, seq, new SessionResult(resultCode));
}
private static <K extends MediaSessionImpl> void sendSessionResult(
K sessionImpl, ControllerInfo controller, int seq, SessionResult result) {
try { try {
checkStateNotNull(controller.getControllerCb()).onSessionResult(seq, result); checkStateNotNull(controller.getControllerCb()).onSessionResult(seq, result);
} catch (RemoteException e) { } catch (RemoteException e) {
...@@ -129,51 +126,52 @@ import java.util.concurrent.ExecutionException; ...@@ -129,51 +126,52 @@ import java.util.concurrent.ExecutionException;
} }
} }
private static <K extends MediaSessionImpl> void sendSessionResultWhenReady( private static <K extends MediaSessionImpl> SessionTask<Void, K> sendSessionResultSuccess(
K sessionImpl, ControllerInfo controller, int seq, ListenableFuture<SessionResult> future) { Consumer<PlayerWrapper> task) {
future.addListener( return (sessionImpl, controller, sequence) -> {
() -> { task.accept(sessionImpl.getPlayerWrapper());
SessionResult result; sendSessionResult(controller, sequence, new SessionResult(SessionResult.RESULT_SUCCESS));
try { return null;
result = checkNotNull(future.get(), "SessionResult must not be null"); };
} catch (CancellationException unused) {
result = new SessionResult(SessionResult.RESULT_INFO_SKIPPED);
} catch (ExecutionException | InterruptedException unused) {
result = new SessionResult(SessionResult.RESULT_ERROR_UNKNOWN);
}
sendSessionResult(sessionImpl, controller, seq, result);
},
MoreExecutors.directExecutor());
} }
private static <K extends MediaSessionImpl> void handleMediaItemsWhenReady( private static <K extends MediaSessionImpl> SessionTask<Void, K> sendSessionResultWhenReady(
K sessionImpl, SessionTask<ListenableFuture<SessionResult>, K> task) {
ControllerInfo controller, return (sessionImpl, controller, sequence) -> {
int seq, ListenableFuture<SessionResult> future = task.run(sessionImpl, controller, sequence);
ListenableFuture<List<MediaItem>> future, future.addListener(
MediaItemPlayerTask mediaItemPlayerTask) { () -> {
future.addListener( SessionResult result;
() -> { try {
SessionResult result; result = checkNotNull(future.get(), "SessionResult must not be null");
try { } catch (CancellationException unused) {
List<MediaItem> mediaItems = result = new SessionResult(SessionResult.RESULT_INFO_SKIPPED);
checkNotNull(future.get(), "MediaItem list must not be null"); } catch (ExecutionException | InterruptedException exception) {
postOrRun( result =
sessionImpl.getApplicationHandler(), new SessionResult(
() -> mediaItemPlayerTask.run(sessionImpl.getPlayerWrapper(), mediaItems)); exception.getCause() instanceof UnsupportedOperationException
result = new SessionResult(SessionResult.RESULT_SUCCESS); ? SessionResult.RESULT_ERROR_NOT_SUPPORTED
} catch (CancellationException unused) { : SessionResult.RESULT_ERROR_UNKNOWN);
result = new SessionResult(SessionResult.RESULT_INFO_SKIPPED); }
} catch (ExecutionException | InterruptedException exception) { sendSessionResult(controller, sequence, result);
result = },
new SessionResult( MoreExecutors.directExecutor());
exception.getCause() instanceof UnsupportedOperationException return null;
? SessionResult.RESULT_ERROR_NOT_SUPPORTED };
: SessionResult.RESULT_ERROR_UNKNOWN); }
}
sendSessionResult(sessionImpl, controller, seq, result); private static <K extends MediaSessionImpl>
}, SessionTask<ListenableFuture<SessionResult>, K> handleMediaItemsWhenReady(
MoreExecutors.directExecutor()); SessionTask<ListenableFuture<List<MediaItem>>, K> mediaItemsTask,
MediaItemPlayerTask mediaItemPlayerTask) {
return (sessionImpl, controller, sequence) ->
transformFutureAsync(
mediaItemsTask.run(sessionImpl, controller, sequence),
mediaItems ->
postOrRunWithCompletion(
sessionImpl.getApplicationHandler(),
() -> mediaItemPlayerTask.run(sessionImpl.getPlayerWrapper(), mediaItems),
new SessionResult(SessionResult.RESULT_SUCCESS)));
} }
private static void sendLibraryResult( private static void sendLibraryResult(
...@@ -185,32 +183,30 @@ import java.util.concurrent.ExecutionException; ...@@ -185,32 +183,30 @@ import java.util.concurrent.ExecutionException;
} }
} }
private static <V, K extends MediaSessionImpl> void sendLibraryResultWhenReady( private static <V, K extends MediaLibrarySessionImpl>
K sessionImpl, SessionTask<Void, K> sendLibraryResultWhenReady(
ControllerInfo controller, SessionTask<ListenableFuture<LibraryResult<V>>, K> task) {
int seq, return (sessionImpl, controller, sequence) -> {
ListenableFuture<LibraryResult<V>> future) { ListenableFuture<LibraryResult<V>> future = task.run(sessionImpl, controller, sequence);
future.addListener( future.addListener(
() -> { () -> {
LibraryResult<V> result; LibraryResult<V> result;
try { try {
result = checkNotNull(future.get(), "LibraryResult must not be null"); result = checkNotNull(future.get(), "LibraryResult must not be null");
} catch (CancellationException unused) { } catch (CancellationException unused) {
result = LibraryResult.ofError(LibraryResult.RESULT_INFO_SKIPPED); result = LibraryResult.ofError(LibraryResult.RESULT_INFO_SKIPPED);
} catch (ExecutionException | InterruptedException unused) { } catch (ExecutionException | InterruptedException unused) {
result = LibraryResult.ofError(LibraryResult.RESULT_ERROR_UNKNOWN); result = LibraryResult.ofError(LibraryResult.RESULT_ERROR_UNKNOWN);
} }
sendLibraryResult(controller, seq, result); sendLibraryResult(controller, sequence, result);
}, },
MoreExecutors.directExecutor()); MoreExecutors.directExecutor());
return null;
};
} }
private <T, K extends MediaSessionImpl> void dispatchSessionTaskWithPlayerCommand( private <K extends MediaSessionImpl> void dispatchSessionTaskWithPlayerCommand(
IMediaController caller, IMediaController caller, int seq, @Player.Command int command, SessionTask<Void, K> task) {
int seq,
@Player.Command int command,
SessionTask<T, K> task,
PostSessionTask<T, K> postTask) {
long token = Binder.clearCallingIdentity(); long token = Binder.clearCallingIdentity();
try { try {
@SuppressWarnings({"unchecked", "cast.unsafe"}) @SuppressWarnings({"unchecked", "cast.unsafe"})
...@@ -229,27 +225,21 @@ import java.util.concurrent.ExecutionException; ...@@ -229,27 +225,21 @@ import java.util.concurrent.ExecutionException;
() -> { () -> {
if (!connectedControllersManager.isPlayerCommandAvailable(controller, command)) { if (!connectedControllersManager.isPlayerCommandAvailable(controller, command)) {
sendSessionResult( sendSessionResult(
sessionImpl, controller, seq, new SessionResult(SessionResult.RESULT_ERROR_PERMISSION_DENIED));
controller,
seq,
new SessionResult(SessionResult.RESULT_ERROR_PERMISSION_DENIED));
return; return;
} }
@SessionResult.Code @SessionResult.Code
int resultCode = sessionImpl.onPlayerCommandRequestOnHandler(controller, command); int resultCode = sessionImpl.onPlayerCommandRequestOnHandler(controller, command);
if (resultCode != SessionResult.RESULT_SUCCESS) { if (resultCode != SessionResult.RESULT_SUCCESS) {
// Don't run rejected command. // Don't run rejected command.
sendSessionResult(sessionImpl, controller, seq, new SessionResult(resultCode)); sendSessionResult(controller, seq, new SessionResult(resultCode));
return; return;
} }
if (command == COMMAND_SET_VIDEO_SURFACE) { if (command == COMMAND_SET_VIDEO_SURFACE) {
getSessionTaskWithPlayerCommandRunnable(controller, seq, sessionImpl, task, postTask) task.run(sessionImpl, controller, seq);
.run();
} else { } else {
connectedControllersManager.addToCommandQueue( connectedControllersManager.addToCommandQueue(
controller, controller, () -> task.run(sessionImpl, controller, seq));
getSessionTaskWithPlayerCommandRunnable(
controller, seq, sessionImpl, task, postTask));
} }
}); });
} finally { } finally {
...@@ -257,55 +247,23 @@ import java.util.concurrent.ExecutionException; ...@@ -257,55 +247,23 @@ import java.util.concurrent.ExecutionException;
} }
} }
private <T, K extends MediaSessionImpl> Runnable getSessionTaskWithPlayerCommandRunnable( private <K extends MediaSessionImpl> void dispatchSessionTaskWithSessionCommand(
ControllerInfo controller, IMediaController caller, int seq, @CommandCode int commandCode, SessionTask<Void, K> task) {
int seq, dispatchSessionTaskWithSessionCommand(
K sessionImpl, caller, seq, /* sessionCommand= */ null, commandCode, task);
SessionTask<T, K> task,
PostSessionTask<T, K> postTask) {
return () -> {
T result = task.run(sessionImpl, controller);
postTask.run(sessionImpl, controller, seq, result);
};
}
private <T> void dispatchSessionTaskWithLibrarySessionCommand(
IMediaController caller,
int seq,
@CommandCode int commandCode,
SessionTask<T, MediaLibrarySessionImpl> task,
PostSessionTask<T, MediaLibrarySessionImpl> postTask) {
dispatchSessionTaskWithSessionCommandInternal(
caller, seq, /* sessionCommand= */ null, commandCode, task, postTask);
}
private <T, K extends MediaSessionImpl> void dispatchSessionTaskWithSessionCommand(
IMediaController caller,
int seq,
@CommandCode int commandCode,
SessionTask<T, K> task,
PostSessionTask<T, K> postTask) {
dispatchSessionTaskWithSessionCommandInternal(
caller, seq, /* sessionCommand= */ null, commandCode, task, postTask);
} }
private <T, K extends MediaSessionImpl> void dispatchSessionTaskWithSessionCommand( private <K extends MediaSessionImpl> void dispatchSessionTaskWithSessionCommand(
IMediaController caller, IMediaController caller, int seq, SessionCommand sessionCommand, SessionTask<Void, K> task) {
int seq, dispatchSessionTaskWithSessionCommand(caller, seq, sessionCommand, COMMAND_CODE_CUSTOM, task);
SessionCommand sessionCommand,
SessionTask<T, K> task,
PostSessionTask<T, K> postTask) {
dispatchSessionTaskWithSessionCommandInternal(
caller, seq, sessionCommand, COMMAND_CODE_CUSTOM, task, postTask);
} }
private <T, K extends MediaSessionImpl> void dispatchSessionTaskWithSessionCommandInternal( private <K extends MediaSessionImpl> void dispatchSessionTaskWithSessionCommand(
IMediaController caller, IMediaController caller,
int seq, int seq,
@Nullable SessionCommand sessionCommand, @Nullable SessionCommand sessionCommand,
@CommandCode int commandCode, @CommandCode int commandCode,
SessionTask<T, K> task, SessionTask<Void, K> task) {
PostSessionTask<T, K> postTask) {
long token = Binder.clearCallingIdentity(); long token = Binder.clearCallingIdentity();
try { try {
@SuppressWarnings({"unchecked", "cast.unsafe"}) @SuppressWarnings({"unchecked", "cast.unsafe"})
...@@ -329,7 +287,6 @@ import java.util.concurrent.ExecutionException; ...@@ -329,7 +287,6 @@ import java.util.concurrent.ExecutionException;
if (!connectedControllersManager.isSessionCommandAvailable( if (!connectedControllersManager.isSessionCommandAvailable(
controller, sessionCommand)) { controller, sessionCommand)) {
sendSessionResult( sendSessionResult(
sessionImpl,
controller, controller,
seq, seq,
new SessionResult(SessionResult.RESULT_ERROR_PERMISSION_DENIED)); new SessionResult(SessionResult.RESULT_ERROR_PERMISSION_DENIED));
...@@ -338,15 +295,13 @@ import java.util.concurrent.ExecutionException; ...@@ -338,15 +295,13 @@ import java.util.concurrent.ExecutionException;
} else { } else {
if (!connectedControllersManager.isSessionCommandAvailable(controller, commandCode)) { if (!connectedControllersManager.isSessionCommandAvailable(controller, commandCode)) {
sendSessionResult( sendSessionResult(
sessionImpl,
controller, controller,
seq, seq,
new SessionResult(SessionResult.RESULT_ERROR_PERMISSION_DENIED)); new SessionResult(SessionResult.RESULT_ERROR_PERMISSION_DENIED));
return; return;
} }
} }
T result = task.run(sessionImpl, controller); task.run(sessionImpl, controller, seq);
postTask.run(sessionImpl, controller, seq, result);
}); });
} finally { } finally {
Binder.restoreCallingIdentity(token); Binder.restoreCallingIdentity(token);
...@@ -526,14 +481,7 @@ import java.util.concurrent.ExecutionException; ...@@ -526,14 +481,7 @@ import java.util.concurrent.ExecutionException;
return; return;
} }
dispatchSessionTaskWithPlayerCommand( dispatchSessionTaskWithPlayerCommand(
caller, caller, seq, COMMAND_STOP, sendSessionResultSuccess(Player::stop));
seq,
COMMAND_STOP,
(sessionImpl, controller) -> {
sessionImpl.getPlayerWrapper().stop();
return SessionResult.RESULT_SUCCESS;
},
MediaSessionStub::sendSessionResult);
} }
@Override @Override
...@@ -582,14 +530,7 @@ import java.util.concurrent.ExecutionException; ...@@ -582,14 +530,7 @@ import java.util.concurrent.ExecutionException;
return; return;
} }
dispatchSessionTaskWithPlayerCommand( dispatchSessionTaskWithPlayerCommand(
caller, caller, seq, COMMAND_PLAY_PAUSE, sendSessionResultSuccess(Player::play));
seq,
COMMAND_PLAY_PAUSE,
(sessionImpl, controller) -> {
sessionImpl.getPlayerWrapper().play();
return SessionResult.RESULT_SUCCESS;
},
MediaSessionStub::sendSessionResult);
} }
@Override @Override
...@@ -598,14 +539,7 @@ import java.util.concurrent.ExecutionException; ...@@ -598,14 +539,7 @@ import java.util.concurrent.ExecutionException;
return; return;
} }
dispatchSessionTaskWithPlayerCommand( dispatchSessionTaskWithPlayerCommand(
caller, caller, seq, COMMAND_PLAY_PAUSE, sendSessionResultSuccess(Player::pause));
seq,
COMMAND_PLAY_PAUSE,
(sessionImpl, controller) -> {
sessionImpl.getPlayerWrapper().pause();
return SessionResult.RESULT_SUCCESS;
},
MediaSessionStub::sendSessionResult);
} }
@Override @Override
...@@ -614,14 +548,7 @@ import java.util.concurrent.ExecutionException; ...@@ -614,14 +548,7 @@ import java.util.concurrent.ExecutionException;
return; return;
} }
dispatchSessionTaskWithPlayerCommand( dispatchSessionTaskWithPlayerCommand(
caller, caller, seq, COMMAND_PREPARE, sendSessionResultSuccess(Player::prepare));
seq,
COMMAND_PREPARE,
(sessionImpl, controller) -> {
sessionImpl.getPlayerWrapper().prepare();
return SessionResult.RESULT_SUCCESS;
},
MediaSessionStub::sendSessionResult);
} }
@Override @Override
...@@ -633,11 +560,7 @@ import java.util.concurrent.ExecutionException; ...@@ -633,11 +560,7 @@ import java.util.concurrent.ExecutionException;
caller, caller,
seq, seq,
COMMAND_SEEK_TO_DEFAULT_POSITION, COMMAND_SEEK_TO_DEFAULT_POSITION,
(sessionImpl, controller) -> { sendSessionResultSuccess(Player::seekToDefaultPosition));
sessionImpl.getPlayerWrapper().seekToDefaultPosition();
return SessionResult.RESULT_SUCCESS;
},
MediaSessionStub::sendSessionResult);
} }
@Override @Override
...@@ -650,11 +573,7 @@ import java.util.concurrent.ExecutionException; ...@@ -650,11 +573,7 @@ import java.util.concurrent.ExecutionException;
caller, caller,
seq, seq,
COMMAND_SEEK_TO_MEDIA_ITEM, COMMAND_SEEK_TO_MEDIA_ITEM,
(sessionImpl, controller) -> { sendSessionResultSuccess(player -> player.seekToDefaultPosition(mediaItemIndex)));
sessionImpl.getPlayerWrapper().seekToDefaultPosition(mediaItemIndex);
return SessionResult.RESULT_SUCCESS;
},
MediaSessionStub::sendSessionResult);
} }
@Override @Override
...@@ -667,11 +586,7 @@ import java.util.concurrent.ExecutionException; ...@@ -667,11 +586,7 @@ import java.util.concurrent.ExecutionException;
caller, caller,
seq, seq,
COMMAND_SEEK_IN_CURRENT_MEDIA_ITEM, COMMAND_SEEK_IN_CURRENT_MEDIA_ITEM,
(sessionImpl, controller) -> { sendSessionResultSuccess(player -> player.seekTo(positionMs)));
sessionImpl.getPlayerWrapper().seekTo(positionMs);
return SessionResult.RESULT_SUCCESS;
},
MediaSessionStub::sendSessionResult);
} }
@Override @Override
...@@ -685,11 +600,7 @@ import java.util.concurrent.ExecutionException; ...@@ -685,11 +600,7 @@ import java.util.concurrent.ExecutionException;
caller, caller,
seq, seq,
COMMAND_SEEK_TO_MEDIA_ITEM, COMMAND_SEEK_TO_MEDIA_ITEM,
(sessionImpl, controller) -> { sendSessionResultSuccess(player -> player.seekTo(mediaItemIndex, positionMs)));
sessionImpl.getPlayerWrapper().seekTo(mediaItemIndex, positionMs);
return SessionResult.RESULT_SUCCESS;
},
MediaSessionStub::sendSessionResult);
} }
@Override @Override
...@@ -698,14 +609,7 @@ import java.util.concurrent.ExecutionException; ...@@ -698,14 +609,7 @@ import java.util.concurrent.ExecutionException;
return; return;
} }
dispatchSessionTaskWithPlayerCommand( dispatchSessionTaskWithPlayerCommand(
caller, caller, seq, COMMAND_SEEK_BACK, sendSessionResultSuccess(Player::seekBack));
seq,
COMMAND_SEEK_BACK,
(sessionImpl, controller) -> {
sessionImpl.getPlayerWrapper().seekBack();
return SessionResult.RESULT_SUCCESS;
},
MediaSessionStub::sendSessionResult);
} }
@Override @Override
...@@ -714,14 +618,7 @@ import java.util.concurrent.ExecutionException; ...@@ -714,14 +618,7 @@ import java.util.concurrent.ExecutionException;
return; return;
} }
dispatchSessionTaskWithPlayerCommand( dispatchSessionTaskWithPlayerCommand(
caller, caller, seq, COMMAND_SEEK_FORWARD, sendSessionResultSuccess(Player::seekForward));
seq,
COMMAND_SEEK_FORWARD,
(sessionImpl, controller) -> {
sessionImpl.getPlayerWrapper().seekForward();
return SessionResult.RESULT_SUCCESS;
},
MediaSessionStub::sendSessionResult);
} }
@Override @Override
...@@ -744,9 +641,9 @@ import java.util.concurrent.ExecutionException; ...@@ -744,9 +641,9 @@ import java.util.concurrent.ExecutionException;
caller, caller,
seq, seq,
command, command,
(sessionImpl, controller) -> sendSessionResultWhenReady(
sessionImpl.onCustomCommandOnHandler(controller, command, args), (sessionImpl, controller, sequence) ->
MediaSessionStub::sendSessionResultWhenReady); sessionImpl.onCustomCommandOnHandler(controller, command, args)));
} }
@Override @Override
...@@ -770,8 +667,9 @@ import java.util.concurrent.ExecutionException; ...@@ -770,8 +667,9 @@ import java.util.concurrent.ExecutionException;
caller, caller,
seq, seq,
COMMAND_CODE_SESSION_SET_RATING, COMMAND_CODE_SESSION_SET_RATING,
(sessionImpl, controller) -> sessionImpl.onSetRatingOnHandler(controller, mediaId, rating), sendSessionResultWhenReady(
MediaSessionStub::sendSessionResultWhenReady); (sessionImpl, controller, sequence) ->
sessionImpl.onSetRatingOnHandler(controller, mediaId, rating)));
} }
@Override @Override
...@@ -790,8 +688,9 @@ import java.util.concurrent.ExecutionException; ...@@ -790,8 +688,9 @@ import java.util.concurrent.ExecutionException;
caller, caller,
seq, seq,
COMMAND_CODE_SESSION_SET_RATING, COMMAND_CODE_SESSION_SET_RATING,
(sessionImpl, controller) -> sessionImpl.onSetRatingOnHandler(controller, rating), sendSessionResultWhenReady(
MediaSessionStub::sendSessionResultWhenReady); (sessionImpl, controller, sequence) ->
sessionImpl.onSetRatingOnHandler(controller, rating)));
} }
@Override @Override
...@@ -803,11 +702,7 @@ import java.util.concurrent.ExecutionException; ...@@ -803,11 +702,7 @@ import java.util.concurrent.ExecutionException;
caller, caller,
seq, seq,
COMMAND_SET_SPEED_AND_PITCH, COMMAND_SET_SPEED_AND_PITCH,
(sessionImpl, controller) -> { sendSessionResultSuccess(player -> player.setPlaybackSpeed(speed)));
sessionImpl.getPlayerWrapper().setPlaybackSpeed(speed);
return SessionResult.RESULT_SUCCESS;
},
MediaSessionStub::sendSessionResult);
} }
@Override @Override
...@@ -822,11 +717,7 @@ import java.util.concurrent.ExecutionException; ...@@ -822,11 +717,7 @@ import java.util.concurrent.ExecutionException;
caller, caller,
seq, seq,
COMMAND_SET_SPEED_AND_PITCH, COMMAND_SET_SPEED_AND_PITCH,
(sessionImpl, controller) -> { sendSessionResultSuccess(player -> player.setPlaybackParameters(playbackParameters)));
sessionImpl.getPlayerWrapper().setPlaybackParameters(playbackParameters);
return SessionResult.RESULT_SUCCESS;
},
MediaSessionStub::sendSessionResult);
} }
@Override @Override
...@@ -846,11 +737,11 @@ import java.util.concurrent.ExecutionException; ...@@ -846,11 +737,11 @@ import java.util.concurrent.ExecutionException;
caller, caller,
seq, seq,
COMMAND_SET_MEDIA_ITEM, COMMAND_SET_MEDIA_ITEM,
(sessionImpl, controller) -> sendSessionResultWhenReady(
sessionImpl.onAddMediaItemsOnHandler(controller, ImmutableList.of(mediaItem)),
(sessionImpl, controller, sequence, future) ->
handleMediaItemsWhenReady( handleMediaItemsWhenReady(
sessionImpl, controller, sequence, future, Player::setMediaItems)); (sessionImpl, controller, sequence) ->
sessionImpl.onAddMediaItemsOnHandler(controller, ImmutableList.of(mediaItem)),
Player::setMediaItems)));
} }
@Override @Override
...@@ -873,16 +764,12 @@ import java.util.concurrent.ExecutionException; ...@@ -873,16 +764,12 @@ import java.util.concurrent.ExecutionException;
caller, caller,
seq, seq,
COMMAND_SET_MEDIA_ITEM, COMMAND_SET_MEDIA_ITEM,
(sessionImpl, controller) -> sendSessionResultWhenReady(
sessionImpl.onAddMediaItemsOnHandler(controller, ImmutableList.of(mediaItem)),
(sessionImpl, controller, sequence, future) ->
handleMediaItemsWhenReady( handleMediaItemsWhenReady(
sessionImpl, (sessionImpl, controller, sequence) ->
controller, sessionImpl.onAddMediaItemsOnHandler(controller, ImmutableList.of(mediaItem)),
sequence,
future,
(player, mediaItems) -> (player, mediaItems) ->
player.setMediaItems(mediaItems, /* startIndex= */ 0, startPositionMs))); player.setMediaItems(mediaItems, /* startIndex= */ 0, startPositionMs))));
} }
@Override @Override
...@@ -905,15 +792,11 @@ import java.util.concurrent.ExecutionException; ...@@ -905,15 +792,11 @@ import java.util.concurrent.ExecutionException;
caller, caller,
seq, seq,
COMMAND_SET_MEDIA_ITEM, COMMAND_SET_MEDIA_ITEM,
(sessionImpl, controller) -> sendSessionResultWhenReady(
sessionImpl.onAddMediaItemsOnHandler(controller, ImmutableList.of(mediaItem)),
(sessionImpl, controller, sequence, future) ->
handleMediaItemsWhenReady( handleMediaItemsWhenReady(
sessionImpl, (sessionImpl, controller, sequence) ->
controller, sessionImpl.onAddMediaItemsOnHandler(controller, ImmutableList.of(mediaItem)),
sequence, (player, mediaItems) -> player.setMediaItems(mediaItems, resetPosition))));
future,
(player, mediaItems) -> player.setMediaItems(mediaItems, resetPosition)));
} }
@Override @Override
...@@ -936,11 +819,11 @@ import java.util.concurrent.ExecutionException; ...@@ -936,11 +819,11 @@ import java.util.concurrent.ExecutionException;
caller, caller,
seq, seq,
COMMAND_CHANGE_MEDIA_ITEMS, COMMAND_CHANGE_MEDIA_ITEMS,
(sessionImpl, controller) -> sendSessionResultWhenReady(
sessionImpl.onAddMediaItemsOnHandler(controller, mediaItemList),
(sessionImpl, controller, sequence, future) ->
handleMediaItemsWhenReady( handleMediaItemsWhenReady(
sessionImpl, controller, sequence, future, Player::setMediaItems)); (sessionImpl, controller, sequence) ->
sessionImpl.onAddMediaItemsOnHandler(controller, mediaItemList),
Player::setMediaItems)));
} }
@Override @Override
...@@ -965,15 +848,11 @@ import java.util.concurrent.ExecutionException; ...@@ -965,15 +848,11 @@ import java.util.concurrent.ExecutionException;
caller, caller,
seq, seq,
COMMAND_CHANGE_MEDIA_ITEMS, COMMAND_CHANGE_MEDIA_ITEMS,
(sessionImpl, controller) -> sendSessionResultWhenReady(
sessionImpl.onAddMediaItemsOnHandler(controller, mediaItemList),
(sessionImpl, controller, sequence, future) ->
handleMediaItemsWhenReady( handleMediaItemsWhenReady(
sessionImpl, (sessionImpl, controller, sequence) ->
controller, sessionImpl.onAddMediaItemsOnHandler(controller, mediaItemList),
sequence, (player, mediaItems) -> player.setMediaItems(mediaItems, resetPosition))));
future,
(player, mediaItems) -> player.setMediaItems(mediaItems, resetPosition)));
} }
@Override @Override
...@@ -999,16 +878,12 @@ import java.util.concurrent.ExecutionException; ...@@ -999,16 +878,12 @@ import java.util.concurrent.ExecutionException;
caller, caller,
seq, seq,
COMMAND_CHANGE_MEDIA_ITEMS, COMMAND_CHANGE_MEDIA_ITEMS,
(sessionImpl, controller) -> sendSessionResultWhenReady(
sessionImpl.onAddMediaItemsOnHandler(controller, mediaItemList),
(sessionImpl, controller, sequence, future) ->
handleMediaItemsWhenReady( handleMediaItemsWhenReady(
sessionImpl, (sessionImpl, controller, sequence) ->
controller, sessionImpl.onAddMediaItemsOnHandler(controller, mediaItemList),
sequence,
future,
(player, mediaItems) -> (player, mediaItems) ->
player.setMediaItems(mediaItems, startIndex, startPositionMs))); player.setMediaItems(mediaItems, startIndex, startPositionMs))));
} }
@Override @Override
...@@ -1028,11 +903,7 @@ import java.util.concurrent.ExecutionException; ...@@ -1028,11 +903,7 @@ import java.util.concurrent.ExecutionException;
caller, caller,
seq, seq,
COMMAND_SET_MEDIA_ITEMS_METADATA, COMMAND_SET_MEDIA_ITEMS_METADATA,
(sessionImpl, controller) -> { sendSessionResultSuccess(player -> player.setPlaylistMetadata(playlistMetadata)));
sessionImpl.getPlayerWrapper().setPlaylistMetadata(playlistMetadata);
return SessionResult.RESULT_SUCCESS;
},
MediaSessionStub::sendSessionResult);
} }
@Override @Override
...@@ -1051,11 +922,11 @@ import java.util.concurrent.ExecutionException; ...@@ -1051,11 +922,11 @@ import java.util.concurrent.ExecutionException;
caller, caller,
seq, seq,
COMMAND_CHANGE_MEDIA_ITEMS, COMMAND_CHANGE_MEDIA_ITEMS,
(sessionImpl, controller) -> sendSessionResultWhenReady(
sessionImpl.onAddMediaItemsOnHandler(controller, ImmutableList.of(mediaItem)),
(sessionImpl, controller, sequence, future) ->
handleMediaItemsWhenReady( handleMediaItemsWhenReady(
sessionImpl, controller, sequence, future, Player::addMediaItems)); (sessionImpl, controller, sequence) ->
sessionImpl.onAddMediaItemsOnHandler(controller, ImmutableList.of(mediaItem)),
Player::addMediaItems)));
} }
@Override @Override
...@@ -1075,15 +946,11 @@ import java.util.concurrent.ExecutionException; ...@@ -1075,15 +946,11 @@ import java.util.concurrent.ExecutionException;
caller, caller,
seq, seq,
COMMAND_CHANGE_MEDIA_ITEMS, COMMAND_CHANGE_MEDIA_ITEMS,
(sessionImpl, controller) -> sendSessionResultWhenReady(
sessionImpl.onAddMediaItemsOnHandler(controller, ImmutableList.of(mediaItem)),
(sessionImpl, controller, sequence, future) ->
handleMediaItemsWhenReady( handleMediaItemsWhenReady(
sessionImpl, (sessionImpl, controller, sequence) ->
controller, sessionImpl.onAddMediaItemsOnHandler(controller, ImmutableList.of(mediaItem)),
sequence, (player, mediaItems) -> player.addMediaItems(index, mediaItems))));
future,
(player, mediaItems) -> player.addMediaItems(index, mediaItems)));
} }
@Override @Override
...@@ -1105,10 +972,11 @@ import java.util.concurrent.ExecutionException; ...@@ -1105,10 +972,11 @@ import java.util.concurrent.ExecutionException;
caller, caller,
seq, seq,
COMMAND_CHANGE_MEDIA_ITEMS, COMMAND_CHANGE_MEDIA_ITEMS,
(sessionImpl, controller) -> sessionImpl.onAddMediaItemsOnHandler(controller, mediaItems), sendSessionResultWhenReady(
(sessionImpl, controller, sequence, future) ->
handleMediaItemsWhenReady( handleMediaItemsWhenReady(
sessionImpl, controller, sequence, future, Player::addMediaItems)); (sessionImpl, controller, sequence) ->
sessionImpl.onAddMediaItemsOnHandler(controller, mediaItems),
Player::addMediaItems)));
} }
@Override @Override
...@@ -1133,14 +1001,11 @@ import java.util.concurrent.ExecutionException; ...@@ -1133,14 +1001,11 @@ import java.util.concurrent.ExecutionException;
caller, caller,
seq, seq,
COMMAND_CHANGE_MEDIA_ITEMS, COMMAND_CHANGE_MEDIA_ITEMS,
(sessionImpl, controller) -> sessionImpl.onAddMediaItemsOnHandler(controller, mediaItems), sendSessionResultWhenReady(
(sessionImpl, controller, sequence, future) ->
handleMediaItemsWhenReady( handleMediaItemsWhenReady(
sessionImpl, (sessionImpl, controller, sequence) ->
controller, sessionImpl.onAddMediaItemsOnHandler(controller, mediaItems),
sequence, (player, items) -> player.addMediaItems(index, items))));
future,
(player, items) -> player.addMediaItems(index, items)));
} }
@Override @Override
...@@ -1152,11 +1017,7 @@ import java.util.concurrent.ExecutionException; ...@@ -1152,11 +1017,7 @@ import java.util.concurrent.ExecutionException;
caller, caller,
seq, seq,
COMMAND_CHANGE_MEDIA_ITEMS, COMMAND_CHANGE_MEDIA_ITEMS,
(sessionImpl, controller) -> { sendSessionResultSuccess(player -> player.removeMediaItem(index)));
sessionImpl.getPlayerWrapper().removeMediaItem(index);
return SessionResult.RESULT_SUCCESS;
},
MediaSessionStub::sendSessionResult);
} }
@Override @Override
...@@ -1169,11 +1030,7 @@ import java.util.concurrent.ExecutionException; ...@@ -1169,11 +1030,7 @@ import java.util.concurrent.ExecutionException;
caller, caller,
seq, seq,
COMMAND_CHANGE_MEDIA_ITEMS, COMMAND_CHANGE_MEDIA_ITEMS,
(sessionImpl, controller) -> { sendSessionResultSuccess(player -> player.removeMediaItems(fromIndex, toIndex)));
sessionImpl.getPlayerWrapper().removeMediaItems(fromIndex, toIndex);
return SessionResult.RESULT_SUCCESS;
},
MediaSessionStub::sendSessionResult);
} }
@Override @Override
...@@ -1182,14 +1039,7 @@ import java.util.concurrent.ExecutionException; ...@@ -1182,14 +1039,7 @@ import java.util.concurrent.ExecutionException;
return; return;
} }
dispatchSessionTaskWithPlayerCommand( dispatchSessionTaskWithPlayerCommand(
caller, caller, seq, COMMAND_CHANGE_MEDIA_ITEMS, sendSessionResultSuccess(Player::clearMediaItems));
seq,
COMMAND_CHANGE_MEDIA_ITEMS,
(sessionImpl, controller) -> {
sessionImpl.getPlayerWrapper().clearMediaItems();
return SessionResult.RESULT_SUCCESS;
},
MediaSessionStub::sendSessionResult);
} }
@Override @Override
...@@ -1202,11 +1052,7 @@ import java.util.concurrent.ExecutionException; ...@@ -1202,11 +1052,7 @@ import java.util.concurrent.ExecutionException;
caller, caller,
seq, seq,
COMMAND_CHANGE_MEDIA_ITEMS, COMMAND_CHANGE_MEDIA_ITEMS,
(sessionImpl, controller) -> { sendSessionResultSuccess(player -> player.moveMediaItem(currentIndex, newIndex)));
sessionImpl.getPlayerWrapper().moveMediaItem(currentIndex, newIndex);
return SessionResult.RESULT_SUCCESS;
},
MediaSessionStub::sendSessionResult);
} }
@Override @Override
...@@ -1219,11 +1065,7 @@ import java.util.concurrent.ExecutionException; ...@@ -1219,11 +1065,7 @@ import java.util.concurrent.ExecutionException;
caller, caller,
seq, seq,
COMMAND_CHANGE_MEDIA_ITEMS, COMMAND_CHANGE_MEDIA_ITEMS,
(sessionImpl, controller) -> { sendSessionResultSuccess(player -> player.moveMediaItems(fromIndex, toIndex, newIndex)));
sessionImpl.getPlayerWrapper().moveMediaItems(fromIndex, toIndex, newIndex);
return SessionResult.RESULT_SUCCESS;
},
MediaSessionStub::sendSessionResult);
} }
@Override @Override
...@@ -1235,11 +1077,7 @@ import java.util.concurrent.ExecutionException; ...@@ -1235,11 +1077,7 @@ import java.util.concurrent.ExecutionException;
caller, caller,
seq, seq,
COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM, COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM,
(sessionImpl, controller) -> { sendSessionResultSuccess(Player::seekToPreviousMediaItem));
sessionImpl.getPlayerWrapper().seekToPreviousMediaItem();
return SessionResult.RESULT_SUCCESS;
},
MediaSessionStub::sendSessionResult);
} }
@Override @Override
...@@ -1251,11 +1089,7 @@ import java.util.concurrent.ExecutionException; ...@@ -1251,11 +1089,7 @@ import java.util.concurrent.ExecutionException;
caller, caller,
seq, seq,
COMMAND_SEEK_TO_NEXT_MEDIA_ITEM, COMMAND_SEEK_TO_NEXT_MEDIA_ITEM,
(sessionImpl, controller) -> { sendSessionResultSuccess(Player::seekToNextMediaItem));
sessionImpl.getPlayerWrapper().seekToNextMediaItem();
return SessionResult.RESULT_SUCCESS;
},
MediaSessionStub::sendSessionResult);
} }
@Override @Override
...@@ -1264,14 +1098,7 @@ import java.util.concurrent.ExecutionException; ...@@ -1264,14 +1098,7 @@ import java.util.concurrent.ExecutionException;
return; return;
} }
dispatchSessionTaskWithPlayerCommand( dispatchSessionTaskWithPlayerCommand(
caller, caller, seq, COMMAND_SEEK_TO_PREVIOUS, sendSessionResultSuccess(Player::seekToPrevious));
seq,
COMMAND_SEEK_TO_PREVIOUS,
(sessionImpl, controller) -> {
sessionImpl.getPlayerWrapper().seekToPrevious();
return SessionResult.RESULT_SUCCESS;
},
MediaSessionStub::sendSessionResult);
} }
@Override @Override
...@@ -1280,14 +1107,7 @@ import java.util.concurrent.ExecutionException; ...@@ -1280,14 +1107,7 @@ import java.util.concurrent.ExecutionException;
return; return;
} }
dispatchSessionTaskWithPlayerCommand( dispatchSessionTaskWithPlayerCommand(
caller, caller, seq, COMMAND_SEEK_TO_NEXT, sendSessionResultSuccess(Player::seekToNext));
seq,
COMMAND_SEEK_TO_NEXT,
(sessionImpl, controller) -> {
sessionImpl.getPlayerWrapper().seekToNext();
return SessionResult.RESULT_SUCCESS;
},
MediaSessionStub::sendSessionResult);
} }
@Override @Override
...@@ -1300,11 +1120,7 @@ import java.util.concurrent.ExecutionException; ...@@ -1300,11 +1120,7 @@ import java.util.concurrent.ExecutionException;
caller, caller,
seq, seq,
COMMAND_SET_REPEAT_MODE, COMMAND_SET_REPEAT_MODE,
(sessionImpl, controller) -> { sendSessionResultSuccess(player -> player.setRepeatMode(repeatMode)));
sessionImpl.getPlayerWrapper().setRepeatMode(repeatMode);
return SessionResult.RESULT_SUCCESS;
},
MediaSessionStub::sendSessionResult);
} }
@Override @Override
...@@ -1317,11 +1133,7 @@ import java.util.concurrent.ExecutionException; ...@@ -1317,11 +1133,7 @@ import java.util.concurrent.ExecutionException;
caller, caller,
seq, seq,
COMMAND_SET_SHUFFLE_MODE, COMMAND_SET_SHUFFLE_MODE,
(sessionImpl, controller) -> { sendSessionResultSuccess(player -> player.setShuffleModeEnabled(shuffleModeEnabled)));
sessionImpl.getPlayerWrapper().setShuffleModeEnabled(shuffleModeEnabled);
return SessionResult.RESULT_SUCCESS;
},
MediaSessionStub::sendSessionResult);
} }
@Override @Override
...@@ -1334,11 +1146,7 @@ import java.util.concurrent.ExecutionException; ...@@ -1334,11 +1146,7 @@ import java.util.concurrent.ExecutionException;
caller, caller,
seq, seq,
COMMAND_SET_VIDEO_SURFACE, COMMAND_SET_VIDEO_SURFACE,
(sessionImpl, controller) -> { sendSessionResultSuccess(player -> player.setVideoSurface(surface)));
sessionImpl.getPlayerWrapper().setVideoSurface(surface);
return SessionResult.RESULT_SUCCESS;
},
MediaSessionStub::sendSessionResult);
} }
@Override @Override
...@@ -1350,11 +1158,7 @@ import java.util.concurrent.ExecutionException; ...@@ -1350,11 +1158,7 @@ import java.util.concurrent.ExecutionException;
caller, caller,
seq, seq,
COMMAND_SET_VOLUME, COMMAND_SET_VOLUME,
(sessionImpl, controller) -> { sendSessionResultSuccess(player -> player.setVolume(volume)));
sessionImpl.getPlayerWrapper().setVolume(volume);
return SessionResult.RESULT_SUCCESS;
},
MediaSessionStub::sendSessionResult);
} }
@Override @Override
...@@ -1366,11 +1170,7 @@ import java.util.concurrent.ExecutionException; ...@@ -1366,11 +1170,7 @@ import java.util.concurrent.ExecutionException;
caller, caller,
seq, seq,
COMMAND_SET_DEVICE_VOLUME, COMMAND_SET_DEVICE_VOLUME,
(sessionImpl, controller) -> { sendSessionResultSuccess(player -> player.setDeviceVolume(volume)));
sessionImpl.getPlayerWrapper().setDeviceVolume(volume);
return SessionResult.RESULT_SUCCESS;
},
MediaSessionStub::sendSessionResult);
} }
@Override @Override
...@@ -1382,11 +1182,7 @@ import java.util.concurrent.ExecutionException; ...@@ -1382,11 +1182,7 @@ import java.util.concurrent.ExecutionException;
caller, caller,
seq, seq,
COMMAND_ADJUST_DEVICE_VOLUME, COMMAND_ADJUST_DEVICE_VOLUME,
(sessionImpl, controller) -> { sendSessionResultSuccess(Player::increaseDeviceVolume));
sessionImpl.getPlayerWrapper().increaseDeviceVolume();
return SessionResult.RESULT_SUCCESS;
},
MediaSessionStub::sendSessionResult);
} }
@Override @Override
...@@ -1398,11 +1194,7 @@ import java.util.concurrent.ExecutionException; ...@@ -1398,11 +1194,7 @@ import java.util.concurrent.ExecutionException;
caller, caller,
seq, seq,
COMMAND_ADJUST_DEVICE_VOLUME, COMMAND_ADJUST_DEVICE_VOLUME,
(sessionImpl, controller) -> { sendSessionResultSuccess(Player::decreaseDeviceVolume));
sessionImpl.getPlayerWrapper().decreaseDeviceVolume();
return SessionResult.RESULT_SUCCESS;
},
MediaSessionStub::sendSessionResult);
} }
@Override @Override
...@@ -1414,11 +1206,7 @@ import java.util.concurrent.ExecutionException; ...@@ -1414,11 +1206,7 @@ import java.util.concurrent.ExecutionException;
caller, caller,
seq, seq,
COMMAND_SET_DEVICE_VOLUME, COMMAND_SET_DEVICE_VOLUME,
(sessionImpl, controller) -> { sendSessionResultSuccess(player -> player.setDeviceMuted(muted)));
sessionImpl.getPlayerWrapper().setDeviceMuted(muted);
return SessionResult.RESULT_SUCCESS;
},
MediaSessionStub::sendSessionResult);
} }
@Override @Override
...@@ -1430,11 +1218,7 @@ import java.util.concurrent.ExecutionException; ...@@ -1430,11 +1218,7 @@ import java.util.concurrent.ExecutionException;
caller, caller,
seq, seq,
COMMAND_PLAY_PAUSE, COMMAND_PLAY_PAUSE,
(sessionImpl, controller) -> { sendSessionResultSuccess(player -> player.setPlayWhenReady(playWhenReady)));
sessionImpl.getPlayerWrapper().setPlayWhenReady(playWhenReady);
return SessionResult.RESULT_SUCCESS;
},
MediaSessionStub::sendSessionResult);
} }
@Override @Override
...@@ -1478,11 +1262,8 @@ import java.util.concurrent.ExecutionException; ...@@ -1478,11 +1262,8 @@ import java.util.concurrent.ExecutionException;
caller, caller,
seq, seq,
COMMAND_SET_TRACK_SELECTION_PARAMETERS, COMMAND_SET_TRACK_SELECTION_PARAMETERS,
(sessionImpl, controller) -> { sendSessionResultSuccess(
sessionImpl.getPlayerWrapper().setTrackSelectionParameters(trackSelectionParameters); player -> player.setTrackSelectionParameters(trackSelectionParameters)));
return SessionResult.RESULT_SUCCESS;
},
MediaSessionStub::sendSessionResult);
} }
////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////
...@@ -1499,13 +1280,13 @@ import java.util.concurrent.ExecutionException; ...@@ -1499,13 +1280,13 @@ import java.util.concurrent.ExecutionException;
@Nullable @Nullable
LibraryParams libraryParams = LibraryParams libraryParams =
libraryParamsBundle == null ? null : LibraryParams.CREATOR.fromBundle(libraryParamsBundle); libraryParamsBundle == null ? null : LibraryParams.CREATOR.fromBundle(libraryParamsBundle);
dispatchSessionTaskWithLibrarySessionCommand( dispatchSessionTaskWithSessionCommand(
caller, caller,
seq, seq,
COMMAND_CODE_LIBRARY_GET_LIBRARY_ROOT, COMMAND_CODE_LIBRARY_GET_LIBRARY_ROOT,
(librarySessionImpl, controller) -> sendLibraryResultWhenReady(
librarySessionImpl.onGetLibraryRootOnHandler(controller, libraryParams), (librarySessionImpl, controller, sequence) ->
MediaSessionStub::sendLibraryResultWhenReady); librarySessionImpl.onGetLibraryRootOnHandler(controller, libraryParams)));
} }
@Override @Override
...@@ -1518,13 +1299,13 @@ import java.util.concurrent.ExecutionException; ...@@ -1518,13 +1299,13 @@ import java.util.concurrent.ExecutionException;
Log.w(TAG, "getItem(): Ignoring empty mediaId"); Log.w(TAG, "getItem(): Ignoring empty mediaId");
return; return;
} }
dispatchSessionTaskWithLibrarySessionCommand( dispatchSessionTaskWithSessionCommand(
caller, caller,
seq, seq,
COMMAND_CODE_LIBRARY_GET_ITEM, COMMAND_CODE_LIBRARY_GET_ITEM,
(librarySessionImpl, controller) -> sendLibraryResultWhenReady(
librarySessionImpl.onGetItemOnHandler(controller, mediaId), (librarySessionImpl, controller, sequence) ->
MediaSessionStub::sendLibraryResultWhenReady); librarySessionImpl.onGetItemOnHandler(controller, mediaId)));
} }
@Override @Override
...@@ -1554,14 +1335,14 @@ import java.util.concurrent.ExecutionException; ...@@ -1554,14 +1335,14 @@ import java.util.concurrent.ExecutionException;
@Nullable @Nullable
LibraryParams libraryParams = LibraryParams libraryParams =
libraryParamsBundle == null ? null : LibraryParams.CREATOR.fromBundle(libraryParamsBundle); libraryParamsBundle == null ? null : LibraryParams.CREATOR.fromBundle(libraryParamsBundle);
dispatchSessionTaskWithLibrarySessionCommand( dispatchSessionTaskWithSessionCommand(
caller, caller,
seq, seq,
COMMAND_CODE_LIBRARY_GET_CHILDREN, COMMAND_CODE_LIBRARY_GET_CHILDREN,
(librarySessionImpl, controller) -> sendLibraryResultWhenReady(
librarySessionImpl.onGetChildrenOnHandler( (librarySessionImpl, controller, sequence) ->
controller, parentId, page, pageSize, libraryParams), librarySessionImpl.onGetChildrenOnHandler(
MediaSessionStub::sendLibraryResultWhenReady); controller, parentId, page, pageSize, libraryParams)));
} }
@Override @Override
...@@ -1580,13 +1361,13 @@ import java.util.concurrent.ExecutionException; ...@@ -1580,13 +1361,13 @@ import java.util.concurrent.ExecutionException;
@Nullable @Nullable
LibraryParams libraryParams = LibraryParams libraryParams =
libraryParamsBundle == null ? null : LibraryParams.CREATOR.fromBundle(libraryParamsBundle); libraryParamsBundle == null ? null : LibraryParams.CREATOR.fromBundle(libraryParamsBundle);
dispatchSessionTaskWithLibrarySessionCommand( dispatchSessionTaskWithSessionCommand(
caller, caller,
seq, seq,
COMMAND_CODE_LIBRARY_SEARCH, COMMAND_CODE_LIBRARY_SEARCH,
(librarySessionImpl, controller) -> sendLibraryResultWhenReady(
librarySessionImpl.onSearchOnHandler(controller, query, libraryParams), (librarySessionImpl, controller, sequence) ->
MediaSessionStub::sendLibraryResultWhenReady); librarySessionImpl.onSearchOnHandler(controller, query, libraryParams)));
} }
@Override @Override
...@@ -1615,14 +1396,14 @@ import java.util.concurrent.ExecutionException; ...@@ -1615,14 +1396,14 @@ import java.util.concurrent.ExecutionException;
@Nullable @Nullable
LibraryParams libraryParams = LibraryParams libraryParams =
libraryParamsBundle == null ? null : LibraryParams.CREATOR.fromBundle(libraryParamsBundle); libraryParamsBundle == null ? null : LibraryParams.CREATOR.fromBundle(libraryParamsBundle);
dispatchSessionTaskWithLibrarySessionCommand( dispatchSessionTaskWithSessionCommand(
caller, caller,
seq, seq,
COMMAND_CODE_LIBRARY_GET_SEARCH_RESULT, COMMAND_CODE_LIBRARY_GET_SEARCH_RESULT,
(librarySessionImpl, controller) -> sendLibraryResultWhenReady(
librarySessionImpl.onGetSearchResultOnHandler( (librarySessionImpl, controller, sequence) ->
controller, query, page, pageSize, libraryParams), librarySessionImpl.onGetSearchResultOnHandler(
MediaSessionStub::sendLibraryResultWhenReady); controller, query, page, pageSize, libraryParams)));
} }
@Override @Override
...@@ -1641,13 +1422,13 @@ import java.util.concurrent.ExecutionException; ...@@ -1641,13 +1422,13 @@ import java.util.concurrent.ExecutionException;
@Nullable @Nullable
LibraryParams libraryParams = LibraryParams libraryParams =
libraryParamsBundle == null ? null : LibraryParams.CREATOR.fromBundle(libraryParamsBundle); libraryParamsBundle == null ? null : LibraryParams.CREATOR.fromBundle(libraryParamsBundle);
dispatchSessionTaskWithLibrarySessionCommand( dispatchSessionTaskWithSessionCommand(
caller, caller,
seq, seq,
COMMAND_CODE_LIBRARY_SUBSCRIBE, COMMAND_CODE_LIBRARY_SUBSCRIBE,
(librarySessionImpl, controller) -> sendLibraryResultWhenReady(
librarySessionImpl.onSubscribeOnHandler(controller, parentId, libraryParams), (librarySessionImpl, controller, sequence) ->
MediaSessionStub::sendLibraryResultWhenReady); librarySessionImpl.onSubscribeOnHandler(controller, parentId, libraryParams)));
} }
@Override @Override
...@@ -1659,22 +1440,18 @@ import java.util.concurrent.ExecutionException; ...@@ -1659,22 +1440,18 @@ import java.util.concurrent.ExecutionException;
Log.w(TAG, "unsubscribe(): Ignoring empty parentId"); Log.w(TAG, "unsubscribe(): Ignoring empty parentId");
return; return;
} }
dispatchSessionTaskWithLibrarySessionCommand( dispatchSessionTaskWithSessionCommand(
caller, caller,
seq, seq,
COMMAND_CODE_LIBRARY_UNSUBSCRIBE, COMMAND_CODE_LIBRARY_UNSUBSCRIBE,
(librarySessionImpl, controller) -> sendLibraryResultWhenReady(
librarySessionImpl.onUnsubscribeOnHandler(controller, parentId), (librarySessionImpl, controller, sequence) ->
MediaSessionStub::sendLibraryResultWhenReady); librarySessionImpl.onUnsubscribeOnHandler(controller, parentId)));
} }
/** Common interface for code snippets to handle all incoming commands from the controller. */ /** Common interface for code snippets to handle all incoming commands from the controller. */
private interface SessionTask<T, K extends MediaSessionImpl> { private interface SessionTask<T, K extends MediaSessionImpl> {
T run(K sessionImpl, ControllerInfo controller); T run(K sessionImpl, ControllerInfo controller, int seq);
}
private interface PostSessionTask<T, K extends MediaSessionImpl> {
void run(K sessionImpl, ControllerInfo controller, int seq, T result);
} }
private interface MediaItemPlayerTask { private interface MediaItemPlayerTask {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment