Loading android/app/src/com/android/bluetooth/newavrcp/MediaPlayerWrapper.java +31 −25 Original line number Diff line number Diff line Loading @@ -278,9 +278,36 @@ class MediaPlayerWrapper { d("Controller for " + mPackageName + " was updated."); } private void sendMediaUpdate() { MediaData newData = new MediaData( Util.toMetadata(getMetadata()), getPlaybackState(), Util.toMetadataList(getQueue())); if (newData.equals(mCurrentData)) { // This may happen if the controller is fully synced by the time the // first update is completed Log.v(TAG, "Trying to update with last sent metadata"); return; } synchronized (mCallbackLock) { if (mRegisteredCallback == null) { Log.e(TAG, mPackageName + "Trying to send an update with no registered callback"); return; } Log.v(TAG, "trySendMediaUpdate(): Metadata has been updated for " + mPackageName); mRegisteredCallback.mediaUpdatedCallback(newData); } mCurrentData = newData; } class TimeoutHandler extends Handler { private static final int MSG_TIMEOUT = 0; private static final long CALLBACK_TIMEOUT_MS = 1000; private static final long CALLBACK_TIMEOUT_MS = 2000; TimeoutHandler(Looper looper) { super(looper); Loading @@ -301,6 +328,8 @@ class MediaPlayerWrapper { Log.e(TAG, " └ QueueItem(" + i + "): " + current_queue.get(i)); } sendMediaUpdate(); // TODO(apanicke): Add metric collection here. if (sTesting) Log.wtfStack(TAG, "Crashing the stack"); Loading Loading @@ -342,30 +371,7 @@ class MediaPlayerWrapper { } } MediaData newData = new MediaData( Util.toMetadata(getMetadata()), getPlaybackState(), Util.toMetadataList(getQueue())); if (newData.equals(mCurrentData)) { // This may happen if the controller is fully synced by the time the // first update is completed Log.v(TAG, "Trying to update with last sent metadata"); return; } synchronized (mCallbackLock) { if (mRegisteredCallback == null) { Log.e(TAG, mPackageName + "Trying to send an update with no registered callback"); return; } Log.v(TAG, "trySendMediaUpdate(): Metadata has been updated for " + mPackageName); mRegisteredCallback.mediaUpdatedCallback(newData); } mCurrentData = newData; sendMediaUpdate(); } @Override Loading android/app/tests/unit/src/com/android/bluetooth/newavrcp/MediaPlayerWrapperTest.java +17 −1 Original line number Diff line number Diff line Loading @@ -562,7 +562,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, "Mismatch Title"); doReturn(mTestMetadata.build()).when(mMockController).getMetadata(); controllerCallbacks.onMetadataChanged(mTestMetadata.build()); Loading @@ -572,6 +572,22 @@ public class MediaPlayerWrapperTest { // Assert that there was a timeout verify(mFailHandler).onTerribleFailure(any(), any(), anyBoolean()); // Assert that the callback was called with the mismatch data verify(mTestCbs, times(1)).mediaUpdatedCallback(mMediaUpdateData.capture()); MediaData data = mMediaUpdateData.getValue(); Assert.assertEquals( "Returned Metadata isn't equal to given Metadata", data.metadata, Util.toMetadata(mTestMetadata.build())); Assert.assertEquals( "Returned PlaybackState isn't equal to given PlaybackState", data.state.toString(), mTestState.build().toString()); Assert.assertEquals( "Returned Queue isn't equal to given Queue", data.queue, Util.toMetadataList(getQueueFromDescriptions(mTestQueue))); } /* Loading Loading
android/app/src/com/android/bluetooth/newavrcp/MediaPlayerWrapper.java +31 −25 Original line number Diff line number Diff line Loading @@ -278,9 +278,36 @@ class MediaPlayerWrapper { d("Controller for " + mPackageName + " was updated."); } private void sendMediaUpdate() { MediaData newData = new MediaData( Util.toMetadata(getMetadata()), getPlaybackState(), Util.toMetadataList(getQueue())); if (newData.equals(mCurrentData)) { // This may happen if the controller is fully synced by the time the // first update is completed Log.v(TAG, "Trying to update with last sent metadata"); return; } synchronized (mCallbackLock) { if (mRegisteredCallback == null) { Log.e(TAG, mPackageName + "Trying to send an update with no registered callback"); return; } Log.v(TAG, "trySendMediaUpdate(): Metadata has been updated for " + mPackageName); mRegisteredCallback.mediaUpdatedCallback(newData); } mCurrentData = newData; } class TimeoutHandler extends Handler { private static final int MSG_TIMEOUT = 0; private static final long CALLBACK_TIMEOUT_MS = 1000; private static final long CALLBACK_TIMEOUT_MS = 2000; TimeoutHandler(Looper looper) { super(looper); Loading @@ -301,6 +328,8 @@ class MediaPlayerWrapper { Log.e(TAG, " └ QueueItem(" + i + "): " + current_queue.get(i)); } sendMediaUpdate(); // TODO(apanicke): Add metric collection here. if (sTesting) Log.wtfStack(TAG, "Crashing the stack"); Loading Loading @@ -342,30 +371,7 @@ class MediaPlayerWrapper { } } MediaData newData = new MediaData( Util.toMetadata(getMetadata()), getPlaybackState(), Util.toMetadataList(getQueue())); if (newData.equals(mCurrentData)) { // This may happen if the controller is fully synced by the time the // first update is completed Log.v(TAG, "Trying to update with last sent metadata"); return; } synchronized (mCallbackLock) { if (mRegisteredCallback == null) { Log.e(TAG, mPackageName + "Trying to send an update with no registered callback"); return; } Log.v(TAG, "trySendMediaUpdate(): Metadata has been updated for " + mPackageName); mRegisteredCallback.mediaUpdatedCallback(newData); } mCurrentData = newData; sendMediaUpdate(); } @Override Loading
android/app/tests/unit/src/com/android/bluetooth/newavrcp/MediaPlayerWrapperTest.java +17 −1 Original line number Diff line number Diff line Loading @@ -562,7 +562,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, "Mismatch Title"); doReturn(mTestMetadata.build()).when(mMockController).getMetadata(); controllerCallbacks.onMetadataChanged(mTestMetadata.build()); Loading @@ -572,6 +572,22 @@ public class MediaPlayerWrapperTest { // Assert that there was a timeout verify(mFailHandler).onTerribleFailure(any(), any(), anyBoolean()); // Assert that the callback was called with the mismatch data verify(mTestCbs, times(1)).mediaUpdatedCallback(mMediaUpdateData.capture()); MediaData data = mMediaUpdateData.getValue(); Assert.assertEquals( "Returned Metadata isn't equal to given Metadata", data.metadata, Util.toMetadata(mTestMetadata.build())); Assert.assertEquals( "Returned PlaybackState isn't equal to given PlaybackState", data.state.toString(), mTestState.build().toString()); Assert.assertEquals( "Returned Queue isn't equal to given Queue", data.queue, Util.toMetadataList(getQueueFromDescriptions(mTestQueue))); } /* Loading