diff --git a/ElementX/Sources/AccessibilityTests/AccessibilityTestsAppCoordinator.swift b/ElementX/Sources/AccessibilityTests/AccessibilityTestsAppCoordinator.swift index 7ab95c2eb..5e8f0e71d 100644 --- a/ElementX/Sources/AccessibilityTests/AccessibilityTestsAppCoordinator.swift +++ b/ElementX/Sources/AccessibilityTests/AccessibilityTestsAppCoordinator.swift @@ -13,11 +13,11 @@ import SwiftUI class AccessibilityTestsAppCoordinator: AppCoordinatorProtocol { var windowManager: any SecureWindowManagerProtocol - func handleDeepLink(_ url: URL, isExternalURL: Bool, windowType: WindowManagerWindowType?) -> Bool { + func handleDeepLink(_ url: URL, isExternalURL: Bool, windowType: SecondaryWindowType?) -> Bool { fatalError("Not implemented") } - func handleAppRoute(_ appRoute: AppRoute, windowType: WindowManagerWindowType?) { + func handleAppRoute(_ appRoute: AppRoute, windowType: SecondaryWindowType?) { fatalError("Not implemented.") } diff --git a/ElementX/Sources/Application/AppCoordinator.swift b/ElementX/Sources/Application/AppCoordinator.swift index 3d3980777..6383b4f00 100644 --- a/ElementX/Sources/Application/AppCoordinator.swift +++ b/ElementX/Sources/Application/AppCoordinator.swift @@ -189,9 +189,9 @@ class AppCoordinator: AppCoordinatorProtocol, AuthenticationFlowCoordinatorDeleg } .store(in: &cancellables) - windowManager.auxiliaryWindowsEnabled = !appLockService.isEnabled + windowManager.secondaryWindowsEnabled = !appLockService.isEnabled appLockService.isEnabledPublisher.sink { [weak windowManager] appLockEnabled in - windowManager?.auxiliaryWindowsEnabled = !appLockEnabled + windowManager?.secondaryWindowsEnabled = !appLockEnabled } .store(in: &cancellables) } @@ -240,7 +240,7 @@ class AppCoordinator: AppCoordinatorProtocol, AuthenticationFlowCoordinatorDeleg return true } - func handleAppRoute(_ appRoute: AppRoute, windowType: WindowManagerWindowType?) { + func handleAppRoute(_ appRoute: AppRoute, windowType: SecondaryWindowType?) { if let windowType { windowManager.handleRoute(appRoute, windowType: windowType) return @@ -266,7 +266,7 @@ class AppCoordinator: AppCoordinatorProtocol, AuthenticationFlowCoordinatorDeleg } } - func handleDeepLink(_ url: URL, isExternalURL: Bool, windowType: WindowManagerWindowType?) -> Bool { + func handleDeepLink(_ url: URL, isExternalURL: Bool, windowType: SecondaryWindowType?) -> Bool { // Parse into an AppRoute to redirect these in a type safe way. if let route = appRouteURLParser.route(from: url) { @@ -799,7 +799,7 @@ class AppCoordinator: AppCoordinatorProtocol, AuthenticationFlowCoordinatorDeleg fatalError("User session not setup") } - windowManager.closeAllAuxiliaryWindows() + windowManager.closeAllSecondaryWindows() showLoadingIndicator() diff --git a/ElementX/Sources/Application/AppCoordinatorProtocol.swift b/ElementX/Sources/Application/AppCoordinatorProtocol.swift index 096e1ee61..785d0940f 100644 --- a/ElementX/Sources/Application/AppCoordinatorProtocol.swift +++ b/ElementX/Sources/Application/AppCoordinatorProtocol.swift @@ -12,9 +12,9 @@ import Foundation protocol AppCoordinatorProtocol: CoordinatorProtocol { var windowManager: SecureWindowManagerProtocol { get } - @discardableResult func handleDeepLink(_ url: URL, isExternalURL: Bool, windowType: WindowManagerWindowType?) -> Bool + @discardableResult func handleDeepLink(_ url: URL, isExternalURL: Bool, windowType: SecondaryWindowType?) -> Bool - func handleAppRoute(_ appRoute: AppRoute, windowType: WindowManagerWindowType?) + func handleAppRoute(_ appRoute: AppRoute, windowType: SecondaryWindowType?) func handlePotentialPhishingAttempt(url: URL, openURLAction: @escaping (URL) -> Void) -> Bool diff --git a/ElementX/Sources/Application/Application.swift b/ElementX/Sources/Application/Application.swift index 690fac258..bf092174d 100644 --- a/ElementX/Sources/Application/Application.swift +++ b/ElementX/Sources/Application/Application.swift @@ -81,7 +81,7 @@ struct Application: App { // This is invoked in response of the WindowManager receiving a register // coordinator request and invoking the `OpenWindowAction` with which // it's configured in the task above. - WindowGroup(for: WindowManagerWindowType.self) { $type in + WindowGroup(for: SecondaryWindowType.self) { $type in if let type { appCoordinator.windowManager.windowForType(type) .environment(\.openURL, openURLAction(appCoordinator: appCoordinator, windowType: type)) @@ -91,7 +91,7 @@ struct Application: App { .windowResizability(.contentSize) } - private func openURLAction(appCoordinator: AppCoordinatorProtocol, windowType: WindowManagerWindowType?) -> OpenURLAction { + private func openURLAction(appCoordinator: AppCoordinatorProtocol, windowType: SecondaryWindowType?) -> OpenURLAction { .init { url in if appCoordinator.handleDeepLink(url, isExternalURL: false, windowType: windowType) { return .handled diff --git a/ElementX/Sources/Application/Windowing/WindowManager.swift b/ElementX/Sources/Application/Windowing/WindowManager.swift index c5f79b019..4b866cb9e 100644 --- a/ElementX/Sources/Application/Windowing/WindowManager.swift +++ b/ElementX/Sources/Application/Windowing/WindowManager.swift @@ -23,10 +23,10 @@ class WindowManager: SecureWindowManagerProtocol { private(set) var openWindowAction: OpenWindowAction! private(set) var dismissWindowAction: DismissWindowAction! - var auxiliaryWindowsEnabled = true { + var secondaryWindowsEnabled = true { didSet { - if auxiliaryWindowsEnabled == false { - closeAllAuxiliaryWindows() + if secondaryWindowsEnabled == false { + closeAllSecondaryWindows() } } } @@ -41,7 +41,7 @@ class WindowManager: SecureWindowManagerProtocol { /// A duration that allows window switching to wait a couple of frames to avoid a transition through black. private let windowHideDelay = Duration.milliseconds(33) - private var coordinators: [WindowManagerWindowType: (coordinator: CoordinatorProtocol, flowCoordinator: FlowCoordinatorProtocol?)] = [:] + private var coordinators: [SecondaryWindowType: (coordinator: CoordinatorProtocol, flowCoordinator: FlowCoordinatorProtocol?)] = [:] init(appDelegate: AppDelegate) { self.appDelegate = appDelegate @@ -82,7 +82,7 @@ class WindowManager: SecureWindowManagerProtocol { self.dismissWindowAction = dismissWindowAction } - func handleRoute(_ appRoute: AppRoute, windowType: WindowManagerWindowType) { + func handleRoute(_ appRoute: AppRoute, windowType: SecondaryWindowType) { if let flowCoordinator = coordinators[windowType]?.flowCoordinator { flowCoordinator.handleAppRoute(appRoute, animated: true) } @@ -160,9 +160,9 @@ class WindowManager: SecureWindowManagerProtocol { appDelegate.orientationLock = orientation } - // MARK: - Auxiliary window support + // MARK: - Secondary window support - func windowForType(_ type: WindowManagerWindowType) -> AnyView { + func windowForType(_ type: SecondaryWindowType) -> AnyView { guard let coordinator = coordinators[type]?.coordinator else { return AnyView(InstantlyDismissingWindow()) } @@ -174,9 +174,9 @@ class WindowManager: SecureWindowManagerProtocol { }) } - func registerCoordinator(_ coordinator: CoordinatorProtocol, flowCoordinator: FlowCoordinatorProtocol?, forWindowType type: WindowManagerWindowType) { - if auxiliaryWindowsEnabled == false { - MXLog.error("Cannot register coordinator, auxiliary windows are disabled.") + func registerCoordinator(_ coordinator: CoordinatorProtocol, flowCoordinator: FlowCoordinatorProtocol?, forWindowType type: SecondaryWindowType) { + if secondaryWindowsEnabled == false { + MXLog.error("Cannot register coordinator, secondary windows are disabled.") return } @@ -184,11 +184,11 @@ class WindowManager: SecureWindowManagerProtocol { openWindowAction(value: type) } - func closeAuxiliaryWindow(forType type: WindowManagerWindowType) { + func closeSecondaryWindow(forType type: SecondaryWindowType) { dismissWindowAction(value: type) } - func closeAllAuxiliaryWindows() { + func closeAllSecondaryWindows() { for key in coordinators.keys { dismissWindowAction(value: key) } diff --git a/ElementX/Sources/Application/Windowing/WindowManagerProtocol.swift b/ElementX/Sources/Application/Windowing/WindowManagerProtocol.swift index 41bcc49f3..513eafe16 100644 --- a/ElementX/Sources/Application/Windowing/WindowManagerProtocol.swift +++ b/ElementX/Sources/Application/Windowing/WindowManagerProtocol.swift @@ -8,7 +8,7 @@ import SwiftUI -enum WindowManagerWindowType: Hashable, Codable { +enum SecondaryWindowType: Hashable, Codable { case room(roomID: String) case settings } @@ -27,7 +27,7 @@ protocol SecureWindowManagerProtocol: WindowManagerProtocol { func configure(withOpenWinddowAction openWindowAction: OpenWindowAction, dismissWindowAction: DismissWindowAction) - func handleRoute(_ appRoute: AppRoute, windowType: WindowManagerWindowType) + func handleRoute(_ appRoute: AppRoute, windowType: SecondaryWindowType) /// Shows the main and overlay window combo, hiding the alternate window. func switchToMain() @@ -35,10 +35,10 @@ protocol SecureWindowManagerProtocol: WindowManagerProtocol { /// Shows the alternate window, hiding the main and overlay combo. func switchToAlternate() - // MARK: - Auxiliary window support + // MARK: - Secondary window support - /// Used by the Application to retrieve the root view for an auxiliary window - func windowForType(_ type: WindowManagerWindowType) -> AnyView + /// Used by the Application to retrieve the root view for an secondary window + func windowForType(_ type: SecondaryWindowType) -> AnyView } /// A window manager that supports switching between a main app window with an overlay and @@ -62,21 +62,21 @@ protocol WindowManagerProtocol: AnyObject, OrientationManagerProtocol { func hideGlobalSearch() - // MARK: - Auxiliary window support + // MARK: - Secondary window support - var auxiliaryWindowsEnabled: Bool { get set } + var secondaryWindowsEnabled: Bool { get set } /// 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) + forWindowType type: SecondaryWindowType) /// Closes any window previously opened by registering a coordinator - func closeAllAuxiliaryWindows() + func closeAllSecondaryWindows() /// Closes a previously opened window for the given type. - func closeAuxiliaryWindow(forType type: WindowManagerWindowType) + func closeSecondaryWindow(forType type: SecondaryWindowType) } // sourcery: AutoMockable diff --git a/ElementX/Sources/FlowCoordinators/RoomFlowCoordinator.swift b/ElementX/Sources/FlowCoordinators/RoomFlowCoordinator.swift index 0dc7e0cab..dff39c0e2 100644 --- a/ElementX/Sources/FlowCoordinators/RoomFlowCoordinator.swift +++ b/ElementX/Sources/FlowCoordinators/RoomFlowCoordinator.swift @@ -900,7 +900,7 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol { // iPhone the compact module diffs call the dismissal callback and we present a blank space flow 🙈 if spaceRoomListProxy == nil { navigationStackCoordinator.setRootCoordinator(nil, animated: false) - flowParameters.windowManager.closeAuxiliaryWindow(forType: .room(roomID: roomID)) + flowParameters.windowManager.closeSecondaryWindow(forType: .room(roomID: roomID)) } } diff --git a/ElementX/Sources/Mocks/AppMediatorMock.swift b/ElementX/Sources/Mocks/AppMediatorMock.swift index 37ebf259e..99e470dca 100644 --- a/ElementX/Sources/Mocks/AppMediatorMock.swift +++ b/ElementX/Sources/Mocks/AppMediatorMock.swift @@ -17,8 +17,8 @@ extension AppMediatorMock { mock.underlyingNetworkMonitor = NetworkMonitorMock.default let windowManagerMock = WindowManagerMock() - windowManagerMock.closeAllAuxiliaryWindowsClosure = { } - windowManagerMock.closeAuxiliaryWindowForTypeClosure = { _ in } + windowManagerMock.closeAllSecondaryWindowsClosure = { } + windowManagerMock.closeSecondaryWindowForTypeClosure = { _ in } mock.underlyingWindowManager = windowManagerMock return mock diff --git a/ElementX/Sources/Mocks/Generated/GeneratedMocks.swift b/ElementX/Sources/Mocks/Generated/GeneratedMocks.swift index fdff6a40a..75664dd0d 100644 --- a/ElementX/Sources/Mocks/Generated/GeneratedMocks.swift +++ b/ElementX/Sources/Mocks/Generated/GeneratedMocks.swift @@ -21357,11 +21357,11 @@ class WindowManagerMock: WindowManagerProtocol, @unchecked Sendable { var globalSearchWindow: UIWindow! var alternateWindow: UIWindow! var windows: [UIWindow] = [] - var auxiliaryWindowsEnabled: Bool { - get { return underlyingAuxiliaryWindowsEnabled } - set(value) { underlyingAuxiliaryWindowsEnabled = value } + var secondaryWindowsEnabled: Bool { + get { return underlyingSecondaryWindowsEnabled } + set(value) { underlyingSecondaryWindowsEnabled = value } } - var underlyingAuxiliaryWindowsEnabled: Bool! + var underlyingSecondaryWindowsEnabled: Bool! //MARK: - showGlobalSearch @@ -21462,11 +21462,11 @@ class WindowManagerMock: WindowManagerProtocol, @unchecked Sendable { var registerCoordinatorFlowCoordinatorForWindowTypeCalled: Bool { return registerCoordinatorFlowCoordinatorForWindowTypeCallsCount > 0 } - var registerCoordinatorFlowCoordinatorForWindowTypeReceivedArguments: (coordinator: CoordinatorProtocol, flowCoordinator: FlowCoordinatorProtocol?, type: WindowManagerWindowType)? - var registerCoordinatorFlowCoordinatorForWindowTypeReceivedInvocations: [(coordinator: CoordinatorProtocol, flowCoordinator: FlowCoordinatorProtocol?, type: WindowManagerWindowType)] = [] - var registerCoordinatorFlowCoordinatorForWindowTypeClosure: ((CoordinatorProtocol, FlowCoordinatorProtocol?, WindowManagerWindowType) -> Void)? + var registerCoordinatorFlowCoordinatorForWindowTypeReceivedArguments: (coordinator: CoordinatorProtocol, flowCoordinator: FlowCoordinatorProtocol?, type: SecondaryWindowType)? + var registerCoordinatorFlowCoordinatorForWindowTypeReceivedInvocations: [(coordinator: CoordinatorProtocol, flowCoordinator: FlowCoordinatorProtocol?, type: SecondaryWindowType)] = [] + var registerCoordinatorFlowCoordinatorForWindowTypeClosure: ((CoordinatorProtocol, FlowCoordinatorProtocol?, SecondaryWindowType) -> Void)? - func registerCoordinator(_ coordinator: CoordinatorProtocol, flowCoordinator: FlowCoordinatorProtocol?, forWindowType type: WindowManagerWindowType) { + func registerCoordinator(_ coordinator: CoordinatorProtocol, flowCoordinator: FlowCoordinatorProtocol?, forWindowType type: SecondaryWindowType) { registerCoordinatorFlowCoordinatorForWindowTypeCallsCount += 1 registerCoordinatorFlowCoordinatorForWindowTypeReceivedArguments = (coordinator: coordinator, flowCoordinator: flowCoordinator, type: type) DispatchQueue.main.async { @@ -21474,17 +21474,17 @@ class WindowManagerMock: WindowManagerProtocol, @unchecked Sendable { } registerCoordinatorFlowCoordinatorForWindowTypeClosure?(coordinator, flowCoordinator, type) } - //MARK: - closeAllAuxiliaryWindows + //MARK: - closeAllSecondaryWindows - var closeAllAuxiliaryWindowsUnderlyingCallsCount = 0 - var closeAllAuxiliaryWindowsCallsCount: Int { + var closeAllSecondaryWindowsUnderlyingCallsCount = 0 + var closeAllSecondaryWindowsCallsCount: Int { get { if Thread.isMainThread { - return closeAllAuxiliaryWindowsUnderlyingCallsCount + return closeAllSecondaryWindowsUnderlyingCallsCount } else { var returnValue: Int? = nil DispatchQueue.main.sync { - returnValue = closeAllAuxiliaryWindowsUnderlyingCallsCount + returnValue = closeAllSecondaryWindowsUnderlyingCallsCount } return returnValue! @@ -21492,34 +21492,34 @@ class WindowManagerMock: WindowManagerProtocol, @unchecked Sendable { } set { if Thread.isMainThread { - closeAllAuxiliaryWindowsUnderlyingCallsCount = newValue + closeAllSecondaryWindowsUnderlyingCallsCount = newValue } else { DispatchQueue.main.sync { - closeAllAuxiliaryWindowsUnderlyingCallsCount = newValue + closeAllSecondaryWindowsUnderlyingCallsCount = newValue } } } } - var closeAllAuxiliaryWindowsCalled: Bool { - return closeAllAuxiliaryWindowsCallsCount > 0 + var closeAllSecondaryWindowsCalled: Bool { + return closeAllSecondaryWindowsCallsCount > 0 } - var closeAllAuxiliaryWindowsClosure: (() -> Void)? + var closeAllSecondaryWindowsClosure: (() -> Void)? - func closeAllAuxiliaryWindows() { - closeAllAuxiliaryWindowsCallsCount += 1 - closeAllAuxiliaryWindowsClosure?() + func closeAllSecondaryWindows() { + closeAllSecondaryWindowsCallsCount += 1 + closeAllSecondaryWindowsClosure?() } - //MARK: - closeAuxiliaryWindow + //MARK: - closeSecondaryWindow - var closeAuxiliaryWindowForTypeUnderlyingCallsCount = 0 - var closeAuxiliaryWindowForTypeCallsCount: Int { + var closeSecondaryWindowForTypeUnderlyingCallsCount = 0 + var closeSecondaryWindowForTypeCallsCount: Int { get { if Thread.isMainThread { - return closeAuxiliaryWindowForTypeUnderlyingCallsCount + return closeSecondaryWindowForTypeUnderlyingCallsCount } else { var returnValue: Int? = nil DispatchQueue.main.sync { - returnValue = closeAuxiliaryWindowForTypeUnderlyingCallsCount + returnValue = closeSecondaryWindowForTypeUnderlyingCallsCount } return returnValue! @@ -21527,28 +21527,28 @@ class WindowManagerMock: WindowManagerProtocol, @unchecked Sendable { } set { if Thread.isMainThread { - closeAuxiliaryWindowForTypeUnderlyingCallsCount = newValue + closeSecondaryWindowForTypeUnderlyingCallsCount = newValue } else { DispatchQueue.main.sync { - closeAuxiliaryWindowForTypeUnderlyingCallsCount = newValue + closeSecondaryWindowForTypeUnderlyingCallsCount = newValue } } } } - var closeAuxiliaryWindowForTypeCalled: Bool { - return closeAuxiliaryWindowForTypeCallsCount > 0 + var closeSecondaryWindowForTypeCalled: Bool { + return closeSecondaryWindowForTypeCallsCount > 0 } - var closeAuxiliaryWindowForTypeReceivedType: WindowManagerWindowType? - var closeAuxiliaryWindowForTypeReceivedInvocations: [WindowManagerWindowType] = [] - var closeAuxiliaryWindowForTypeClosure: ((WindowManagerWindowType) -> Void)? + var closeSecondaryWindowForTypeReceivedType: SecondaryWindowType? + var closeSecondaryWindowForTypeReceivedInvocations: [SecondaryWindowType] = [] + var closeSecondaryWindowForTypeClosure: ((SecondaryWindowType) -> Void)? - func closeAuxiliaryWindow(forType type: WindowManagerWindowType) { - closeAuxiliaryWindowForTypeCallsCount += 1 - closeAuxiliaryWindowForTypeReceivedType = type + func closeSecondaryWindow(forType type: SecondaryWindowType) { + closeSecondaryWindowForTypeCallsCount += 1 + closeSecondaryWindowForTypeReceivedType = type DispatchQueue.main.async { - self.closeAuxiliaryWindowForTypeReceivedInvocations.append(type) + self.closeSecondaryWindowForTypeReceivedInvocations.append(type) } - closeAuxiliaryWindowForTypeClosure?(type) + closeSecondaryWindowForTypeClosure?(type) } //MARK: - setOrientation diff --git a/ElementX/Sources/UITests/UITestsAppCoordinator.swift b/ElementX/Sources/UITests/UITestsAppCoordinator.swift index 421053334..b5a32f7a9 100644 --- a/ElementX/Sources/UITests/UITestsAppCoordinator.swift +++ b/ElementX/Sources/UITests/UITestsAppCoordinator.swift @@ -65,11 +65,11 @@ class UITestsAppCoordinator: AppCoordinatorProtocol, SecureWindowManagerDelegate fatalError("Not implemented.") } - func handleDeepLink(_ url: URL, isExternalURL: Bool, windowType: WindowManagerWindowType?) -> Bool { + func handleDeepLink(_ url: URL, isExternalURL: Bool, windowType: SecondaryWindowType?) -> Bool { fatalError("Not implemented.") } - func handleAppRoute(_ appRoute: AppRoute, windowType: WindowManagerWindowType?) { + func handleAppRoute(_ appRoute: AppRoute, windowType: SecondaryWindowType?) { fatalError("Not implemented.") } diff --git a/ElementX/Sources/UnitTests/UnitTestsAppCoordinator.swift b/ElementX/Sources/UnitTests/UnitTestsAppCoordinator.swift index 836b45c1d..d2ed1bd1e 100644 --- a/ElementX/Sources/UnitTests/UnitTestsAppCoordinator.swift +++ b/ElementX/Sources/UnitTests/UnitTestsAppCoordinator.swift @@ -50,11 +50,11 @@ class UnitTestsAppCoordinator: AppCoordinatorProtocol { fatalError("Not implemented.") } - func handleDeepLink(_ url: URL, isExternalURL: Bool, windowType: WindowManagerWindowType?) -> Bool { + func handleDeepLink(_ url: URL, isExternalURL: Bool, windowType: SecondaryWindowType?) -> Bool { fatalError("Not implemented.") } - func handleAppRoute(_ appRoute: AppRoute, windowType: WindowManagerWindowType?) { + func handleAppRoute(_ appRoute: AppRoute, windowType: SecondaryWindowType?) { fatalError("Not implemented.") }