| | |
| | | windowCloseService: quickSwitchWindowCloseService(), |
| | | disableScreenshotRefresh: round1QuickSwitchOptions.disableScreenshotRefresh, |
| | | waterfallViewMode: quickSwitchWaterfallViewMode(), |
| | | theme: quickSwitchThemePreference(), |
| | | closeConfirmationRequired: quickSwitchConfirmBeforeClose, |
| | | onCloseConfirmationDisabled: { [weak self] in |
| | | self?.setQuickSwitchConfirmBeforeClose(false) |
| | |
| | | controller.onSnapshotUpdated = { [weak self] in |
| | | self?.writeQuickSwitchReportIfNeeded() |
| | | } |
| | | controller.onOpenSettings = { [weak self] in |
| | | self?.showSettingsFromQuickSwitch() |
| | | controller.onToggleWaterfallViewMode = { [weak self] in |
| | | self?.toggleQuickSwitchWaterfallViewModeFromQuickSwitch() |
| | | } |
| | | controller.onToggleTheme = { [weak self] in |
| | | self?.toggleQuickSwitchThemeFromQuickSwitch() |
| | | } |
| | | quickSwitchSessionController = controller |
| | | } |
| | |
| | | windowCloseService: quickSwitchWindowCloseService(), |
| | | disableScreenshotRefresh: round1QuickSwitchOptions.disableScreenshotRefresh, |
| | | waterfallViewMode: quickSwitchWaterfallViewMode(), |
| | | theme: quickSwitchThemePreference(), |
| | | closeConfirmationRequired: quickSwitchConfirmBeforeClose, |
| | | onCloseConfirmationDisabled: { [weak self] in |
| | | self?.setQuickSwitchConfirmBeforeClose(false) |
| | |
| | | controller.onSnapshotUpdated = { [weak self] in |
| | | self?.writeQuickSwitchReportIfNeeded() |
| | | } |
| | | controller.onOpenSettings = { [weak self] in |
| | | self?.showSettingsFromQuickSwitch() |
| | | controller.onToggleWaterfallViewMode = { [weak self] in |
| | | self?.toggleQuickSwitchWaterfallViewModeFromQuickSwitch() |
| | | } |
| | | controller.onToggleTheme = { [weak self] in |
| | | self?.toggleQuickSwitchThemeFromQuickSwitch() |
| | | } |
| | | quickSwitchSessionController = controller |
| | | } |
| | |
| | | let versionBuild = appVersionBuild() |
| | | report["preferenceWaterfallViewMode"] = preferenceStore.read().quickSwitchWaterfallViewMode.rawValue |
| | | report["resolvedWaterfallViewMode"] = quickSwitchWaterfallViewMode().rawValue |
| | | report["preferenceTheme"] = preferenceStore.read().theme.rawValue |
| | | report["resolvedQuickSwitchTheme"] = quickSwitchThemePreference().rawValue |
| | | report["aboutVersion"] = versionBuild.version |
| | | report["aboutBuild"] = versionBuild.build |
| | | report["statusMenu"] = statusMenuReportDictionary() |
| | |
| | | return FixtureQuickSwitchSnapshotLoader(appCount: 1, mode: .splitView) |
| | | } |
| | | |
| | | if round1QuickSwitchOptions.fixtureMultiPageIdentity { |
| | | return FixtureQuickSwitchSnapshotLoader(appCount: 1, mode: .multiPageIdentity) |
| | | } |
| | | |
| | | if let fixtureAppCount = round1QuickSwitchOptions.fixtureAppCount { |
| | | return FixtureQuickSwitchSnapshotLoader( |
| | | appCount: fixtureAppCount, |
| | |
| | | private func quickSwitchWaterfallViewMode() -> QuickSwitchWaterfallViewMode { |
| | | round1QuickSwitchOptions.waterfallViewMode |
| | | ?? preferenceStore.read().quickSwitchWaterfallViewMode |
| | | } |
| | | |
| | | private func quickSwitchThemePreference() -> ThemePreference { |
| | | let theme = preferenceStore.read().theme |
| | | return theme == .dark ? .dark : .light |
| | | } |
| | | |
| | | private func quickSwitchSpaceActivationService() -> any SpaceActivationServiceProtocol { |
| | |
| | | ]) |
| | | } |
| | | |
| | | private func toggleQuickSwitchWaterfallViewModeFromQuickSwitch() { |
| | | let currentMode = quickSwitchWaterfallViewMode() |
| | | let nextMode: QuickSwitchWaterfallViewMode = currentMode == .horizontalMasonry |
| | | ? .verticalColumns |
| | | : .horizontalMasonry |
| | | DevelopmentDiagnostics.log("app.quickSwitch.waterfallViewModeToggle", [ |
| | | "currentMode": currentMode.rawValue, |
| | | "nextMode": nextMode.rawValue, |
| | | "quickSwitchVisible": quickSwitchSessionController?.isVisible ?? false |
| | | ]) |
| | | setQuickSwitchWaterfallViewMode(nextMode) |
| | | } |
| | | |
| | | private func setQuickSwitchThemePreference(_ theme: ThemePreference) { |
| | | let normalizedTheme: ThemePreference = theme == .dark ? .dark : .light |
| | | let preferences = preferenceStore.read() |
| | | let updatedPreferences = AlignerPreferences( |
| | | showMinimizedWindows: preferences.showMinimizedWindows, |
| | | showFullscreenWindows: preferences.showFullscreenWindows, |
| | | quickSwitchWaterfallViewMode: preferences.quickSwitchWaterfallViewMode, |
| | | theme: normalizedTheme, |
| | | language: preferences.language, |
| | | spaceDisplayStrategy: preferences.spaceDisplayStrategy |
| | | ) |
| | | preferenceStore.write(updatedPreferences) |
| | | quickSwitchSessionController?.setTheme(normalizedTheme) |
| | | writeQuickSwitchReportIfNeeded() |
| | | DevelopmentDiagnostics.log("app.quickSwitch.themePreferenceChanged", [ |
| | | "theme": normalizedTheme.rawValue, |
| | | "quickSwitchVisible": quickSwitchSessionController?.isVisible ?? false |
| | | ]) |
| | | } |
| | | |
| | | private func toggleQuickSwitchThemeFromQuickSwitch() { |
| | | let currentTheme = quickSwitchThemePreference() |
| | | let nextTheme: ThemePreference = currentTheme == .dark ? .light : .dark |
| | | DevelopmentDiagnostics.log("app.quickSwitch.themeToggle", [ |
| | | "currentTheme": currentTheme.rawValue, |
| | | "nextTheme": nextTheme.rawValue, |
| | | "quickSwitchVisible": quickSwitchSessionController?.isVisible ?? false |
| | | ]) |
| | | setQuickSwitchThemePreference(nextTheme) |
| | | } |
| | | |
| | | private func appVersionBuild() -> (version: String, build: String) { |
| | | let info = Bundle.main.infoDictionary ?? [:] |
| | | let version = info["CFBundleShortVersionString"] as? String ?? "Unknown" |