From 7fbdbeb6cafe075f04b6a4321ef826643b3482e1 Mon Sep 17 00:00:00 2001 From: michaelkatz Date: Tue, 24 Jan 2023 15:45:44 +0000 Subject: [PATCH] Deduplicate onSetMediaItem handler logic Created unified MediaUtils method to handle various logic for calling Player.setMediaItems from MediaSessionStub and MediaSessionLegacyStub PiperOrigin-RevId: 504271877 --- .../androidx/media3/session/MediaSession.java | 38 ++++------- .../session/MediaSessionLegacyStub.java | 10 +-- .../media3/session/MediaSessionStub.java | 67 ++----------------- .../androidx/media3/session/MediaUtils.java | 40 +++++------ 4 files changed, 39 insertions(+), 116 deletions(-) diff --git a/libraries/session/src/main/java/androidx/media3/session/MediaSession.java b/libraries/session/src/main/java/androidx/media3/session/MediaSession.java index 888cb26242..647cb6ef8a 100644 --- a/libraries/session/src/main/java/androidx/media3/session/MediaSession.java +++ b/libraries/session/src/main/java/androidx/media3/session/MediaSession.java @@ -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}. * *

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. * - *

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}. + *

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. * - *

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}. + *

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; diff --git a/libraries/session/src/main/java/androidx/media3/session/MediaSessionLegacyStub.java b/libraries/session/src/main/java/androidx/media3/session/MediaSessionLegacyStub.java index 0c467ac81e..1e9caba13b 100644 --- a/libraries/session/src/main/java/androidx/media3/session/MediaSessionLegacyStub.java +++ b/libraries/session/src/main/java/androidx/media3/session/MediaSessionLegacyStub.java @@ -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(); diff --git a/libraries/session/src/main/java/androidx/media3/session/MediaSessionStub.java b/libraries/session/src/main/java/androidx/media3/session/MediaSessionStub.java index ffd6e78621..3c0b27a775 100644 --- a/libraries/session/src/main/java/androidx/media3/session/MediaSessionStub.java +++ b/libraries/session/src/main/java/androidx/media3/session/MediaSessionStub.java @@ -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 { diff --git a/libraries/session/src/main/java/androidx/media3/session/MediaUtils.java b/libraries/session/src/main/java/androidx/media3/session/MediaUtils.java index 6f3233b520..fc983aa537 100644 --- a/libraries/session/src/main/java/androidx/media3/session/MediaUtils.java +++ b/libraries/session/src/main/java/androidx/media3/session/MediaUtils.java @@ -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); + } } }