mirror of
https://github.com/samsonjs/media.git
synced 2026-03-31 10:25:48 +00:00
Make commands to seek unavailable during ads
ExoPlayer does not support seeking during ads. PiperOrigin-RevId: 362274785
This commit is contained in:
parent
d9aee0f6a4
commit
0c9b02bf44
3 changed files with 121 additions and 60 deletions
|
|
@ -580,31 +580,44 @@ public class CastPlayerTest {
|
|||
verify(mockListener).onMediaItemTransition(any(), anyInt());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void isCommandAvailable_isTrueForAvailableCommands() {
|
||||
int[] mediaQueueItemIds = new int[] {1, 2};
|
||||
List<MediaItem> mediaItems = createMediaItems(mediaQueueItemIds);
|
||||
|
||||
castPlayer.addMediaItems(mediaItems);
|
||||
updateTimeLine(mediaItems, mediaQueueItemIds, /* currentItemId= */ 1);
|
||||
|
||||
assertThat(castPlayer.isCommandAvailable(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM)).isTrue();
|
||||
assertThat(castPlayer.isCommandAvailable(COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM)).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void seekTo_nextWindow_notifiesAvailableCommandsChanged() {
|
||||
when(mockRemoteMediaClient.queueJumpToItem(anyInt(), anyLong(), eq(null)))
|
||||
.thenReturn(mockPendingResult);
|
||||
Player.Commands commandsWithHasNext = createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM);
|
||||
Player.Commands commandsWithHasPrevious = createCommands(COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM);
|
||||
Player.Commands commandsWithHasNextAndPrevious =
|
||||
Player.Commands commandsWithSeekToNext = createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM);
|
||||
Player.Commands commandsWithSeekToPrevious =
|
||||
createCommands(COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM);
|
||||
Player.Commands commandsWithSeekToNextAndPrevious =
|
||||
createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM, COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM);
|
||||
int[] mediaQueueItemIds = new int[] {1, 2, 3, 4};
|
||||
List<MediaItem> mediaItems = createMediaItems(mediaQueueItemIds);
|
||||
|
||||
castPlayer.addMediaItems(mediaItems);
|
||||
updateTimeLine(mediaItems, mediaQueueItemIds, /* currentItemId= */ 1);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithHasNext);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToNext);
|
||||
verify(mockListener).onAvailableCommandsChanged(any());
|
||||
|
||||
castPlayer.seekTo(/* windowIndex= */ 1, /* positionMs= */ 0);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithHasNextAndPrevious);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToNextAndPrevious);
|
||||
verify(mockListener, times(2)).onAvailableCommandsChanged(any());
|
||||
|
||||
castPlayer.seekTo(/* windowIndex= */ 2, /* positionMs= */ 0);
|
||||
verify(mockListener, times(2)).onAvailableCommandsChanged(any());
|
||||
|
||||
castPlayer.seekTo(/* windowIndex= */ 3, /* positionMs= */ 0);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithHasPrevious);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToPrevious);
|
||||
verify(mockListener, times(3)).onAvailableCommandsChanged(any());
|
||||
}
|
||||
|
||||
|
|
@ -612,27 +625,28 @@ public class CastPlayerTest {
|
|||
public void seekTo_previousWindow_notifiesAvailableCommandsChanged() {
|
||||
when(mockRemoteMediaClient.queueJumpToItem(anyInt(), anyLong(), eq(null)))
|
||||
.thenReturn(mockPendingResult);
|
||||
Player.Commands commandsWithHasNext = createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM);
|
||||
Player.Commands commandsWithHasPrevious = createCommands(COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM);
|
||||
Player.Commands commandsWithHasNextAndPrevious =
|
||||
Player.Commands commandsWithSeekToNext = createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM);
|
||||
Player.Commands commandsWithSeekToPrevious =
|
||||
createCommands(COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM);
|
||||
Player.Commands commandsWithSeekToNextAndPrevious =
|
||||
createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM, COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM);
|
||||
int[] mediaQueueItemIds = new int[] {1, 2, 3, 4};
|
||||
List<MediaItem> mediaItems = createMediaItems(mediaQueueItemIds);
|
||||
|
||||
castPlayer.addMediaItems(mediaItems);
|
||||
updateTimeLine(mediaItems, mediaQueueItemIds, /* currentItemId= */ 4);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithHasPrevious);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToPrevious);
|
||||
verify(mockListener).onAvailableCommandsChanged(any());
|
||||
|
||||
castPlayer.seekTo(/* windowIndex= */ 2, /* positionMs= */ 0);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithHasNextAndPrevious);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToNextAndPrevious);
|
||||
verify(mockListener, times(2)).onAvailableCommandsChanged(any());
|
||||
|
||||
castPlayer.seekTo(/* windowIndex= */ 1, /* positionMs= */ 0);
|
||||
verify(mockListener, times(2)).onAvailableCommandsChanged(any());
|
||||
|
||||
castPlayer.seekTo(/* windowIndex= */ 0, /* positionMs= */ 0);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithHasNext);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToNext);
|
||||
verify(mockListener, times(3)).onAvailableCommandsChanged(any());
|
||||
}
|
||||
|
||||
|
|
@ -652,7 +666,7 @@ public class CastPlayerTest {
|
|||
|
||||
@Test
|
||||
public void addMediaItem_atTheEnd_notifiesAvailableCommandsChanged() {
|
||||
Player.Commands commandsWithHasNext = createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM);
|
||||
Player.Commands commandsWithSeekToNext = createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM);
|
||||
MediaItem mediaItem1 = createMediaItem(/* mediaQueueItemId= */ 1);
|
||||
MediaItem mediaItem2 = createMediaItem(/* mediaQueueItemId= */ 2);
|
||||
MediaItem mediaItem3 = createMediaItem(/* mediaQueueItemId= */ 3);
|
||||
|
|
@ -669,7 +683,7 @@ public class CastPlayerTest {
|
|||
ImmutableList.of(mediaItem1, mediaItem2),
|
||||
/* mediaQueueItemIds= */ new int[] {1, 2},
|
||||
/* currentItemId= */ 1);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithHasNext);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToNext);
|
||||
verify(mockListener).onAvailableCommandsChanged(any());
|
||||
|
||||
castPlayer.addMediaItem(mediaItem3);
|
||||
|
|
@ -682,7 +696,8 @@ public class CastPlayerTest {
|
|||
|
||||
@Test
|
||||
public void addMediaItem_atTheStart_notifiesAvailableCommandsChanged() {
|
||||
Player.Commands commandsWithHasPrevious = createCommands(COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM);
|
||||
Player.Commands commandsWithSeekToPrevious =
|
||||
createCommands(COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM);
|
||||
MediaItem mediaItem1 = createMediaItem(/* mediaQueueItemId= */ 1);
|
||||
MediaItem mediaItem2 = createMediaItem(/* mediaQueueItemId= */ 2);
|
||||
MediaItem mediaItem3 = createMediaItem(/* mediaQueueItemId= */ 3);
|
||||
|
|
@ -699,7 +714,7 @@ public class CastPlayerTest {
|
|||
ImmutableList.of(mediaItem2, mediaItem1),
|
||||
/* mediaQueueItemIds= */ new int[] {2, 1},
|
||||
/* currentItemId= */ 1);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithHasPrevious);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToPrevious);
|
||||
verify(mockListener).onAvailableCommandsChanged(any());
|
||||
|
||||
castPlayer.addMediaItem(/* index= */ 0, mediaItem3);
|
||||
|
|
@ -712,7 +727,7 @@ public class CastPlayerTest {
|
|||
|
||||
@Test
|
||||
public void removeMediaItem_atTheEnd_notifiesAvailableCommandsChanged() {
|
||||
Player.Commands commandsWithHasNext = createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM);
|
||||
Player.Commands commandsWithSeekToNext = createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM);
|
||||
MediaItem mediaItem1 = createMediaItem(/* mediaQueueItemId= */ 1);
|
||||
MediaItem mediaItem2 = createMediaItem(/* mediaQueueItemId= */ 2);
|
||||
MediaItem mediaItem3 = createMediaItem(/* mediaQueueItemId= */ 3);
|
||||
|
|
@ -722,7 +737,7 @@ public class CastPlayerTest {
|
|||
ImmutableList.of(mediaItem1, mediaItem2, mediaItem3),
|
||||
/* mediaQueueItemIds= */ new int[] {1, 2, 3},
|
||||
/* currentItemId= */ 1);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithHasNext);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToNext);
|
||||
verify(mockListener).onAvailableCommandsChanged(any());
|
||||
|
||||
castPlayer.removeMediaItem(/* index= */ 2);
|
||||
|
|
@ -752,7 +767,8 @@ public class CastPlayerTest {
|
|||
public void removeMediaItem_atTheStart_notifiesAvailableCommandsChanged() {
|
||||
when(mockRemoteMediaClient.queueJumpToItem(anyInt(), anyLong(), eq(null)))
|
||||
.thenReturn(mockPendingResult);
|
||||
Player.Commands commandsWithHasPrevious = createCommands(COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM);
|
||||
Player.Commands commandsWithSeekToPrevious =
|
||||
createCommands(COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM);
|
||||
MediaItem mediaItem1 = createMediaItem(/* mediaQueueItemId= */ 1);
|
||||
MediaItem mediaItem2 = createMediaItem(/* mediaQueueItemId= */ 2);
|
||||
MediaItem mediaItem3 = createMediaItem(/* mediaQueueItemId= */ 3);
|
||||
|
|
@ -762,7 +778,7 @@ public class CastPlayerTest {
|
|||
ImmutableList.of(mediaItem1, mediaItem2, mediaItem3),
|
||||
/* mediaQueueItemIds= */ new int[] {1, 2, 3},
|
||||
/* currentItemId= */ 3);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithHasPrevious);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToPrevious);
|
||||
verify(mockListener).onAvailableCommandsChanged(any());
|
||||
|
||||
castPlayer.removeMediaItem(/* index= */ 0);
|
||||
|
|
@ -790,7 +806,7 @@ public class CastPlayerTest {
|
|||
|
||||
@Test
|
||||
public void removeMediaItem_current_notifiesAvailableCommandsChanged() {
|
||||
Player.Commands commandsWithHasNext = createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM);
|
||||
Player.Commands commandsWithSeekToNext = createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM);
|
||||
MediaItem mediaItem1 = createMediaItem(/* mediaQueueItemId= */ 1);
|
||||
MediaItem mediaItem2 = createMediaItem(/* mediaQueueItemId= */ 2);
|
||||
|
||||
|
|
@ -799,7 +815,7 @@ public class CastPlayerTest {
|
|||
ImmutableList.of(mediaItem1, mediaItem2),
|
||||
/* mediaQueueItemIds= */ new int[] {1, 2},
|
||||
/* currentItemId= */ 1);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithHasNext);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToNext);
|
||||
verify(mockListener).onAvailableCommandsChanged(any());
|
||||
|
||||
castPlayer.removeMediaItem(/* index= */ 0);
|
||||
|
|
@ -815,7 +831,7 @@ public class CastPlayerTest {
|
|||
public void setRepeatMode_all_notifiesAvailableCommandsChanged() {
|
||||
when(mockRemoteMediaClient.queueSetRepeatMode(anyInt(), eq(null)))
|
||||
.thenReturn(mockPendingResult);
|
||||
Player.Commands commandsWithHasNextAndPrevious =
|
||||
Player.Commands commandsWithSeekToNextAndPrevious =
|
||||
createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM, COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM);
|
||||
int[] mediaQueueItemIds = new int[] {1};
|
||||
List<MediaItem> mediaItems = createMediaItems(mediaQueueItemIds);
|
||||
|
|
@ -825,7 +841,7 @@ public class CastPlayerTest {
|
|||
verify(mockListener, never()).onAvailableCommandsChanged(any());
|
||||
|
||||
castPlayer.setRepeatMode(Player.REPEAT_MODE_ALL);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithHasNextAndPrevious);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToNextAndPrevious);
|
||||
verify(mockListener).onAvailableCommandsChanged(any());
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -267,8 +267,8 @@ public abstract class BasePlayer implements Player {
|
|||
|
||||
protected Commands getAvailableCommands() {
|
||||
return new Commands.Builder()
|
||||
.addIf(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM, hasNext())
|
||||
.addIf(COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM, hasPrevious())
|
||||
.addIf(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM, hasNext() && !isPlayingAd())
|
||||
.addIf(COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM, hasPrevious() && !isPlayingAd())
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8070,11 +8070,51 @@ public final class ExoPlayerTest {
|
|||
exoPlayerTestRunner.assertMediaItemsTransitionedSame(initialMediaItem);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void isCommandAvailable_isTrueForAvailableCommands() {
|
||||
ExoPlayer player = new TestExoPlayerBuilder(context).build();
|
||||
|
||||
player.addMediaSources(ImmutableList.of(new FakeMediaSource(), new FakeMediaSource()));
|
||||
|
||||
assertThat(player.isCommandAvailable(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM)).isTrue();
|
||||
assertThat(player.isCommandAvailable(COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM)).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void isCommandAvailable_whenPlayingAd_isFalseForSeekCommands() throws Exception {
|
||||
AdPlaybackState adPlaybackState =
|
||||
new AdPlaybackState(/* adsId= */ new Object(), /* adGroupTimesUs...= */ 0)
|
||||
.withAdCount(/* adGroupIndex= */ 0, /* adCount= */ 1)
|
||||
.withAdUri(/* adGroupIndex= */ 0, /* adIndexInAdGroup= */ 0, Uri.EMPTY)
|
||||
.withAdDurationsUs(/* adDurationUs= */ new long[][] {{C.msToUs(4_000)}});
|
||||
Timeline adTimeline =
|
||||
new FakeTimeline(
|
||||
new TimelineWindowDefinition(
|
||||
/* periodCount= */ 1,
|
||||
/* id= */ 0,
|
||||
/* isSeekable= */ true,
|
||||
/* isDynamic= */ false,
|
||||
/* durationUs= */ C.msToUs(10_000),
|
||||
adPlaybackState));
|
||||
ExoPlayer player = new TestExoPlayerBuilder(context).build();
|
||||
|
||||
player.addMediaSources(
|
||||
ImmutableList.of(
|
||||
new FakeMediaSource(), new FakeMediaSource(adTimeline), new FakeMediaSource()));
|
||||
player.seekTo(/* windowIndex= */ 1, /* positionMs= */ 0);
|
||||
player.prepare();
|
||||
runUntilPlaybackState(player, Player.STATE_READY);
|
||||
|
||||
assertThat(player.isCommandAvailable(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM)).isFalse();
|
||||
assertThat(player.isCommandAvailable(COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM)).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void seekTo_nextWindow_notifiesAvailableCommandsChanged() {
|
||||
Player.Commands commandsWithHasNext = createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM);
|
||||
Player.Commands commandsWithHasPrevious = createCommands(COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM);
|
||||
Player.Commands commandsWithHasNextAndPrevious =
|
||||
Player.Commands commandsWithSeekToNext = createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM);
|
||||
Player.Commands commandsWithSeekToPrevious =
|
||||
createCommands(COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM);
|
||||
Player.Commands commandsWithSeekToNextAndPrevious =
|
||||
createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM, COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM);
|
||||
Player.EventListener mockListener = mock(Player.EventListener.class);
|
||||
ExoPlayer player = new TestExoPlayerBuilder(context).build();
|
||||
|
|
@ -8086,26 +8126,27 @@ public final class ExoPlayerTest {
|
|||
new FakeMediaSource(),
|
||||
new FakeMediaSource(),
|
||||
new FakeMediaSource()));
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithHasNext);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToNext);
|
||||
verify(mockListener).onAvailableCommandsChanged(any());
|
||||
|
||||
player.seekTo(/* windowIndex= */ 1, /* positionMs= */ 0);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithHasNextAndPrevious);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToNextAndPrevious);
|
||||
verify(mockListener, times(2)).onAvailableCommandsChanged(any());
|
||||
|
||||
player.seekTo(/* windowIndex= */ 2, /* positionMs= */ 0);
|
||||
verify(mockListener, times(2)).onAvailableCommandsChanged(any());
|
||||
|
||||
player.seekTo(/* windowIndex= */ 3, /* positionMs= */ 0);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithHasPrevious);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToPrevious);
|
||||
verify(mockListener, times(3)).onAvailableCommandsChanged(any());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void seekTo_previousWindow_notifiesAvailableCommandsChanged() {
|
||||
Player.Commands commandsWithHasNext = createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM);
|
||||
Player.Commands commandsWithHasPrevious = createCommands(COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM);
|
||||
Player.Commands commandsWithHasNextAndPrevious =
|
||||
Player.Commands commandsWithSeekToNext = createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM);
|
||||
Player.Commands commandsWithSeekToPrevious =
|
||||
createCommands(COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM);
|
||||
Player.Commands commandsWithSeekToNextAndPrevious =
|
||||
createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM, COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM);
|
||||
Player.EventListener mockListener = mock(Player.EventListener.class);
|
||||
ExoPlayer player = new TestExoPlayerBuilder(context).build();
|
||||
|
|
@ -8118,18 +8159,18 @@ public final class ExoPlayerTest {
|
|||
new FakeMediaSource(),
|
||||
new FakeMediaSource(),
|
||||
new FakeMediaSource()));
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithHasPrevious);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToPrevious);
|
||||
verify(mockListener).onAvailableCommandsChanged(any());
|
||||
|
||||
player.seekTo(/* windowIndex= */ 2, /* positionMs= */ 0);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithHasNextAndPrevious);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToNextAndPrevious);
|
||||
verify(mockListener, times(2)).onAvailableCommandsChanged(any());
|
||||
|
||||
player.seekTo(/* windowIndex= */ 1, /* positionMs= */ 0);
|
||||
verify(mockListener, times(2)).onAvailableCommandsChanged(any());
|
||||
|
||||
player.seekTo(/* windowIndex= */ 0, /* positionMs= */ 0);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithHasNext);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToNext);
|
||||
verify(mockListener, times(3)).onAvailableCommandsChanged(any());
|
||||
}
|
||||
|
||||
|
|
@ -8147,9 +8188,10 @@ public final class ExoPlayerTest {
|
|||
|
||||
@Test
|
||||
public void automaticWindowTransition_notifiesAvailableCommandsChanged() throws Exception {
|
||||
Player.Commands commandsWithHasNext = createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM);
|
||||
Player.Commands commandsWithHasPrevious = createCommands(COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM);
|
||||
Player.Commands commandsWithHasNextAndPrevious =
|
||||
Player.Commands commandsWithSeekToNext = createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM);
|
||||
Player.Commands commandsWithSeekToPrevious =
|
||||
createCommands(COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM);
|
||||
Player.Commands commandsWithSeekToNextAndPrevious =
|
||||
createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM, COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM);
|
||||
Player.EventListener mockListener = mock(Player.EventListener.class);
|
||||
ExoPlayer player = new TestExoPlayerBuilder(context).build();
|
||||
|
|
@ -8161,13 +8203,13 @@ public final class ExoPlayerTest {
|
|||
new FakeMediaSource(),
|
||||
new FakeMediaSource(),
|
||||
new FakeMediaSource()));
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithHasNext);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToNext);
|
||||
verify(mockListener).onAvailableCommandsChanged(any());
|
||||
|
||||
player.prepare();
|
||||
playUntilStartOfWindow(player, /* windowIndex= */ 1);
|
||||
runUntilPendingCommandsAreFullyHandled(player);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithHasNextAndPrevious);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToNextAndPrevious);
|
||||
verify(mockListener, times(2)).onAvailableCommandsChanged(any());
|
||||
|
||||
playUntilStartOfWindow(player, /* windowIndex= */ 2);
|
||||
|
|
@ -8176,13 +8218,13 @@ public final class ExoPlayerTest {
|
|||
|
||||
player.play();
|
||||
runUntilPlaybackState(player, Player.STATE_ENDED);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithHasPrevious);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToPrevious);
|
||||
verify(mockListener, times(3)).onAvailableCommandsChanged(any());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void addMediaSource_atTheEnd_notifiesAvailableCommandsChanged() {
|
||||
Player.Commands commandsWithHasNext = createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM);
|
||||
Player.Commands commandsWithSeekToNext = createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM);
|
||||
Player.EventListener mockListener = mock(Player.EventListener.class);
|
||||
ExoPlayer player = new TestExoPlayerBuilder(context).build();
|
||||
player.addListener(mockListener);
|
||||
|
|
@ -8191,7 +8233,7 @@ public final class ExoPlayerTest {
|
|||
verify(mockListener, never()).onAvailableCommandsChanged(any());
|
||||
|
||||
player.addMediaSource(new FakeMediaSource());
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithHasNext);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToNext);
|
||||
verify(mockListener).onAvailableCommandsChanged(any());
|
||||
|
||||
player.addMediaSource(new FakeMediaSource());
|
||||
|
|
@ -8200,7 +8242,8 @@ public final class ExoPlayerTest {
|
|||
|
||||
@Test
|
||||
public void addMediaSource_atTheStart_notifiesAvailableCommandsChanged() {
|
||||
Player.Commands commandsWithHasPrevious = createCommands(COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM);
|
||||
Player.Commands commandsWithSeekToPrevious =
|
||||
createCommands(COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM);
|
||||
Player.EventListener mockListener = mock(Player.EventListener.class);
|
||||
ExoPlayer player = new TestExoPlayerBuilder(context).build();
|
||||
player.addListener(mockListener);
|
||||
|
|
@ -8209,7 +8252,7 @@ public final class ExoPlayerTest {
|
|||
verify(mockListener, never()).onAvailableCommandsChanged(any());
|
||||
|
||||
player.addMediaSource(/* index= */ 0, new FakeMediaSource());
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithHasPrevious);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToPrevious);
|
||||
verify(mockListener).onAvailableCommandsChanged(any());
|
||||
|
||||
player.addMediaSource(/* index= */ 0, new FakeMediaSource());
|
||||
|
|
@ -8218,14 +8261,14 @@ public final class ExoPlayerTest {
|
|||
|
||||
@Test
|
||||
public void removeMediaItem_atTheEnd_notifiesAvailableCommandsChanged() {
|
||||
Player.Commands commandsWithHasNext = createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM);
|
||||
Player.Commands commandsWithSeekToNext = createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM);
|
||||
Player.EventListener mockListener = mock(Player.EventListener.class);
|
||||
ExoPlayer player = new TestExoPlayerBuilder(context).build();
|
||||
player.addListener(mockListener);
|
||||
|
||||
player.addMediaSources(
|
||||
ImmutableList.of(new FakeMediaSource(), new FakeMediaSource(), new FakeMediaSource()));
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithHasNext);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToNext);
|
||||
verify(mockListener).onAvailableCommandsChanged(any());
|
||||
|
||||
player.removeMediaItem(/* index= */ 2);
|
||||
|
|
@ -8241,7 +8284,8 @@ public final class ExoPlayerTest {
|
|||
|
||||
@Test
|
||||
public void removeMediaItem_atTheStart_notifiesAvailableCommandsChanged() {
|
||||
Player.Commands commandsWithHasPrevious = createCommands(COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM);
|
||||
Player.Commands commandsWithSeekToPrevious =
|
||||
createCommands(COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM);
|
||||
Player.EventListener mockListener = mock(Player.EventListener.class);
|
||||
ExoPlayer player = new TestExoPlayerBuilder(context).build();
|
||||
player.addListener(mockListener);
|
||||
|
|
@ -8249,7 +8293,7 @@ public final class ExoPlayerTest {
|
|||
player.seekTo(/* windowIndex= */ 2, /* positionMs= */ 0);
|
||||
player.addMediaSources(
|
||||
ImmutableList.of(new FakeMediaSource(), new FakeMediaSource(), new FakeMediaSource()));
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithHasPrevious);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToPrevious);
|
||||
verify(mockListener).onAvailableCommandsChanged(any());
|
||||
|
||||
player.removeMediaItem(/* index= */ 0);
|
||||
|
|
@ -8265,13 +8309,13 @@ public final class ExoPlayerTest {
|
|||
|
||||
@Test
|
||||
public void removeMediaItem_current_notifiesAvailableCommandsChanged() {
|
||||
Player.Commands commandsWithHasNext = createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM);
|
||||
Player.Commands commandsWithSeekToNext = createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM);
|
||||
Player.EventListener mockListener = mock(Player.EventListener.class);
|
||||
ExoPlayer player = new TestExoPlayerBuilder(context).build();
|
||||
player.addListener(mockListener);
|
||||
|
||||
player.addMediaSources(ImmutableList.of(new FakeMediaSource(), new FakeMediaSource()));
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithHasNext);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToNext);
|
||||
verify(mockListener).onAvailableCommandsChanged(any());
|
||||
|
||||
player.removeMediaItem(/* index= */ 0);
|
||||
|
|
@ -8281,7 +8325,7 @@ public final class ExoPlayerTest {
|
|||
|
||||
@Test
|
||||
public void setRepeatMode_all_notifiesAvailableCommandsChanged() {
|
||||
Player.Commands commandsWithHasNextAndPrevious =
|
||||
Player.Commands commandsWithSeekToNextAndPrevious =
|
||||
createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM, COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM);
|
||||
Player.EventListener mockListener = mock(Player.EventListener.class);
|
||||
ExoPlayer player = new TestExoPlayerBuilder(context).build();
|
||||
|
|
@ -8291,7 +8335,7 @@ public final class ExoPlayerTest {
|
|||
verify(mockListener, never()).onAvailableCommandsChanged(any());
|
||||
|
||||
player.setRepeatMode(Player.REPEAT_MODE_ALL);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithHasNextAndPrevious);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToNextAndPrevious);
|
||||
verify(mockListener).onAvailableCommandsChanged(any());
|
||||
}
|
||||
|
||||
|
|
@ -8308,8 +8352,9 @@ public final class ExoPlayerTest {
|
|||
|
||||
@Test
|
||||
public void setShuffleModeEnabled_notifiesAvailableCommandsChanged() {
|
||||
Player.Commands commandsWithHasNext = createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM);
|
||||
Player.Commands commandsWithHasPrevious = createCommands(COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM);
|
||||
Player.Commands commandsWithSeekToNext = createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM);
|
||||
Player.Commands commandsWithSeekToPrevious =
|
||||
createCommands(COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM);
|
||||
Player.EventListener mockListener = mock(Player.EventListener.class);
|
||||
ExoPlayer player = new TestExoPlayerBuilder(context).build();
|
||||
player.addListener(mockListener);
|
||||
|
|
@ -8321,10 +8366,10 @@ public final class ExoPlayerTest {
|
|||
new FakeMediaSource());
|
||||
|
||||
player.addMediaSource(mediaSource);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithHasNext);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToNext);
|
||||
|
||||
player.setShuffleModeEnabled(true);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithHasPrevious);
|
||||
verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToPrevious);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
|||
Loading…
Reference in a new issue