39 lines
1.9 KiB
Swift
39 lines
1.9 KiB
Swift
|
|
@objc(LKQRCodeModal)
|
|
final class QRCodeModal : Modal {
|
|
|
|
override func populateContentView() {
|
|
// Label
|
|
let label = UILabel()
|
|
label.font = UIFont.ows_dynamicTypeSubheadlineClamped
|
|
label.text = NSLocalizedString("This is your personal QR code. Other people can scan it to start a secure conversation with you.", comment: "")
|
|
label.numberOfLines = 0
|
|
label.textAlignment = .center
|
|
label.lineBreakMode = .byWordWrapping
|
|
label.textColor = UIColor.ows_white
|
|
// Image view
|
|
let imageView = UIImageView()
|
|
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)
|
|
imageView.image = qrCode
|
|
// Cancel button
|
|
let buttonHeight = cancelButton.button.titleLabel!.font.pointSize * 48 / 17
|
|
cancelButton.set(.height, to: buttonHeight)
|
|
// Stack view
|
|
let stackView = UIStackView(arrangedSubviews: [ UIView.spacer(withHeight: 2), label, UIView.spacer(withHeight: 2), imageView, cancelButton ])
|
|
stackView.axis = .vertical
|
|
stackView.spacing = 16
|
|
stackView.alignment = .center
|
|
contentView.addSubview(stackView)
|
|
stackView.pin(.leading, to: .leading, of: contentView, withInset: 16)
|
|
stackView.pin(.top, to: .top, of: contentView, withInset: 16)
|
|
contentView.pin(.trailing, to: .trailing, of: stackView, withInset: 16)
|
|
contentView.pin(.bottom, to: .bottom, of: stackView, withInset: 16)
|
|
}
|
|
}
|