Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b3197b48 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Return only fresh data from the MediaController"

parents 5eb83ad3 ef8c625a
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -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 "";
@@ -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() {
@@ -257,7 +257,7 @@ public class MediaPlayerList {
            return ret;
        }

        return getActivePlayer().getCurrentMediaData().queue;
        return getActivePlayer().getCurrentQueue();
    }

    void playItem(int playerId, boolean nowPlaying, String mediaId) {
+29 −2
Original line number Diff line number Diff line
@@ -119,7 +119,11 @@ class MediaPlayerWrapper {
        return mMediaController.getMetadata();
    }

    protected PlaybackState getPlaybackState() {
    Metadata getCurrentMetadata() {
        return Util.toMetadata(getMetadata());
    }

    PlaybackState getPlaybackState() {
        return mMediaController.getPlaybackState();
    }

@@ -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) {
@@ -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);
    }

@@ -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.");
    }
+30 −0
Original line number Diff line number Diff line
@@ -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