From 403e9ed8eced534109ea3cb05a19a97ca69f5299 Mon Sep 17 00:00:00 2001 From: nift4 Date: Wed, 25 Mar 2026 17:53:25 +0100 Subject: [PATCH 1/3] Add failing tests --- .../media3/common/ForwardingSimpleBasePlayerTest.java | 2 ++ .../java/androidx/media3/common/SimpleBasePlayerTest.java | 4 ++++ 2 files changed, 6 insertions(+) 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 21a4f90f566..062e660ac47 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 13b8db7f09b..dff14a4a886 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, From 5da6bf167f96a6ae201624fbc23bcbabce243502 Mon Sep 17 00:00:00 2001 From: nift4 Date: Fri, 2 Jan 2026 14:07:04 +0100 Subject: [PATCH 2/3] Fixed bug where MediaController listener onAudioSessionIdChanged() was not called Issue: #3140 --- .../androidx/media3/common/ForwardingSimpleBasePlayer.java | 1 + .../main/java/androidx/media3/common/SimpleBasePlayer.java | 5 +++++ 2 files changed, 6 insertions(+) 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 f1e53879dc4..830846fcb63 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 29e01e36186..08f7a5a235f 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, From 0eb605b9a253f42539a0dfded0fd9b02649ee530 Mon Sep 17 00:00:00 2001 From: Ian Baker Date: Thu, 26 Mar 2026 14:21:25 +0000 Subject: [PATCH 3/3] Add a release note --- RELEASENOTES.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 086f4b4b4c2..8f1f3e1dd82 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