Commit 7e46d347 by tonihei Committed by Oliver Woodman

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
parent a3667dec
# Release notes # # 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) ### ### 2.10.5 (2019-09-20) ###
* Add `Player.isPlaying` and `EventListener.onIsPlayingChanged` to check whether * Add `Player.isPlaying` and `EventListener.onIsPlayingChanged` to check whether
......
...@@ -260,17 +260,21 @@ import java.util.concurrent.CopyOnWriteArrayList; ...@@ -260,17 +260,21 @@ import java.util.concurrent.CopyOnWriteArrayList;
internalPlayer.setPlayWhenReady(internalPlayWhenReady); internalPlayer.setPlayWhenReady(internalPlayWhenReady);
} }
boolean playWhenReadyChanged = this.playWhenReady != playWhenReady; boolean playWhenReadyChanged = this.playWhenReady != playWhenReady;
boolean suppressionReasonChanged = this.playbackSuppressionReason != playbackSuppressionReason;
this.playWhenReady = playWhenReady; this.playWhenReady = playWhenReady;
this.playbackSuppressionReason = playbackSuppressionReason; this.playbackSuppressionReason = playbackSuppressionReason;
boolean isPlaying = isPlaying(); boolean isPlaying = isPlaying();
boolean isPlayingChanged = oldIsPlaying != isPlaying; boolean isPlayingChanged = oldIsPlaying != isPlaying;
if (playWhenReadyChanged || isPlayingChanged) { if (playWhenReadyChanged || suppressionReasonChanged || isPlayingChanged) {
int playbackState = playbackInfo.playbackState; int playbackState = playbackInfo.playbackState;
notifyListeners( notifyListeners(
listener -> { listener -> {
if (playWhenReadyChanged) { if (playWhenReadyChanged) {
listener.onPlayerStateChanged(playWhenReady, playbackState); listener.onPlayerStateChanged(playWhenReady, playbackState);
} }
if (suppressionReasonChanged) {
listener.onPlaybackSuppressionReasonChanged(playbackSuppressionReason);
}
if (isPlayingChanged) { if (isPlayingChanged) {
listener.onIsPlayingChanged(isPlaying); listener.onIsPlayingChanged(isPlaying);
} }
......
...@@ -366,6 +366,14 @@ public interface Player { ...@@ -366,6 +366,14 @@ public interface Player {
default void onPlayerStateChanged(boolean playWhenReady, int playbackState) {} 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. * Called when the value of {@link #isPlaying()} changes.
* *
* @param isPlaying Whether the player is playing. * @param isPlaying Whether the player is playing.
......
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