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.retrieveTurnServers(remotePeer);
webRtcInteractor.initializeAudioForCall();
return currentState.builder()
.actionProcessor(new IncomingCallActionProcessor(webRtcInteractor))

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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