Prechádzať zdrojové kódy

Merge pull request #856 from deltachat/qr_wording_follow_up

update QRViewController on profile name change
bjoern 5 rokov pred
rodič
commit
e7da38f24a

+ 15 - 4
deltachat-ios/Controller/QrPageController.swift

@@ -9,7 +9,7 @@ class QrPageController: UIPageViewController, ProgressAlertHandler {
 
     private var selectedIndex: Int = 0
 
-    private func getQrCodeHint() -> String {
+    private var qrCodeHint: String {
         var qrCodeHint = ""
         if dcContext.isConfigured() {
             // we cannot use dc_contact_get_displayname() as this would result in "Me" instead of the real name
@@ -55,7 +55,7 @@ class QrPageController: UIPageViewController, ProgressAlertHandler {
         delegate = self
         navigationItem.titleView = qrSegmentControl
 
-        let qrController = QrViewController(dcContext: dcContext, qrCodeHint: getQrCodeHint())
+        let qrController = QrViewController(dcContext: dcContext, qrCodeHint: qrCodeHint)
         setViewControllers(
             [qrController],
             direction: .forward,
@@ -69,6 +69,7 @@ class QrPageController: UIPageViewController, ProgressAlertHandler {
         if let qrCodeReaderController = self.qrCodeReaderController {
             qrCodeReaderController.startSession()
         }
+        updateHintTextIfNeeded()    // needed in case user changes profile name
     }
 
     override func viewWillDisappear(_ animated: Bool) {
@@ -83,7 +84,7 @@ class QrPageController: UIPageViewController, ProgressAlertHandler {
     // MARK: - actions
     @objc private func qrSegmentControlChanged(_ sender: UISegmentedControl) {
         if sender.selectedSegmentIndex == 0 {
-            let qrController = QrViewController(dcContext: dcContext, qrCodeHint: getQrCodeHint())
+            let qrController = QrViewController(dcContext: dcContext, qrCodeHint: qrCodeHint)
             setViewControllers([qrController], direction: .reverse, animated: true, completion: nil)
         } else {
             let qrCodeReaderController = makeQRReader()
@@ -99,6 +100,16 @@ class QrPageController: UIPageViewController, ProgressAlertHandler {
         return qrReader
     }
 
+    // MARK: - update
+    private func updateHintTextIfNeeded() {
+        for case let qrViewController as QrViewController in self.viewControllers ?? [] {
+            let newHint = qrCodeHint
+            if qrCodeHint != qrViewController.qrCodeHint {
+                qrViewController.qrCodeHint = newHint
+            }
+        }
+    }
+
     // MARK: - coordinator
     private func showChats() {
         if let appDelegate = UIApplication.shared.delegate as? AppDelegate {
@@ -119,7 +130,7 @@ extension QrPageController: UIPageViewControllerDataSource, UIPageViewController
         if viewController is QrViewController {
             return nil
         }
-        return QrViewController(dcContext: dcContext, qrCodeHint: getQrCodeHint())
+        return QrViewController(dcContext: dcContext, qrCodeHint: qrCodeHint)
     }
 
     func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {

+ 18 - 8
deltachat-ios/Controller/QrViewController.swift

@@ -21,7 +21,12 @@ class QrViewController: UIViewController {
         return view
     }()
 
-    private let qrCodeHint: String
+    var qrCodeHint: String {
+        willSet {
+            let qrCode = dcContext.getSecurejoinQr(chatId: chatId)
+            qrContentView.update(qrCode: qrCode, hint: newValue)
+        }
+    }
     private let chatId: Int
 
     init(dcContext: DcContext, chatId: Int? = 0, qrCodeHint: String?) {
@@ -91,7 +96,7 @@ class QrViewContentView: UIView {
         return view
     }()
 
-    private var hintLabel: UILabel = {
+    private lazy var hintLabel: UILabel = {
         let label = UILabel.init()
         label.lineBreakMode = .byWordWrapping
         label.numberOfLines = 0
@@ -115,7 +120,16 @@ class QrViewContentView: UIView {
 
     init(qrCode: String?, hint: String) {
         super.init(frame: .zero)
-        hintLabel.text = hint
+        update(qrCode: qrCode, hint: hint)
+        setupSubviews()
+    }
+
+    required init?(coder: NSCoder) {
+        fatalError("init(coder:) has not been implemented")
+    }
+
+    // MARK: - update
+    func update(qrCode: String?, hint: String?) {
         if let qrCode = qrCode {
             qrCodeView.generateCode(
                 qrCode,
@@ -123,11 +137,7 @@ class QrViewContentView: UIView {
                 backgroundColor: .white
             )
         }
-        setupSubviews()
-    }
-
-    required init?(coder: NSCoder) {
-        fatalError("init(coder:) has not been implemented")
+        hintLabel.text = hint
     }
 
     private func setupSubviews() {