macos: blink critter when overlay dismisses empty

main
Peter Steinberger 2025-12-08 22:34:11 +01:00
parent 677374de86
commit abca8535cf
3 changed files with 20 additions and 9 deletions

View File

@ -106,6 +106,7 @@ final class AppState: ObservableObject {
@Published var isWorking: Bool = false
@Published var earBoostActive: Bool = false
@Published var blinkTick: Int = 0
@Published var heartbeatsEnabled: Bool {
didSet {
UserDefaults.standard.set(self.heartbeatsEnabled, forKey: heartbeatsEnabledKey)
@ -228,6 +229,10 @@ final class AppState: ObservableObject {
self.earBoostActive = false
}
func blinkOnce() {
self.blinkTick &+= 1
}
func setVoiceWakeEnabled(_ enabled: Bool) async {
guard voiceWakeSupported else {
self.swabbleEnabled = false

View File

@ -26,6 +26,7 @@ struct ClawdisApp: App {
isPaused: self.state.isPaused,
isWorking: self.state.isWorking,
earBoostActive: self.state.earBoostActive,
blinkTick: self.state.blinkTick,
relayStatus: self.relayManager.status,
animationsEnabled: self.state.iconAnimationsEnabled)
}
@ -344,6 +345,7 @@ private struct CritterStatusLabel: View {
var isPaused: Bool
var isWorking: Bool
var earBoostActive: Bool
var blinkTick: Int
var relayStatus: RelayProcessManager.Status
var animationsEnabled: Bool
@ -405,6 +407,7 @@ private struct CritterStatusLabel: View {
}
}
.onChange(of: self.isPaused) { _, _ in self.resetMotion() }
.onChange(of: self.blinkTick) { _, _ in self.blink() }
.onChange(of: self.animationsEnabled) { _, enabled in
if enabled {
self.scheduleRandomTimers(from: Date())

View File

@ -139,6 +139,9 @@ final class VoiceWakeOverlayController: ObservableObject {
window.orderOut(nil)
self.model.isVisible = false
self.model.level = 0
if outcome == .empty {
AppStateStore.shared.blinkOnce()
}
AppStateStore.shared.stopVoiceEars()
}
}