Add SEEK_TO_NEXT command
PiperOrigin-RevId: 384477188
This commit is contained in:
parent
002874e9e9
commit
58541fa1d1
@ -30,6 +30,7 @@ import static com.google.android.exoplayer2.Player.COMMAND_SEEK_BACK;
|
|||||||
import static com.google.android.exoplayer2.Player.COMMAND_SEEK_FORWARD;
|
import static com.google.android.exoplayer2.Player.COMMAND_SEEK_FORWARD;
|
||||||
import static com.google.android.exoplayer2.Player.COMMAND_SEEK_IN_CURRENT_WINDOW;
|
import static com.google.android.exoplayer2.Player.COMMAND_SEEK_IN_CURRENT_WINDOW;
|
||||||
import static com.google.android.exoplayer2.Player.COMMAND_SEEK_TO_DEFAULT_POSITION;
|
import static com.google.android.exoplayer2.Player.COMMAND_SEEK_TO_DEFAULT_POSITION;
|
||||||
|
import static com.google.android.exoplayer2.Player.COMMAND_SEEK_TO_NEXT;
|
||||||
import static com.google.android.exoplayer2.Player.COMMAND_SEEK_TO_NEXT_WINDOW;
|
import static com.google.android.exoplayer2.Player.COMMAND_SEEK_TO_NEXT_WINDOW;
|
||||||
import static com.google.android.exoplayer2.Player.COMMAND_SEEK_TO_PREVIOUS;
|
import static com.google.android.exoplayer2.Player.COMMAND_SEEK_TO_PREVIOUS;
|
||||||
import static com.google.android.exoplayer2.Player.COMMAND_SEEK_TO_PREVIOUS_WINDOW;
|
import static com.google.android.exoplayer2.Player.COMMAND_SEEK_TO_PREVIOUS_WINDOW;
|
||||||
@ -1210,6 +1211,7 @@ public class CastPlayerTest {
|
|||||||
assertThat(castPlayer.isCommandAvailable(COMMAND_SEEK_TO_PREVIOUS_WINDOW)).isFalse();
|
assertThat(castPlayer.isCommandAvailable(COMMAND_SEEK_TO_PREVIOUS_WINDOW)).isFalse();
|
||||||
assertThat(castPlayer.isCommandAvailable(COMMAND_SEEK_TO_PREVIOUS)).isTrue();
|
assertThat(castPlayer.isCommandAvailable(COMMAND_SEEK_TO_PREVIOUS)).isTrue();
|
||||||
assertThat(castPlayer.isCommandAvailable(COMMAND_SEEK_TO_NEXT_WINDOW)).isTrue();
|
assertThat(castPlayer.isCommandAvailable(COMMAND_SEEK_TO_NEXT_WINDOW)).isTrue();
|
||||||
|
assertThat(castPlayer.isCommandAvailable(COMMAND_SEEK_TO_NEXT)).isTrue();
|
||||||
assertThat(castPlayer.isCommandAvailable(COMMAND_SEEK_TO_WINDOW)).isTrue();
|
assertThat(castPlayer.isCommandAvailable(COMMAND_SEEK_TO_WINDOW)).isTrue();
|
||||||
assertThat(castPlayer.isCommandAvailable(COMMAND_SEEK_BACK)).isTrue();
|
assertThat(castPlayer.isCommandAvailable(COMMAND_SEEK_BACK)).isTrue();
|
||||||
assertThat(castPlayer.isCommandAvailable(COMMAND_SEEK_FORWARD)).isTrue();
|
assertThat(castPlayer.isCommandAvailable(COMMAND_SEEK_FORWARD)).isTrue();
|
||||||
@ -1293,6 +1295,26 @@ public class CastPlayerTest {
|
|||||||
assertThat(castPlayer.isCommandAvailable(COMMAND_SEEK_TO_PREVIOUS)).isTrue();
|
assertThat(castPlayer.isCommandAvailable(COMMAND_SEEK_TO_PREVIOUS)).isTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void isCommandAvailable_duringLiveItem_isTrueForSeekToNext() {
|
||||||
|
MediaItem mediaItem = createMediaItem(/* mediaQueueItemId= */ 1);
|
||||||
|
List<MediaItem> mediaItems = ImmutableList.of(mediaItem);
|
||||||
|
int[] mediaQueueItemIds = new int[] {1};
|
||||||
|
int[] streamTypes = new int[] {MediaInfo.STREAM_TYPE_LIVE};
|
||||||
|
long[] durationsMs = new long[] {C.TIME_UNSET};
|
||||||
|
|
||||||
|
castPlayer.addMediaItem(mediaItem);
|
||||||
|
updateTimeLine(
|
||||||
|
mediaItems,
|
||||||
|
mediaQueueItemIds,
|
||||||
|
/* currentItemId= */ 1,
|
||||||
|
streamTypes,
|
||||||
|
durationsMs,
|
||||||
|
/* positionMs= */ C.TIME_UNSET);
|
||||||
|
|
||||||
|
assertThat(castPlayer.isCommandAvailable(COMMAND_SEEK_TO_NEXT)).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@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)))
|
||||||
@ -1300,9 +1322,10 @@ public class CastPlayerTest {
|
|||||||
Player.Commands commandsWithSeekToPreviousWindow =
|
Player.Commands commandsWithSeekToPreviousWindow =
|
||||||
createWithDefaultCommands(COMMAND_SEEK_TO_PREVIOUS_WINDOW);
|
createWithDefaultCommands(COMMAND_SEEK_TO_PREVIOUS_WINDOW);
|
||||||
Player.Commands commandsWithSeekToNextWindow =
|
Player.Commands commandsWithSeekToNextWindow =
|
||||||
createWithDefaultCommands(COMMAND_SEEK_TO_NEXT_WINDOW);
|
createWithDefaultCommands(COMMAND_SEEK_TO_NEXT_WINDOW, COMMAND_SEEK_TO_NEXT);
|
||||||
Player.Commands commandsWithSeekToPreviousAndNextWindow =
|
Player.Commands commandsWithSeekToPreviousAndNextWindow =
|
||||||
createWithDefaultCommands(COMMAND_SEEK_TO_PREVIOUS_WINDOW, COMMAND_SEEK_TO_NEXT_WINDOW);
|
createWithDefaultCommands(
|
||||||
|
COMMAND_SEEK_TO_PREVIOUS_WINDOW, COMMAND_SEEK_TO_NEXT_WINDOW, COMMAND_SEEK_TO_NEXT);
|
||||||
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);
|
||||||
|
|
||||||
@ -1331,9 +1354,10 @@ public class CastPlayerTest {
|
|||||||
Player.Commands commandsWithSeekToPreviousWindow =
|
Player.Commands commandsWithSeekToPreviousWindow =
|
||||||
createWithDefaultCommands(COMMAND_SEEK_TO_PREVIOUS_WINDOW);
|
createWithDefaultCommands(COMMAND_SEEK_TO_PREVIOUS_WINDOW);
|
||||||
Player.Commands commandsWithSeekToNextWindow =
|
Player.Commands commandsWithSeekToNextWindow =
|
||||||
createWithDefaultCommands(COMMAND_SEEK_TO_NEXT_WINDOW);
|
createWithDefaultCommands(COMMAND_SEEK_TO_NEXT_WINDOW, COMMAND_SEEK_TO_NEXT);
|
||||||
Player.Commands commandsWithSeekToPreviousAndNextWindow =
|
Player.Commands commandsWithSeekToPreviousAndNextWindow =
|
||||||
createWithDefaultCommands(COMMAND_SEEK_TO_PREVIOUS_WINDOW, COMMAND_SEEK_TO_NEXT_WINDOW);
|
createWithDefaultCommands(
|
||||||
|
COMMAND_SEEK_TO_PREVIOUS_WINDOW, COMMAND_SEEK_TO_NEXT_WINDOW, COMMAND_SEEK_TO_NEXT);
|
||||||
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);
|
||||||
|
|
||||||
@ -1377,7 +1401,7 @@ public class CastPlayerTest {
|
|||||||
public void addMediaItem_atTheEnd_notifiesAvailableCommandsChanged() {
|
public void addMediaItem_atTheEnd_notifiesAvailableCommandsChanged() {
|
||||||
Player.Commands defaultCommands = createWithDefaultCommands();
|
Player.Commands defaultCommands = createWithDefaultCommands();
|
||||||
Player.Commands commandsWithSeekToNextWindow =
|
Player.Commands commandsWithSeekToNextWindow =
|
||||||
createWithDefaultCommands(COMMAND_SEEK_TO_NEXT_WINDOW);
|
createWithDefaultCommands(COMMAND_SEEK_TO_NEXT_WINDOW, COMMAND_SEEK_TO_NEXT);
|
||||||
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);
|
||||||
@ -1445,7 +1469,7 @@ public class CastPlayerTest {
|
|||||||
public void removeMediaItem_atTheEnd_notifiesAvailableCommandsChanged() {
|
public void removeMediaItem_atTheEnd_notifiesAvailableCommandsChanged() {
|
||||||
Player.Commands defaultCommands = createWithDefaultCommands();
|
Player.Commands defaultCommands = createWithDefaultCommands();
|
||||||
Player.Commands commandsWithSeekToNextWindow =
|
Player.Commands commandsWithSeekToNextWindow =
|
||||||
createWithDefaultCommands(COMMAND_SEEK_TO_NEXT_WINDOW);
|
createWithDefaultCommands(COMMAND_SEEK_TO_NEXT_WINDOW, COMMAND_SEEK_TO_NEXT);
|
||||||
Player.Commands emptyTimelineCommands = createWithDefaultCommands(/* isTimelineEmpty= */ true);
|
Player.Commands emptyTimelineCommands = createWithDefaultCommands(/* isTimelineEmpty= */ true);
|
||||||
MediaItem mediaItem1 = createMediaItem(/* mediaQueueItemId= */ 1);
|
MediaItem mediaItem1 = createMediaItem(/* mediaQueueItemId= */ 1);
|
||||||
MediaItem mediaItem2 = createMediaItem(/* mediaQueueItemId= */ 2);
|
MediaItem mediaItem2 = createMediaItem(/* mediaQueueItemId= */ 2);
|
||||||
@ -1533,7 +1557,7 @@ public class CastPlayerTest {
|
|||||||
public void removeMediaItem_current_notifiesAvailableCommandsChanged() {
|
public void removeMediaItem_current_notifiesAvailableCommandsChanged() {
|
||||||
Player.Commands defaultCommands = createWithDefaultCommands();
|
Player.Commands defaultCommands = createWithDefaultCommands();
|
||||||
Player.Commands commandsWithSeekToNextWindow =
|
Player.Commands commandsWithSeekToNextWindow =
|
||||||
createWithDefaultCommands(COMMAND_SEEK_TO_NEXT_WINDOW);
|
createWithDefaultCommands(COMMAND_SEEK_TO_NEXT_WINDOW, COMMAND_SEEK_TO_NEXT);
|
||||||
MediaItem mediaItem1 = createMediaItem(/* mediaQueueItemId= */ 1);
|
MediaItem mediaItem1 = createMediaItem(/* mediaQueueItemId= */ 1);
|
||||||
MediaItem mediaItem2 = createMediaItem(/* mediaQueueItemId= */ 2);
|
MediaItem mediaItem2 = createMediaItem(/* mediaQueueItemId= */ 2);
|
||||||
|
|
||||||
@ -1561,7 +1585,8 @@ public class CastPlayerTest {
|
|||||||
.thenReturn(mockPendingResult);
|
.thenReturn(mockPendingResult);
|
||||||
Player.Commands defaultCommands = createWithDefaultCommands();
|
Player.Commands defaultCommands = createWithDefaultCommands();
|
||||||
Player.Commands commandsWithSeekToPreviousAndNextWindow =
|
Player.Commands commandsWithSeekToPreviousAndNextWindow =
|
||||||
createWithDefaultCommands(COMMAND_SEEK_TO_PREVIOUS_WINDOW, COMMAND_SEEK_TO_NEXT_WINDOW);
|
createWithDefaultCommands(
|
||||||
|
COMMAND_SEEK_TO_PREVIOUS_WINDOW, COMMAND_SEEK_TO_NEXT_WINDOW, COMMAND_SEEK_TO_NEXT);
|
||||||
int[] mediaQueueItemIds = new int[] {1};
|
int[] mediaQueueItemIds = new int[] {1};
|
||||||
List<MediaItem> mediaItems = createMediaItems(mediaQueueItemIds);
|
List<MediaItem> mediaItems = createMediaItems(mediaQueueItemIds);
|
||||||
|
|
||||||
|
@ -302,6 +302,11 @@ public abstract class BasePlayer implements Player {
|
|||||||
&& (hasPrevious() || !isCurrentWindowLive() || isCurrentWindowSeekable())
|
&& (hasPrevious() || !isCurrentWindowLive() || isCurrentWindowSeekable())
|
||||||
&& !isPlayingAd())
|
&& !isPlayingAd())
|
||||||
.addIf(COMMAND_SEEK_TO_NEXT_WINDOW, hasNext() && !isPlayingAd())
|
.addIf(COMMAND_SEEK_TO_NEXT_WINDOW, hasNext() && !isPlayingAd())
|
||||||
|
.addIf(
|
||||||
|
COMMAND_SEEK_TO_NEXT,
|
||||||
|
!getCurrentTimeline().isEmpty()
|
||||||
|
&& (hasNext() || (isCurrentWindowLive() && isCurrentWindowDynamic()))
|
||||||
|
&& !isPlayingAd())
|
||||||
.addIf(COMMAND_SEEK_TO_WINDOW, !isPlayingAd())
|
.addIf(COMMAND_SEEK_TO_WINDOW, !isPlayingAd())
|
||||||
.addIf(COMMAND_SEEK_BACK, isCurrentWindowSeekable() && !isPlayingAd())
|
.addIf(COMMAND_SEEK_BACK, isCurrentWindowSeekable() && !isPlayingAd())
|
||||||
.addIf(COMMAND_SEEK_FORWARD, isCurrentWindowSeekable() && !isPlayingAd())
|
.addIf(COMMAND_SEEK_FORWARD, isCurrentWindowSeekable() && !isPlayingAd())
|
||||||
|
@ -642,6 +642,7 @@ public interface Player {
|
|||||||
COMMAND_SEEK_TO_PREVIOUS_WINDOW,
|
COMMAND_SEEK_TO_PREVIOUS_WINDOW,
|
||||||
COMMAND_SEEK_TO_PREVIOUS,
|
COMMAND_SEEK_TO_PREVIOUS,
|
||||||
COMMAND_SEEK_TO_NEXT_WINDOW,
|
COMMAND_SEEK_TO_NEXT_WINDOW,
|
||||||
|
COMMAND_SEEK_TO_NEXT,
|
||||||
COMMAND_SEEK_TO_WINDOW,
|
COMMAND_SEEK_TO_WINDOW,
|
||||||
COMMAND_SEEK_BACK,
|
COMMAND_SEEK_BACK,
|
||||||
COMMAND_SEEK_FORWARD,
|
COMMAND_SEEK_FORWARD,
|
||||||
@ -1257,15 +1258,15 @@ public interface Player {
|
|||||||
* #COMMAND_PREPARE_STOP}, {@link #COMMAND_SEEK_TO_DEFAULT_POSITION}, {@link
|
* #COMMAND_PREPARE_STOP}, {@link #COMMAND_SEEK_TO_DEFAULT_POSITION}, {@link
|
||||||
* #COMMAND_SEEK_IN_CURRENT_WINDOW}, {@link #COMMAND_SEEK_TO_PREVIOUS_WINDOW}, {@link
|
* #COMMAND_SEEK_IN_CURRENT_WINDOW}, {@link #COMMAND_SEEK_TO_PREVIOUS_WINDOW}, {@link
|
||||||
* #COMMAND_SEEK_TO_PREVIOUS}, {@link #COMMAND_SEEK_TO_NEXT_WINDOW}, {@link
|
* #COMMAND_SEEK_TO_PREVIOUS}, {@link #COMMAND_SEEK_TO_NEXT_WINDOW}, {@link
|
||||||
* #COMMAND_SEEK_TO_WINDOW}, {@link #COMMAND_SEEK_BACK}, {@link #COMMAND_SEEK_FORWARD}, {@link
|
* #COMMAND_SEEK_TO_NEXT}, {@link #COMMAND_SEEK_TO_WINDOW}, {@link #COMMAND_SEEK_BACK}, {@link
|
||||||
* #COMMAND_SET_SPEED_AND_PITCH}, {@link #COMMAND_SET_SHUFFLE_MODE}, {@link
|
* #COMMAND_SEEK_FORWARD}, {@link #COMMAND_SET_SPEED_AND_PITCH}, {@link
|
||||||
* #COMMAND_SET_REPEAT_MODE}, {@link #COMMAND_GET_CURRENT_MEDIA_ITEM}, {@link
|
* #COMMAND_SET_SHUFFLE_MODE}, {@link #COMMAND_SET_REPEAT_MODE}, {@link
|
||||||
* #COMMAND_GET_TIMELINE}, {@link #COMMAND_GET_MEDIA_ITEMS_METADATA}, {@link
|
* #COMMAND_GET_CURRENT_MEDIA_ITEM}, {@link #COMMAND_GET_TIMELINE}, {@link
|
||||||
* #COMMAND_SET_MEDIA_ITEMS_METADATA}, {@link #COMMAND_CHANGE_MEDIA_ITEMS}, {@link
|
* #COMMAND_GET_MEDIA_ITEMS_METADATA}, {@link #COMMAND_SET_MEDIA_ITEMS_METADATA}, {@link
|
||||||
* #COMMAND_GET_AUDIO_ATTRIBUTES}, {@link #COMMAND_GET_VOLUME}, {@link
|
* #COMMAND_CHANGE_MEDIA_ITEMS}, {@link #COMMAND_GET_AUDIO_ATTRIBUTES}, {@link
|
||||||
* #COMMAND_GET_DEVICE_VOLUME}, {@link #COMMAND_SET_VOLUME}, {@link #COMMAND_SET_DEVICE_VOLUME},
|
* #COMMAND_GET_VOLUME}, {@link #COMMAND_GET_DEVICE_VOLUME}, {@link #COMMAND_SET_VOLUME}, {@link
|
||||||
* {@link #COMMAND_ADJUST_DEVICE_VOLUME}, {@link #COMMAND_SET_VIDEO_SURFACE} or {@link
|
* #COMMAND_SET_DEVICE_VOLUME}, {@link #COMMAND_ADJUST_DEVICE_VOLUME}, {@link
|
||||||
* #COMMAND_GET_TEXT}.
|
* #COMMAND_SET_VIDEO_SURFACE} or {@link #COMMAND_GET_TEXT}.
|
||||||
*/
|
*/
|
||||||
@Documented
|
@Documented
|
||||||
@Retention(RetentionPolicy.SOURCE)
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
@ -1278,6 +1279,7 @@ public interface Player {
|
|||||||
COMMAND_SEEK_TO_PREVIOUS_WINDOW,
|
COMMAND_SEEK_TO_PREVIOUS_WINDOW,
|
||||||
COMMAND_SEEK_TO_PREVIOUS,
|
COMMAND_SEEK_TO_PREVIOUS,
|
||||||
COMMAND_SEEK_TO_NEXT_WINDOW,
|
COMMAND_SEEK_TO_NEXT_WINDOW,
|
||||||
|
COMMAND_SEEK_TO_NEXT,
|
||||||
COMMAND_SEEK_TO_WINDOW,
|
COMMAND_SEEK_TO_WINDOW,
|
||||||
COMMAND_SEEK_BACK,
|
COMMAND_SEEK_BACK,
|
||||||
COMMAND_SEEK_FORWARD,
|
COMMAND_SEEK_FORWARD,
|
||||||
@ -1313,44 +1315,46 @@ public interface Player {
|
|||||||
int COMMAND_SEEK_TO_PREVIOUS = 6;
|
int COMMAND_SEEK_TO_PREVIOUS = 6;
|
||||||
/** Command to seek to the default position of the next window. */
|
/** Command to seek to the default position of the next window. */
|
||||||
int COMMAND_SEEK_TO_NEXT_WINDOW = 7;
|
int COMMAND_SEEK_TO_NEXT_WINDOW = 7;
|
||||||
|
/** Command to seek to a later position in the current or next window. */
|
||||||
|
int COMMAND_SEEK_TO_NEXT = 8;
|
||||||
/** Command to seek anywhere in any window. */
|
/** Command to seek anywhere in any window. */
|
||||||
int COMMAND_SEEK_TO_WINDOW = 8;
|
int COMMAND_SEEK_TO_WINDOW = 9;
|
||||||
/** Command to seek back by a fixed increment into the current window. */
|
/** Command to seek back by a fixed increment into the current window. */
|
||||||
int COMMAND_SEEK_BACK = 9;
|
int COMMAND_SEEK_BACK = 10;
|
||||||
/** Command to seek forward by a fixed increment into the current window. */
|
/** Command to seek forward by a fixed increment into the current window. */
|
||||||
int COMMAND_SEEK_FORWARD = 10;
|
int COMMAND_SEEK_FORWARD = 11;
|
||||||
/** Command to set the playback speed and pitch. */
|
/** Command to set the playback speed and pitch. */
|
||||||
int COMMAND_SET_SPEED_AND_PITCH = 11;
|
int COMMAND_SET_SPEED_AND_PITCH = 12;
|
||||||
/** Command to enable shuffling. */
|
/** Command to enable shuffling. */
|
||||||
int COMMAND_SET_SHUFFLE_MODE = 12;
|
int COMMAND_SET_SHUFFLE_MODE = 13;
|
||||||
/** Command to set the repeat mode. */
|
/** Command to set the repeat mode. */
|
||||||
int COMMAND_SET_REPEAT_MODE = 13;
|
int COMMAND_SET_REPEAT_MODE = 14;
|
||||||
/** Command to get the {@link MediaItem} of the current window. */
|
/** Command to get the {@link MediaItem} of the current window. */
|
||||||
int COMMAND_GET_CURRENT_MEDIA_ITEM = 14;
|
int COMMAND_GET_CURRENT_MEDIA_ITEM = 15;
|
||||||
/** Command to get the information about the current timeline. */
|
/** Command to get the information about the current timeline. */
|
||||||
int COMMAND_GET_TIMELINE = 15;
|
int COMMAND_GET_TIMELINE = 16;
|
||||||
/** Command to get the {@link MediaItem MediaItems} metadata. */
|
/** Command to get the {@link MediaItem MediaItems} metadata. */
|
||||||
int COMMAND_GET_MEDIA_ITEMS_METADATA = 16;
|
int COMMAND_GET_MEDIA_ITEMS_METADATA = 17;
|
||||||
/** Command to set the {@link MediaItem MediaItems} metadata. */
|
/** Command to set the {@link MediaItem MediaItems} metadata. */
|
||||||
int COMMAND_SET_MEDIA_ITEMS_METADATA = 17;
|
int COMMAND_SET_MEDIA_ITEMS_METADATA = 18;
|
||||||
/** Command to change the {@link MediaItem MediaItems} in the playlist. */
|
/** Command to change the {@link MediaItem MediaItems} in the playlist. */
|
||||||
int COMMAND_CHANGE_MEDIA_ITEMS = 18;
|
int COMMAND_CHANGE_MEDIA_ITEMS = 19;
|
||||||
/** Command to get the player current {@link AudioAttributes}. */
|
/** Command to get the player current {@link AudioAttributes}. */
|
||||||
int COMMAND_GET_AUDIO_ATTRIBUTES = 19;
|
int COMMAND_GET_AUDIO_ATTRIBUTES = 20;
|
||||||
/** Command to get the player volume. */
|
/** Command to get the player volume. */
|
||||||
int COMMAND_GET_VOLUME = 20;
|
int COMMAND_GET_VOLUME = 21;
|
||||||
/** Command to get the device volume and whether it is muted. */
|
/** Command to get the device volume and whether it is muted. */
|
||||||
int COMMAND_GET_DEVICE_VOLUME = 21;
|
int COMMAND_GET_DEVICE_VOLUME = 22;
|
||||||
/** Command to set the player volume. */
|
/** Command to set the player volume. */
|
||||||
int COMMAND_SET_VOLUME = 22;
|
int COMMAND_SET_VOLUME = 23;
|
||||||
/** Command to set the device volume and mute it. */
|
/** Command to set the device volume and mute it. */
|
||||||
int COMMAND_SET_DEVICE_VOLUME = 23;
|
int COMMAND_SET_DEVICE_VOLUME = 24;
|
||||||
/** Command to increase and decrease the device volume and mute it. */
|
/** Command to increase and decrease the device volume and mute it. */
|
||||||
int COMMAND_ADJUST_DEVICE_VOLUME = 24;
|
int COMMAND_ADJUST_DEVICE_VOLUME = 25;
|
||||||
/** Command to set and clear the surface on which to render the video. */
|
/** Command to set and clear the surface on which to render the video. */
|
||||||
int COMMAND_SET_VIDEO_SURFACE = 25;
|
int COMMAND_SET_VIDEO_SURFACE = 26;
|
||||||
/** Command to get the text that should currently be displayed by the player. */
|
/** Command to get the text that should currently be displayed by the player. */
|
||||||
int COMMAND_GET_TEXT = 26;
|
int COMMAND_GET_TEXT = 27;
|
||||||
|
|
||||||
/** Represents an invalid {@link Command}. */
|
/** Represents an invalid {@link Command}. */
|
||||||
int COMMAND_INVALID = -1;
|
int COMMAND_INVALID = -1;
|
||||||
|
@ -30,6 +30,7 @@ import static com.google.android.exoplayer2.Player.COMMAND_SEEK_BACK;
|
|||||||
import static com.google.android.exoplayer2.Player.COMMAND_SEEK_FORWARD;
|
import static com.google.android.exoplayer2.Player.COMMAND_SEEK_FORWARD;
|
||||||
import static com.google.android.exoplayer2.Player.COMMAND_SEEK_IN_CURRENT_WINDOW;
|
import static com.google.android.exoplayer2.Player.COMMAND_SEEK_IN_CURRENT_WINDOW;
|
||||||
import static com.google.android.exoplayer2.Player.COMMAND_SEEK_TO_DEFAULT_POSITION;
|
import static com.google.android.exoplayer2.Player.COMMAND_SEEK_TO_DEFAULT_POSITION;
|
||||||
|
import static com.google.android.exoplayer2.Player.COMMAND_SEEK_TO_NEXT;
|
||||||
import static com.google.android.exoplayer2.Player.COMMAND_SEEK_TO_NEXT_WINDOW;
|
import static com.google.android.exoplayer2.Player.COMMAND_SEEK_TO_NEXT_WINDOW;
|
||||||
import static com.google.android.exoplayer2.Player.COMMAND_SEEK_TO_PREVIOUS;
|
import static com.google.android.exoplayer2.Player.COMMAND_SEEK_TO_PREVIOUS;
|
||||||
import static com.google.android.exoplayer2.Player.COMMAND_SEEK_TO_PREVIOUS_WINDOW;
|
import static com.google.android.exoplayer2.Player.COMMAND_SEEK_TO_PREVIOUS_WINDOW;
|
||||||
@ -8181,6 +8182,7 @@ public final class ExoPlayerTest {
|
|||||||
assertThat(player.isCommandAvailable(COMMAND_SEEK_TO_PREVIOUS_WINDOW)).isFalse();
|
assertThat(player.isCommandAvailable(COMMAND_SEEK_TO_PREVIOUS_WINDOW)).isFalse();
|
||||||
assertThat(player.isCommandAvailable(COMMAND_SEEK_TO_PREVIOUS)).isTrue();
|
assertThat(player.isCommandAvailable(COMMAND_SEEK_TO_PREVIOUS)).isTrue();
|
||||||
assertThat(player.isCommandAvailable(COMMAND_SEEK_TO_NEXT_WINDOW)).isTrue();
|
assertThat(player.isCommandAvailable(COMMAND_SEEK_TO_NEXT_WINDOW)).isTrue();
|
||||||
|
assertThat(player.isCommandAvailable(COMMAND_SEEK_TO_NEXT)).isTrue();
|
||||||
assertThat(player.isCommandAvailable(COMMAND_SEEK_TO_WINDOW)).isTrue();
|
assertThat(player.isCommandAvailable(COMMAND_SEEK_TO_WINDOW)).isTrue();
|
||||||
assertThat(player.isCommandAvailable(COMMAND_SEEK_BACK)).isFalse();
|
assertThat(player.isCommandAvailable(COMMAND_SEEK_BACK)).isFalse();
|
||||||
assertThat(player.isCommandAvailable(COMMAND_SEEK_FORWARD)).isFalse();
|
assertThat(player.isCommandAvailable(COMMAND_SEEK_FORWARD)).isFalse();
|
||||||
@ -8231,6 +8233,7 @@ public final class ExoPlayerTest {
|
|||||||
assertThat(player.isCommandAvailable(COMMAND_SEEK_TO_PREVIOUS_WINDOW)).isFalse();
|
assertThat(player.isCommandAvailable(COMMAND_SEEK_TO_PREVIOUS_WINDOW)).isFalse();
|
||||||
assertThat(player.isCommandAvailable(COMMAND_SEEK_TO_PREVIOUS)).isFalse();
|
assertThat(player.isCommandAvailable(COMMAND_SEEK_TO_PREVIOUS)).isFalse();
|
||||||
assertThat(player.isCommandAvailable(COMMAND_SEEK_TO_NEXT_WINDOW)).isFalse();
|
assertThat(player.isCommandAvailable(COMMAND_SEEK_TO_NEXT_WINDOW)).isFalse();
|
||||||
|
assertThat(player.isCommandAvailable(COMMAND_SEEK_TO_NEXT)).isFalse();
|
||||||
assertThat(player.isCommandAvailable(COMMAND_SEEK_TO_WINDOW)).isFalse();
|
assertThat(player.isCommandAvailable(COMMAND_SEEK_TO_WINDOW)).isFalse();
|
||||||
assertThat(player.isCommandAvailable(COMMAND_SEEK_BACK)).isFalse();
|
assertThat(player.isCommandAvailable(COMMAND_SEEK_BACK)).isFalse();
|
||||||
assertThat(player.isCommandAvailable(COMMAND_SEEK_FORWARD)).isFalse();
|
assertThat(player.isCommandAvailable(COMMAND_SEEK_FORWARD)).isFalse();
|
||||||
@ -8309,14 +8312,39 @@ public final class ExoPlayerTest {
|
|||||||
assertThat(player.isCommandAvailable(COMMAND_SEEK_TO_PREVIOUS)).isTrue();
|
assertThat(player.isCommandAvailable(COMMAND_SEEK_TO_PREVIOUS)).isTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void isCommandAvailable_duringLiveItem_isTrueForSeekToNext() throws Exception {
|
||||||
|
Timeline timelineWithLiveWindow =
|
||||||
|
new FakeTimeline(
|
||||||
|
new TimelineWindowDefinition(
|
||||||
|
/* periodCount= */ 1,
|
||||||
|
/* id= */ 0,
|
||||||
|
/* isSeekable= */ true,
|
||||||
|
/* isDynamic= */ true,
|
||||||
|
/* isLive= */ true,
|
||||||
|
/* isPlaceholder= */ false,
|
||||||
|
/* durationUs= */ C.TIME_UNSET,
|
||||||
|
/* defaultPositionUs= */ 10_000_000,
|
||||||
|
TimelineWindowDefinition.DEFAULT_WINDOW_OFFSET_IN_FIRST_PERIOD_US,
|
||||||
|
AdPlaybackState.NONE));
|
||||||
|
ExoPlayer player = new TestExoPlayerBuilder(context).build();
|
||||||
|
|
||||||
|
player.addMediaSource(new FakeMediaSource(timelineWithLiveWindow));
|
||||||
|
player.prepare();
|
||||||
|
runUntilPlaybackState(player, Player.STATE_READY);
|
||||||
|
|
||||||
|
assertThat(player.isCommandAvailable(COMMAND_SEEK_TO_NEXT)).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void seekTo_nextWindow_notifiesAvailableCommandsChanged() {
|
public void seekTo_nextWindow_notifiesAvailableCommandsChanged() {
|
||||||
Player.Commands commandsWithSeekToPreviousWindow =
|
Player.Commands commandsWithSeekToPreviousWindow =
|
||||||
createWithDefaultCommands(COMMAND_SEEK_TO_PREVIOUS_WINDOW);
|
createWithDefaultCommands(COMMAND_SEEK_TO_PREVIOUS_WINDOW);
|
||||||
Player.Commands commandsWithSeekToNextWindow =
|
Player.Commands commandsWithSeekToNextWindow =
|
||||||
createWithDefaultCommands(COMMAND_SEEK_TO_NEXT_WINDOW);
|
createWithDefaultCommands(COMMAND_SEEK_TO_NEXT_WINDOW, COMMAND_SEEK_TO_NEXT);
|
||||||
Player.Commands commandsWithSeekToPreviousAndNextWindow =
|
Player.Commands commandsWithSeekToPreviousAndNextWindow =
|
||||||
createWithDefaultCommands(COMMAND_SEEK_TO_PREVIOUS_WINDOW, COMMAND_SEEK_TO_NEXT_WINDOW);
|
createWithDefaultCommands(
|
||||||
|
COMMAND_SEEK_TO_PREVIOUS_WINDOW, COMMAND_SEEK_TO_NEXT_WINDOW, COMMAND_SEEK_TO_NEXT);
|
||||||
Player.Listener mockListener = mock(Player.Listener.class);
|
Player.Listener mockListener = mock(Player.Listener.class);
|
||||||
ExoPlayer player = new TestExoPlayerBuilder(context).build();
|
ExoPlayer player = new TestExoPlayerBuilder(context).build();
|
||||||
player.addListener(mockListener);
|
player.addListener(mockListener);
|
||||||
@ -8348,9 +8376,10 @@ public final class ExoPlayerTest {
|
|||||||
Player.Commands commandsWithSeekToPreviousWindow =
|
Player.Commands commandsWithSeekToPreviousWindow =
|
||||||
createWithDefaultCommands(COMMAND_SEEK_TO_PREVIOUS_WINDOW);
|
createWithDefaultCommands(COMMAND_SEEK_TO_PREVIOUS_WINDOW);
|
||||||
Player.Commands commandsWithSeekToNextWindow =
|
Player.Commands commandsWithSeekToNextWindow =
|
||||||
createWithDefaultCommands(COMMAND_SEEK_TO_NEXT_WINDOW);
|
createWithDefaultCommands(COMMAND_SEEK_TO_NEXT_WINDOW, COMMAND_SEEK_TO_NEXT);
|
||||||
Player.Commands commandsWithSeekToPreviousAndNextWindow =
|
Player.Commands commandsWithSeekToPreviousAndNextWindow =
|
||||||
createWithDefaultCommands(COMMAND_SEEK_TO_PREVIOUS_WINDOW, COMMAND_SEEK_TO_NEXT_WINDOW);
|
createWithDefaultCommands(
|
||||||
|
COMMAND_SEEK_TO_PREVIOUS_WINDOW, COMMAND_SEEK_TO_NEXT_WINDOW, COMMAND_SEEK_TO_NEXT);
|
||||||
Player.Listener mockListener = mock(Player.Listener.class);
|
Player.Listener mockListener = mock(Player.Listener.class);
|
||||||
ExoPlayer player = new TestExoPlayerBuilder(context).build();
|
ExoPlayer player = new TestExoPlayerBuilder(context).build();
|
||||||
player.addListener(mockListener);
|
player.addListener(mockListener);
|
||||||
@ -8397,26 +8426,28 @@ public final class ExoPlayerTest {
|
|||||||
@Test
|
@Test
|
||||||
public void automaticWindowTransition_notifiesAvailableCommandsChanged() throws Exception {
|
public void automaticWindowTransition_notifiesAvailableCommandsChanged() throws Exception {
|
||||||
Player.Commands commandsWithSeekToNextWindow =
|
Player.Commands commandsWithSeekToNextWindow =
|
||||||
createWithDefaultCommands(COMMAND_SEEK_TO_NEXT_WINDOW);
|
createWithDefaultCommands(COMMAND_SEEK_TO_NEXT_WINDOW, COMMAND_SEEK_TO_NEXT);
|
||||||
Player.Commands commandsWithSeekInCurrentAndToNextWindow =
|
Player.Commands commandsWithSeekInCurrentAndToNextWindow =
|
||||||
createWithDefaultCommands(
|
createWithDefaultCommands(
|
||||||
COMMAND_SEEK_IN_CURRENT_WINDOW,
|
COMMAND_SEEK_IN_CURRENT_WINDOW,
|
||||||
|
COMMAND_SEEK_TO_NEXT_WINDOW,
|
||||||
|
COMMAND_SEEK_TO_NEXT,
|
||||||
COMMAND_SEEK_BACK,
|
COMMAND_SEEK_BACK,
|
||||||
COMMAND_SEEK_FORWARD,
|
COMMAND_SEEK_FORWARD);
|
||||||
COMMAND_SEEK_TO_NEXT_WINDOW);
|
|
||||||
Player.Commands commandsWithSeekInCurrentAndToPreviousWindow =
|
Player.Commands commandsWithSeekInCurrentAndToPreviousWindow =
|
||||||
createWithDefaultCommands(
|
createWithDefaultCommands(
|
||||||
COMMAND_SEEK_IN_CURRENT_WINDOW,
|
COMMAND_SEEK_IN_CURRENT_WINDOW,
|
||||||
|
COMMAND_SEEK_TO_PREVIOUS_WINDOW,
|
||||||
COMMAND_SEEK_BACK,
|
COMMAND_SEEK_BACK,
|
||||||
COMMAND_SEEK_FORWARD,
|
COMMAND_SEEK_FORWARD);
|
||||||
COMMAND_SEEK_TO_PREVIOUS_WINDOW);
|
|
||||||
Player.Commands commandsWithSeekAnywhere =
|
Player.Commands commandsWithSeekAnywhere =
|
||||||
createWithDefaultCommands(
|
createWithDefaultCommands(
|
||||||
COMMAND_SEEK_IN_CURRENT_WINDOW,
|
COMMAND_SEEK_IN_CURRENT_WINDOW,
|
||||||
COMMAND_SEEK_BACK,
|
COMMAND_SEEK_TO_PREVIOUS_WINDOW,
|
||||||
COMMAND_SEEK_FORWARD,
|
|
||||||
COMMAND_SEEK_TO_NEXT_WINDOW,
|
COMMAND_SEEK_TO_NEXT_WINDOW,
|
||||||
COMMAND_SEEK_TO_PREVIOUS_WINDOW);
|
COMMAND_SEEK_TO_NEXT,
|
||||||
|
COMMAND_SEEK_BACK,
|
||||||
|
COMMAND_SEEK_FORWARD);
|
||||||
Player.Listener mockListener = mock(Player.Listener.class);
|
Player.Listener mockListener = mock(Player.Listener.class);
|
||||||
ExoPlayer player = new TestExoPlayerBuilder(context).build();
|
ExoPlayer player = new TestExoPlayerBuilder(context).build();
|
||||||
player.addListener(mockListener);
|
player.addListener(mockListener);
|
||||||
@ -8455,7 +8486,7 @@ public final class ExoPlayerTest {
|
|||||||
public void addMediaSource_atTheEnd_notifiesAvailableCommandsChanged() {
|
public void addMediaSource_atTheEnd_notifiesAvailableCommandsChanged() {
|
||||||
Player.Commands defaultCommands = createWithDefaultCommands();
|
Player.Commands defaultCommands = createWithDefaultCommands();
|
||||||
Player.Commands commandsWithSeekToNextWindow =
|
Player.Commands commandsWithSeekToNextWindow =
|
||||||
createWithDefaultCommands(COMMAND_SEEK_TO_NEXT_WINDOW);
|
createWithDefaultCommands(COMMAND_SEEK_TO_NEXT_WINDOW, COMMAND_SEEK_TO_NEXT);
|
||||||
Player.Listener mockListener = mock(Player.Listener.class);
|
Player.Listener mockListener = mock(Player.Listener.class);
|
||||||
ExoPlayer player = new TestExoPlayerBuilder(context).build();
|
ExoPlayer player = new TestExoPlayerBuilder(context).build();
|
||||||
player.addListener(mockListener);
|
player.addListener(mockListener);
|
||||||
@ -8499,7 +8530,7 @@ public final class ExoPlayerTest {
|
|||||||
public void removeMediaItem_atTheEnd_notifiesAvailableCommandsChanged() {
|
public void removeMediaItem_atTheEnd_notifiesAvailableCommandsChanged() {
|
||||||
Player.Commands defaultCommands = createWithDefaultCommands();
|
Player.Commands defaultCommands = createWithDefaultCommands();
|
||||||
Player.Commands commandsWithSeekToNextWindow =
|
Player.Commands commandsWithSeekToNextWindow =
|
||||||
createWithDefaultCommands(COMMAND_SEEK_TO_NEXT_WINDOW);
|
createWithDefaultCommands(COMMAND_SEEK_TO_NEXT_WINDOW, COMMAND_SEEK_TO_NEXT);
|
||||||
Player.Commands emptyTimelineCommands = createWithDefaultCommands(/* isTimelineEmpty */ true);
|
Player.Commands emptyTimelineCommands = createWithDefaultCommands(/* isTimelineEmpty */ true);
|
||||||
Player.Listener mockListener = mock(Player.Listener.class);
|
Player.Listener mockListener = mock(Player.Listener.class);
|
||||||
ExoPlayer player = new TestExoPlayerBuilder(context).build();
|
ExoPlayer player = new TestExoPlayerBuilder(context).build();
|
||||||
@ -8556,7 +8587,7 @@ public final class ExoPlayerTest {
|
|||||||
public void removeMediaItem_current_notifiesAvailableCommandsChanged() {
|
public void removeMediaItem_current_notifiesAvailableCommandsChanged() {
|
||||||
Player.Commands defaultCommands = createWithDefaultCommands();
|
Player.Commands defaultCommands = createWithDefaultCommands();
|
||||||
Player.Commands commandsWithSeekToNextWindow =
|
Player.Commands commandsWithSeekToNextWindow =
|
||||||
createWithDefaultCommands(COMMAND_SEEK_TO_NEXT_WINDOW);
|
createWithDefaultCommands(COMMAND_SEEK_TO_NEXT_WINDOW, COMMAND_SEEK_TO_NEXT);
|
||||||
Player.Listener mockListener = mock(Player.Listener.class);
|
Player.Listener mockListener = mock(Player.Listener.class);
|
||||||
ExoPlayer player = new TestExoPlayerBuilder(context).build();
|
ExoPlayer player = new TestExoPlayerBuilder(context).build();
|
||||||
player.addListener(mockListener);
|
player.addListener(mockListener);
|
||||||
@ -8575,7 +8606,8 @@ public final class ExoPlayerTest {
|
|||||||
public void setRepeatMode_all_notifiesAvailableCommandsChanged() {
|
public void setRepeatMode_all_notifiesAvailableCommandsChanged() {
|
||||||
Player.Commands defaultCommands = createWithDefaultCommands();
|
Player.Commands defaultCommands = createWithDefaultCommands();
|
||||||
Player.Commands commandsWithSeekToPreviousAndNextWindow =
|
Player.Commands commandsWithSeekToPreviousAndNextWindow =
|
||||||
createWithDefaultCommands(COMMAND_SEEK_TO_PREVIOUS_WINDOW, COMMAND_SEEK_TO_NEXT_WINDOW);
|
createWithDefaultCommands(
|
||||||
|
COMMAND_SEEK_TO_PREVIOUS_WINDOW, COMMAND_SEEK_TO_NEXT_WINDOW, COMMAND_SEEK_TO_NEXT);
|
||||||
Player.Listener mockListener = mock(Player.Listener.class);
|
Player.Listener mockListener = mock(Player.Listener.class);
|
||||||
ExoPlayer player = new TestExoPlayerBuilder(context).build();
|
ExoPlayer player = new TestExoPlayerBuilder(context).build();
|
||||||
player.addListener(mockListener);
|
player.addListener(mockListener);
|
||||||
@ -8609,7 +8641,7 @@ public final class ExoPlayerTest {
|
|||||||
Player.Commands commandsWithSeekToPreviousWindow =
|
Player.Commands commandsWithSeekToPreviousWindow =
|
||||||
createWithDefaultCommands(COMMAND_SEEK_TO_PREVIOUS_WINDOW);
|
createWithDefaultCommands(COMMAND_SEEK_TO_PREVIOUS_WINDOW);
|
||||||
Player.Commands commandsWithSeekToNextWindow =
|
Player.Commands commandsWithSeekToNextWindow =
|
||||||
createWithDefaultCommands(COMMAND_SEEK_TO_NEXT_WINDOW);
|
createWithDefaultCommands(COMMAND_SEEK_TO_NEXT_WINDOW, COMMAND_SEEK_TO_NEXT);
|
||||||
Player.Listener mockListener = mock(Player.Listener.class);
|
Player.Listener mockListener = mock(Player.Listener.class);
|
||||||
ExoPlayer player = new TestExoPlayerBuilder(context).build();
|
ExoPlayer player = new TestExoPlayerBuilder(context).build();
|
||||||
player.addListener(mockListener);
|
player.addListener(mockListener);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user