Working a bit

This commit is contained in:
Hariharan Mudaliar 2025-12-01 13:01:44 +05:30
commit 1f0eea3cc6
8 changed files with 881 additions and 91 deletions

View file

@ -23,16 +23,40 @@ class SystemHUDManager {
}
private func setupSettingsObserver() {
// Observe master toggle
// Observe master HUD toggle
Defaults.publisher(.enableSystemHUD, options: []).sink { [weak self] change in
guard let self = self, self.isSetupComplete else {
return
}
Task { @MainActor in
if change.newValue && !Defaults[.enableCustomOSD] {
await self.startSystemObserver()
} else if !Defaults[.enableCustomOSD] {
// Only stop if OSD is also disabled
await self.stopSystemObserver()
}
}
}.store(in: &cancellables)
// Observe OSD toggle
Defaults.publisher(.enableCustomOSD, options: []).sink { [weak self] change in
guard let self = self, self.isSetupComplete else {
return
}
Task { @MainActor in
if change.newValue {
await self.startSystemHUD()
// Start observer for OSD if not already running
if self.changesObserver == nil {
await self.startSystemObserver()
}
} else if Defaults[.enableSystemHUD] {
// Keep observer running for HUD
if self.changesObserver == nil {
await self.startSystemObserver()
}
} else {
await self.stopSystemHUD()
// Stop observer if both HUD and OSD are disabled
await self.stopSystemObserver()
}
}
}.store(in: &cancellables)
@ -70,6 +94,40 @@ class SystemHUDManager {
keyboardBacklightEnabled: change.newValue
)
}.store(in: &cancellables)
// Observe individual OSD toggles
Defaults.publisher(.enableOSDVolume, options: []).sink { [weak self] change in
guard let self = self, self.isSetupComplete, Defaults[.enableCustomOSD] else {
return
}
self.changesObserver?.update(
volumeEnabled: change.newValue,
brightnessEnabled: Defaults[.enableOSDBrightness],
keyboardBacklightEnabled: Defaults[.enableOSDKeyboardBacklight]
)
}.store(in: &cancellables)
Defaults.publisher(.enableOSDBrightness, options: []).sink { [weak self] change in
guard let self = self, self.isSetupComplete, Defaults[.enableCustomOSD] else {
return
}
self.changesObserver?.update(
volumeEnabled: Defaults[.enableOSDVolume],
brightnessEnabled: change.newValue,
keyboardBacklightEnabled: Defaults[.enableOSDKeyboardBacklight]
)
}.store(in: &cancellables)
Defaults.publisher(.enableOSDKeyboardBacklight, options: []).sink { [weak self] change in
guard let self = self, self.isSetupComplete, Defaults[.enableCustomOSD] else {
return
}
self.changesObserver?.update(
volumeEnabled: Defaults[.enableOSDVolume],
brightnessEnabled: Defaults[.enableOSDBrightness],
keyboardBacklightEnabled: change.newValue
)
}.store(in: &cancellables)
}
private var cancellables = Set<AnyCancellable>()
@ -82,9 +140,15 @@ class SystemHUDManager {
func setup(coordinator: DynamicIslandViewCoordinator) {
self.coordinator = coordinator
if Defaults[.enableSystemHUD] {
// Initialize OSD manager
Task { @MainActor in
CustomOSDWindowManager.shared.initialize()
}
// Start observer if either HUD or OSD is enabled
if Defaults[.enableSystemHUD] || Defaults[.enableCustomOSD] {
Task { @MainActor in
await startSystemHUD()
await startSystemObserver()
self.isSetupComplete = true
}
} else {
@ -93,42 +157,55 @@ class SystemHUDManager {
}
@MainActor
private func startSystemHUD() async {
private func startSystemObserver() async {
guard let coordinator = coordinator, !isSystemOperationInProgress else { return }
isSystemOperationInProgress = true
await stopSystemHUD() // Stop any existing observer
await stopSystemObserver() // Stop any existing observer
changesObserver = SystemChangesObserver(coordinator: coordinator)
let volumeEnabled = Defaults[.enableVolumeHUD]
let brightnessEnabled = Defaults[.enableBrightnessHUD]
let keyboardBacklightEnabled = Defaults[.enableKeyboardBacklightHUD]
// Determine which controls to enable based on HUD or OSD mode
let volumeEnabled: Bool
let brightnessEnabled: Bool
let keyboardBacklightEnabled: Bool
if Defaults[.enableCustomOSD] {
volumeEnabled = Defaults[.enableOSDVolume]
brightnessEnabled = Defaults[.enableOSDBrightness]
keyboardBacklightEnabled = Defaults[.enableOSDKeyboardBacklight]
} else {
volumeEnabled = Defaults[.enableVolumeHUD]
brightnessEnabled = Defaults[.enableBrightnessHUD]
keyboardBacklightEnabled = Defaults[.enableKeyboardBacklightHUD]
}
changesObserver?.startObserving(
volumeEnabled: volumeEnabled,
brightnessEnabled: brightnessEnabled,
keyboardBacklightEnabled: keyboardBacklightEnabled
)
print("System HUD replacement started")
print("System observer started (HUD: \(Defaults[.enableSystemHUD]), OSD: \(Defaults[.enableCustomOSD]))")
isSystemOperationInProgress = false
}
@MainActor
private func stopSystemHUD() async {
private func stopSystemObserver() async {
guard !isSystemOperationInProgress else { return }
isSystemOperationInProgress = true
changesObserver?.stopObserving()
changesObserver = nil
print("System HUD replacement stopped")
print("System observer stopped")
isSystemOperationInProgress = false
}
deinit {
cancellables.removeAll()
Task { @MainActor in
await stopSystemHUD()
await stopSystemObserver()
}
}
}