Skip to content

Commit b61a06b

Browse files
marcbaechingerrohitjoins
authored andcommitted
Don't set the tag in CastTimeline
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
1 parent 9d9bbe3 commit b61a06b

File tree

2 files changed

+25
-42
lines changed

2 files changed

+25
-42
lines changed

libraries/cast/src/main/java/androidx/media3/cast/CastTimeline.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ public CastTimeline(int[] itemIds, SparseArray<ItemData> itemIdToData) {
132132
int id = ids[i];
133133
idsToIndex.put(id, i);
134134
ItemData data = itemIdToData.get(id, ItemData.EMPTY);
135-
mediaItems[i] = data.mediaItem.buildUpon().setTag(id).build();
135+
mediaItems[i] = data.mediaItem;
136136
durationsUs[i] = data.durationUs;
137137
defaultPositionsUs[i] = data.defaultPositionUs == C.TIME_UNSET ? 0 : data.defaultPositionUs;
138138
isLive[i] = data.isLive;

libraries/cast/src/test/java/androidx/media3/cast/CastPlayerTest.java

Lines changed: 24 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@
100100
public class CastPlayerTest {
101101

102102
private CastPlayer castPlayer;
103+
private DefaultMediaItemConverter mediaItemConverter;
103104
private RemoteMediaClient.Callback remoteMediaClientCallback;
104105

105106
@Mock private RemoteMediaClient mockRemoteMediaClient;
@@ -134,7 +135,8 @@ public void setUp() {
134135
when(mockRemoteMediaClient.isPaused()).thenReturn(true);
135136
when(mockMediaStatus.getQueueRepeatMode()).thenReturn(MediaStatus.REPEAT_MODE_REPEAT_OFF);
136137
when(mockMediaStatus.getPlaybackRate()).thenReturn(1.0d);
137-
castPlayer = new CastPlayer(mockCastContext);
138+
mediaItemConverter = new DefaultMediaItemConverter();
139+
castPlayer = new CastPlayer(mockCastContext, mediaItemConverter);
138140
castPlayer.addListener(mockListener);
139141
verify(mockRemoteMediaClient).registerCallback(callbackArgumentCaptor.capture());
140142
remoteMediaClientCallback = callbackArgumentCaptor.getValue();
@@ -427,22 +429,13 @@ public void setMediaItems_replaceExistingPlaylist_notifiesMediaItemTransition()
427429
String uri1 = "http://www.google.com/video1";
428430
String uri2 = "http://www.google.com/video2";
429431
firstPlaylist.add(
430-
new MediaItem.Builder()
431-
.setUri(uri1)
432-
.setMimeType(MimeTypes.APPLICATION_MPD)
433-
.setTag(1)
434-
.build());
432+
new MediaItem.Builder().setUri(uri1).setMimeType(MimeTypes.APPLICATION_MPD).build());
435433
firstPlaylist.add(
436-
new MediaItem.Builder()
437-
.setUri(uri2)
438-
.setMimeType(MimeTypes.APPLICATION_MP4)
439-
.setTag(2)
440-
.build());
434+
new MediaItem.Builder().setUri(uri2).setMimeType(MimeTypes.APPLICATION_MP4).build());
441435
ImmutableList<MediaItem> secondPlaylist =
442436
ImmutableList.of(
443437
new MediaItem.Builder()
444438
.setUri(Uri.EMPTY)
445-
.setTag(3)
446439
.setMimeType(MimeTypes.APPLICATION_MPD)
447440
.build());
448441

@@ -472,23 +465,14 @@ public void setMediaItems_replaceExistingPlaylist_notifiesPositionDiscontinuity(
472465
String uri1 = "http://www.google.com/video1";
473466
String uri2 = "http://www.google.com/video2";
474467
firstPlaylist.add(
475-
new MediaItem.Builder()
476-
.setUri(uri1)
477-
.setMimeType(MimeTypes.APPLICATION_MPD)
478-
.setTag(1)
479-
.build());
468+
new MediaItem.Builder().setUri(uri1).setMimeType(MimeTypes.APPLICATION_MPD).build());
480469
firstPlaylist.add(
481-
new MediaItem.Builder()
482-
.setUri(uri2)
483-
.setMimeType(MimeTypes.APPLICATION_MP4)
484-
.setTag(2)
485-
.build());
470+
new MediaItem.Builder().setUri(uri2).setMimeType(MimeTypes.APPLICATION_MP4).build());
486471
ImmutableList<MediaItem> secondPlaylist =
487472
ImmutableList.of(
488473
new MediaItem.Builder()
489474
.setUri(Uri.EMPTY)
490475
.setMimeType(MimeTypes.APPLICATION_MPD)
491-
.setTag(3)
492476
.build());
493477

494478
castPlayer.setMediaItems(firstPlaylist, /* startIndex= */ 1, /* startPositionMs= */ 2000L);
@@ -556,34 +540,37 @@ public void addMediaItems_callsRemoteMediaClient() {
556540
verify(mockRemoteMediaClient)
557541
.queueInsertItems(
558542
queueItemsArgumentCaptor.capture(), eq(MediaQueueItem.INVALID_ITEM_ID), any());
559-
560543
MediaQueueItem[] mediaQueueItems = queueItemsArgumentCaptor.getValue();
561544
assertThat(mediaQueueItems[0].getMedia().getContentId()).isEqualTo(uri1);
562545
assertThat(mediaQueueItems[1].getMedia().getContentId()).isEqualTo(uri2);
563546
}
564547

565-
@SuppressWarnings("ConstantConditions")
566548
@Test
567549
public void addMediaItems_insertAtIndex_callsRemoteMediaClient() {
568550
int[] mediaQueueItemIds = createMediaQueueItemIds(/* numberOfIds= */ 2);
569551
List<MediaItem> mediaItems = createMediaItems(mediaQueueItemIds);
552+
// Add two items.
570553
addMediaItemsAndUpdateTimeline(mediaItems, mediaQueueItemIds);
571554
String uri = "http://www.google.com/video3";
572555
MediaItem anotherMediaItem =
573556
new MediaItem.Builder().setUri(uri).setMimeType(MimeTypes.APPLICATION_MPD).build();
574-
575-
// Add another on position 1
576557
int index = 1;
577-
castPlayer.addMediaItems(index, Collections.singletonList(anotherMediaItem));
558+
List<MediaItem> newPlaylist = Collections.singletonList(anotherMediaItem);
578559

579-
verify(mockRemoteMediaClient)
580-
.queueInsertItems(
581-
queueItemsArgumentCaptor.capture(),
582-
eq((int) mediaItems.get(index).localConfiguration.tag),
583-
any());
560+
// Add another on position 1
561+
castPlayer.addMediaItems(index, newPlaylist);
562+
updateTimeLine(newPlaylist, /* mediaQueueItemIds= */ new int[] {123}, /* currentItemId= */ 1);
584563

585-
MediaQueueItem[] mediaQueueItems = queueItemsArgumentCaptor.getValue();
586-
assertThat(mediaQueueItems[0].getMedia().getContentId()).isEqualTo(uri);
564+
verify(mockRemoteMediaClient, times(2))
565+
.queueInsertItems(queueItemsArgumentCaptor.capture(), anyInt(), any());
566+
assertThat(queueItemsArgumentCaptor.getAllValues().get(1)[0])
567+
.isEqualTo(mediaItemConverter.toMediaQueueItem(anotherMediaItem));
568+
Timeline.Window currentWindow =
569+
castPlayer
570+
.getCurrentTimeline()
571+
.getWindow(castPlayer.getCurrentMediaItemIndex(), new Timeline.Window());
572+
assertThat(currentWindow.uid).isEqualTo(123);
573+
assertThat(currentWindow.mediaItem).isEqualTo(anotherMediaItem);
587574
}
588575

589576
@Test
@@ -722,8 +709,8 @@ public void addMediaItems_fillsTimeline() {
722709

723710
Timeline currentTimeline = castPlayer.getCurrentTimeline();
724711
for (int i = 0; i < mediaItems.size(); i++) {
725-
assertThat(currentTimeline.getWindow(/* windowIndex= */ i, window).uid)
726-
.isEqualTo(mediaItems.get(i).localConfiguration.tag);
712+
assertThat(currentTimeline.getWindow(/* windowIndex= */ i, window).mediaItem)
713+
.isEqualTo(mediaItems.get(i));
727714
}
728715
}
729716

@@ -1791,21 +1778,18 @@ public void setMediaItems_doesNotifyOnMetadataChanged() {
17911778
.setUri(uri1)
17921779
.setMimeType(MimeTypes.APPLICATION_MPD)
17931780
.setMediaMetadata(new MediaMetadata.Builder().setArtist("foo").build())
1794-
.setTag(1)
17951781
.build());
17961782
ImmutableList<MediaItem> secondPlaylist =
17971783
ImmutableList.of(
17981784
new MediaItem.Builder()
17991785
.setUri(Uri.EMPTY)
1800-
.setTag(2)
18011786
.setMediaMetadata(new MediaMetadata.Builder().setArtist("bar").build())
18021787
.setMimeType(MimeTypes.APPLICATION_MPD)
18031788
.build(),
18041789
new MediaItem.Builder()
18051790
.setUri(uri2)
18061791
.setMimeType(MimeTypes.APPLICATION_MP4)
18071792
.setMediaMetadata(new MediaMetadata.Builder().setArtist("foobar").build())
1808-
.setTag(3)
18091793
.build());
18101794
castPlayer.addListener(mockListener);
18111795

@@ -1902,7 +1886,6 @@ private MediaItem createMediaItem(int mediaQueueItemId) {
19021886
.setMediaMetadata(
19031887
new MediaMetadata.Builder().setArtist("Foo Bar - " + mediaQueueItemId).build())
19041888
.setMimeType(MimeTypes.APPLICATION_MPD)
1905-
.setTag(mediaQueueItemId)
19061889
.build();
19071890
}
19081891

0 commit comments

Comments
 (0)