Loading android/app/src/com/android/bluetooth/newavrcp/MediaPlayerWrapper.java +14 −10 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.bluetooth.avrcp; import android.annotation.Nullable; import android.media.MediaMetadata; import android.media.session.MediaSession; import android.media.session.PlaybackState; Loading Loading @@ -375,15 +376,16 @@ class MediaPlayerWrapper { } @Override public void onMetadataChanged(MediaMetadata metadata) { public void onMetadataChanged(@Nullable MediaMetadata metadata) { if (!isReady()) { Log.v(TAG, mPackageName + " tried to update with incomplete metadata"); Log.v(TAG, "onMetadataChanged(): " + mPackageName + " tried to update with no queue"); return; } Log.v(TAG, "onMetadataChanged(): " + mPackageName + " : " + Util.toMetadata(metadata)); if (!metadata.equals(getMetadata())) { if (!Objects.equals(metadata, getMetadata())) { e("The callback metadata doesn't match controller metadata"); } Loading @@ -395,7 +397,7 @@ class MediaPlayerWrapper { // TODO: Spotify needs a metadata update debouncer as it sometimes updates the metadata // twice in a row with the only difference being that the song duration is rounded to // the nearest second. if (metadata.equals(mCurrentData.metadata)) { if (Objects.equals(metadata, mCurrentData.metadata)) { Log.w(TAG, "onMetadataChanged(): " + mPackageName + " tried to update with no new data"); return; Loading @@ -405,9 +407,10 @@ class MediaPlayerWrapper { } @Override public void onPlaybackStateChanged(PlaybackState state) { public void onPlaybackStateChanged(@Nullable PlaybackState state) { if (!isReady()) { Log.v(TAG, mPackageName + " tried to update with no state"); Log.v(TAG, "onPlaybackStateChanged(): " + mPackageName + " tried to update with no queue"); return; } Loading @@ -433,14 +436,15 @@ class MediaPlayerWrapper { } @Override public void onQueueChanged(List<MediaSession.QueueItem> queue) { Log.v(TAG, "onQueueChanged(): " + mPackageName); public void onQueueChanged(@Nullable List<MediaSession.QueueItem> queue) { if (!isReady()) { Log.v(TAG, mPackageName + " tried to updated with no queue"); Log.v(TAG, "onQueueChanged(): " + mPackageName + " tried to update with no queue"); return; } Log.v(TAG, "onQueueChanged(): " + mPackageName); if (!Objects.equals(queue, getQueue())) { e("The callback queue isn't the current queue"); } Loading android/app/tests/unit/src/com/android/bluetooth/newavrcp/MediaPlayerWrapperTest.java +30 −1 Original line number Diff line number Diff line Loading @@ -333,6 +333,35 @@ public class MediaPlayerWrapperTest { Assert.assertEquals(wrapper.getCurrentMetadata().numTracks, "3"); } @Test public void testNullMetadata() { // Create the wrapper object and register the looper with the timeout handler TestLooperManager looperManager = new TestLooperManager(mThread.getLooper()); MediaPlayerWrapper wrapper = MediaPlayerWrapper.wrap(mMockController, mThread.getLooper()); wrapper.registerCallback(mTestCbs); // Return null when getting the queue doReturn(null).when(mMockController).getQueue(); // Grab the callbacks the wrapper registered with the controller verify(mMockController).registerCallback(mControllerCbs.capture(), any()); MediaController.Callback controllerCallbacks = mControllerCbs.getValue(); // Update Metadata returned by controller mTestMetadata.putString(MediaMetadata.METADATA_KEY_TITLE, "New Title"); doReturn(mTestMetadata.build()).when(mMockController).getMetadata(); // Call the callback controllerCallbacks.onMetadataChanged(null); // Assert that the metadata returned by getMetadata() is used instead of null verify(mTestCbs, times(1)).mediaUpdatedCallback(mMediaUpdateData.capture()); MediaData data = mMediaUpdateData.getValue(); Assert.assertEquals("Returned metadata is incorrect", data.metadata, Util.toMetadata(mTestMetadata.build())); } @Test public void testNullQueue() { // Create the wrapper object and register the looper with the timeout handler Loading Loading @@ -502,7 +531,7 @@ public class MediaPlayerWrapperTest { verify(mMockController).registerCallback(mControllerCbs.capture(), any()); MediaController.Callback controllerCallbacks = mControllerCbs.getValue(); // Update Metdata returned by controller // Update Metadata returned by controller mTestMetadata.putString(MediaMetadata.METADATA_KEY_TITLE, "New Title"); doReturn(mTestMetadata.build()).when(mMockController).getMetadata(); controllerCallbacks.onMetadataChanged(mTestMetadata.build()); Loading Loading
android/app/src/com/android/bluetooth/newavrcp/MediaPlayerWrapper.java +14 −10 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.bluetooth.avrcp; import android.annotation.Nullable; import android.media.MediaMetadata; import android.media.session.MediaSession; import android.media.session.PlaybackState; Loading Loading @@ -375,15 +376,16 @@ class MediaPlayerWrapper { } @Override public void onMetadataChanged(MediaMetadata metadata) { public void onMetadataChanged(@Nullable MediaMetadata metadata) { if (!isReady()) { Log.v(TAG, mPackageName + " tried to update with incomplete metadata"); Log.v(TAG, "onMetadataChanged(): " + mPackageName + " tried to update with no queue"); return; } Log.v(TAG, "onMetadataChanged(): " + mPackageName + " : " + Util.toMetadata(metadata)); if (!metadata.equals(getMetadata())) { if (!Objects.equals(metadata, getMetadata())) { e("The callback metadata doesn't match controller metadata"); } Loading @@ -395,7 +397,7 @@ class MediaPlayerWrapper { // TODO: Spotify needs a metadata update debouncer as it sometimes updates the metadata // twice in a row with the only difference being that the song duration is rounded to // the nearest second. if (metadata.equals(mCurrentData.metadata)) { if (Objects.equals(metadata, mCurrentData.metadata)) { Log.w(TAG, "onMetadataChanged(): " + mPackageName + " tried to update with no new data"); return; Loading @@ -405,9 +407,10 @@ class MediaPlayerWrapper { } @Override public void onPlaybackStateChanged(PlaybackState state) { public void onPlaybackStateChanged(@Nullable PlaybackState state) { if (!isReady()) { Log.v(TAG, mPackageName + " tried to update with no state"); Log.v(TAG, "onPlaybackStateChanged(): " + mPackageName + " tried to update with no queue"); return; } Loading @@ -433,14 +436,15 @@ class MediaPlayerWrapper { } @Override public void onQueueChanged(List<MediaSession.QueueItem> queue) { Log.v(TAG, "onQueueChanged(): " + mPackageName); public void onQueueChanged(@Nullable List<MediaSession.QueueItem> queue) { if (!isReady()) { Log.v(TAG, mPackageName + " tried to updated with no queue"); Log.v(TAG, "onQueueChanged(): " + mPackageName + " tried to update with no queue"); return; } Log.v(TAG, "onQueueChanged(): " + mPackageName); if (!Objects.equals(queue, getQueue())) { e("The callback queue isn't the current queue"); } Loading
android/app/tests/unit/src/com/android/bluetooth/newavrcp/MediaPlayerWrapperTest.java +30 −1 Original line number Diff line number Diff line Loading @@ -333,6 +333,35 @@ public class MediaPlayerWrapperTest { Assert.assertEquals(wrapper.getCurrentMetadata().numTracks, "3"); } @Test public void testNullMetadata() { // Create the wrapper object and register the looper with the timeout handler TestLooperManager looperManager = new TestLooperManager(mThread.getLooper()); MediaPlayerWrapper wrapper = MediaPlayerWrapper.wrap(mMockController, mThread.getLooper()); wrapper.registerCallback(mTestCbs); // Return null when getting the queue doReturn(null).when(mMockController).getQueue(); // Grab the callbacks the wrapper registered with the controller verify(mMockController).registerCallback(mControllerCbs.capture(), any()); MediaController.Callback controllerCallbacks = mControllerCbs.getValue(); // Update Metadata returned by controller mTestMetadata.putString(MediaMetadata.METADATA_KEY_TITLE, "New Title"); doReturn(mTestMetadata.build()).when(mMockController).getMetadata(); // Call the callback controllerCallbacks.onMetadataChanged(null); // Assert that the metadata returned by getMetadata() is used instead of null verify(mTestCbs, times(1)).mediaUpdatedCallback(mMediaUpdateData.capture()); MediaData data = mMediaUpdateData.getValue(); Assert.assertEquals("Returned metadata is incorrect", data.metadata, Util.toMetadata(mTestMetadata.build())); } @Test public void testNullQueue() { // Create the wrapper object and register the looper with the timeout handler Loading Loading @@ -502,7 +531,7 @@ public class MediaPlayerWrapperTest { verify(mMockController).registerCallback(mControllerCbs.capture(), any()); MediaController.Callback controllerCallbacks = mControllerCbs.getValue(); // Update Metdata returned by controller // Update Metadata returned by controller mTestMetadata.putString(MediaMetadata.METADATA_KEY_TITLE, "New Title"); doReturn(mTestMetadata.build()).when(mMockController).getMetadata(); controllerCallbacks.onMetadataChanged(mTestMetadata.build()); Loading