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

Commit e6d6cf49 authored by Jaewan Kim's avatar Jaewan Kim
Browse files

MediaSession2: Move MediaSession2.PlaylistParams to updatable

Bug: 72670266
Test: Run all MediaComponents tests once
Change-Id: I12033564bf010a99a47fc53db4283baa3cb968c2
parent 6b360d14
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -595,7 +595,8 @@ public class MediaController2Impl implements MediaController2Provider {
                Log.w(TAG, "Don't fail silently here. Highly likely a bug");
                return;
            }
            controller.pushPlaylistParamsChanges(PlaylistParams.fromBundle(params));
            controller.pushPlaylistParamsChanges(
                    PlaylistParams.fromBundle(controller.getContext(), params));
        }

        @Override
+73 −0
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.ResolveInfo;
import android.media.MediaItem2;
import android.media.MediaLibraryService2;
import android.media.MediaMetadata2;
import android.media.MediaPlayerInterface;
import android.media.MediaPlayerInterface.PlaybackListener;
import android.media.MediaSession2;
@@ -40,6 +41,8 @@ import android.media.MediaSession2.CommandButton;
import android.media.MediaSession2.CommandGroup;
import android.media.MediaSession2.ControllerInfo;
import android.media.MediaSession2.PlaylistParams;
import android.media.MediaSession2.PlaylistParams.RepeatMode;
import android.media.MediaSession2.PlaylistParams.ShuffleMode;
import android.media.MediaSession2.SessionCallback;
import android.media.MediaSessionService2;
import android.media.PlaybackState2;
@@ -814,4 +817,74 @@ public class MediaSession2Impl implements MediaSession2Provider {
            return (ControllerInfoImpl) controller.getProvider();
        }
    }

    public static class PlaylistParamsImpl implements PlaylistParamsProvider {
        /**
         * Keys used for converting a PlaylistParams object to a bundle object and vice versa.
         */
        private static final String KEY_REPEAT_MODE =
                "android.media.session2.playlistparams2.repeat_mode";
        private static final String KEY_SHUFFLE_MODE =
                "android.media.session2.playlistparams2.shuffle_mode";
        private static final String KEY_MEDIA_METADATA2_BUNDLE =
                "android.media.session2.playlistparams2.metadata2_bundle";

        private Context mContext;
        private PlaylistParams mInstance;
        private @RepeatMode int mRepeatMode;
        private @ShuffleMode int mShuffleMode;
        private MediaMetadata2 mPlaylistMetadata;

        public PlaylistParamsImpl(Context context, PlaylistParams instance,
                @RepeatMode int repeatMode, @ShuffleMode int shuffleMode,
                MediaMetadata2 playlistMetadata) {
            // TODO(jaewan): Sanity check
            mContext = context;
            mInstance = instance;
            mRepeatMode = repeatMode;
            mShuffleMode = shuffleMode;
            mPlaylistMetadata = playlistMetadata;
        }

        public @RepeatMode int getRepeatMode_impl() {
            return mRepeatMode;
        }

        public @ShuffleMode int getShuffleMode_impl() {
            return mShuffleMode;
        }

        public MediaMetadata2 getPlaylistMetadata_impl() {
            return mPlaylistMetadata;
        }

        @Override
        public Bundle toBundle_impl() {
            Bundle bundle = new Bundle();
            bundle.putInt(KEY_REPEAT_MODE, mRepeatMode);
            bundle.putInt(KEY_SHUFFLE_MODE, mShuffleMode);
            if (mPlaylistMetadata != null) {
                bundle.putBundle(KEY_MEDIA_METADATA2_BUNDLE, mPlaylistMetadata.toBundle());
            }
            return bundle;
        }

        public static PlaylistParams fromBundle(Context context, Bundle bundle) {
            if (bundle == null) {
                return null;
            }
            if (!bundle.containsKey(KEY_REPEAT_MODE) || !bundle.containsKey(KEY_SHUFFLE_MODE)) {
                return null;
            }

            Bundle metadataBundle = bundle.getBundle(KEY_MEDIA_METADATA2_BUNDLE);
            MediaMetadata2 metadata = metadataBundle == null
                    ? null : MediaMetadata2.fromBundle(context, metadataBundle);

            return new PlaylistParams(context,
                    bundle.getInt(KEY_REPEAT_MODE),
                    bundle.getInt(KEY_SHUFFLE_MODE),
                    metadata);
        }
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -225,7 +225,7 @@ public class MediaSession2Stub extends IMediaSession2.Stub {
                    break;
                case MediaSession2.COMMAND_CODE_PLAYBACK_SET_PLAYLIST_PARAMS:
                    session.getInstance().setPlaylistParams(
                            PlaylistParams.fromBundle(
                            PlaylistParams.fromBundle(session.getContext(),
                                    args.getBundle(ARGUMENT_KEY_PLAYLIST_PARAMS)));
                    break;
                default:
+17 −0
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ import android.media.MediaSession2;
import android.media.MediaSession2.Command;
import android.media.MediaSession2.CommandGroup;
import android.media.MediaSession2.ControllerInfo;
import android.media.MediaSession2.PlaylistParams;
import android.media.MediaSession2.SessionCallback;
import android.media.MediaSessionService2;
import android.media.SessionPlayer2;
@@ -48,6 +49,7 @@ import android.media.update.MediaItem2Provider;
import android.media.update.MediaLibraryService2Provider.MediaLibrarySessionProvider;
import android.media.update.MediaMetadata2Provider;
import android.media.update.MediaSession2Provider;
import android.media.update.MediaSession2Provider.PlaylistParamsProvider;
import android.media.update.MediaSessionService2Provider;
import android.media.update.SessionPlayer2Provider;
import android.media.update.SessionToken2Provider;
@@ -70,6 +72,7 @@ import com.android.media.MediaLibraryService2Impl;
import com.android.media.MediaLibraryService2Impl.MediaLibrarySessionImpl;
import com.android.media.MediaMetadata2Impl;
import com.android.media.MediaSession2Impl;
import com.android.media.MediaSession2Impl.PlaylistParamsImpl;
import com.android.media.MediaSessionService2Impl;
import com.android.media.SessionToken2Impl;
import com.android.widget.MediaControlView2Impl;
@@ -132,6 +135,7 @@ public class ApiFactory implements StaticProvider {
        return MediaSession2Impl.CommandGroupImpl.fromBundle_impl(context, commands);
    }

    @Override
    public MediaSession2Provider.ControllerInfoProvider createMediaSession2ControllerInfo(
            Context context, ControllerInfo instance, int uid, int pid, String packageName,
            IInterface callback) {
@@ -139,6 +143,19 @@ public class ApiFactory implements StaticProvider {
                instance, uid, pid, packageName, (IMediaSession2Callback) callback);
    }

    @Override
    public PlaylistParamsProvider createMediaSession2PlaylistParams(Context context,
            PlaylistParams playlistParams, int repeatMode, int shuffleMode,
            MediaMetadata2 playlistMetadata) {
        return new PlaylistParamsImpl(context, playlistParams, repeatMode, shuffleMode,
                playlistMetadata);
    }

    @Override
    public PlaylistParams fromBundle_PlaylistParams(Context context, Bundle bundle) {
        return PlaylistParamsImpl.fromBundle(context, bundle);
    }

    @Override
    public MediaSessionService2Provider createMediaSessionService2(
            MediaSessionService2 instance) {
+6 −4
Original line number Diff line number Diff line
@@ -43,6 +43,8 @@ import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;

import static android.media.TestUtils.createPlaybackState;
import static android.media.TestUtils.ensurePlaylistParamsModeEquals;

import static org.junit.Assert.*;

/**
@@ -200,7 +202,7 @@ public class MediaController2Test extends MediaSession2TestBase {

    @Test
    public void testGetSetPlaylistParams() throws Exception {
        final PlaylistParams params = new PlaylistParams(
        final PlaylistParams params = new PlaylistParams(mContext,
                PlaylistParams.REPEAT_MODE_ALL,
                PlaylistParams.SHUFFLE_MODE_ALL,
                null /* PlaylistMetadata */);
@@ -209,7 +211,7 @@ public class MediaController2Test extends MediaSession2TestBase {
        final TestControllerCallbackInterface callback = new TestControllerCallbackInterface() {
            @Override
            public void onPlaylistParamsChanged(PlaylistParams givenParams) {
                TestUtils.equals(params.toBundle(), givenParams.toBundle());
                ensurePlaylistParamsModeEquals(params, givenParams);
                latch.countDown();
            }
        };
@@ -218,8 +220,8 @@ public class MediaController2Test extends MediaSession2TestBase {
        controller.setPlaylistParams(params);

        assertTrue(latch.await(WAIT_TIME_MS, TimeUnit.MILLISECONDS));
        TestUtils.equals(params.toBundle(), mSession.getPlaylistParams().toBundle());
        TestUtils.equals(params.toBundle(), controller.getPlaylistParams().toBundle());
        ensurePlaylistParamsModeEquals(params, mSession.getPlaylistParams());
        ensurePlaylistParamsModeEquals(params, controller.getPlaylistParams());
    }

    @Test
Loading