Skip to content

Commit

Permalink
Deduplicate onSetMediaItem handler logic
Browse files Browse the repository at this point in the history
Created unified MediaUtils method to handle various logic for calling Player.setMediaItems from MediaSessionStub and MediaSessionLegacyStub

PiperOrigin-RevId: 504271877
  • Loading branch information
microkatz authored and christosts committed Jan 25, 2023
1 parent 030edb0 commit 7fbdbeb
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 116 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1130,9 +1130,7 @@ default ListenableFuture<List<MediaItem>> onAddMediaItems(
* 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
Expand All @@ -1157,14 +1155,12 @@ default ListenableFuture<List<MediaItem>> onAddMediaItems(
* @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
Expand Down Expand Up @@ -1197,25 +1193,17 @@ public static final class MediaItemsWithStartPosition {
/**
* 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;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -724,14 +724,8 @@ public void onSuccess(MediaItemsWithStartPosition mediaItemsWithStartPosition) {
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();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,7 @@ SessionTask<ListenableFuture<SessionResult>, K> handleMediaItemsWithStartPositio
() -> {
if (!sessionImpl.isReleased()) {
mediaItemPlayerTask.run(
sessionImpl.getPlayerWrapper(), controller, mediaItemsWithStartPosition);
sessionImpl.getPlayerWrapper(), mediaItemsWithStartPosition);
}
},
new SessionResult(SessionResult.RESULT_SUCCESS)));
Expand Down Expand Up @@ -909,28 +909,7 @@ public void setMediaItemWithStartPosition(
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
Expand Down Expand Up @@ -965,16 +944,7 @@ public void setMediaItemWithResetPosition(
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
Expand Down Expand Up @@ -1020,18 +990,7 @@ public void setMediaItemsWithResetPosition(
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
Expand Down Expand Up @@ -1069,18 +1028,7 @@ public void setMediaItemsWithStartIndex(
(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
Expand Down Expand Up @@ -1688,10 +1636,7 @@ private interface ControllerPlayerTask {
}

private interface MediaItemsWithStartPositionPlayerTask {
void run(
PlayerWrapper player,
ControllerInfo controller,
MediaItemsWithStartPosition mediaItemsWithStartPosition);
void run(PlayerWrapper player, MediaItemsWithStartPosition mediaItemsWithStartPosition);
}

/* package */ static final class Controller2Cb implements ControllerCb {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1368,30 +1368,26 @@ public static int calculateBufferedPercentage(long bufferedPositionMs, long dura
: 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);
} 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);
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();
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);
}
}
}

Expand Down

0 comments on commit 7fbdbeb

Please sign in to comment.