Commit 97cfcb57 by olly Committed by Oliver Woodman

Cleanup: Only clamp seek positions for FFWD/RWND

It's confusing that seekTo(player, windowIndex, positionMs) does
clamping, because it only makes sense if windowIndex is the current
window.

Note: This doesn't actually fix anything (other than code clarity).
In cases where we were passing other windowIndices, we always
passed 0 as the position and so the clamping logic wouldn't have
had any effect.
PiperOrigin-RevId: 272857104
parent 02c34499
...@@ -868,26 +868,27 @@ public final class MediaSessionConnector { ...@@ -868,26 +868,27 @@ public final class MediaSessionConnector {
private void rewind(Player player) { private void rewind(Player player) {
if (player.isCurrentWindowSeekable() && rewindMs > 0) { if (player.isCurrentWindowSeekable() && rewindMs > 0) {
seekTo(player, player.getCurrentPosition() - rewindMs); seekToOffset(player, /* offsetMs= */ -rewindMs);
} }
} }
private void fastForward(Player player) { private void fastForward(Player player) {
if (player.isCurrentWindowSeekable() && fastForwardMs > 0) { if (player.isCurrentWindowSeekable() && fastForwardMs > 0) {
seekTo(player, player.getCurrentPosition() + fastForwardMs); seekToOffset(player, /* offsetMs= */ fastForwardMs);
} }
} }
private void seekTo(Player player, long positionMs) { private void seekToOffset(Player player, long offsetMs) {
seekTo(player, player.getCurrentWindowIndex(), positionMs); long positionMs = player.getCurrentPosition() + offsetMs;
}
private void seekTo(Player player, int windowIndex, long positionMs) {
long durationMs = player.getDuration(); long durationMs = player.getDuration();
if (durationMs != C.TIME_UNSET) { if (durationMs != C.TIME_UNSET) {
positionMs = Math.min(positionMs, durationMs); positionMs = Math.min(positionMs, durationMs);
} }
positionMs = Math.max(positionMs, 0); positionMs = Math.max(positionMs, 0);
seekTo(player, player.getCurrentWindowIndex(), positionMs);
}
private void seekTo(Player player, int windowIndex, long positionMs) {
controlDispatcher.dispatchSeekTo(player, windowIndex, positionMs); controlDispatcher.dispatchSeekTo(player, windowIndex, positionMs);
} }
...@@ -1096,7 +1097,7 @@ public final class MediaSessionConnector { ...@@ -1096,7 +1097,7 @@ public final class MediaSessionConnector {
playbackPreparer.onPrepare(/* playWhenReady= */ true); playbackPreparer.onPrepare(/* playWhenReady= */ true);
} }
} else if (player.getPlaybackState() == Player.STATE_ENDED) { } else if (player.getPlaybackState() == Player.STATE_ENDED) {
controlDispatcher.dispatchSeekTo(player, player.getCurrentWindowIndex(), C.TIME_UNSET); seekTo(player, player.getCurrentWindowIndex(), C.TIME_UNSET);
} }
controlDispatcher.dispatchSetPlayWhenReady( controlDispatcher.dispatchSetPlayWhenReady(
Assertions.checkNotNull(player), /* playWhenReady= */ true); Assertions.checkNotNull(player), /* playWhenReady= */ true);
...@@ -1113,7 +1114,7 @@ public final class MediaSessionConnector { ...@@ -1113,7 +1114,7 @@ public final class MediaSessionConnector {
@Override @Override
public void onSeekTo(long positionMs) { public void onSeekTo(long positionMs) {
if (canDispatchPlaybackAction(PlaybackStateCompat.ACTION_SEEK_TO)) { if (canDispatchPlaybackAction(PlaybackStateCompat.ACTION_SEEK_TO)) {
seekTo(player, positionMs); seekTo(player, player.getCurrentWindowIndex(), positionMs);
} }
} }
......
...@@ -995,7 +995,7 @@ public class PlayerControlView extends FrameLayout { ...@@ -995,7 +995,7 @@ public class PlayerControlView extends FrameLayout {
|| (window.isDynamic && !window.isSeekable))) { || (window.isDynamic && !window.isSeekable))) {
seekTo(player, previousWindowIndex, C.TIME_UNSET); seekTo(player, previousWindowIndex, C.TIME_UNSET);
} else { } else {
seekTo(player, 0); seekTo(player, windowIndex, /* positionMs= */ 0);
} }
} }
...@@ -1015,27 +1015,24 @@ public class PlayerControlView extends FrameLayout { ...@@ -1015,27 +1015,24 @@ public class PlayerControlView extends FrameLayout {
private void rewind(Player player) { private void rewind(Player player) {
if (player.isCurrentWindowSeekable() && rewindMs > 0) { if (player.isCurrentWindowSeekable() && rewindMs > 0) {
seekTo(player, player.getCurrentPosition() - rewindMs); seekToOffset(player, -rewindMs);
} }
} }
private void fastForward(Player player) { private void fastForward(Player player) {
if (player.isCurrentWindowSeekable() && fastForwardMs > 0) { if (player.isCurrentWindowSeekable() && fastForwardMs > 0) {
seekTo(player, player.getCurrentPosition() + fastForwardMs); seekToOffset(player, fastForwardMs);
} }
} }
private void seekTo(Player player, long positionMs) { private void seekToOffset(Player player, long offsetMs) {
seekTo(player, player.getCurrentWindowIndex(), positionMs); long positionMs = player.getCurrentPosition() + offsetMs;
}
private boolean seekTo(Player player, int windowIndex, long positionMs) {
long durationMs = player.getDuration(); long durationMs = player.getDuration();
if (durationMs != C.TIME_UNSET) { if (durationMs != C.TIME_UNSET) {
positionMs = Math.min(positionMs, durationMs); positionMs = Math.min(positionMs, durationMs);
} }
positionMs = Math.max(positionMs, 0); positionMs = Math.max(positionMs, 0);
return controlDispatcher.dispatchSeekTo(player, windowIndex, positionMs); seekTo(player, player.getCurrentWindowIndex(), positionMs);
} }
private void seekToTimeBarPosition(Player player, long positionMs) { private void seekToTimeBarPosition(Player player, long positionMs) {
...@@ -1067,6 +1064,10 @@ public class PlayerControlView extends FrameLayout { ...@@ -1067,6 +1064,10 @@ public class PlayerControlView extends FrameLayout {
} }
} }
private boolean seekTo(Player player, int windowIndex, long positionMs) {
return controlDispatcher.dispatchSeekTo(player, windowIndex, positionMs);
}
@Override @Override
public void onAttachedToWindow() { public void onAttachedToWindow() {
super.onAttachedToWindow(); super.onAttachedToWindow();
...@@ -1269,7 +1270,7 @@ public class PlayerControlView extends FrameLayout { ...@@ -1269,7 +1270,7 @@ public class PlayerControlView extends FrameLayout {
playbackPreparer.preparePlayback(); playbackPreparer.preparePlayback();
} }
} else if (player.getPlaybackState() == Player.STATE_ENDED) { } else if (player.getPlaybackState() == Player.STATE_ENDED) {
controlDispatcher.dispatchSeekTo(player, player.getCurrentWindowIndex(), C.TIME_UNSET); seekTo(player, player.getCurrentWindowIndex(), C.TIME_UNSET);
} }
controlDispatcher.dispatchSetPlayWhenReady(player, true); controlDispatcher.dispatchSetPlayWhenReady(player, true);
} else if (pauseButton == view) { } else if (pauseButton == view) {
......
...@@ -1209,7 +1209,7 @@ public class PlayerNotificationManager { ...@@ -1209,7 +1209,7 @@ public class PlayerNotificationManager {
|| (window.isDynamic && !window.isSeekable))) { || (window.isDynamic && !window.isSeekable))) {
seekTo(player, previousWindowIndex, C.TIME_UNSET); seekTo(player, previousWindowIndex, C.TIME_UNSET);
} else { } else {
seekTo(player, 0); seekTo(player, windowIndex, /* positionMs= */ 0);
} }
} }
...@@ -1229,26 +1229,27 @@ public class PlayerNotificationManager { ...@@ -1229,26 +1229,27 @@ public class PlayerNotificationManager {
private void rewind(Player player) { private void rewind(Player player) {
if (player.isCurrentWindowSeekable() && rewindMs > 0) { if (player.isCurrentWindowSeekable() && rewindMs > 0) {
seekTo(player, Math.max(player.getCurrentPosition() - rewindMs, 0)); seekToOffset(player, /* offsetMs= */ -rewindMs);
} }
} }
private void fastForward(Player player) { private void fastForward(Player player) {
if (player.isCurrentWindowSeekable() && fastForwardMs > 0) { if (player.isCurrentWindowSeekable() && fastForwardMs > 0) {
seekTo(player, player.getCurrentPosition() + fastForwardMs); seekToOffset(player, /* offsetMs= */ fastForwardMs);
} }
} }
private void seekTo(Player player, long positionMs) { private void seekToOffset(Player player, long offsetMs) {
long positionMs = player.getCurrentPosition() + offsetMs;
long durationMs = player.getDuration();
if (durationMs != C.TIME_UNSET) {
positionMs = Math.min(positionMs, durationMs);
}
positionMs = Math.max(positionMs, 0);
seekTo(player, player.getCurrentWindowIndex(), positionMs); seekTo(player, player.getCurrentWindowIndex(), positionMs);
} }
private void seekTo(Player player, int windowIndex, long positionMs) { private void seekTo(Player player, int windowIndex, long positionMs) {
long duration = player.getDuration();
if (duration != C.TIME_UNSET) {
positionMs = Math.min(positionMs, duration);
}
positionMs = Math.max(positionMs, 0);
controlDispatcher.dispatchSeekTo(player, windowIndex, positionMs); controlDispatcher.dispatchSeekTo(player, windowIndex, positionMs);
} }
...@@ -1369,7 +1370,7 @@ public class PlayerNotificationManager { ...@@ -1369,7 +1370,7 @@ public class PlayerNotificationManager {
playbackPreparer.preparePlayback(); playbackPreparer.preparePlayback();
} }
} else if (player.getPlaybackState() == Player.STATE_ENDED) { } else if (player.getPlaybackState() == Player.STATE_ENDED) {
controlDispatcher.dispatchSeekTo(player, player.getCurrentWindowIndex(), C.TIME_UNSET); seekTo(player, player.getCurrentWindowIndex(), C.TIME_UNSET);
} }
controlDispatcher.dispatchSetPlayWhenReady(player, /* playWhenReady= */ true); controlDispatcher.dispatchSetPlayWhenReady(player, /* playWhenReady= */ true);
} else if (ACTION_PAUSE.equals(action)) { } else if (ACTION_PAUSE.equals(action)) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment