diff --git a/Signal/src/Loki/Settings/DeviceLinkingModal.swift b/Signal/src/Loki/Settings/DeviceLinkingModal.swift index 2d6553348..903f7321a 100644 --- a/Signal/src/Loki/Settings/DeviceLinkingModal.swift +++ b/Signal/src/Loki/Settings/DeviceLinkingModal.swift @@ -14,6 +14,12 @@ final class DeviceLinkingModal : Modal, DeviceLinkingSessionDelegate { private lazy var spinner = NVActivityIndicatorView(frame: CGRect.zero, type: .circleStrokeSpin, color: .white, padding: nil) + private lazy var qrCodeImageView: UIImageView = { + let result = UIImageView() + result.contentMode = .scaleAspectFit + return result + }() + private lazy var titleLabel: UILabel = { let result = UILabel() result.textColor = Theme.primaryColor @@ -87,12 +93,33 @@ final class DeviceLinkingModal : Modal, DeviceLinkingSessionDelegate { } override func populateContentView() { - let stackView = UIStackView(arrangedSubviews: [ topSpacer, spinner, UIView.spacer(withHeight: 8), titleLabel, subtitleLabel, mnemonicLabel, buttonStackView, bottomSpacer ]) + let stackView = UIStackView(arrangedSubviews: [ topSpacer, titleLabel, subtitleLabel, mnemonicLabel, buttonStackView, bottomSpacer ]) + switch mode { + case .master: + stackView.insertArrangedSubview(qrCodeImageView, at: 1) + stackView.insertArrangedSubview(UIView.spacer(withHeight: 2), at: 2) + case .slave: + stackView.insertArrangedSubview(spinner, at: 1) + stackView.insertArrangedSubview(UIView.spacer(withHeight: 8), at: 2) + } contentView.addSubview(stackView) stackView.spacing = 16 stackView.axis = .vertical - spinner.set(.height, to: 64) - spinner.startAnimating() + switch mode { + case .master: + qrCodeImageView.set(.height, to: 128) + let hexEncodedPublicKey = OWSIdentityManager.shared().identityKeyPair()!.hexEncodedPublicKey + let data = hexEncodedPublicKey.data(using: .utf8) + let filter = CIFilter(name: "CIQRCodeGenerator")! + filter.setValue(data, forKey: "inputMessage") + let qrCodeAsCIImage = filter.outputImage! + let scaledQRCodeAsCIImage = qrCodeAsCIImage.transformed(by: CGAffineTransform(scaleX: 4.8, y: 4.8)) + let qrCode = UIImage(ciImage: scaledQRCodeAsCIImage) + qrCodeImageView.image = qrCode + case .slave: + spinner.set(.height, to: 64) + spinner.startAnimating() + } titleLabel.text = { switch mode { case .master: return NSLocalizedString("Waiting for Device", comment: "") @@ -125,8 +152,7 @@ final class DeviceLinkingModal : Modal, DeviceLinkingSessionDelegate { func requestUserAuthorization(for deviceLink: DeviceLink) { self.deviceLink = deviceLink topSpacer.isHidden = true - spinner.stopAnimating() - spinner.isHidden = true + qrCodeImageView.isHidden = true titleLabel.text = NSLocalizedString("Linking Request Received", comment: "") subtitleLabel.text = NSLocalizedString("Please check that the words below match the ones shown on your other device", comment: "") let hexEncodedPublicKey = deviceLink.slave.hexEncodedPublicKey.removing05PrefixIfNeeded()