@@ -86,7 +86,7 @@ public final class AudioTrackAudioOutput implements AudioOutput {
8686 private final AudioTrack audioTrack ;
8787 private final OutputConfig config ;
8888 @ Nullable private final CapabilityChangeListener capabilityChangeListener ;
89- @ Nullable private OnRoutingChangedListenerApi24 onRoutingChangedListener ;
89+ @ Nullable private OnRoutingChangedListener onRoutingChangedListener ;
9090 private final AudioTrackPositionTracker audioTrackPositionTracker ;
9191 private final boolean isOutputPcm ;
9292 private final int pcmFrameSize ;
@@ -142,9 +142,8 @@ public AudioTrackAudioOutput(
142142 pcmFrameSize ,
143143 config .bufferSize );
144144
145- if (SDK_INT >= 24 && capabilityChangeListener != null ) {
146- onRoutingChangedListener =
147- new OnRoutingChangedListenerApi24 (audioTrack , capabilityChangeListener );
145+ if (capabilityChangeListener != null ) {
146+ onRoutingChangedListener = new OnRoutingChangedListener (audioTrack , capabilityChangeListener );
148147 }
149148 offloadStreamEventCallbackV29 = isOffloadedPlayback () ? new StreamEventCallbackV29 () : null ;
150149 }
@@ -288,7 +287,7 @@ public void release() {
288287 if (SDK_INT >= 29 && isOffloadedPlayback ()) {
289288 checkNotNull (offloadStreamEventCallbackV29 ).unregister ();
290289 }
291- if (SDK_INT >= 24 && onRoutingChangedListener != null ) {
290+ if (onRoutingChangedListener != null ) {
292291 onRoutingChangedListener .release ();
293292 onRoutingChangedListener = null ;
294293 }
@@ -566,31 +565,46 @@ private InvalidAudioTrackTimestampException(String message) {
566565 }
567566 }
568567
569- @ RequiresApi (24 )
570- private static final class OnRoutingChangedListenerApi24 {
568+ private static final class OnRoutingChangedListener {
571569
572570 private final AudioTrack audioTrack ;
573571 private final CapabilityChangeListener capabilityChangeListener ;
574572 private final Handler playbackThreadHandler ;
575573
574+ @ Nullable private AudioTrack .OnRoutingChangedListener listenerApi23 ;
576575 @ Nullable private AudioRouting .OnRoutingChangedListener listener ;
577576
578- private OnRoutingChangedListenerApi24 (
577+ private OnRoutingChangedListener (
579578 AudioTrack audioTrack , CapabilityChangeListener capabilityChangeListener ) {
580579 this .audioTrack = audioTrack ;
581580 this .capabilityChangeListener = capabilityChangeListener ;
582581 this .playbackThreadHandler = Util .createHandlerForCurrentLooper ();
583- this .listener = this ::onRoutingChanged ;
584- audioTrack .addOnRoutingChangedListener (listener , playbackThreadHandler );
582+ if (SDK_INT >= 24 ) {
583+ this .listener = this ::onRoutingChanged ;
584+ audioTrack .addOnRoutingChangedListener (listener , playbackThreadHandler );
585+ } else {
586+ this .listenerApi23 = this ::onRoutingChanged ;
587+ audioTrack .addOnRoutingChangedListener (listenerApi23 , playbackThreadHandler );
588+ }
585589 }
586590
587591 private void release () {
588- audioTrack .removeOnRoutingChangedListener (checkNotNull (listener ));
589- listener = null ;
592+ if (SDK_INT >= 24 ) {
593+ audioTrack .removeOnRoutingChangedListener (checkNotNull (listener ));
594+ listener = null ;
595+ } else {
596+ audioTrack .removeOnRoutingChangedListener (checkNotNull (listenerApi23 ));
597+ listenerApi23 = null ;
598+ }
590599 }
591600
601+ @ RequiresApi (24 )
592602 private void onRoutingChanged (AudioRouting router ) {
593- if (listener == null ) {
603+ onRoutingChanged ((AudioTrack ) router );
604+ }
605+
606+ private void onRoutingChanged (AudioTrack router ) {
607+ if (listener == null && listenerApi23 == null ) {
594608 // Stale event.
595609 return ;
596610 }
@@ -601,7 +615,7 @@ private void onRoutingChanged(AudioRouting router) {
601615 if (routedDevice != null ) {
602616 playbackThreadHandler .post (
603617 () -> {
604- if (listener == null ) {
618+ if (listener == null && listenerApi23 == null ) {
605619 // Stale event.
606620 return ;
607621 }
0 commit comments