Commit 912acacb by kimvde Committed by Oliver Woodman

Add onFastForward/RewindIncrementChanged to Player

PiperOrigin-RevId: 379497408
parent 7d81f20f
......@@ -421,7 +421,13 @@ public final class CastPlayer extends BasePlayer {
@Override
public void setFastForwardIncrement(long fastForwardIncrementMs) {
checkArgument(fastForwardIncrementMs > 0);
this.fastForwardIncrementMs = fastForwardIncrementMs;
if (this.fastForwardIncrementMs != fastForwardIncrementMs) {
this.fastForwardIncrementMs = fastForwardIncrementMs;
listeners.queueEvent(
Player.EVENT_FAST_FORWARD_INCREMENT_CHANGED,
listener -> listener.onFastForwardIncrementChanged(fastForwardIncrementMs));
listeners.flushEvents();
}
}
@Override
......@@ -432,7 +438,13 @@ public final class CastPlayer extends BasePlayer {
@Override
public void setRewindIncrement(long rewindIncrementMs) {
checkArgument(rewindIncrementMs > 0);
this.rewindIncrementMs = rewindIncrementMs;
if (this.rewindIncrementMs != rewindIncrementMs) {
this.rewindIncrementMs = rewindIncrementMs;
listeners.queueEvent(
Player.EVENT_REWIND_INCREMENT_CHANGED,
listener -> listener.onRewindIncrementChanged(rewindIncrementMs));
listeners.flushEvents();
}
}
@Override
......
......@@ -1109,6 +1109,16 @@ public class CastPlayerTest {
}
@Test
public void setFastForwardIncrement_notifiesFastForwardIncrementChanged() {
long fastForwardIncrementMs = 1000;
castPlayer.setFastForwardIncrement(fastForwardIncrementMs);
verify(mockListener).onFastForwardIncrementChanged(fastForwardIncrementMs);
assertThat(castPlayer.getFastForwardIncrement()).isEqualTo(fastForwardIncrementMs);
}
@Test
@SuppressWarnings("deprecation") // Mocks deprecated method used by the CastPlayer.
public void fastForward_notifiesPositionDiscontinuity() {
when(mockRemoteMediaClient.seek(anyLong())).thenReturn(mockPendingResult);
......@@ -1155,6 +1165,16 @@ public class CastPlayerTest {
}
@Test
public void setRewindIncrement_notifiesRewindIncrementChanged() {
long rewindIncrementMs = 1000;
castPlayer.setRewindIncrement(rewindIncrementMs);
verify(mockListener).onRewindIncrementChanged(rewindIncrementMs);
assertThat(castPlayer.getRewindIncrement()).isEqualTo(rewindIncrementMs);
}
@Test
@SuppressWarnings("deprecation") // Mocks deprecated method used by the CastPlayer.
public void rewind_notifiesPositionDiscontinuity() {
when(mockRemoteMediaClient.seek(anyLong())).thenReturn(mockPendingResult);
......
......@@ -702,6 +702,16 @@ public class ForwardingPlayer implements Player {
}
@Override
public void onFastForwardIncrementChanged(long fastForwardIncrementMs) {
eventListener.onFastForwardIncrementChanged(fastForwardIncrementMs);
}
@Override
public void onRewindIncrementChanged(long rewindIncrementMs) {
eventListener.onRewindIncrementChanged(rewindIncrementMs);
}
@Override
public void onSeekProcessed() {
eventListener.onSeekProcessed();
}
......
......@@ -308,6 +308,26 @@ public interface Player {
default void onPlaybackParametersChanged(PlaybackParameters playbackParameters) {}
/**
* Called when the value of {@link #getFastForwardIncrement()} changes.
*
* <p>{@link #onEvents(Player, Events)} will also be called to report this event along with
* other events that happen in the same {@link Looper} message queue iteration.
*
* @param fastForwardIncrementMs The {@link #fastForward()} increment, in milliseconds.
*/
default void onFastForwardIncrementChanged(@IntRange(from = 1) long fastForwardIncrementMs) {}
/**
* Called when the value of {@link #getRewindIncrement()} changes.
*
* <p>{@link #onEvents(Player, Events)} will also be called to report this event along with
* other events that happen in the same {@link Looper} message queue iteration.
*
* @param rewindIncrementMs The {@link #rewind()} increment, in milliseconds.
*/
default void onRewindIncrementChanged(@IntRange(from = 1) long rewindIncrementMs) {}
/**
* @deprecated Seeks are processed without delay. Listen to {@link
* #onPositionDiscontinuity(PositionInfo, PositionInfo, int)} with reason {@link
* #DISCONTINUITY_REASON_SEEK} instead.
......@@ -1066,7 +1086,9 @@ public interface Player {
EVENT_PLAYBACK_PARAMETERS_CHANGED,
EVENT_AVAILABLE_COMMANDS_CHANGED,
EVENT_MEDIA_METADATA_CHANGED,
EVENT_PLAYLIST_MEDIA_METADATA_CHANGED
EVENT_PLAYLIST_MEDIA_METADATA_CHANGED,
EVENT_FAST_FORWARD_INCREMENT_CHANGED,
EVENT_REWIND_INCREMENT_CHANGED
})
@interface EventFlags {}
/** {@link #getCurrentTimeline()} changed. */
......@@ -1106,6 +1128,10 @@ public interface Player {
int EVENT_MEDIA_METADATA_CHANGED = 15;
/** {@link #getPlaylistMediaMetadata()} changed. */
int EVENT_PLAYLIST_MEDIA_METADATA_CHANGED = 16;
/** {@link #getFastForwardIncrement()} changed. */
int EVENT_FAST_FORWARD_INCREMENT_CHANGED = 17;
/** {@link #getRewindIncrement()} changed. */
int EVENT_REWIND_INCREMENT_CHANGED = 18;
/**
* Commands that can be executed on a {@code Player}. One of {@link #COMMAND_PLAY_PAUSE}, {@link
......@@ -1590,6 +1616,7 @@ public interface Player {
* <p>The default value is {@link #DEFAULT_FAST_FORWARD_INCREMENT_MS}.
*
* @return The fast forward increment, in milliseconds.
* @see Listener#onFastForwardIncrementChanged(long)
*/
long getFastForwardIncrement();
......@@ -1610,6 +1637,7 @@ public interface Player {
* <p>The default value is {@link #DEFAULT_REWIND_INCREMENT_MS}.
*
* @return The rewind increment, in milliseconds.
* @see Listener#onRewindIncrementChanged(long)
*/
long getRewindIncrement();
......
......@@ -722,7 +722,13 @@ import java.util.concurrent.CopyOnWriteArraySet;
@Override
public void setFastForwardIncrement(long fastForwardIncrementMs) {
checkArgument(fastForwardIncrementMs > 0);
this.fastForwardIncrementMs = fastForwardIncrementMs;
if (this.fastForwardIncrementMs != fastForwardIncrementMs) {
this.fastForwardIncrementMs = fastForwardIncrementMs;
listeners.queueEvent(
Player.EVENT_FAST_FORWARD_INCREMENT_CHANGED,
listener -> listener.onFastForwardIncrementChanged(fastForwardIncrementMs));
listeners.flushEvents();
}
}
@Override
......@@ -733,7 +739,13 @@ import java.util.concurrent.CopyOnWriteArraySet;
@Override
public void setRewindIncrement(long rewindIncrementMs) {
checkArgument(rewindIncrementMs > 0);
this.rewindIncrementMs = rewindIncrementMs;
if (this.rewindIncrementMs != rewindIncrementMs) {
this.rewindIncrementMs = rewindIncrementMs;
listeners.queueEvent(
Player.EVENT_REWIND_INCREMENT_CHANGED,
listener -> listener.onRewindIncrementChanged(rewindIncrementMs));
listeners.flushEvents();
}
}
@Override
......
......@@ -750,6 +750,24 @@ public class AnalyticsCollector
}
@Override
public void onFastForwardIncrementChanged(long fastForwardIncrementMs) {
EventTime eventTime = generateCurrentPlayerMediaPeriodEventTime();
sendEvent(
eventTime,
AnalyticsListener.EVENT_FAST_FORWARD_INCREMENT_CHANGED,
listener -> listener.onFastForwardIncrementChanged(eventTime, fastForwardIncrementMs));
}
@Override
public void onRewindIncrementChanged(long rewindIncrementMs) {
EventTime eventTime = generateCurrentPlayerMediaPeriodEventTime();
sendEvent(
eventTime,
AnalyticsListener.EVENT_REWIND_INCREMENT_CHANGED,
listener -> listener.onRewindIncrementChanged(eventTime, rewindIncrementMs));
}
@Override
public void onMediaMetadataChanged(MediaMetadata mediaMetadata) {
EventTime eventTime = generateCurrentPlayerMediaPeriodEventTime();
sendEvent(
......
......@@ -172,6 +172,8 @@ public interface AnalyticsListener {
EVENT_AVAILABLE_COMMANDS_CHANGED,
EVENT_MEDIA_METADATA_CHANGED,
EVENT_PLAYLIST_MEDIA_METADATA_CHANGED,
EVENT_FAST_FORWARD_INCREMENT_CHANGED,
EVENT_REWIND_INCREMENT_CHANGED,
EVENT_LOAD_STARTED,
EVENT_LOAD_COMPLETED,
EVENT_LOAD_CANCELED,
......@@ -254,6 +256,10 @@ public interface AnalyticsListener {
int EVENT_MEDIA_METADATA_CHANGED = Player.EVENT_MEDIA_METADATA_CHANGED;
/** {@link Player#getPlaylistMediaMetadata()} changed. */
int EVENT_PLAYLIST_MEDIA_METADATA_CHANGED = Player.EVENT_PLAYLIST_MEDIA_METADATA_CHANGED;
/** {@link Player#getFastForwardIncrement()} changed. */
int EVENT_FAST_FORWARD_INCREMENT_CHANGED = Player.EVENT_FAST_FORWARD_INCREMENT_CHANGED;
/** {@link Player#getRewindIncrement()} changed. */
int EVENT_REWIND_INCREMENT_CHANGED = Player.EVENT_REWIND_INCREMENT_CHANGED;
/** A source started loading data. */
int EVENT_LOAD_STARTED = 1000; // Intentional gap to leave space for new Player events
/** A source started completed loading data. */
......@@ -590,6 +596,22 @@ public interface AnalyticsListener {
EventTime eventTime, PlaybackParameters playbackParameters) {}
/**
* Called when the fast forward increment changed.
*
* @param eventTime The event time.
* @param fastForwardIncrementMs The fast forward increment, in milliseconds.
*/
default void onFastForwardIncrementChanged(EventTime eventTime, long fastForwardIncrementMs) {}
/**
* Called when the rewind increment changed.
*
* @param eventTime The event time.
* @param rewindIncrementMs The rewind increment, in milliseconds.
*/
default void onRewindIncrementChanged(EventTime eventTime, long rewindIncrementMs) {}
/**
* Called when the repeat mode changed.
*
* @param eventTime The event time.
......
......@@ -10358,6 +10358,19 @@ public final class ExoPlayerTest {
}
@Test
public void setFastForwardIncrement_notifiesFastForwardIncrementChanged() {
ExoPlayer player = new TestExoPlayerBuilder(context).build();
Player.Listener listener = mock(Player.Listener.class);
player.addListener(listener);
long fastForwardIncrementMs = 1000;
player.setFastForwardIncrement(fastForwardIncrementMs);
verify(listener).onFastForwardIncrementChanged(fastForwardIncrementMs);
assertThat(player.getFastForwardIncrement()).isEqualTo(fastForwardIncrementMs);
}
@Test
public void fastForward_callsOnPositionDiscontinuity() throws Exception {
ExoPlayer player = new TestExoPlayerBuilder(context).build();
Player.Listener listener = mock(Player.Listener.class);
......@@ -10416,6 +10429,19 @@ public final class ExoPlayerTest {
}
@Test
public void setRewindIncrement_notifiesRewindIncrementChanged() {
ExoPlayer player = new TestExoPlayerBuilder(context).build();
Player.Listener listener = mock(Player.Listener.class);
player.addListener(listener);
long rewindIncrementMs = 1000;
player.setRewindIncrement(rewindIncrementMs);
verify(listener).onRewindIncrementChanged(rewindIncrementMs);
assertThat(player.getRewindIncrement()).isEqualTo(rewindIncrementMs);
}
@Test
public void rewind_callsOnPositionDiscontinuity() throws Exception {
ExoPlayer player = new TestExoPlayerBuilder(context).build();
Player.Listener listener = mock(Player.Listener.class);
......
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