diff --git a/app/src/main/java/org/linphone/activities/main/dialer/fragments/DialerFragment.kt b/app/src/main/java/org/linphone/activities/main/dialer/fragments/DialerFragment.kt index 024c46639..94a7185fc 100644 --- a/app/src/main/java/org/linphone/activities/main/dialer/fragments/DialerFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/dialer/fragments/DialerFragment.kt @@ -282,7 +282,7 @@ class DialerFragment : SecureFragment() { Log.i("[Dialer] Telecom Manager permissions granted") if (!TelecomHelper.exists()) { Log.i("[Dialer] Creating Telecom Helper") - if (requireContext().packageManager.hasSystemFeature(PackageManager.FEATURE_CONNECTION_SERVICE)) { + if (Compatibility.hasTelecomManagerFeature(requireContext())) { TelecomHelper.create(requireContext()) } else { Log.e("[Dialer] Telecom Helper can't be created, device doesn't support connection service!") diff --git a/app/src/main/java/org/linphone/activities/main/settings/fragments/CallSettingsFragment.kt b/app/src/main/java/org/linphone/activities/main/settings/fragments/CallSettingsFragment.kt index 7860790c3..30323ec19 100644 --- a/app/src/main/java/org/linphone/activities/main/settings/fragments/CallSettingsFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/settings/fragments/CallSettingsFragment.kt @@ -89,18 +89,14 @@ class CallSettingsFragment : GenericSettingFragment viewLifecycleOwner ) { it.consume { - if (requireContext().packageManager.hasSystemFeature(PackageManager.FEATURE_CONNECTION_SERVICE)) { + if (Compatibility.hasTelecomManagerFeature(requireContext())) { if (!Compatibility.hasTelecomManagerPermissions(requireContext())) { Compatibility.requestTelecomManagerPermissions(requireActivity(), 1) } else if (!TelecomHelper.exists()) { corePreferences.useTelecomManager = true Log.w("[Telecom Helper] Doesn't exists yet, creating it") - if (requireContext().packageManager.hasSystemFeature(PackageManager.FEATURE_CONNECTION_SERVICE)) { - TelecomHelper.create(requireContext()) - updateTelecomManagerAccount() - } else { - Log.e("[Telecom Helper] Telecom Helper can't be created, device doesn't support connection service") - } + TelecomHelper.create(requireContext()) + updateTelecomManagerAccount() } } else { Log.e("[Telecom Helper] Telecom Helper can't be created, device doesn't support connection service!") @@ -139,7 +135,7 @@ class CallSettingsFragment : GenericSettingFragment } else if (requestCode == 1) { if (!TelecomHelper.exists()) { Log.w("[Telecom Helper] Doesn't exists yet, creating it") - if (requireContext().packageManager.hasSystemFeature(PackageManager.FEATURE_CONNECTION_SERVICE)) { + if (Compatibility.hasTelecomManagerFeature(requireContext())) { TelecomHelper.create(requireContext()) } else { Log.e("[Telecom Helper] Telecom Helper can't be created, device doesn't support connection service") @@ -179,7 +175,7 @@ class CallSettingsFragment : GenericSettingFragment } } - if (requireContext().packageManager.hasSystemFeature(PackageManager.FEATURE_CONNECTION_SERVICE)) { + if (Compatibility.hasTelecomManagerFeature(requireContext())) { TelecomHelper.create(requireContext()) updateTelecomManagerAccount() } else { diff --git a/app/src/main/java/org/linphone/compatibility/Api26Compatibility.kt b/app/src/main/java/org/linphone/compatibility/Api26Compatibility.kt index 5f5e4796c..d310c8211 100644 --- a/app/src/main/java/org/linphone/compatibility/Api26Compatibility.kt +++ b/app/src/main/java/org/linphone/compatibility/Api26Compatibility.kt @@ -31,6 +31,7 @@ import android.graphics.BitmapFactory import android.media.AudioAttributes import android.os.VibrationEffect import android.os.Vibrator +import android.telecom.CallAudioState import android.view.WindowManager import android.view.inputmethod.EditorInfo import android.widget.RemoteViews @@ -317,9 +318,10 @@ class Api26Compatibility { } fun changeAudioRouteForTelecomManager(connection: NativeCallWrapper, route: Int): Boolean { - Log.i("[Telecom Helper] Changing audio route [$route] on connection ${connection.callId}") + Log.i("[Telecom Helper] Changing audio route [${routeToString(route)}] on connection [${connection.callId}] with state [${connection.stateAsString()}]") val audioState = connection.callAudioState + Log.i("[Telecom Helper] Current audio route is ${routeToString(audioState.route)}") if (audioState != null && audioState.route == route) { Log.w("[Telecom Helper] Connection is already using this route") return false @@ -349,5 +351,20 @@ class Api26Compatibility { fun startForegroundService(context: Context, intent: Intent) { context.startForegroundService(intent) } + + fun hasTelecomManagerFeature(context: Context): Boolean { + return context.packageManager.hasSystemFeature(PackageManager.FEATURE_CONNECTION_SERVICE) + } + + private fun routeToString(route: Int): String { + return when (route) { + CallAudioState.ROUTE_BLUETOOTH -> "BLUETOOTH" + CallAudioState.ROUTE_EARPIECE -> "EARPIECE" + CallAudioState.ROUTE_SPEAKER -> "SPEAKER" + CallAudioState.ROUTE_WIRED_HEADSET -> "WIRED_HEADSET" + CallAudioState.ROUTE_WIRED_OR_EARPIECE -> "WIRED_OR_EARPIECE" + else -> "Unknown: $route" + } + } } } diff --git a/app/src/main/java/org/linphone/compatibility/Api33Compatibility.kt b/app/src/main/java/org/linphone/compatibility/Api33Compatibility.kt index 633661414..2a524fa34 100644 --- a/app/src/main/java/org/linphone/compatibility/Api33Compatibility.kt +++ b/app/src/main/java/org/linphone/compatibility/Api33Compatibility.kt @@ -22,6 +22,7 @@ package org.linphone.compatibility import android.Manifest import android.annotation.TargetApi import android.content.Context +import android.content.pm.PackageManager import androidx.fragment.app.Fragment @TargetApi(33) @@ -57,5 +58,9 @@ class Api33Compatibility { Compatibility.hasPermission(context, Manifest.permission.READ_MEDIA_VIDEO) || Compatibility.hasPermission(context, Manifest.permission.READ_MEDIA_AUDIO) } + + fun hasTelecomManagerFeature(context: Context): Boolean { + return context.packageManager.hasSystemFeature(PackageManager.FEATURE_TELECOM) + } } } diff --git a/app/src/main/java/org/linphone/compatibility/Compatibility.kt b/app/src/main/java/org/linphone/compatibility/Compatibility.kt index dc62219fe..f7e429c97 100644 --- a/app/src/main/java/org/linphone/compatibility/Compatibility.kt +++ b/app/src/main/java/org/linphone/compatibility/Compatibility.kt @@ -409,5 +409,14 @@ class Compatibility { } return Api23Compatibility.getImeFlagsForSecureChatRoom() } + + fun hasTelecomManagerFeature(context: Context): Boolean { + if (Version.sdkAboveOrEqual(Version.API33_ANDROID_13_TIRAMISU)) { + return Api33Compatibility.hasTelecomManagerFeature(context) + } else if (Version.sdkAboveOrEqual(Version.API26_O_80)) { + return Api26Compatibility.hasTelecomManagerFeature(context) + } + return false + } } } diff --git a/app/src/main/java/org/linphone/telecom/NativeCallWrapper.kt b/app/src/main/java/org/linphone/telecom/NativeCallWrapper.kt index a28ff57ca..c2de142a1 100644 --- a/app/src/main/java/org/linphone/telecom/NativeCallWrapper.kt +++ b/app/src/main/java/org/linphone/telecom/NativeCallWrapper.kt @@ -126,7 +126,7 @@ class NativeCallWrapper(var callId: String) : Connection() { } fun stateAsString(): String { - return intStateToString(state) + return stateToString(state) } private fun getCall(): Call? {