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