From 0bf5f0dfd3335224b0b7f045a8414d7ab1c831b9 Mon Sep 17 00:00:00 2001 From: Danmei Chen Date: Tue, 30 Mar 2021 16:22:36 +0200 Subject: [PATCH] fix callkit for ios14 --- Classes/CallManager.swift | 18 +++++++++++++++++- Classes/ProviderDelegate.swift | 1 + 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/Classes/CallManager.swift b/Classes/CallManager.swift index 2c31508a1..1bd21c04e 100644 --- a/Classes/CallManager.swift +++ b/Classes/CallManager.swift @@ -248,6 +248,7 @@ import AVFoundation providerDelegate.callInfos.updateValue(callInfo, forKey: uuid) providerDelegate.uuids.updateValue(uuid, forKey: "") + setHeldOtherCalls(exceptCallid: "") requestTransaction(transaction, action: "startCall") }else { try? doCall(addr: sAddr, isSas: isSas) @@ -385,7 +386,14 @@ import AVFoundation @objc func setHeld(call: OpaquePointer, hold: Bool) { let sCall = Call.getSwiftObject(cObject: call) - let callid = sCall.callLog?.callId ?? "" + if (!hold) { + setHeldOtherCalls(exceptCallid: sCall.callLog?.callId ?? "") + } + setHeld(call: sCall, hold: hold) + } + + func setHeld(call: Call, hold: Bool) { + let callid = call.callLog?.callId ?? "" let uuid = providerDelegate.uuids["\(callid)"] if (uuid == nil) { @@ -397,6 +405,14 @@ import AVFoundation requestTransaction(transaction, action: "setHeld") } + + @objc func setHeldOtherCalls(exceptCallid: String) { + for call in CallManager.instance().lc!.calls { + if (call.callLog?.callId != exceptCallid && call.state != .Paused && call.state != .Pausing && call.state != .PausedByRemote) { + setHeld(call: call, hold: true) + } + } + } } class CoreManagerDelegate: CoreDelegate { diff --git a/Classes/ProviderDelegate.swift b/Classes/ProviderDelegate.swift index 6e11a063c..032f98fdc 100644 --- a/Classes/ProviderDelegate.swift +++ b/Classes/ProviderDelegate.swift @@ -87,6 +87,7 @@ class ProviderDelegate: NSObject { let callInfo = callInfos[uuid] let callId = callInfo?.callId Log.directLog(BCTBX_LOG_MESSAGE, text: "CallKit: report new incoming call with call-id: [\(String(describing: callId))] and UUID: [\(uuid.description)]") + CallManager.instance().setHeldOtherCalls(exceptCallid: callId ?? "") provider.reportNewIncomingCall(with: uuid, update: update) { error in if error == nil { if CallManager.instance().endCallkit {