Bladeren bron

Cleanup Apple Watch settings; add confirmBolusFaster to watch app

Deniz Cengiz 1 jaar geleden
bovenliggende
commit
5bd4dccd20

+ 1 - 1
Trio Watch App Extension/Views/BolusConfirmationView.swift

@@ -62,7 +62,7 @@ struct BolusConfirmationView: View {
             $confirmationProgress,
             from: 0.0,
             through: 1.0,
-            by: 0.05,
+            by: state.confirmBolusFaster ? 0.5 : 0.05,
             sensitivity: .medium,
             isContinuous: false,
             isHapticFeedbackEnabled: true

+ 7 - 0
Trio Watch App Extension/WatchState.swift

@@ -48,6 +48,7 @@ import WatchConnectivity
 
     // Pump specific dosing increment
     var bolusIncrement: Decimal = 0.05
+    var confirmBolusFaster: Bool = false
 
     // Acknowlegement handling
     var showCommsAnimation: Bool = false
@@ -532,5 +533,11 @@ import WatchConnectivity
                 self.bolusIncrement = decimalValue
             }
         }
+
+        if let confirmBolusFaster = message[WatchMessageKeys.confirmBolusFaster] {
+            if let booleanValue = confirmBolusFaster as? Bool {
+                self.confirmBolusFaster = booleanValue
+            }
+        }
     }
 }

+ 0 - 3
Trio/Resources/json/defaults/freeaps/freeaps_settings.json

@@ -6,7 +6,6 @@
   "useLocalGlucoseSource" : false,
   "localGlucosePort" : 8080,
   "debugOptions" : false,
-  "displayHR" : false,
   "cgm" : "none",
   "cgmManagerTypeByIdentifier":"",
   "uploadGlucose" : true,
@@ -29,7 +28,6 @@
   "delay" : 60,
   "useAppleHealth" : false,
   "smoothGlucose" : false,
-  "displayOnWatch" : "BGTarget",
   "hbA1cDisplayUnit" : "percent",
   "high" : 180,
   "low" : 70,
@@ -43,7 +41,6 @@
   "maxCarbs": 250,
   "maxFat": 250,
   "maxProtein": 250,
-  "displayFatAndProteinOnWatch": false,
   "confirmBolusFaster": false,
   "overrideFactor": 0.8,
   "fattyMeals": false,

+ 0 - 17
Trio/Sources/Models/TrioSettings.swift

@@ -23,7 +23,6 @@ struct TrioSettings: JSON, Equatable {
     var useLocalGlucoseSource: Bool = false
     var localGlucosePort: Int = 8080
     var debugOptions: Bool = false
-    var displayHR: Bool = false
     var cgm: CGMType = .none
     var cgmPluginIdentifier: String = ""
     var uploadGlucose: Bool = true
@@ -50,7 +49,6 @@ struct TrioSettings: JSON, Equatable {
     var delay: Int = 60
     var useAppleHealth: Bool = false
     var smoothGlucose: Bool = false
-    var displayOnWatch: AwConfig = .BGTarget
     var hbA1cDisplayUnit: HbA1cDisplayUnit = .percent
     var high: Decimal = 180
     var low: Decimal = 70
@@ -64,7 +62,6 @@ struct TrioSettings: JSON, Equatable {
     var maxCarbs: Decimal = 250
     var maxFat: Decimal = 250
     var maxProtein: Decimal = 250
-    var displayFatAndProteinOnWatch: Bool = false
     var confirmBolusFaster: Bool = false
     var overrideFactor: Decimal = 0.8
     var fattyMeals: Bool = false
@@ -111,16 +108,6 @@ extension TrioSettings: Decodable {
             settings.debugOptions = debugOptions
         }
 
-        if let displayHR = try? container.decode(Bool.self, forKey: .displayHR) {
-            settings.displayHR = displayHR
-            // compatibility if displayOnWatch is not available in json files
-            settings.displayOnWatch = (displayHR == true) ? AwConfig.HR : AwConfig.BGTarget
-        }
-
-        if let displayOnWatch = try? container.decode(AwConfig.self, forKey: .displayOnWatch) {
-            settings.displayOnWatch = displayOnWatch
-        }
-
         if let cgm = try? container.decode(CGMType.self, forKey: .cgm) {
             settings.cgm = cgm
         }
@@ -300,10 +287,6 @@ extension TrioSettings: Decodable {
             settings.maxProtein = maxProtein
         }
 
-        if let displayFatAndProteinOnWatch = try? container.decode(Bool.self, forKey: .displayFatAndProteinOnWatch) {
-            settings.displayFatAndProteinOnWatch = displayFatAndProteinOnWatch
-        }
-
         if let confirmBolusFaster = try? container.decode(Bool.self, forKey: .confirmBolusFaster) {
             settings.confirmBolusFaster = confirmBolusFaster
         }

+ 1 - 0
Trio/Sources/Models/WatchMessageKeys.swift

@@ -45,4 +45,5 @@ enum WatchMessageKeys {
     static let maxIOB = "maxIOB"
     static let maxCOB = "maxCOB"
     static let bolusIncrement = "bolusIncrement"
+    static let confirmBolusFaster = "confirmBolusFaster"
 }

+ 4 - 1
Trio/Sources/Models/WatchState.swift

@@ -25,6 +25,7 @@ struct WatchState: Hashable, Equatable, Sendable {
 
     // Pump specific dosing increment
     var bolusIncrement: Decimal = 0.05
+    var confirmBolusFaster: Bool = false
 
     static func == (lhs: WatchState, rhs: WatchState) -> Bool {
         lhs.date == rhs.date &&
@@ -47,7 +48,8 @@ struct WatchState: Hashable, Equatable, Sendable {
             lhs.maxProtein == rhs.maxProtein &&
             lhs.maxIOB == rhs.maxIOB &&
             lhs.maxCOB == rhs.maxCOB &&
-            lhs.bolusIncrement == rhs.bolusIncrement
+            lhs.bolusIncrement == rhs.bolusIncrement &&
+            lhs.confirmBolusFaster == rhs.confirmBolusFaster
     }
 
     func hash(into hasher: inout Hasher) {
@@ -73,5 +75,6 @@ struct WatchState: Hashable, Equatable, Sendable {
         hasher.combine(maxIOB)
         hasher.combine(maxCOB)
         hasher.combine(bolusIncrement)
+        hasher.combine(confirmBolusFaster)
     }
 }

+ 2 - 65
Trio/Sources/Modules/WatchConfig/View/WatchConfigAppleWatchView.swift

@@ -22,70 +22,6 @@ struct WatchConfigAppleWatchView: BaseView {
 
     var body: some View {
         List {
-            Section(
-                header: Text("Apple Watch Configuration"),
-                content: {
-                    VStack {
-                        Picker(
-                            selection: $state.selectedAwConfig,
-                            label: Text("Display on Watch")
-                        ) {
-                            ForEach(AwConfig.allCases) { selection in
-                                Text(selection.displayName).tag(selection)
-                            }
-                        }.padding(.top)
-
-                        HStack(alignment: .center) {
-                            Text(
-                                "Select the information to display."
-                            )
-                            .font(.footnote)
-                            .foregroundColor(.secondary)
-                            .lineLimit(nil)
-                            Spacer()
-                            Button(
-                                action: {
-                                    hintLabel = "Display on Watch"
-                                    selectedVerboseHint =
-                                        AnyView(VStack(alignment: .leading, spacing: 5) {
-                                            Text("Choose between the following:")
-                                            Text("• Heart Rate")
-                                            Text("• Glucose Target")
-                                            Text("• Steps")
-                                            Text("• ISF")
-                                            Text("• % Override")
-                                        })
-                                    shouldDisplayHint.toggle()
-                                },
-                                label: {
-                                    HStack {
-                                        Image(systemName: "questionmark.circle")
-                                    }
-                                }
-                            ).buttonStyle(BorderlessButtonStyle())
-                        }.padding(.top)
-                    }.padding(.bottom)
-                }
-            ).listRowBackground(Color.chart)
-
-            SettingInputSection(
-                decimalValue: $decimalPlaceholder,
-                booleanValue: $state.displayFatAndProteinOnWatch,
-                shouldDisplayHint: $shouldDisplayHint,
-                selectedVerboseHint: Binding(
-                    get: { selectedVerboseHint },
-                    set: {
-                        selectedVerboseHint = $0.map { AnyView($0) }
-                        hintLabel = "Show Protein and Fat"
-                    }
-                ),
-                units: state.units,
-                type: .boolean,
-                label: "Show Protein and Fat",
-                miniHint: "Allow protein and fat entries on watch.",
-                verboseHint: Text("When enabled, protein and fat will show in the carb entry screen of the Apple Watch.")
-            )
-
             SettingInputSection(
                 decimalValue: $decimalPlaceholder,
                 booleanValue: $state.confirmBolusFaster,
@@ -103,7 +39,8 @@ struct WatchConfigAppleWatchView: BaseView {
                 miniHint: "Reduce the number of crown rotations required for bolus confirmation.",
                 verboseHint: Text(
                     "Enabling this feature lowers the number of turns on the crown dial required when confirming a bolus."
-                )
+                ),
+                headerText: "Apple Watch Configuration"
             )
 
             Section(

+ 0 - 37
Trio/Sources/Modules/WatchConfig/WatchConfigStateModel.swift

@@ -1,38 +1,12 @@
 import ConnectIQ
 import SwiftUI
 
-enum AwConfig: String, JSON, CaseIterable, Identifiable, Codable {
-    var id: String { rawValue }
-    case HR
-    case BGTarget
-    case steps
-    case isf
-    case override
-
-    var displayName: String {
-        switch self {
-        case .BGTarget:
-            return NSLocalizedString("Glucose Target", comment: "")
-        case .HR:
-            return NSLocalizedString("Heart Rate", comment: "")
-        case .steps:
-            return NSLocalizedString("Steps", comment: "")
-        case .isf:
-            return NSLocalizedString("ISF", comment: "")
-        case .override:
-            return NSLocalizedString("% Override", comment: "")
-        }
-    }
-}
-
 extension WatchConfig {
     final class StateModel: BaseStateModel<Provider> {
         @Injected() private var garmin: GarminManager!
 
         @Published var units: GlucoseUnits = .mgdL
         @Published var devices: [IQDevice] = []
-        @Published var selectedAwConfig: AwConfig = .HR
-        @Published var displayFatAndProteinOnWatch = false
         @Published var confirmBolusFaster = false
 
         private(set) var preferences = Preferences()
@@ -42,18 +16,7 @@ extension WatchConfig {
 
             units = settingsManager.settings.units
 
-            subscribeSetting(\.displayFatAndProteinOnWatch, on: $displayFatAndProteinOnWatch) { displayFatAndProteinOnWatch = $0 }
             subscribeSetting(\.confirmBolusFaster, on: $confirmBolusFaster) { confirmBolusFaster = $0 }
-            subscribeSetting(\.displayOnWatch, on: $selectedAwConfig) { selectedAwConfig = $0 }
-            didSet: { [weak self] value in
-                // for compatibility with old displayHR
-                switch value {
-                case .HR:
-                    self?.settingsManager.settings.displayHR = true
-                default:
-                    self?.settingsManager.settings.displayHR = false
-                }
-            }
 
             devices = garmin.devices
         }

+ 3 - 1
Trio/Sources/Services/WatchManager/AppleWatchManager.swift

@@ -273,6 +273,7 @@ final class BaseWatchManager: NSObject, WCSessionDelegate, Injectable, WatchMana
             watchState.maxIOB = self.settingsManager.preferences.maxIOB
             watchState.maxCOB = self.settingsManager.preferences.maxCOB
             watchState.bolusIncrement = self.settingsManager.preferences.bolusIncrement
+            watchState.confirmBolusFaster = self.settingsManager.settings.confirmBolusFaster
 
             debug(
                 .watchManager,
@@ -361,7 +362,8 @@ final class BaseWatchManager: NSObject, WCSessionDelegate, Injectable, WatchMana
             WatchMessageKeys.maxProtein: state.maxProtein,
             WatchMessageKeys.maxIOB: state.maxIOB,
             WatchMessageKeys.maxCOB: state.maxCOB,
-            WatchMessageKeys.bolusIncrement: state.bolusIncrement
+            WatchMessageKeys.bolusIncrement: state.bolusIncrement,
+            WatchMessageKeys.confirmBolusFaster: state.confirmBolusFaster
         ]
 
         // if session is reachable, it means watch App is in the foreground -> send watchState as message