From 7e46d347889b0318d5d8bf3ea6f0a197181bc486 Mon Sep 17 00:00:00 2001 From: tonihei Date: Thu, 26 Sep 2019 15:41:27 +0100 Subject: [PATCH] Add EventListener.onPlaybackSuppressionReasonChanged Adding this callback makes sense for completeness (we have similar callbacks for all other playback state properties), and also to detect audio focus loss while buffering which would currently trigger no callback because isPlaying is still false. Issue:#6203 PiperOrigin-RevId: 271347351 --- RELEASENOTES.md | 6 ++++++ .../java/com/google/android/exoplayer2/ExoPlayerImpl.java | 6 +++++- .../main/java/com/google/android/exoplayer2/Player.java | 8 ++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 3169dac565..0cc0a8d149 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -1,5 +1,11 @@ # Release notes # +### 2.10.6 ### + +* Add `Player.onPlaybackSuppressionReasonChanged` to allow listeners to + detect playbacks suppressions (e.g. audio focus loss) directly + ([#6203](https://github.com/google/ExoPlayer/issues/6203)). + ### 2.10.5 (2019-09-20) ### * Add `Player.isPlaying` and `EventListener.onIsPlayingChanged` to check whether diff --git a/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImpl.java b/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImpl.java index 5010faaa9d..552eefcef9 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImpl.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImpl.java @@ -260,17 +260,21 @@ import java.util.concurrent.CopyOnWriteArrayList; internalPlayer.setPlayWhenReady(internalPlayWhenReady); } boolean playWhenReadyChanged = this.playWhenReady != playWhenReady; + boolean suppressionReasonChanged = this.playbackSuppressionReason != playbackSuppressionReason; this.playWhenReady = playWhenReady; this.playbackSuppressionReason = playbackSuppressionReason; boolean isPlaying = isPlaying(); boolean isPlayingChanged = oldIsPlaying != isPlaying; - if (playWhenReadyChanged || isPlayingChanged) { + if (playWhenReadyChanged || suppressionReasonChanged || isPlayingChanged) { int playbackState = playbackInfo.playbackState; notifyListeners( listener -> { if (playWhenReadyChanged) { listener.onPlayerStateChanged(playWhenReady, playbackState); } + if (suppressionReasonChanged) { + listener.onPlaybackSuppressionReasonChanged(playbackSuppressionReason); + } if (isPlayingChanged) { listener.onIsPlayingChanged(isPlaying); } diff --git a/library/core/src/main/java/com/google/android/exoplayer2/Player.java b/library/core/src/main/java/com/google/android/exoplayer2/Player.java index dad0945d7b..da57e9f900 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/Player.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/Player.java @@ -365,6 +365,14 @@ public interface Player { */ default void onPlayerStateChanged(boolean playWhenReady, int playbackState) {} + /** + * Called when the value returned from {@link #getPlaybackSuppressionReason()} changes. + * + * @param playbackSuppressionReason The current {@link PlaybackSuppressionReason}. + */ + default void onPlaybackSuppressionReasonChanged( + @PlaybackSuppressionReason int playbackSuppressionReason) {} + /** * Called when the value of {@link #isPlaying()} changes. *