瀏覽代碼

add testcases back to homerootview; check allow notifications for APNs; set applicationIconBadgeNumber to -1 to prevent NC from being cleared

kskandis 1 年之前
父節點
當前提交
4888160a0f

+ 4 - 4
FreeAPS/Sources/Models/FreeAPSSettings.swift

@@ -33,10 +33,10 @@ struct FreeAPSSettings: JSON, Equatable {
     var displayCalendarIOBandCOB: Bool = false
     var displayCalendarEmojis: Bool = false
     var glucoseBadge: Bool = false
-    var notificationsPump: Bool = false
-    var notificationsCgm: Bool = false
-    var notificationsCarb: Bool = false
-    var notificationsAlgorithm: Bool = false
+    var notificationsPump: Bool = true
+    var notificationsCgm: Bool = true
+    var notificationsCarb: Bool = true
+    var notificationsAlgorithm: Bool = true
     var glucoseNotificationsAlways: Bool = false
     var useAlarmSound: Bool = false
     var addSourceInfoToGlucoseNotifications: Bool = false

+ 4 - 4
FreeAPS/Sources/Modules/GlucoseNotificationSettings/GlucoseNotificationSettingsStateModel.swift

@@ -9,10 +9,10 @@ extension GlucoseNotificationSettings {
         @Published var lowGlucose: Decimal = 0
         @Published var highGlucose: Decimal = 0
 
-        @Published var notificationsPump = false
-        @Published var notificationsCgm = false
-        @Published var notificationsCarb = false
-        @Published var notificationsAlgorithm = false
+        @Published var notificationsPump = true
+        @Published var notificationsCgm = true
+        @Published var notificationsCarb = true
+        @Published var notificationsAlgorithm = true
 
         var units: GlucoseUnits = .mgdL
 

+ 168 - 0
FreeAPS/Sources/Modules/Home/View/HomeRootView.swift

@@ -58,6 +58,173 @@ extension Home {
 
         // TODO: end todo
 
+        func sendTestRepeat(storedMessages: [MessageContent], repeats: Bool = false) { // TODO: REMOVE!!!
+            if repeats == true {
+                for _ in 0 ... 5 {
+                    for _ in 0 ... storedMessages.count - 1 {
+                        var count = 0
+                        _ = Timer.scheduledTimer(withTimeInterval: 2, repeats: true) { t in
+                            print(count)
+                            print(storedMessages[count].content)
+                            router.alertMessage.send(storedMessages[count])
+                            count += 1
+                            if count >= storedMessages.count {
+                                t.invalidate()
+                            }
+                        }
+                    }
+                }
+            } else {
+                for i in 0 ... storedMessages.count - 1 {
+                    print(i)
+                    print(storedMessages[i].content)
+                    DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
+                        router.alertMessage.send(storedMessages[i])
+                    }
+                }
+            }
+        }
+
+        func sendTestTriggerMessage() { // TODO: REMOVE!!!
+            var storedMessages: [MessageContent] = []
+            var messageCont: MessageContent
+
+            let firstInterval = 1 // min
+            let secondInterval = 2 // min
+            let firstTrigger = UNTimeIntervalNotificationTrigger(timeInterval: 60 * TimeInterval(firstInterval), repeats: false)
+            messageCont = MessageContent(
+                content: "Last Loop was more than 20 min ago - TEST",
+                type: MessageType.error,
+                subtype: .algorithm,
+                title: "Trio Not Active",
+                useAPN: true,
+                trigger: firstTrigger
+            )
+            debug(
+                .default,
+                "TEST \(messageCont.title) \(messageCont.content) \(messageCont.type) \(messageCont.subtype)"
+            )
+            storedMessages.append(messageCont)
+
+            let secondTrigger = UNTimeIntervalNotificationTrigger(timeInterval: 60 * TimeInterval(secondInterval), repeats: false)
+            messageCont = MessageContent(
+                content: "Last Loop was more than 40 min ago - TEST",
+                type: MessageType.error,
+                subtype: .algorithm,
+                title: "Trio Not Active",
+                useAPN: true,
+                trigger: secondTrigger
+            )
+            debug(
+                .default,
+                "TEST \(messageCont.title) \(messageCont.content) \(messageCont.type) \(messageCont.subtype)"
+            )
+            storedMessages.append(messageCont)
+
+            sendTestRepeat(storedMessages: storedMessages, repeats: true)
+        }
+
+        func sendTestNotifications() { // TODO: REMOVE!!!
+            var storedMessages: [MessageContent] = []
+            var messageCont: MessageContent
+
+//            messageCont = MessageContent(
+//                content: "Insulin delivery stopped. Change Pod now.",
+//                type: MessageType.error, // errorPump
+//                subtype: .pump,
+//                title: "Critical Pod Fault 008",
+//                useAPN: true,
+//                action: .pumpConfig
+//            )
+//            router.alertMessage.send(messageCont)
+//            return
+
+            sendTestTriggerMessage()
+
+            messageCont = MessageContent(
+                content: "68 mg/dL" + "↔︎" + "-1" + "\n" + "Plugin CGM Source",
+                type: MessageType.warning,
+                subtype: .glucose,
+                title: "LOWALERT! 68 mg/dL" + "↔︎" + "-1",
+                useAPN: true,
+                action: .snooze
+            )
+            router.alertMessage.send(messageCont)
+
+            messageCont = MessageContent(
+                content: "Insulin delivery stopped. Change Pod now.",
+                type: MessageType.error, // errorPump
+                subtype: .pump,
+                title: "Critical Pod Fault 008",
+                useAPN: true,
+                action: .pumpConfig
+            )
+            storedMessages.append(messageCont)
+
+            messageCont = MessageContent(
+                content: "Pod expires in 68 hours.",
+                type: MessageType.warning,
+                subtype: .pump,
+                title: "Pod Expiration Reminder"
+            )
+            storedMessages.append(messageCont)
+            messageCont = MessageContent(
+                content: "10 U insulin or less remaining in Pod. Change Pod soon.",
+                type: MessageType.warning,
+                subtype: .pump,
+                title: "Low Reservoir",
+                useAPN: true
+            )
+            storedMessages.append(messageCont)
+
+            messageCont = MessageContent(
+                content: "To prevent LOW required 30 g of carbs",
+                type: MessageType.warning,
+                subtype: .carb,
+                title: "Carbs required: 30 g"
+            )
+            storedMessages.append(messageCont)
+
+            messageCont = MessageContent(
+                content: "83 mg/dL" + "↔︎" + "-1", // + "\n" + "Plugin CGM Source",
+                type: MessageType.info,
+                subtype: .glucose,
+                title: "Glucose 83 mg/dL" + "↔︎" + "-1",
+                action: .snooze
+            )
+            storedMessages.append(messageCont)
+            messageCont = MessageContent(
+                content: "68 mg/dL" + "↔︎" + "-1" + "\n" + "Plugin CGM Source",
+                type: MessageType.warning,
+                subtype: .glucose,
+                title: "LOWALERT! 68 mg/dL" + "↔︎" + "-1"
+            )
+            storedMessages.append(messageCont)
+
+            messageCont = MessageContent(
+                content: "Error: Invalid glucose: Not enough glucose data",
+                type: MessageType.info,
+                subtype: .algorithm
+            )
+            storedMessages.append(messageCont)
+            messageCont = MessageContent(
+                content: "Temp Basal failed with error",
+                type: MessageType.info,
+                subtype: .algorithm
+            )
+            storedMessages.append(messageCont)
+
+//            info(.apsManager, "Not enough glucose data")
+//            info(.apsManager, "Glucose data is stale")
+//            info(.apsManager, "Glucose data is too flat")
+//            info(.apsManager, "Glucose validation failed")
+//            info(.apsManager, "Loop not possible during the manual basal temp")
+//            info(.apsManager, "Temp Basal failed with error")
+//            info(.apsManager, "Pump not suspended by Announcement")
+
+            sendTestRepeat(storedMessages: storedMessages, repeats: false)
+        }
+
         var bolusProgressFormatter: NumberFormatter {
             let formatter = NumberFormatter()
             formatter.numberStyle = .decimal
@@ -822,6 +989,7 @@ extension Home {
                     )
                     .onTapGesture {
                         state.isStatusPopupPresented = false
+                        sendTestNotifications() // TODO: Remove!
                     }
                     .gesture(
                         DragGesture(minimumDistance: 10, coordinateSpace: .local)

+ 4 - 3
FreeAPS/Sources/Services/UserNotifications/UserNotificationsManager.swift

@@ -128,7 +128,7 @@ final class BaseUserNotificationsManager: NSObject, UserNotificationsManager, In
     private func addAppBadge(glucose: Int?) {
         guard let glucose = glucose, settingsManager.settings.glucoseBadge else {
             DispatchQueue.main.async {
-                UIApplication.shared.applicationIconBadgeNumber = 0
+                UIApplication.shared.applicationIconBadgeNumber = -1
             }
             return
         }
@@ -147,7 +147,7 @@ final class BaseUserNotificationsManager: NSObject, UserNotificationsManager, In
 
     private func notifyCarbsRequired(_ carbs: Int) {
         guard Decimal(carbs) >= settingsManager.settings.carbsRequiredThreshold,
-              settingsManager.settings.showCarbsRequiredBadge else { return }
+              settingsManager.settings.showCarbsRequiredBadge, settingsManager.settings.notificationsCarb else { return }
 
         var titles: [String] = []
 
@@ -552,6 +552,7 @@ extension BaseUserNotificationsManager: pumpNotificationObserver {
             typeMessage = .error
         } else {
             typeMessage = .warning
+            guard settingsManager.settings.notificationsPump else { return }
         }
         content.title = alert.contentTitle ?? "Unknown"
         content.body = alert.contentBody ?? "Unknown"
@@ -595,7 +596,7 @@ extension BaseUserNotificationsManager: UNUserNotificationCenterDelegate {
         willPresent _: UNNotification,
         withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void
     ) {
-        completionHandler([.banner, .badge, .sound])
+        completionHandler([.banner, .badge, .sound, .list])
     }
 
     func userNotificationCenter(