Explorar el Código

refactor appCoordinator - loginScreen optional - explecitly remove welcomeContentView on deinit

nayooti hace 5 años
padre
commit
baca5d6b0e

+ 10 - 0
deltachat-ios/Controller/WelcomeViewController.swift

@@ -43,6 +43,16 @@ class WelcomeViewController: UIViewController, ProgressAlertHandler {
         fatalError("init(coder:) has not been implemented")
     }
 
+    deinit {
+        if #available(iOS 13, *) {}
+        else {
+            /*
+             for pre-iOS 13 versions there was an issue that welcomeView was not deallocated after login - reason unknown
+             */
+            welcomeView.removeFromSuperview()
+        }
+    }
+
     // MARK: - lifecycle
     override func viewDidLoad() {
         super.viewDidLoad()

+ 23 - 29
deltachat-ios/Coordinator/AppCoordinator.swift

@@ -26,22 +26,7 @@ class AppCoordinator: NSObject, Coordinator {
         return tabBarController
     }()
 
-    private lazy var loginController: UIViewController = {
-        let accountSetupController = AccountSetupController(dcContext: dcContext, editView: false)
-        let nav = UINavigationController(rootViewController: accountSetupController)
-        let coordinator = AccountSetupCoordinator(dcContext: dcContext, navigationController: nav)
-        coordinator.onLoginSuccess = {
-            [unowned self] in
-            self.loginController.dismiss(animated: true) {
-                self.presentTabBarController()
-            }
-        }
-        childCoordinators.append(coordinator)
-        accountSetupController.coordinator = coordinator
-        return nav
-    }()
-
-    // MARK: viewControllers
+    // MARK: base viewControllers
 
     private lazy var qrPageController: UINavigationController = {
         let pageController = QrPageController(dcContext: dcContext)
@@ -77,9 +62,9 @@ class AppCoordinator: NSObject, Coordinator {
         return nav
     }()
 
-
     private var welcomeController: WelcomeViewController?
     private var profileInfoNavigationController: UINavigationController?
+    private weak var loginNavigationController: UINavigationController?
 
     init(window: UIWindow, dcContext: DcContext) {
         self.window = window
@@ -149,6 +134,7 @@ class AppCoordinator: NSObject, Coordinator {
     func presentTabBarController() {
         window.rootViewController = tabBarController
         welcomeController = nil
+        loginNavigationController = nil
         window.makeKeyAndVisible()
         showTab(index: chatsTab)
     }
@@ -164,17 +150,23 @@ class AppCoordinator: NSObject, Coordinator {
 extension AppCoordinator: WelcomeCoordinator {
 
     func presentLogin() {
-        // add cancel button item to accountSetupController
-        if let nav = loginController as? UINavigationController, let loginController = nav.topViewController as? AccountSetupController {
-            loginController.navigationItem.leftBarButtonItem = UIBarButtonItem(
-                title: String.localized("cancel"),
-                style: .done,
-                target: self, action: #selector(cancelButtonPressed(_:))
-            )
-            loginController.coordinator?.onLoginSuccess = handleLoginSuccess
+        let loginController = AccountSetupController(dcContext: dcContext, editView: false)
+        loginController.navigationItem.leftBarButtonItem = UIBarButtonItem(
+            title: String.localized("cancel"),
+            style: .done,
+            target: self, action: #selector(cancelButtonPressed(_:))
+        )
+        let loginNav = UINavigationController(rootViewController: loginController)
+        loginNav.modalPresentationStyle = .fullScreen
+        let coordinator = AccountSetupCoordinator(dcContext: dcContext, navigationController: loginNav)
+        coordinator.onLoginSuccess = {
+            [unowned self] in
+            self.handleLoginSuccess()
         }
-        loginController.modalPresentationStyle = .fullScreen
-        welcomeController?.present(loginController, animated: true, completion: nil)
+        childCoordinators.append(coordinator)
+        loginController.coordinator = coordinator
+        self.loginNavigationController = loginNav
+        welcomeController?.present(loginNav, animated: true, completion: nil)
     }
 
     func handleQRAccountCreationSuccess() {
@@ -189,11 +181,13 @@ extension AppCoordinator: WelcomeCoordinator {
     }
 
     func handleLoginSuccess() {
+        welcomeController?.dismiss(animated: false, completion: nil)
         presentTabBarController()
     }
 
     @objc private func cancelButtonPressed(_ sender: UIBarButtonItem) {
-        loginController.dismiss(animated: true, completion: nil)
+        loginNavigationController?.dismiss(animated: true, completion: nil)
+        loginNavigationController = nil
     }
 }
 
@@ -451,7 +445,7 @@ class NewChatCoordinator: Coordinator {
         contactDetailController.coordinator = coordinator
         navigationController.pushViewController(contactDetailController, animated: true)
     }
-    
+
 }
 
 // MARK: - GroupChatDetailCoordinator