diff --git a/app/src/main/java/org/linphone/core/CoreContext.kt b/app/src/main/java/org/linphone/core/CoreContext.kt index afe4ebc6a..81c8478d5 100644 --- a/app/src/main/java/org/linphone/core/CoreContext.kt +++ b/app/src/main/java/org/linphone/core/CoreContext.kt @@ -111,14 +111,7 @@ class CoreContext @UiThread constructor(val context: Context) : HandlerThread("C "$TAG Added device [${device.productName}] with ID [${device.id}] and type [${device.type}]" ) } - if (telecomManager.getCurrentlyFollowedCalls() <= 0) { - Log.i("$TAG No call found in Telecom's CallsManager, reloading sound devices") - core.reloadSoundDevices() - } else { - Log.i( - "$TAG At least one active call in Telecom's CallsManager, let it handle the added device" - ) - } + core.reloadSoundDevices() } } @@ -512,6 +505,16 @@ class CoreContext @UiThread constructor(val context: Context) : HandlerThread("C } } + @AnyThread + fun postOnCoreThreadDelayed( + @WorkerThread lambda: (core: Core) -> Unit, + delay: Long + ) { + coreThread.postDelayed({ + lambda.invoke(core) + }, delay) + } + @AnyThread fun postOnMainThread( @UiThread lambda: () -> Unit diff --git a/app/src/main/java/org/linphone/telecom/TelecomCallControlCallback.kt b/app/src/main/java/org/linphone/telecom/TelecomCallControlCallback.kt index c25941aa4..845cc27c2 100644 --- a/app/src/main/java/org/linphone/telecom/TelecomCallControlCallback.kt +++ b/app/src/main/java/org/linphone/telecom/TelecomCallControlCallback.kt @@ -138,7 +138,12 @@ class TelecomCallControlCallback( } if (route.isNotEmpty()) { coreContext.postOnCoreThread { - AudioUtils.applyAudioRouteChangeInLinphone(call, route) + if (!AudioUtils.applyAudioRouteChangeInLinphone(call, route)) { + Log.w("$TAG Failed to apply audio route change, trying again in 200ms") + coreContext.postOnCoreThreadDelayed({ + AudioUtils.applyAudioRouteChangeInLinphone(call, route) + }, 200) + } } } }.launchIn(scope) diff --git a/app/src/main/java/org/linphone/utils/AudioUtils.kt b/app/src/main/java/org/linphone/utils/AudioUtils.kt index 5291aee88..aee8d5608 100644 --- a/app/src/main/java/org/linphone/utils/AudioUtils.kt +++ b/app/src/main/java/org/linphone/utils/AudioUtils.kt @@ -103,7 +103,7 @@ class AudioUtils { call: Call?, types: List, output: Boolean = true - ) { + ): Boolean { val capability = if (output) { AudioDevice.Capabilities.CapabilityPlay } else { @@ -139,12 +139,7 @@ class AudioUtils { Log.e( "$TAG Couldn't find audio device with capability [$capability] and type [$types]" ) - for (device in extendedAudioDevices) { - Log.i( - "$TAG Extended audio device: [${device.deviceName} (${device.driverName}) ${device.type} / ${device.capabilities}]" - ) - } - return + return false } if (call != null) { Log.i( @@ -165,6 +160,7 @@ class AudioUtils { coreContext.core.inputAudioDevice = audioDevice } } + return true } @WorkerThread