Ensure audio service observation of call is always correctly wired up.

// FREEBIE
pull/1/head
Matthew Chen 8 years ago
parent 007d9aca7e
commit 17fe3f66c0

@ -82,6 +82,11 @@ fileprivate let timeoutSeconds = 60
// All Observer methods will be invoked from the main thread.
protocol CallServiceObserver: class {
/**
* Fired whenever the call changes.
*/
func didUpdateCall(call: SignalCall?)
/**
* Fired whenever the local or remote video track become active or inactive.
*/
@ -132,6 +137,10 @@ protocol CallServiceObserver: class {
call?.addObserverAndSyncState(observer: self)
updateIsVideoEnabled()
for observer in observers {
observer.value?.didUpdateCall(call:call)
}
}
}

@ -5,6 +5,7 @@
import Foundation
import PromiseKit
import CallKit
import WebRTC
protocol CallUIAdaptee {
var notificationsAdapter: CallNotificationsAdapter { get }
@ -60,7 +61,7 @@ extension CallUIAdaptee {
* Notify the user of call related activities.
* Driven by either a CallKit or System notifications adaptee
*/
@objc class CallUIAdapter: NSObject {
@objc class CallUIAdapter: NSObject, CallServiceObserver {
let TAG = "[CallUIAdapter]"
private let adaptee: CallUIAdaptee
@ -86,13 +87,15 @@ extension CallUIAdaptee {
}
audioService = CallAudioService(handleRinging: adaptee.hasManualRinger)
super.init()
callService.addObserverAndSyncState(observer: self)
}
internal func reportIncomingCall(_ call: SignalCall, thread: TSContactThread) {
AssertIsOnMainThread()
call.addObserverAndSyncState(observer: audioService)
let callerName = self.contactsManager.displayName(forPhoneIdentifier: call.remotePhoneNumber)
adaptee.reportIncomingCall(call, callerName: callerName)
}
@ -108,8 +111,6 @@ extension CallUIAdaptee {
AssertIsOnMainThread()
let call = adaptee.startOutgoingCall(handle: handle)
call.addObserverAndSyncState(observer: audioService)
return call
}
@ -207,4 +208,20 @@ extension CallUIAdaptee {
return adaptee.hasManualRinger
}
// MARK: - CallServiceObserver
internal func didUpdateCall(call: SignalCall?) {
AssertIsOnMainThread()
call?.addObserverAndSyncState(observer: audioService)
}
internal func didUpdateVideoTracks(localVideoTrack: RTCVideoTrack?,
remoteVideoTrack: RTCVideoTrack?) {
AssertIsOnMainThread()
// Do nothing.
}
}

@ -774,6 +774,10 @@ class CallViewController: UIViewController, CallObserver, CallServiceObserver, R
// MARK: - CallServiceObserver
internal func didUpdateCall(call: SignalCall?) {
// Do nothing.
}
internal func didUpdateVideoTracks(localVideoTrack: RTCVideoTrack?,
remoteVideoTrack: RTCVideoTrack?) {
AssertIsOnMainThread()

Loading…
Cancel
Save