Make commands to seek unavailable during ads

ExoPlayer does not support seeking during ads.

PiperOrigin-RevId: 362274785
This commit is contained in:
kimvde 2021-03-11 14:08:07 +00:00 committed by Ian Baker
parent d9aee0f6a4
commit 0c9b02bf44
3 changed files with 121 additions and 60 deletions

View file

@ -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());
}

View file

@ -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();
}
}

View file

@ -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