Skip to content

Commit 2d1bcc7

Browse files
Merge pull request #2235 from MGaetan89:add_CastPlayer_playlistMetadata
PiperOrigin-RevId: 738455260
2 parents 73f7471 + 1db0fe2 commit 2d1bcc7

File tree

3 files changed

+47
-8
lines changed

3 files changed

+47
-8
lines changed

Diff for: RELEASENOTES.md

+2
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@
5454
* MIDI extension:
5555
* Leanback extension:
5656
* Cast extension:
57+
* Add support for playlist metadata
58+
([#2235](https://github.com/androidx/media/pull/2235)).
5759
* Test Utilities:
5860
* Demo app:
5961
* Add `PlaybackSpeedPopUpButton` Composable UI element to be part of

Diff for: libraries/cast/src/main/java/androidx/media3/cast/CastPlayer.java

+13-5
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package androidx.media3.cast;
1717

1818
import static androidx.media3.common.util.Assertions.checkArgument;
19+
import static androidx.media3.common.util.Assertions.checkNotNull;
1920
import static androidx.media3.common.util.Util.SDK_INT;
2021
import static androidx.media3.common.util.Util.castNonNull;
2122
import static java.lang.Math.min;
@@ -166,6 +167,7 @@ public final class CastPlayer extends BasePlayer {
166167
private long pendingSeekPositionMs;
167168
@Nullable private PositionInfo pendingMediaItemRemovalPosition;
168169
private MediaMetadata mediaMetadata;
170+
private MediaMetadata playlistMetadata;
169171
private DeviceInfo deviceInfo;
170172

171173
/**
@@ -268,6 +270,7 @@ public CastPlayer(
268270
playbackState = STATE_IDLE;
269271
currentTimeline = CastTimeline.EMPTY_CAST_TIMELINE;
270272
mediaMetadata = MediaMetadata.EMPTY;
273+
playlistMetadata = MediaMetadata.EMPTY;
271274
currentTracks = Tracks.EMPTY;
272275
availableCommands = new Commands.Builder().addAll(PERMANENT_AVAILABLE_COMMANDS).build();
273276
pendingSeekWindowIndex = C.INDEX_UNSET;
@@ -656,14 +659,19 @@ public MediaMetadata getMediaMetadataInternal() {
656659

657660
@Override
658661
public MediaMetadata getPlaylistMetadata() {
659-
// CastPlayer does not currently support metadata.
660-
return MediaMetadata.EMPTY;
662+
return playlistMetadata;
661663
}
662664

663-
/** This method is not supported and does nothing. */
664665
@Override
665-
public void setPlaylistMetadata(MediaMetadata mediaMetadata) {
666-
// CastPlayer does not currently support metadata.
666+
public void setPlaylistMetadata(MediaMetadata playlistMetadata) {
667+
checkNotNull(playlistMetadata);
668+
if (playlistMetadata.equals(this.playlistMetadata)) {
669+
return;
670+
}
671+
this.playlistMetadata = playlistMetadata;
672+
listeners.sendEvent(
673+
EVENT_PLAYLIST_METADATA_CHANGED,
674+
listener -> listener.onPlaylistMetadataChanged(this.playlistMetadata));
667675
}
668676

669677
@Override

Diff for: libraries/cast/src/test/java/androidx/media3/cast/CastPlayerTest.java

+32-3
Original file line numberDiff line numberDiff line change
@@ -1800,7 +1800,7 @@ public void setRepeatMode_one_doesNotNotifyAvailableCommandsChanged() {
18001800
}
18011801

18021802
@Test
1803-
public void setMediaItems_doesNotifyOnMetadataChanged() {
1803+
public void setMediaItems_doesNotifyOnMediaMetadataChanged() {
18041804
when(mockRemoteMediaClient.queueJumpToItem(anyInt(), anyLong(), eq(null)))
18051805
.thenReturn(mockPendingResult);
18061806
ArgumentCaptor<MediaMetadata> metadataCaptor = ArgumentCaptor.forClass(MediaMetadata.class);
@@ -1827,7 +1827,7 @@ public void setMediaItems_doesNotifyOnMetadataChanged() {
18271827
.build());
18281828
castPlayer.addListener(mockListener);
18291829

1830-
MediaMetadata intitalMetadata = castPlayer.getMediaMetadata();
1830+
MediaMetadata initialMetadata = castPlayer.getMediaMetadata();
18311831
castPlayer.setMediaItems(firstPlaylist, /* startIndex= */ 0, /* startPositionMs= */ 2000L);
18321832
updateTimeLine(firstPlaylist, /* mediaQueueItemIds= */ new int[] {1}, /* currentItemId= */ 1);
18331833
MediaMetadata firstMetadata = castPlayer.getMediaMetadata();
@@ -1850,7 +1850,7 @@ public void setMediaItems_doesNotifyOnMetadataChanged() {
18501850
secondPlaylist.get(1).mediaMetadata,
18511851
secondPlaylist.get(0).mediaMetadata)
18521852
.inOrder();
1853-
assertThat(intitalMetadata).isEqualTo(MediaMetadata.EMPTY);
1853+
assertThat(initialMetadata).isEqualTo(MediaMetadata.EMPTY);
18541854
assertThat(ImmutableList.of(firstMetadata, secondMetadata, thirdMetadata))
18551855
.containsExactly(
18561856
firstPlaylist.get(0).mediaMetadata,
@@ -1898,6 +1898,35 @@ public void setMediaItems_equalMetadata_doesNotNotifyOnMediaMetadataChanged() {
18981898
verify(mockListener, never()).onMediaMetadataChanged(any());
18991899
}
19001900

1901+
@Test
1902+
public void setPlaylistMetadata_doesNotifyOnPlaylistMetadataChanged() {
1903+
castPlayer.addListener(mockListener);
1904+
1905+
MediaMetadata metadata = new MediaMetadata.Builder().setArtist("foo").build();
1906+
1907+
assertThat(castPlayer.getPlaylistMetadata()).isEqualTo(MediaMetadata.EMPTY);
1908+
1909+
castPlayer.setPlaylistMetadata(metadata);
1910+
1911+
assertThat(castPlayer.getPlaylistMetadata()).isEqualTo(metadata);
1912+
1913+
verify(mockListener).onPlaylistMetadataChanged(metadata);
1914+
}
1915+
1916+
@Test
1917+
public void setPlaylistMetadata_equalMetadata_doesNotNotifyOnPlaylistMetadataChanged() {
1918+
castPlayer.addListener(mockListener);
1919+
1920+
MediaMetadata metadata = new MediaMetadata.Builder().setArtist("foo").build();
1921+
1922+
castPlayer.setPlaylistMetadata(metadata);
1923+
castPlayer.setPlaylistMetadata(metadata);
1924+
1925+
assertThat(castPlayer.getPlaylistMetadata()).isEqualTo(metadata);
1926+
1927+
verify(mockListener, times(1)).onPlaylistMetadataChanged(metadata);
1928+
}
1929+
19011930
@Test
19021931
public void getDeviceInfo_returnsCorrectDeviceInfoWithPlaybackTypeRemote() {
19031932
DeviceInfo deviceInfo = castPlayer.getDeviceInfo();

0 commit comments

Comments
 (0)