|  |  |  | 
 | 
					
						
							|  |  |  | final class ScanQRCodeWrapperVC : BaseVC { | 
					
						
							|  |  |  |     var delegate: (UIViewController & OWSQRScannerDelegate)? = nil | 
					
						
							|  |  |  |     var isPresentedModally = false | 
					
						
							|  |  |  |     private let message: String | 
					
						
							|  |  |  |     private let scanQRCodeVC = OWSQRCodeScanningViewController() | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     // MARK: Settings | 
					
						
							|  |  |  |     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() | 
					
						
							|  |  |  |         // Set up navigation bar if needed | 
					
						
							|  |  |  |         if isPresentedModally { | 
					
						
							|  |  |  |             navigationItem.leftBarButtonItem = UIBarButtonItem(barButtonSystemItem: .stop, target: self, action: #selector(close)) | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         setUpGradientBackground() | 
					
						
							|  |  |  |         // 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.textColor = Colors.text | 
					
						
							|  |  |  |         explanationLabel.font = .systemFont(ofSize: Values.smallFontSize) | 
					
						
							|  |  |  |         explanationLabel.numberOfLines = 0 | 
					
						
							|  |  |  |         explanationLabel.lineBreakMode = .byWordWrapping | 
					
						
							|  |  |  |         explanationLabel.textAlignment = .center | 
					
						
							|  |  |  |         bottomView.addSubview(explanationLabel) | 
					
						
							|  |  |  |         explanationLabel.autoPinWidthToSuperview(withMargin: 32) | 
					
						
							|  |  |  |         explanationLabel.autoPinHeightToSuperview(withMargin: 32) | 
					
						
							|  |  |  |         // Title | 
					
						
							|  |  |  |         title = "Scan QR Code" | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     override func viewDidAppear(_ animated: Bool) { | 
					
						
							|  |  |  |         super.viewDidAppear(animated) | 
					
						
							|  |  |  |         UIDevice.current.ows_setOrientation(.portrait) | 
					
						
							|  |  |  |         DispatchQueue.main.async { [weak self] in | 
					
						
							|  |  |  |             self?.scanQRCodeVC.startCapture() | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     // MARK: Interaction | 
					
						
							|  |  |  |     @objc private func close() { | 
					
						
							|  |  |  |         presentingViewController?.dismiss(animated: true, completion: nil) | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     public func startCapture() { | 
					
						
							|  |  |  |         DispatchQueue.main.async { [weak self] in | 
					
						
							|  |  |  |             self?.scanQRCodeVC.startCapture() | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |