Move PlaybackStatsListener to non-deprecated state events

PiperOrigin-RevId: 303764399
This commit is contained in:
andrewlewis 2020-03-30 18:03:47 +01:00 committed by Oliver Woodman
parent 378593f551
commit 685bb77297
2 changed files with 49 additions and 36 deletions

View File

@ -173,8 +173,8 @@ public final class PlaybackStatsListener
if (isSeeking) { if (isSeeking) {
tracker.onSeekStarted(eventTime, /* belongsToPlayback= */ true); tracker.onSeekStarted(eventTime, /* belongsToPlayback= */ true);
} }
tracker.onPlayerStateChanged( tracker.onPlaybackStateChanged(eventTime, playbackState, /* belongsToPlayback= */ true);
eventTime, playWhenReady, playbackState, /* belongsToPlayback= */ true); tracker.onPlayWhenReadyChanged(eventTime, playWhenReady, /* belongsToPlayback= */ true);
tracker.onIsSuppressedChanged(eventTime, isSuppressed, /* belongsToPlayback= */ true); tracker.onIsSuppressedChanged(eventTime, isSuppressed, /* belongsToPlayback= */ true);
tracker.onPlaybackSpeedChanged(eventTime, playbackSpeed); tracker.onPlaybackSpeedChanged(eventTime, playbackSpeed);
playbackStatsTrackers.put(session, tracker); playbackStatsTrackers.put(session, tracker);
@ -230,8 +230,7 @@ public final class PlaybackStatsListener
EventTime startEventTime = Assertions.checkNotNull(sessionStartEventTimes.remove(session)); EventTime startEventTime = Assertions.checkNotNull(sessionStartEventTimes.remove(session));
if (automaticTransition) { if (automaticTransition) {
// Simulate ENDED state to record natural ending of playback. // Simulate ENDED state to record natural ending of playback.
tracker.onPlayerStateChanged( tracker.onPlaybackStateChanged(eventTime, Player.STATE_ENDED, /* belongsToPlayback= */ false);
eventTime, /* playWhenReady= */ true, Player.STATE_ENDED, /* belongsToPlayback= */ false);
} }
tracker.onFinished(eventTime); tracker.onFinished(eventTime);
PlaybackStats playbackStats = tracker.build(/* isFinal= */ true); PlaybackStats playbackStats = tracker.build(/* isFinal= */ true);
@ -244,16 +243,27 @@ public final class PlaybackStatsListener
// AnalyticsListener implementation. // AnalyticsListener implementation.
@Override @Override
public void onPlayerStateChanged( public void onPlaybackStateChanged(EventTime eventTime, @Player.State int state) {
EventTime eventTime, boolean playWhenReady, @Player.State int playbackState) { playbackState = state;
this.playWhenReady = playWhenReady;
this.playbackState = playbackState;
sessionManager.updateSessions(eventTime); sessionManager.updateSessions(eventTime);
for (String session : playbackStatsTrackers.keySet()) { for (String session : playbackStatsTrackers.keySet()) {
boolean belongsToPlayback = sessionManager.belongsToSession(eventTime, session); boolean belongsToPlayback = sessionManager.belongsToSession(eventTime, session);
playbackStatsTrackers playbackStatsTrackers
.get(session) .get(session)
.onPlayerStateChanged(eventTime, playWhenReady, playbackState, belongsToPlayback); .onPlaybackStateChanged(eventTime, playbackState, belongsToPlayback);
}
}
@Override
public void onPlayWhenReadyChanged(
EventTime eventTime, boolean playWhenReady, @Player.PlayWhenReadyChangeReason int reason) {
this.playWhenReady = playWhenReady;
sessionManager.updateSessions(eventTime);
for (String session : playbackStatsTrackers.keySet()) {
boolean belongsToPlayback = sessionManager.belongsToSession(eventTime, session);
playbackStatsTrackers
.get(session)
.onPlayWhenReadyChanged(eventTime, playWhenReady, belongsToPlayback);
} }
} }
@ -521,27 +531,36 @@ public final class PlaybackStatsListener
} }
/** /**
* Notifies the tracker of a player state change event, including all player state changes while * Notifies the tracker of a playback state change event, including all playback state changes
* the playback is not in the foreground. * while the playback is not in the foreground.
*
* @param eventTime The {@link EventTime}.
* @param state The current {@link Player.State}.
* @param belongsToPlayback Whether the {@code eventTime} belongs to the current playback.
*/
public void onPlaybackStateChanged(
EventTime eventTime, @Player.State int state, boolean belongsToPlayback) {
playerPlaybackState = state;
if (state != Player.STATE_IDLE) {
hasFatalError = false;
}
if (state == Player.STATE_IDLE || state == Player.STATE_ENDED) {
isInterruptedByAd = false;
}
maybeUpdatePlaybackState(eventTime, belongsToPlayback);
}
/**
* Notifies the tracker of a play when ready change event, including all play when ready changes
* while the playback is not in the foreground.
* *
* @param eventTime The {@link EventTime}. * @param eventTime The {@link EventTime}.
* @param playWhenReady Whether the playback will proceed when ready. * @param playWhenReady Whether the playback will proceed when ready.
* @param playbackState The current {@link Player.State}.
* @param belongsToPlayback Whether the {@code eventTime} belongs to the current playback. * @param belongsToPlayback Whether the {@code eventTime} belongs to the current playback.
*/ */
public void onPlayerStateChanged( public void onPlayWhenReadyChanged(
EventTime eventTime, EventTime eventTime, boolean playWhenReady, boolean belongsToPlayback) {
boolean playWhenReady,
@Player.State int playbackState,
boolean belongsToPlayback) {
this.playWhenReady = playWhenReady; this.playWhenReady = playWhenReady;
playerPlaybackState = playbackState;
if (playbackState != Player.STATE_IDLE) {
hasFatalError = false;
}
if (playbackState == Player.STATE_IDLE || playbackState == Player.STATE_ENDED) {
isInterruptedByAd = false;
}
maybeUpdatePlaybackState(eventTime, belongsToPlayback); maybeUpdatePlaybackState(eventTime, belongsToPlayback);
} }

View File

@ -43,12 +43,9 @@ public final class PlaybackStatsListenerTest {
PlaybackStatsListener playbackStatsListener = PlaybackStatsListener playbackStatsListener =
new PlaybackStatsListener(/* keepHistory= */ true, /* callback= */ null); new PlaybackStatsListener(/* keepHistory= */ true, /* callback= */ null);
playbackStatsListener.onPlayerStateChanged( playbackStatsListener.onPlaybackStateChanged(TEST_EVENT_TIME, Player.STATE_BUFFERING);
TEST_EVENT_TIME, /* playWhenReady= */ true, Player.STATE_BUFFERING); playbackStatsListener.onPlaybackStateChanged(TEST_EVENT_TIME, Player.STATE_READY);
playbackStatsListener.onPlayerStateChanged( playbackStatsListener.onPlaybackStateChanged(TEST_EVENT_TIME, Player.STATE_ENDED);
TEST_EVENT_TIME, /* playWhenReady= */ true, Player.STATE_READY);
playbackStatsListener.onPlayerStateChanged(
TEST_EVENT_TIME, /* playWhenReady= */ true, Player.STATE_ENDED);
@Nullable PlaybackStats playbackStats = playbackStatsListener.getPlaybackStats(); @Nullable PlaybackStats playbackStats = playbackStatsListener.getPlaybackStats();
assertThat(playbackStats).isNotNull(); assertThat(playbackStats).isNotNull();
@ -60,12 +57,9 @@ public final class PlaybackStatsListenerTest {
PlaybackStatsListener playbackStatsListener = PlaybackStatsListener playbackStatsListener =
new PlaybackStatsListener(/* keepHistory= */ false, /* callback= */ null); new PlaybackStatsListener(/* keepHistory= */ false, /* callback= */ null);
playbackStatsListener.onPlayerStateChanged( playbackStatsListener.onPlaybackStateChanged(TEST_EVENT_TIME, Player.STATE_BUFFERING);
TEST_EVENT_TIME, /* playWhenReady= */ true, Player.STATE_BUFFERING); playbackStatsListener.onPlaybackStateChanged(TEST_EVENT_TIME, Player.STATE_READY);
playbackStatsListener.onPlayerStateChanged( playbackStatsListener.onPlaybackStateChanged(TEST_EVENT_TIME, Player.STATE_ENDED);
TEST_EVENT_TIME, /* playWhenReady= */ true, Player.STATE_READY);
playbackStatsListener.onPlayerStateChanged(
TEST_EVENT_TIME, /* playWhenReady= */ true, Player.STATE_ENDED);
@Nullable PlaybackStats playbackStats = playbackStatsListener.getPlaybackStats(); @Nullable PlaybackStats playbackStats = playbackStatsListener.getPlaybackStats();
assertThat(playbackStats).isNotNull(); assertThat(playbackStats).isNotNull();