From 685bb77297f7526fbc9d54f1e06064c7c9847e7d Mon Sep 17 00:00:00 2001 From: andrewlewis Date: Mon, 30 Mar 2020 18:03:47 +0100 Subject: [PATCH] Move PlaybackStatsListener to non-deprecated state events PiperOrigin-RevId: 303764399 --- .../analytics/PlaybackStatsListener.java | 67 ++++++++++++------- .../analytics/PlaybackStatsListenerTest.java | 18 ++--- 2 files changed, 49 insertions(+), 36 deletions(-) diff --git a/library/core/src/main/java/com/google/android/exoplayer2/analytics/PlaybackStatsListener.java b/library/core/src/main/java/com/google/android/exoplayer2/analytics/PlaybackStatsListener.java index cabaac1d47..97805da0fd 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/analytics/PlaybackStatsListener.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/analytics/PlaybackStatsListener.java @@ -173,8 +173,8 @@ public final class PlaybackStatsListener if (isSeeking) { tracker.onSeekStarted(eventTime, /* belongsToPlayback= */ true); } - tracker.onPlayerStateChanged( - eventTime, playWhenReady, playbackState, /* belongsToPlayback= */ true); + tracker.onPlaybackStateChanged(eventTime, playbackState, /* belongsToPlayback= */ true); + tracker.onPlayWhenReadyChanged(eventTime, playWhenReady, /* belongsToPlayback= */ true); tracker.onIsSuppressedChanged(eventTime, isSuppressed, /* belongsToPlayback= */ true); tracker.onPlaybackSpeedChanged(eventTime, playbackSpeed); playbackStatsTrackers.put(session, tracker); @@ -230,8 +230,7 @@ public final class PlaybackStatsListener EventTime startEventTime = Assertions.checkNotNull(sessionStartEventTimes.remove(session)); if (automaticTransition) { // Simulate ENDED state to record natural ending of playback. - tracker.onPlayerStateChanged( - eventTime, /* playWhenReady= */ true, Player.STATE_ENDED, /* belongsToPlayback= */ false); + tracker.onPlaybackStateChanged(eventTime, Player.STATE_ENDED, /* belongsToPlayback= */ false); } tracker.onFinished(eventTime); PlaybackStats playbackStats = tracker.build(/* isFinal= */ true); @@ -244,16 +243,27 @@ public final class PlaybackStatsListener // AnalyticsListener implementation. @Override - public void onPlayerStateChanged( - EventTime eventTime, boolean playWhenReady, @Player.State int playbackState) { - this.playWhenReady = playWhenReady; - this.playbackState = playbackState; + public void onPlaybackStateChanged(EventTime eventTime, @Player.State int state) { + playbackState = state; sessionManager.updateSessions(eventTime); for (String session : playbackStatsTrackers.keySet()) { boolean belongsToPlayback = sessionManager.belongsToSession(eventTime, session); playbackStatsTrackers .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 - * the playback is not in the foreground. + * Notifies the tracker of a playback state change event, including all playback state changes + * 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 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. */ - public void onPlayerStateChanged( - EventTime eventTime, - boolean playWhenReady, - @Player.State int playbackState, - boolean belongsToPlayback) { + public void onPlayWhenReadyChanged( + EventTime eventTime, boolean playWhenReady, boolean belongsToPlayback) { 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); } diff --git a/library/core/src/test/java/com/google/android/exoplayer2/analytics/PlaybackStatsListenerTest.java b/library/core/src/test/java/com/google/android/exoplayer2/analytics/PlaybackStatsListenerTest.java index 10122d36ec..f08d63400d 100644 --- a/library/core/src/test/java/com/google/android/exoplayer2/analytics/PlaybackStatsListenerTest.java +++ b/library/core/src/test/java/com/google/android/exoplayer2/analytics/PlaybackStatsListenerTest.java @@ -43,12 +43,9 @@ public final class PlaybackStatsListenerTest { PlaybackStatsListener playbackStatsListener = new PlaybackStatsListener(/* keepHistory= */ true, /* callback= */ null); - playbackStatsListener.onPlayerStateChanged( - TEST_EVENT_TIME, /* playWhenReady= */ true, Player.STATE_BUFFERING); - playbackStatsListener.onPlayerStateChanged( - TEST_EVENT_TIME, /* playWhenReady= */ true, Player.STATE_READY); - playbackStatsListener.onPlayerStateChanged( - TEST_EVENT_TIME, /* playWhenReady= */ true, Player.STATE_ENDED); + playbackStatsListener.onPlaybackStateChanged(TEST_EVENT_TIME, Player.STATE_BUFFERING); + playbackStatsListener.onPlaybackStateChanged(TEST_EVENT_TIME, Player.STATE_READY); + playbackStatsListener.onPlaybackStateChanged(TEST_EVENT_TIME, Player.STATE_ENDED); @Nullable PlaybackStats playbackStats = playbackStatsListener.getPlaybackStats(); assertThat(playbackStats).isNotNull(); @@ -60,12 +57,9 @@ public final class PlaybackStatsListenerTest { PlaybackStatsListener playbackStatsListener = new PlaybackStatsListener(/* keepHistory= */ false, /* callback= */ null); - playbackStatsListener.onPlayerStateChanged( - TEST_EVENT_TIME, /* playWhenReady= */ true, Player.STATE_BUFFERING); - playbackStatsListener.onPlayerStateChanged( - TEST_EVENT_TIME, /* playWhenReady= */ true, Player.STATE_READY); - playbackStatsListener.onPlayerStateChanged( - TEST_EVENT_TIME, /* playWhenReady= */ true, Player.STATE_ENDED); + playbackStatsListener.onPlaybackStateChanged(TEST_EVENT_TIME, Player.STATE_BUFFERING); + playbackStatsListener.onPlaybackStateChanged(TEST_EVENT_TIME, Player.STATE_READY); + playbackStatsListener.onPlaybackStateChanged(TEST_EVENT_TIME, Player.STATE_ENDED); @Nullable PlaybackStats playbackStats = playbackStatsListener.getPlaybackStats(); assertThat(playbackStats).isNotNull();