Search in sources :

Example 76 with Events

use of androidx.media3.common.Player.Events in project media by androidx.

the class MediaControllerStateMaskingWithMediaSessionCompatTest method setPlayWhenReady.

@Test
public void setPlayWhenReady() throws Exception {
    boolean testPlayWhenReady = true;
    boolean testIsPlaying = true;
    Events testEvents = new Events(new FlagSet.Builder().addAll(EVENT_PLAY_WHEN_READY_CHANGED, EVENT_IS_PLAYING_CHANGED).build());
    session.setPlaybackState(new PlaybackStateCompat.Builder().setState(PlaybackStateCompat.STATE_PAUSED, /* position= */
    0, /* playbackSpeed= */
    1.0f).build());
    MediaController controller = controllerTestRule.createController(session.getSessionToken());
    CountDownLatch latch = new CountDownLatch(3);
    AtomicBoolean playWhenReadyFromCallbackRef = new AtomicBoolean();
    AtomicBoolean isPlayingFromCallbackRef = new AtomicBoolean();
    AtomicReference<Player.Events> onEventsRef = new AtomicReference<>();
    Player.Listener listener = new Player.Listener() {

        @Override
        public void onPlayWhenReadyChanged(boolean playWhenReady, @Player.PlayWhenReadyChangeReason int reason) {
            playWhenReadyFromCallbackRef.set(playWhenReady);
            latch.countDown();
        }

        @Override
        public void onIsPlayingChanged(boolean isPlaying) {
            isPlayingFromCallbackRef.set(isPlaying);
            latch.countDown();
        }

        @Override
        public void onEvents(Player player, Player.Events events) {
            onEventsRef.set(events);
            latch.countDown();
        }
    };
    threadTestRule.getHandler().postAndSync(() -> controller.addListener(listener));
    AtomicBoolean playWhenReadyFromGetterRef = new AtomicBoolean();
    AtomicBoolean isPlayingFromGetterRef = new AtomicBoolean();
    threadTestRule.getHandler().postAndSync(() -> {
        controller.setPlayWhenReady(testPlayWhenReady);
        playWhenReadyFromGetterRef.set(controller.getPlayWhenReady());
        isPlayingFromGetterRef.set(controller.isPlaying());
    });
    assertThat(latch.await(TIMEOUT_MS, MILLISECONDS)).isTrue();
    assertThat(playWhenReadyFromCallbackRef.get()).isEqualTo(testPlayWhenReady);
    assertThat(isPlayingFromCallbackRef.get()).isEqualTo(testIsPlaying);
    assertThat(onEventsRef.get()).isEqualTo(testEvents);
    assertThat(playWhenReadyFromGetterRef.get()).isEqualTo(testPlayWhenReady);
    assertThat(isPlayingFromGetterRef.get()).isEqualTo(testIsPlaying);
}
Also used : Player(androidx.media3.common.Player) AtomicReference(java.util.concurrent.atomic.AtomicReference) CountDownLatch(java.util.concurrent.CountDownLatch) FlagSet(androidx.media3.common.FlagSet) PlaybackStateCompat(android.support.v4.media.session.PlaybackStateCompat) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) Events(androidx.media3.common.Player.Events) LargeTest(androidx.test.filters.LargeTest) Test(org.junit.Test)

Example 77 with Events

use of androidx.media3.common.Player.Events in project media by androidx.

the class MediaControllerStateMaskingWithMediaSessionCompatTest method removeMediaItems_includeCurrentMediaItem_movesCurrentItem.

@Test
public void removeMediaItems_includeCurrentMediaItem_movesCurrentItem() throws Exception {
    List<MediaItem> mediaItems = MediaTestUtils.createMediaItems(5);
    List<QueueItem> queue = MediaUtils.convertToQueueItemList(mediaItems);
    long testPosition = 200L;
    int initialMediaItemIndex = 2;
    MediaItem testCurrentMediaItem = mediaItems.get(initialMediaItemIndex);
    session.setPlaybackState(new PlaybackStateCompat.Builder().setState(PlaybackStateCompat.STATE_PAUSED, testPosition, /* playbackSpeed= */
    1.0f).setActiveQueueItemId(queue.get(initialMediaItemIndex).getQueueId()).build());
    session.setQueue(queue);
    int testFromIndex = 1;
    int testToIndex = 3;
    List<MediaItem> testMediaItems = new ArrayList<>(mediaItems.subList(0, testFromIndex));
    testMediaItems.addAll(mediaItems.subList(testToIndex, mediaItems.size()));
    int testCurrentMediaItemIndex = testFromIndex;
    Events testEvents = new Events(new FlagSet.Builder().addAll(EVENT_TIMELINE_CHANGED).build());
    MediaController controller = controllerTestRule.createController(session.getSessionToken());
    CountDownLatch latch = new CountDownLatch(2);
    AtomicReference<Timeline> timelineFromParamRef = new AtomicReference<>();
    AtomicInteger timelineChangedReasonRef = new AtomicInteger();
    AtomicReference<Player.Events> onEventsRef = new AtomicReference<>();
    Player.Listener listener = new Player.Listener() {

        @Override
        public void onTimelineChanged(Timeline timeline, @Player.TimelineChangeReason int reason) {
            timelineFromParamRef.set(timeline);
            timelineChangedReasonRef.set(reason);
            latch.countDown();
        }

        @Override
        public void onEvents(Player player, Player.Events events) {
            onEventsRef.set(events);
            latch.countDown();
        }
    };
    threadTestRule.getHandler().postAndSync(() -> controller.addListener(listener));
    AtomicInteger currentMediaItemIndexRef = new AtomicInteger();
    AtomicReference<Timeline> timelineFromGetterRef = new AtomicReference<>();
    threadTestRule.getHandler().postAndSync(() -> {
        controller.removeMediaItems(testFromIndex, testToIndex);
        currentMediaItemIndexRef.set(controller.getCurrentMediaItemIndex());
        timelineFromGetterRef.set(controller.getCurrentTimeline());
    });
    assertThat(latch.await(TIMEOUT_MS, MILLISECONDS)).isTrue();
    MediaTestUtils.assertTimelineContains(timelineFromParamRef.get(), testMediaItems);
    assertThat(timelineChangedReasonRef.get()).isEqualTo(TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED);
    assertThat(onEventsRef.get()).isEqualTo(testEvents);
    assertThat(currentMediaItemIndexRef.get()).isEqualTo(testCurrentMediaItemIndex);
    MediaTestUtils.assertTimelineContains(timelineFromGetterRef.get(), testMediaItems);
}
Also used : Player(androidx.media3.common.Player) ArrayList(java.util.ArrayList) AtomicReference(java.util.concurrent.atomic.AtomicReference) CountDownLatch(java.util.concurrent.CountDownLatch) FlagSet(androidx.media3.common.FlagSet) Timeline(androidx.media3.common.Timeline) Events(androidx.media3.common.Player.Events) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) MediaItem(androidx.media3.common.MediaItem) QueueItem(android.support.v4.media.session.MediaSessionCompat.QueueItem) LargeTest(androidx.test.filters.LargeTest) Test(org.junit.Test)

Example 78 with Events

use of androidx.media3.common.Player.Events in project media by androidx.

the class MediaControllerStateMaskingWithMediaSessionCompatTest method setShuffleModeEnabled.

@Test
public void setShuffleModeEnabled() throws Exception {
    boolean testShuffleModeEnabled = true;
    Events testEvents = new Events(new FlagSet.Builder().addAll(EVENT_SHUFFLE_MODE_ENABLED_CHANGED).build());
    MediaController controller = controllerTestRule.createController(session.getSessionToken());
    CountDownLatch latch = new CountDownLatch(2);
    AtomicBoolean shuffleModeEnabledFromCallbackRef = new AtomicBoolean();
    AtomicReference<Player.Events> onEventsRef = new AtomicReference<>();
    Player.Listener listener = new Player.Listener() {

        @Override
        public void onShuffleModeEnabledChanged(boolean shuffleModeEnabled) {
            shuffleModeEnabledFromCallbackRef.set(shuffleModeEnabled);
            latch.countDown();
        }

        @Override
        public void onEvents(Player player, Player.Events events) {
            onEventsRef.set(events);
            latch.countDown();
        }
    };
    threadTestRule.getHandler().postAndSync(() -> controller.addListener(listener));
    AtomicBoolean shuffleModeEnabledFromGetterRef = new AtomicBoolean();
    threadTestRule.getHandler().postAndSync(() -> {
        controller.setShuffleModeEnabled(testShuffleModeEnabled);
        shuffleModeEnabledFromGetterRef.set(controller.getShuffleModeEnabled());
    });
    assertThat(latch.await(TIMEOUT_MS, MILLISECONDS)).isTrue();
    assertThat(shuffleModeEnabledFromCallbackRef.get()).isEqualTo(testShuffleModeEnabled);
    assertThat(onEventsRef.get()).isEqualTo(testEvents);
    assertThat(shuffleModeEnabledFromGetterRef.get()).isEqualTo(testShuffleModeEnabled);
}
Also used : FlagSet(androidx.media3.common.FlagSet) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) Player(androidx.media3.common.Player) Events(androidx.media3.common.Player.Events) AtomicReference(java.util.concurrent.atomic.AtomicReference) CountDownLatch(java.util.concurrent.CountDownLatch) LargeTest(androidx.test.filters.LargeTest) Test(org.junit.Test)

Example 79 with Events

use of androidx.media3.common.Player.Events in project media by androidx.

the class MediaControllerStateMaskingWithMediaSessionCompatTest method prepare.

@Test
public void prepare() throws Exception {
    int testPlaybackState = Player.STATE_ENDED;
    Events testEvents = new Events(new FlagSet.Builder().addAll(EVENT_PLAYBACK_STATE_CHANGED).build());
    MediaController controller = controllerTestRule.createController(session.getSessionToken());
    CountDownLatch latch = new CountDownLatch(2);
    AtomicInteger playbackStateFromCallbackRef = new AtomicInteger();
    AtomicReference<Player.Events> onEventsRef = new AtomicReference<>();
    Player.Listener listener = new Player.Listener() {

        @Override
        public void onPlaybackStateChanged(int playbackState) {
            playbackStateFromCallbackRef.set(playbackState);
            latch.countDown();
        }

        @Override
        public void onEvents(Player player, Player.Events events) {
            onEventsRef.set(events);
            latch.countDown();
        }
    };
    threadTestRule.getHandler().postAndSync(() -> controller.addListener(listener));
    AtomicInteger playbackStateFromGetterRef = new AtomicInteger();
    AtomicReference<PlaybackException> playerErrorRef = new AtomicReference<>();
    threadTestRule.getHandler().postAndSync(() -> {
        controller.prepare();
        playbackStateFromGetterRef.set(controller.getPlaybackState());
        playerErrorRef.set(controller.getPlayerError());
    });
    assertThat(latch.await(TIMEOUT_MS, MILLISECONDS)).isTrue();
    assertThat(playbackStateFromCallbackRef.get()).isEqualTo(testPlaybackState);
    assertThat(onEventsRef.get()).isEqualTo(testEvents);
    assertThat(playbackStateFromGetterRef.get()).isEqualTo(testPlaybackState);
    assertThat(playerErrorRef.get()).isNull();
}
Also used : PlaybackException(androidx.media3.common.PlaybackException) Player(androidx.media3.common.Player) AtomicReference(java.util.concurrent.atomic.AtomicReference) CountDownLatch(java.util.concurrent.CountDownLatch) FlagSet(androidx.media3.common.FlagSet) Events(androidx.media3.common.Player.Events) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) LargeTest(androidx.test.filters.LargeTest) Test(org.junit.Test)

Aggregations

Test (org.junit.Test)65 Player (androidx.media3.common.Player)64 CountDownLatch (java.util.concurrent.CountDownLatch)58 AtomicReference (java.util.concurrent.atomic.AtomicReference)56 LargeTest (androidx.test.filters.LargeTest)52 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)46 Bundle (android.os.Bundle)34 Timeline (androidx.media3.common.Timeline)31 FlagSet (androidx.media3.common.FlagSet)24 MediaItem (androidx.media3.common.MediaItem)24 Events (androidx.media3.common.Player.Events)20 PositionInfo (androidx.media3.common.Player.PositionInfo)19 Nullable (androidx.annotation.Nullable)17 MediaTestUtils.createTimeline (androidx.media3.session.MediaTestUtils.createTimeline)17 ArrayList (java.util.ArrayList)17 AtomicLong (java.util.concurrent.atomic.AtomicLong)15 QueueItem (android.support.v4.media.session.MediaSessionCompat.QueueItem)12 Window (androidx.media3.common.Timeline.Window)8 PlaybackStateCompat (android.support.v4.media.session.PlaybackStateCompat)6 MediaMetadata (androidx.media3.common.MediaMetadata)6