// // Copyright 2024 New Vector Ltd. // Copyright 2020 Vector Creations Ltd // // SPDX-License-Identifier: AGPL-3.0-only // Please see LICENSE in the repository root for full details. // import UIKit import PushKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { // MARK: - Properties // MARK: Private private var appCoordinator: AppCoordinatorType! private var rootRouter: RootRouterType! private var legacyAppDelegate: LegacyAppDelegate { return AppDelegate.theDelegate() } // MARK: Public /// Call the Riot legacy AppDelegate @objc class func theDelegate() -> LegacyAppDelegate { guard let legacyAppDelegate = LegacyAppDelegate.the() else { fatalError("[AppDelegate] theDelegate property should not be nil") } return legacyAppDelegate } // UIApplicationDelegate properties /// Main application window var window: UIWindow? // MARK: - UIApplicationDelegate // MARK: Life cycle func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil) -> Bool { return self.legacyAppDelegate.application(application, willFinishLaunchingWithOptions: launchOptions) } func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // Setup window let window = UIWindow(frame: UIScreen.main.bounds) self.window = window // Create AppCoordinator self.rootRouter = RootRouter(window: window) let appCoordinator = AppCoordinator(router: self.rootRouter, window: window) appCoordinator.start() self.legacyAppDelegate.delegate = appCoordinator self.appCoordinator = appCoordinator // Call legacy AppDelegate self.legacyAppDelegate.window = window self.legacyAppDelegate.application(application, didFinishLaunchingWithOptions: launchOptions) // bwi: set the tint color for the alert buttons and tableview cells UIView.appearance(whenContainedInInstancesOf: [UIAlertController.self]).tintColor = ThemeService.shared().theme.tintColor UITableViewCell.appearance().tintColor = ThemeService.shared().theme.tintColor UISwitch.appearance().thumbTintColor = ThemeService.shared().theme.backgroundColor UISwitch.appearance().onTintColor = ThemeService.shared().theme.tintColor // bwi: testing mdm config // DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { // let dict = ["home_server_url": "", "external_url_scheme": ""] // UserDefaults.standard.setValue(dict, forKey: "com.apple.configuration.managed") // } return true } func applicationDidBecomeActive(_ application: UIApplication) { self.legacyAppDelegate.applicationDidBecomeActive(application) } func applicationWillResignActive(_ application: UIApplication) { self.legacyAppDelegate.applicationWillResignActive(application) } func applicationDidEnterBackground(_ application: UIApplication) { self.legacyAppDelegate.applicationDidEnterBackground(application) } func applicationWillEnterForeground(_ application: UIApplication) { self.legacyAppDelegate.applicationWillEnterForeground(application) } func applicationWillTerminate(_ application: UIApplication) { self.legacyAppDelegate.applicationWillTerminate(application) } func applicationDidReceiveMemoryWarning(_ application: UIApplication) { self.legacyAppDelegate.applicationDidReceiveMemoryWarning(application) } func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool { return self.appCoordinator.open(url: url, options: options) } // MARK: User Activity Continuation func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool { return self.legacyAppDelegate.application(application, continue: userActivity, restorationHandler: restorationHandler) } // MARK: Push Notifications func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { self.legacyAppDelegate.application(application, didRegisterForRemoteNotificationsWithDeviceToken: deviceToken) } func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) { self.legacyAppDelegate.application(application, didFailToRegisterForRemoteNotificationsWithError: error) } func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { self.legacyAppDelegate.application(application, didReceiveRemoteNotification: userInfo, fetchCompletionHandler: completionHandler) } }