Pārlūkot izejas kodu

add dedicated 'add second device' button to welcome screen

B. Petersen 2 gadi atpakaļ
vecāks
revīzija
8003690912

+ 26 - 3
deltachat-ios/Controller/AccountSetup/WelcomeViewController.swift

@@ -22,9 +22,18 @@ class WelcomeViewController: UIViewController, ProgressAlertHandler {
             guard let self = self else { return }
             self.showAccountSetupController()
         }
+        view.onAddSecondDevice  = { [weak self] in
+            guard let self = self else { return }
+            let qrReader = QrCodeReaderController(title: String.localized("multidevice_receiver_title"),
+                        addHints: "➊ " + String.localized("multidevice_same_network_hint") + "\n\n"
+                            +     "➋ " + String.localized("multidevice_open_settings_on_other_device") )
+            qrReader.delegate = self
+            self.qrCodeReader = qrReader
+            self.navigationController?.pushViewController(qrReader, animated: true)
+        }
         view.onScanQRCode  = { [weak self] in
             guard let self = self else { return }
-            let qrReader = QrCodeReaderController()
+            let qrReader = QrCodeReaderController(title: String.localized("scan_invitation_code"))
             qrReader.delegate = self
             self.qrCodeReader = qrReader
             self.navigationController?.pushViewController(qrReader, animated: true)
@@ -462,6 +471,7 @@ extension WelcomeViewController: QrCodeReaderDelegate {
 class WelcomeContentView: UIView {
 
     var onLogin: VoidFunction?
+    var onAddSecondDevice: VoidFunction?
     var onScanQRCode: VoidFunction?
     var onImportBackup: VoidFunction?
 
@@ -499,7 +509,7 @@ class WelcomeContentView: UIView {
     }()
 
     private lazy var buttonStack: UIStackView = {
-        let stack = UIStackView(arrangedSubviews: [loginButton, qrCodeButton, importBackupButton])
+        let stack = UIStackView(arrangedSubviews: [loginButton, addSecondDeviceButton, qrCodeButton, importBackupButton])
         stack.axis = .vertical
         stack.spacing = 15
         return stack
@@ -520,9 +530,18 @@ class WelcomeContentView: UIView {
         return button
     }()
 
+    private lazy var addSecondDeviceButton: UIButton = {
+        let button = UIButton()
+        let title = String.localized("multidevice_receiver_title")
+        button.setTitleColor(UIColor.systemBlue, for: .normal)
+        button.setTitle(title, for: .normal)
+        button.addTarget(self, action: #selector(addSecondDeviceButtonPressed(_:)), for: .touchUpInside)
+        return button
+    }()
+
     private lazy var qrCodeButton: UIButton = {
         let button = UIButton()
-        let title = String.localized("qrscan_title")
+        let title = String.localized("scan_invitation_code")
         button.setTitleColor(UIColor.systemBlue, for: .normal)
         button.setTitle(title, for: .normal)
         button.addTarget(self, action: #selector(qrCodeButtonPressed(_:)), for: .touchUpInside)
@@ -622,6 +641,10 @@ class WelcomeContentView: UIView {
          onLogin?()
      }
 
+     @objc private func addSecondDeviceButtonPressed(_ sender: UIButton) {
+         onAddSecondDevice?()
+     }
+
      @objc private func qrCodeButtonPressed(_ sender: UIButton) {
          onScanQRCode?()
      }

+ 15 - 6
deltachat-ios/Controller/QrCodeReaderController.swift

@@ -7,7 +7,8 @@ class QrCodeReaderController: UIViewController {
     weak var delegate: QrCodeReaderDelegate?
 
     private let captureSession = AVCaptureSession()
-    
+
+    private var addHints: String?
     private var infoLabelBottomConstraint: NSLayoutConstraint?
     private var infoLabelCenterConstraint: NSLayoutConstraint?
 
@@ -17,17 +18,16 @@ class QrCodeReaderController: UIViewController {
         return videoPreviewLayer
     }()
 
-    private var infoLabel: UILabel = {
+    private lazy var infoLabel: UILabel = {
         let label = UILabel()
         label.translatesAutoresizingMaskIntoConstraints = false
-        label.text = String.localized("qrscan_hint")
+        label.text = addHints ?? String.localized("qrscan_hint")
         label.lineBreakMode = .byWordWrapping
         label.numberOfLines = 0
         label.textAlignment = .center
         label.textColor = .white
         label.adjustsFontForContentSizeCategory = true
-        label.font = .preferredFont(forTextStyle: .subheadline)
-
+        label.font = .preferredFont(forTextStyle: .title2)
         return label
     }()
 
@@ -35,11 +35,20 @@ class QrCodeReaderController: UIViewController {
         AVMetadataObject.ObjectType.qr
     ]
 
+    init(title: String, addHints: String? = nil) {
+        super.init(nibName: nil, bundle: nil)
+        self.title = title
+        self.addHints = addHints // TODO: if set, show in overlay or so
+    }
+
+    required init?(coder: NSCoder) {
+        fatalError("init(coder:) has not been implemented")
+    }
+
     // MARK: - lifecycle
     override func viewDidLoad() {
         super.viewDidLoad()
         self.edgesForExtendedLayout = []
-        title = String.localized("qrscan_title")
         self.setupInfoLabel()
         if AVCaptureDevice.authorizationStatus(for: .video) == .authorized {
             self.setupQRCodeScanner()

+ 1 - 1
deltachat-ios/Controller/QrPageController.swift

@@ -118,7 +118,7 @@ class QrPageController: UIPageViewController {
 
     // MARK: - factory
     private func makeQRReader() -> QrCodeReaderController {
-        let qrReader = QrCodeReaderController()
+        let qrReader = QrCodeReaderController(title: String.localized("qrscan_title"))
         qrReader.delegate = self
         return qrReader
     }