From 424d2a52fec1340fd1bc28bb5ddec1a4e7605140 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABtan=20Muller?= Date: Sun, 9 Jun 2024 16:23:56 +0200 Subject: [PATCH] Support setting the max seek to previous position on `CastPlayer` --- .../java/androidx/media3/cast/CastPlayer.java | 32 ++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/libraries/cast/src/main/java/androidx/media3/cast/CastPlayer.java b/libraries/cast/src/main/java/androidx/media3/cast/CastPlayer.java index f18fde331c..56309d8de4 100644 --- a/libraries/cast/src/main/java/androidx/media3/cast/CastPlayer.java +++ b/libraries/cast/src/main/java/androidx/media3/cast/CastPlayer.java @@ -124,6 +124,7 @@ public final class CastPlayer extends BasePlayer { private final MediaItemConverter mediaItemConverter; private final long seekBackIncrementMs; private final long seekForwardIncrementMs; + private final long maxSeekToPreviousPositionMs; // TODO: Allow custom implementations of CastTimelineTracker. private final CastTimelineTracker timelineTracker; private final Timeline.Period period; @@ -200,11 +201,40 @@ public final class CastPlayer extends BasePlayer { MediaItemConverter mediaItemConverter, @IntRange(from = 1) long seekBackIncrementMs, @IntRange(from = 1) long seekForwardIncrementMs) { + this( + castContext, + mediaItemConverter, + seekBackIncrementMs, + seekForwardIncrementMs, + C.DEFAULT_MAX_SEEK_TO_PREVIOUS_POSITION_MS); + } + + /** + * Creates a new cast player. + * + * @param castContext The context from which the cast session is obtained. + * @param mediaItemConverter The {@link MediaItemConverter} to use. + * @param seekBackIncrementMs The {@link #seekBack()} increment, in milliseconds. + * @param seekForwardIncrementMs The {@link #seekForward()} increment, in milliseconds. + * @param maxSeekToPreviousPositionMs The maximum position for which {@link #seekToPrevious()} + * seeks to the previous {@link MediaItem}, in milliseconds. + * @throws IllegalArgumentException If {@code seekBackIncrementMs} or {@code + * seekForwardIncrementMs} is non-positive, or if {@code maxSeekToPreviousPositionMs} is + * negative. + */ + public CastPlayer( + CastContext castContext, + MediaItemConverter mediaItemConverter, + @IntRange(from = 1) long seekBackIncrementMs, + @IntRange(from = 1) long seekForwardIncrementMs, + @IntRange(from = 0) long maxSeekToPreviousPositionMs) { checkArgument(seekBackIncrementMs > 0 && seekForwardIncrementMs > 0); + checkArgument(maxSeekToPreviousPositionMs >= 0L); this.castContext = castContext; this.mediaItemConverter = mediaItemConverter; this.seekBackIncrementMs = seekBackIncrementMs; this.seekForwardIncrementMs = seekForwardIncrementMs; + this.maxSeekToPreviousPositionMs = maxSeekToPreviousPositionMs; timelineTracker = new CastTimelineTracker(mediaItemConverter); period = new Timeline.Period(); statusListener = new StatusListener(); @@ -481,7 +511,7 @@ public final class CastPlayer extends BasePlayer { @Override public long getMaxSeekToPreviousPosition() { - return C.DEFAULT_MAX_SEEK_TO_PREVIOUS_POSITION_MS; + return maxSeekToPreviousPositionMs; } @Override