Merge pull request #100 from Ebullioscopic/ui/minimalistic

BugFix: Process Duplication and Feature: Focus Mode Indicator
This commit is contained in:
Hariharan Mudaliar 2025-11-13 01:45:51 +05:30 • committed by GitHub
commit adec847f68
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 19 additions and 12 deletions

View file

@ -43,7 +43,7 @@ final class ReminderLiveActivityManager: ObservableObject {
private var pendingRefreshForce = false private var pendingRefreshForce = false
private var pendingRefreshToken = UUID() private var pendingRefreshToken = UUID()
private var lastRefreshDate: Date? private var lastRefreshDate: Date?
private let minimumRefreshInterval: TimeInterval = 10 private let minimumRefreshInterval: TimeInterval = 60
private let refreshDebounceInterval: TimeInterval = 0.3 private let refreshDebounceInterval: TimeInterval = 0.3
private var refreshTaskToken = UUID() private var refreshTaskToken = UUID()
private var hasShownCriticalSneakPeek = false private var hasShownCriticalSneakPeek = false
@ -291,6 +291,10 @@ final class ReminderLiveActivityManager: ObservableObject {
handleEntrySelection(first, referenceDate: referenceDate) handleEntrySelection(first, referenceDate: referenceDate)
} }
func requestRefresh(force: Bool = false) {
scheduleRefresh(force: force)
}
func refreshUpcomingReminder(force: Bool = false) async { func refreshUpcomingReminder(force: Bool = false) async {
guard Defaults[.enableReminderLiveActivity] else { guard Defaults[.enableReminderLiveActivity] else {
deactivateReminder() deactivateReminder()
@ -341,7 +345,7 @@ final class ReminderLiveActivityManager: ObservableObject {
return return
} }
if entry.triggerDate <= date { if entry.triggerDate <= date {
if entry.triggerDate > entry.event.start { if entry.triggerDate > entry.event.start {
entry = ReminderEntry(event: entry.event, triggerDate: entry.event.start, leadTime: entry.leadTime) entry = ReminderEntry(event: entry.event, triggerDate: entry.event.start, leadTime: entry.leadTime)
nextReminder = entry nextReminder = entry
@ -365,14 +369,14 @@ final class ReminderLiveActivityManager: ObservableObject {
if !hasShownCriticalSneakPeek { if !hasShownCriticalSneakPeek {
let displayDuration = min(criticalWindow, max(timeRemaining - 2, 0)) let displayDuration = min(criticalWindow, max(timeRemaining - 2, 0))
if displayDuration > 0 { if displayDuration > 0 {
DynamicIslandViewCoordinator.shared.toggleSneakPeek( DynamicIslandViewCoordinator.shared.toggleSneakPeek(
status: true, status: true,
type: .reminder, type: .reminder,
duration: displayDuration, duration: displayDuration,
value: 0, value: 0,
icon: ReminderLiveActivityManager.criticalIconName icon: ReminderLiveActivityManager.criticalIconName
) )
hasShownCriticalSneakPeek = true hasShownCriticalSneakPeek = true
} }
} }
} else { } else {

View file

@ -157,8 +157,11 @@ class DynamicIslandViewModel: NSObject, ObservableObject {
self.notchState = .open self.notchState = .open
} }
// Force music information update when notch is opened // Force music information update when notch is opened
MusicManager.shared.forceUpdate() MusicManager.shared.forceUpdate()
// Refresh reminders immediately to surface the latest state when the notch opens
ReminderLiveActivityManager.shared.requestRefresh(force: true)
} }
private func calculateDynamicNotchSize() -> CGSize { private func calculateDynamicNotchSize() -> CGSize {