Loading android/app/src/com/android/bluetooth/newavrcp/MediaPlayerList.java +4 −4 Original line number Diff line number Diff line Loading @@ -226,7 +226,7 @@ public class MediaPlayerList { final MediaPlayerWrapper player = getActivePlayer(); if (player == null) return ""; final PlaybackState state = player.getCurrentMediaData().state; final PlaybackState state = player.getPlaybackState(); if (state == null || state.getActiveQueueItemId() == MediaSession.QueueItem.UNKNOWN_ID) { d("getCurrentMediaId: No active queue item Id: " + state); return ""; Loading @@ -239,14 +239,14 @@ public class MediaPlayerList { final MediaPlayerWrapper player = getActivePlayer(); if (player == null) return Util.empty_data(); return player.getCurrentMediaData().metadata; return player.getCurrentMetadata(); } PlaybackState getCurrentPlayStatus() { final MediaPlayerWrapper player = getActivePlayer(); if (player == null) return null; return player.getCurrentMediaData().state; return player.getPlaybackState(); } List<Metadata> getNowPlayingList() { Loading @@ -257,7 +257,7 @@ public class MediaPlayerList { return ret; } return getActivePlayer().getCurrentMediaData().queue; return getActivePlayer().getCurrentQueue(); } void playItem(int playerId, boolean nowPlaying, String mediaId) { Loading android/app/src/com/android/bluetooth/newavrcp/MediaPlayerWrapper.java +29 −2 Original line number Diff line number Diff line Loading @@ -119,7 +119,11 @@ class MediaPlayerWrapper { return mMediaController.getMetadata(); } protected PlaybackState getPlaybackState() { Metadata getCurrentMetadata() { return Util.toMetadata(getMetadata()); } PlaybackState getPlaybackState() { return mMediaController.getPlaybackState(); } Loading @@ -128,9 +132,17 @@ class MediaPlayerWrapper { return mMediaController.getPlaybackState().getActiveQueueItemId(); } List<Metadata> getCurrentQueue() { return Util.toMetadataList(getQueue()); } // We don't return the cached info here in order to always provide the freshest data. MediaData getCurrentMediaData() { return mCurrentData; MediaData data = new MediaData( getCurrentMetadata(), getPlaybackState(), getCurrentQueue()); return data; } void playItemFromQueue(long qid) { Loading Loading @@ -208,6 +220,14 @@ class MediaPlayerWrapper { synchronized (mCallbackLock) { mRegisteredCallback = callback; } // Update the current data since it could have changed while we weren't registered for // updates mCurrentData = new MediaData( Util.toMetadata(getMetadata()), getPlaybackState(), Util.toMetadataList(getQueue())); mControllerCallbacks = new MediaControllerListener(mLooper); } Loading Loading @@ -236,6 +256,13 @@ class MediaPlayerWrapper { mControllerCallbacks.cleanup(); mMediaController = newController; // Update the current data since it could be different on the new controller for the player mCurrentData = new MediaData( Util.toMetadata(getMetadata()), getPlaybackState(), Util.toMetadataList(getQueue())); mControllerCallbacks = new MediaControllerListener(mLooper); d("Controller for " + mPackageName + " was updated."); } Loading android/app/tests/unit/src/com/android/bluetooth/newavrcp/MediaPlayerWrapperTest.java +30 −0 Original line number Diff line number Diff line Loading @@ -170,6 +170,36 @@ public class MediaPlayerWrapperTest { Assert.assertTrue(wrapper.isReady()); } /* * Test to make sure that if a new controller is registered with different metadata than the * previous controller, the new metadata is pulled upon registration. */ @Test public void testControllerUpdate() { // Create the wrapper object and register the looper with the timeout handler MediaPlayerWrapper wrapper = MediaPlayerWrapper.wrap(mMockController, mThread.getLooper()); Assert.assertTrue(wrapper.isReady()); wrapper.registerCallback(mTestCbs); // Create a new MediaController that has different metadata than the previous controller MediaController mUpdatedController = mock(MediaController.class); doReturn(mTestState.build()).when(mUpdatedController).getPlaybackState(); mTestMetadata.putString(MediaMetadata.METADATA_KEY_TITLE, "New Title"); doReturn(mTestMetadata.build()).when(mUpdatedController).getMetadata(); doReturn(null).when(mMockController).getQueue(); // Update the wrappers controller to the new controller wrapper.updateMediaController(mUpdatedController); // Send a metadata update with the same data that the controller had upon registering verify(mUpdatedController).registerCallback(mControllerCbs.capture(), any()); MediaController.Callback controllerCallbacks = mControllerCbs.getValue(); controllerCallbacks.onMetadataChanged(mTestMetadata.build()); // Verify that a callback was never called since no data was updated verify(mTestCbs, never()).mediaUpdatedCallback(any()); } /* * Test to make sure that a media player update gets sent whenever a Media metadata or playback * state change occurs instead of waiting for all data to be synced if the player doesn't Loading Loading
android/app/src/com/android/bluetooth/newavrcp/MediaPlayerList.java +4 −4 Original line number Diff line number Diff line Loading @@ -226,7 +226,7 @@ public class MediaPlayerList { final MediaPlayerWrapper player = getActivePlayer(); if (player == null) return ""; final PlaybackState state = player.getCurrentMediaData().state; final PlaybackState state = player.getPlaybackState(); if (state == null || state.getActiveQueueItemId() == MediaSession.QueueItem.UNKNOWN_ID) { d("getCurrentMediaId: No active queue item Id: " + state); return ""; Loading @@ -239,14 +239,14 @@ public class MediaPlayerList { final MediaPlayerWrapper player = getActivePlayer(); if (player == null) return Util.empty_data(); return player.getCurrentMediaData().metadata; return player.getCurrentMetadata(); } PlaybackState getCurrentPlayStatus() { final MediaPlayerWrapper player = getActivePlayer(); if (player == null) return null; return player.getCurrentMediaData().state; return player.getPlaybackState(); } List<Metadata> getNowPlayingList() { Loading @@ -257,7 +257,7 @@ public class MediaPlayerList { return ret; } return getActivePlayer().getCurrentMediaData().queue; return getActivePlayer().getCurrentQueue(); } void playItem(int playerId, boolean nowPlaying, String mediaId) { Loading
android/app/src/com/android/bluetooth/newavrcp/MediaPlayerWrapper.java +29 −2 Original line number Diff line number Diff line Loading @@ -119,7 +119,11 @@ class MediaPlayerWrapper { return mMediaController.getMetadata(); } protected PlaybackState getPlaybackState() { Metadata getCurrentMetadata() { return Util.toMetadata(getMetadata()); } PlaybackState getPlaybackState() { return mMediaController.getPlaybackState(); } Loading @@ -128,9 +132,17 @@ class MediaPlayerWrapper { return mMediaController.getPlaybackState().getActiveQueueItemId(); } List<Metadata> getCurrentQueue() { return Util.toMetadataList(getQueue()); } // We don't return the cached info here in order to always provide the freshest data. MediaData getCurrentMediaData() { return mCurrentData; MediaData data = new MediaData( getCurrentMetadata(), getPlaybackState(), getCurrentQueue()); return data; } void playItemFromQueue(long qid) { Loading Loading @@ -208,6 +220,14 @@ class MediaPlayerWrapper { synchronized (mCallbackLock) { mRegisteredCallback = callback; } // Update the current data since it could have changed while we weren't registered for // updates mCurrentData = new MediaData( Util.toMetadata(getMetadata()), getPlaybackState(), Util.toMetadataList(getQueue())); mControllerCallbacks = new MediaControllerListener(mLooper); } Loading Loading @@ -236,6 +256,13 @@ class MediaPlayerWrapper { mControllerCallbacks.cleanup(); mMediaController = newController; // Update the current data since it could be different on the new controller for the player mCurrentData = new MediaData( Util.toMetadata(getMetadata()), getPlaybackState(), Util.toMetadataList(getQueue())); mControllerCallbacks = new MediaControllerListener(mLooper); d("Controller for " + mPackageName + " was updated."); } Loading
android/app/tests/unit/src/com/android/bluetooth/newavrcp/MediaPlayerWrapperTest.java +30 −0 Original line number Diff line number Diff line Loading @@ -170,6 +170,36 @@ public class MediaPlayerWrapperTest { Assert.assertTrue(wrapper.isReady()); } /* * Test to make sure that if a new controller is registered with different metadata than the * previous controller, the new metadata is pulled upon registration. */ @Test public void testControllerUpdate() { // Create the wrapper object and register the looper with the timeout handler MediaPlayerWrapper wrapper = MediaPlayerWrapper.wrap(mMockController, mThread.getLooper()); Assert.assertTrue(wrapper.isReady()); wrapper.registerCallback(mTestCbs); // Create a new MediaController that has different metadata than the previous controller MediaController mUpdatedController = mock(MediaController.class); doReturn(mTestState.build()).when(mUpdatedController).getPlaybackState(); mTestMetadata.putString(MediaMetadata.METADATA_KEY_TITLE, "New Title"); doReturn(mTestMetadata.build()).when(mUpdatedController).getMetadata(); doReturn(null).when(mMockController).getQueue(); // Update the wrappers controller to the new controller wrapper.updateMediaController(mUpdatedController); // Send a metadata update with the same data that the controller had upon registering verify(mUpdatedController).registerCallback(mControllerCbs.capture(), any()); MediaController.Callback controllerCallbacks = mControllerCbs.getValue(); controllerCallbacks.onMetadataChanged(mTestMetadata.build()); // Verify that a callback was never called since no data was updated verify(mTestCbs, never()).mediaUpdatedCallback(any()); } /* * Test to make sure that a media player update gets sent whenever a Media metadata or playback * state change occurs instead of waiting for all data to be synced if the player doesn't Loading