use new delegates

This commit is contained in:
Danmei Chen 2020-09-16 17:34:49 +02:00
parent 98449ef104
commit 894367f33b
3 changed files with 34 additions and 35 deletions

View file

@ -33,11 +33,10 @@ import AVFoundation
* CallManager is a class that manages application calls and supports callkit. * CallManager is a class that manages application calls and supports callkit.
* There is only one CallManager by calling CallManager.instance(). * There is only one CallManager by calling CallManager.instance().
*/ */
@objc class CallManager: NSObject { @objc class CallManager: NSObject, CoreDelegate {
static var theCallManager: CallManager? static var theCallManager: CallManager?
let providerDelegate: ProviderDelegate! // to support callkit let providerDelegate: ProviderDelegate! // to support callkit
let callController: CXCallController! // to support callkit let callController: CXCallController! // to support callkit
let manager: CoreManagerDelegate! // callbacks of the linphonecore
var lc: Core? var lc: Core?
@objc var speakerBeforePause : Bool = false @objc var speakerBeforePause : Bool = false
@objc var speakerEnabled : Bool = false @objc var speakerEnabled : Bool = false
@ -47,12 +46,13 @@ import AVFoundation
var referedFromCall: String? var referedFromCall: String?
var referedToCall: String? var referedToCall: String?
var endCallkit: Bool = false var endCallkit: Bool = false
static var speaker_already_enabled : Bool = false
fileprivate override init() { fileprivate override init() {
providerDelegate = ProviderDelegate() providerDelegate = ProviderDelegate()
callController = CXCallController() callController = CXCallController()
manager = CoreManagerDelegate()
} }
@objc static func instance() -> CallManager { @objc static func instance() -> CallManager {
@ -407,6 +407,7 @@ import AVFoundation
} }
} }
} }
<<<<<<< HEAD
@objc func performActionWhenCoreIsOn(action: @escaping ()->Void ) { @objc func performActionWhenCoreIsOn(action: @escaping ()->Void ) {
if (manager.globalState == .On) { if (manager.globalState == .On) {
@ -442,6 +443,13 @@ class CoreManagerDelegate: CoreDelegate {
} }
} else { } else {
CallManager.instance().endCallkit = false CallManager.instance().endCallkit = false
=======
func onCallStateChanged(core: Core, call: Call, state cstate: Call.State, message: String) {
if (cstate == .PushIncomingReceived) {
CallManager.instance().displayIncomingCall(call: call, handle: "Calling", hasVideo: false, callId: call.callLog?.callId ?? "")
return;
>>>>>>> 22b977a1a... use new delegates
} }
} }
@ -453,7 +461,7 @@ class CoreManagerDelegate: CoreDelegate {
let video = UIApplication.shared.applicationState == .active && (core.videoActivationPolicy?.automaticallyAccept ?? false) && (call.remoteParams?.videoEnabled ?? false) let video = UIApplication.shared.applicationState == .active && (core.videoActivationPolicy?.automaticallyAccept ?? false) && (call.remoteParams?.videoEnabled ?? false)
// we keep the speaker auto-enabled state in this static so that we don't // we keep the speaker auto-enabled state in this static so that we don't
// force-enable it on ICE re-invite if the user disabled it. // force-enable it on ICE re-invite if the user disabled it.
CoreManagerDelegate.speaker_already_enabled = false CallManager.speaker_already_enabled = false
if (call.userData == nil) { if (call.userData == nil) {
let appData = CallAppData() let appData = CallAppData()
@ -507,7 +515,7 @@ class CoreManagerDelegate: CoreDelegate {
if (CallManager.instance().speakerBeforePause) { if (CallManager.instance().speakerBeforePause) {
CallManager.instance().speakerBeforePause = false CallManager.instance().speakerBeforePause = false
CallManager.instance().enableSpeaker(enable: true) CallManager.instance().enableSpeaker(enable: true)
CoreManagerDelegate.speaker_already_enabled = true CallManager.speaker_already_enabled = true
} }
break break
case .OutgoingInit, case .OutgoingInit,
@ -533,7 +541,7 @@ class CoreManagerDelegate: CoreDelegate {
case .End, case .End,
.Error: .Error:
UIDevice.current.isProximityMonitoringEnabled = false UIDevice.current.isProximityMonitoringEnabled = false
CoreManagerDelegate.speaker_already_enabled = false CallManager.speaker_already_enabled = false
if (CallManager.instance().lc!.callsNb == 0) { if (CallManager.instance().lc!.callsNb == 0) {
CallManager.instance().enableSpeaker(enable: false) CallManager.instance().enableSpeaker(enable: false)
// disable this because I don't find anygood reason for it: _bluetoothAvailable = FALSE; // disable this because I don't find anygood reason for it: _bluetoothAvailable = FALSE;
@ -600,9 +608,9 @@ class CoreManagerDelegate: CoreDelegate {
} }
if (cstate == .IncomingReceived || cstate == .OutgoingInit || cstate == .Connected || cstate == .StreamsRunning) { if (cstate == .IncomingReceived || cstate == .OutgoingInit || cstate == .Connected || cstate == .StreamsRunning) {
if ((call.currentParams?.videoEnabled ?? false) && !CoreManagerDelegate.speaker_already_enabled && !CallManager.instance().bluetoothEnabled) { if ((call.currentParams?.videoEnabled ?? false) && !CallManager.speaker_already_enabled && !CallManager.instance().bluetoothEnabled) {
CallManager.instance().enableSpeaker(enable: true) CallManager.instance().enableSpeaker(enable: true)
CoreManagerDelegate.speaker_already_enabled = true CallManager.speaker_already_enabled = true
} }
} }

View file

@ -30,7 +30,6 @@ enum LinphoneError: Error {
class LinphoneLoggingServiceManager: LoggingServiceDelegate { class LinphoneLoggingServiceManager: LoggingServiceDelegate {
init(config: Config, log: LoggingService?, domain: String) throws { init(config: Config, log: LoggingService?, domain: String) throws {
if let log = log { if let log = log {
super.init()
let debugLevel = config.getInt(section: "app", key: "debugenable_preference", defaultValue: LogLevel.Debug.rawValue) let debugLevel = config.getInt(section: "app", key: "debugenable_preference", defaultValue: LogLevel.Debug.rawValue)
let debugEnabled = (debugLevel >= LogLevel.Debug.rawValue && debugLevel < LogLevel.Error.rawValue) let debugEnabled = (debugLevel >= LogLevel.Debug.rawValue && debugLevel < LogLevel.Error.rawValue)
@ -46,7 +45,7 @@ class LinphoneLoggingServiceManager: LoggingServiceDelegate {
} }
} }
override func onLogMessageWritten(logService: LoggingService, domain: String, level: LogLevel, message: String) { func onLogMessageWritten(logService: LoggingService, domain: String, level: LogLevel, message: String) {
let levelStr: String let levelStr: String
switch level { switch level {

View file

@ -31,13 +31,11 @@ var needToStop: Bool = false
var coreStopped: Bool = false var coreStopped: Bool = false
var log: LoggingService! var log: LoggingService!
class NotificationViewController: UIViewController, UNNotificationContentExtension { class NotificationViewController: UIViewController, UNNotificationContentExtension, ChatMessageDelegate, CoreDelegate {
var lc: Core? var lc: Core?
var config: Config! var config: Config!
var logDelegate: LinphoneLoggingServiceManager! var logDelegate: LinphoneLoggingServiceManager!
var msgDelegate: LinphoneChatMessageManager!
var coreDelegate: LinphoneCoreManager!
override func viewDidLoad() { override func viewDidLoad() {
super.viewDidLoad() super.viewDidLoad()
@ -120,9 +118,8 @@ class NotificationViewController: UIViewController, UNNotificationContentExtensi
let local = try lc!.createAddress(address: localAddress) let local = try lc!.createAddress(address: localAddress)
let room = lc!.findChatRoom(peerAddr: peer, localAddr: local) let room = lc!.findChatRoom(peerAddr: peer, localAddr: local)
if let room = room { if let room = room {
msgDelegate = LinphoneChatMessageManager()
let chatMsg = try room.createMessage(message: replyText) let chatMsg = try room.createMessage(message: replyText)
chatMsg.addDelegate(delegate: msgDelegate) chatMsg.addDelegate(delegate: self)
chatMsg.send() chatMsg.send()
room.markAsRead() room.markAsRead()
} }
@ -140,8 +137,7 @@ class NotificationViewController: UIViewController, UNNotificationContentExtensi
logDelegate = try! LinphoneLoggingServiceManager(config: config, log: log, domain: "msgNotificationContent") logDelegate = try! LinphoneLoggingServiceManager(config: config, log: log, domain: "msgNotificationContent")
lc = try! Factory.Instance.createSharedCoreWithConfig(config: config, systemContext: nil, appGroupId: APP_GROUP_ID, mainCore: false) lc = try! Factory.Instance.createSharedCoreWithConfig(config: config, systemContext: nil, appGroupId: APP_GROUP_ID, mainCore: false)
coreDelegate = LinphoneCoreManager() lc!.addDelegate(delegate: self)
lc!.addDelegate(delegate: coreDelegate)
try lc!.start() try lc!.start()
log.message(message: "core started") log.message(message: "core started")
@ -162,23 +158,19 @@ class NotificationViewController: UIViewController, UNNotificationContentExtensi
} }
} }
class LinphoneCoreManager: CoreDelegate { func onGlobalStateChanged(core: Core, state gstate: GlobalState, message: String) {
override func onGlobalStateChanged(core: Core, state gstate: GlobalState, message: String) { log.message(message: "global state changed: \(gstate) : \(message) \n")
log.message(message: "global state changed: \(gstate) : \(message) \n") if (gstate == .Shutdown) {
if (gstate == .Shutdown) { needToStop = true
needToStop = true } else if (gstate == .Off) {
} else if (gstate == .Off) { coreStopped = true
coreStopped = true }
} }
}
}
class LinphoneChatMessageManager: ChatMessageDelegate { func onMsgStateChanged(message: ChatMessage, state: ChatMessage.State) {
override func onMsgStateChanged(message: ChatMessage, state: ChatMessage.State) { log.message(message: "msg state changed: \(state)\n")
log.message(message: "msg state changed: \(state)\n") if (state == .Delivered) {
if (state == .Delivered) { isReplySent = true
isReplySent = true }
} }
}
}
} }