Browse Source

replaced AppCoordinator by one that is more convenient and more powerful

Bastian van de Wetering 6 years ago
parent
commit
0d7ab0df01

+ 41 - 1
deltachat-ios.xcodeproj/project.pbxproj

@@ -462,6 +462,11 @@
 		7A9FB1421FB061E2001FEA36 /* deltachat-ios */ = {
 			isa = PBXGroup;
 			children = (
+				AE851AC3227C695900ED86F0 /* View */,
+				AE851AC2227C695000ED86F0 /* Helper */,
+				AE851AC1227C694300ED86F0 /* Coordinator */,
+				AE851AC0227C693B00ED86F0 /* Controller */,
+				AE851ABA227C692600ED86F0 /* Model */,
 				78C7036A21D46752005D4525 /* deltachat-ios.entitlements */,
 				AEACE2DE1FB3246400DCDD78 /* Message.swift */,
 				7A9FB15B1FB07364001FEA36 /* libraries */,
@@ -482,7 +487,6 @@
 				789E879C21D6DF86003ED1C5 /* ProgressHud.swift */,
 				7032FF8E2149C1DB00B7EC83 /* BaseController.swift */,
 				78ED839021D5929800243125 /* TopViews */,
-				78E45E3221D3CBC000D4B15E /* AppTabBarController.swift */,
 				AEACE2DC1FB323CA00DCDD78 /* ChatViewController.swift */,
 				78E45E3D21D3D28C00D4B15E /* NavigationController.swift */,
 				7092474020B3869500AF8799 /* ContactProfileViewController.swift */,
@@ -608,6 +612,42 @@
 			path = "deltachat-iosTests";
 			sourceTree = "<group>";
 		};
+		AE851ABA227C692600ED86F0 /* Model */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			path = Model;
+			sourceTree = "<group>";
+		};
+		AE851AC0227C693B00ED86F0 /* Controller */ = {
+			isa = PBXGroup;
+			children = (
+				78E45E3221D3CBC000D4B15E /* AppTabBarController.swift */,
+			);
+			path = Controller;
+			sourceTree = "<group>";
+		};
+		AE851AC1227C694300ED86F0 /* Coordinator */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			path = Coordinator;
+			sourceTree = "<group>";
+		};
+		AE851AC2227C695000ED86F0 /* Helper */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			path = Helper;
+			sourceTree = "<group>";
+		};
+		AE851AC3227C695900ED86F0 /* View */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			path = View;
+			sourceTree = "<group>";
+		};
 /* End PBXGroup section */
 
 /* Begin PBXNativeTarget section */

+ 70 - 2
deltachat-ios/AppCoordinator.swift

@@ -8,11 +8,11 @@
 
 import UIKit
 
-protocol Coordinator {
+protocol CoordinatorDeprecated {
   func setupViewControllers(window: UIWindow)
 }
 
-class AppCoordinator: Coordinator {
+class AppCoordinatorDeprecated: CoordinatorDeprecated {
   let baseController = BaseController()
 
   private var appTabBarController: AppTabBarController = AppTabBarController()
@@ -34,3 +34,71 @@ class AppCoordinator: Coordinator {
     baseController.present(chatNavigationController, animated: false, completion: nil)
   }
 }
+
+protocol Coordinator: class {
+	var rootViewController: UIViewController { get }
+}
+
+class AppCoordinator: NSObject, Coordinator, UITabBarControllerDelegate {
+
+	private let window: UIWindow
+
+	var rootViewController: UIViewController {
+		return tabBarController
+	}
+
+	private var childCoordinators:[Coordinator] = []
+
+	private lazy var tabBarController: UITabBarController = {
+		let tabBarController = UITabBarController()
+		tabBarController.viewControllers = [settingsController]
+		// put viewControllers here
+		tabBarController.delegate = self
+		tabBarController.tabBar.tintColor = DCColors.primary
+		// tabBarController.tabBar.isTranslucent = false
+		return tabBarController
+	}()
+
+	// MARK: viewControllers
+	private lazy var contactsController: ContactListController = {
+		let controller = ContactListController()
+		return controller
+	}()
+
+	private lazy var settingsController: UIViewController = {
+		let controller = SettingsViewController()
+		let nav = NavigationController(rootViewController: controller)
+		let settingsImage = UIImage(named: "settings")
+		nav.tabBarItem = UITabBarItem(title: "Settings", image: settingsImage, tag: 4)
+		let coordinator = SettingsCoordinator(rootViewController: nav)
+		self.childCoordinators.append(coordinator)
+		controller.coordinator = coordinator
+		return nav
+	}()
+
+	init(window: UIWindow) {
+		self.window = window
+		super.init()
+		window.rootViewController = rootViewController
+		window.makeKeyAndVisible()
+	}
+
+	public func start() {
+		tabBarController.selectedIndex = 0
+	}
+
+	public func presentLoginController() {
+
+	}
+
+
+}
+
+class SettingsCoordinator: Coordinator {
+	var rootViewController: UIViewController
+
+	init(rootViewController: UIViewController) {
+		self.rootViewController = rootViewController
+	}
+
+}

+ 8 - 3
deltachat-ios/AppDelegate.swift

@@ -25,7 +25,9 @@ enum ApplicationState {
 
 @UIApplicationMain
 class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate {
-  static let appCoordinator = AppCoordinator()
+
+	var appCoordinator: AppCoordinator!
+  static let appCoordinatorDeprecated = AppCoordinatorDeprecated()
 	static var progress: Float = 0	// TODO: delete
   static var lastErrorDuringConfig: String?
   private var backgroundTask: UIBackgroundTaskIdentifier = .invalid
@@ -74,12 +76,15 @@ class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterD
     //       - second param remains nil (user data for more than one mailbox)
     open()
     let isConfigured = dc_is_configured(mailboxPointer) != 0
-    AppDelegate.appCoordinator.setupViewControllers(window: window)
+    // AppDelegate.appCoordinatorDeprecated.setupViewControllers(window: window)
+		self.appCoordinator = AppCoordinator(window: window)
+		appCoordinator.start()
     UIApplication.shared.setMinimumBackgroundFetchInterval(UIApplication.backgroundFetchIntervalMinimum)
     start()
     registerForPushNotifications()
     if !isConfigured {
-      AppDelegate.appCoordinator.presentAccountSetup(animated: false)
+			appCoordinator.presentLoginController()
+			//AppDelegate.appCoordinatorDeprecated.presentAccountSetup(animated: false)
     }
     return true
   }

+ 1 - 0
deltachat-ios/AppTabBarController.swift → deltachat-ios/Controller/AppTabBarController.swift

@@ -8,6 +8,7 @@
 
 import UIKit
 
+// TODO: delete
 class AppTabBarController: UITabBarController {
   override func viewDidLoad() {
     super.viewDidLoad()

+ 3 - 0
deltachat-ios/TopViews/SettingsController.swift

@@ -13,6 +13,9 @@ import QuickTableViewController
 import UIKit
 
 internal final class SettingsViewController: QuickTableViewController {
+
+	weak var coordinator: SettingsCoordinator?
+
   let documentInteractionController = UIDocumentInteractionController()
   var backupProgressObserver: Any?
   var configureProgressObserver: Any?

+ 1 - 1
deltachat-ios/events.swift

@@ -91,7 +91,7 @@ public func callbackSwift(event: CInt, data1: CUnsignedLong, data2: CUnsignedLon
       if done {
         UserDefaults.standard.set(true, forKey: Constants.Keys.deltachatUserProvidedCredentialsKey)
         UserDefaults.standard.synchronize()
-        AppDelegate.appCoordinator.setupInnerViewControllers()
+        AppDelegate.appCoordinatorDeprecated.setupInnerViewControllers()
         AppDelegate.lastErrorDuringConfig = nil
       }
     }