Make resetPosition reset the position if true

Issue: #8024
PiperOrigin-RevId: 335846035
This commit is contained in:
bachinger 2020-10-07 13:30:05 +01:00 committed by kim-vde
parent 64d5be8719
commit 0a9b11d3dd
4 changed files with 49 additions and 6 deletions

View File

@ -309,6 +309,13 @@ public final class CastPlayer extends BasePlayer {
} }
} }
@Override
public void setMediaItems(List<MediaItem> mediaItems, boolean resetPosition) {
int windowIndex = resetPosition ? 0 : getCurrentWindowIndex();
long startPositionMs = resetPosition ? C.TIME_UNSET : getContentPosition();
setMediaItems(mediaItems, windowIndex, startPositionMs);
}
@Override @Override
public void setMediaItems( public void setMediaItems(
List<MediaItem> mediaItems, int startWindowIndex, long startPositionMs) { List<MediaItem> mediaItems, int startWindowIndex, long startPositionMs) {

View File

@ -44,12 +44,6 @@ public abstract class BasePlayer implements Player {
setMediaItems(Collections.singletonList(mediaItem), resetPosition); setMediaItems(Collections.singletonList(mediaItem), resetPosition);
} }
@Override
public void setMediaItems(List<MediaItem> mediaItems, boolean resetPosition) {
setMediaItems(
mediaItems, /* startWindowIndex= */ C.INDEX_UNSET, /* startPositionMs= */ C.TIME_UNSET);
}
@Override @Override
public void setMediaItems(List<MediaItem> mediaItems) { public void setMediaItems(List<MediaItem> mediaItems) {
setMediaItems(mediaItems, /* resetPosition= */ true); setMediaItems(mediaItems, /* resetPosition= */ true);

View File

@ -338,6 +338,11 @@ import java.util.concurrent.TimeoutException;
prepare(); prepare();
} }
@Override
public void setMediaItems(List<MediaItem> mediaItems, boolean resetPosition) {
setMediaSources(createMediaSources(mediaItems), resetPosition);
}
@Override @Override
public void setMediaItems( public void setMediaItems(
List<MediaItem> mediaItems, int startWindowIndex, long startPositionMs) { List<MediaItem> mediaItems, int startWindowIndex, long startPositionMs) {

View File

@ -109,6 +109,7 @@ import com.google.android.exoplayer2.util.Assertions;
import com.google.android.exoplayer2.util.Clock; import com.google.android.exoplayer2.util.Clock;
import com.google.android.exoplayer2.util.MimeTypes; import com.google.android.exoplayer2.util.MimeTypes;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
@ -5706,6 +5707,42 @@ public final class ExoPlayerTest {
assertArrayEquals(new int[] {0, 0, 0}, currentWindowIndices); assertArrayEquals(new int[] {0, 0, 0}, currentWindowIndices);
} }
@Test
public void setMediaItems_resetPosition_resetsPosition() throws Exception {
final int[] currentWindowIndices = {C.INDEX_UNSET, C.INDEX_UNSET};
final long[] currentPositions = {C.INDEX_UNSET, C.INDEX_UNSET};
ActionSchedule actionSchedule =
new ActionSchedule.Builder(TAG)
.pause()
.executeRunnable(
new PlayerRunnable() {
@Override
public void run(SimpleExoPlayer player) {
player.seekTo(/* windowIndex= */ 1, /* positionMs= */ 1000);
currentWindowIndices[0] = player.getCurrentWindowIndex();
currentPositions[0] = player.getCurrentPosition();
List<MediaItem> listOfTwo =
Lists.newArrayList(
MediaItem.fromUri(Uri.EMPTY), MediaItem.fromUri(Uri.EMPTY));
player.setMediaItems(listOfTwo, /* resetPosition= */ true);
currentWindowIndices[1] = player.getCurrentWindowIndex();
currentPositions[1] = player.getCurrentPosition();
}
})
.prepare()
.waitForTimelineChanged()
.play()
.build();
new ExoPlayerTestRunner.Builder(context)
.setActionSchedule(actionSchedule)
.build()
.start(/* doPrepare= */ false)
.blockUntilActionScheduleFinished(TIMEOUT_MS)
.blockUntilEnded(TIMEOUT_MS);
assertArrayEquals(new int[] {1, 0}, currentWindowIndices);
assertArrayEquals(new long[] {1000, 0}, currentPositions);
}
@Test @Test
public void setMediaSources_empty_whenEmpty_validInitialSeek_correctMaskingWindowIndex() public void setMediaSources_empty_whenEmpty_validInitialSeek_correctMaskingWindowIndex()
throws Exception { throws Exception {