diff --git a/extensions/cast/src/main/java/com/google/android/exoplayer2/ext/cast/CastPlayer.java b/extensions/cast/src/main/java/com/google/android/exoplayer2/ext/cast/CastPlayer.java index 68226fdcf4..84724cbb47 100644 --- a/extensions/cast/src/main/java/com/google/android/exoplayer2/ext/cast/CastPlayer.java +++ b/extensions/cast/src/main/java/com/google/android/exoplayer2/ext/cast/CastPlayer.java @@ -19,6 +19,7 @@ import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.util.Log; import com.google.android.exoplayer2.C; +import com.google.android.exoplayer2.ExoPlaybackException; import com.google.android.exoplayer2.PlaybackParameters; import com.google.android.exoplayer2.Player; import com.google.android.exoplayer2.Timeline; @@ -308,7 +309,7 @@ public final class CastPlayer implements Player { } @Override - public Exception getPlaybackError() { + public ExoPlaybackException getPlaybackError() { return null; } diff --git a/extensions/mediasession/src/main/java/com/google/android/exoplayer2/ext/mediasession/MediaSessionConnector.java b/extensions/mediasession/src/main/java/com/google/android/exoplayer2/ext/mediasession/MediaSessionConnector.java index c90f7a84a5..3c40b359b8 100644 --- a/extensions/mediasession/src/main/java/com/google/android/exoplayer2/ext/mediasession/MediaSessionConnector.java +++ b/extensions/mediasession/src/main/java/com/google/android/exoplayer2/ext/mediasession/MediaSessionConnector.java @@ -339,7 +339,6 @@ public final class MediaSessionConnector { private QueueNavigator queueNavigator; private QueueEditor queueEditor; private RatingCallback ratingCallback; - private ExoPlaybackException playbackException; /** * Creates an instance. Must be called on the same thread that is used to construct the player @@ -443,7 +442,10 @@ public final class MediaSessionConnector { */ public void setErrorMessageProvider( ErrorMessageProvider errorMessageProvider) { - this.errorMessageProvider = errorMessageProvider; + if (this.errorMessageProvider != errorMessageProvider) { + this.errorMessageProvider = errorMessageProvider; + updateMediaSessionPlaybackState(); + } } /** @@ -453,9 +455,11 @@ public final class MediaSessionConnector { * @param queueNavigator The queue navigator. */ public void setQueueNavigator(QueueNavigator queueNavigator) { - unregisterCommandReceiver(this.queueNavigator); - this.queueNavigator = queueNavigator; - registerCommandReceiver(queueNavigator); + if (this.queueNavigator != queueNavigator) { + unregisterCommandReceiver(this.queueNavigator); + this.queueNavigator = queueNavigator; + registerCommandReceiver(queueNavigator); + } } /** @@ -464,11 +468,13 @@ public final class MediaSessionConnector { * @param queueEditor The queue editor. */ public void setQueueEditor(QueueEditor queueEditor) { - unregisterCommandReceiver(this.queueEditor); - this.queueEditor = queueEditor; - registerCommandReceiver(queueEditor); - mediaSession.setFlags(queueEditor == null ? BASE_MEDIA_SESSION_FLAGS - : EDITOR_MEDIA_SESSION_FLAGS); + if (this.queueEditor != queueEditor) { + unregisterCommandReceiver(this.queueEditor); + this.queueEditor = queueEditor; + registerCommandReceiver(queueEditor); + mediaSession.setFlags( + queueEditor == null ? BASE_MEDIA_SESSION_FLAGS : EDITOR_MEDIA_SESSION_FLAGS); + } } /** @@ -477,9 +483,11 @@ public final class MediaSessionConnector { * @param ratingCallback The rating callback. */ public void setRatingCallback(RatingCallback ratingCallback) { - unregisterCommandReceiver(this.ratingCallback); - this.ratingCallback = ratingCallback; - registerCommandReceiver(this.ratingCallback); + if (this.ratingCallback != ratingCallback) { + unregisterCommandReceiver(this.ratingCallback); + this.ratingCallback = ratingCallback; + registerCommandReceiver(this.ratingCallback); + } } private void registerCommandReceiver(CommandReceiver commandReceiver) { @@ -516,16 +524,16 @@ public final class MediaSessionConnector { } customActionMap = Collections.unmodifiableMap(currentActions); - int sessionPlaybackState = playbackException != null ? PlaybackStateCompat.STATE_ERROR - : mapPlaybackState(player.getPlaybackState(), player.getPlayWhenReady()); - if (playbackException != null) { - if (errorMessageProvider != null) { - Pair message = errorMessageProvider.getErrorMessage(playbackException); - builder.setErrorMessage(message.first, message.second); - } - if (player.getPlaybackState() != Player.STATE_IDLE) { - playbackException = null; - } + int playbackState = player.getPlaybackState(); + ExoPlaybackException playbackError = + playbackState == Player.STATE_IDLE ? player.getPlaybackError() : null; + int sessionPlaybackState = + playbackError != null + ? PlaybackStateCompat.STATE_ERROR + : mapPlaybackState(player.getPlaybackState(), player.getPlayWhenReady()); + if (playbackError != null && errorMessageProvider != null) { + Pair message = errorMessageProvider.getErrorMessage(playbackError); + builder.setErrorMessage(message.first, message.second); } long activeQueueItemId = queueNavigator != null ? queueNavigator.getActiveQueueItemId(player) : MediaSessionCompat.QueueItem.UNKNOWN_ID; @@ -701,12 +709,6 @@ public final class MediaSessionConnector { updateMediaSessionPlaybackState(); } - @Override - public void onPlayerError(ExoPlaybackException error) { - playbackException = error; - updateMediaSessionPlaybackState(); - } - @Override public void onPositionDiscontinuity(@Player.DiscontinuityReason int reason) { if (currentWindowIndex != player.getCurrentWindowIndex()) { 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 48f0e5dd29..328816d709 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 @@ -468,7 +468,7 @@ public interface Player { * @return The error, or {@code null}. */ @Nullable - Exception getPlaybackError(); + ExoPlaybackException getPlaybackError(); /** * Sets whether playback should proceed when {@link #getPlaybackState()} == {@link #STATE_READY}.