Commit 0c9b02bf by kimvde Committed by Ian Baker

Make commands to seek unavailable during ads

ExoPlayer does not support seeking during ads.

PiperOrigin-RevId: 362274785
parent d9aee0f6
...@@ -581,30 +581,43 @@ public class CastPlayerTest { ...@@ -581,30 +581,43 @@ public class CastPlayerTest {
} }
@Test @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() { public void seekTo_nextWindow_notifiesAvailableCommandsChanged() {
when(mockRemoteMediaClient.queueJumpToItem(anyInt(), anyLong(), eq(null))) when(mockRemoteMediaClient.queueJumpToItem(anyInt(), anyLong(), eq(null)))
.thenReturn(mockPendingResult); .thenReturn(mockPendingResult);
Player.Commands commandsWithHasNext = createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM); Player.Commands commandsWithSeekToNext = createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM);
Player.Commands commandsWithHasPrevious = createCommands(COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM); Player.Commands commandsWithSeekToPrevious =
Player.Commands commandsWithHasNextAndPrevious = createCommands(COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM);
Player.Commands commandsWithSeekToNextAndPrevious =
createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM, COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM); createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM, COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM);
int[] mediaQueueItemIds = new int[] {1, 2, 3, 4}; int[] mediaQueueItemIds = new int[] {1, 2, 3, 4};
List<MediaItem> mediaItems = createMediaItems(mediaQueueItemIds); List<MediaItem> mediaItems = createMediaItems(mediaQueueItemIds);
castPlayer.addMediaItems(mediaItems); castPlayer.addMediaItems(mediaItems);
updateTimeLine(mediaItems, mediaQueueItemIds, /* currentItemId= */ 1); updateTimeLine(mediaItems, mediaQueueItemIds, /* currentItemId= */ 1);
verify(mockListener).onAvailableCommandsChanged(commandsWithHasNext); verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToNext);
verify(mockListener).onAvailableCommandsChanged(any()); verify(mockListener).onAvailableCommandsChanged(any());
castPlayer.seekTo(/* windowIndex= */ 1, /* positionMs= */ 0); castPlayer.seekTo(/* windowIndex= */ 1, /* positionMs= */ 0);
verify(mockListener).onAvailableCommandsChanged(commandsWithHasNextAndPrevious); verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToNextAndPrevious);
verify(mockListener, times(2)).onAvailableCommandsChanged(any()); verify(mockListener, times(2)).onAvailableCommandsChanged(any());
castPlayer.seekTo(/* windowIndex= */ 2, /* positionMs= */ 0); castPlayer.seekTo(/* windowIndex= */ 2, /* positionMs= */ 0);
verify(mockListener, times(2)).onAvailableCommandsChanged(any()); verify(mockListener, times(2)).onAvailableCommandsChanged(any());
castPlayer.seekTo(/* windowIndex= */ 3, /* positionMs= */ 0); castPlayer.seekTo(/* windowIndex= */ 3, /* positionMs= */ 0);
verify(mockListener).onAvailableCommandsChanged(commandsWithHasPrevious); verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToPrevious);
verify(mockListener, times(3)).onAvailableCommandsChanged(any()); verify(mockListener, times(3)).onAvailableCommandsChanged(any());
} }
...@@ -612,27 +625,28 @@ public class CastPlayerTest { ...@@ -612,27 +625,28 @@ public class CastPlayerTest {
public void seekTo_previousWindow_notifiesAvailableCommandsChanged() { public void seekTo_previousWindow_notifiesAvailableCommandsChanged() {
when(mockRemoteMediaClient.queueJumpToItem(anyInt(), anyLong(), eq(null))) when(mockRemoteMediaClient.queueJumpToItem(anyInt(), anyLong(), eq(null)))
.thenReturn(mockPendingResult); .thenReturn(mockPendingResult);
Player.Commands commandsWithHasNext = createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM); Player.Commands commandsWithSeekToNext = createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM);
Player.Commands commandsWithHasPrevious = createCommands(COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM); Player.Commands commandsWithSeekToPrevious =
Player.Commands commandsWithHasNextAndPrevious = createCommands(COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM);
Player.Commands commandsWithSeekToNextAndPrevious =
createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM, COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM); createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM, COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM);
int[] mediaQueueItemIds = new int[] {1, 2, 3, 4}; int[] mediaQueueItemIds = new int[] {1, 2, 3, 4};
List<MediaItem> mediaItems = createMediaItems(mediaQueueItemIds); List<MediaItem> mediaItems = createMediaItems(mediaQueueItemIds);
castPlayer.addMediaItems(mediaItems); castPlayer.addMediaItems(mediaItems);
updateTimeLine(mediaItems, mediaQueueItemIds, /* currentItemId= */ 4); updateTimeLine(mediaItems, mediaQueueItemIds, /* currentItemId= */ 4);
verify(mockListener).onAvailableCommandsChanged(commandsWithHasPrevious); verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToPrevious);
verify(mockListener).onAvailableCommandsChanged(any()); verify(mockListener).onAvailableCommandsChanged(any());
castPlayer.seekTo(/* windowIndex= */ 2, /* positionMs= */ 0); castPlayer.seekTo(/* windowIndex= */ 2, /* positionMs= */ 0);
verify(mockListener).onAvailableCommandsChanged(commandsWithHasNextAndPrevious); verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToNextAndPrevious);
verify(mockListener, times(2)).onAvailableCommandsChanged(any()); verify(mockListener, times(2)).onAvailableCommandsChanged(any());
castPlayer.seekTo(/* windowIndex= */ 1, /* positionMs= */ 0); castPlayer.seekTo(/* windowIndex= */ 1, /* positionMs= */ 0);
verify(mockListener, times(2)).onAvailableCommandsChanged(any()); verify(mockListener, times(2)).onAvailableCommandsChanged(any());
castPlayer.seekTo(/* windowIndex= */ 0, /* positionMs= */ 0); castPlayer.seekTo(/* windowIndex= */ 0, /* positionMs= */ 0);
verify(mockListener).onAvailableCommandsChanged(commandsWithHasNext); verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToNext);
verify(mockListener, times(3)).onAvailableCommandsChanged(any()); verify(mockListener, times(3)).onAvailableCommandsChanged(any());
} }
...@@ -652,7 +666,7 @@ public class CastPlayerTest { ...@@ -652,7 +666,7 @@ public class CastPlayerTest {
@Test @Test
public void addMediaItem_atTheEnd_notifiesAvailableCommandsChanged() { 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 mediaItem1 = createMediaItem(/* mediaQueueItemId= */ 1);
MediaItem mediaItem2 = createMediaItem(/* mediaQueueItemId= */ 2); MediaItem mediaItem2 = createMediaItem(/* mediaQueueItemId= */ 2);
MediaItem mediaItem3 = createMediaItem(/* mediaQueueItemId= */ 3); MediaItem mediaItem3 = createMediaItem(/* mediaQueueItemId= */ 3);
...@@ -669,7 +683,7 @@ public class CastPlayerTest { ...@@ -669,7 +683,7 @@ public class CastPlayerTest {
ImmutableList.of(mediaItem1, mediaItem2), ImmutableList.of(mediaItem1, mediaItem2),
/* mediaQueueItemIds= */ new int[] {1, 2}, /* mediaQueueItemIds= */ new int[] {1, 2},
/* currentItemId= */ 1); /* currentItemId= */ 1);
verify(mockListener).onAvailableCommandsChanged(commandsWithHasNext); verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToNext);
verify(mockListener).onAvailableCommandsChanged(any()); verify(mockListener).onAvailableCommandsChanged(any());
castPlayer.addMediaItem(mediaItem3); castPlayer.addMediaItem(mediaItem3);
...@@ -682,7 +696,8 @@ public class CastPlayerTest { ...@@ -682,7 +696,8 @@ public class CastPlayerTest {
@Test @Test
public void addMediaItem_atTheStart_notifiesAvailableCommandsChanged() { 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 mediaItem1 = createMediaItem(/* mediaQueueItemId= */ 1);
MediaItem mediaItem2 = createMediaItem(/* mediaQueueItemId= */ 2); MediaItem mediaItem2 = createMediaItem(/* mediaQueueItemId= */ 2);
MediaItem mediaItem3 = createMediaItem(/* mediaQueueItemId= */ 3); MediaItem mediaItem3 = createMediaItem(/* mediaQueueItemId= */ 3);
...@@ -699,7 +714,7 @@ public class CastPlayerTest { ...@@ -699,7 +714,7 @@ public class CastPlayerTest {
ImmutableList.of(mediaItem2, mediaItem1), ImmutableList.of(mediaItem2, mediaItem1),
/* mediaQueueItemIds= */ new int[] {2, 1}, /* mediaQueueItemIds= */ new int[] {2, 1},
/* currentItemId= */ 1); /* currentItemId= */ 1);
verify(mockListener).onAvailableCommandsChanged(commandsWithHasPrevious); verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToPrevious);
verify(mockListener).onAvailableCommandsChanged(any()); verify(mockListener).onAvailableCommandsChanged(any());
castPlayer.addMediaItem(/* index= */ 0, mediaItem3); castPlayer.addMediaItem(/* index= */ 0, mediaItem3);
...@@ -712,7 +727,7 @@ public class CastPlayerTest { ...@@ -712,7 +727,7 @@ public class CastPlayerTest {
@Test @Test
public void removeMediaItem_atTheEnd_notifiesAvailableCommandsChanged() { 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 mediaItem1 = createMediaItem(/* mediaQueueItemId= */ 1);
MediaItem mediaItem2 = createMediaItem(/* mediaQueueItemId= */ 2); MediaItem mediaItem2 = createMediaItem(/* mediaQueueItemId= */ 2);
MediaItem mediaItem3 = createMediaItem(/* mediaQueueItemId= */ 3); MediaItem mediaItem3 = createMediaItem(/* mediaQueueItemId= */ 3);
...@@ -722,7 +737,7 @@ public class CastPlayerTest { ...@@ -722,7 +737,7 @@ public class CastPlayerTest {
ImmutableList.of(mediaItem1, mediaItem2, mediaItem3), ImmutableList.of(mediaItem1, mediaItem2, mediaItem3),
/* mediaQueueItemIds= */ new int[] {1, 2, 3}, /* mediaQueueItemIds= */ new int[] {1, 2, 3},
/* currentItemId= */ 1); /* currentItemId= */ 1);
verify(mockListener).onAvailableCommandsChanged(commandsWithHasNext); verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToNext);
verify(mockListener).onAvailableCommandsChanged(any()); verify(mockListener).onAvailableCommandsChanged(any());
castPlayer.removeMediaItem(/* index= */ 2); castPlayer.removeMediaItem(/* index= */ 2);
...@@ -752,7 +767,8 @@ public class CastPlayerTest { ...@@ -752,7 +767,8 @@ public class CastPlayerTest {
public void removeMediaItem_atTheStart_notifiesAvailableCommandsChanged() { public void removeMediaItem_atTheStart_notifiesAvailableCommandsChanged() {
when(mockRemoteMediaClient.queueJumpToItem(anyInt(), anyLong(), eq(null))) when(mockRemoteMediaClient.queueJumpToItem(anyInt(), anyLong(), eq(null)))
.thenReturn(mockPendingResult); .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 mediaItem1 = createMediaItem(/* mediaQueueItemId= */ 1);
MediaItem mediaItem2 = createMediaItem(/* mediaQueueItemId= */ 2); MediaItem mediaItem2 = createMediaItem(/* mediaQueueItemId= */ 2);
MediaItem mediaItem3 = createMediaItem(/* mediaQueueItemId= */ 3); MediaItem mediaItem3 = createMediaItem(/* mediaQueueItemId= */ 3);
...@@ -762,7 +778,7 @@ public class CastPlayerTest { ...@@ -762,7 +778,7 @@ public class CastPlayerTest {
ImmutableList.of(mediaItem1, mediaItem2, mediaItem3), ImmutableList.of(mediaItem1, mediaItem2, mediaItem3),
/* mediaQueueItemIds= */ new int[] {1, 2, 3}, /* mediaQueueItemIds= */ new int[] {1, 2, 3},
/* currentItemId= */ 3); /* currentItemId= */ 3);
verify(mockListener).onAvailableCommandsChanged(commandsWithHasPrevious); verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToPrevious);
verify(mockListener).onAvailableCommandsChanged(any()); verify(mockListener).onAvailableCommandsChanged(any());
castPlayer.removeMediaItem(/* index= */ 0); castPlayer.removeMediaItem(/* index= */ 0);
...@@ -790,7 +806,7 @@ public class CastPlayerTest { ...@@ -790,7 +806,7 @@ public class CastPlayerTest {
@Test @Test
public void removeMediaItem_current_notifiesAvailableCommandsChanged() { 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 mediaItem1 = createMediaItem(/* mediaQueueItemId= */ 1);
MediaItem mediaItem2 = createMediaItem(/* mediaQueueItemId= */ 2); MediaItem mediaItem2 = createMediaItem(/* mediaQueueItemId= */ 2);
...@@ -799,7 +815,7 @@ public class CastPlayerTest { ...@@ -799,7 +815,7 @@ public class CastPlayerTest {
ImmutableList.of(mediaItem1, mediaItem2), ImmutableList.of(mediaItem1, mediaItem2),
/* mediaQueueItemIds= */ new int[] {1, 2}, /* mediaQueueItemIds= */ new int[] {1, 2},
/* currentItemId= */ 1); /* currentItemId= */ 1);
verify(mockListener).onAvailableCommandsChanged(commandsWithHasNext); verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToNext);
verify(mockListener).onAvailableCommandsChanged(any()); verify(mockListener).onAvailableCommandsChanged(any());
castPlayer.removeMediaItem(/* index= */ 0); castPlayer.removeMediaItem(/* index= */ 0);
...@@ -815,7 +831,7 @@ public class CastPlayerTest { ...@@ -815,7 +831,7 @@ public class CastPlayerTest {
public void setRepeatMode_all_notifiesAvailableCommandsChanged() { public void setRepeatMode_all_notifiesAvailableCommandsChanged() {
when(mockRemoteMediaClient.queueSetRepeatMode(anyInt(), eq(null))) when(mockRemoteMediaClient.queueSetRepeatMode(anyInt(), eq(null)))
.thenReturn(mockPendingResult); .thenReturn(mockPendingResult);
Player.Commands commandsWithHasNextAndPrevious = Player.Commands commandsWithSeekToNextAndPrevious =
createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM, COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM); createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM, COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM);
int[] mediaQueueItemIds = new int[] {1}; int[] mediaQueueItemIds = new int[] {1};
List<MediaItem> mediaItems = createMediaItems(mediaQueueItemIds); List<MediaItem> mediaItems = createMediaItems(mediaQueueItemIds);
...@@ -825,7 +841,7 @@ public class CastPlayerTest { ...@@ -825,7 +841,7 @@ public class CastPlayerTest {
verify(mockListener, never()).onAvailableCommandsChanged(any()); verify(mockListener, never()).onAvailableCommandsChanged(any());
castPlayer.setRepeatMode(Player.REPEAT_MODE_ALL); castPlayer.setRepeatMode(Player.REPEAT_MODE_ALL);
verify(mockListener).onAvailableCommandsChanged(commandsWithHasNextAndPrevious); verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToNextAndPrevious);
verify(mockListener).onAvailableCommandsChanged(any()); verify(mockListener).onAvailableCommandsChanged(any());
} }
......
...@@ -267,8 +267,8 @@ public abstract class BasePlayer implements Player { ...@@ -267,8 +267,8 @@ public abstract class BasePlayer implements Player {
protected Commands getAvailableCommands() { protected Commands getAvailableCommands() {
return new Commands.Builder() return new Commands.Builder()
.addIf(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM, hasNext()) .addIf(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM, hasNext() && !isPlayingAd())
.addIf(COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM, hasPrevious()) .addIf(COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM, hasPrevious() && !isPlayingAd())
.build(); .build();
} }
} }
...@@ -8071,10 +8071,50 @@ public final class ExoPlayerTest { ...@@ -8071,10 +8071,50 @@ public final class ExoPlayerTest {
} }
@Test @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() { public void seekTo_nextWindow_notifiesAvailableCommandsChanged() {
Player.Commands commandsWithHasNext = createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM); Player.Commands commandsWithSeekToNext = createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM);
Player.Commands commandsWithHasPrevious = createCommands(COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM); Player.Commands commandsWithSeekToPrevious =
Player.Commands commandsWithHasNextAndPrevious = createCommands(COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM);
Player.Commands commandsWithSeekToNextAndPrevious =
createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM, COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM); createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM, COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM);
Player.EventListener mockListener = mock(Player.EventListener.class); Player.EventListener mockListener = mock(Player.EventListener.class);
ExoPlayer player = new TestExoPlayerBuilder(context).build(); ExoPlayer player = new TestExoPlayerBuilder(context).build();
...@@ -8086,26 +8126,27 @@ public final class ExoPlayerTest { ...@@ -8086,26 +8126,27 @@ public final class ExoPlayerTest {
new FakeMediaSource(), new FakeMediaSource(),
new FakeMediaSource(), new FakeMediaSource(),
new FakeMediaSource())); new FakeMediaSource()));
verify(mockListener).onAvailableCommandsChanged(commandsWithHasNext); verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToNext);
verify(mockListener).onAvailableCommandsChanged(any()); verify(mockListener).onAvailableCommandsChanged(any());
player.seekTo(/* windowIndex= */ 1, /* positionMs= */ 0); player.seekTo(/* windowIndex= */ 1, /* positionMs= */ 0);
verify(mockListener).onAvailableCommandsChanged(commandsWithHasNextAndPrevious); verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToNextAndPrevious);
verify(mockListener, times(2)).onAvailableCommandsChanged(any()); verify(mockListener, times(2)).onAvailableCommandsChanged(any());
player.seekTo(/* windowIndex= */ 2, /* positionMs= */ 0); player.seekTo(/* windowIndex= */ 2, /* positionMs= */ 0);
verify(mockListener, times(2)).onAvailableCommandsChanged(any()); verify(mockListener, times(2)).onAvailableCommandsChanged(any());
player.seekTo(/* windowIndex= */ 3, /* positionMs= */ 0); player.seekTo(/* windowIndex= */ 3, /* positionMs= */ 0);
verify(mockListener).onAvailableCommandsChanged(commandsWithHasPrevious); verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToPrevious);
verify(mockListener, times(3)).onAvailableCommandsChanged(any()); verify(mockListener, times(3)).onAvailableCommandsChanged(any());
} }
@Test @Test
public void seekTo_previousWindow_notifiesAvailableCommandsChanged() { public void seekTo_previousWindow_notifiesAvailableCommandsChanged() {
Player.Commands commandsWithHasNext = createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM); Player.Commands commandsWithSeekToNext = createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM);
Player.Commands commandsWithHasPrevious = createCommands(COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM); Player.Commands commandsWithSeekToPrevious =
Player.Commands commandsWithHasNextAndPrevious = createCommands(COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM);
Player.Commands commandsWithSeekToNextAndPrevious =
createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM, COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM); createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM, COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM);
Player.EventListener mockListener = mock(Player.EventListener.class); Player.EventListener mockListener = mock(Player.EventListener.class);
ExoPlayer player = new TestExoPlayerBuilder(context).build(); ExoPlayer player = new TestExoPlayerBuilder(context).build();
...@@ -8118,18 +8159,18 @@ public final class ExoPlayerTest { ...@@ -8118,18 +8159,18 @@ public final class ExoPlayerTest {
new FakeMediaSource(), new FakeMediaSource(),
new FakeMediaSource(), new FakeMediaSource(),
new FakeMediaSource())); new FakeMediaSource()));
verify(mockListener).onAvailableCommandsChanged(commandsWithHasPrevious); verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToPrevious);
verify(mockListener).onAvailableCommandsChanged(any()); verify(mockListener).onAvailableCommandsChanged(any());
player.seekTo(/* windowIndex= */ 2, /* positionMs= */ 0); player.seekTo(/* windowIndex= */ 2, /* positionMs= */ 0);
verify(mockListener).onAvailableCommandsChanged(commandsWithHasNextAndPrevious); verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToNextAndPrevious);
verify(mockListener, times(2)).onAvailableCommandsChanged(any()); verify(mockListener, times(2)).onAvailableCommandsChanged(any());
player.seekTo(/* windowIndex= */ 1, /* positionMs= */ 0); player.seekTo(/* windowIndex= */ 1, /* positionMs= */ 0);
verify(mockListener, times(2)).onAvailableCommandsChanged(any()); verify(mockListener, times(2)).onAvailableCommandsChanged(any());
player.seekTo(/* windowIndex= */ 0, /* positionMs= */ 0); player.seekTo(/* windowIndex= */ 0, /* positionMs= */ 0);
verify(mockListener).onAvailableCommandsChanged(commandsWithHasNext); verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToNext);
verify(mockListener, times(3)).onAvailableCommandsChanged(any()); verify(mockListener, times(3)).onAvailableCommandsChanged(any());
} }
...@@ -8147,9 +8188,10 @@ public final class ExoPlayerTest { ...@@ -8147,9 +8188,10 @@ public final class ExoPlayerTest {
@Test @Test
public void automaticWindowTransition_notifiesAvailableCommandsChanged() throws Exception { public void automaticWindowTransition_notifiesAvailableCommandsChanged() throws Exception {
Player.Commands commandsWithHasNext = createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM); Player.Commands commandsWithSeekToNext = createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM);
Player.Commands commandsWithHasPrevious = createCommands(COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM); Player.Commands commandsWithSeekToPrevious =
Player.Commands commandsWithHasNextAndPrevious = createCommands(COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM);
Player.Commands commandsWithSeekToNextAndPrevious =
createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM, COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM); createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM, COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM);
Player.EventListener mockListener = mock(Player.EventListener.class); Player.EventListener mockListener = mock(Player.EventListener.class);
ExoPlayer player = new TestExoPlayerBuilder(context).build(); ExoPlayer player = new TestExoPlayerBuilder(context).build();
...@@ -8161,13 +8203,13 @@ public final class ExoPlayerTest { ...@@ -8161,13 +8203,13 @@ public final class ExoPlayerTest {
new FakeMediaSource(), new FakeMediaSource(),
new FakeMediaSource(), new FakeMediaSource(),
new FakeMediaSource())); new FakeMediaSource()));
verify(mockListener).onAvailableCommandsChanged(commandsWithHasNext); verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToNext);
verify(mockListener).onAvailableCommandsChanged(any()); verify(mockListener).onAvailableCommandsChanged(any());
player.prepare(); player.prepare();
playUntilStartOfWindow(player, /* windowIndex= */ 1); playUntilStartOfWindow(player, /* windowIndex= */ 1);
runUntilPendingCommandsAreFullyHandled(player); runUntilPendingCommandsAreFullyHandled(player);
verify(mockListener).onAvailableCommandsChanged(commandsWithHasNextAndPrevious); verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToNextAndPrevious);
verify(mockListener, times(2)).onAvailableCommandsChanged(any()); verify(mockListener, times(2)).onAvailableCommandsChanged(any());
playUntilStartOfWindow(player, /* windowIndex= */ 2); playUntilStartOfWindow(player, /* windowIndex= */ 2);
...@@ -8176,13 +8218,13 @@ public final class ExoPlayerTest { ...@@ -8176,13 +8218,13 @@ public final class ExoPlayerTest {
player.play(); player.play();
runUntilPlaybackState(player, Player.STATE_ENDED); runUntilPlaybackState(player, Player.STATE_ENDED);
verify(mockListener).onAvailableCommandsChanged(commandsWithHasPrevious); verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToPrevious);
verify(mockListener, times(3)).onAvailableCommandsChanged(any()); verify(mockListener, times(3)).onAvailableCommandsChanged(any());
} }
@Test @Test
public void addMediaSource_atTheEnd_notifiesAvailableCommandsChanged() { 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); Player.EventListener mockListener = mock(Player.EventListener.class);
ExoPlayer player = new TestExoPlayerBuilder(context).build(); ExoPlayer player = new TestExoPlayerBuilder(context).build();
player.addListener(mockListener); player.addListener(mockListener);
...@@ -8191,7 +8233,7 @@ public final class ExoPlayerTest { ...@@ -8191,7 +8233,7 @@ public final class ExoPlayerTest {
verify(mockListener, never()).onAvailableCommandsChanged(any()); verify(mockListener, never()).onAvailableCommandsChanged(any());
player.addMediaSource(new FakeMediaSource()); player.addMediaSource(new FakeMediaSource());
verify(mockListener).onAvailableCommandsChanged(commandsWithHasNext); verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToNext);
verify(mockListener).onAvailableCommandsChanged(any()); verify(mockListener).onAvailableCommandsChanged(any());
player.addMediaSource(new FakeMediaSource()); player.addMediaSource(new FakeMediaSource());
...@@ -8200,7 +8242,8 @@ public final class ExoPlayerTest { ...@@ -8200,7 +8242,8 @@ public final class ExoPlayerTest {
@Test @Test
public void addMediaSource_atTheStart_notifiesAvailableCommandsChanged() { 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); Player.EventListener mockListener = mock(Player.EventListener.class);
ExoPlayer player = new TestExoPlayerBuilder(context).build(); ExoPlayer player = new TestExoPlayerBuilder(context).build();
player.addListener(mockListener); player.addListener(mockListener);
...@@ -8209,7 +8252,7 @@ public final class ExoPlayerTest { ...@@ -8209,7 +8252,7 @@ public final class ExoPlayerTest {
verify(mockListener, never()).onAvailableCommandsChanged(any()); verify(mockListener, never()).onAvailableCommandsChanged(any());
player.addMediaSource(/* index= */ 0, new FakeMediaSource()); player.addMediaSource(/* index= */ 0, new FakeMediaSource());
verify(mockListener).onAvailableCommandsChanged(commandsWithHasPrevious); verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToPrevious);
verify(mockListener).onAvailableCommandsChanged(any()); verify(mockListener).onAvailableCommandsChanged(any());
player.addMediaSource(/* index= */ 0, new FakeMediaSource()); player.addMediaSource(/* index= */ 0, new FakeMediaSource());
...@@ -8218,14 +8261,14 @@ public final class ExoPlayerTest { ...@@ -8218,14 +8261,14 @@ public final class ExoPlayerTest {
@Test @Test
public void removeMediaItem_atTheEnd_notifiesAvailableCommandsChanged() { 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); Player.EventListener mockListener = mock(Player.EventListener.class);
ExoPlayer player = new TestExoPlayerBuilder(context).build(); ExoPlayer player = new TestExoPlayerBuilder(context).build();
player.addListener(mockListener); player.addListener(mockListener);
player.addMediaSources( player.addMediaSources(
ImmutableList.of(new FakeMediaSource(), new FakeMediaSource(), new FakeMediaSource())); ImmutableList.of(new FakeMediaSource(), new FakeMediaSource(), new FakeMediaSource()));
verify(mockListener).onAvailableCommandsChanged(commandsWithHasNext); verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToNext);
verify(mockListener).onAvailableCommandsChanged(any()); verify(mockListener).onAvailableCommandsChanged(any());
player.removeMediaItem(/* index= */ 2); player.removeMediaItem(/* index= */ 2);
...@@ -8241,7 +8284,8 @@ public final class ExoPlayerTest { ...@@ -8241,7 +8284,8 @@ public final class ExoPlayerTest {
@Test @Test
public void removeMediaItem_atTheStart_notifiesAvailableCommandsChanged() { 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); Player.EventListener mockListener = mock(Player.EventListener.class);
ExoPlayer player = new TestExoPlayerBuilder(context).build(); ExoPlayer player = new TestExoPlayerBuilder(context).build();
player.addListener(mockListener); player.addListener(mockListener);
...@@ -8249,7 +8293,7 @@ public final class ExoPlayerTest { ...@@ -8249,7 +8293,7 @@ public final class ExoPlayerTest {
player.seekTo(/* windowIndex= */ 2, /* positionMs= */ 0); player.seekTo(/* windowIndex= */ 2, /* positionMs= */ 0);
player.addMediaSources( player.addMediaSources(
ImmutableList.of(new FakeMediaSource(), new FakeMediaSource(), new FakeMediaSource())); ImmutableList.of(new FakeMediaSource(), new FakeMediaSource(), new FakeMediaSource()));
verify(mockListener).onAvailableCommandsChanged(commandsWithHasPrevious); verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToPrevious);
verify(mockListener).onAvailableCommandsChanged(any()); verify(mockListener).onAvailableCommandsChanged(any());
player.removeMediaItem(/* index= */ 0); player.removeMediaItem(/* index= */ 0);
...@@ -8265,13 +8309,13 @@ public final class ExoPlayerTest { ...@@ -8265,13 +8309,13 @@ public final class ExoPlayerTest {
@Test @Test
public void removeMediaItem_current_notifiesAvailableCommandsChanged() { 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); Player.EventListener mockListener = mock(Player.EventListener.class);
ExoPlayer player = new TestExoPlayerBuilder(context).build(); ExoPlayer player = new TestExoPlayerBuilder(context).build();
player.addListener(mockListener); player.addListener(mockListener);
player.addMediaSources(ImmutableList.of(new FakeMediaSource(), new FakeMediaSource())); player.addMediaSources(ImmutableList.of(new FakeMediaSource(), new FakeMediaSource()));
verify(mockListener).onAvailableCommandsChanged(commandsWithHasNext); verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToNext);
verify(mockListener).onAvailableCommandsChanged(any()); verify(mockListener).onAvailableCommandsChanged(any());
player.removeMediaItem(/* index= */ 0); player.removeMediaItem(/* index= */ 0);
...@@ -8281,7 +8325,7 @@ public final class ExoPlayerTest { ...@@ -8281,7 +8325,7 @@ public final class ExoPlayerTest {
@Test @Test
public void setRepeatMode_all_notifiesAvailableCommandsChanged() { public void setRepeatMode_all_notifiesAvailableCommandsChanged() {
Player.Commands commandsWithHasNextAndPrevious = Player.Commands commandsWithSeekToNextAndPrevious =
createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM, COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM); createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM, COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM);
Player.EventListener mockListener = mock(Player.EventListener.class); Player.EventListener mockListener = mock(Player.EventListener.class);
ExoPlayer player = new TestExoPlayerBuilder(context).build(); ExoPlayer player = new TestExoPlayerBuilder(context).build();
...@@ -8291,7 +8335,7 @@ public final class ExoPlayerTest { ...@@ -8291,7 +8335,7 @@ public final class ExoPlayerTest {
verify(mockListener, never()).onAvailableCommandsChanged(any()); verify(mockListener, never()).onAvailableCommandsChanged(any());
player.setRepeatMode(Player.REPEAT_MODE_ALL); player.setRepeatMode(Player.REPEAT_MODE_ALL);
verify(mockListener).onAvailableCommandsChanged(commandsWithHasNextAndPrevious); verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToNextAndPrevious);
verify(mockListener).onAvailableCommandsChanged(any()); verify(mockListener).onAvailableCommandsChanged(any());
} }
...@@ -8308,8 +8352,9 @@ public final class ExoPlayerTest { ...@@ -8308,8 +8352,9 @@ public final class ExoPlayerTest {
@Test @Test
public void setShuffleModeEnabled_notifiesAvailableCommandsChanged() { public void setShuffleModeEnabled_notifiesAvailableCommandsChanged() {
Player.Commands commandsWithHasNext = createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM); Player.Commands commandsWithSeekToNext = createCommands(COMMAND_SEEK_TO_NEXT_MEDIA_ITEM);
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); Player.EventListener mockListener = mock(Player.EventListener.class);
ExoPlayer player = new TestExoPlayerBuilder(context).build(); ExoPlayer player = new TestExoPlayerBuilder(context).build();
player.addListener(mockListener); player.addListener(mockListener);
...@@ -8321,10 +8366,10 @@ public final class ExoPlayerTest { ...@@ -8321,10 +8366,10 @@ public final class ExoPlayerTest {
new FakeMediaSource()); new FakeMediaSource());
player.addMediaSource(mediaSource); player.addMediaSource(mediaSource);
verify(mockListener).onAvailableCommandsChanged(commandsWithHasNext); verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToNext);
player.setShuffleModeEnabled(true); player.setShuffleModeEnabled(true);
verify(mockListener).onAvailableCommandsChanged(commandsWithHasPrevious); verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToPrevious);
} }
@Test @Test
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment