Skip to content

Commit

Permalink
Don't set the tag in CastTimeline
Browse files Browse the repository at this point in the history
Leaving the media item that has been passed in unchanged, ensures that the
media item in the timeline is equal to the media item that the user has
passed into the player. The value of the tag is the uid of the window,
meaning this is redundant information.

#minor-release

PiperOrigin-RevId: 460542246
(cherry picked from commit 9d87c0d)
  • Loading branch information
marcbaechinger authored and rohitjoins committed Jul 12, 2022
1 parent 344ac7b commit 268de23
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 42 deletions.
Expand Up @@ -132,7 +132,7 @@ public CastTimeline(int[] itemIds, SparseArray<ItemData> itemIdToData) {
int id = ids[i];
idsToIndex.put(id, i);
ItemData data = itemIdToData.get(id, ItemData.EMPTY);
mediaItems[i] = data.mediaItem.buildUpon().setTag(id).build();
mediaItems[i] = data.mediaItem;
durationsUs[i] = data.durationUs;
defaultPositionsUs[i] = data.defaultPositionUs == C.TIME_UNSET ? 0 : data.defaultPositionUs;
isLive[i] = data.isLive;
Expand Down
Expand Up @@ -100,6 +100,7 @@
public class CastPlayerTest {

private CastPlayer castPlayer;
private DefaultMediaItemConverter mediaItemConverter;
private RemoteMediaClient.Callback remoteMediaClientCallback;

@Mock private RemoteMediaClient mockRemoteMediaClient;
Expand Down Expand Up @@ -134,7 +135,8 @@ public void setUp() {
when(mockRemoteMediaClient.isPaused()).thenReturn(true);
when(mockMediaStatus.getQueueRepeatMode()).thenReturn(MediaStatus.REPEAT_MODE_REPEAT_OFF);
when(mockMediaStatus.getPlaybackRate()).thenReturn(1.0d);
castPlayer = new CastPlayer(mockCastContext);
mediaItemConverter = new DefaultMediaItemConverter();
castPlayer = new CastPlayer(mockCastContext, mediaItemConverter);
castPlayer.addListener(mockListener);
verify(mockRemoteMediaClient).registerCallback(callbackArgumentCaptor.capture());
remoteMediaClientCallback = callbackArgumentCaptor.getValue();
Expand Down Expand Up @@ -427,22 +429,13 @@ public void setMediaItems_replaceExistingPlaylist_notifiesMediaItemTransition()
String uri1 = "http://www.google.com/video1";
String uri2 = "http://www.google.com/video2";
firstPlaylist.add(
new MediaItem.Builder()
.setUri(uri1)
.setMimeType(MimeTypes.APPLICATION_MPD)
.setTag(1)
.build());
new MediaItem.Builder().setUri(uri1).setMimeType(MimeTypes.APPLICATION_MPD).build());
firstPlaylist.add(
new MediaItem.Builder()
.setUri(uri2)
.setMimeType(MimeTypes.APPLICATION_MP4)
.setTag(2)
.build());
new MediaItem.Builder().setUri(uri2).setMimeType(MimeTypes.APPLICATION_MP4).build());
ImmutableList<MediaItem> secondPlaylist =
ImmutableList.of(
new MediaItem.Builder()
.setUri(Uri.EMPTY)
.setTag(3)
.setMimeType(MimeTypes.APPLICATION_MPD)
.build());

Expand Down Expand Up @@ -472,23 +465,14 @@ public void setMediaItems_replaceExistingPlaylist_notifiesPositionDiscontinuity(
String uri1 = "http://www.google.com/video1";
String uri2 = "http://www.google.com/video2";
firstPlaylist.add(
new MediaItem.Builder()
.setUri(uri1)
.setMimeType(MimeTypes.APPLICATION_MPD)
.setTag(1)
.build());
new MediaItem.Builder().setUri(uri1).setMimeType(MimeTypes.APPLICATION_MPD).build());
firstPlaylist.add(
new MediaItem.Builder()
.setUri(uri2)
.setMimeType(MimeTypes.APPLICATION_MP4)
.setTag(2)
.build());
new MediaItem.Builder().setUri(uri2).setMimeType(MimeTypes.APPLICATION_MP4).build());
ImmutableList<MediaItem> secondPlaylist =
ImmutableList.of(
new MediaItem.Builder()
.setUri(Uri.EMPTY)
.setMimeType(MimeTypes.APPLICATION_MPD)
.setTag(3)
.build());

castPlayer.setMediaItems(firstPlaylist, /* startIndex= */ 1, /* startPositionMs= */ 2000L);
Expand Down Expand Up @@ -556,34 +540,37 @@ public void addMediaItems_callsRemoteMediaClient() {
verify(mockRemoteMediaClient)
.queueInsertItems(
queueItemsArgumentCaptor.capture(), eq(MediaQueueItem.INVALID_ITEM_ID), any());

MediaQueueItem[] mediaQueueItems = queueItemsArgumentCaptor.getValue();
assertThat(mediaQueueItems[0].getMedia().getContentId()).isEqualTo(uri1);
assertThat(mediaQueueItems[1].getMedia().getContentId()).isEqualTo(uri2);
}

@SuppressWarnings("ConstantConditions")
@Test
public void addMediaItems_insertAtIndex_callsRemoteMediaClient() {
int[] mediaQueueItemIds = createMediaQueueItemIds(/* numberOfIds= */ 2);
List<MediaItem> mediaItems = createMediaItems(mediaQueueItemIds);
// Add two items.
addMediaItemsAndUpdateTimeline(mediaItems, mediaQueueItemIds);
String uri = "http://www.google.com/video3";
MediaItem anotherMediaItem =
new MediaItem.Builder().setUri(uri).setMimeType(MimeTypes.APPLICATION_MPD).build();

// Add another on position 1
int index = 1;
castPlayer.addMediaItems(index, Collections.singletonList(anotherMediaItem));
List<MediaItem> newPlaylist = Collections.singletonList(anotherMediaItem);

verify(mockRemoteMediaClient)
.queueInsertItems(
queueItemsArgumentCaptor.capture(),
eq((int) mediaItems.get(index).localConfiguration.tag),
any());
// Add another on position 1
castPlayer.addMediaItems(index, newPlaylist);
updateTimeLine(newPlaylist, /* mediaQueueItemIds= */ new int[] {123}, /* currentItemId= */ 1);

MediaQueueItem[] mediaQueueItems = queueItemsArgumentCaptor.getValue();
assertThat(mediaQueueItems[0].getMedia().getContentId()).isEqualTo(uri);
verify(mockRemoteMediaClient, times(2))
.queueInsertItems(queueItemsArgumentCaptor.capture(), anyInt(), any());
assertThat(queueItemsArgumentCaptor.getAllValues().get(1)[0])
.isEqualTo(mediaItemConverter.toMediaQueueItem(anotherMediaItem));
Timeline.Window currentWindow =
castPlayer
.getCurrentTimeline()
.getWindow(castPlayer.getCurrentMediaItemIndex(), new Timeline.Window());
assertThat(currentWindow.uid).isEqualTo(123);
assertThat(currentWindow.mediaItem).isEqualTo(anotherMediaItem);
}

@Test
Expand Down Expand Up @@ -722,8 +709,8 @@ public void addMediaItems_fillsTimeline() {

Timeline currentTimeline = castPlayer.getCurrentTimeline();
for (int i = 0; i < mediaItems.size(); i++) {
assertThat(currentTimeline.getWindow(/* windowIndex= */ i, window).uid)
.isEqualTo(mediaItems.get(i).localConfiguration.tag);
assertThat(currentTimeline.getWindow(/* windowIndex= */ i, window).mediaItem)
.isEqualTo(mediaItems.get(i));
}
}

Expand Down Expand Up @@ -1791,21 +1778,18 @@ public void setMediaItems_doesNotifyOnMetadataChanged() {
.setUri(uri1)
.setMimeType(MimeTypes.APPLICATION_MPD)
.setMediaMetadata(new MediaMetadata.Builder().setArtist("foo").build())
.setTag(1)
.build());
ImmutableList<MediaItem> secondPlaylist =
ImmutableList.of(
new MediaItem.Builder()
.setUri(Uri.EMPTY)
.setTag(2)
.setMediaMetadata(new MediaMetadata.Builder().setArtist("bar").build())
.setMimeType(MimeTypes.APPLICATION_MPD)
.build(),
new MediaItem.Builder()
.setUri(uri2)
.setMimeType(MimeTypes.APPLICATION_MP4)
.setMediaMetadata(new MediaMetadata.Builder().setArtist("foobar").build())
.setTag(3)
.build());
castPlayer.addListener(mockListener);

Expand Down Expand Up @@ -1902,7 +1886,6 @@ private MediaItem createMediaItem(int mediaQueueItemId) {
.setMediaMetadata(
new MediaMetadata.Builder().setArtist("Foo Bar - " + mediaQueueItemId).build())
.setMimeType(MimeTypes.APPLICATION_MPD)
.setTag(mediaQueueItemId)
.build();
}

Expand Down

0 comments on commit 268de23

Please sign in to comment.