Merge pull request #1616 from colinkho:chmain

PiperOrigin-RevId: 665779059
This commit is contained in:
Copybara-Service 2024-08-21 02:32:16 -07:00
commit 1bb48b1c47
2 changed files with 22 additions and 11 deletions

View File

@ -34,6 +34,11 @@
API 35+ (where the device advertises support for this). API 35+ (where the device advertises support for this).
* Handle preload callbacks asynchronously in `PreloadMediaSource` * Handle preload callbacks asynchronously in `PreloadMediaSource`
([#1568](https://github.com/androidx/media/issues/1568)). ([#1568](https://github.com/androidx/media/issues/1568)).
* Defer the blocking call to
`Context.getSystemService(Context.AUDIO_SERVICE)` until audio focus
handling is enabled. This ensures the blocking call isn't done if audio
focus handling is not enabled
([#1616](https://github.com/androidx/media/pull/1616)).
* Transformer: * Transformer:
* Add `SurfaceAssetLoader`, which supports queueing video data to * Add `SurfaceAssetLoader`, which supports queueing video data to
Transformer via a `Surface`. Transformer via a `Surface`.

View File

@ -32,6 +32,8 @@ import androidx.media3.common.Player;
import androidx.media3.common.util.Assertions; import androidx.media3.common.util.Assertions;
import androidx.media3.common.util.Log; import androidx.media3.common.util.Log;
import androidx.media3.common.util.Util; 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.Documented;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy;
@ -160,7 +162,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
private static final float VOLUME_MULTIPLIER_DUCK = 0.2f; private static final float VOLUME_MULTIPLIER_DUCK = 0.2f;
private static final float VOLUME_MULTIPLIER_DEFAULT = 1.0f; private static final float VOLUME_MULTIPLIER_DEFAULT = 1.0f;
private final AudioManager audioManager; private final Supplier<AudioManager> audioManager;
private final AudioFocusListener focusListener; private final AudioFocusListener focusListener;
@Nullable private PlayerControl playerControl; @Nullable private PlayerControl playerControl;
@Nullable private AudioAttributes audioAttributes; @Nullable private AudioAttributes audioAttributes;
@ -168,7 +170,6 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
private @AudioFocusState int audioFocusState; private @AudioFocusState int audioFocusState;
private @AudioFocusGain int focusGainToRequest; private @AudioFocusGain int focusGainToRequest;
private float volumeMultiplier = VOLUME_MULTIPLIER_DEFAULT; private float volumeMultiplier = VOLUME_MULTIPLIER_DEFAULT;
private @MonotonicNonNull AudioFocusRequest audioFocusRequest; private @MonotonicNonNull AudioFocusRequest audioFocusRequest;
private boolean rebuildAudioFocusRequest; private boolean rebuildAudioFocusRequest;
@ -181,8 +182,11 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
*/ */
public AudioFocusManager(Context context, Handler eventHandler, PlayerControl playerControl) { public AudioFocusManager(Context context, Handler eventHandler, PlayerControl playerControl) {
this.audioManager = this.audioManager =
Suppliers.memoize(
() ->
checkNotNull( checkNotNull(
(AudioManager) context.getApplicationContext().getSystemService(Context.AUDIO_SERVICE)); (AudioManager)
context.getApplicationContext().getSystemService(Context.AUDIO_SERVICE)));
this.playerControl = playerControl; this.playerControl = playerControl;
this.focusListener = new AudioFocusListener(eventHandler); this.focusListener = new AudioFocusListener(eventHandler);
this.audioFocusState = AUDIO_FOCUS_STATE_NOT_REQUESTED; this.audioFocusState = AUDIO_FOCUS_STATE_NOT_REQUESTED;
@ -287,7 +291,9 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
} }
private int requestAudioFocusDefault() { private int requestAudioFocusDefault() {
return audioManager.requestAudioFocus( return audioManager
.get()
.requestAudioFocus(
focusListener, focusListener,
Util.getStreamTypeForAudioUsage(checkNotNull(audioAttributes).usage), Util.getStreamTypeForAudioUsage(checkNotNull(audioAttributes).usage),
focusGainToRequest); focusGainToRequest);
@ -312,17 +318,17 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
rebuildAudioFocusRequest = false; rebuildAudioFocusRequest = false;
} }
return audioManager.requestAudioFocus(audioFocusRequest); return audioManager.get().requestAudioFocus(audioFocusRequest);
} }
private void abandonAudioFocusDefault() { private void abandonAudioFocusDefault() {
audioManager.abandonAudioFocus(focusListener); audioManager.get().abandonAudioFocus(focusListener);
} }
@RequiresApi(26) @RequiresApi(26)
private void abandonAudioFocusV26() { private void abandonAudioFocusV26() {
if (audioFocusRequest != null) { if (audioFocusRequest != null) {
audioManager.abandonAudioFocusRequest(audioFocusRequest); audioManager.get().abandonAudioFocusRequest(audioFocusRequest);
} }
} }