Move @AudioFocusGain from C to AudioFocusManager and make it private
This is only used inside AudioFocusManager, it doesn't need to public. Also mark it TYPE_USE and update the position to match. #minor-release PiperOrigin-RevId: 426407790
This commit is contained in:
parent
15d50d0bf0
commit
a506d245d1
@ -471,34 +471,6 @@ public final class C {
|
|||||||
/** See {@link android.media.AudioAttributes#ALLOW_CAPTURE_BY_SYSTEM}. */
|
/** See {@link android.media.AudioAttributes#ALLOW_CAPTURE_BY_SYSTEM}. */
|
||||||
public static final int ALLOW_CAPTURE_BY_SYSTEM = AudioAttributes.ALLOW_CAPTURE_BY_SYSTEM;
|
public static final int ALLOW_CAPTURE_BY_SYSTEM = AudioAttributes.ALLOW_CAPTURE_BY_SYSTEM;
|
||||||
|
|
||||||
/**
|
|
||||||
* Audio focus types. One of {@link #AUDIOFOCUS_NONE}, {@link #AUDIOFOCUS_GAIN}, {@link
|
|
||||||
* #AUDIOFOCUS_GAIN_TRANSIENT}, {@link #AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK} or {@link
|
|
||||||
* #AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE}.
|
|
||||||
*/
|
|
||||||
@Documented
|
|
||||||
@Retention(RetentionPolicy.SOURCE)
|
|
||||||
@IntDef({
|
|
||||||
AUDIOFOCUS_NONE,
|
|
||||||
AUDIOFOCUS_GAIN,
|
|
||||||
AUDIOFOCUS_GAIN_TRANSIENT,
|
|
||||||
AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK,
|
|
||||||
AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE
|
|
||||||
})
|
|
||||||
public @interface AudioFocusGain {}
|
|
||||||
/** @see AudioManager#AUDIOFOCUS_NONE */
|
|
||||||
public static final int AUDIOFOCUS_NONE = AudioManager.AUDIOFOCUS_NONE;
|
|
||||||
/** @see AudioManager#AUDIOFOCUS_GAIN */
|
|
||||||
public static final int AUDIOFOCUS_GAIN = AudioManager.AUDIOFOCUS_GAIN;
|
|
||||||
/** @see AudioManager#AUDIOFOCUS_GAIN_TRANSIENT */
|
|
||||||
public static final int AUDIOFOCUS_GAIN_TRANSIENT = AudioManager.AUDIOFOCUS_GAIN_TRANSIENT;
|
|
||||||
/** @see AudioManager#AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK */
|
|
||||||
public static final int AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK =
|
|
||||||
AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK;
|
|
||||||
/** @see AudioManager#AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE */
|
|
||||||
public static final int AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE =
|
|
||||||
AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Flags which can apply to a buffer containing a media sample. Possible flag values are {@link
|
* Flags which can apply to a buffer containing a media sample. Possible flag values are {@link
|
||||||
* #BUFFER_FLAG_KEY_FRAME}, {@link #BUFFER_FLAG_END_OF_STREAM}, {@link #BUFFER_FLAG_LAST_SAMPLE},
|
* #BUFFER_FLAG_KEY_FRAME}, {@link #BUFFER_FLAG_END_OF_STREAM}, {@link #BUFFER_FLAG_LAST_SAMPLE},
|
||||||
|
@ -95,6 +95,37 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
|||||||
/** Audio focus has been temporarily lost, but playback may continue with reduced volume. */
|
/** Audio focus has been temporarily lost, but playback may continue with reduced volume. */
|
||||||
private static final int AUDIO_FOCUS_STATE_LOSS_TRANSIENT_DUCK = 3;
|
private static final int AUDIO_FOCUS_STATE_LOSS_TRANSIENT_DUCK = 3;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Audio focus types. One of {@link #AUDIOFOCUS_NONE}, {@link #AUDIOFOCUS_GAIN}, {@link
|
||||||
|
* #AUDIOFOCUS_GAIN_TRANSIENT}, {@link #AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK} or {@link
|
||||||
|
* #AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE}.
|
||||||
|
*/
|
||||||
|
@Documented
|
||||||
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
|
@Target(TYPE_USE)
|
||||||
|
@IntDef({
|
||||||
|
AUDIOFOCUS_NONE,
|
||||||
|
AUDIOFOCUS_GAIN,
|
||||||
|
AUDIOFOCUS_GAIN_TRANSIENT,
|
||||||
|
AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK,
|
||||||
|
AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE
|
||||||
|
})
|
||||||
|
private @interface AudioFocusGain {}
|
||||||
|
/** @see AudioManager#AUDIOFOCUS_NONE */
|
||||||
|
@SuppressWarnings("InlinedApi")
|
||||||
|
private static final int AUDIOFOCUS_NONE = AudioManager.AUDIOFOCUS_NONE;
|
||||||
|
/** @see AudioManager#AUDIOFOCUS_GAIN */
|
||||||
|
private static final int AUDIOFOCUS_GAIN = AudioManager.AUDIOFOCUS_GAIN;
|
||||||
|
/** @see AudioManager#AUDIOFOCUS_GAIN_TRANSIENT */
|
||||||
|
private static final int AUDIOFOCUS_GAIN_TRANSIENT = AudioManager.AUDIOFOCUS_GAIN_TRANSIENT;
|
||||||
|
/** @see AudioManager#AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK */
|
||||||
|
private static final int AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK =
|
||||||
|
AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK;
|
||||||
|
/** @see AudioManager#AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE */
|
||||||
|
@SuppressWarnings("InlinedApi")
|
||||||
|
private static final int AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE =
|
||||||
|
AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE;
|
||||||
|
|
||||||
private static final String TAG = "AudioFocusManager";
|
private static final String TAG = "AudioFocusManager";
|
||||||
|
|
||||||
private static final float VOLUME_MULTIPLIER_DUCK = 0.2f;
|
private static final float VOLUME_MULTIPLIER_DUCK = 0.2f;
|
||||||
@ -106,7 +137,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
|||||||
@Nullable private AudioAttributes audioAttributes;
|
@Nullable private AudioAttributes audioAttributes;
|
||||||
|
|
||||||
@AudioFocusState private int audioFocusState;
|
@AudioFocusState private int audioFocusState;
|
||||||
@C.AudioFocusGain private 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;
|
||||||
@ -147,7 +178,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
|||||||
this.audioAttributes = audioAttributes;
|
this.audioAttributes = audioAttributes;
|
||||||
focusGainToRequest = convertAudioAttributesToFocusGain(audioAttributes);
|
focusGainToRequest = convertAudioAttributesToFocusGain(audioAttributes);
|
||||||
Assertions.checkArgument(
|
Assertions.checkArgument(
|
||||||
focusGainToRequest == C.AUDIOFOCUS_GAIN || focusGainToRequest == C.AUDIOFOCUS_NONE,
|
focusGainToRequest == AUDIOFOCUS_GAIN || focusGainToRequest == AUDIOFOCUS_NONE,
|
||||||
"Automatic handling of audio focus is only available for USAGE_MEDIA and USAGE_GAME.");
|
"Automatic handling of audio focus is only available for USAGE_MEDIA and USAGE_GAME.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -185,7 +216,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
|||||||
}
|
}
|
||||||
|
|
||||||
private boolean shouldAbandonAudioFocusIfHeld(@Player.State int playbackState) {
|
private boolean shouldAbandonAudioFocusIfHeld(@Player.State int playbackState) {
|
||||||
return playbackState == Player.STATE_IDLE || focusGainToRequest != C.AUDIOFOCUS_GAIN;
|
return playbackState == Player.STATE_IDLE || focusGainToRequest != AUDIOFOCUS_GAIN;
|
||||||
}
|
}
|
||||||
|
|
||||||
@PlayerCommand
|
@PlayerCommand
|
||||||
@ -266,12 +297,12 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
|||||||
* @param audioAttributes The audio attributes associated with this focus request.
|
* @param audioAttributes The audio attributes associated with this focus request.
|
||||||
* @return The type of audio focus gain that should be requested.
|
* @return The type of audio focus gain that should be requested.
|
||||||
*/
|
*/
|
||||||
@C.AudioFocusGain
|
private static @AudioFocusGain int convertAudioAttributesToFocusGain(
|
||||||
private static int convertAudioAttributesToFocusGain(@Nullable AudioAttributes audioAttributes) {
|
@Nullable AudioAttributes audioAttributes) {
|
||||||
if (audioAttributes == null) {
|
if (audioAttributes == null) {
|
||||||
// Don't handle audio focus. It may be either video only contents or developers
|
// Don't handle audio focus. It may be either video only contents or developers
|
||||||
// want to have more finer grained control. (e.g. adding audio focus listener)
|
// want to have more finer grained control. (e.g. adding audio focus listener)
|
||||||
return C.AUDIOFOCUS_NONE;
|
return AUDIOFOCUS_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (audioAttributes.usage) {
|
switch (audioAttributes.usage) {
|
||||||
@ -279,13 +310,13 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
|||||||
// during the phone call when AUDIOFOCUS_GAIN_TRANSIENT is requested for that.
|
// during the phone call when AUDIOFOCUS_GAIN_TRANSIENT is requested for that.
|
||||||
// Don't request audio focus here.
|
// Don't request audio focus here.
|
||||||
case C.USAGE_VOICE_COMMUNICATION_SIGNALLING:
|
case C.USAGE_VOICE_COMMUNICATION_SIGNALLING:
|
||||||
return C.AUDIOFOCUS_NONE;
|
return AUDIOFOCUS_NONE;
|
||||||
|
|
||||||
// Javadoc says 'AUDIOFOCUS_GAIN: Examples of uses of this focus gain are for music
|
// Javadoc says 'AUDIOFOCUS_GAIN: Examples of uses of this focus gain are for music
|
||||||
// playback, for a game or a video player'
|
// playback, for a game or a video player'
|
||||||
case C.USAGE_GAME:
|
case C.USAGE_GAME:
|
||||||
case C.USAGE_MEDIA:
|
case C.USAGE_MEDIA:
|
||||||
return C.AUDIOFOCUS_GAIN;
|
return AUDIOFOCUS_GAIN;
|
||||||
|
|
||||||
// Special usages: USAGE_UNKNOWN shouldn't be used. Request audio focus to prevent
|
// Special usages: USAGE_UNKNOWN shouldn't be used. Request audio focus to prevent
|
||||||
// multiple media playback happen at the same time.
|
// multiple media playback happen at the same time.
|
||||||
@ -294,13 +325,13 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
|||||||
TAG,
|
TAG,
|
||||||
"Specify a proper usage in the audio attributes for audio focus"
|
"Specify a proper usage in the audio attributes for audio focus"
|
||||||
+ " handling. Using AUDIOFOCUS_GAIN by default.");
|
+ " handling. Using AUDIOFOCUS_GAIN by default.");
|
||||||
return C.AUDIOFOCUS_GAIN;
|
return AUDIOFOCUS_GAIN;
|
||||||
|
|
||||||
// Javadoc says 'AUDIOFOCUS_GAIN_TRANSIENT: An example is for playing an alarm, or
|
// Javadoc says 'AUDIOFOCUS_GAIN_TRANSIENT: An example is for playing an alarm, or
|
||||||
// during a VoIP call'
|
// during a VoIP call'
|
||||||
case C.USAGE_ALARM:
|
case C.USAGE_ALARM:
|
||||||
case C.USAGE_VOICE_COMMUNICATION:
|
case C.USAGE_VOICE_COMMUNICATION:
|
||||||
return C.AUDIOFOCUS_GAIN_TRANSIENT;
|
return AUDIOFOCUS_GAIN_TRANSIENT;
|
||||||
|
|
||||||
// Javadoc says 'AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK: Examples are when playing
|
// Javadoc says 'AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK: Examples are when playing
|
||||||
// driving directions or notifications'
|
// driving directions or notifications'
|
||||||
@ -312,28 +343,28 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
|||||||
case C.USAGE_NOTIFICATION_COMMUNICATION_REQUEST:
|
case C.USAGE_NOTIFICATION_COMMUNICATION_REQUEST:
|
||||||
case C.USAGE_NOTIFICATION_EVENT:
|
case C.USAGE_NOTIFICATION_EVENT:
|
||||||
case C.USAGE_NOTIFICATION_RINGTONE:
|
case C.USAGE_NOTIFICATION_RINGTONE:
|
||||||
return C.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK;
|
return AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK;
|
||||||
|
|
||||||
// Javadoc says 'AUDIOFOCUS_GAIN_EXCLUSIVE: This is typically used if you are doing
|
// Javadoc says 'AUDIOFOCUS_GAIN_EXCLUSIVE: This is typically used if you are doing
|
||||||
// audio recording or speech recognition'.
|
// audio recording or speech recognition'.
|
||||||
// Assistant is considered as both recording and notifying developer
|
// Assistant is considered as both recording and notifying developer
|
||||||
case C.USAGE_ASSISTANT:
|
case C.USAGE_ASSISTANT:
|
||||||
if (Util.SDK_INT >= 19) {
|
if (Util.SDK_INT >= 19) {
|
||||||
return C.AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE;
|
return AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE;
|
||||||
} else {
|
} else {
|
||||||
return C.AUDIOFOCUS_GAIN_TRANSIENT;
|
return AUDIOFOCUS_GAIN_TRANSIENT;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Special usages:
|
// Special usages:
|
||||||
case C.USAGE_ASSISTANCE_ACCESSIBILITY:
|
case C.USAGE_ASSISTANCE_ACCESSIBILITY:
|
||||||
if (audioAttributes.contentType == C.CONTENT_TYPE_SPEECH) {
|
if (audioAttributes.contentType == C.CONTENT_TYPE_SPEECH) {
|
||||||
// Voice shouldn't be interrupted by other playback.
|
// Voice shouldn't be interrupted by other playback.
|
||||||
return C.AUDIOFOCUS_GAIN_TRANSIENT;
|
return AUDIOFOCUS_GAIN_TRANSIENT;
|
||||||
}
|
}
|
||||||
return C.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK;
|
return AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK;
|
||||||
default:
|
default:
|
||||||
Log.w(TAG, "Unidentified audio usage: " + audioAttributes.usage);
|
Log.w(TAG, "Unidentified audio usage: " + audioAttributes.usage);
|
||||||
return C.AUDIOFOCUS_NONE;
|
return AUDIOFOCUS_NONE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user