mirror of
https://github.com/Ranchero-Software/NetNewsWire
synced 2025-08-12 06:26:36 +00:00
Create and use MainWindowController for iOS.
This commit is contained in:
88
iOS/MainWindow/MainWindowController.swift
Normal file
88
iOS/MainWindow/MainWindowController.swift
Normal file
@@ -0,0 +1,88 @@
|
||||
//
|
||||
// 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 = MainFeedViewController()
|
||||
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
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user