[go: nahoru, domu]

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