@Override public final void seekTo(long positionMs) { seekTo(getCurrentWindowIndex(), positionMs); }
@Override public final void seekToDefaultPosition() { seekToDefaultPosition(getCurrentWindowIndex()); }
@Override @Nullable public final Object getCurrentTag() { int windowIndex = getCurrentWindowIndex(); Timeline timeline = getCurrentTimeline(); return windowIndex >= timeline.getWindowCount() ? null : timeline.getWindow(windowIndex, window, /* setTag= */ true).tag; }
@Override public final boolean isCurrentWindowDynamic() { Timeline timeline = getCurrentTimeline(); return !timeline.isEmpty() && timeline.getWindow(getCurrentWindowIndex(), window).isDynamic; }
@Override public final boolean isCurrentWindowSeekable() { Timeline timeline = getCurrentTimeline(); return !timeline.isEmpty() && timeline.getWindow(getCurrentWindowIndex(), window).isSeekable; }
@Override public final long getContentDuration() { Timeline timeline = getCurrentTimeline(); return timeline.isEmpty() ? C.TIME_UNSET : timeline.getWindow(getCurrentWindowIndex(), window).getDurationMs(); }
@Override public final int getNextWindowIndex() { Timeline timeline = getCurrentTimeline(); return timeline.isEmpty() ? C.INDEX_UNSET : timeline.getNextWindowIndex( getCurrentWindowIndex(), getRepeatModeForNavigation(), getShuffleModeEnabled()); }
@Override public final int getPreviousWindowIndex() { Timeline timeline = getCurrentTimeline(); return timeline.isEmpty() ? C.INDEX_UNSET : timeline.getPreviousWindowIndex( getCurrentWindowIndex(), getRepeatModeForNavigation(), getShuffleModeEnabled()); }