Ariver
2026-06-20 a3d82000231b8a8e3709e1a6708dbbdaf81412dc
C1.source/Sources/Aligner/AlignerApplicationDelegate.swift
@@ -481,6 +481,7 @@
                windowCloseService: quickSwitchWindowCloseService(),
                disableScreenshotRefresh: round1QuickSwitchOptions.disableScreenshotRefresh,
                waterfallViewMode: quickSwitchWaterfallViewMode(),
                theme: quickSwitchThemePreference(),
                closeConfirmationRequired: quickSwitchConfirmBeforeClose,
                onCloseConfirmationDisabled: { [weak self] in
                    self?.setQuickSwitchConfirmBeforeClose(false)
@@ -494,8 +495,11 @@
            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
        }
@@ -560,6 +564,7 @@
                windowCloseService: quickSwitchWindowCloseService(),
                disableScreenshotRefresh: round1QuickSwitchOptions.disableScreenshotRefresh,
                waterfallViewMode: quickSwitchWaterfallViewMode(),
                theme: quickSwitchThemePreference(),
                closeConfirmationRequired: quickSwitchConfirmBeforeClose,
                onCloseConfirmationDisabled: { [weak self] in
                    self?.setQuickSwitchConfirmBeforeClose(false)
@@ -573,8 +578,11 @@
            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
        }
@@ -607,6 +615,8 @@
        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()
@@ -662,6 +672,14 @@
            return FixtureQuickSwitchSnapshotLoader(appCount: 1, mode: .spaceFilter)
        }
        if round1QuickSwitchOptions.fixtureSplitView {
            return FixtureQuickSwitchSnapshotLoader(appCount: 1, mode: .splitView)
        }
        if round1QuickSwitchOptions.fixtureMultiPageIdentity {
            return FixtureQuickSwitchSnapshotLoader(appCount: 1, mode: .multiPageIdentity)
        }
        if let fixtureAppCount = round1QuickSwitchOptions.fixtureAppCount {
            return FixtureQuickSwitchSnapshotLoader(
                appCount: fixtureAppCount,
@@ -690,6 +708,11 @@
    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 {
@@ -741,6 +764,50 @@
        ])
    }
    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"