Simplify CallViewController.

// FREEBIE
pull/1/head
Matthew Chen 7 years ago
parent 149c64ce49
commit a9ce1cde2f

@ -19,8 +19,8 @@ class CallViewController: UIViewController, CallObserver, CallServiceObserver, R
// MARK: Properties
var thread: TSContactThread!
var call: SignalCall!
let thread: TSContactThread
let call: SignalCall
var hasDismissed = false
// MARK: Views
@ -121,18 +121,23 @@ class CallViewController: UIViewController, CallObserver, CallServiceObserver, R
// MARK: Initializers
@available(*, unavailable, message: "use init(call:) constructor instead.")
required init?(coder aDecoder: NSCoder) {
contactsManager = Environment.getCurrent().contactsManager
callUIAdapter = Environment.getCurrent().callUIAdapter
allAudioSources = Set(callUIAdapter.audioService.availableInputs)
self.call = SignalCall.outgoingCall(localId: UUID(), remotePhoneNumber: "+1234567890")
self.thread = TSContactThread.getOrCreateThread(contactId: call.remotePhoneNumber)
super.init(coder: aDecoder)
observeNotifications()
}
required init() {
required init(call: SignalCall) {
contactsManager = Environment.getCurrent().contactsManager
callUIAdapter = Environment.getCurrent().callUIAdapter
allAudioSources = Set(callUIAdapter.audioService.availableInputs)
self.call = call
self.thread = TSContactThread.getOrCreateThread(contactId: call.remotePhoneNumber)
super.init(nibName: nil, bundle: nil)
observeNotifications()
}
@ -146,7 +151,6 @@ class CallViewController: UIViewController, CallObserver, CallServiceObserver, R
NotificationCenter.default.addObserver(forName: CallAudioServiceSessionChanged, object: nil, queue: nil) { [weak self] _ in
self?.didChangeAudioSession()
}
}
deinit {
@ -177,12 +181,6 @@ class CallViewController: UIViewController, CallObserver, CallServiceObserver, R
override func viewDidLoad() {
super.viewDidLoad()
guard let thread = self.thread else {
Logger.error("\(TAG) tried to show call call without specifying thread.")
showCallFailed(error: OWSErrorMakeAssertionError())
return
}
createViews()
contactNameLabel.text = contactsManager.displayName(forPhoneIdentifier: thread.contactIdentifier())
@ -193,7 +191,6 @@ class CallViewController: UIViewController, CallObserver, CallServiceObserver, R
strongSelf.updateAvatarImage()
}
assert(call != nil)
// Subscribe for future call updates
call.addObserverAndSyncState(observer: self)
@ -669,30 +666,26 @@ class CallViewController: UIViewController, CallObserver, CallServiceObserver, R
case .answering:
return NSLocalizedString("IN_CALL_SECURING", comment: "Call setup status label")
case .connected:
if let call = self.call {
let callDuration = call.connectionDuration()
let callDurationDate = Date(timeIntervalSinceReferenceDate:callDuration)
if dateFormatter == nil {
dateFormatter = DateFormatter()
dateFormatter!.dateFormat = "HH:mm:ss"
dateFormatter!.timeZone = TimeZone(identifier:"UTC")!
}
var formattedDate = dateFormatter!.string(from: callDurationDate)
if formattedDate.hasPrefix("00:") {
// Don't show the "hours" portion of the date format unless the
// call duration is at least 1 hour.
formattedDate = formattedDate.substring(from: formattedDate.index(formattedDate.startIndex, offsetBy: 3))
} else {
// If showing the "hours" portion of the date format, strip any leading
// zeroes.
if formattedDate.hasPrefix("0") {
formattedDate = formattedDate.substring(from: formattedDate.index(formattedDate.startIndex, offsetBy: 1))
}
}
return formattedDate
let callDuration = call.connectionDuration()
let callDurationDate = Date(timeIntervalSinceReferenceDate:callDuration)
if dateFormatter == nil {
dateFormatter = DateFormatter()
dateFormatter!.dateFormat = "HH:mm:ss"
dateFormatter!.timeZone = TimeZone(identifier:"UTC")!
}
var formattedDate = dateFormatter!.string(from: callDurationDate)
if formattedDate.hasPrefix("00:") {
// Don't show the "hours" portion of the date format unless the
// call duration is at least 1 hour.
formattedDate = formattedDate.substring(from: formattedDate.index(formattedDate.startIndex, offsetBy: 3))
} else {
return NSLocalizedString("IN_CALL_TALKING", comment: "Call setup status label")
// If showing the "hours" portion of the date format, strip any leading
// zeroes.
if formattedDate.hasPrefix("0") {
formattedDate = formattedDate.substring(from: formattedDate.index(formattedDate.startIndex, offsetBy: 1))
}
}
return formattedDate
case .remoteBusy:
return NSLocalizedString("END_CALL_RESPONDER_IS_BUSY", comment: "Call setup status label")
case .localFailure:
@ -830,11 +823,8 @@ class CallViewController: UIViewController, CallObserver, CallServiceObserver, R
*/
func didPressHangup(sender: UIButton) {
Logger.info("\(TAG) called \(#function)")
if let call = self.call {
callUIAdapter.localHangupCall(call)
} else {
Logger.warn("\(TAG) hung up, but call was unexpectedly nil")
}
callUIAdapter.localHangupCall(call)
dismissIfPossible(shouldDelay:false)
}
@ -842,11 +832,8 @@ class CallViewController: UIViewController, CallObserver, CallServiceObserver, R
func didPressMute(sender muteButton: UIButton) {
Logger.info("\(TAG) called \(#function)")
muteButton.isSelected = !muteButton.isSelected
if let call = self.call {
callUIAdapter.setIsMuted(call: call, isMuted: muteButton.isSelected)
} else {
Logger.warn("\(TAG) pressed mute, but call was unexpectedly nil")
}
callUIAdapter.setIsMuted(call: call, isMuted: muteButton.isSelected)
}
func didPressAudioSource(sender button: UIButton) {
@ -862,15 +849,11 @@ class CallViewController: UIViewController, CallObserver, CallServiceObserver, R
func didPressSpeakerphone(sender button: UIButton) {
Logger.info("\(TAG) called \(#function)")
button.isSelected = !button.isSelected
if let call = self.call {
if button.isSelected {
callUIAdapter.setAudioSource(call: call, audioSource: AudioSource.builtInSpeaker)
} else {
// use default audio source
callUIAdapter.setAudioSource(call: call, audioSource: nil)
}
if button.isSelected {
callUIAdapter.setAudioSource(call: call, audioSource: AudioSource.builtInSpeaker)
} else {
Logger.warn("\(TAG) pressed mute, but call was unexpectedly nil")
// use default audio source
callUIAdapter.setAudioSource(call: call, audioSource: nil)
}
}
@ -883,28 +866,14 @@ class CallViewController: UIViewController, CallObserver, CallServiceObserver, R
func didPressAnswerCall(sender: UIButton) {
Logger.info("\(TAG) called \(#function)")
guard let call = self.call else {
Logger.error("\(TAG) call was unexpectedly nil. Terminating call.")
let text = String(format: CallStrings.callStatusFormat,
NSLocalizedString("END_CALL_UNCATEGORIZED_FAILURE", comment: "Call setup status label"))
self.callStatusLabel.text = text
dismissIfPossible(shouldDelay:true)
return
}
callUIAdapter.answerCall(call)
}
func didPressVideo(sender: UIButton) {
Logger.info("\(TAG) called \(#function)")
let hasLocalVideo = !sender.isSelected
if let call = self.call {
callUIAdapter.setHasLocalVideo(call: call, hasLocalVideo: hasLocalVideo)
} else {
Logger.warn("\(TAG) pressed video, but call was unexpectedly nil")
}
callUIAdapter.setHasLocalVideo(call: call, hasLocalVideo: hasLocalVideo)
}
/**
@ -913,11 +882,7 @@ class CallViewController: UIViewController, CallObserver, CallServiceObserver, R
func didPressDeclineCall(sender: UIButton) {
Logger.info("\(TAG) called \(#function)")
if let call = self.call {
callUIAdapter.declineCall(call)
} else {
Logger.warn("\(TAG) denied call, but call was unexpectedly nil")
}
callUIAdapter.declineCall(call)
dismissIfPossible(shouldDelay:false)
}

@ -304,8 +304,6 @@ protocol CallServiceObserver: class {
Logger.debug("\(self.TAG) setting peerConnectionClient in \(#function) for call: \(call.identifiersForLogs)")
self.peerConnectionClient = peerConnectionClient
self.fulfillPeerConnectionClientPromise?()
self.fulfillPeerConnectionClientPromise = nil
self.rejectPeerConnectionClientPromise = nil
return peerConnectionClient.createOffer()
}.then { (sessionDescription: HardenedRTCSessionDescription) -> Promise<Void> in
@ -378,8 +376,6 @@ protocol CallServiceObserver: class {
}
fulfillReadyToSendIceUpdatesPromise()
self.fulfillReadyToSendIceUpdatesPromise = nil
self.rejectReadyToSendIceUpdatesPromise = nil
}
/**
@ -599,8 +595,6 @@ protocol CallServiceObserver: class {
let peerConnectionClient = PeerConnectionClient(iceServers: iceServers, delegate: self, callDirection: .incoming, useTurnOnly: useTurnOnly)
self.peerConnectionClient = peerConnectionClient
self.fulfillPeerConnectionClientPromise?()
self.fulfillPeerConnectionClientPromise = nil
self.rejectPeerConnectionClientPromise = nil
let offerSessionDescription = RTCSessionDescription(type: .offer, sdp: callerSessionDescription)
let constraints = RTCMediaConstraints(mandatoryConstraints: nil, optionalConstraints: nil)
@ -892,8 +886,6 @@ protocol CallServiceObserver: class {
assert(self.fulfillCallConnectedPromise != nil)
// cancel connection timeout
self.fulfillCallConnectedPromise?()
self.fulfillCallConnectedPromise = nil
self.rejectCallConnectedPromise = nil
call.state = .connected

@ -34,10 +34,7 @@ extension CallUIAdaptee {
internal func showCall(_ call: SignalCall) {
AssertIsOnMainThread()
let callViewController = CallViewController()
let thread = TSContactThread.getOrCreateThread(contactId: call.remotePhoneNumber)
callViewController.call = call
callViewController.thread = thread
let callViewController = CallViewController(call:call)
callViewController.modalTransitionStyle = .crossDissolve
guard let presentingViewController = Environment.getCurrent().signalsViewController else {

Loading…
Cancel
Save