Notify PlaybackStateCompat when onCurrentMediaItemChanged
Bug: 159147455
Test: ./media2/session/version-compat-tests/runtest.sh 4 -t
androidx.media2.test.client.tests.MediaControllerCompatCallbackWithMediaSessionTest#currentMediaItemChange
Change-Id: Icb998cd7bb0bf9aba925d2e5a50872ef84a898b7
diff --git a/media2/session/src/main/java/androidx/media2/session/MediaSessionLegacyStub.java b/media2/session/src/main/java/androidx/media2/session/MediaSessionLegacyStub.java
index f756bbf..87d9346 100644
--- a/media2/session/src/main/java/androidx/media2/session/MediaSessionLegacyStub.java
+++ b/media2/session/src/main/java/androidx/media2/session/MediaSessionLegacyStub.java
@@ -845,6 +845,8 @@
int nextIdx) throws RemoteException {
mSessionImpl.getSessionCompat().setMetadata(item == null ? null
: MediaUtils.convertToMediaMetadataCompat(item.getMetadata()));
+ mSessionImpl.getSessionCompat().setPlaybackState(
+ mSessionImpl.createPlaybackStateCompat());
}
@Override
diff --git a/media2/session/version-compat-tests/current/client/src/androidTest/java/androidx/media2/test/client/tests/MediaControllerCompatCallbackWithMediaSessionTest.java b/media2/session/version-compat-tests/current/client/src/androidTest/java/androidx/media2/test/client/tests/MediaControllerCompatCallbackWithMediaSessionTest.java
index 3389b64..d482c8e 100644
--- a/media2/session/version-compat-tests/current/client/src/androidTest/java/androidx/media2/test/client/tests/MediaControllerCompatCallbackWithMediaSessionTest.java
+++ b/media2/session/version-compat-tests/current/client/src/androidTest/java/androidx/media2/test/client/tests/MediaControllerCompatCallbackWithMediaSessionTest.java
@@ -497,6 +497,8 @@
@Test
public void currentMediaItemChange() throws Exception {
+ int testItemIndex = 3;
+ long testPosition = 1234;
String displayTitle = "displayTitle";
MediaMetadata metadata = new MediaMetadata.Builder()
.putText(MediaMetadata.METADATA_KEY_DISPLAY_TITLE, displayTitle).build();
@@ -505,30 +507,45 @@
.build();
List<MediaItem> playlist = MediaTestUtils.createFileMediaItems(5);
- int testItemIndex = 3;
playlist.set(testItemIndex, currentMediaItem);
mSession.getMockPlayer().setPlaylistWithDummyItem(playlist);
AtomicReference<MediaMetadataCompat> metadataRef = new AtomicReference<>();
- CountDownLatch latch = new CountDownLatch(1);
+ AtomicReference<PlaybackStateCompat> playbackStateRef = new AtomicReference<>();
+ CountDownLatch latchForMetadata = new CountDownLatch(1);
+ CountDownLatch latchForPlaybackState = new CountDownLatch(1);
MediaControllerCompat.Callback callback = new MediaControllerCompat.Callback() {
@Override
public void onMetadataChanged(MediaMetadataCompat metadata) {
metadataRef.set(metadata);
- latch.countDown();
+ latchForMetadata.countDown();
+ }
+
+ @Override
+ public void onPlaybackStateChanged(PlaybackStateCompat state) {
+ playbackStateRef.set(state);
+ latchForPlaybackState.countDown();
}
};
mControllerCompat.registerCallback(callback, sHandler);
mSession.getMockPlayer().setCurrentMediaItem(testItemIndex);
+ mSession.getMockPlayer().setCurrentPosition(testPosition);
mSession.getMockPlayer().notifyCurrentMediaItemChanged(testItemIndex);
- assertTrue(latch.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
+ assertTrue(latchForMetadata.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
assertEquals(displayTitle,
metadataRef.get().getString(MediaMetadataCompat.METADATA_KEY_DISPLAY_TITLE));
assertEquals(displayTitle,
mControllerCompat.getMetadata().getString(
MediaMetadataCompat.METADATA_KEY_DISPLAY_TITLE));
+ if (MediaTestUtils.isServiceToT()) {
+ // TODO(b/156594425): Move these assertions out of this condition once the
+ // previous session is updated to have the fix of b/159147455.
+ assertTrue(latchForPlaybackState.await(TIMEOUT_MS, TimeUnit.MILLISECONDS));
+ assertEquals(testPosition, playbackStateRef.get().getPosition());
+ assertEquals(testPosition, mControllerCompat.getPlaybackState().getPosition());
+ }
}
@Test