diff --git a/Signal/src/view controllers/CallViewController.swift b/Signal/src/view controllers/CallViewController.swift index 3bb961a5f..ef6f248dd 100644 --- a/Signal/src/view controllers/CallViewController.swift +++ b/Signal/src/view controllers/CallViewController.swift @@ -170,13 +170,14 @@ class CallViewController: UIViewController, CallDelegate { var hangUpButton: UIButton! var muteButton: UIButton! var speakerPhoneButton: UIButton! - // TODO: Which call states does this apply to? - var textMessageButton: UIButton! + var ongoingTextMessageButton: UIButton! var videoButton: UIButton! // MARK: Incoming Call Controls - var incomingCallControlsRow: UIView! + var incomingCallView: UIView! + + var incomingTextMessageButton: UIButton! var acceptIncomingButton: UIButton! var declineIncomingButton: UIButton! @@ -233,7 +234,12 @@ class CallViewController: UIViewController, CallDelegate { blurView = UIVisualEffectView(effect: blurEffect) self.view.addSubview(blurView) - // Contact views + createContactViews() + createOngoingCallControls() + createIncomingCallControls() + } + + func createContactViews() { contactNameLabel = UILabel() contactNameLabel.font = UIFont.ows_lightFont(withSize:ScaleFromIPhone5To7Plus(32, 40)) contactNameLabel.textColor = UIColor.white @@ -246,62 +252,78 @@ class CallViewController: UIViewController, CallDelegate { contactAvatarView = AvatarImageView() self.view.addSubview(contactAvatarView) + } + + func buttonSize() -> CGFloat { + return ScaleFromIPhone5To7Plus(70, 90) + } + + func createOngoingCallControls() { - // Ongoing call controls - let buttonSize = ScaleFromIPhone5To7Plus(70, 90) - textMessageButton = createButton(imageName:"logoSignal", - action:#selector(didPressTextMessage), - buttonSize:buttonSize) + ongoingTextMessageButton = createButton(imageName:"logoSignal", + action:#selector(didPressTextMessage), + buttonSize:buttonSize()) muteButton = createButton(imageName:"mute-inactive", action:#selector(didPressMute), - buttonSize:buttonSize) + buttonSize:buttonSize()) speakerPhoneButton = createButton(imageName:"speaker-inactive", action:#selector(didPressSpeakerphone), - buttonSize:buttonSize) + buttonSize:buttonSize()) videoButton = createButton(imageName:"video-active", action:#selector(didPressVideo), - buttonSize:buttonSize) + buttonSize:buttonSize()) hangUpButton = createButton(imageName:"endcall", action:#selector(didPressHangup), - buttonSize:buttonSize) - - // A container for 3 rows of ongoing call controls. - ongoingCallView = UIView() - self.view.addSubview(ongoingCallView) - let ongoingCallRows = [ - rowWithSubviews(subviews:[textMessageButton, videoButton], - fixedHeight:buttonSize), - rowWithSubviews(subviews:[muteButton, speakerPhoneButton ], - fixedHeight:buttonSize), - rowWithSubviews(subviews:[hangUpButton], - fixedHeight:buttonSize) - ] - let ongoingCallRowSpacing = ScaleFromIPhone5To7Plus(20, 25) - var lastRow: UIView? - for row in ongoingCallRows { - ongoingCallView.addSubview(row) - row.autoPinWidthToSuperview() - if lastRow != nil { - row.autoPinEdge(.top, to:.bottom, of:lastRow!, withOffset:ongoingCallRowSpacing) - } - lastRow = row - } + buttonSize:buttonSize()) - ongoingCallView.setContentHuggingVerticalHigh() - ongoingCallRows.first!.autoPinEdge(toSuperviewEdge:.top) - ongoingCallRows.last!.autoPinEdge(toSuperviewEdge:.bottom) + ongoingCallView = createContainerForCallControls(controlGroups : [ + [ongoingTextMessageButton, videoButton], + [muteButton, speakerPhoneButton ], + [hangUpButton ], + ]) + } + + func createIncomingCallControls() { - // Incoming call controls + incomingTextMessageButton = createButton(imageName:"logoSignal", + action:#selector(didPressTextMessage), + buttonSize:buttonSize()) acceptIncomingButton = createButton(imageName:"call", action:#selector(didPressAnswerCall), - buttonSize:buttonSize) + buttonSize:buttonSize()) declineIncomingButton = createButton(imageName:"endcall", action:#selector(didPressDeclineCall), - buttonSize:buttonSize) + buttonSize:buttonSize()) + + incomingCallView = createContainerForCallControls(controlGroups : [ + [incomingTextMessageButton], + [acceptIncomingButton, declineIncomingButton ], + ]) + } + + func createContainerForCallControls(controlGroups: [[UIView]]) -> UIView { + let containerView = UIView() + self.view.addSubview(containerView) + var rows: [UIView] = [] + for controlGroup in controlGroups { + rows.append(rowWithSubviews(subviews:controlGroup, + fixedHeight:buttonSize())) + } + let rowspacing = ScaleFromIPhone5To7Plus(20, 25) + var lastRow: UIView? + for row in rows { + containerView.addSubview(row) + row.autoPinWidthToSuperview() + if lastRow != nil { + row.autoPinEdge(.top, to:.bottom, of:lastRow!, withOffset:rowspacing) + } + lastRow = row + } - incomingCallControlsRow = rowWithSubviews(subviews:[acceptIncomingButton, declineIncomingButton], - fixedHeight:buttonSize) - self.view.addSubview(incomingCallControlsRow) + containerView.setContentHuggingVerticalHigh() + rows.first!.autoPinEdge(toSuperviewEdge:.top) + rows.last!.autoPinEdge(toSuperviewEdge:.bottom) + return containerView } func createButton(imageName: String!, action: Selector!, buttonSize: CGFloat!) -> UIButton { @@ -318,7 +340,7 @@ class CallViewController: UIViewController, CallDelegate { // Creates a row view that evenly spaces its subviews horizontally. // If there is only a single subview, it is centered. - func rowWithSubviews(subviews: [UIButton], fixedHeight: CGFloat) -> UIView { + func rowWithSubviews(subviews: [UIView], fixedHeight: CGFloat) -> UIView { let row = UIView() row.setContentHuggingVerticalHigh() row.autoSetDimension(.height, toSize:fixedHeight) @@ -404,9 +426,9 @@ class CallViewController: UIViewController, CallDelegate { ongoingCallView.setContentHuggingVerticalHigh() // Incoming call controls - incomingCallControlsRow.autoPinEdge(toSuperviewEdge:.bottom, withInset:incomingBottomMargin) - incomingCallControlsRow.autoPinWidthToSuperview(withMargin:incomingHMargin) - incomingCallControlsRow.setContentHuggingVerticalHigh() + incomingCallView.autoPinEdge(toSuperviewEdge:.bottom, withInset:incomingBottomMargin) + incomingCallView.autoPinWidthToSuperview(withMargin:incomingHMargin) + incomingCallView.setContentHuggingVerticalHigh() } super.updateViewConstraints() @@ -486,12 +508,11 @@ class CallViewController: UIViewController, CallDelegate { } func incomingCallControls() -> [UIView] { - // TODO: Should this include textMessageButton? - return [ acceptIncomingButton, declineIncomingButton ] + return [ incomingTextMessageButton, acceptIncomingButton, declineIncomingButton ] } func ongoingCallControls() -> [UIView] { - return [ muteButton, speakerPhoneButton, textMessageButton, hangUpButton, videoButton ] + return [ muteButton, speakerPhoneButton, ongoingTextMessageButton, hangUpButton, videoButton ] } // MARK: - Actions