diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/call/CallAudioManager.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/call/CallAudioManager.kt index 087914550..1823bfeb0 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/call/CallAudioManager.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/call/CallAudioManager.kt @@ -107,6 +107,7 @@ class CallAudioManager( } fun startRingbackTone() { + stopRingbackTone() try { ringbackTone = ToneGenerator(AudioManager.STREAM_VOICE_CALL, 80).also { @@ -123,6 +124,7 @@ class CallAudioManager( } fun switchToCallAudioMode() { + if (audioManager.mode == AudioManager.MODE_IN_COMMUNICATION) return previousAudioMode = audioManager.mode audioManager.mode = AudioManager.MODE_IN_COMMUNICATION diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/call/CallController.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/call/CallController.kt index c1f63332f..1c86493d9 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/call/CallController.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/call/CallController.kt @@ -177,7 +177,15 @@ class CallController( } is CallState.Connected -> { + // Stop ringing/ringback in case the Connecting state + // was skipped due to StateFlow conflation (the value + // can change Offering → Connecting → Connected before + // the collector processes Connecting). + audioManager.stopRinging() + audioManager.stopRingbackTone() + withContext(Dispatchers.IO) { audioManager.switchToCallAudioMode() } audioManager.acquireProximityWakeLock() + NotificationUtils.cancelCallNotification(context) } is CallState.Ended -> {