Skip to content

Commit 73c8dcd

Browse files
committed
Add routing changed listener on API 23 too
It already existed since M, it just had a different interface with a different signature.
1 parent 0b20baa commit 73c8dcd

File tree

1 file changed

+28
-14
lines changed

1 file changed

+28
-14
lines changed

libraries/exoplayer/src/main/java/androidx/media3/exoplayer/audio/AudioTrackAudioOutput.java

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)