mirror of
https://github.com/vector-im/element-android.git
synced 2024-11-15 01:35:07 +08:00
Merge pull request #2090 from vector-im/feature/fix_silent_call_ringing
Always use loudspeaker while ringing and a headset is not connected
This commit is contained in:
commit
2c96a79a08
@ -10,6 +10,7 @@ Improvements 🙌:
|
||||
|
||||
Bugfix 🐛:
|
||||
- Clear the notification when the event is read elsewhere (#1822)
|
||||
- Speakerphone is not used for ringback tone (#1644, #1645)
|
||||
|
||||
Translations 🗣:
|
||||
-
|
||||
|
@ -24,6 +24,7 @@ import android.content.pm.PackageManager
|
||||
import android.media.AudioManager
|
||||
import androidx.core.content.getSystemService
|
||||
import im.vector.app.core.services.WiredHeadsetStateReceiver
|
||||
import org.matrix.android.sdk.api.session.call.CallState
|
||||
import org.matrix.android.sdk.api.session.call.MxCall
|
||||
import timber.log.Timber
|
||||
import java.util.concurrent.Executors
|
||||
@ -116,10 +117,19 @@ class CallAudioManager(
|
||||
// Always disable microphone mute during a WebRTC call.
|
||||
setMicrophoneMute(false)
|
||||
|
||||
adjustCurrentSoundDevice(mxCall)
|
||||
}
|
||||
|
||||
private fun adjustCurrentSoundDevice(mxCall: MxCall) {
|
||||
val audioManager = audioManager ?: return
|
||||
executor.execute {
|
||||
// If there are no headset, start video output in speaker
|
||||
// (you can't watch the video and have the phone close to your ear)
|
||||
if (mxCall.isVideoCall && !isHeadsetOn()) {
|
||||
if (mxCall.state == CallState.LocalRinging && !isHeadsetOn()) {
|
||||
// Always use speaker if incoming call is in ringing state and a headset is not connected
|
||||
Timber.v("##VOIP: AudioManager default to SPEAKER (it is ringing)")
|
||||
setCurrentSoundDevice(SoundDevice.SPEAKER)
|
||||
} else if (mxCall.isVideoCall && !isHeadsetOn()) {
|
||||
// If there are no headset, start video output in speaker
|
||||
// (you can't watch the video and have the phone close to your ear)
|
||||
Timber.v("##VOIP: AudioManager default to speaker ")
|
||||
setCurrentSoundDevice(SoundDevice.SPEAKER)
|
||||
} else {
|
||||
@ -138,6 +148,11 @@ class CallAudioManager(
|
||||
}
|
||||
}
|
||||
|
||||
fun onCallConnected(mxCall: MxCall) {
|
||||
Timber.v("##VOIP: AudioManager call answered, adjusting current sound device")
|
||||
adjustCurrentSoundDevice(mxCall)
|
||||
}
|
||||
|
||||
fun getAvailableSoundDevices(): List<SoundDevice> {
|
||||
return ArrayList<SoundDevice>().apply {
|
||||
if (isBluetoothHeadsetOn()) add(SoundDevice.WIRELESS_HEADSET)
|
||||
|
@ -858,6 +858,7 @@ class WebRtcPeerConnectionManager @Inject constructor(
|
||||
*/
|
||||
PeerConnection.PeerConnectionState.CONNECTED -> {
|
||||
callContext.mxCall.state = CallState.Connected(newState)
|
||||
audioManager.onCallConnected(callContext.mxCall)
|
||||
}
|
||||
/**
|
||||
* One or more of the ICE transports on the connection is in the "failed" state.
|
||||
|
Loading…
Reference in New Issue
Block a user