From aa3612905336e376609e50da7d54235ed123e1b6 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 22 Apr 2024 15:46:40 +0200 Subject: [PATCH] Fixed mute microphone in waiting room not applied once conference has been joined --- .../linphone/telecom/TelecomCallControlCallback.kt | 12 ++++++++++-- .../main/java/org/linphone/utils/LinphoneUtils.kt | 5 +++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/linphone/telecom/TelecomCallControlCallback.kt b/app/src/main/java/org/linphone/telecom/TelecomCallControlCallback.kt index 1f1539793..c31c71a70 100644 --- a/app/src/main/java/org/linphone/telecom/TelecomCallControlCallback.kt +++ b/app/src/main/java/org/linphone/telecom/TelecomCallControlCallback.kt @@ -36,6 +36,7 @@ import org.linphone.core.Call import org.linphone.core.CallListenerStub import org.linphone.core.tools.Log import org.linphone.utils.AudioUtils +import org.linphone.utils.LinphoneUtils class TelecomCallControlCallback( private val call: Call, @@ -143,9 +144,16 @@ class TelecomCallControlCallback( }.launchIn(scope) callControl.isMuted.onEach { muted -> - Log.i("$TAG We're asked to ${if (muted) "mute" else "unmute"} the call") coreContext.postOnCoreThread { - call.microphoneMuted = muted + val callState = call.state + Log.i( + "$TAG We're asked to [${if (muted) "mute" else "unmute"}] the call in state [$callState]" + ) + if (muted || !LinphoneUtils.isCallOutgoing(callState, false)) { + call.microphoneMuted = muted + } else { + Log.w("$TAG Not following unmute request because call is in state [$callState]") + } } }.launchIn(scope) } diff --git a/app/src/main/java/org/linphone/utils/LinphoneUtils.kt b/app/src/main/java/org/linphone/utils/LinphoneUtils.kt index 768326418..96c5dd495 100644 --- a/app/src/main/java/org/linphone/utils/LinphoneUtils.kt +++ b/app/src/main/java/org/linphone/utils/LinphoneUtils.kt @@ -100,9 +100,10 @@ class LinphoneUtils { } @AnyThread - fun isCallOutgoing(callState: Call.State): Boolean { + fun isCallOutgoing(callState: Call.State, considerEarlyMedia: Boolean = true): Boolean { return when (callState) { - Call.State.OutgoingInit, Call.State.OutgoingProgress, Call.State.OutgoingRinging, Call.State.OutgoingEarlyMedia -> true + Call.State.OutgoingInit, Call.State.OutgoingProgress, Call.State.OutgoingRinging -> true + Call.State.OutgoingEarlyMedia -> considerEarlyMedia else -> false } }