Parcourir la source

Snooze: stabilize observer lifecycle and alert identifiers

Charlie Chrisman il y a 4 mois
Parent
commit
f5053d5cb6

+ 1 - 1
Trio Watch App Extension/Helper/WatchNotificationHandler.swift

@@ -26,7 +26,7 @@ final class WatchNotificationHandler: NSObject, UNUserNotificationCenterDelegate
             }
 
             let glucoseCategory = UNNotificationCategory(
-                identifier: NotificationCategoryIdentifier.glucoseAlert.rawValue,
+                identifier: NotificationCategoryIdentifier.trioAlert.rawValue,
                 actions: snoozeActions,
                 intentIdentifiers: [],
                 options: []

+ 1 - 1
Trio/Sources/Models/NotificationIdentifiers.swift

@@ -1,7 +1,7 @@
 import Foundation
 
 enum NotificationCategoryIdentifier: String {
-    case glucoseAlert = "Trio.glucoseAlert"
+    case trioAlert = "Trio.alert"
 }
 
 enum NotificationResponseAction: String, CaseIterable {

+ 6 - 6
Trio/Sources/Modules/Snooze/SnoozeStateModel.swift

@@ -4,18 +4,18 @@ import SwiftUI
 extension Snooze {
     @Observable final class StateModel: BaseStateModel<Provider> {
         @ObservationIgnored @Persisted(key: "UserNotificationsManager.snoozeUntilDate") var snoozeUntilDate: Date = .distantPast
-        @ObservationIgnored @Injected() var glucoseStogare: GlucoseStorage!
+        @ObservationIgnored @Injected() var glucoseStorage: GlucoseStorage!
         @ObservationIgnored @Injected() var notificationsManager: UserNotificationsManager!
         @ObservationIgnored @Injected() var broadcaster: Broadcaster!
 
         var alarm: GlucoseAlarm?
 
         override func subscribe() {
-            alarm = glucoseStogare.alarm
+            alarm = glucoseStorage.alarm
             broadcaster.register(SnoozeObserver.self, observer: self)
         }
 
-        deinit {
+        func unsubscribe() {
             broadcaster.unregister(SnoozeObserver.self, observer: self)
         }
 
@@ -33,14 +33,14 @@ extension Snooze {
 
             Task { @MainActor in
                 snoozeUntilDate = Date().addingTimeInterval(duration)
-                alarm = glucoseStogare.alarm
+                alarm = glucoseStorage.alarm
             }
         }
 
         @MainActor func applySnooze(_ duration: TimeInterval) async {
             // Allow any duration chosen in the Snooze UI, while keeping validation for quick actions elsewhere.
             snoozeUntilDate = duration > 0 ? Date().addingTimeInterval(duration) : .distantPast
-            alarm = glucoseStogare.alarm
+            alarm = glucoseStorage.alarm
             await notificationsManager.applySnooze(for: duration)
         }
     }
@@ -50,7 +50,7 @@ extension Snooze.StateModel: SnoozeObserver {
     func snoozeDidChange(_ untilDate: Date) {
         Task { @MainActor in
             snoozeUntilDate = untilDate
-            alarm = glucoseStogare.alarm
+            alarm = glucoseStorage.alarm
         }
     }
 }

+ 4 - 3
Trio/Sources/Modules/Snooze/View/SnoozeRootView.swift

@@ -110,9 +110,7 @@ extension Snooze {
             .toolbar {
                 ToolbarItem(placement: .topBarTrailing) {
                     Button("Close") {
-                        Task { @MainActor in
-                            state.hideModal()
-                        }
+                        state.hideModal()
                     }
                 }
             }
@@ -120,6 +118,9 @@ extension Snooze {
                 configureView()
                 snoozeDescription = getSnoozeDescription()
             }
+            .onDisappear {
+                state.unsubscribe()
+            }
         }
     }
 }

+ 3 - 3
Trio/Sources/Services/UserNotifications/UserNotificationsManager.swift

@@ -43,7 +43,7 @@ protocol pumpNotificationObserver {
 
 // MARK: - SnoozeObserver Protocol
 protocol SnoozeObserver {
-    func snoozeDidChange(_ untilDate: Date)
+    @MainActor func snoozeDidChange(_ untilDate: Date)
 }
 
 final class BaseUserNotificationsManager: NSObject, UserNotificationsManager, Injectable {
@@ -123,7 +123,7 @@ final class BaseUserNotificationsManager: NSObject, UserNotificationsManager, In
             }
 
             let glucoseCategory = UNNotificationCategory(
-                identifier: NotificationCategoryIdentifier.glucoseAlert.rawValue,
+                identifier: NotificationCategoryIdentifier.trioAlert.rawValue,
                 actions: snoozeActions,
                 intentIdentifiers: [],
                 options: []
@@ -369,7 +369,7 @@ final class BaseUserNotificationsManager: NSObject, UserNotificationsManager, In
                 if notificationAlarm {
                     content.sound = .default
                     content.userInfo[NotificationAction.key] = NotificationAction.snooze.rawValue
-                    content.categoryIdentifier = NotificationCategoryIdentifier.glucoseAlert.rawValue
+                    content.categoryIdentifier = NotificationCategoryIdentifier.trioAlert.rawValue
                 }
 
                 addRequest(