/** * Returns whether the given period is the last period of the timeline depending on the * {@code repeatMode} and whether shuffling is enabled. * * @param periodIndex A period index. * @param period A {@link Period} to be used internally. Must not be null. * @param window A {@link Window} to be used internally. Must not be null. * @param repeatMode A repeat mode. * @param shuffleModeEnabled Whether shuffling is enabled. * @return Whether the period of the given index is the last period of the timeline. */ public final boolean isLastPeriod(int periodIndex, Period period, Window window, @Player.RepeatMode int repeatMode, boolean shuffleModeEnabled) { return getNextPeriodIndex(periodIndex, period, window, repeatMode, shuffleModeEnabled) == C.INDEX_UNSET; }
/** * Given a period index into an old timeline, finds the first subsequent period that also exists * in a new timeline. The uid of this period in the new timeline is returned. * * @param oldPeriodUid The index of the period in the old timeline. * @param oldTimeline The old timeline. * @param newTimeline The new timeline. * @return The uid in the new timeline of the first subsequent period, or null if no such period * was found. */ private @Nullable Object resolveSubsequentPeriod( Object oldPeriodUid, Timeline oldTimeline, Timeline newTimeline) { int oldPeriodIndex = oldTimeline.getIndexOfPeriod(oldPeriodUid); int newPeriodIndex = C.INDEX_UNSET; int maxIterations = oldTimeline.getPeriodCount(); for (int i = 0; i < maxIterations && newPeriodIndex == C.INDEX_UNSET; i++) { oldPeriodIndex = oldTimeline.getNextPeriodIndex(oldPeriodIndex, period, window, repeatMode, shuffleModeEnabled); if (oldPeriodIndex == C.INDEX_UNSET) { // We've reached the end of the old timeline. break; } newPeriodIndex = newTimeline.getIndexOfPeriod(oldTimeline.getUidOfPeriod(oldPeriodIndex)); } return newPeriodIndex == C.INDEX_UNSET ? null : newTimeline.getUidOfPeriod(newPeriodIndex); }
for (int repeatMode : REPEAT_MODES) { if (i < accumulatedPeriodCounts[expectedWindowIndex + 1] - 1) { assertThat(timeline.getNextPeriodIndex(i, period, window, repeatMode, false)) .isEqualTo(i + 1); } else { int nextPeriod = nextWindow == C.INDEX_UNSET ? C.INDEX_UNSET : accumulatedPeriodCounts[nextWindow]; assertThat(timeline.getNextPeriodIndex(i, period, window, repeatMode, false)) .isEqualTo(nextPeriod);
while (true) { int nextPeriodIndex = timeline.getNextPeriodIndex( currentPeriodIndex, period, window, repeatMode, shuffleModeEnabled); while (lastValidPeriodHolder.next != null
timeline.getNextPeriodIndex( periodIndex, period, window, repeatMode, shuffleModeEnabled);
for (int repeatMode : REPEAT_MODES) { if (i < accumulatedPeriodCounts[expectedWindowIndex + 1] - 1) { assertThat(timeline.getNextPeriodIndex(i, period, window, repeatMode, false)) .isEqualTo(i + 1); } else { int nextPeriod = nextWindow == C.INDEX_UNSET ? C.INDEX_UNSET : accumulatedPeriodCounts[nextWindow]; assertThat(timeline.getNextPeriodIndex(i, period, window, repeatMode, false)) .isEqualTo(nextPeriod);
int currentPeriodIndex = timeline.getIndexOfPeriod(mediaPeriodInfo.id.periodUid); int nextPeriodIndex = timeline.getNextPeriodIndex( currentPeriodIndex, period, window, repeatMode, shuffleModeEnabled); if (nextPeriodIndex == C.INDEX_UNSET) {