Adjust incoming call audio initialization.

fork-5.53.8
Cody Henthorne 2022-02-17 10:58:42 -05:00 zatwierdzone przez Greyson Parrelli
rodzic ecc6a7b95e
commit 975ec47adf
5 zmienionych plików z 35 dodań i 14 usunięć

Wyświetl plik

@ -76,6 +76,7 @@ public class BeginCallActionProcessorDelegate extends WebRtcActionProcessor {
webRtcInteractor.setCallInProgressNotification(TYPE_INCOMING_CONNECTING, remotePeer); webRtcInteractor.setCallInProgressNotification(TYPE_INCOMING_CONNECTING, remotePeer);
webRtcInteractor.retrieveTurnServers(remotePeer); webRtcInteractor.retrieveTurnServers(remotePeer);
webRtcInteractor.initializeAudioForCall();
return currentState.builder() return currentState.builder()
.actionProcessor(new IncomingCallActionProcessor(webRtcInteractor)) .actionProcessor(new IncomingCallActionProcessor(webRtcInteractor))

Wyświetl plik

@ -146,7 +146,6 @@ public class IncomingCallActionProcessor extends DeviceAwareActionProcessor {
} }
} }
webRtcInteractor.initializeAudioForCall();
if (shouldDisturbUserWithCall && SignalStore.settings().isCallNotificationsEnabled()) { if (shouldDisturbUserWithCall && SignalStore.settings().isCallNotificationsEnabled()) {
Uri ringtone = recipient.resolve().getCallRingtone(); Uri ringtone = recipient.resolve().getCallRingtone();
RecipientDatabase.VibrateState vibrateState = recipient.resolve().getCallVibrate(); RecipientDatabase.VibrateState vibrateState = recipient.resolve().getCallVibrate();

Wyświetl plik

@ -23,10 +23,12 @@ public abstract class AudioManagerCompat {
private static final int AUDIOFOCUS_GAIN = AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE; private static final int AUDIOFOCUS_GAIN = AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE;
protected final AudioManager audioManager; protected final AudioManager audioManager;
protected boolean hasFocus;
@SuppressWarnings("CodeBlock2Expr") @SuppressWarnings("CodeBlock2Expr")
protected final AudioManager.OnAudioFocusChangeListener onAudioFocusChangeListener = focusChange -> { protected final AudioManager.OnAudioFocusChangeListener onAudioFocusChangeListener = focusChange -> {
Log.i(TAG, "onAudioFocusChangeListener: " + focusChange); Log.i(TAG, "onAudioFocusChangeListener: " + focusChange);
hasFocus = focusChange == AudioManager.AUDIOFOCUS_GAIN;
}; };
private AudioManagerCompat(@NonNull Context context) { private AudioManagerCompat(@NonNull Context context) {
@ -116,7 +118,7 @@ public abstract class AudioManagerCompat {
} }
abstract public SoundPool createSoundPool(); abstract public SoundPool createSoundPool();
abstract public void requestCallAudioFocus(); abstract public boolean requestCallAudioFocus();
abstract public void abandonCallAudioFocus(); abstract public void abandonCallAudioFocus();
public static AudioManagerCompat create(@NonNull Context context) { public static AudioManagerCompat create(@NonNull Context context) {
@ -152,22 +154,29 @@ public abstract class AudioManagerCompat {
} }
@Override @Override
public void requestCallAudioFocus() { public boolean requestCallAudioFocus() {
if (audioFocusRequest != null) { if (audioFocusRequest != null && hasFocus) {
Log.w(TAG, "Already requested audio focus. Ignoring..."); Log.w(TAG, "Already requested audio focus. Ignoring...");
return; return true;
} }
audioFocusRequest = new AudioFocusRequest.Builder(AUDIOFOCUS_GAIN) if (audioFocusRequest == null) {
.setAudioAttributes(AUDIO_ATTRIBUTES) audioFocusRequest = new AudioFocusRequest.Builder(AUDIOFOCUS_GAIN)
.setOnAudioFocusChangeListener(onAudioFocusChangeListener) .setAudioAttributes(AUDIO_ATTRIBUTES)
.build(); .setOnAudioFocusChangeListener(onAudioFocusChangeListener)
.build();
} else {
Log.w(TAG, "Trying again to request audio focus");
}
int result = audioManager.requestAudioFocus(audioFocusRequest); int result = audioManager.requestAudioFocus(audioFocusRequest);
if (result != AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { if (result != AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
Log.w(TAG, "Audio focus not granted. Result code: " + result); Log.w(TAG, "Audio focus not granted. Result code: " + result);
return false;
} }
return true;
} }
@Override @Override
@ -183,6 +192,7 @@ public abstract class AudioManagerCompat {
Log.w(TAG, "Audio focus abandon failed. Result code: " + result); Log.w(TAG, "Audio focus abandon failed. Result code: " + result);
} }
hasFocus = false;
audioFocusRequest = null; audioFocusRequest = null;
} }
} }
@ -217,16 +227,19 @@ public abstract class AudioManagerCompat {
@Override @Override
public SoundPool createSoundPool() { public SoundPool createSoundPool() {
return new SoundPool(1, AudioManager.STREAM_VOICE_CALL, 0); return new SoundPool(1, AudioManager.STREAM_NOTIFICATION, 0);
} }
@Override @Override
public void requestCallAudioFocus() { public boolean requestCallAudioFocus() {
int result = audioManager.requestAudioFocus(onAudioFocusChangeListener, AudioManager.STREAM_VOICE_CALL, AUDIOFOCUS_GAIN); int result = audioManager.requestAudioFocus(onAudioFocusChangeListener, AudioManager.STREAM_VOICE_CALL, AUDIOFOCUS_GAIN);
if (result != AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { if (result != AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
Log.w(TAG, "Audio focus not granted. Result code: " + result); Log.w(TAG, "Audio focus not granted. Result code: " + result);
return false;
} }
return true;
} }
@Override @Override

Wyświetl plik

@ -117,8 +117,8 @@ public class IncomingRinger {
if (Build.VERSION.SDK_INT <= 21) { if (Build.VERSION.SDK_INT <= 21) {
mediaPlayer.setAudioStreamType(AudioManager.STREAM_RING); mediaPlayer.setAudioStreamType(AudioManager.STREAM_RING);
} else { } else {
mediaPlayer.setAudioAttributes(new AudioAttributes.Builder().setContentType(AudioAttributes.CONTENT_TYPE_SPEECH) mediaPlayer.setAudioAttributes(new AudioAttributes.Builder().setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.setUsage(AudioAttributes.USAGE_VOICE_COMMUNICATION_SIGNALLING) .setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE)
.build()); .build());
} }

Wyświetl plik

@ -87,7 +87,10 @@ class SignalAudioManager(private val context: Context, private val eventListener
savedIsMicrophoneMute = androidAudioManager.isMicrophoneMute savedIsMicrophoneMute = androidAudioManager.isMicrophoneMute
hasWiredHeadset = androidAudioManager.isWiredHeadsetOn hasWiredHeadset = androidAudioManager.isWiredHeadsetOn
androidAudioManager.requestCallAudioFocus() val focusedGained = androidAudioManager.requestCallAudioFocus()
if (!focusedGained) {
handler.postDelayed({ androidAudioManager.requestCallAudioFocus() }, 500)
}
setMicrophoneMute(false) setMicrophoneMute(false)
@ -116,6 +119,11 @@ class SignalAudioManager(private val context: Context, private val eventListener
incomingRinger.stop() incomingRinger.stop()
outgoingRinger.stop() outgoingRinger.stop()
val focusedGained = androidAudioManager.requestCallAudioFocus()
if (!focusedGained) {
handler.postDelayed({ androidAudioManager.requestCallAudioFocus() }, 500)
}
state = State.RUNNING state = State.RUNNING
androidAudioManager.mode = AudioManager.MODE_IN_COMMUNICATION androidAudioManager.mode = AudioManager.MODE_IN_COMMUNICATION