Add COMMAND_SET_MEDIA_ITEM to Player.Commands

Some Player implementations have no playlist capability but can still
set a MediaItem for playback. Examples are a MediaController connected
to a legacy MediaSession, ExoPlayer up to 2.12 or MediaPlayer.

To indicate this capability, we need an allowed command in addition
to COMMAND_CHANGE_MEDIA_ITEMS that just allows to set a single item
that replaces everything that is currently played.

#minor-release

PiperOrigin-RevId: 453879626
This commit is contained in:
tonihei 2022-06-09 10:16:29 +00:00 committed by Marc Baechinger
parent d506c709c9
commit 5333c67d08
11 changed files with 37 additions and 39 deletions

View File

@ -26,6 +26,8 @@
* Add `MediaItem.RequestMetadata` to represent metadata needed to play * Add `MediaItem.RequestMetadata` to represent metadata needed to play
media when the exact `LocalConfiguration` is not known. Also remove media when the exact `LocalConfiguration` is not known. Also remove
`MediaMetadata.mediaUrl` as this is now included in `RequestMetadata`. `MediaMetadata.mediaUrl` as this is now included in `RequestMetadata`.
* Add `Player.Command.COMMAND_SET_MEDIA_ITEM` to enable players to allow
setting a single item.
* Track selection: * Track selection:
* Flatten `TrackSelectionOverrides` class into `TrackSelectionParameters`, * Flatten `TrackSelectionOverrides` class into `TrackSelectionParameters`,
and promote `TrackSelectionOverride` to a top level class. and promote `TrackSelectionOverride` to a top level class.

View File

@ -102,7 +102,8 @@ public final class CastPlayer extends BasePlayer {
COMMAND_GET_MEDIA_ITEMS_METADATA, COMMAND_GET_MEDIA_ITEMS_METADATA,
COMMAND_SET_MEDIA_ITEMS_METADATA, COMMAND_SET_MEDIA_ITEMS_METADATA,
COMMAND_CHANGE_MEDIA_ITEMS, COMMAND_CHANGE_MEDIA_ITEMS,
COMMAND_GET_TRACKS) COMMAND_GET_TRACKS,
COMMAND_SET_MEDIA_ITEM)
.build(); .build();
public static final float MIN_SPEED_SUPPORTED = 0.5f; public static final float MIN_SPEED_SUPPORTED = 0.5f;

View File

@ -36,6 +36,7 @@ import static androidx.media3.common.Player.COMMAND_SEEK_TO_NEXT_MEDIA_ITEM;
import static androidx.media3.common.Player.COMMAND_SEEK_TO_PREVIOUS; import static androidx.media3.common.Player.COMMAND_SEEK_TO_PREVIOUS;
import static androidx.media3.common.Player.COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM; import static androidx.media3.common.Player.COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM;
import static androidx.media3.common.Player.COMMAND_SET_DEVICE_VOLUME; import static androidx.media3.common.Player.COMMAND_SET_DEVICE_VOLUME;
import static androidx.media3.common.Player.COMMAND_SET_MEDIA_ITEM;
import static androidx.media3.common.Player.COMMAND_SET_MEDIA_ITEMS_METADATA; import static androidx.media3.common.Player.COMMAND_SET_MEDIA_ITEMS_METADATA;
import static androidx.media3.common.Player.COMMAND_SET_REPEAT_MODE; import static androidx.media3.common.Player.COMMAND_SET_REPEAT_MODE;
import static androidx.media3.common.Player.COMMAND_SET_SHUFFLE_MODE; import static androidx.media3.common.Player.COMMAND_SET_SHUFFLE_MODE;
@ -1359,6 +1360,7 @@ public class CastPlayerTest {
assertThat(castPlayer.isCommandAvailable(COMMAND_GET_MEDIA_ITEMS_METADATA)).isTrue(); assertThat(castPlayer.isCommandAvailable(COMMAND_GET_MEDIA_ITEMS_METADATA)).isTrue();
assertThat(castPlayer.isCommandAvailable(COMMAND_SET_MEDIA_ITEMS_METADATA)).isTrue(); assertThat(castPlayer.isCommandAvailable(COMMAND_SET_MEDIA_ITEMS_METADATA)).isTrue();
assertThat(castPlayer.isCommandAvailable(COMMAND_CHANGE_MEDIA_ITEMS)).isTrue(); assertThat(castPlayer.isCommandAvailable(COMMAND_CHANGE_MEDIA_ITEMS)).isTrue();
assertThat(castPlayer.isCommandAvailable(COMMAND_SET_MEDIA_ITEM)).isTrue();
assertThat(castPlayer.isCommandAvailable(COMMAND_GET_AUDIO_ATTRIBUTES)).isFalse(); assertThat(castPlayer.isCommandAvailable(COMMAND_GET_AUDIO_ATTRIBUTES)).isFalse();
assertThat(castPlayer.isCommandAvailable(COMMAND_GET_VOLUME)).isFalse(); assertThat(castPlayer.isCommandAvailable(COMMAND_GET_VOLUME)).isFalse();
assertThat(castPlayer.isCommandAvailable(COMMAND_GET_DEVICE_VOLUME)).isFalse(); assertThat(castPlayer.isCommandAvailable(COMMAND_GET_DEVICE_VOLUME)).isFalse();

View File

@ -384,6 +384,7 @@ public interface Player {
COMMAND_GET_TEXT, COMMAND_GET_TEXT,
COMMAND_SET_TRACK_SELECTION_PARAMETERS, COMMAND_SET_TRACK_SELECTION_PARAMETERS,
COMMAND_GET_TRACKS, COMMAND_GET_TRACKS,
COMMAND_SET_MEDIA_ITEM,
}; };
private final FlagSet.Builder flagsBuilder; private final FlagSet.Builder flagsBuilder;
@ -1402,7 +1403,8 @@ public interface Player {
* #COMMAND_GET_VOLUME}, {@link #COMMAND_GET_DEVICE_VOLUME}, {@link #COMMAND_SET_VOLUME}, {@link * #COMMAND_GET_VOLUME}, {@link #COMMAND_GET_DEVICE_VOLUME}, {@link #COMMAND_SET_VOLUME}, {@link
* #COMMAND_SET_DEVICE_VOLUME}, {@link #COMMAND_ADJUST_DEVICE_VOLUME}, {@link * #COMMAND_SET_DEVICE_VOLUME}, {@link #COMMAND_ADJUST_DEVICE_VOLUME}, {@link
* #COMMAND_SET_VIDEO_SURFACE}, {@link #COMMAND_GET_TEXT}, {@link * #COMMAND_SET_VIDEO_SURFACE}, {@link #COMMAND_GET_TEXT}, {@link
* #COMMAND_SET_TRACK_SELECTION_PARAMETERS} or {@link #COMMAND_GET_TRACKS}. * #COMMAND_SET_TRACK_SELECTION_PARAMETERS}, {@link #COMMAND_GET_TRACKS} or {@link
* #COMMAND_SET_MEDIA_ITEM}.
*/ */
// @Target list includes both 'default' targets and TYPE_USE, to ensure backwards compatibility // @Target list includes both 'default' targets and TYPE_USE, to ensure backwards compatibility
// with Kotlin usages from before TYPE_USE was added. // with Kotlin usages from before TYPE_USE was added.
@ -1441,6 +1443,7 @@ public interface Player {
COMMAND_GET_TEXT, COMMAND_GET_TEXT,
COMMAND_SET_TRACK_SELECTION_PARAMETERS, COMMAND_SET_TRACK_SELECTION_PARAMETERS,
COMMAND_GET_TRACKS, COMMAND_GET_TRACKS,
COMMAND_SET_MEDIA_ITEM,
}) })
@interface Command {} @interface Command {}
/** Command to start, pause or resume playback. */ /** Command to start, pause or resume playback. */
@ -1520,6 +1523,8 @@ public interface Player {
int COMMAND_SET_TRACK_SELECTION_PARAMETERS = 29; int COMMAND_SET_TRACK_SELECTION_PARAMETERS = 29;
/** Command to get details of the current track selection. */ /** Command to get details of the current track selection. */
int COMMAND_GET_TRACKS = 30; int COMMAND_GET_TRACKS = 30;
/** Command to set a {@link MediaItem MediaItem}. */
int COMMAND_SET_MEDIA_ITEM = 31;
/** Represents an invalid {@link Command}. */ /** Represents an invalid {@link Command}. */
int COMMAND_INVALID = -1; int COMMAND_INVALID = -1;

View File

@ -303,7 +303,8 @@ import java.util.concurrent.TimeoutException;
COMMAND_SET_DEVICE_VOLUME, COMMAND_SET_DEVICE_VOLUME,
COMMAND_ADJUST_DEVICE_VOLUME, COMMAND_ADJUST_DEVICE_VOLUME,
COMMAND_SET_VIDEO_SURFACE, COMMAND_SET_VIDEO_SURFACE,
COMMAND_GET_TEXT) COMMAND_GET_TEXT,
COMMAND_SET_MEDIA_ITEM)
.addIf( .addIf(
COMMAND_SET_TRACK_SELECTION_PARAMETERS, trackSelector.isSetParametersSupported()) COMMAND_SET_TRACK_SELECTION_PARAMETERS, trackSelector.isSetParametersSupported())
.build(); .build();

View File

@ -37,6 +37,7 @@ import static androidx.media3.common.Player.COMMAND_SEEK_TO_NEXT_MEDIA_ITEM;
import static androidx.media3.common.Player.COMMAND_SEEK_TO_PREVIOUS; import static androidx.media3.common.Player.COMMAND_SEEK_TO_PREVIOUS;
import static androidx.media3.common.Player.COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM; import static androidx.media3.common.Player.COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM;
import static androidx.media3.common.Player.COMMAND_SET_DEVICE_VOLUME; import static androidx.media3.common.Player.COMMAND_SET_DEVICE_VOLUME;
import static androidx.media3.common.Player.COMMAND_SET_MEDIA_ITEM;
import static androidx.media3.common.Player.COMMAND_SET_MEDIA_ITEMS_METADATA; import static androidx.media3.common.Player.COMMAND_SET_MEDIA_ITEMS_METADATA;
import static androidx.media3.common.Player.COMMAND_SET_REPEAT_MODE; import static androidx.media3.common.Player.COMMAND_SET_REPEAT_MODE;
import static androidx.media3.common.Player.COMMAND_SET_SHUFFLE_MODE; import static androidx.media3.common.Player.COMMAND_SET_SHUFFLE_MODE;
@ -8979,6 +8980,7 @@ public final class ExoPlayerTest {
assertThat(player.isCommandAvailable(COMMAND_GET_MEDIA_ITEMS_METADATA)).isTrue(); assertThat(player.isCommandAvailable(COMMAND_GET_MEDIA_ITEMS_METADATA)).isTrue();
assertThat(player.isCommandAvailable(COMMAND_SET_MEDIA_ITEMS_METADATA)).isTrue(); assertThat(player.isCommandAvailable(COMMAND_SET_MEDIA_ITEMS_METADATA)).isTrue();
assertThat(player.isCommandAvailable(COMMAND_CHANGE_MEDIA_ITEMS)).isTrue(); assertThat(player.isCommandAvailable(COMMAND_CHANGE_MEDIA_ITEMS)).isTrue();
assertThat(player.isCommandAvailable(COMMAND_SET_MEDIA_ITEM)).isTrue();
assertThat(player.isCommandAvailable(COMMAND_GET_AUDIO_ATTRIBUTES)).isTrue(); assertThat(player.isCommandAvailable(COMMAND_GET_AUDIO_ATTRIBUTES)).isTrue();
assertThat(player.isCommandAvailable(COMMAND_GET_VOLUME)).isTrue(); assertThat(player.isCommandAvailable(COMMAND_GET_VOLUME)).isTrue();
assertThat(player.isCommandAvailable(COMMAND_GET_DEVICE_VOLUME)).isTrue(); assertThat(player.isCommandAvailable(COMMAND_GET_DEVICE_VOLUME)).isTrue();
@ -12128,6 +12130,7 @@ public final class ExoPlayerTest {
COMMAND_GET_MEDIA_ITEMS_METADATA, COMMAND_GET_MEDIA_ITEMS_METADATA,
COMMAND_SET_MEDIA_ITEMS_METADATA, COMMAND_SET_MEDIA_ITEMS_METADATA,
COMMAND_CHANGE_MEDIA_ITEMS, COMMAND_CHANGE_MEDIA_ITEMS,
COMMAND_SET_MEDIA_ITEM,
COMMAND_GET_AUDIO_ATTRIBUTES, COMMAND_GET_AUDIO_ATTRIBUTES,
COMMAND_GET_VOLUME, COMMAND_GET_VOLUME,
COMMAND_GET_DEVICE_VOLUME, COMMAND_GET_DEVICE_VOLUME,

View File

@ -29,6 +29,7 @@ import static androidx.media3.common.Player.COMMAND_SEEK_TO_NEXT_MEDIA_ITEM;
import static androidx.media3.common.Player.COMMAND_SEEK_TO_PREVIOUS; import static androidx.media3.common.Player.COMMAND_SEEK_TO_PREVIOUS;
import static androidx.media3.common.Player.COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM; import static androidx.media3.common.Player.COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM;
import static androidx.media3.common.Player.COMMAND_SET_DEVICE_VOLUME; import static androidx.media3.common.Player.COMMAND_SET_DEVICE_VOLUME;
import static androidx.media3.common.Player.COMMAND_SET_MEDIA_ITEM;
import static androidx.media3.common.Player.COMMAND_SET_MEDIA_ITEMS_METADATA; import static androidx.media3.common.Player.COMMAND_SET_MEDIA_ITEMS_METADATA;
import static androidx.media3.common.Player.COMMAND_SET_REPEAT_MODE; import static androidx.media3.common.Player.COMMAND_SET_REPEAT_MODE;
import static androidx.media3.common.Player.COMMAND_SET_SHUFFLE_MODE; import static androidx.media3.common.Player.COMMAND_SET_SHUFFLE_MODE;
@ -817,12 +818,12 @@ import org.checkerframework.checker.nullness.qual.NonNull;
@Override @Override
public void setMediaItem(MediaItem mediaItem) { public void setMediaItem(MediaItem mediaItem) {
if (!isPlayerCommandAvailable(COMMAND_CHANGE_MEDIA_ITEMS)) { if (!isPlayerCommandAvailable(COMMAND_SET_MEDIA_ITEM)) {
return; return;
} }
dispatchRemoteSessionTaskWithPlayerCommand( dispatchRemoteSessionTaskWithPlayerCommand(
COMMAND_CHANGE_MEDIA_ITEMS, COMMAND_SET_MEDIA_ITEM,
(iSession, seq) -> iSession.setMediaItem(controllerStub, seq, mediaItem.toBundle())); (iSession, seq) -> iSession.setMediaItem(controllerStub, seq, mediaItem.toBundle()));
setMediaItemsInternal( setMediaItemsInternal(
@ -834,12 +835,12 @@ import org.checkerframework.checker.nullness.qual.NonNull;
@Override @Override
public void setMediaItem(MediaItem mediaItem, long startPositionMs) { public void setMediaItem(MediaItem mediaItem, long startPositionMs) {
if (!isPlayerCommandAvailable(COMMAND_CHANGE_MEDIA_ITEMS)) { if (!isPlayerCommandAvailable(COMMAND_SET_MEDIA_ITEM)) {
return; return;
} }
dispatchRemoteSessionTaskWithPlayerCommand( dispatchRemoteSessionTaskWithPlayerCommand(
COMMAND_CHANGE_MEDIA_ITEMS, COMMAND_SET_MEDIA_ITEM,
(iSession, seq) -> (iSession, seq) ->
iSession.setMediaItemWithStartPosition( iSession.setMediaItemWithStartPosition(
controllerStub, seq, mediaItem.toBundle(), startPositionMs)); controllerStub, seq, mediaItem.toBundle(), startPositionMs));
@ -853,12 +854,12 @@ import org.checkerframework.checker.nullness.qual.NonNull;
@Override @Override
public void setMediaItem(MediaItem mediaItem, boolean resetPosition) { public void setMediaItem(MediaItem mediaItem, boolean resetPosition) {
if (!isPlayerCommandAvailable(COMMAND_CHANGE_MEDIA_ITEMS)) { if (!isPlayerCommandAvailable(COMMAND_SET_MEDIA_ITEM)) {
return; return;
} }
dispatchRemoteSessionTaskWithPlayerCommand( dispatchRemoteSessionTaskWithPlayerCommand(
COMMAND_CHANGE_MEDIA_ITEMS, COMMAND_SET_MEDIA_ITEM,
(iSession, seq) -> (iSession, seq) ->
iSession.setMediaItemWithResetPosition( iSession.setMediaItemWithResetPosition(
controllerStub, seq, mediaItem.toBundle(), resetPosition)); controllerStub, seq, mediaItem.toBundle(), resetPosition));

View File

@ -889,32 +889,6 @@ public class MediaSession {
* @param controller The controller information. * @param controller The controller information.
* @param playerCommand A {@link Player.Command command}. * @param playerCommand A {@link Player.Command command}.
* @return {@link SessionResult#RESULT_SUCCESS} to proceed, or another code to ignore. * @return {@link SessionResult#RESULT_SUCCESS} to proceed, or another code to ignore.
* @see Player.Command#COMMAND_PLAY_PAUSE
* @see Player.Command#COMMAND_PREPARE
* @see Player.Command#COMMAND_STOP
* @see Player.Command#COMMAND_SEEK_TO_DEFAULT_POSITION
* @see Player.Command#COMMAND_SEEK_IN_CURRENT_MEDIA_ITEM
* @see Player.Command#COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM
* @see Player.Command#COMMAND_SEEK_TO_NEXT_MEDIA_ITEM
* @see Player.Command#COMMAND_SEEK_TO_MEDIA_ITEM
* @see Player.Command#COMMAND_SET_SPEED_AND_PITCH
* @see Player.Command#COMMAND_SET_SHUFFLE_MODE
* @see Player.Command#COMMAND_SET_REPEAT_MODE
* @see Player.Command#COMMAND_GET_CURRENT_MEDIA_ITEM
* @see Player.Command#COMMAND_GET_TIMELINE
* @see Player.Command#COMMAND_GET_MEDIA_ITEMS_METADATA
* @see Player.Command#COMMAND_SET_MEDIA_ITEMS_METADATA
* @see Player.Command#COMMAND_CHANGE_MEDIA_ITEMS
* @see Player.Command#COMMAND_GET_AUDIO_ATTRIBUTES
* @see Player.Command#COMMAND_GET_VOLUME
* @see Player.Command#COMMAND_GET_DEVICE_VOLUME
* @see Player.Command#COMMAND_SET_VOLUME
* @see Player.Command#COMMAND_SET_DEVICE_VOLUME
* @see Player.Command#COMMAND_ADJUST_DEVICE_VOLUME
* @see Player.Command#COMMAND_SET_VIDEO_SURFACE
* @see Player.Command#COMMAND_GET_TEXT
* @see Player.Command#COMMAND_SET_TRACK_SELECTION_PARAMETERS
* @see Player.Command#COMMAND_GET_TRACKS
*/ */
default @SessionResult.Code int onPlayerCommandRequest( default @SessionResult.Code int onPlayerCommandRequest(
MediaSession session, ControllerInfo controller, @Player.Command int playerCommand) { MediaSession session, ControllerInfo controller, @Player.Command int playerCommand) {

View File

@ -24,6 +24,7 @@ import static androidx.media3.common.Player.COMMAND_SEEK_IN_CURRENT_MEDIA_ITEM;
import static androidx.media3.common.Player.COMMAND_SEEK_TO_MEDIA_ITEM; import static androidx.media3.common.Player.COMMAND_SEEK_TO_MEDIA_ITEM;
import static androidx.media3.common.Player.COMMAND_SEEK_TO_NEXT; import static androidx.media3.common.Player.COMMAND_SEEK_TO_NEXT;
import static androidx.media3.common.Player.COMMAND_SEEK_TO_PREVIOUS; import static androidx.media3.common.Player.COMMAND_SEEK_TO_PREVIOUS;
import static androidx.media3.common.Player.COMMAND_SET_MEDIA_ITEM;
import static androidx.media3.common.Player.COMMAND_SET_REPEAT_MODE; import static androidx.media3.common.Player.COMMAND_SET_REPEAT_MODE;
import static androidx.media3.common.Player.COMMAND_SET_SHUFFLE_MODE; import static androidx.media3.common.Player.COMMAND_SET_SHUFFLE_MODE;
import static androidx.media3.common.Player.COMMAND_SET_SPEED_AND_PITCH; import static androidx.media3.common.Player.COMMAND_SET_SPEED_AND_PITCH;
@ -679,7 +680,7 @@ import org.checkerframework.checker.initialization.qual.Initialized;
private void handleMediaRequest(MediaItem mediaItem, boolean play) { private void handleMediaRequest(MediaItem mediaItem, boolean play) {
dispatchSessionTaskWithPlayerCommand( dispatchSessionTaskWithPlayerCommand(
COMMAND_CHANGE_MEDIA_ITEMS, COMMAND_SET_MEDIA_ITEM,
controller -> { controller -> {
ListenableFuture<List<MediaItem>> mediaItemsFuture = ListenableFuture<List<MediaItem>> mediaItemsFuture =
sessionImpl.onAddMediaItemsOnHandler(controller, ImmutableList.of(mediaItem)); sessionImpl.onAddMediaItemsOnHandler(controller, ImmutableList.of(mediaItem));

View File

@ -29,6 +29,7 @@ import static androidx.media3.common.Player.COMMAND_SEEK_TO_NEXT_MEDIA_ITEM;
import static androidx.media3.common.Player.COMMAND_SEEK_TO_PREVIOUS; import static androidx.media3.common.Player.COMMAND_SEEK_TO_PREVIOUS;
import static androidx.media3.common.Player.COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM; import static androidx.media3.common.Player.COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM;
import static androidx.media3.common.Player.COMMAND_SET_DEVICE_VOLUME; import static androidx.media3.common.Player.COMMAND_SET_DEVICE_VOLUME;
import static androidx.media3.common.Player.COMMAND_SET_MEDIA_ITEM;
import static androidx.media3.common.Player.COMMAND_SET_MEDIA_ITEMS_METADATA; import static androidx.media3.common.Player.COMMAND_SET_MEDIA_ITEMS_METADATA;
import static androidx.media3.common.Player.COMMAND_SET_REPEAT_MODE; import static androidx.media3.common.Player.COMMAND_SET_REPEAT_MODE;
import static androidx.media3.common.Player.COMMAND_SET_SHUFFLE_MODE; import static androidx.media3.common.Player.COMMAND_SET_SHUFFLE_MODE;
@ -846,7 +847,7 @@ import java.util.concurrent.ExecutionException;
dispatchSessionTaskWithPlayerCommand( dispatchSessionTaskWithPlayerCommand(
caller, caller,
seq, seq,
COMMAND_CHANGE_MEDIA_ITEMS, COMMAND_SET_MEDIA_ITEM,
(sessionImpl, controller) -> (sessionImpl, controller) ->
sessionImpl.onAddMediaItemsOnHandler(controller, ImmutableList.of(mediaItem)), sessionImpl.onAddMediaItemsOnHandler(controller, ImmutableList.of(mediaItem)),
(sessionImpl, controller, sequence, future) -> (sessionImpl, controller, sequence, future) ->
@ -873,7 +874,7 @@ import java.util.concurrent.ExecutionException;
dispatchSessionTaskWithPlayerCommand( dispatchSessionTaskWithPlayerCommand(
caller, caller,
seq, seq,
COMMAND_CHANGE_MEDIA_ITEMS, COMMAND_SET_MEDIA_ITEM,
(sessionImpl, controller) -> (sessionImpl, controller) ->
sessionImpl.onAddMediaItemsOnHandler(controller, ImmutableList.of(mediaItem)), sessionImpl.onAddMediaItemsOnHandler(controller, ImmutableList.of(mediaItem)),
(sessionImpl, controller, sequence, future) -> (sessionImpl, controller, sequence, future) ->
@ -905,7 +906,7 @@ import java.util.concurrent.ExecutionException;
dispatchSessionTaskWithPlayerCommand( dispatchSessionTaskWithPlayerCommand(
caller, caller,
seq, seq,
COMMAND_CHANGE_MEDIA_ITEMS, COMMAND_SET_MEDIA_ITEM,
(sessionImpl, controller) -> (sessionImpl, controller) ->
sessionImpl.onAddMediaItemsOnHandler(controller, ImmutableList.of(mediaItem)), sessionImpl.onAddMediaItemsOnHandler(controller, ImmutableList.of(mediaItem)),
(sessionImpl, controller, sequence, future) -> (sessionImpl, controller, sequence, future) ->

View File

@ -22,6 +22,7 @@ import static androidx.media3.common.Player.COMMAND_SEEK_IN_CURRENT_MEDIA_ITEM;
import static androidx.media3.common.Player.COMMAND_SEEK_TO_NEXT_MEDIA_ITEM; import static androidx.media3.common.Player.COMMAND_SEEK_TO_NEXT_MEDIA_ITEM;
import static androidx.media3.common.Player.COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM; import static androidx.media3.common.Player.COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM;
import static androidx.media3.common.Player.COMMAND_SET_DEVICE_VOLUME; import static androidx.media3.common.Player.COMMAND_SET_DEVICE_VOLUME;
import static androidx.media3.common.Player.COMMAND_SET_MEDIA_ITEM;
import static androidx.media3.common.Player.COMMAND_SET_MEDIA_ITEMS_METADATA; import static androidx.media3.common.Player.COMMAND_SET_MEDIA_ITEMS_METADATA;
import static androidx.media3.common.Player.COMMAND_SET_TRACK_SELECTION_PARAMETERS; import static androidx.media3.common.Player.COMMAND_SET_TRACK_SELECTION_PARAMETERS;
import static androidx.media3.session.MediaUtils.createPlayerCommandsWith; import static androidx.media3.session.MediaUtils.createPlayerCommandsWith;
@ -135,6 +136,12 @@ public class MediaSessionPermissionTest {
controller -> controller.setPlaylistMetadata(MediaMetadata.EMPTY)); controller -> controller.setPlaylistMetadata(MediaMetadata.EMPTY));
} }
@Test
public void setMediaItem() throws Exception {
testOnCommandRequest(
COMMAND_SET_MEDIA_ITEM, controller -> controller.setMediaItem(MediaItem.EMPTY));
}
@Test @Test
public void setMediaItems() throws Exception { public void setMediaItems() throws Exception {
testOnCommandRequest( testOnCommandRequest(