From 0a0444b9a536c8e95178ee316e5157f099440609 Mon Sep 17 00:00:00 2001 From: Colin Kho Date: Wed, 14 Aug 2024 10:35:29 -0700 Subject: [PATCH] Use Suppliers.memoize for lazy instantiation of AudioManager --- .../media3/exoplayer/AudioFocusManager.java | 25 ++++++++----------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/AudioFocusManager.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/AudioFocusManager.java index 29a98708ce..72c16f33a1 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/AudioFocusManager.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/AudioFocusManager.java @@ -32,6 +32,8 @@ import androidx.media3.common.Player; import androidx.media3.common.util.Assertions; import androidx.media3.common.util.Log; import androidx.media3.common.util.Util; +import com.google.common.base.Supplier; +import com.google.common.base.Suppliers; import java.lang.annotation.Documented; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -161,14 +163,12 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; private static final float VOLUME_MULTIPLIER_DEFAULT = 1.0f; private final AudioFocusListener focusListener; - private final Context applicationContext; + private final Supplier audioManager; @Nullable private PlayerControl playerControl; @Nullable private AudioAttributes audioAttributes; - @Nullable private AudioManager audioManager; private @AudioFocusState int audioFocusState; private @AudioFocusGain int focusGainToRequest; private float volumeMultiplier = VOLUME_MULTIPLIER_DEFAULT; - private @MonotonicNonNull AudioFocusRequest audioFocusRequest; private boolean rebuildAudioFocusRequest; @@ -180,7 +180,9 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; * @param playerControl A {@link PlayerControl} to handle commands from this instance. */ public AudioFocusManager(Context context, Handler eventHandler, PlayerControl playerControl) { - this.applicationContext = context; + this.audioManager = + Suppliers.memoize(() -> checkNotNull( + (AudioManager) context.getApplicationContext().getSystemService(Context.AUDIO_SERVICE))); this.playerControl = playerControl; this.focusListener = new AudioFocusListener(eventHandler); this.audioFocusState = AUDIO_FOCUS_STATE_NOT_REQUESTED; @@ -285,7 +287,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; } private int requestAudioFocusDefault() { - return getAudioManager().requestAudioFocus( + return audioManager.get().requestAudioFocus( focusListener, Util.getStreamTypeForAudioUsage(checkNotNull(audioAttributes).usage), focusGainToRequest); @@ -310,17 +312,17 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; rebuildAudioFocusRequest = false; } - return getAudioManager().requestAudioFocus(audioFocusRequest); + return audioManager.get().requestAudioFocus(audioFocusRequest); } private void abandonAudioFocusDefault() { - getAudioManager().abandonAudioFocus(focusListener); + audioManager.get().abandonAudioFocus(focusListener); } @RequiresApi(26) private void abandonAudioFocusV26() { if (audioFocusRequest != null) { - getAudioManager().abandonAudioFocusRequest(audioFocusRequest); + audioManager.get().abandonAudioFocusRequest(audioFocusRequest); } } @@ -453,13 +455,6 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; } } - private AudioManager getAudioManager() { - if (audioManager == null) { - audioManager = (AudioManager) applicationContext.getSystemService(Context.AUDIO_SERVICE); - } - return audioManager; - } - // Internal audio focus listener. private class AudioFocusListener implements AudioManager.OnAudioFocusChangeListener {