Fix call screen stuck with some hanging up scenarios #4026

This commit is contained in:
ganfra 2021-09-16 12:04:18 +02:00
parent bd9a187597
commit 226b0e6c9d
3 changed files with 13 additions and 6 deletions

1
changelog.d/4026.bugfix Normal file
View File

@ -0,0 +1 @@
Fix call screen stuck with some hanging up scenarios

View File

@ -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)
}
}
}
}

View File

@ -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) {