Commit 7fbdbeb6 by michaelkatz Committed by christosts

Deduplicate onSetMediaItem handler logic

Created unified MediaUtils method to handle various logic for calling Player.setMediaItems from MediaSessionStub and MediaSessionLegacyStub

PiperOrigin-RevId: 504271877
parent 030edb0e
...@@ -1130,9 +1130,7 @@ public class MediaSession { ...@@ -1130,9 +1130,7 @@ public class MediaSession {
* MediaItemsWithStartPosition} has been resolved, the session will call {@link * MediaItemsWithStartPosition} has been resolved, the session will call {@link
* Player#setMediaItems} as requested. If the resolved {@link * Player#setMediaItems} as requested. If the resolved {@link
* MediaItemsWithStartPosition#startIndex startIndex} is {@link * MediaItemsWithStartPosition#startIndex startIndex} is {@link
* androidx.media3.common.C#INDEX_UNSET C.INDEX_UNSET} and {@link * androidx.media3.common.C#INDEX_UNSET C.INDEX_UNSET} then the session will call {@link
* MediaItemsWithStartPosition#startPositionMs startPositionMs} is {@link
* androidx.media3.common.C#TIME_UNSET C.TIME_UNSET} then the session will call {@link
* Player#setMediaItem(MediaItem, boolean)} with {@code resetPosition} set to {@code true}. * Player#setMediaItem(MediaItem, boolean)} with {@code resetPosition} set to {@code true}.
* *
* <p>Interoperability: This method will be called in response to the following {@link * <p>Interoperability: This method will be called in response to the following {@link
...@@ -1157,14 +1155,12 @@ public class MediaSession { ...@@ -1157,14 +1155,12 @@ public class MediaSession {
* @param mediaSession The session for this event. * @param mediaSession The session for this event.
* @param controller The controller information. * @param controller The controller information.
* @param mediaItems The list of requested {@linkplain MediaItem media items}. * @param mediaItems The list of requested {@linkplain MediaItem media items}.
* @param startIndex The start index in the {@link MediaItem} list from which to start playing. * @param startIndex The start index in the {@link MediaItem} list from which to start playing,
* If startIndex is {@link androidx.media3.common.C#INDEX_UNSET C.INDEX_UNSET} and * or {@link androidx.media3.common.C#INDEX_UNSET C.INDEX_UNSET} to start playing from the
* startPositionMs is {@link androidx.media3.common.C#TIME_UNSET C.TIME_UNSET} then caller * default index in the playlist.
* is requesting to set media items with default index and position. * @param startPositionMs The starting position in the media item from where to start playing,
* @param startPositionMs The starting position in the media item from where to start playing. * or {@link androidx.media3.common.C#TIME_UNSET C.TIME_UNSET} to start playing from the
* If startIndex is {@link androidx.media3.common.C#INDEX_UNSET C.INDEX_UNSET} and * default position in the media item. This value is ignored if startIndex is C.INDEX_UNSET
* startPositionMs is {@link androidx.media3.common.C#TIME_UNSET C.TIME_UNSET} then caller
* is requesting to set media items with default index and position.
* @return A {@link ListenableFuture} with a {@link MediaItemsWithStartPosition} containing a * @return A {@link ListenableFuture} with a {@link MediaItemsWithStartPosition} containing a
* list of resolved {@linkplain MediaItem media items}, and a starting index and position * list of resolved {@linkplain MediaItem media items}, and a starting index and position
* that are playable by the underlying {@link Player}. If returned {@link * that are playable by the underlying {@link Player}. If returned {@link
...@@ -1197,25 +1193,17 @@ public class MediaSession { ...@@ -1197,25 +1193,17 @@ public class MediaSession {
/** /**
* Index to start playing at in {@link MediaItem} list. * Index to start playing at in {@link MediaItem} list.
* *
* <p>If startIndex is {@link androidx.media3.common.C#INDEX_UNSET C.INDEX_UNSET} and * <p>The start index in the {@link MediaItem} list from which to start playing, or {@link
* startPositionMs is {@link androidx.media3.common.C#TIME_UNSET C.TIME_UNSET} then the * androidx.media3.common.C#INDEX_UNSET C.INDEX_UNSET} to start playing from the default index
* requested start is the default index and position. If only startIndex is {@link * in the playlist.
* androidx.media3.common.C#INDEX_UNSET C.INDEX_UNSET}, then the requested start is the
* {@linkplain Player#getCurrentMediaItemIndex() current index} and {@linkplain
* Player#getContentPosition() position}.
*/ */
public final int startIndex; public final int startIndex;
/** /**
* Position to start playing from in starting media item. * Position to start playing from in starting media item.
* *
* <p>If startIndex is {@link androidx.media3.common.C#INDEX_UNSET C.INDEX_UNSET} and * <p>The starting position in the media item from where to start playing, or {@link
* startPositionMs is {@link androidx.media3.common.C#TIME_UNSET C.TIME_UNSET} then the * androidx.media3.common.C#TIME_UNSET C.TIME_UNSET} to start playing from the default position
* requested start is the default start index that takes into account whether {@link * in the media item. This value is ignored if startIndex is C.INDEX_UNSET
* Player#getShuffleModeEnabled() shuffling is enabled} and the {@linkplain
* Timeline.Window#defaultPositionUs} default position}. If only startIndex is {@link
* androidx.media3.common.C#INDEX_UNSET C.INDEX_UNSET}, then the requested start is the
* {@linkplain Player#getCurrentMediaItemIndex() current index} and {@linkplain
* Player#getContentPosition() position}.
*/ */
public final long startPositionMs; public final long startPositionMs;
......
...@@ -724,14 +724,8 @@ import org.checkerframework.checker.nullness.compatqual.NullableType; ...@@ -724,14 +724,8 @@ import org.checkerframework.checker.nullness.compatqual.NullableType;
sessionImpl.getApplicationHandler(), sessionImpl.getApplicationHandler(),
() -> { () -> {
PlayerWrapper player = sessionImpl.getPlayerWrapper(); PlayerWrapper player = sessionImpl.getPlayerWrapper();
if (mediaItemsWithStartPosition.startIndex == C.INDEX_UNSET MediaUtils.setMediaItemsWithStartIndexAndPosition(
&& mediaItemsWithStartPosition.startPositionMs == C.TIME_UNSET) { player, mediaItemsWithStartPosition);
MediaUtils.setMediaItemsWithDefaultStartIndexAndPosition(
player, mediaItemsWithStartPosition);
} else {
MediaUtils.setMediaItemsWithSpecifiedStartIndexAndPosition(
player, mediaItemsWithStartPosition);
}
@Player.State int playbackState = player.getPlaybackState(); @Player.State int playbackState = player.getPlaybackState();
if (playbackState == Player.STATE_IDLE) { if (playbackState == Player.STATE_IDLE) {
player.prepareIfCommandAvailable(); player.prepareIfCommandAvailable();
......
...@@ -221,7 +221,7 @@ import java.util.concurrent.ExecutionException; ...@@ -221,7 +221,7 @@ import java.util.concurrent.ExecutionException;
() -> { () -> {
if (!sessionImpl.isReleased()) { if (!sessionImpl.isReleased()) {
mediaItemPlayerTask.run( mediaItemPlayerTask.run(
sessionImpl.getPlayerWrapper(), controller, mediaItemsWithStartPosition); sessionImpl.getPlayerWrapper(), mediaItemsWithStartPosition);
} }
}, },
new SessionResult(SessionResult.RESULT_SUCCESS))); new SessionResult(SessionResult.RESULT_SUCCESS)));
...@@ -909,28 +909,7 @@ import java.util.concurrent.ExecutionException; ...@@ -909,28 +909,7 @@ import java.util.concurrent.ExecutionException;
ImmutableList.of(mediaItem), ImmutableList.of(mediaItem),
/* startIndex= */ 0, /* startIndex= */ 0,
startPositionMs), startPositionMs),
(player, controller, mediaItemsWithStartPosition) -> { MediaUtils::setMediaItemsWithStartIndexAndPosition)));
if (player.isCommandAvailable(COMMAND_CHANGE_MEDIA_ITEMS)) {
if (mediaItemsWithStartPosition.startIndex == C.INDEX_UNSET
&& mediaItemsWithStartPosition.startPositionMs == C.TIME_UNSET) {
player.setMediaItems(
mediaItemsWithStartPosition.mediaItems, /* resetPosition= */ true);
} else {
player.setMediaItems(
mediaItemsWithStartPosition.mediaItems,
mediaItemsWithStartPosition.startIndex,
mediaItemsWithStartPosition.startPositionMs);
}
} else {
if (!mediaItemsWithStartPosition.mediaItems.isEmpty()) {
player.setMediaItem(
mediaItemsWithStartPosition.mediaItems.get(0),
mediaItemsWithStartPosition.startPositionMs);
} else {
player.clearMediaItems();
}
}
})));
} }
@Override @Override
...@@ -965,16 +944,7 @@ import java.util.concurrent.ExecutionException; ...@@ -965,16 +944,7 @@ import java.util.concurrent.ExecutionException;
resetPosition resetPosition
? C.TIME_UNSET ? C.TIME_UNSET
: sessionImpl.getPlayerWrapper().getCurrentPosition()), : sessionImpl.getPlayerWrapper().getCurrentPosition()),
(player, controller, mediaItemsWithStartPosition) -> { MediaUtils::setMediaItemsWithStartIndexAndPosition)));
if (mediaItemsWithStartPosition.startIndex == C.INDEX_UNSET
&& mediaItemsWithStartPosition.startPositionMs == C.TIME_UNSET) {
MediaUtils.setMediaItemsWithDefaultStartIndexAndPosition(
player, mediaItemsWithStartPosition);
} else {
MediaUtils.setMediaItemsWithSpecifiedStartIndexAndPosition(
player, mediaItemsWithStartPosition);
}
})));
} }
@Override @Override
...@@ -1020,18 +990,7 @@ import java.util.concurrent.ExecutionException; ...@@ -1020,18 +990,7 @@ import java.util.concurrent.ExecutionException;
resetPosition resetPosition
? C.TIME_UNSET ? C.TIME_UNSET
: sessionImpl.getPlayerWrapper().getCurrentPosition()), : sessionImpl.getPlayerWrapper().getCurrentPosition()),
(player, controller, mediaItemsWithStartPosition) -> { MediaUtils::setMediaItemsWithStartIndexAndPosition)));
if (mediaItemsWithStartPosition.startIndex == C.INDEX_UNSET
&& mediaItemsWithStartPosition.startPositionMs == C.TIME_UNSET) {
player.setMediaItems(
mediaItemsWithStartPosition.mediaItems, /* resetPosition= */ true);
} else {
player.setMediaItems(
mediaItemsWithStartPosition.mediaItems,
mediaItemsWithStartPosition.startIndex,
mediaItemsWithStartPosition.startPositionMs);
}
})));
} }
@Override @Override
...@@ -1069,18 +1028,7 @@ import java.util.concurrent.ExecutionException; ...@@ -1069,18 +1028,7 @@ import java.util.concurrent.ExecutionException;
(startIndex == C.INDEX_UNSET) (startIndex == C.INDEX_UNSET)
? sessionImpl.getPlayerWrapper().getCurrentPosition() ? sessionImpl.getPlayerWrapper().getCurrentPosition()
: startPositionMs), : startPositionMs),
(player, controller, mediaItemsWithStartPosition) -> { MediaUtils::setMediaItemsWithStartIndexAndPosition)));
if (mediaItemsWithStartPosition.startIndex == C.INDEX_UNSET
&& mediaItemsWithStartPosition.startPositionMs == C.TIME_UNSET) {
player.setMediaItems(
mediaItemsWithStartPosition.mediaItems, /* resetPosition= */ true);
} else {
player.setMediaItems(
mediaItemsWithStartPosition.mediaItems,
mediaItemsWithStartPosition.startIndex,
mediaItemsWithStartPosition.startPositionMs);
}
})));
} }
@Override @Override
...@@ -1688,10 +1636,7 @@ import java.util.concurrent.ExecutionException; ...@@ -1688,10 +1636,7 @@ import java.util.concurrent.ExecutionException;
} }
private interface MediaItemsWithStartPositionPlayerTask { private interface MediaItemsWithStartPositionPlayerTask {
void run( void run(PlayerWrapper player, MediaItemsWithStartPosition mediaItemsWithStartPosition);
PlayerWrapper player,
ControllerInfo controller,
MediaItemsWithStartPosition mediaItemsWithStartPosition);
} }
/* package */ static final class Controller2Cb implements ControllerCb { /* package */ static final class Controller2Cb implements ControllerCb {
......
...@@ -1368,30 +1368,26 @@ import org.checkerframework.checker.nullness.compatqual.NullableType; ...@@ -1368,30 +1368,26 @@ import org.checkerframework.checker.nullness.compatqual.NullableType;
: Util.constrainValue((int) ((bufferedPositionMs * 100) / durationMs), 0, 100); : Util.constrainValue((int) ((bufferedPositionMs * 100) / durationMs), 0, 100);
} }
public static void setMediaItemsWithDefaultStartIndexAndPosition( public static void setMediaItemsWithStartIndexAndPosition(
PlayerWrapper player, MediaSession.MediaItemsWithStartPosition mediaItemsWithStartPosition) { PlayerWrapper player, MediaSession.MediaItemsWithStartPosition mediaItemsWithStartPosition) {
if (player.isCommandAvailable(COMMAND_CHANGE_MEDIA_ITEMS)) { if (mediaItemsWithStartPosition.startIndex == C.INDEX_UNSET) {
player.setMediaItems(mediaItemsWithStartPosition.mediaItems, /* resetPosition= */ true); if (player.isCommandAvailable(COMMAND_CHANGE_MEDIA_ITEMS)) {
} else if (!mediaItemsWithStartPosition.mediaItems.isEmpty()) { player.setMediaItems(mediaItemsWithStartPosition.mediaItems, /* resetPosition= */ true);
player.setMediaItem(mediaItemsWithStartPosition.mediaItems.get(0), /* resetPosition= */ true); } else if (!mediaItemsWithStartPosition.mediaItems.isEmpty()) {
} else { player.setMediaItem(
player.clearMediaItems(); mediaItemsWithStartPosition.mediaItems.get(0), /* resetPosition= */ true);
} }
}
public static void setMediaItemsWithSpecifiedStartIndexAndPosition(
PlayerWrapper player, MediaSession.MediaItemsWithStartPosition mediaItemsWithStartPosition) {
if (player.isCommandAvailable(COMMAND_CHANGE_MEDIA_ITEMS)) {
player.setMediaItems(
mediaItemsWithStartPosition.mediaItems,
mediaItemsWithStartPosition.startIndex,
mediaItemsWithStartPosition.startPositionMs);
} else if (!mediaItemsWithStartPosition.mediaItems.isEmpty()) {
player.setMediaItem(
mediaItemsWithStartPosition.mediaItems.get(0),
mediaItemsWithStartPosition.startPositionMs);
} else { } else {
player.clearMediaItems(); if (player.isCommandAvailable(COMMAND_CHANGE_MEDIA_ITEMS)) {
player.setMediaItems(
mediaItemsWithStartPosition.mediaItems,
mediaItemsWithStartPosition.startIndex,
mediaItemsWithStartPosition.startPositionMs);
} else if (!mediaItemsWithStartPosition.mediaItems.isEmpty()) {
player.setMediaItem(
mediaItemsWithStartPosition.mediaItems.get(0),
mediaItemsWithStartPosition.startPositionMs);
}
} }
} }
......
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