Skip to content

Commit 1bb48b1

Browse files
Merge pull request #1616 from colinkho:chmain
PiperOrigin-RevId: 665779059
2 parents 51622b6 + bed1dad commit 1bb48b1

File tree

2 files changed

+22
-11
lines changed

2 files changed

+22
-11
lines changed

RELEASENOTES.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,11 @@
3434
API 35+ (where the device advertises support for this).
3535
* Handle preload callbacks asynchronously in `PreloadMediaSource`
3636
([#1568](https://github.com/androidx/media/issues/1568)).
37+
* Defer the blocking call to
38+
`Context.getSystemService(Context.AUDIO_SERVICE)` until audio focus
39+
handling is enabled. This ensures the blocking call isn't done if audio
40+
focus handling is not enabled
41+
([#1616](https://github.com/androidx/media/pull/1616)).
3742
* Transformer:
3843
* Add `SurfaceAssetLoader`, which supports queueing video data to
3944
Transformer via a `Surface`.

libraries/exoplayer/src/main/java/androidx/media3/exoplayer/AudioFocusManager.java

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@
3232
import androidx.media3.common.util.Assertions;
3333
import androidx.media3.common.util.Log;
3434
import androidx.media3.common.util.Util;
35+
import com.google.common.base.Supplier;
36+
import com.google.common.base.Suppliers;
3537
import java.lang.annotation.Documented;
3638
import java.lang.annotation.Retention;
3739
import java.lang.annotation.RetentionPolicy;
@@ -160,15 +162,14 @@ public interface PlayerControl {
160162
private static final float VOLUME_MULTIPLIER_DUCK = 0.2f;
161163
private static final float VOLUME_MULTIPLIER_DEFAULT = 1.0f;
162164

163-
private final AudioManager audioManager;
165+
private final Supplier<AudioManager> audioManager;
164166
private final AudioFocusListener focusListener;
165167
@Nullable private PlayerControl playerControl;
166168
@Nullable private AudioAttributes audioAttributes;
167169

168170
private @AudioFocusState int audioFocusState;
169171
private @AudioFocusGain int focusGainToRequest;
170172
private float volumeMultiplier = VOLUME_MULTIPLIER_DEFAULT;
171-
172173
private @MonotonicNonNull AudioFocusRequest audioFocusRequest;
173174
private boolean rebuildAudioFocusRequest;
174175

@@ -181,8 +182,11 @@ public interface PlayerControl {
181182
*/
182183
public AudioFocusManager(Context context, Handler eventHandler, PlayerControl playerControl) {
183184
this.audioManager =
184-
checkNotNull(
185-
(AudioManager) context.getApplicationContext().getSystemService(Context.AUDIO_SERVICE));
185+
Suppliers.memoize(
186+
() ->
187+
checkNotNull(
188+
(AudioManager)
189+
context.getApplicationContext().getSystemService(Context.AUDIO_SERVICE)));
186190
this.playerControl = playerControl;
187191
this.focusListener = new AudioFocusListener(eventHandler);
188192
this.audioFocusState = AUDIO_FOCUS_STATE_NOT_REQUESTED;
@@ -287,10 +291,12 @@ private void abandonAudioFocusIfHeld() {
287291
}
288292

289293
private int requestAudioFocusDefault() {
290-
return audioManager.requestAudioFocus(
291-
focusListener,
292-
Util.getStreamTypeForAudioUsage(checkNotNull(audioAttributes).usage),
293-
focusGainToRequest);
294+
return audioManager
295+
.get()
296+
.requestAudioFocus(
297+
focusListener,
298+
Util.getStreamTypeForAudioUsage(checkNotNull(audioAttributes).usage),
299+
focusGainToRequest);
294300
}
295301

296302
@RequiresApi(26)
@@ -312,17 +318,17 @@ private int requestAudioFocusV26() {
312318

313319
rebuildAudioFocusRequest = false;
314320
}
315-
return audioManager.requestAudioFocus(audioFocusRequest);
321+
return audioManager.get().requestAudioFocus(audioFocusRequest);
316322
}
317323

318324
private void abandonAudioFocusDefault() {
319-
audioManager.abandonAudioFocus(focusListener);
325+
audioManager.get().abandonAudioFocus(focusListener);
320326
}
321327

322328
@RequiresApi(26)
323329
private void abandonAudioFocusV26() {
324330
if (audioFocusRequest != null) {
325-
audioManager.abandonAudioFocusRequest(audioFocusRequest);
331+
audioManager.get().abandonAudioFocusRequest(audioFocusRequest);
326332
}
327333
}
328334

0 commit comments

Comments
 (0)