kopia lustrzana https://github.com/ryukoposting/Signal-Android
Adjust incoming call audio initialization.
rodzic
ecc6a7b95e
commit
975ec47adf
|
@ -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))
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
Ładowanie…
Reference in New Issue