mirror of
https://github.com/FBukovina/Atoll.git
synced 2026-10-27 15:14:33 +00:00
Working a bit
This commit is contained in:
parent
8b9ade25c2
commit
1f0eea3cc6
8 changed files with 881 additions and 91 deletions
|
|
@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue