mirror of
https://github.com/oxen-io/session-ios.git
synced 2023-12-13 21:30:14 +01:00
eeccfb47d5
Fixed some broken file paths Fixed a couple of bugs with closed groups Fixed a few migration issues Fixed a bug with the ProfilePictureView in open groups (was including the open parenthesis in the initials) Migrated the Id Blinding changes to work with GRDB Migrated the call logic to work with GRDB Updated the code to work the with hard fork changes
92 lines
2.9 KiB
Swift
92 lines
2.9 KiB
Swift
// Copyright © 2022 Rangeproof Pty Ltd. All rights reserved.
|
|
|
|
import Foundation
|
|
import CallKit
|
|
import SignalCoreKit
|
|
import SessionUtilitiesKit
|
|
|
|
extension SessionCallManager: CXProviderDelegate {
|
|
public func providerDidReset(_ provider: CXProvider) {
|
|
AssertIsOnMainThread()
|
|
(currentCall as? SessionCall)?.endSessionCall()
|
|
}
|
|
|
|
public func provider(_ provider: CXProvider, perform action: CXStartCallAction) {
|
|
AssertIsOnMainThread()
|
|
if startCallAction() {
|
|
action.fulfill()
|
|
}
|
|
else {
|
|
action.fail()
|
|
}
|
|
}
|
|
|
|
public func provider(_ provider: CXProvider, perform action: CXAnswerCallAction) {
|
|
AssertIsOnMainThread()
|
|
print("[CallKit] Perform CXAnswerCallAction")
|
|
|
|
guard let call: SessionCall = (self.currentCall as? SessionCall) else { return action.fail() }
|
|
|
|
if CurrentAppContext().isMainAppAndActive {
|
|
if answerCallAction() {
|
|
action.fulfill()
|
|
}
|
|
else {
|
|
action.fail()
|
|
}
|
|
}
|
|
else {
|
|
call.answerSessionCallInBackground(action: action)
|
|
}
|
|
}
|
|
|
|
public func provider(_ provider: CXProvider, perform action: CXEndCallAction) {
|
|
print("[CallKit] Perform CXEndCallAction")
|
|
AssertIsOnMainThread()
|
|
|
|
if endCallAction() {
|
|
action.fulfill()
|
|
}
|
|
else {
|
|
action.fail()
|
|
}
|
|
}
|
|
|
|
public func provider(_ provider: CXProvider, perform action: CXSetMutedCallAction) {
|
|
print("[CallKit] Perform CXSetMutedCallAction, isMuted: \(action.isMuted)")
|
|
AssertIsOnMainThread()
|
|
|
|
if setMutedCallAction(isMuted: action.isMuted) {
|
|
action.fulfill()
|
|
}
|
|
else {
|
|
action.fail()
|
|
}
|
|
}
|
|
|
|
public func provider(_ provider: CXProvider, perform action: CXSetHeldCallAction) {
|
|
// TODO: set on hold
|
|
}
|
|
|
|
public func provider(_ provider: CXProvider, timedOutPerforming action: CXAction) {
|
|
// TODO: handle timeout
|
|
}
|
|
|
|
public func provider(_ provider: CXProvider, didActivate audioSession: AVAudioSession) {
|
|
print("[CallKit] Audio session did activate.")
|
|
AssertIsOnMainThread()
|
|
guard let call: SessionCall = (self.currentCall as? SessionCall) else { return }
|
|
|
|
call.webRTCSession.audioSessionDidActivate(audioSession)
|
|
if call.isOutgoing && !call.hasConnected { CallRingTonePlayer.shared.startPlayingRingTone() }
|
|
}
|
|
|
|
public func provider(_ provider: CXProvider, didDeactivate audioSession: AVAudioSession) {
|
|
print("[CallKit] Audio session did deactivate.")
|
|
AssertIsOnMainThread()
|
|
guard let call: SessionCall = (self.currentCall as? SessionCall) else { return }
|
|
|
|
call.webRTCSession.audioSessionDidDeactivate(audioSession)
|
|
}
|
|
}
|
|
|