From 8c5c58ec7e22ac51d24b4addbe3967c0f15a72e0 Mon Sep 17 00:00:00 2001 From: tonihei Date: Mon, 17 Apr 2023 15:09:56 +0100 Subject: [PATCH] Remove unnecessary check for currentMediaItem in legacy session stub This check was a leftover from when the metadata was generated from the MediaItem only. Since we moved to the actual MediaMetadata fields, the check is completely unnecessary and prevents accessing metadata when the GET_CURRENT_MEDIA_ITEM command is not available. PiperOrigin-RevId: 524837587 (cherry picked from commit e0bb23d4634421ede8827948a3ddae9c5d4a9089) --- .../session/MediaSessionLegacyStub.java | 5 -- ...lerCompatCallbackWithMediaSessionTest.java | 54 ++++++++++++++++++- 2 files changed, 52 insertions(+), 7 deletions(-) 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<>();