diff --git a/Signal/Signal-Info.plist b/Signal/Signal-Info.plist index e7c2409d40..9a8094cf2e 100644 --- a/Signal/Signal-Info.plist +++ b/Signal/Signal-Info.plist @@ -5,7 +5,7 @@ BuildDetails WebRTCCommit - 1263343626b945acd509c94d3f65bc75bffdb9c9 Production build of v2.19.2 + 0bdc4fb9c7a703c8a8f498fa78b6c1f398625348 Production build of v2.20.0 CFBundleDevelopmentRegion en diff --git a/Signal/src/Calls/Individual/IndividualCallService.swift b/Signal/src/Calls/Individual/IndividualCallService.swift index 92ce38778e..2777f92b82 100644 --- a/Signal/src/Calls/Individual/IndividualCallService.swift +++ b/Signal/src/Calls/Individual/IndividualCallService.swift @@ -757,6 +757,44 @@ import CallKit call.individualCall.state = .localHangup callService.terminate(call: call) + case .endedRemoteReCall: + guard call === callService.currentCall else { + callService.cleanupStaleCall(call) + return + } + + if let callRecord = call.individualCall.callRecord { + switch callRecord.callType { + case .outgoingMissed, .incomingDeclined, .incomingMissed, .incomingMissedBecauseOfChangedIdentity, .incomingAnsweredElsewhere, .incomingDeclinedElsewhere, .incomingBusyElsewhere: + // already handled and ended, don't update the call record. + break + case .incomingIncomplete, .incoming: + callRecord.updateCallType(.incomingMissed) + callUIAdapter.reportMissedCall(call) + case .outgoingIncomplete: + callRecord.updateCallType(.outgoingMissed) + callUIAdapter.remoteBusy(call) + case .outgoing: + callRecord.updateCallType(.outgoingMissed) + callUIAdapter.reportMissedCall(call) + @unknown default: + owsFailDebug("unknown RPRecentCallType: \(callRecord.callType)") + } + } else { + assert(call.individualCall.direction == .incoming) + let callRecord = TSCall( + callType: .incomingMissed, + offerType: call.individualCall.offerMediaType, + thread: call.individualCall.thread, + sentAtTimestamp: call.individualCall.sentAtTimestamp + ) + databaseStorage.asyncWrite { callRecord.anyInsert(transaction: $0) } + call.individualCall.callRecord = callRecord + callUIAdapter.reportMissedCall(call) + } + call.individualCall.state = .localHangup + callService.terminate(call: call) + case .endedTimeout: let description: String @@ -771,6 +809,9 @@ import CallKit case .endedSignalingFailure: handleFailedCall(failedCall: call, error: SignalCall.CallError.signaling, shouldResetUI: true, shouldResetRingRTC: false) + case .endedGlareHandlingFailure: + handleFailedCall(failedCall: call, error: SignalCall.CallError.signaling, shouldResetUI: true, shouldResetRingRTC: false) + case .endedInternalFailure: handleFailedCall(failedCall: call, error: OWSAssertionError("call manager internal error"), shouldResetUI: true, shouldResetRingRTC: false) diff --git a/ThirdParty/RingRTC b/ThirdParty/RingRTC index d8abec7efb..43441a36b6 160000 --- a/ThirdParty/RingRTC +++ b/ThirdParty/RingRTC @@ -1 +1 @@ -Subproject commit d8abec7efb80198dad3fe730633b67ba0995647d +Subproject commit 43441a36b6208e63ca872a929539350665a20fa3 diff --git a/ThirdParty/SignalRingRTC.podspec b/ThirdParty/SignalRingRTC.podspec index 811536ff79..be284135cd 100644 --- a/ThirdParty/SignalRingRTC.podspec +++ b/ThirdParty/SignalRingRTC.podspec @@ -8,7 +8,7 @@ Pod::Spec.new do |s| s.name = "SignalRingRTC" - s.version = "2.18.1" + s.version = "2.20.0" s.summary = "A Swift & Objective-C library used by the Signal iOS app for WebRTC interactions." s.description = <<-DESC diff --git a/ThirdParty/WebRTC b/ThirdParty/WebRTC index 1263343626..0bdc4fb9c7 160000 --- a/ThirdParty/WebRTC +++ b/ThirdParty/WebRTC @@ -1 +1 @@ -Subproject commit 1263343626b945acd509c94d3f65bc75bffdb9c9 +Subproject commit 0bdc4fb9c7a703c8a8f498fa78b6c1f398625348