Fix voice recording being interrupted by notifications sounds (#6438)

This commit is contained in:
Gianluca Iavicoli
2026-03-24 13:53:42 +01:00
committed by GitHub
parent 0db95d9519
commit 5f0d026225

View File

@@ -39,19 +39,31 @@ class DefaultAudioFocus(
AudioManager.AUDIOFOCUS_GAIN -> { AudioManager.AUDIOFOCUS_GAIN -> {
// Do nothing // Do nothing
} }
AudioManager.AUDIOFOCUS_LOSS, AudioManager.AUDIOFOCUS_LOSS -> {
// Permanent focus loss (e.g., phone call) — always stop/pause.
onFocusLost()
}
AudioManager.AUDIOFOCUS_LOSS_TRANSIENT, AudioManager.AUDIOFOCUS_LOSS_TRANSIENT,
AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK -> { AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK -> {
// For recording, ignore transient focus losses (e.g., notification sounds).
// The AudioRecord API keeps capturing regardless.
if (requester != AudioFocusRequester.RecordVoiceMessage) {
onFocusLost() onFocusLost()
} }
} }
} }
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val audioAttributes = AudioAttributes.Builder() val audioAttributes = AudioAttributes.Builder()
.setUsage(requester.toAudioUsage()) .setUsage(requester.toAudioUsage())
.build() .build()
val request = AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN) val focusGain = if (requester == AudioFocusRequester.RecordVoiceMessage) {
AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE
} else {
AudioManager.AUDIOFOCUS_GAIN
}
val request = AudioFocusRequest.Builder(focusGain)
.setAudioAttributes(audioAttributes) .setAudioAttributes(audioAttributes)
.setOnAudioFocusChangeListener(listener) .setOnAudioFocusChangeListener(listener)
.setWillPauseWhenDucked(requester.willPausedWhenDucked()) .setWillPauseWhenDucked(requester.willPausedWhenDucked())