Selaa lähdekoodia

Merge pull request #666 from deltachat/fix-qr-scan

Fix qr scan
bjoern 5 vuotta sitten
vanhempi
commit
10c88dbf2e

+ 5 - 1
deltachat-ios/Controller/QrCodeReaderController.swift

@@ -131,6 +131,10 @@ class QrCodeReaderController: UIViewController {
     func startSession() {
         captureSession.startRunning()
     }
+
+    func stopSession() {
+        captureSession.stopRunning()
+    }
 }
 
 extension QrCodeReaderController: AVCaptureMetadataOutputObjectsDelegate {
@@ -139,8 +143,8 @@ extension QrCodeReaderController: AVCaptureMetadataOutputObjectsDelegate {
         if let metadataObj = metadataObjects[0] as? AVMetadataMachineReadableCodeObject {
             if supportedCodeTypes.contains(metadataObj.type) {
                 if metadataObj.stringValue != nil {
-                    self.delegate?.handleQrCode(metadataObj.stringValue!)
                     self.captureSession.stopRunning()
+                    self.delegate?.handleQrCode(metadataObj.stringValue!)
                 }
             }
         }

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

@@ -7,6 +7,7 @@ class QrPageController: UIPageViewController, ProgressAlertHandler {
     private let dcContext: DcContext
     weak var progressAlert: UIAlertController?
     var progressObserver: Any?
+    var qrCodeReaderController: QrCodeReaderController?
 
     private var selectedIndex: Int = 0
 
@@ -45,7 +46,19 @@ class QrPageController: UIPageViewController, ProgressAlertHandler {
         )
     }
 
+    override func viewWillAppear(_ animated: Bool) {
+        // QrCodeReaderController::viewWillAppear() is on called on section change, not on main-tab change
+        if let qrCodeReaderController = self.qrCodeReaderController {
+            qrCodeReaderController.startSession()
+        }
+    }
+
     override func viewWillDisappear(_ animated: Bool) {
+        // QrCodeReaderController::viewWillDisappear() is on called on section change, not on main-tab change
+        if let qrCodeReaderController = self.qrCodeReaderController {
+            qrCodeReaderController.stopSession()
+        }
+
         self.progressObserver = nil
     }
 
@@ -56,6 +69,7 @@ class QrPageController: UIPageViewController, ProgressAlertHandler {
             setViewControllers([qrController], direction: .reverse, animated: true, completion: nil)
         } else {
             let qrCodeReaderController = makeQRReader()
+            self.qrCodeReaderController = qrCodeReaderController
             setViewControllers([qrCodeReaderController], direction: .forward, animated: true, completion: nil)
         }
     }
@@ -99,10 +113,7 @@ extension QrPageController: UIPageViewControllerDataSource, UIPageViewController
 extension QrPageController: QrCodeReaderDelegate {
 
     func handleQrCode(_ code: String) {
-        self.processQrCode(code)
-    }
-
-    private func processQrCode(_ code: String) {
+        self.coordinator?.showChats()
         let qrParsed: DcLot = self.dcContext.checkQR(qrCode: code)
         let state = Int32(qrParsed.state)
         switch state {

+ 7 - 1
deltachat-ios/Coordinator/AppCoordinator.swift

@@ -11,7 +11,7 @@ class AppCoordinator: NSObject, Coordinator {
     private let window: UIWindow
     private let dcContext: DcContext
     private let qrTab = 0
-    private let chatsTab = 1
+    public  let chatsTab = 1
     private let settingsTab = 2
 
     private let appStateRestorer = AppStateRestorer.shared
@@ -225,6 +225,12 @@ class QrViewCoordinator: Coordinator {
         self.navigationController = navigationController
     }
 
+    func showChats() {
+        if let appDelegate = UIApplication.shared.delegate as? AppDelegate {
+            appDelegate.appCoordinator.showTab(index: appDelegate.appCoordinator.chatsTab)
+        }
+    }
+
     func showChat(chatId: Int) {
         if let appDelegate = UIApplication.shared.delegate as? AppDelegate {
             appDelegate.appCoordinator.showChat(chatId: chatId)