NetNewsWire/iOS/MainWindow/MainWindowController.swift

89 lines
2.2 KiB
Swift
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// MainWindowController.swift
// NetNewsWire-iOS
//
// Created by Brent Simmons on 2/2/25.
// Copyright © 2025 Ranchero Software. All rights reserved.
//
import Foundation
import UIKit
final class MainWindowController {
let window: UIWindow
let rootSplitViewController: RootSplitViewController
let sidebarViewController = SidebarViewController()
let timelineViewController = TimelineViewController()
let articleViewController = ArticleViewController()
let coordinator: SceneCoordinator
init() {
let window = UIWindow(frame: UIScreen.main.bounds)
self.window = window
let rootSplitViewController = RootSplitViewController(
sidebarViewController: sidebarViewController,
timelineViewController: timelineViewController,
articleViewController: articleViewController
)
self.coordinator = SceneCoordinator(rootSplitViewController: rootSplitViewController)
rootSplitViewController.coordinator = coordinator
rootSplitViewController.delegate = coordinator
self.rootSplitViewController = rootSplitViewController
window.rootViewController = rootSplitViewController
window.tintColor = AppColor.accent
updateUserInterfaceStyle()
UINavigationBar.appearance().scrollEdgeAppearance = UINavigationBarAppearance()
window.makeKeyAndVisible()
Task { @MainActor in
// Ensure Feeds view shows on first run on iPad  otherwise the UI is empty.
if UIDevice.current.userInterfaceIdiom == .pad && AppDefaults.isFirstRun {
rootSplitViewController.show(.primary)
}
}
}
// MARK: - API
func resetFocus() {
coordinator.resetFocus()
}
func suspend() {
coordinator.suspend()
}
func cleanUp(conditional: Bool) {
coordinator.cleanUp(conditional: conditional)
}
func dismissIfLaunchingFromExternalAction() {
coordinator.dismissIfLaunchingFromExternalAction()
}
func handle(_ response: UNNotificationResponse) {
coordinator.handle(response)
}
}
private extension MainWindowController {
func updateUserInterfaceStyle() {
assert(Thread.isMainThread)
let updatedStyle = AppDefaults.userInterfaceColorPalette.uiUserInterfaceStyle
if window.overrideUserInterfaceStyle != updatedStyle {
window.overrideUserInterfaceStyle = updatedStyle
}
}
}