Commit 4bb6036c by bachinger Committed by kim-vde

add playback state changed listener

This change deprecates Player.onPlayerStateChanged(boolean pwr, int state). It removes deprecation for trivial cases. I'll remove other deprecated usages (mostly in ui module) in follow-up CLs to not bloat this CL.

PiperOrigin-RevId: 292917872
parent 704dae09
Showing with 155 additions and 90 deletions
...@@ -7,6 +7,8 @@ ...@@ -7,6 +7,8 @@
* Add `play` and `pause` methods to `Player`. * Add `play` and `pause` methods to `Player`.
* Add `Player.getCurrentLiveOffset` to conveniently return the live offset. * Add `Player.getCurrentLiveOffset` to conveniently return the live offset.
* Add `Player.onPlayWhenReadyChanged` with reasons. * Add `Player.onPlayWhenReadyChanged` with reasons.
* Add `Player.onPlaybackStateChanged` and deprecate
`Player.onPlayerStateChanged`.
* Make `MediaSourceEventListener.LoadEventInfo` and * Make `MediaSourceEventListener.LoadEventInfo` and
`MediaSourceEventListener.MediaLoadData` top-level classes. `MediaSourceEventListener.MediaLoadData` top-level classes.
* Rename `MediaCodecRenderer.onOutputFormatChanged` to * Rename `MediaCodecRenderer.onOutputFormatChanged` to
......
...@@ -267,7 +267,7 @@ import java.util.Map; ...@@ -267,7 +267,7 @@ import java.util.Map;
// Player.EventListener implementation. // Player.EventListener implementation.
@Override @Override
public void onPlayerStateChanged(boolean playWhenReady, @Player.State int playbackState) { public void onPlaybackStateChanged(@Player.State int playbackState) {
updateCurrentItemIndex(); updateCurrentItemIndex();
} }
......
...@@ -689,7 +689,7 @@ public class PlayerActivity extends AppCompatActivity ...@@ -689,7 +689,7 @@ public class PlayerActivity extends AppCompatActivity
private class PlayerEventListener implements Player.EventListener { private class PlayerEventListener implements Player.EventListener {
@Override @Override
public void onPlayerStateChanged(boolean playWhenReady, @Player.State int playbackState) { public void onPlaybackStateChanged(@Player.State int playbackState) {
if (playbackState == Player.STATE_ENDED) { if (playbackState == Player.STATE_ENDED) {
showControls(); showControls();
} }
......
...@@ -724,18 +724,23 @@ public final class CastPlayer extends BasePlayer { ...@@ -724,18 +724,23 @@ public final class CastPlayer extends BasePlayer {
} }
} }
@SuppressWarnings("deprecation")
private void setPlayerStateAndNotifyIfChanged( private void setPlayerStateAndNotifyIfChanged(
boolean playWhenReady, boolean playWhenReady,
@Player.PlayWhenReadyChangeReason int playWhenReadyChangeReason, @Player.PlayWhenReadyChangeReason int playWhenReadyChangeReason,
@Player.State int playbackState) { @Player.State int playbackState) {
boolean playWhenReadyChanged = this.playWhenReady.value != playWhenReady; boolean playWhenReadyChanged = this.playWhenReady.value != playWhenReady;
if (playWhenReadyChanged || this.playbackState != playbackState) { boolean playbackStateChanged = this.playbackState != playbackState;
if (playWhenReadyChanged || playbackStateChanged) {
this.playbackState = playbackState; this.playbackState = playbackState;
this.playWhenReady.value = playWhenReady; this.playWhenReady.value = playWhenReady;
notificationsBatch.add( notificationsBatch.add(
new ListenerNotificationTask( new ListenerNotificationTask(
listener -> { listener -> {
listener.onPlayerStateChanged(playWhenReady, playbackState); listener.onPlayerStateChanged(playWhenReady, playbackState);
if (playbackStateChanged) {
listener.onPlaybackStateChanged(playbackState);
}
if (playWhenReadyChanged) { if (playWhenReadyChanged) {
listener.onPlayWhenReadyChanged(playWhenReady, playWhenReadyChangeReason); listener.onPlayWhenReadyChanged(playWhenReady, playWhenReadyChangeReason);
} }
......
...@@ -80,6 +80,7 @@ public class CastPlayerTest { ...@@ -80,6 +80,7 @@ public class CastPlayerTest {
remoteMediaClientListener = listenerArgumentCaptor.getValue(); remoteMediaClientListener = listenerArgumentCaptor.getValue();
} }
@SuppressWarnings("deprecation")
@Test @Test
public void testSetPlayWhenReady_masksRemoteState() { public void testSetPlayWhenReady_masksRemoteState() {
when(mockRemoteMediaClient.play()).thenReturn(mockPendingResult); when(mockRemoteMediaClient.play()).thenReturn(mockPendingResult);
...@@ -104,6 +105,7 @@ public class CastPlayerTest { ...@@ -104,6 +105,7 @@ public class CastPlayerTest {
verifyNoMoreInteractions(mockListener); verifyNoMoreInteractions(mockListener);
} }
@SuppressWarnings("deprecation")
@Test @Test
public void testSetPlayWhenReadyMasking_updatesUponResultChange() { public void testSetPlayWhenReadyMasking_updatesUponResultChange() {
when(mockRemoteMediaClient.play()).thenReturn(mockPendingResult); when(mockRemoteMediaClient.play()).thenReturn(mockPendingResult);
...@@ -125,6 +127,7 @@ public class CastPlayerTest { ...@@ -125,6 +127,7 @@ public class CastPlayerTest {
assertThat(castPlayer.getPlayWhenReady()).isFalse(); assertThat(castPlayer.getPlayWhenReady()).isFalse();
} }
@SuppressWarnings("deprecation")
@Test @Test
public void testSetPlayWhenReady_correctChangeReasonOnPause() { public void testSetPlayWhenReady_correctChangeReasonOnPause() {
when(mockRemoteMediaClient.play()).thenReturn(mockPendingResult); when(mockRemoteMediaClient.play()).thenReturn(mockPendingResult);
...@@ -142,6 +145,7 @@ public class CastPlayerTest { ...@@ -142,6 +145,7 @@ public class CastPlayerTest {
.onPlayWhenReadyChanged(false, Player.PLAY_WHEN_READY_CHANGE_REASON_USER_REQUEST); .onPlayWhenReadyChanged(false, Player.PLAY_WHEN_READY_CHANGE_REASON_USER_REQUEST);
} }
@SuppressWarnings("deprecation")
@Test @Test
public void testPlayWhenReady_changesOnStatusUpdates() { public void testPlayWhenReady_changesOnStatusUpdates() {
assertThat(castPlayer.getPlayWhenReady()).isFalse(); assertThat(castPlayer.getPlayWhenReady()).isFalse();
......
...@@ -20,6 +20,7 @@ import static org.junit.Assert.fail; ...@@ -20,6 +20,7 @@ import static org.junit.Assert.fail;
import android.content.Context; import android.content.Context;
import android.net.Uri; import android.net.Uri;
import android.os.Looper; import android.os.Looper;
import androidx.annotation.Nullable;
import androidx.test.core.app.ApplicationProvider; import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.google.android.exoplayer2.ExoPlaybackException; import com.google.android.exoplayer2.ExoPlaybackException;
...@@ -88,8 +89,8 @@ public class FlacPlaybackTest { ...@@ -88,8 +89,8 @@ public class FlacPlaybackTest {
private final Uri uri; private final Uri uri;
private final AudioSink audioSink; private final AudioSink audioSink;
private ExoPlayer player; @Nullable private ExoPlayer player;
private ExoPlaybackException playbackException; @Nullable private ExoPlaybackException playbackException;
public TestPlaybackRunnable(Uri uri, Context context, AudioSink audioSink) { public TestPlaybackRunnable(Uri uri, Context context, AudioSink audioSink) {
this.uri = uri; this.uri = uri;
...@@ -121,7 +122,7 @@ public class FlacPlaybackTest { ...@@ -121,7 +122,7 @@ public class FlacPlaybackTest {
} }
@Override @Override
public void onPlayerStateChanged(boolean playWhenReady, @Player.State int playbackState) { public void onPlaybackStateChanged(@Player.State int playbackState) {
if (playbackState == Player.STATE_ENDED if (playbackState == Player.STATE_ENDED
|| (playbackState == Player.STATE_IDLE && playbackException != null)) { || (playbackState == Player.STATE_IDLE && playbackException != null)) {
player.release(); player.release();
......
...@@ -92,14 +92,18 @@ import java.util.ArrayList; ...@@ -92,14 +92,18 @@ import java.util.ArrayList;
} }
/** Sets the {@link Player.State} of this player. */ /** Sets the {@link Player.State} of this player. */
@SuppressWarnings("deprecation")
public void setState(@Player.State int state, boolean playWhenReady) { public void setState(@Player.State int state, boolean playWhenReady) {
boolean playWhenReadyChanged = this.playWhenReady != playWhenReady; boolean playWhenReadyChanged = this.playWhenReady != playWhenReady;
boolean playerStateChanged = this.state != state || playWhenReadyChanged; boolean playbackStateChanged = this.state != state;
this.state = state; this.state = state;
this.playWhenReady = playWhenReady; this.playWhenReady = playWhenReady;
if (playerStateChanged) { if (playbackStateChanged || playWhenReadyChanged) {
for (Player.EventListener listener : listeners) { for (Player.EventListener listener : listeners) {
listener.onPlayerStateChanged(playWhenReady, state); listener.onPlayerStateChanged(playWhenReady, state);
if (playbackStateChanged) {
listener.onPlaybackStateChanged(state);
}
if (playWhenReadyChanged) { if (playWhenReadyChanged) {
listener.onPlayWhenReadyChanged( listener.onPlayWhenReadyChanged(
playWhenReady, PLAY_WHEN_READY_CHANGE_REASON_USER_REQUEST); playWhenReady, PLAY_WHEN_READY_CHANGE_REASON_USER_REQUEST);
......
...@@ -272,7 +272,7 @@ public final class LeanbackPlayerAdapter extends PlayerAdapter implements Runnab ...@@ -272,7 +272,7 @@ public final class LeanbackPlayerAdapter extends PlayerAdapter implements Runnab
// Player.EventListener implementation. // Player.EventListener implementation.
@Override @Override
public void onPlayerStateChanged(boolean playWhenReady, @Player.State int playbackState) { public void onPlaybackStateChanged(@Player.State int playbackState) {
notifyStateChanged(); notifyStateChanged();
} }
......
...@@ -20,6 +20,7 @@ import static org.junit.Assert.fail; ...@@ -20,6 +20,7 @@ import static org.junit.Assert.fail;
import android.content.Context; import android.content.Context;
import android.net.Uri; import android.net.Uri;
import android.os.Looper; import android.os.Looper;
import androidx.annotation.Nullable;
import androidx.test.core.app.ApplicationProvider; import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.google.android.exoplayer2.ExoPlaybackException; import com.google.android.exoplayer2.ExoPlaybackException;
...@@ -67,8 +68,8 @@ public class OpusPlaybackTest { ...@@ -67,8 +68,8 @@ public class OpusPlaybackTest {
private final Context context; private final Context context;
private final Uri uri; private final Uri uri;
private ExoPlayer player; @Nullable private ExoPlayer player;
private ExoPlaybackException playbackException; @Nullable private ExoPlaybackException playbackException;
public TestPlaybackRunnable(Uri uri, Context context) { public TestPlaybackRunnable(Uri uri, Context context) {
this.uri = uri; this.uri = uri;
...@@ -97,7 +98,7 @@ public class OpusPlaybackTest { ...@@ -97,7 +98,7 @@ public class OpusPlaybackTest {
} }
@Override @Override
public void onPlayerStateChanged(boolean playWhenReady, @Player.State int playbackState) { public void onPlaybackStateChanged(@Player.State int playbackState) {
if (playbackState == Player.STATE_ENDED if (playbackState == Player.STATE_ENDED
|| (playbackState == Player.STATE_IDLE && playbackException != null)) { || (playbackState == Player.STATE_IDLE && playbackException != null)) {
player.release(); player.release();
......
...@@ -21,6 +21,7 @@ import static org.junit.Assert.fail; ...@@ -21,6 +21,7 @@ import static org.junit.Assert.fail;
import android.content.Context; import android.content.Context;
import android.net.Uri; import android.net.Uri;
import android.os.Looper; import android.os.Looper;
import androidx.annotation.Nullable;
import androidx.test.core.app.ApplicationProvider; import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.C;
...@@ -102,8 +103,8 @@ public class VpxPlaybackTest { ...@@ -102,8 +103,8 @@ public class VpxPlaybackTest {
private final Context context; private final Context context;
private final Uri uri; private final Uri uri;
private ExoPlayer player; @Nullable private ExoPlayer player;
private ExoPlaybackException playbackException; @Nullable private ExoPlaybackException playbackException;
public TestPlaybackRunnable(Uri uri, Context context) { public TestPlaybackRunnable(Uri uri, Context context) {
this.uri = uri; this.uri = uri;
...@@ -137,7 +138,7 @@ public class VpxPlaybackTest { ...@@ -137,7 +138,7 @@ public class VpxPlaybackTest {
} }
@Override @Override
public void onPlayerStateChanged(boolean playWhenReady, @Player.State int playbackState) { public void onPlaybackStateChanged(@Player.State int playbackState) {
if (playbackState == Player.STATE_ENDED if (playbackState == Player.STATE_ENDED
|| (playbackState == Player.STATE_IDLE && playbackException != null)) { || (playbackState == Player.STATE_IDLE && playbackException != null)) {
player.release(); player.release();
......
...@@ -430,6 +430,7 @@ import java.util.concurrent.TimeoutException; ...@@ -430,6 +430,7 @@ import java.util.concurrent.TimeoutException;
PLAY_WHEN_READY_CHANGE_REASON_USER_REQUEST); PLAY_WHEN_READY_CHANGE_REASON_USER_REQUEST);
} }
@SuppressWarnings("deprecation")
public void setPlayWhenReady( public void setPlayWhenReady(
boolean playWhenReady, boolean playWhenReady,
@PlaybackSuppressionReason int playbackSuppressionReason, @PlaybackSuppressionReason int playbackSuppressionReason,
...@@ -454,8 +455,6 @@ import java.util.concurrent.TimeoutException; ...@@ -454,8 +455,6 @@ import java.util.concurrent.TimeoutException;
listener -> { listener -> {
if (playWhenReadyChanged) { if (playWhenReadyChanged) {
listener.onPlayerStateChanged(playWhenReady, playbackState); listener.onPlayerStateChanged(playWhenReady, playbackState);
}
if (playWhenReadyChanged) {
listener.onPlayWhenReadyChanged(playWhenReady, playWhenReadyChangeReason); listener.onPlayWhenReadyChanged(playWhenReady, playWhenReadyChangeReason);
} }
if (suppressionReasonChanged) { if (suppressionReasonChanged) {
...@@ -880,6 +879,7 @@ import java.util.concurrent.TimeoutException; ...@@ -880,6 +879,7 @@ import java.util.concurrent.TimeoutException;
/* isPlayingChanged= */ previousIsPlaying != isPlaying)); /* isPlayingChanged= */ previousIsPlaying != isPlaying));
} }
@SuppressWarnings("deprecation")
private void setMediaItemsInternal( private void setMediaItemsInternal(
List<MediaSource> mediaItems, List<MediaSource> mediaItems,
int startWindowIndex, int startWindowIndex,
...@@ -933,6 +933,7 @@ import java.util.concurrent.TimeoutException; ...@@ -933,6 +933,7 @@ import java.util.concurrent.TimeoutException;
listener.onTimelineChanged(timeline, TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED); listener.onTimelineChanged(timeline, TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED);
if (playbackStateChanged) { if (playbackStateChanged) {
listener.onPlayerStateChanged(currentPlayWhenReady, finalMaskingPlaybackState); listener.onPlayerStateChanged(currentPlayWhenReady, finalMaskingPlaybackState);
listener.onPlaybackStateChanged(finalMaskingPlaybackState);
} }
}); });
} }
...@@ -952,6 +953,7 @@ import java.util.concurrent.TimeoutException; ...@@ -952,6 +953,7 @@ import java.util.concurrent.TimeoutException;
return holders; return holders;
} }
@SuppressWarnings("deprecation")
private void removeMediaItemsInternal(int fromIndex, int toIndex) { private void removeMediaItemsInternal(int fromIndex, int toIndex) {
Assertions.checkArgument( Assertions.checkArgument(
fromIndex >= 0 && toIndex >= fromIndex && toIndex <= mediaSourceHolders.size()); fromIndex >= 0 && toIndex >= fromIndex && toIndex <= mediaSourceHolders.size());
...@@ -980,6 +982,7 @@ import java.util.concurrent.TimeoutException; ...@@ -980,6 +982,7 @@ import java.util.concurrent.TimeoutException;
listener.onTimelineChanged(timeline, TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED); listener.onTimelineChanged(timeline, TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED);
if (transitionsToEnded) { if (transitionsToEnded) {
listener.onPlayerStateChanged(currentPlayWhenReady, STATE_ENDED); listener.onPlayerStateChanged(currentPlayWhenReady, STATE_ENDED);
listener.onPlaybackStateChanged(STATE_ENDED);
} }
}); });
} }
...@@ -1167,6 +1170,7 @@ import java.util.concurrent.TimeoutException; ...@@ -1167,6 +1170,7 @@ import java.util.concurrent.TimeoutException;
previousPlaybackInfo.trackSelectorResult != playbackInfo.trackSelectorResult; previousPlaybackInfo.trackSelectorResult != playbackInfo.trackSelectorResult;
} }
@SuppressWarnings("deprecation")
@Override @Override
public void run() { public void run() {
if (timelineChanged) { if (timelineChanged) {
...@@ -1196,7 +1200,10 @@ import java.util.concurrent.TimeoutException; ...@@ -1196,7 +1200,10 @@ import java.util.concurrent.TimeoutException;
if (playbackStateChanged) { if (playbackStateChanged) {
invokeAll( invokeAll(
listenerSnapshot, listenerSnapshot,
listener -> listener.onPlayerStateChanged(playWhenReady, playbackInfo.playbackState)); listener -> {
listener.onPlayerStateChanged(playWhenReady, playbackInfo.playbackState);
listener.onPlaybackStateChanged(playbackInfo.playbackState);
});
} }
if (isPlayingChanged) { if (isPlayingChanged) {
invokeAll( invokeAll(
......
...@@ -410,15 +410,20 @@ public interface Player { ...@@ -410,15 +410,20 @@ public interface Player {
default void onLoadingChanged(boolean isLoading) {} default void onLoadingChanged(boolean isLoading) {}
/** /**
* Called when the value returned from either {@link #getPlayWhenReady()} or {@link * @deprecated Use {@link #onPlaybackStateChanged(int)} and {@link
* #getPlaybackState()} changes. * #onPlayWhenReadyChanged(boolean, int)} instead.
*
* @param playWhenReady Whether playback will proceed when ready.
* @param playbackState The new {@link State playback state}.
*/ */
@Deprecated
default void onPlayerStateChanged(boolean playWhenReady, @State int playbackState) {} default void onPlayerStateChanged(boolean playWhenReady, @State int playbackState) {}
/** /**
* Called when the value returned from {@link #getPlaybackState()} changes.
*
* @param state The new playback {@link State state}.
*/
default void onPlaybackStateChanged(@State int state) {}
/**
* Called when the value returned from {@link #getPlayWhenReady()} changes. * Called when the value returned from {@link #getPlayWhenReady()} changes.
* *
* @param playWhenReady Whether playback will proceed when ready. * @param playWhenReady Whether playback will proceed when ready.
...@@ -492,7 +497,7 @@ public interface Player { ...@@ -492,7 +497,7 @@ public interface Player {
/** /**
* Called when all pending seek requests have been processed by the player. This is guaranteed * Called when all pending seek requests have been processed by the player. This is guaranteed
* to happen after any necessary changes to the player state were reported to {@link * to happen after any necessary changes to the player state were reported to {@link
* #onPlayerStateChanged(boolean, int)}. * #onPlaybackStateChanged(int)}.
*/ */
default void onSeekProcessed() {} default void onSeekProcessed() {}
} }
......
...@@ -1662,6 +1662,22 @@ public class SimpleExoPlayer extends BasePlayer ...@@ -1662,6 +1662,22 @@ public class SimpleExoPlayer extends BasePlayer
} }
} }
private void updateWakeLock() {
@State int playbackState = getPlaybackState();
switch (playbackState) {
case Player.STATE_READY:
case Player.STATE_BUFFERING:
wakeLockManager.setStayAwake(getPlayWhenReady());
break;
case Player.STATE_ENDED:
case Player.STATE_IDLE:
wakeLockManager.setStayAwake(false);
break;
default:
throw new IllegalStateException();
}
}
private static int getPlayWhenReadyChangeReason(boolean playWhenReady, int playerCommand) { private static int getPlayWhenReadyChangeReason(boolean playWhenReady, int playerCommand) {
return playWhenReady && playerCommand != AudioFocusManager.PLAYER_COMMAND_PLAY_WHEN_READY return playWhenReady && playerCommand != AudioFocusManager.PLAYER_COMMAND_PLAY_WHEN_READY
? PLAY_WHEN_READY_CHANGE_REASON_AUDIO_FOCUS_LOSS ? PLAY_WHEN_READY_CHANGE_REASON_AUDIO_FOCUS_LOSS
...@@ -1920,17 +1936,14 @@ public class SimpleExoPlayer extends BasePlayer ...@@ -1920,17 +1936,14 @@ public class SimpleExoPlayer extends BasePlayer
} }
@Override @Override
public void onPlayerStateChanged(boolean playWhenReady, @State int playbackState) { public void onPlaybackStateChanged(@State int playbackState) {
switch (playbackState) { updateWakeLock();
case Player.STATE_READY: }
case Player.STATE_BUFFERING:
wakeLockManager.setStayAwake(playWhenReady); @Override
break; public void onPlayWhenReadyChanged(
case Player.STATE_ENDED: boolean playWhenReady, @PlayWhenReadyChangeReason int reason) {
case Player.STATE_IDLE: updateWakeLock();
wakeLockManager.setStayAwake(false);
break;
}
} }
} }
} }
...@@ -438,6 +438,7 @@ public class AnalyticsCollector ...@@ -438,6 +438,7 @@ public class AnalyticsCollector
} }
} }
@SuppressWarnings("deprecation")
@Override @Override
public final void onPlayerStateChanged(boolean playWhenReady, @Player.State int playbackState) { public final void onPlayerStateChanged(boolean playWhenReady, @Player.State int playbackState) {
EventTime eventTime = generateCurrentPlayerMediaPeriodEventTime(); EventTime eventTime = generateCurrentPlayerMediaPeriodEventTime();
...@@ -447,6 +448,14 @@ public class AnalyticsCollector ...@@ -447,6 +448,14 @@ public class AnalyticsCollector
} }
@Override @Override
public final void onPlaybackStateChanged(@Player.State int state) {
EventTime eventTime = generateCurrentPlayerMediaPeriodEventTime();
for (AnalyticsListener listener : listeners) {
listener.onPlaybackStateChanged(eventTime, state);
}
}
@Override
public final void onPlayWhenReadyChanged( public final void onPlayWhenReadyChanged(
boolean playWhenReady, @Player.PlayWhenReadyChangeReason int reason) { boolean playWhenReady, @Player.PlayWhenReadyChangeReason int reason) {
EventTime eventTime = generateCurrentPlayerMediaPeriodEventTime(); EventTime eventTime = generateCurrentPlayerMediaPeriodEventTime();
......
...@@ -124,16 +124,22 @@ public interface AnalyticsListener { ...@@ -124,16 +124,22 @@ public interface AnalyticsListener {
} }
/** /**
* Called when the player state changed. * @deprecated Use {@link #onPlaybackStateChanged(EventTime, int)} and {@link
* * #onPlayWhenReadyChanged(EventTime, boolean, int)} instead.
* @param eventTime The event time.
* @param playWhenReady Whether the playback will proceed when ready.
* @param playbackState The new {@link Player.State playback state}.
*/ */
@Deprecated
default void onPlayerStateChanged( default void onPlayerStateChanged(
EventTime eventTime, boolean playWhenReady, @Player.State int playbackState) {} EventTime eventTime, boolean playWhenReady, @Player.State int playbackState) {}
/** /**
* Called when the playback state changed.
*
* @param eventTime The event time.
* @param state The new {@link Player.State playback state}.
*/
default void onPlaybackStateChanged(EventTime eventTime, @Player.State int state) {}
/**
* Called when the value changed that indicates whether playback will proceed when ready. * Called when the value changed that indicates whether playback will proceed when ready.
* *
* @param eventTime The event time. * @param eventTime The event time.
......
...@@ -96,8 +96,7 @@ public class EventLogger implements AnalyticsListener { ...@@ -96,8 +96,7 @@ public class EventLogger implements AnalyticsListener {
} }
@Override @Override
public void onPlayerStateChanged( public void onPlaybackStateChanged(EventTime eventTime, @Player.State int state) {
EventTime eventTime, boolean playWhenReady, @Player.State int state) {
logd(eventTime, "state", getStateString(state)); logd(eventTime, "state", getStateString(state));
} }
......
...@@ -551,7 +551,7 @@ public final class ExoPlayerTest { ...@@ -551,7 +551,7 @@ public final class ExoPlayerTest {
private int currentPlaybackState = Player.STATE_IDLE; private int currentPlaybackState = Player.STATE_IDLE;
@Override @Override
public void onPlayerStateChanged(boolean playWhenReady, @Player.State int playbackState) { public void onPlaybackStateChanged(@Player.State int playbackState) {
currentPlaybackState = playbackState; currentPlaybackState = playbackState;
} }
...@@ -1149,7 +1149,6 @@ public final class ExoPlayerTest { ...@@ -1149,7 +1149,6 @@ public final class ExoPlayerTest {
.start() .start()
.blockUntilEnded(TIMEOUT_MS); .blockUntilEnded(TIMEOUT_MS);
testRunner.assertPlaybackStatesEqual( testRunner.assertPlaybackStatesEqual(
Player.STATE_IDLE,
Player.STATE_BUFFERING, Player.STATE_BUFFERING,
Player.STATE_READY, Player.STATE_READY,
Player.STATE_IDLE, Player.STATE_IDLE,
...@@ -2465,7 +2464,7 @@ public final class ExoPlayerTest { ...@@ -2465,7 +2464,7 @@ public final class ExoPlayerTest {
final EventListener eventListener1 = final EventListener eventListener1 =
new EventListener() { new EventListener() {
@Override @Override
public void onPlayerStateChanged(boolean playWhenReady, @Player.State int playbackState) { public void onPlaybackStateChanged(@Player.State int playbackState) {
eventListener1States.add(playbackState); eventListener1States.add(playbackState);
if (playbackState == Player.STATE_READY) { if (playbackState == Player.STATE_READY) {
playerReference.get().stop(/* reset= */ true); playerReference.get().stop(/* reset= */ true);
...@@ -2475,7 +2474,7 @@ public final class ExoPlayerTest { ...@@ -2475,7 +2474,7 @@ public final class ExoPlayerTest {
final EventListener eventListener2 = final EventListener eventListener2 =
new EventListener() { new EventListener() {
@Override @Override
public void onPlayerStateChanged(boolean playWhenReady, @Player.State int playbackState) { public void onPlaybackStateChanged(@Player.State int playbackState) {
eventListener2States.add(playbackState); eventListener2States.add(playbackState);
} }
}; };
...@@ -2512,22 +2511,32 @@ public final class ExoPlayerTest { ...@@ -2512,22 +2511,32 @@ public final class ExoPlayerTest {
final AtomicReference<Player> playerReference = new AtomicReference<>(); final AtomicReference<Player> playerReference = new AtomicReference<>();
final List<Boolean> eventListenerPlayWhenReady = new ArrayList<>(); final List<Boolean> eventListenerPlayWhenReady = new ArrayList<>();
final List<Integer> eventListenerStates = new ArrayList<>(); final List<Integer> eventListenerStates = new ArrayList<>();
List<Integer> sequence = new ArrayList<>();
final EventListener eventListener = final EventListener eventListener =
new EventListener() { new EventListener() {
@Override
public void onPlaybackStateChanged(@Player.State int playbackState) {
eventListenerStates.add(playbackState);
if (playbackState == Player.STATE_READY) {
playerReference.get().stop(/* reset= */ true);
sequence.add(0);
}
}
@Override @Override
public void onTimelineChanged(Timeline timeline, int reason) { public void onTimelineChanged(Timeline timeline, int reason) {
if (timeline.isEmpty()) { if (timeline.isEmpty()) {
playerReference.get().pause(); playerReference.get().pause();
sequence.add(1);
} }
} }
@Override @Override
public void onPlayerStateChanged(boolean playWhenReady, @Player.State int playbackState) { public void onPlayWhenReadyChanged(
boolean playWhenReady, @Player.PlayWhenReadyChangeReason int reason) {
eventListenerPlayWhenReady.add(playWhenReady); eventListenerPlayWhenReady.add(playWhenReady);
eventListenerStates.add(playbackState); sequence.add(2);
if (playbackState == Player.STATE_READY) {
playerReference.get().stop(/* reset= */ true);
}
} }
}; };
ActionSchedule actionSchedule = ActionSchedule actionSchedule =
...@@ -2548,10 +2557,10 @@ public final class ExoPlayerTest { ...@@ -2548,10 +2557,10 @@ public final class ExoPlayerTest {
.blockUntilEnded(TIMEOUT_MS); .blockUntilEnded(TIMEOUT_MS);
assertThat(eventListenerStates) assertThat(eventListenerStates)
.containsExactly( .containsExactly(Player.STATE_BUFFERING, Player.STATE_READY, Player.STATE_IDLE)
Player.STATE_BUFFERING, Player.STATE_READY, Player.STATE_IDLE, Player.STATE_IDLE)
.inOrder(); .inOrder();
assertThat(eventListenerPlayWhenReady).containsExactly(true, true, true, false).inOrder(); assertThat(eventListenerPlayWhenReady).containsExactly(false).inOrder();
assertThat(sequence).containsExactly(0, 1, 2).inOrder();
} }
@Test @Test
...@@ -2563,7 +2572,7 @@ public final class ExoPlayerTest { ...@@ -2563,7 +2572,7 @@ public final class ExoPlayerTest {
final EventListener eventListener = final EventListener eventListener =
new EventListener() { new EventListener() {
@Override @Override
public void onPlayerStateChanged(boolean playWhenReady, int state) { public void onPlaybackStateChanged(int state) {
if (state == Player.STATE_IDLE) { if (state == Player.STATE_IDLE) {
playerReference.get().setMediaSource(secondMediaSource); playerReference.get().setMediaSource(secondMediaSource);
} }
...@@ -2625,7 +2634,7 @@ public final class ExoPlayerTest { ...@@ -2625,7 +2634,7 @@ public final class ExoPlayerTest {
EventListener eventListener = EventListener eventListener =
new EventListener() { new EventListener() {
@Override @Override
public void onPlayerStateChanged(boolean playWhenReady, @Player.State int playbackState) { public void onPlaybackStateChanged(@Player.State int playbackState) {
if (playbackState == Player.STATE_READY && clockAtStartMs.get() == C.TIME_UNSET) { if (playbackState == Player.STATE_READY && clockAtStartMs.get() == C.TIME_UNSET) {
clockAtStartMs.set(clock.elapsedRealtime()); clockAtStartMs.set(clock.elapsedRealtime());
} }
...@@ -3649,7 +3658,7 @@ public final class ExoPlayerTest { ...@@ -3649,7 +3658,7 @@ public final class ExoPlayerTest {
.blockUntilEnded(TIMEOUT_MS); .blockUntilEnded(TIMEOUT_MS);
exoPlayerTestRunner.assertPlaybackStatesEqual( exoPlayerTestRunner.assertPlaybackStatesEqual(
Player.STATE_IDLE, Player.STATE_BUFFERING, Player.STATE_READY, Player.STATE_ENDED); Player.STATE_BUFFERING, Player.STATE_READY, Player.STATE_ENDED);
exoPlayerTestRunner.assertTimelinesSame(dummyTimeline, timeline, Timeline.EMPTY); exoPlayerTestRunner.assertTimelinesSame(dummyTimeline, timeline, Timeline.EMPTY);
exoPlayerTestRunner.assertTimelineChangeReasonsEqual( exoPlayerTestRunner.assertTimelineChangeReasonsEqual(
Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED /* media item set (masked timeline) */, Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED /* media item set (masked timeline) */,
...@@ -3747,7 +3756,6 @@ public final class ExoPlayerTest { ...@@ -3747,7 +3756,6 @@ public final class ExoPlayerTest {
playbackStates); playbackStates);
assertArrayEquals(new int[] {1, 0, 1, 2}, timelineWindowCounts); assertArrayEquals(new int[] {1, 0, 1, 2}, timelineWindowCounts);
exoPlayerTestRunner.assertPlaybackStatesEqual( exoPlayerTestRunner.assertPlaybackStatesEqual(
Player.STATE_IDLE,
Player.STATE_BUFFERING /* first buffering state after prepare */, Player.STATE_BUFFERING /* first buffering state after prepare */,
Player.STATE_READY, Player.STATE_READY,
Player.STATE_ENDED); Player.STATE_ENDED);
...@@ -3818,7 +3826,6 @@ public final class ExoPlayerTest { ...@@ -3818,7 +3826,6 @@ public final class ExoPlayerTest {
.blockUntilEnded(TIMEOUT_MS); .blockUntilEnded(TIMEOUT_MS);
exoPlayerTestRunner.assertPlaybackStatesEqual( exoPlayerTestRunner.assertPlaybackStatesEqual(
Player.STATE_IDLE,
Player.STATE_BUFFERING, // first buffering Player.STATE_BUFFERING, // first buffering
Player.STATE_READY, Player.STATE_READY,
Player.STATE_ENDED, // clear playlist Player.STATE_ENDED, // clear playlist
...@@ -3883,7 +3890,6 @@ public final class ExoPlayerTest { ...@@ -3883,7 +3890,6 @@ public final class ExoPlayerTest {
new int[] {Player.STATE_IDLE, Player.STATE_IDLE, Player.STATE_IDLE}, playbackStateHolder); new int[] {Player.STATE_IDLE, Player.STATE_IDLE, Player.STATE_IDLE}, playbackStateHolder);
assertArrayEquals(new int[] {1, 0, 1}, windowCountHolder); assertArrayEquals(new int[] {1, 0, 1}, windowCountHolder);
exoPlayerTestRunner.assertPlaybackStatesEqual( exoPlayerTestRunner.assertPlaybackStatesEqual(
Player.STATE_IDLE,
Player.STATE_BUFFERING, // first buffering Player.STATE_BUFFERING, // first buffering
Player.STATE_READY, Player.STATE_READY,
Player.STATE_IDLE, // stop Player.STATE_IDLE, // stop
...@@ -3925,7 +3931,7 @@ public final class ExoPlayerTest { ...@@ -3925,7 +3931,7 @@ public final class ExoPlayerTest {
.blockUntilActionScheduleFinished(TIMEOUT_MS) .blockUntilActionScheduleFinished(TIMEOUT_MS)
.blockUntilEnded(TIMEOUT_MS); .blockUntilEnded(TIMEOUT_MS);
exoPlayerTestRunner.assertPlaybackStatesEqual(Player.STATE_IDLE, Player.STATE_ENDED); exoPlayerTestRunner.assertPlaybackStatesEqual(Player.STATE_ENDED);
exoPlayerTestRunner.assertTimelinesSame(); exoPlayerTestRunner.assertTimelinesSame();
exoPlayerTestRunner.assertTimelineChangeReasonsEqual(); exoPlayerTestRunner.assertTimelineChangeReasonsEqual();
assertArrayEquals(new int[] {1}, currentWindowIndices); assertArrayEquals(new int[] {1}, currentWindowIndices);
...@@ -3949,7 +3955,7 @@ public final class ExoPlayerTest { ...@@ -3949,7 +3955,7 @@ public final class ExoPlayerTest {
.blockUntilEnded(TIMEOUT_MS); .blockUntilEnded(TIMEOUT_MS);
exoPlayerTestRunner.assertPlaybackStatesEqual( exoPlayerTestRunner.assertPlaybackStatesEqual(
Player.STATE_IDLE, Player.STATE_BUFFERING, Player.STATE_READY, Player.STATE_ENDED); Player.STATE_BUFFERING, Player.STATE_READY, Player.STATE_ENDED);
exoPlayerTestRunner.assertTimelinesSame(dummyTimeline, timeline); exoPlayerTestRunner.assertTimelinesSame(dummyTimeline, timeline);
exoPlayerTestRunner.assertTimelineChangeReasonsEqual( exoPlayerTestRunner.assertTimelineChangeReasonsEqual(
Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED /* media item set (masked timeline) */, Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED /* media item set (masked timeline) */,
...@@ -4065,7 +4071,7 @@ public final class ExoPlayerTest { ...@@ -4065,7 +4071,7 @@ public final class ExoPlayerTest {
.start() .start()
.blockUntilActionScheduleFinished(TIMEOUT_MS) .blockUntilActionScheduleFinished(TIMEOUT_MS)
.blockUntilEnded(TIMEOUT_MS); .blockUntilEnded(TIMEOUT_MS);
exoPlayerTestRunner.assertPlaybackStatesEqual(1, 4); exoPlayerTestRunner.assertPlaybackStatesEqual(Player.STATE_ENDED);
} }
@Test @Test
...@@ -4497,7 +4503,7 @@ public final class ExoPlayerTest { ...@@ -4497,7 +4503,7 @@ public final class ExoPlayerTest {
.blockUntilActionScheduleFinished(TIMEOUT_MS) .blockUntilActionScheduleFinished(TIMEOUT_MS)
.blockUntilEnded(TIMEOUT_MS); .blockUntilEnded(TIMEOUT_MS);
// Expect reset of masking to first window. // Expect reset of masking to first window.
exoPlayerTestRunner.assertPlaybackStatesEqual(Player.STATE_IDLE, Player.STATE_ENDED); exoPlayerTestRunner.assertPlaybackStatesEqual(Player.STATE_ENDED);
assertArrayEquals( assertArrayEquals(
new int[] {Player.STATE_IDLE, Player.STATE_IDLE, Player.STATE_IDLE, Player.STATE_IDLE}, new int[] {Player.STATE_IDLE, Player.STATE_IDLE, Player.STATE_IDLE, Player.STATE_IDLE},
maskingPlaybackStates); maskingPlaybackStates);
...@@ -4542,7 +4548,7 @@ public final class ExoPlayerTest { ...@@ -4542,7 +4548,7 @@ public final class ExoPlayerTest {
.blockUntilEnded(TIMEOUT_MS); .blockUntilEnded(TIMEOUT_MS);
// Expect reset of masking to first window. // Expect reset of masking to first window.
exoPlayerTestRunner.assertPlaybackStatesEqual( exoPlayerTestRunner.assertPlaybackStatesEqual(
Player.STATE_IDLE, Player.STATE_BUFFERING, Player.STATE_READY, Player.STATE_ENDED); Player.STATE_BUFFERING, Player.STATE_READY, Player.STATE_ENDED);
assertArrayEquals(new int[] {Player.STATE_IDLE}, maskingPlaybackStates); assertArrayEquals(new int[] {Player.STATE_IDLE}, maskingPlaybackStates);
exoPlayerTestRunner.assertTimelineChangeReasonsEqual( exoPlayerTestRunner.assertTimelineChangeReasonsEqual(
Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED, Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED,
...@@ -4580,7 +4586,7 @@ public final class ExoPlayerTest { ...@@ -4580,7 +4586,7 @@ public final class ExoPlayerTest {
.blockUntilEnded(TIMEOUT_MS); .blockUntilEnded(TIMEOUT_MS);
// Expect reset of masking to first window. // Expect reset of masking to first window.
exoPlayerTestRunner.assertPlaybackStatesEqual( exoPlayerTestRunner.assertPlaybackStatesEqual(
Player.STATE_IDLE, Player.STATE_BUFFERING, Player.STATE_READY, Player.STATE_ENDED); Player.STATE_BUFFERING, Player.STATE_READY, Player.STATE_ENDED);
assertArrayEquals(new int[] {Player.STATE_IDLE}, maskingPlaybackStates); assertArrayEquals(new int[] {Player.STATE_IDLE}, maskingPlaybackStates);
exoPlayerTestRunner.assertTimelineChangeReasonsEqual( exoPlayerTestRunner.assertTimelineChangeReasonsEqual(
Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED, Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED,
...@@ -4618,7 +4624,7 @@ public final class ExoPlayerTest { ...@@ -4618,7 +4624,7 @@ public final class ExoPlayerTest {
.blockUntilEnded(TIMEOUT_MS); .blockUntilEnded(TIMEOUT_MS);
// Expect reset of masking to first window. // Expect reset of masking to first window.
exoPlayerTestRunner.assertPlaybackStatesEqual( exoPlayerTestRunner.assertPlaybackStatesEqual(
Player.STATE_IDLE, Player.STATE_BUFFERING, Player.STATE_READY, Player.STATE_ENDED); Player.STATE_BUFFERING, Player.STATE_READY, Player.STATE_ENDED);
assertArrayEquals(new int[] {Player.STATE_IDLE}, maskingPlaybackStates); assertArrayEquals(new int[] {Player.STATE_IDLE}, maskingPlaybackStates);
exoPlayerTestRunner.assertTimelineChangeReasonsEqual( exoPlayerTestRunner.assertTimelineChangeReasonsEqual(
Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED, Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED,
...@@ -4691,7 +4697,6 @@ public final class ExoPlayerTest { ...@@ -4691,7 +4697,6 @@ public final class ExoPlayerTest {
.blockUntilEnded(TIMEOUT_MS); .blockUntilEnded(TIMEOUT_MS);
// Expect reset of masking to first window. // Expect reset of masking to first window.
exoPlayerTestRunner.assertPlaybackStatesEqual( exoPlayerTestRunner.assertPlaybackStatesEqual(
Player.STATE_IDLE,
Player.STATE_ENDED, Player.STATE_ENDED,
Player.STATE_BUFFERING, Player.STATE_BUFFERING,
Player.STATE_READY, Player.STATE_READY,
...@@ -4749,7 +4754,7 @@ public final class ExoPlayerTest { ...@@ -4749,7 +4754,7 @@ public final class ExoPlayerTest {
.blockUntilActionScheduleFinished(TIMEOUT_MS) .blockUntilActionScheduleFinished(TIMEOUT_MS)
.blockUntilEnded(TIMEOUT_MS); .blockUntilEnded(TIMEOUT_MS);
// Expect reset of masking to first window. // Expect reset of masking to first window.
exoPlayerTestRunner.assertPlaybackStatesEqual(Player.STATE_IDLE, Player.STATE_ENDED); exoPlayerTestRunner.assertPlaybackStatesEqual(Player.STATE_ENDED);
assertArrayEquals(new int[] {Player.STATE_ENDED}, maskingPlaybackStates); assertArrayEquals(new int[] {Player.STATE_ENDED}, maskingPlaybackStates);
exoPlayerTestRunner.assertTimelineChangeReasonsEqual( exoPlayerTestRunner.assertTimelineChangeReasonsEqual(
Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED, Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED,
...@@ -4790,7 +4795,7 @@ public final class ExoPlayerTest { ...@@ -4790,7 +4795,7 @@ public final class ExoPlayerTest {
.blockUntilEnded(TIMEOUT_MS); .blockUntilEnded(TIMEOUT_MS);
// Expect reset of masking to first window. // Expect reset of masking to first window.
exoPlayerTestRunner.assertPlaybackStatesEqual( exoPlayerTestRunner.assertPlaybackStatesEqual(
Player.STATE_IDLE, Player.STATE_BUFFERING, Player.STATE_READY, Player.STATE_ENDED); Player.STATE_BUFFERING, Player.STATE_READY, Player.STATE_ENDED);
assertArrayEquals(new int[] {Player.STATE_ENDED}, maskingPlaybackStates); assertArrayEquals(new int[] {Player.STATE_ENDED}, maskingPlaybackStates);
exoPlayerTestRunner.assertTimelineChangeReasonsEqual( exoPlayerTestRunner.assertTimelineChangeReasonsEqual(
Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED, Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED,
...@@ -4831,7 +4836,7 @@ public final class ExoPlayerTest { ...@@ -4831,7 +4836,7 @@ public final class ExoPlayerTest {
.blockUntilEnded(TIMEOUT_MS); .blockUntilEnded(TIMEOUT_MS);
// Expect reset of masking to first window. // Expect reset of masking to first window.
exoPlayerTestRunner.assertPlaybackStatesEqual( exoPlayerTestRunner.assertPlaybackStatesEqual(
Player.STATE_IDLE, Player.STATE_BUFFERING, Player.STATE_READY, Player.STATE_ENDED); Player.STATE_BUFFERING, Player.STATE_READY, Player.STATE_ENDED);
assertArrayEquals(new int[] {Player.STATE_ENDED}, maskingPlaybackStates); assertArrayEquals(new int[] {Player.STATE_ENDED}, maskingPlaybackStates);
exoPlayerTestRunner.assertTimelineChangeReasonsEqual( exoPlayerTestRunner.assertTimelineChangeReasonsEqual(
Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED, Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED,
...@@ -4917,8 +4922,6 @@ public final class ExoPlayerTest { ...@@ -4917,8 +4922,6 @@ public final class ExoPlayerTest {
.blockUntilEnded(TIMEOUT_MS); .blockUntilEnded(TIMEOUT_MS);
// Expect reset of masking to first window. // Expect reset of masking to first window.
exoPlayerTestRunner.assertPlaybackStatesEqual( exoPlayerTestRunner.assertPlaybackStatesEqual(
Player.STATE_IDLE,
Player.STATE_IDLE, // Pause.
Player.STATE_BUFFERING, Player.STATE_BUFFERING,
Player.STATE_READY, // Ready after initial prepare. Player.STATE_READY, // Ready after initial prepare.
Player.STATE_ENDED, // Ended after setting empty source without seek. Player.STATE_ENDED, // Ended after setting empty source without seek.
...@@ -4931,7 +4934,6 @@ public final class ExoPlayerTest { ...@@ -4931,7 +4934,6 @@ public final class ExoPlayerTest {
Player.STATE_READY, // Ready after setting media item with seek. Player.STATE_READY, // Ready after setting media item with seek.
Player.STATE_BUFFERING, Player.STATE_BUFFERING,
Player.STATE_READY, // Ready again after re-setting source. Player.STATE_READY, // Ready again after re-setting source.
Player.STATE_BUFFERING,
Player.STATE_BUFFERING, // Play. Player.STATE_BUFFERING, // Play.
Player.STATE_READY, // Ready after setting media item without seek. Player.STATE_READY, // Ready after setting media item without seek.
Player.STATE_ENDED); Player.STATE_ENDED);
...@@ -4997,12 +4999,9 @@ public final class ExoPlayerTest { ...@@ -4997,12 +4999,9 @@ public final class ExoPlayerTest {
.blockUntilEnded(TIMEOUT_MS); .blockUntilEnded(TIMEOUT_MS);
// Expect reset of masking to first window. // Expect reset of masking to first window.
exoPlayerTestRunner.assertPlaybackStatesEqual( exoPlayerTestRunner.assertPlaybackStatesEqual(
Player.STATE_IDLE,
Player.STATE_IDLE, // Pause.
Player.STATE_ENDED, // Empty source has been prepared. Player.STATE_ENDED, // Empty source has been prepared.
Player.STATE_BUFFERING, // After setting another source. Player.STATE_BUFFERING, // After setting another source.
Player.STATE_READY, Player.STATE_READY,
Player.STATE_READY, // Play.
Player.STATE_ENDED); Player.STATE_ENDED);
assertArrayEquals(new int[] {Player.STATE_ENDED}, maskingPlaybackStates); assertArrayEquals(new int[] {Player.STATE_ENDED}, maskingPlaybackStates);
exoPlayerTestRunner.assertTimelineChangeReasonsEqual( exoPlayerTestRunner.assertTimelineChangeReasonsEqual(
...@@ -5393,7 +5392,6 @@ public final class ExoPlayerTest { ...@@ -5393,7 +5392,6 @@ public final class ExoPlayerTest {
.blockUntilEnded(TIMEOUT_MS); .blockUntilEnded(TIMEOUT_MS);
// Expect reset of masking to first window. // Expect reset of masking to first window.
exoPlayerTestRunner.assertPlaybackStatesEqual( exoPlayerTestRunner.assertPlaybackStatesEqual(
Player.STATE_IDLE,
Player.STATE_BUFFERING, Player.STATE_BUFFERING,
Player.STATE_READY, // Ready after initial prepare. Player.STATE_READY, // Ready after initial prepare.
Player.STATE_ENDED, // ended after removing current window index Player.STATE_ENDED, // ended after removing current window index
...@@ -5436,7 +5434,7 @@ public final class ExoPlayerTest { ...@@ -5436,7 +5434,7 @@ public final class ExoPlayerTest {
.blockUntilActionScheduleFinished(TIMEOUT_MS) .blockUntilActionScheduleFinished(TIMEOUT_MS)
.blockUntilEnded(TIMEOUT_MS); .blockUntilEnded(TIMEOUT_MS);
exoPlayerTestRunner.assertPlaybackStatesEqual( exoPlayerTestRunner.assertPlaybackStatesEqual(
Player.STATE_IDLE, Player.STATE_BUFFERING, Player.STATE_READY, Player.STATE_ENDED); Player.STATE_BUFFERING, Player.STATE_READY, Player.STATE_ENDED);
} }
@Test @Test
......
...@@ -79,7 +79,13 @@ public class DebugTextViewHelper implements Player.EventListener, Runnable { ...@@ -79,7 +79,13 @@ public class DebugTextViewHelper implements Player.EventListener, Runnable {
// Player.EventListener implementation. // Player.EventListener implementation.
@Override @Override
public final void onPlayerStateChanged(boolean playWhenReady, @Player.State int playbackState) { public final void onPlaybackStateChanged(@Player.State int playbackState) {
updateAndPost();
}
@Override
public final void onPlayWhenReadyChanged(
boolean playWhenReady, @Player.PlayWhenReadyChangeReason int playbackState) {
updateAndPost(); updateAndPost();
} }
......
...@@ -1380,7 +1380,13 @@ public class PlayerNotificationManager { ...@@ -1380,7 +1380,13 @@ public class PlayerNotificationManager {
private class PlayerListener implements Player.EventListener { private class PlayerListener implements Player.EventListener {
@Override @Override
public void onPlayerStateChanged(boolean playWhenReady, @Player.State int playbackState) { public void onPlaybackStateChanged(@Player.State int playbackState) {
postStartOrUpdateNotification();
}
@Override
public void onPlayWhenReadyChanged(
boolean playWhenReady, @Player.PlayWhenReadyChangeReason int reason) {
postStartOrUpdateNotification(); postStartOrUpdateNotification();
} }
......
...@@ -843,7 +843,7 @@ public abstract class Action { ...@@ -843,7 +843,7 @@ public abstract class Action {
/** /**
* Waits for a specified playWhenReady value, returning either immediately or after a call to * Waits for a specified playWhenReady value, returning either immediately or after a call to
* {@link Player.EventListener#onPlayerStateChanged(boolean, int)}. * {@link Player.EventListener#onPlayWhenReadyChanged(boolean, int)}.
*/ */
public static final class WaitForPlayWhenReady extends Action { public static final class WaitForPlayWhenReady extends Action {
...@@ -874,8 +874,8 @@ public abstract class Action { ...@@ -874,8 +874,8 @@ public abstract class Action {
player.addListener( player.addListener(
new Player.EventListener() { new Player.EventListener() {
@Override @Override
public void onPlayerStateChanged( public void onPlayWhenReadyChanged(
boolean playWhenReady, @Player.State int playbackState) { boolean playWhenReady, @Player.PlayWhenReadyChangeReason int reason) {
if (targetPlayWhenReady == playWhenReady) { if (targetPlayWhenReady == playWhenReady) {
player.removeListener(this); player.removeListener(this);
nextAction.schedule(player, trackSelector, surface, handler); nextAction.schedule(player, trackSelector, surface, handler);
...@@ -894,7 +894,7 @@ public abstract class Action { ...@@ -894,7 +894,7 @@ public abstract class Action {
/** /**
* Waits for a specified playback state, returning either immediately or after a call to {@link * Waits for a specified playback state, returning either immediately or after a call to {@link
* Player.EventListener#onPlayerStateChanged(boolean, int)}. * Player.EventListener#onPlaybackStateChanged(int)}.
*/ */
public static final class WaitForPlaybackState extends Action { public static final class WaitForPlaybackState extends Action {
...@@ -925,8 +925,7 @@ public abstract class Action { ...@@ -925,8 +925,7 @@ public abstract class Action {
player.addListener( player.addListener(
new Player.EventListener() { new Player.EventListener() {
@Override @Override
public void onPlayerStateChanged( public void onPlaybackStateChanged(@Player.State int playbackState) {
boolean playWhenReady, @Player.State int playbackState) {
if (targetPlaybackState == playbackState) { if (targetPlaybackState == playbackState) {
player.removeListener(this); player.removeListener(this);
nextAction.schedule(player, trackSelector, surface, handler); nextAction.schedule(player, trackSelector, surface, handler);
......
...@@ -609,8 +609,7 @@ public final class ExoPlayerTestRunner implements Player.EventListener, ActionSc ...@@ -609,8 +609,7 @@ public final class ExoPlayerTestRunner implements Player.EventListener, ActionSc
/** /**
* Asserts that the playback states reported by {@link * Asserts that the playback states reported by {@link
* Player.EventListener#onPlayerStateChanged(boolean, int)} are equal to the provided playback * Player.EventListener#onPlaybackStateChanged(int)} are equal to the provided playback states.
* states.
*/ */
public void assertPlaybackStatesEqual(Integer... states) { public void assertPlaybackStatesEqual(Integer... states) {
assertThat(playbackStates).containsExactlyElementsIn(Arrays.asList(states)).inOrder(); assertThat(playbackStates).containsExactlyElementsIn(Arrays.asList(states)).inOrder();
...@@ -706,7 +705,7 @@ public final class ExoPlayerTestRunner implements Player.EventListener, ActionSc ...@@ -706,7 +705,7 @@ public final class ExoPlayerTestRunner implements Player.EventListener, ActionSc
} }
@Override @Override
public void onPlayerStateChanged(boolean playWhenReady, @Player.State int playbackState) { public void onPlaybackStateChanged(@Player.State int playbackState) {
playbackStates.add(playbackState); playbackStates.add(playbackState);
playerWasPrepared |= playbackState != Player.STATE_IDLE; playerWasPrepared |= playbackState != Player.STATE_IDLE;
if (playbackState == Player.STATE_ENDED if (playbackState == Player.STATE_ENDED
......
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