An advanced Ethereum/EVM mobile wallet
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
alpha-wallet-ios/Trust/AppCoordinator.swift

142 lines
4.2 KiB

// Copyright SIX DAY LLC. All rights reserved.
import Foundation
import UIKit
class AppCoordinator: NSObject, Coordinator {
let navigationController: UINavigationController
lazy var welcomeViewController: WelcomeViewController = {
let controller = WelcomeViewController()
controller.delegate = self
return controller
}()
lazy var touchRegistrar: TouchRegistrar = {
return TouchRegistrar(keystore: self.keystore)
}()
let pushNotificationRegistrar = PushNotificationsRegistrar()
private var keystore: Keystore
var coordinators: [Coordinator] = []
init(
window: UIWindow,
keystore: Keystore,
navigationController: UINavigationController = NavigationController()
) {
self.navigationController = navigationController
self.keystore = keystore
super.init()
window.rootViewController = navigationController
window.makeKeyAndVisible()
}
func start() {
inializers()
handleNotifications()
applyStyle()
resetToWelcomeScreen()
if keystore.hasAccounts {
showTransactions(for: keystore.recentlyUsedAccount ?? keystore.accounts.first!)
}
pushNotificationRegistrar.reRegister()
}
func showTransactions(for account: Account) {
let coordinator = InCoordinator(
navigationController: navigationController,
account: account,
keystore: keystore
)
coordinator.delegate = self
coordinator.start()
addCoordinator(coordinator)
}
func inializers() {
let initializers: [Initializer] = [
CrashReportInitializer(),
LokaliseInitializer(),
SkipBackupFilesInitializer(),
]
initializers.forEach { $0.perform() }
touchRegistrar.register()
}
func handleNotifications() {
UIApplication.shared.applicationIconBadgeNumber = 0
}
func resetToWelcomeScreen() {
navigationController.setNavigationBarHidden(true, animated: false)
navigationController.viewControllers = [welcomeViewController]
}
@objc func reset() {
touchRegistrar.unregister()
pushNotificationRegistrar.unregister()
coordinators.removeAll()
navigationController.dismiss(animated: true, completion: nil)
resetToWelcomeScreen()
}
func didRegisterForRemoteNotificationsWithDeviceToken(deviceToken: Data) {
pushNotificationRegistrar.didRegister(
with: deviceToken,
addresses: keystore.accounts.map { $0.address }
)
}
func showInitialWalletCoordinator(entryPoint: WalletEntryPoint) {
let coordinator = InitialWalletCreationCoordinator(
navigationController: navigationController,
keystore: keystore,
entryPoint: entryPoint
)
coordinator.delegate = self
coordinator.start()
addCoordinator(coordinator)
}
}
extension AppCoordinator: WelcomeViewControllerDelegate {
func didPressCreateWallet(in viewController: WelcomeViewController) {
showInitialWalletCoordinator(entryPoint: .createInstantWallet)
}
func didPressImportWallet(in viewController: WelcomeViewController) {
showInitialWalletCoordinator(entryPoint: .importWallet)
}
}
extension AppCoordinator: InitialWalletCreationCoordinatorDelegate {
func didCancel(in coordinator: InitialWalletCreationCoordinator) {
coordinator.navigationController.dismiss(animated: true, completion: nil)
removeCoordinator(coordinator)
}
func didAddAccount(_ account: Account, in coordinator: InitialWalletCreationCoordinator) {
coordinator.navigationController.dismiss(animated: true, completion: nil)
removeCoordinator(coordinator)
showTransactions(for: account)
}
}
extension AppCoordinator: InCoordinatorDelegate {
func didCancel(in coordinator: InCoordinator) {
removeCoordinator(coordinator)
pushNotificationRegistrar.reRegister()
reset()
}
func didUpdateAccounts(in coordinator: InCoordinator) {
pushNotificationRegistrar.reRegister()
}
}