From c74d780619316fc6876d64b299ae3b58a9a59f15 Mon Sep 17 00:00:00 2001 From: Juha Heinanen Date: Mon, 11 May 2026 09:01:22 +0300 Subject: [PATCH] Use Call.hasTelecomCall() to check is telecom call exists Apply default call volume to all types of calls --- .../com/tutpro/baresip/BaresipService.kt | 31 +++++++++---------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt b/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt index a445b24d..cab10f92 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt @@ -871,12 +871,8 @@ class BaresipService: Service() { break speakerPhone = speakerPhoneAuto stopMediaPlayer() - val hasTelecom = ConnectionService.connections.containsKey(callp) || - ConnectionService.pendingOutgoingConnection != null - if (!hasTelecom) { - setCallVolume() - ensureCommunicationMode() - } + setCallVolume() + ensureCommunicationMode() proximitySensing(proximitySensing) } "call ringing" -> { @@ -1467,9 +1463,7 @@ class BaresipService: Service() { }, audioDelay) } - val isTelecom = Call.calls().any { ConnectionService.connections.containsKey(it.callp) } || - ConnectionService.pendingOutgoingConnection != null - if (isTelecom) + if (Call.hasTelecomCall()) executeCall() else if (VERSION.SDK_INT < 31) { Log.d(TAG, "Setting audio mode to MODE_IN_COMMUNICATION") @@ -1823,6 +1817,8 @@ class BaresipService: Service() { }) calls.add(call) + setCallVolume() + ensureCommunicationMode() postServiceEvent(ServiceEvent( "call incoming", arrayListOf(ua.uap, call.callp), @@ -1854,12 +1850,10 @@ class BaresipService: Service() { private fun addMobileUserAgent() { if (!telecom || Utils.pstnAccountHandle(this) == null) return - val mobileAor = Utils.getLine1Number(this)?.let { "tel:$it" } ?: "tel:mobile" - val existingMobileUa = uas.value.find { it.account.isMobile } if (existingMobileUa != null) { - // If we previously had tel:mobile but now have a real number, replace it + // Replace previous tel:mobile with real number if (existingMobileUa.account.aor == "tel:mobile" && mobileAor != "tel:mobile") { val updatedUas = uas.value.toMutableList() updatedUas.remove(existingMobileUa) @@ -2181,8 +2175,7 @@ class BaresipService: Service() { cleanupRunnable = null } if (isSpeakerphoneOn == speakerPhone) { - val hasTelecom = Call.calls().any { ConnectionService.connections.containsKey(it.callp) } - if (hasTelecom || currentMode == MODE_IN_COMMUNICATION) { + if (Call.hasTelecomCall() || currentMode == MODE_IN_COMMUNICATION) { Log.d(TAG, "Already in valid call mode ($currentMode) with correct speaker state.") return } @@ -2209,13 +2202,17 @@ class BaresipService: Service() { val runnable = Runnable { cleanupRunnable = null if (Call.inCall()) { - val hasTelecom = Call.calls().any { ConnectionService.connections.containsKey(it.callp) } + val hasTelecom = Call.hasTelecomCall() if (!hasTelecom && am.mode != MODE_IN_COMMUNICATION && am.mode != AudioManager.MODE_IN_CALL) { am.mode = MODE_IN_COMMUNICATION Log.d(TAG, "Manual Mode Guard: Setting MODE_IN_COMMUNICATON from ${am.mode}") } Log.d(TAG, "Applying speakerphone state: $speakerPhone") - if (!hasTelecom) { + if (InCallService.instance != null) { + Log.d(TAG, "Using InCallService for audio route: $speakerPhone") + @Suppress("DEPRECATION") + InCallService.instance!!.setAudioRoute(if (speakerPhone) android.telecom.CallAudioState.ROUTE_SPEAKER else android.telecom.CallAudioState.ROUTE_EARPIECE) + } else if (!hasTelecom) { Log.d(TAG, "No Telecom connection, using AudioManager for speaker") Utils.setSpeakerPhone(mainExecutor, am, speakerPhone) } else { @@ -2250,7 +2247,7 @@ class BaresipService: Service() { ) ) } - if (!Call.calls().any { ConnectionService.connections.containsKey(it.callp) }) + if (!Call.hasTelecomCall()) resetCallVolume() proximitySensing(false) }