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
This commit is contained in:
olly 2019-10-04 13:29:05 +01:00 committed by Oliver Woodman
parent 6e65a71806
commit efe6e6408a
3 changed files with 32 additions and 29 deletions

View File

@ -889,26 +889,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);
} }
@ -1119,7 +1120,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);
@ -1136,7 +1137,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);
} }
} }

View File

@ -997,7 +997,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);
} }
} }
@ -1017,27 +1017,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) {
@ -1069,6 +1066,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();
@ -1270,7 +1271,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) {

View File

@ -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 {
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 {
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)) {