Clean up the window manager and its protocols
This commit is contained in:
committed by
Stefan Ceriu
parent
685d2d083c
commit
2b2b926fdc
@@ -74,31 +74,6 @@ class WindowManager: SecureWindowManagerProtocol {
|
||||
self.dismissWindowAction = dismissWindowAction
|
||||
}
|
||||
|
||||
func registerCoordinator(_ coordinator: CoordinatorProtocol, flowCoordinator: FlowCoordinatorProtocol?, forWindowType type: WindowManagerWindowType) {
|
||||
coordinators[type] = (coordinator, flowCoordinator)
|
||||
openWindowAction(value: type)
|
||||
}
|
||||
|
||||
func closeAllAuxiliaryWindows() {
|
||||
for key in coordinators.keys {
|
||||
dismissWindowAction(value: key)
|
||||
}
|
||||
|
||||
coordinators.removeAll()
|
||||
}
|
||||
|
||||
func windowForType(_ type: WindowManagerWindowType) -> AnyView {
|
||||
guard let coordinator = coordinators[type]?.coordinator else {
|
||||
return AnyView(InstantlyDismissingWindow())
|
||||
}
|
||||
|
||||
// This behaves strangely and gets called late but cleans up enough
|
||||
// and is self contained enough to be just good .. enough
|
||||
return AnyView(coordinator.toPresentable().onDisappear { [weak self] in
|
||||
self?.coordinators[type] = nil
|
||||
})
|
||||
}
|
||||
|
||||
func handleRoute(_ appRoute: AppRoute, windowType: WindowManagerWindowType) {
|
||||
if let flowCoordinator = coordinators[windowType]?.flowCoordinator {
|
||||
flowCoordinator.handleAppRoute(appRoute, animated: true)
|
||||
@@ -167,6 +142,8 @@ class WindowManager: SecureWindowManagerProtocol {
|
||||
mainWindow.makeKey()
|
||||
}
|
||||
|
||||
// MARK: - OrientationManager
|
||||
|
||||
func setOrientation(_ orientation: UIInterfaceOrientationMask) {
|
||||
mainScene?.requestGeometryUpdate(.iOS(interfaceOrientations: orientation))
|
||||
}
|
||||
@@ -175,9 +152,36 @@ class WindowManager: SecureWindowManagerProtocol {
|
||||
appDelegate.orientationLock = orientation
|
||||
}
|
||||
|
||||
// MARK: - Auxiliary window support
|
||||
|
||||
func windowForType(_ type: WindowManagerWindowType) -> AnyView {
|
||||
guard let coordinator = coordinators[type]?.coordinator else {
|
||||
return AnyView(InstantlyDismissingWindow())
|
||||
}
|
||||
|
||||
// This behaves strangely and gets called late but cleans up enough
|
||||
// and is self contained enough to be just good .. enough
|
||||
return AnyView(coordinator.toPresentable().onDisappear { [weak self] in
|
||||
self?.coordinators[type] = nil
|
||||
})
|
||||
}
|
||||
|
||||
func registerCoordinator(_ coordinator: CoordinatorProtocol, flowCoordinator: FlowCoordinatorProtocol?, forWindowType type: WindowManagerWindowType) {
|
||||
coordinators[type] = (coordinator, flowCoordinator)
|
||||
openWindowAction(value: type)
|
||||
}
|
||||
|
||||
func closeAuxiliaryWindow(forType type: WindowManagerWindowType) {
|
||||
dismissWindowAction(value: type)
|
||||
}
|
||||
|
||||
func closeAllAuxiliaryWindows() {
|
||||
for key in coordinators.keys {
|
||||
dismissWindowAction(value: key)
|
||||
}
|
||||
|
||||
coordinators.removeAll()
|
||||
}
|
||||
}
|
||||
|
||||
private class PassthroughWindow: UIWindow {
|
||||
|
||||
@@ -29,13 +29,16 @@ protocol SecureWindowManagerProtocol: WindowManagerProtocol {
|
||||
|
||||
func handleRoute(_ appRoute: AppRoute, windowType: WindowManagerWindowType)
|
||||
|
||||
func windowForType(_ type: WindowManagerWindowType) -> AnyView
|
||||
|
||||
/// Shows the main and overlay window combo, hiding the alternate window.
|
||||
func switchToMain()
|
||||
|
||||
/// Shows the alternate window, hiding the main and overlay combo.
|
||||
func switchToAlternate()
|
||||
|
||||
// MARK: - Auxiliary window support
|
||||
|
||||
/// Used by the Application to retrieve the root view for an auxiliary window
|
||||
func windowForType(_ type: WindowManagerWindowType) -> AnyView
|
||||
}
|
||||
|
||||
/// A window manager that supports switching between a main app window with an overlay and
|
||||
@@ -54,15 +57,22 @@ protocol WindowManagerProtocol: AnyObject, OrientationManagerProtocol {
|
||||
/// All the windows being managed
|
||||
var windows: [UIWindow] { get }
|
||||
|
||||
func registerCoordinator(_ coordinator: CoordinatorProtocol, flowCoordinator: FlowCoordinatorProtocol?, forWindowType type: WindowManagerWindowType)
|
||||
|
||||
func closeAllAuxiliaryWindows()
|
||||
|
||||
/// Makes the global search window key. Used to get automatic text field focus.
|
||||
func showGlobalSearch()
|
||||
|
||||
func hideGlobalSearch()
|
||||
|
||||
// MARK: - Auxiliary window support
|
||||
|
||||
/// Register a coordinator and it's respective flow (if any) within the WindowManager which in turn
|
||||
/// invokes the Application's `OpenWindowAction`
|
||||
func registerCoordinator(_ coordinator: CoordinatorProtocol,
|
||||
flowCoordinator: FlowCoordinatorProtocol?,
|
||||
forWindowType type: WindowManagerWindowType)
|
||||
|
||||
/// Closes any window previously opened by registering a coordinator
|
||||
func closeAllAuxiliaryWindows()
|
||||
|
||||
/// Closes a previously opened window for the given type.
|
||||
func closeAuxiliaryWindow(forType type: WindowManagerWindowType)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user