Search in sources :

Example 16 with MediaSession

use of androidx.media2.session.MediaSession in project ExoPlayer by google.

the class SessionCallbackBuilderTest method allowedCommand_whenPlaylistSet_allowsSkipTo.

@Test
public void allowedCommand_whenPlaylistSet_allowsSkipTo() throws Exception {
    List<MediaItem> testPlaylist = new ArrayList<>();
    testPlaylist.add(TestUtils.createMediaItem(R.raw.video_desks));
    testPlaylist.add(TestUtils.createMediaItem(R.raw.video_not_seekable));
    int testRewindIncrementMs = 100;
    int testFastForwardIncrementMs = 100;
    try (MediaSession session = createMediaSession(sessionPlayerConnector, new SessionCallbackBuilder(context, sessionPlayerConnector).setRatingCallback((mediaSession, controller, mediaId, rating) -> SessionResult.RESULT_ERROR_BAD_VALUE).setRewindIncrementMs(testRewindIncrementMs).setFastForwardIncrementMs(testFastForwardIncrementMs).setMediaItemProvider(new SessionCallbackBuilder.MediaIdMediaItemProvider()).build())) {
        assertPlayerResultSuccess(sessionPlayerConnector.setPlaylist(testPlaylist, null));
        assertPlayerResultSuccess(sessionPlayerConnector.prepare());
        OnConnectedListener connectedListener = (controller, allowedCommands) -> {
            List<Integer> allowedCommandCodes = Arrays.asList(SessionCommand.COMMAND_CODE_PLAYER_SKIP_TO_NEXT_PLAYLIST_ITEM, SessionCommand.COMMAND_CODE_PLAYER_SEEK_TO, SessionCommand.COMMAND_CODE_SESSION_REWIND, SessionCommand.COMMAND_CODE_SESSION_FAST_FORWARD);
            assertAllowedCommands(allowedCommandCodes, allowedCommands);
            List<Integer> disallowedCommandCodes = Arrays.asList(SessionCommand.COMMAND_CODE_PLAYER_SKIP_TO_PREVIOUS_PLAYLIST_ITEM);
            assertDisallowedCommands(disallowedCommandCodes, allowedCommands);
        };
        CountDownLatch allowedCommandChangedLatch = new CountDownLatch(1);
        OnAllowedCommandsChangedListener allowedCommandChangedListener = (controller, allowedCommands) -> {
            List<Integer> allowedCommandCodes = Arrays.asList(SessionCommand.COMMAND_CODE_PLAYER_SKIP_TO_PREVIOUS_PLAYLIST_ITEM);
            assertAllowedCommands(allowedCommandCodes, allowedCommands);
            List<Integer> disallowedCommandCodes = Arrays.asList(SessionCommand.COMMAND_CODE_PLAYER_SKIP_TO_NEXT_PLAYLIST_ITEM, SessionCommand.COMMAND_CODE_PLAYER_SEEK_TO, SessionCommand.COMMAND_CODE_SESSION_REWIND, SessionCommand.COMMAND_CODE_SESSION_FAST_FORWARD);
            assertDisallowedCommands(disallowedCommandCodes, allowedCommands);
            allowedCommandChangedLatch.countDown();
        };
        try (MediaController controller = createConnectedController(session, connectedListener, allowedCommandChangedListener)) {
            assertPlayerResultSuccess(sessionPlayerConnector.skipToNextPlaylistItem());
            assertThat(allowedCommandChangedLatch.await(CONTROLLER_COMMAND_WAIT_TIME_MS, MILLISECONDS)).isTrue();
            // Also test whether the rewind fails as expected.
            assertSessionResultFailure(controller.rewind());
            assertThat(sessionPlayerConnector.getCurrentPosition()).isEqualTo(0);
            assertThat(controller.getCurrentPosition()).isEqualTo(0);
        }
    }
}
Also used : Context(android.content.Context) HeartRating(androidx.media2.session.HeartRating) Arrays(java.util.Arrays) Bundle(android.os.Bundle) Uri(android.net.Uri) MediaSession(androidx.media2.session.MediaSession) RunWith(org.junit.runner.RunWith) SessionResult(androidx.media2.session.SessionResult) AndroidJUnit4(androidx.test.ext.junit.runners.AndroidJUnit4) TestUtils.assertPlayerResultSuccess(com.google.android.exoplayer2.ext.media2.TestUtils.assertPlayerResultSuccess) ApplicationProvider(androidx.test.core.app.ApplicationProvider) ArrayList(java.util.ArrayList) Future(java.util.concurrent.Future) SessionCommand(androidx.media2.session.SessionCommand) ContextCompat(androidx.core.content.ContextCompat) LargeTest(androidx.test.filters.LargeTest) Before(org.junit.Before) SessionPlayer(androidx.media2.common.SessionPlayer) MediaMetadata(androidx.media2.common.MediaMetadata) Truth.assertWithMessage(com.google.common.truth.Truth.assertWithMessage) Executor(java.util.concurrent.Executor) TextUtils(android.text.TextUtils) UriMediaItem(androidx.media2.common.UriMediaItem) Test(org.junit.Test) MILLISECONDS(java.util.concurrent.TimeUnit.MILLISECONDS) Truth.assertThat(com.google.common.truth.Truth.assertThat) MediaItem(androidx.media2.common.MediaItem) Rating(androidx.media2.common.Rating) R(com.google.android.exoplayer2.ext.media2.test.R) CountDownLatch(java.util.concurrent.CountDownLatch) SessionCommandGroup(androidx.media2.session.SessionCommandGroup) List(java.util.List) Nullable(androidx.annotation.Nullable) Rule(org.junit.Rule) MediaController(androidx.media2.session.MediaController) RawResourceDataSource(com.google.android.exoplayer2.upstream.RawResourceDataSource) MediaController(androidx.media2.session.MediaController) ArrayList(java.util.ArrayList) CountDownLatch(java.util.concurrent.CountDownLatch) MediaSession(androidx.media2.session.MediaSession) UriMediaItem(androidx.media2.common.UriMediaItem) MediaItem(androidx.media2.common.MediaItem) ArrayList(java.util.ArrayList) List(java.util.List) LargeTest(androidx.test.filters.LargeTest) Test(org.junit.Test)

Aggregations

MediaController (androidx.media2.session.MediaController)14 MediaSession (androidx.media2.session.MediaSession)13 LargeTest (androidx.test.filters.LargeTest)13 Test (org.junit.Test)13 SessionCommandGroup (androidx.media2.session.SessionCommandGroup)12 CountDownLatch (java.util.concurrent.CountDownLatch)12 Nullable (androidx.annotation.Nullable)11 MediaItem (androidx.media2.common.MediaItem)10 SessionCommand (androidx.media2.session.SessionCommand)10 Context (android.content.Context)9 Uri (android.net.Uri)9 Bundle (android.os.Bundle)9 TextUtils (android.text.TextUtils)9 ContextCompat (androidx.core.content.ContextCompat)9 MediaMetadata (androidx.media2.common.MediaMetadata)9 Rating (androidx.media2.common.Rating)9 SessionPlayer (androidx.media2.common.SessionPlayer)9 UriMediaItem (androidx.media2.common.UriMediaItem)9 HeartRating (androidx.media2.session.HeartRating)9 SessionResult (androidx.media2.session.SessionResult)9