diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayerImpl.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayerImpl.java index 817bb93d43..bbaa2d85cc 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayerImpl.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayerImpl.java @@ -757,29 +757,6 @@ import java.util.concurrent.TimeoutException; playWhenReady, playerCommand, getPlayWhenReadyChangeReason(playWhenReady, playerCommand)); } - public void setPlayWhenReady( - boolean playWhenReady, - @PlaybackSuppressionReason int playbackSuppressionReason, - @PlayWhenReadyChangeReason int playWhenReadyChangeReason) { - if (playbackInfo.playWhenReady == playWhenReady - && playbackInfo.playbackSuppressionReason == playbackSuppressionReason) { - return; - } - pendingOperationAcks++; - PlaybackInfo playbackInfo = - this.playbackInfo.copyWithPlayWhenReady(playWhenReady, playbackSuppressionReason); - internalPlayer.setPlayWhenReady(playWhenReady, playbackSuppressionReason); - updatePlaybackInfo( - playbackInfo, - /* ignored */ TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED, - playWhenReadyChangeReason, - /* seekProcessed= */ false, - /* positionDiscontinuity= */ false, - /* ignored */ DISCONTINUITY_REASON_INTERNAL, - /* ignored */ C.TIME_UNSET, - /* ignored */ C.INDEX_UNSET); - } - public boolean getPlayWhenReady() { verifyApplicationThread(); return playbackInfo.playWhenReady; @@ -1201,7 +1178,7 @@ import java.util.concurrent.TimeoutException; return; } trackSelector.setParameters(parameters); - listeners.queueEvent( + listeners.sendEvent( EVENT_TRACK_SELECTION_PARAMETERS_CHANGED, listener -> listener.onTrackSelectionParametersChanged(parameters)); } @@ -1211,20 +1188,6 @@ import java.util.concurrent.TimeoutException; return mediaMetadata; } - private void onMetadata(Metadata metadata) { - staticAndDynamicMediaMetadata = - staticAndDynamicMediaMetadata.buildUpon().populateFromMetadata(metadata).build(); - - MediaMetadata newMediaMetadata = buildUpdatedMediaMetadata(); - - if (newMediaMetadata.equals(mediaMetadata)) { - return; - } - mediaMetadata = newMediaMetadata; - listeners.sendEvent( - EVENT_MEDIA_METADATA_CHANGED, listener -> listener.onMediaMetadataChanged(mediaMetadata)); - } - public MediaMetadata getPlaylistMetadata() { verifyApplicationThread(); return playlistMetadata; @@ -2371,7 +2334,7 @@ import java.util.concurrent.TimeoutException; * *
{@link MediaItem} {@link MediaMetadata} is prioritized, with any gaps/missing fields * populated by metadata from static ({@link TrackGroup} {@link Format}) and dynamic ({@link - * #onMetadata(Metadata)}) sources. + * MetadataOutput#onMetadata(Metadata)}) sources. */ private MediaMetadata buildUpdatedMediaMetadata() { Timeline timeline = getCurrentTimeline(); @@ -2511,7 +2474,23 @@ import java.util.concurrent.TimeoutException; playWhenReady && playerCommand != AudioFocusManager.PLAYER_COMMAND_PLAY_WHEN_READY ? Player.PLAYBACK_SUPPRESSION_REASON_TRANSIENT_AUDIO_FOCUS_LOSS : Player.PLAYBACK_SUPPRESSION_REASON_NONE; - setPlayWhenReady(playWhenReady, playbackSuppressionReason, playWhenReadyChangeReason); + if (playbackInfo.playWhenReady == playWhenReady + && playbackInfo.playbackSuppressionReason == playbackSuppressionReason) { + return; + } + pendingOperationAcks++; + PlaybackInfo playbackInfo = + this.playbackInfo.copyWithPlayWhenReady(playWhenReady, playbackSuppressionReason); + internalPlayer.setPlayWhenReady(playWhenReady, playbackSuppressionReason); + updatePlaybackInfo( + playbackInfo, + /* ignored */ TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED, + playWhenReadyChangeReason, + /* seekProcessed= */ false, + /* positionDiscontinuity= */ false, + /* ignored */ DISCONTINUITY_REASON_INTERNAL, + /* ignored */ C.TIME_UNSET, + /* ignored */ C.INDEX_UNSET); } private void updateWakeAndWifiLock() { @@ -2810,7 +2789,15 @@ import java.util.concurrent.TimeoutException; @Override public void onMetadata(Metadata metadata) { - ExoPlayerImpl.this.onMetadata(metadata); + staticAndDynamicMediaMetadata = + staticAndDynamicMediaMetadata.buildUpon().populateFromMetadata(metadata).build(); + MediaMetadata newMediaMetadata = buildUpdatedMediaMetadata(); + if (!newMediaMetadata.equals(mediaMetadata)) { + mediaMetadata = newMediaMetadata; + listeners.sendEvent( + EVENT_MEDIA_METADATA_CHANGED, + listener -> listener.onMediaMetadataChanged(mediaMetadata)); + } // TODO(internal b/187152483): Events should be dispatched via ListenerSet for (Listener listener : listenerArraySet) { listener.onMetadata(metadata);