From 226b0e6c9d0afdee1183d9c18fdb6ada4e2dd155 Mon Sep 17 00:00:00 2001 From: ganfra Date: Thu, 16 Sep 2021 12:04:18 +0200 Subject: [PATCH] Fix call screen stuck with some hanging up scenarios #4026 --- changelog.d/4026.bugfix | 1 + .../im/vector/app/features/call/webrtc/WebRtcCall.kt | 12 +++++++----- .../app/features/call/webrtc/WebRtcCallManager.kt | 6 +++++- 3 files changed, 13 insertions(+), 6 deletions(-) create mode 100644 changelog.d/4026.bugfix diff --git a/changelog.d/4026.bugfix b/changelog.d/4026.bugfix new file mode 100644 index 0000000000..7404bfe966 --- /dev/null +++ b/changelog.d/4026.bugfix @@ -0,0 +1 @@ +Fix call screen stuck with some hanging up scenarios \ No newline at end of file diff --git a/vector/src/main/java/im/vector/app/features/call/webrtc/WebRtcCall.kt b/vector/src/main/java/im/vector/app/features/call/webrtc/WebRtcCall.kt index 2d39fda2e3..56368b8175 100644 --- a/vector/src/main/java/im/vector/app/features/call/webrtc/WebRtcCall.kt +++ b/vector/src/main/java/im/vector/app/features/call/webrtc/WebRtcCall.kt @@ -810,17 +810,19 @@ class WebRtcCall( } } - fun endCall(reason: EndCallReason = EndCallReason.USER_HANGUP) { + fun endCall(reason: EndCallReason = EndCallReason.USER_HANGUP, sendSignaling: Boolean = true) { sessionScope?.launch(dispatcher) { if (mxCall.state is CallState.Ended) { return@launch } val reject = mxCall.state is CallState.LocalRinging terminate(reason, reject) - if (reject) { - mxCall.reject() - } else { - mxCall.hangUp(reason) + if (sendSignaling) { + if (reject) { + mxCall.reject() + } else { + mxCall.hangUp(reason) + } } } } diff --git a/vector/src/main/java/im/vector/app/features/call/webrtc/WebRtcCallManager.kt b/vector/src/main/java/im/vector/app/features/call/webrtc/WebRtcCallManager.kt index 73a6c07d6a..d276549765 100644 --- a/vector/src/main/java/im/vector/app/features/call/webrtc/WebRtcCallManager.kt +++ b/vector/src/main/java/im/vector/app/features/call/webrtc/WebRtcCallManager.kt @@ -424,7 +424,11 @@ class WebRtcCallManager @Inject constructor( override fun onCallManagedByOtherSession(callId: String) { Timber.tag(loggerTag.value).v("onCallManagedByOtherSession: $callId") - onCallEnded(callId, EndCallReason.ANSWERED_ELSEWHERE, false) + val call = callsByCallId[callId] + ?: return Unit.also { + Timber.tag(loggerTag.value).w("onCallManagedByOtherSession for non active call? $callId") + } + call.endCall(EndCallReason.ANSWERED_ELSEWHERE, sendSignaling = false) } override fun onCallAssertedIdentityReceived(callAssertedIdentityContent: CallAssertedIdentityContent) {