Add ringing UI

This commit is contained in:
Niels Andriesse 2021-08-18 13:07:15 +10:00
parent 8280748b39
commit baf9e4e9d4
4 changed files with 25 additions and 8 deletions

View File

@ -56,12 +56,11 @@ final class CallVC : UIViewController, WebRTCSessionDelegate {
return result
}()
private lazy var callEndedLabel: UILabel = {
private lazy var callInfoLabel: UILabel = {
let result = UILabel()
result.textColor = .white
result.font = .boldSystemFont(ofSize: Values.veryLargeFontSize)
result.textAlignment = .center
result.text = "Call Ended"
result.alpha = 0
return result
}()
@ -96,6 +95,8 @@ final class CallVC : UIViewController, WebRTCSessionDelegate {
}
titleLabel.text = contact?.displayName(for: Contact.Context.regular) ?? sessionID
if case .offer = mode {
callInfoLabel.alpha = 1
callInfoLabel.text = "Ringing..."
Storage.write { transaction in
self.webRTCSession.sendOffer(to: self.sessionID, using: transaction).retainUntilComplete()
}
@ -129,15 +130,15 @@ final class CallVC : UIViewController, WebRTCSessionDelegate {
closeButton.translatesAutoresizingMaskIntoConstraints = false
closeButton.pin(.left, to: .left, of: view)
closeButton.pin(.top, to: .top, of: view, withInset: 32)
// Title view
// Title label
view.addSubview(titleLabel)
titleLabel.translatesAutoresizingMaskIntoConstraints = false
titleLabel.center(.vertical, in: closeButton)
titleLabel.center(.horizontal, in: view)
// Call ended label
view.addSubview(callEndedLabel)
callEndedLabel.translatesAutoresizingMaskIntoConstraints = false
callEndedLabel.center(in: view)
// Call info label
view.addSubview(callInfoLabel)
callInfoLabel.translatesAutoresizingMaskIntoConstraints = false
callInfoLabel.center(in: view)
}
override func viewDidAppear(_ animated: Bool) {
@ -151,13 +152,20 @@ final class CallVC : UIViewController, WebRTCSessionDelegate {
}
// MARK: Interaction
func handleAnswerMessage(_ message: CallMessage) {
UIView.animate(withDuration: 0.25) {
self.callInfoLabel.alpha = 0
}
}
func handleEndCallMessage(_ message: CallMessage) {
print("[Calls] Ending call.")
callInfoLabel.text = "Call Ended"
WebRTCSession.current?.dropConnection()
WebRTCSession.current = nil
UIView.animate(withDuration: 0.25) {
self.remoteVideoView.alpha = 0
self.callEndedLabel.alpha = 1
self.callInfoLabel.alpha = 1
}
Timer.scheduledTimer(withTimeInterval: 2, repeats: false) { _ in
self.presentingViewController?.dismiss(animated: true, completion: nil)

View File

@ -25,6 +25,13 @@ extension AppDelegate {
presentingVC.present(alert, animated: true, completion: nil)
}
}
// Answer messages
MessageReceiver.handleAnswerCallMessage = { message in
DispatchQueue.main.async {
guard let callVC = CurrentAppContext().frontmostViewController() as? CallVC else { return }
callVC.handleAnswerMessage(message)
}
}
// End call messages
MessageReceiver.handleEndCallMessage = { message in
DispatchQueue.main.async {

View File

@ -277,6 +277,7 @@ extension MessageReceiver {
print("[Calls] Received answer message.")
let sdp = RTCSessionDescription(type: .answer, sdp: message.sdps![0])
getWebRTCSession().handleRemoteSDP(sdp, from: message.sender!)
handleAnswerCallMessage?(message)
case .provisionalAnswer: break // TODO: Implement
case let .iceCandidates(sdpMLineIndexes, sdpMids):
var candidates: [RTCIceCandidate] = []

View File

@ -3,6 +3,7 @@ import SessionUtilitiesKit
public enum MessageReceiver {
private static var lastEncryptionKeyPairRequest: [String:Date] = [:]
public static var handleOfferCallMessage: ((CallMessage) -> Void)?
public static var handleAnswerCallMessage: ((CallMessage) -> Void)?
public static var handleEndCallMessage: ((CallMessage) -> Void)?
public enum Error : LocalizedError {