diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 086f4b4b4c..8f1f3e1dd8 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -6,6 +6,8 @@ * Add `Format.channelMask` to explicitly represent the audio channel mask, and a new `Util.getAudioTrackChannelConfig(Format)` overload to safely resolve it. + * Fix handling of `onAudioSessionIdChanged` in `SimpleBasePlayer` and + `ForwardingSimpleBasePlayer`. * ExoPlayer: * Mark tracks with a well-formed but unrecognized codec profile or level as `supported=NO_EXCEEDS_CAPABILITIES` instead of `supported=YES` (which diff --git a/libraries/common/src/main/java/androidx/media3/common/ForwardingSimpleBasePlayer.java b/libraries/common/src/main/java/androidx/media3/common/ForwardingSimpleBasePlayer.java index f1e53879dc..830846fcb6 100644 --- a/libraries/common/src/main/java/androidx/media3/common/ForwardingSimpleBasePlayer.java +++ b/libraries/common/src/main/java/androidx/media3/common/ForwardingSimpleBasePlayer.java @@ -123,6 +123,7 @@ protected State getState() { if (player.isCommandAvailable(Player.COMMAND_GET_AUDIO_ATTRIBUTES)) { state.setAudioAttributes(player.getAudioAttributes()); } + state.setAudioSessionId(player.getAudioSessionId()); state.setAvailableCommands(player.getAvailableCommands()); if (player.isCommandAvailable(Player.COMMAND_GET_CURRENT_MEDIA_ITEM)) { state.setContentBufferedPositionMs(positionSuppliers.contentBufferedPositionSupplier); diff --git a/libraries/common/src/main/java/androidx/media3/common/SimpleBasePlayer.java b/libraries/common/src/main/java/androidx/media3/common/SimpleBasePlayer.java index 29e01e3618..08f7a5a235 100644 --- a/libraries/common/src/main/java/androidx/media3/common/SimpleBasePlayer.java +++ b/libraries/common/src/main/java/androidx/media3/common/SimpleBasePlayer.java @@ -3840,6 +3840,11 @@ private void updateStateAndInformListeners( Player.EVENT_AUDIO_ATTRIBUTES_CHANGED, listener -> listener.onAudioAttributesChanged(newState.audioAttributes)); } + if (previousState.audioSessionId != newState.audioSessionId) { + listeners.queueEvent( + Player.EVENT_AUDIO_SESSION_ID, + listener -> listener.onAudioSessionIdChanged(newState.audioSessionId)); + } if (!previousState.videoSize.equals(newState.videoSize)) { listeners.queueEvent( Player.EVENT_VIDEO_SIZE_CHANGED, diff --git a/libraries/common/src/test/java/androidx/media3/common/ForwardingSimpleBasePlayerTest.java b/libraries/common/src/test/java/androidx/media3/common/ForwardingSimpleBasePlayerTest.java index 21a4f90f56..062e660ac4 100644 --- a/libraries/common/src/test/java/androidx/media3/common/ForwardingSimpleBasePlayerTest.java +++ b/libraries/common/src/test/java/androidx/media3/common/ForwardingSimpleBasePlayerTest.java @@ -171,6 +171,7 @@ public void getterMethods_noOtherMethodCalls_returnCurrentStateFromWrappedPlayer .setPlaybackParameters(playbackParameters) .setTrackSelectionParameters(trackSelectionParameters) .setAudioAttributes(audioAttributes) + .setAudioSessionId(1234) .setVolume(0.5f) .setVideoSize(videoSize) .setCurrentCues(cueGroup) @@ -225,6 +226,7 @@ protected State getState() { assertThat(forwardingPlayer.getContentPosition()).isEqualTo(456); assertThat(forwardingPlayer.getContentBufferedPosition()).isEqualTo(499); assertThat(forwardingPlayer.getAudioAttributes()).isEqualTo(audioAttributes); + assertThat(forwardingPlayer.getAudioSessionId()).isEqualTo(1234); assertThat(forwardingPlayer.getVolume()).isEqualTo(0.5f); assertThat(forwardingPlayer.getVideoSize()).isEqualTo(videoSize); assertThat(forwardingPlayer.getCurrentCues()).isEqualTo(cueGroup); diff --git a/libraries/common/src/test/java/androidx/media3/common/SimpleBasePlayerTest.java b/libraries/common/src/test/java/androidx/media3/common/SimpleBasePlayerTest.java index 13b8db7f09..dff14a4a88 100644 --- a/libraries/common/src/test/java/androidx/media3/common/SimpleBasePlayerTest.java +++ b/libraries/common/src/test/java/androidx/media3/common/SimpleBasePlayerTest.java @@ -1439,6 +1439,7 @@ public void invalidateState_updatesStateAndInformsListeners() throws Exception { .setPlaybackParameters(PlaybackParameters.DEFAULT) .setTrackSelectionParameters(TrackSelectionParameters.DEFAULT) .setAudioAttributes(AudioAttributes.DEFAULT) + .setAudioSessionId(1234) .setVolume(1f) .setVideoSize(VideoSize.UNKNOWN) .setCurrentCues(CueGroup.EMPTY_TIME_ZERO) @@ -1509,6 +1510,7 @@ public void invalidateState_updatesStateAndInformsListeners() throws Exception { .setPlaybackParameters(playbackParameters) .setTrackSelectionParameters(trackSelectionParameters) .setAudioAttributes(audioAttributes) + .setAudioSessionId(5678) .setVolume(0.5f) .setVideoSize(videoSize) .setCurrentCues(cueGroup) @@ -1569,6 +1571,7 @@ protected State getState() { verify(listener).onPlaybackParametersChanged(playbackParameters); verify(listener).onTrackSelectionParametersChanged(trackSelectionParameters); verify(listener).onAudioAttributesChanged(audioAttributes); + verify(listener).onAudioSessionIdChanged(5678); verify(listener).onVolumeChanged(0.5f); verify(listener).onVideoSizeChanged(videoSize); verify(listener).onCues(cueGroup.cues); @@ -1635,6 +1638,7 @@ protected State getState() { Player.EVENT_MAX_SEEK_TO_PREVIOUS_POSITION_CHANGED, Player.EVENT_TRACK_SELECTION_PARAMETERS_CHANGED, Player.EVENT_AUDIO_ATTRIBUTES_CHANGED, + Player.EVENT_AUDIO_SESSION_ID, Player.EVENT_VOLUME_CHANGED, Player.EVENT_SURFACE_SIZE_CHANGED, Player.EVENT_VIDEO_SIZE_CHANGED,