Skip to content

Commit f109a81

Browse files
marcbaechingericbaker
authored andcommitted
Fix supportedCommands in MediaMetadata
#cherrypick PiperOrigin-RevId: 695304782 (cherry picked from commit fa790bd)
1 parent 0e37bd0 commit f109a81

File tree

4 files changed

+37
-14
lines changed

4 files changed

+37
-14
lines changed

libraries/common/src/main/java/androidx/media3/common/MediaMetadata.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import java.lang.annotation.Retention;
3737
import java.lang.annotation.RetentionPolicy;
3838
import java.lang.annotation.Target;
39+
import java.util.ArrayList;
3940
import java.util.Arrays;
4041
import java.util.List;
4142

@@ -612,6 +613,10 @@ public Builder populate(@Nullable MediaMetadata mediaMetadata) {
612613
setExtras(mediaMetadata.extras);
613614
}
614615

616+
if (!mediaMetadata.supportedCommands.isEmpty()) {
617+
setSupportedCommands(mediaMetadata.supportedCommands);
618+
}
619+
615620
return this;
616621
}
617622

@@ -1250,6 +1255,7 @@ public boolean equals(@Nullable Object obj) {
12501255
&& Util.areEqual(compilation, that.compilation)
12511256
&& Util.areEqual(station, that.station)
12521257
&& Util.areEqual(mediaType, that.mediaType)
1258+
&& Util.areEqual(supportedCommands, that.supportedCommands)
12531259
&& ((extras == null) == (that.extras == null));
12541260
}
12551261

@@ -1290,7 +1296,8 @@ public int hashCode() {
12901296
compilation,
12911297
station,
12921298
mediaType,
1293-
extras == null);
1299+
extras == null,
1300+
supportedCommands);
12941301
}
12951302

12961303
private static final String FIELD_TITLE = Util.intToStringMaxRadix(0);
@@ -1327,6 +1334,7 @@ public int hashCode() {
13271334
private static final String FIELD_MEDIA_TYPE = Util.intToStringMaxRadix(31);
13281335
private static final String FIELD_IS_BROWSABLE = Util.intToStringMaxRadix(32);
13291336
private static final String FIELD_DURATION_MS = Util.intToStringMaxRadix(33);
1337+
private static final String FIELD_SUPPORTED_COMMANDS = Util.intToStringMaxRadix(34);
13301338
private static final String FIELD_EXTRAS = Util.intToStringMaxRadix(1000);
13311339

13321340
@SuppressWarnings("deprecation") // Bundling deprecated fields.
@@ -1432,6 +1440,9 @@ public Bundle toBundle() {
14321440
if (mediaType != null) {
14331441
bundle.putInt(FIELD_MEDIA_TYPE, mediaType);
14341442
}
1443+
if (!supportedCommands.isEmpty()) {
1444+
bundle.putStringArrayList(FIELD_SUPPORTED_COMMANDS, new ArrayList<>(supportedCommands));
1445+
}
14351446
if (extras != null) {
14361447
bundle.putBundle(FIELD_EXTRAS, extras);
14371448
}
@@ -1522,6 +1533,11 @@ public static MediaMetadata fromBundle(Bundle bundle) {
15221533
if (bundle.containsKey(FIELD_MEDIA_TYPE)) {
15231534
builder.setMediaType(bundle.getInt(FIELD_MEDIA_TYPE));
15241535
}
1536+
@Nullable
1537+
ArrayList<String> supportedCommands = bundle.getStringArrayList(FIELD_SUPPORTED_COMMANDS);
1538+
if (supportedCommands != null) {
1539+
builder.setSupportedCommands(supportedCommands);
1540+
}
15251541

15261542
return builder.build();
15271543
}

libraries/common/src/test/java/androidx/media3/common/MediaMetadataTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import android.net.Uri;
2121
import android.os.Bundle;
2222
import androidx.test.ext.junit.runners.AndroidJUnit4;
23+
import com.google.common.collect.ImmutableList;
2324
import org.junit.Test;
2425
import org.junit.runner.RunWith;
2526

@@ -68,6 +69,7 @@ public void builder_minimal_correctDefaults() {
6869
assertThat(mediaMetadata.compilation).isNull();
6970
assertThat(mediaMetadata.station).isNull();
7071
assertThat(mediaMetadata.mediaType).isNull();
72+
assertThat(mediaMetadata.supportedCommands).isEmpty();
7173
assertThat(mediaMetadata.extras).isNull();
7274
}
7375

@@ -278,6 +280,7 @@ private static MediaMetadata getFullyPopulatedMediaMetadata() {
278280
.setCompilation("Amazing songs.")
279281
.setStation("radio station")
280282
.setMediaType(MediaMetadata.MEDIA_TYPE_MIXED)
283+
.setSupportedCommands(ImmutableList.of("command1", "command2"))
281284
.setExtras(extras)
282285
.build();
283286
}

libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerTest.java

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -934,24 +934,14 @@ public void getCommandButtonsForMediaItem() throws Exception {
934934
.setSessionCommand(
935935
new SessionCommand(MediaBrowserConstants.COMMAND_RADIO, Bundle.EMPTY))
936936
.build();
937-
MediaItem mediaItem =
938-
new MediaItem.Builder()
939-
.setMediaId("mediaId")
940-
.setMediaMetadata(
941-
new MediaMetadata.Builder()
942-
.setSupportedCommands(
943-
ImmutableList.of(
944-
MediaBrowserConstants.COMMAND_PLAYLIST_ADD,
945-
MediaBrowserConstants.COMMAND_RADIO,
946-
"invalid"))
947-
.build())
948-
.build();
949937
MediaController controller = controllerTestRule.createController(session.getToken());
938+
MediaItem currentMediaItem =
939+
threadTestRule.getHandler().postAndSync(controller::getCurrentMediaItem);
950940

951941
ImmutableList<CommandButton> commandButtons =
952942
threadTestRule
953943
.getHandler()
954-
.postAndSync(() -> controller.getCommandButtonsForMediaItem(mediaItem));
944+
.postAndSync(() -> controller.getCommandButtonsForMediaItem(currentMediaItem));
955945

956946
assertThat(commandButtons).containsExactly(playlistAddButton, radioButton).inOrder();
957947
session.cleanUp();

libraries/test_session_current/src/main/java/androidx/media3/session/MediaSessionProviderService.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,20 @@ public MediaSession.ConnectionResult onConnect(
253253
.build();
254254
builder.setCommandButtonsForMediaItems(
255255
ImmutableList.of(playlistAddButton, radioButton));
256+
mockPlayer.timeline =
257+
new PlaylistTimeline(
258+
ImmutableList.of(
259+
new MediaItem.Builder()
260+
.setMediaId("mediaIdWithSupportedCommands")
261+
.setMediaMetadata(
262+
new MediaMetadata.Builder()
263+
.setSupportedCommands(
264+
ImmutableList.of(
265+
MediaBrowserConstants.COMMAND_PLAYLIST_ADD,
266+
MediaBrowserConstants.COMMAND_RADIO,
267+
"invalid"))
268+
.build())
269+
.build()));
256270
builder.setCallback(
257271
new MediaSession.Callback() {
258272
@Override

0 commit comments

Comments
 (0)