// Copyright © 2022 Rangeproof Pty Ltd. All rights reserved. import UIKit import SessionUIKit final class ScanQRCodeWrapperVC: BaseVC { var delegate: (UIViewController & QRScannerDelegate)? = nil var isPresentedModally = false private let message: String private let scanQRCodeVC = QRCodeScanningViewController() override var supportedInterfaceOrientations: UIInterfaceOrientationMask { return .portrait } // MARK: - Lifecycle init(message: String) { self.message = message super.init(nibName: nil, bundle: nil) } required init?(coder: NSCoder) { preconditionFailure("Use init(message:) instead.") } override init(nibName: String?, bundle: Bundle?) { preconditionFailure("Use init(message:) instead.") } override func viewDidLoad() { super.viewDidLoad() title = "Scan QR Code" // Set up navigation bar if needed if isPresentedModally { navigationItem.leftBarButtonItem = UIBarButtonItem(barButtonSystemItem: .stop, target: self, action: #selector(close)) } // Set up scan QR code VC scanQRCodeVC.scanDelegate = delegate let scanQRCodeVCView = scanQRCodeVC.view! view.addSubview(scanQRCodeVCView) scanQRCodeVCView.pin(.leading, to: .leading, of: view) scanQRCodeVCView.pin(.trailing, to: .trailing, of: view) scanQRCodeVCView.autoPinEdge(.top, to: .top, of: view) scanQRCodeVCView.autoPinToSquareAspectRatio() // Set up bottom view let bottomView = UIView() view.addSubview(bottomView) bottomView.pin(.top, to: .bottom, of: scanQRCodeVCView) bottomView.pin(.leading, to: .leading, of: view) bottomView.pin(.trailing, to: .trailing, of: view) bottomView.pin(.bottom, to: .bottom, of: view) // Set up explanation label let explanationLabel = UILabel() explanationLabel.text = message explanationLabel.themeTextColor = .textPrimary explanationLabel.font = .systemFont(ofSize: Values.smallFontSize) explanationLabel.textAlignment = .center explanationLabel.lineBreakMode = .byWordWrapping explanationLabel.numberOfLines = 0 bottomView.addSubview(explanationLabel) explanationLabel.autoPinWidthToSuperview(withMargin: 32) explanationLabel.autoPinHeightToSuperview(withMargin: 32) } override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) UIDevice.current.ows_setOrientation(.portrait) self.scanQRCodeVC.startCapture() } // MARK: - Interaction @objc private func close() { presentingViewController?.dismiss(animated: true, completion: nil) } public func startCapture() { self.scanQRCodeVC.startCapture() } }