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

Commit acda929f authored by Ted Wang's avatar Ted Wang
Browse files

Allow playback state update even when there is no metadata

* Separate metadata and playback state availabilities into two separate states
* Allow playback state update even if metadata received from MediaController is invalid
* This is because some MediaController don't provide metadata at all. The fluoride stack
  needs to update playback state even for this kind of MediaControllers.

Bug: 130278384
Test: manual
Change-Id: I2971892da39e1cd969d23cabd41ec109d83a7bea
parent da5c6ad0
Loading
Loading
Loading
Loading
+10 −6
Original line number Diff line number Diff line
@@ -62,14 +62,18 @@ class MediaPlayerWrapper {
        void mediaUpdatedCallback(MediaData data);
    }

    boolean isReady() {
    boolean isPlaybackStateReady() {
        if (getPlaybackState() == null) {
            d("isReady(): PlaybackState is null");
            d("isPlaybackStateReady(): PlaybackState is null");
            return false;
        }

        return true;
    }

    boolean isMetadataReady() {
        if (getMetadata() == null) {
            d("isReady(): Metadata is null");
            d("isMetadataReady(): Metadata is null");
            return false;
        }

@@ -372,7 +376,7 @@ class MediaPlayerWrapper {

        @Override
        public void onMetadataChanged(@Nullable MediaMetadata metadata) {
            if (!isReady()) {
            if (!isMetadataReady()) {
                Log.v(TAG, "onMetadataChanged(): " + mPackageName
                        + " tried to update with no queue");
                return;
@@ -406,7 +410,7 @@ class MediaPlayerWrapper {

        @Override
        public void onPlaybackStateChanged(@Nullable PlaybackState state) {
            if (!isReady()) {
            if (!isPlaybackStateReady()) {
                Log.v(TAG, "onPlaybackStateChanged(): " + mPackageName
                        + " tried to update with no queue");
                return;
@@ -435,7 +439,7 @@ class MediaPlayerWrapper {

        @Override
        public void onQueueChanged(@Nullable List<MediaSession.QueueItem> queue) {
            if (!isReady()) {
            if (!isPlaybackStateReady() || !isMetadataReady()) {
                Log.v(TAG, "onQueueChanged(): " + mPackageName
                        + " tried to update with no queue");
                return;
+10 −8
Original line number Diff line number Diff line
@@ -152,23 +152,24 @@ public class MediaPlayerWrapperTest {
    @Test
    public void testIsReady() {
        MediaPlayerWrapper wrapper = MediaPlayerWrapper.wrap(mMockController, mThread.getLooper());
        Assert.assertTrue(wrapper.isReady());
        Assert.assertTrue(wrapper.isPlaybackStateReady());
        Assert.assertTrue(wrapper.isMetadataReady());

        // Test isReady() is false when the playback state is null
        // Test isPlaybackStateReady() is false when the playback state is null
        doReturn(null).when(mMockController).getPlaybackState();
        Assert.assertFalse(wrapper.isReady());
        Assert.assertFalse(wrapper.isPlaybackStateReady());

        // Restore the old playback state
        doReturn(mTestState.build()).when(mMockController).getPlaybackState();
        Assert.assertTrue(wrapper.isReady());
        Assert.assertTrue(wrapper.isPlaybackStateReady());

        // Test isReady() is false when the metadata is null
        // Test isMetadataReady() is false when the metadata is null
        doReturn(null).when(mMockController).getMetadata();
        Assert.assertFalse(wrapper.isReady());
        Assert.assertFalse(wrapper.isMetadataReady());

        // Restore the old metadata
        doReturn(mTestMetadata.build()).when(mMockController).getMetadata();
        Assert.assertTrue(wrapper.isReady());
        Assert.assertTrue(wrapper.isMetadataReady());
    }

    /*
@@ -179,7 +180,8 @@ public class MediaPlayerWrapperTest {
    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());
        Assert.assertTrue(wrapper.isPlaybackStateReady());
        Assert.assertTrue(wrapper.isMetadataReady());
        wrapper.registerCallback(mTestCbs);

        // Create a new MediaController that has different metadata than the previous controller