Show QR code on device linking modal in master mode

pull/70/head
Niels Andriesse 5 years ago
parent 4baba50fa9
commit 7629752f8d

@ -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()

Loading…
Cancel
Save