Merge pull request #1616 from colinkho:chmain
PiperOrigin-RevId: 665779059
This commit is contained in:
commit
1bb48b1c47
@ -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`.
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user