From 6c6fb9eff381f1f6e767141bebf37fe60acd0ad4 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 17 Mar 2025 13:10:38 +0100 Subject: [PATCH] Prevent call transfer if state is Ended, Error or Released --- .../ui/call/viewmodel/CurrentCallViewModel.kt | 17 +++++++++++++++++ .../java/org/linphone/utils/LinphoneUtils.kt | 3 ++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/linphone/ui/call/viewmodel/CurrentCallViewModel.kt b/app/src/main/java/org/linphone/ui/call/viewmodel/CurrentCallViewModel.kt index 4677606c2..cb799c547 100644 --- a/app/src/main/java/org/linphone/ui/call/viewmodel/CurrentCallViewModel.kt +++ b/app/src/main/java/org/linphone/ui/call/viewmodel/CurrentCallViewModel.kt @@ -945,6 +945,17 @@ class CurrentCallViewModel @WorkerThread fun attendedTransferCallTo(to: Call) { if (::currentCall.isInitialized) { + val toCallState = to.state + if (LinphoneUtils.isCallEnding(toCallState, considerReleasedAsEnding = true)) { + Log.e("$TAG Do not attempt attended transfer to call in state [$toCallState]") + return + } + val currentCallState = currentCall.state + if (LinphoneUtils.isCallEnding(currentCallState, considerReleasedAsEnding = true)) { + Log.e("$TAG Do not attempt attended transfer of call in state [$currentCallState]") + return + } + Log.i( "$TAG Doing an attended transfer between currently displayed call [${currentCall.remoteAddress.asStringUriOnly()}] and paused call [${to.remoteAddress.asStringUriOnly()}]" ) @@ -959,6 +970,12 @@ class CurrentCallViewModel @WorkerThread fun blindTransferCallTo(to: Address) { if (::currentCall.isInitialized) { + val callState = currentCall.state + if (LinphoneUtils.isCallEnding(callState, considerReleasedAsEnding = true)) { + Log.e("$TAG Do not attempt blind transfer of call in state [$callState]") + return + } + Log.i( "$TAG Call [${currentCall.remoteAddress.asStringUriOnly()}] is being blindly transferred to [${to.asStringUriOnly()}]" ) diff --git a/app/src/main/java/org/linphone/utils/LinphoneUtils.kt b/app/src/main/java/org/linphone/utils/LinphoneUtils.kt index fe594e7fd..5ee6aae33 100644 --- a/app/src/main/java/org/linphone/utils/LinphoneUtils.kt +++ b/app/src/main/java/org/linphone/utils/LinphoneUtils.kt @@ -168,9 +168,10 @@ class LinphoneUtils { } @AnyThread - fun isCallEnding(callState: Call.State): Boolean { + fun isCallEnding(callState: Call.State, considerReleasedAsEnding: Boolean = false): Boolean { return when (callState) { Call.State.End, Call.State.Error -> true + Call.State.Released -> considerReleasedAsEnding else -> false } }