From 9fa16b8c3582f8b8f3dd82dc92319c01d4884680 Mon Sep 17 00:00:00 2001 From: Hariharan Mudaliar Date: Tue, 7 Oct 2025 01:23:16 +0530 Subject: [PATCH] OSDUHelper disabler --- DynamicIsland.xcodeproj/project.pbxproj | 2 + DynamicIsland/DynamicIsland.entitlements | 14 ---- DynamicIsland/managers/SystemHUDManager.swift | 67 ++++++++++++++++++- 3 files changed, 68 insertions(+), 15 deletions(-) diff --git a/DynamicIsland.xcodeproj/project.pbxproj b/DynamicIsland.xcodeproj/project.pbxproj index 249a944..1b6c1a3 100644 --- a/DynamicIsland.xcodeproj/project.pbxproj +++ b/DynamicIsland.xcodeproj/project.pbxproj @@ -361,6 +361,7 @@ CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_ASSET_PATHS = "\"DynamicIsland/Preview Content\""; DEVELOPMENT_TEAM = 9Y64TRM77N; + ENABLE_APP_SANDBOX = NO; ENABLE_HARDENED_RUNTIME = YES; ENABLE_PREVIEWS = YES; FRAMEWORK_SEARCH_PATHS = ( @@ -403,6 +404,7 @@ CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_ASSET_PATHS = "\"DynamicIsland/Preview Content\""; DEVELOPMENT_TEAM = 9Y64TRM77N; + ENABLE_APP_SANDBOX = NO; ENABLE_HARDENED_RUNTIME = YES; ENABLE_PREVIEWS = YES; FRAMEWORK_SEARCH_PATHS = ( diff --git a/DynamicIsland/DynamicIsland.entitlements b/DynamicIsland/DynamicIsland.entitlements index 23129cf..2e86356 100644 --- a/DynamicIsland/DynamicIsland.entitlements +++ b/DynamicIsland/DynamicIsland.entitlements @@ -2,22 +2,8 @@ - com.apple.security.app-sandbox - com.apple.security.automation.apple-events - com.apple.security.device.camera - - com.apple.security.device.audio-input - - com.apple.security.files.user-selected.read-write - - com.apple.security.network.client - - com.apple.security.network.server - - com.apple.security.personal-information.calendars - com.apple.security.temporary-exception.apple-events com.spotify.client diff --git a/DynamicIsland/managers/SystemHUDManager.swift b/DynamicIsland/managers/SystemHUDManager.swift index 34153e6..1964a35 100644 --- a/DynamicIsland/managers/SystemHUDManager.swift +++ b/DynamicIsland/managers/SystemHUDManager.swift @@ -23,7 +23,7 @@ class SystemHUDManager { } private func setupSettingsObserver() { - // Use Defaults publisher instead of @Default property wrapper + // Observe master toggle Defaults.publisher(.enableSystemHUD, options: []).sink { [weak self] change in guard let self = self, self.isSetupComplete else { return @@ -36,9 +36,31 @@ class SystemHUDManager { } } }.store(in: &cancellables) + + // Observe individual HUD toggles + Defaults.publisher(.enableVolumeHUD, options: []).sink { [weak self] change in + guard let self = self, self.isSetupComplete, Defaults[.enableSystemHUD] else { + return + } + // When volume HUD is enabled, ensure OSD is disabled + if change.newValue { + self.disableSystemHUD() + } + }.store(in: &cancellables) + + Defaults.publisher(.enableBrightnessHUD, options: []).sink { [weak self] change in + guard let self = self, self.isSetupComplete, Defaults[.enableSystemHUD] else { + return + } + // When brightness HUD is enabled, ensure OSD is disabled + if change.newValue { + self.disableSystemHUD() + } + }.store(in: &cancellables) } private var cancellables = Set() + private var osdMonitorTimer: Timer? /// Public property to check if system operations are in progress var isOperationInProgress: Bool { @@ -71,6 +93,9 @@ class SystemHUDManager { // Disable system HUD if possible disableSystemHUD() + // Start periodic monitoring to ensure OSD stays disabled + startOSDMonitoring() + print("System HUD replacement started") isSystemOperationInProgress = false } @@ -83,6 +108,9 @@ class SystemHUDManager { changesObserver?.stopObserving() changesObserver = nil + // Stop OSD monitoring + stopOSDMonitoring() + // Re-enable system HUD enableOriginalSystemHUD() @@ -121,6 +149,43 @@ class SystemHUDManager { changesObserver?.handleBrightnessKeyEvent() } + // MARK: - OSD Monitoring + + /// Start periodic monitoring to ensure OSD stays disabled + @MainActor + private func startOSDMonitoring() { + stopOSDMonitoring() // Stop any existing timer + + osdMonitorTimer = Timer.scheduledTimer(withTimeInterval: 5.0, repeats: true) { [weak self] _ in + guard let self = self else { return } + + // Check if any HUD is enabled + let anyHUDEnabled = Defaults[.enableVolumeHUD] || Defaults[.enableBrightnessHUD] + guard anyHUDEnabled else { return } + + // Check if OSD is running when it shouldn't be + Task.detached(priority: .background) { + let isRunning = await SystemOSDManager.isOSDUIHelperRunningAsync() + if isRunning { + await MainActor.run { + print("⚠️ OSDUIHelper detected running while HUDs are enabled - re-disabling") + self.disableSystemHUD() + } + } + } + } + + print("✅ OSD monitoring started (checks every 5 seconds)") + } + + /// Stop OSD monitoring + @MainActor + private func stopOSDMonitoring() { + osdMonitorTimer?.invalidate() + osdMonitorTimer = nil + print("🛑 OSD monitoring stopped") + } + deinit { cancellables.removeAll() Task { @MainActor in