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 fe8f91832e..4872383ebb 100644 --- a/libraries/session/src/main/java/androidx/media3/session/MediaSessionLegacyStub.java +++ b/libraries/session/src/main/java/androidx/media3/session/MediaSessionLegacyStub.java @@ -1321,11 +1321,6 @@ import org.checkerframework.checker.nullness.compatqual.NullableType; lastMediaMetadata = newMediaMetadata; lastDurationMs = newDurationMs; - if (currentMediaItem == null) { - setMetadata(sessionCompat, /* metadataCompat= */ null); - return; - } - @Nullable Bitmap artworkBitmap = null; ListenableFuture bitmapFuture = sessionImpl.getBitmapLoader().loadBitmapFromMetadata(newMediaMetadata); diff --git a/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerCompatCallbackWithMediaSessionTest.java b/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerCompatCallbackWithMediaSessionTest.java index bd85cf9338..16fec985e2 100644 --- a/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerCompatCallbackWithMediaSessionTest.java +++ b/libraries/test_session_current/src/androidTest/java/androidx/media3/session/MediaControllerCompatCallbackWithMediaSessionTest.java @@ -1085,8 +1085,9 @@ public class MediaControllerCompatCallbackWithMediaSessionTest { } @Test - public void onMediaMetadataChanged_updatesLegacyMetadata_correctModelConversion() - throws Exception { + public void + onMediaMetadataChanged_withGetMetadataAndGetCurrentMediaItemCommand_updatesLegacyMetadata() + throws Exception { int testItemIndex = 3; String testDisplayTitle = "displayTitle"; long testDurationMs = 30_000; @@ -1100,6 +1101,12 @@ public class MediaControllerCompatCallbackWithMediaSessionTest { .setMediaId(testMediaItems.get(testItemIndex).mediaId) .setMediaMetadata(testMediaMetadata) .build()); + session + .getMockPlayer() + .notifyAvailableCommandsChanged( + new Player.Commands.Builder() + .addAll(Player.COMMAND_GET_METADATA, Player.COMMAND_GET_CURRENT_MEDIA_ITEM) + .build()); session.getMockPlayer().setTimeline(new PlaylistTimeline(testMediaItems)); session.getMockPlayer().setCurrentMediaItemIndex(testItemIndex); session.getMockPlayer().setDuration(testDurationMs); @@ -1131,6 +1138,49 @@ public class MediaControllerCompatCallbackWithMediaSessionTest { assertThat(getterMetadataCompat.getString(METADATA_KEY_MEDIA_ID)).isEqualTo(testCurrentMediaId); } + @Test + public void onMediaMetadataChanged_withGetMetadataCommandOnly_updatesLegacyMetadata() + throws Exception { + int testItemIndex = 3; + String testDisplayTitle = "displayTitle"; + List testMediaItems = MediaTestUtils.createMediaItems(/* size= */ 5); + MediaMetadata testMediaMetadata = + new MediaMetadata.Builder().setTitle(testDisplayTitle).build(); + testMediaItems.set( + testItemIndex, + new MediaItem.Builder() + .setMediaId(testMediaItems.get(testItemIndex).mediaId) + .setMediaMetadata(testMediaMetadata) + .build()); + session + .getMockPlayer() + .notifyAvailableCommandsChanged( + new Player.Commands.Builder().add(Player.COMMAND_GET_METADATA).build()); + session.getMockPlayer().setTimeline(new PlaylistTimeline(testMediaItems)); + session.getMockPlayer().setCurrentMediaItemIndex(testItemIndex); + AtomicReference metadataRef = new AtomicReference<>(); + CountDownLatch latchForMetadata = new CountDownLatch(1); + MediaControllerCompat.Callback callback = + new MediaControllerCompat.Callback() { + @Override + public void onMetadataChanged(MediaMetadataCompat metadata) { + metadataRef.set(metadata); + latchForMetadata.countDown(); + } + }; + controllerCompat.registerCallback(callback, handler); + + session.getMockPlayer().notifyMediaMetadataChanged(testMediaMetadata); + + assertThat(latchForMetadata.await(TIMEOUT_MS, MILLISECONDS)).isTrue(); + MediaMetadataCompat parameterMetadataCompat = metadataRef.get(); + MediaMetadataCompat getterMetadataCompat = controllerCompat.getMetadata(); + assertThat(parameterMetadataCompat.getString(MediaMetadataCompat.METADATA_KEY_DISPLAY_TITLE)) + .isEqualTo(testDisplayTitle); + assertThat(getterMetadataCompat.getString(MediaMetadataCompat.METADATA_KEY_DISPLAY_TITLE)) + .isEqualTo(testDisplayTitle); + } + @Test public void playlistChange() throws Exception { AtomicReference> queueRef = new AtomicReference<>();