Преглед изворни кода

Make HR optional on Watch App

Jon Mårtensson пре 3 година
родитељ
комит
d179f6c01d

+ 1 - 0
FreeAPS/Resources/json/defaults/freeaps/freeaps_settings.json

@@ -9,6 +9,7 @@
     "debugOptions": false,
     "insulinReqFraction": 2.0,
     "skipBolusScreenAfterCarbs": false,
+    "displayHR": false,
     "cgm": "nightscout",
     "uploadGlucose": false,
     "glucoseBadge": false,

+ 5 - 0
FreeAPS/Sources/Models/FreeAPSSettings.swift

@@ -11,6 +11,7 @@ struct FreeAPSSettings: JSON, Equatable {
     var debugOptions: Bool = false
     var insulinReqFraction: Decimal = 0.7
     var skipBolusScreenAfterCarbs: Bool = false
+    var displayHR: Bool = false
     var cgm: CGMType = .nightscout
     var uploadGlucose: Bool = false
     var useCalendar: Bool = false
@@ -71,6 +72,10 @@ extension FreeAPSSettings: Decodable {
             settings.skipBolusScreenAfterCarbs = skipBolusScreenAfterCarbs
         }
 
+        if let displayHR = try? container.decode(Bool.self, forKey: .displayHR) {
+            settings.displayHR = displayHR
+        }
+
         if let cgm = try? container.decode(CGMType.self, forKey: .cgm) {
             settings.cgm = cgm
         }

+ 2 - 0
FreeAPS/Sources/Modules/PreferencesEditor/PreferencesEditorStateModel.swift

@@ -7,6 +7,7 @@ extension PreferencesEditor {
         @Published var allowAnnouncements = false
         @Published var insulinReqFraction: Decimal = 2.0
         @Published var skipBolusScreenAfterCarbs = false
+        @Published var displayHR = false
 
         @Published var sections: [FieldSection] = []
 
@@ -15,6 +16,7 @@ extension PreferencesEditor {
 
             subscribeSetting(\.allowAnnouncements, on: $allowAnnouncements) { allowAnnouncements = $0 }
             subscribeSetting(\.insulinReqFraction, on: $insulinReqFraction) { insulinReqFraction = $0 }
+            subscribeSetting(\.displayHR, on: $displayHR) { displayHR = $0 }
             subscribeSetting(\.skipBolusScreenAfterCarbs, on: $skipBolusScreenAfterCarbs) { skipBolusScreenAfterCarbs = $0 }
 
             subscribeSetting(\.units, on: $unitsIndex.map { $0 == 0 ? GlucoseUnits.mgdL : .mmolL }) {

+ 2 - 0
FreeAPS/Sources/Modules/PreferencesEditor/View/PreferencesEditorRootView.swift

@@ -36,6 +36,8 @@ extension PreferencesEditor {
                     }
 
                     Toggle("Skip Bolus screen after carbs", isOn: $state.skipBolusScreenAfterCarbs)
+
+                    Toggle("Display HR on Watch instead of eventual BG", isOn: $state.displayHR)
                 }
 
                 ForEach(state.sections.indexed(), id: \.1.id) { sectionIndex, section in

+ 3 - 0
FreeAPS/Sources/Services/WatchManager/WatchManager.swift

@@ -79,6 +79,9 @@ final class BaseWatchManager: NSObject, WatchManager, Injectable {
                     )
                 }
             self.state.bolusAfterCarbs = !self.settingsManager.settings.skipBolusScreenAfterCarbs
+
+            self.state.displayHR = !self.settingsManager.settings.displayHR
+
             self.state.eventualBG = self.evetualBGStraing()
 
             self.sendState()

+ 1 - 0
FreeAPSWatch WatchKit Extension/DataFlow.swift

@@ -16,6 +16,7 @@ struct WatchState: Codable {
     var tempTargets: [TempTargetWatchPreset] = []
     var bolusAfterCarbs: Bool?
     var eventualBG: String?
+    var displayHR: Bool?
 }
 
 struct TempTargetWatchPreset: Codable, Identifiable {

+ 51 - 22
FreeAPSWatch WatchKit Extension/Views/MainView.swift

@@ -84,22 +84,51 @@ struct MainView: View {
                 }
             }
             Spacer()
-            Spacer()
-            HStack {
-                Text(iobFormatter.string(from: (state.cob ?? 0) as NSNumber)!).font(.caption2)
+            HStack(alignment: .firstTextBaseline) {
+                Text(iobFormatter.string(from: (state.cob ?? 0) as NSNumber)!)
+                    .font(.caption2)
+                    .scaledToFill()
+                    .foregroundColor(Color.white)
+                    .minimumScaleFactor(0.5)
                 Text("g").foregroundColor(.loopGreen)
+                    .font(.caption2)
+                    .scaledToFill()
+                    .foregroundColor(.loopGreen)
+                    .minimumScaleFactor(0.5)
                 Spacer()
-                Text(iobFormatter.string(from: (state.iob ?? 0) as NSNumber)!).font(.caption2)
+                Text(iobFormatter.string(from: (state.iob ?? 0) as NSNumber)!)
+                    .font(.caption2)
+                    .scaledToFill()
+                    .foregroundColor(Color.white)
+                    .minimumScaleFactor(0.5)
+
                 Text("U").foregroundColor(.insulin)
-                Spacer()
-                Text("❤️" + " \(pulse)")
-                    .fontWeight(.regular)
-                    .font(.system(size: 18)).foregroundColor(Color.white)
+                    .font(.caption2)
+                    .scaledToFill()
+                    .foregroundColor(.loopGreen)
+                    .minimumScaleFactor(0.5)
+
+                if !state.displayHR {
+                    Spacer()
+                    HStack {
+                        Text("❤️" + " \(pulse)")
+                            .fontWeight(.regular)
+                            .font(.system(size: 18)).foregroundColor(Color.white)
+                    }
+
+                } else if let eventualBG = state.eventualBG.nonEmpty {
+                    Spacer()
+                    HStack {
+                        Text(eventualBG)
+                            .font(.caption2)
+                            .scaledToFill()
+                            .foregroundColor(.secondary)
+                            .minimumScaleFactor(0.5)
+                    }
+                }
             }
             Spacer()
-            Spacer()
         }.padding()
-            .onAppear(perform: start)
     }
 
     var buttons: some View {
@@ -115,17 +144,6 @@ struct MainView: View {
                     .foregroundColor(.loopGreen)
             }
 
-            NavigationLink(isActive: $state.isBolusViewActive) {
-                BolusView()
-                    .environmentObject(state)
-            } label: {
-                Image("bolus", bundle: nil)
-                    .renderingMode(.template)
-                    .resizable()
-                    .frame(width: 24, height: 24)
-                    .foregroundColor(.insulin)
-            }
-
             NavigationLink(isActive: $state.isTempTargetViewActive) {
                 TempTargetsView()
                     .environmentObject(state)
@@ -143,6 +161,17 @@ struct MainView: View {
                     }
                 }
             }
+
+            NavigationLink(isActive: $state.isBolusViewActive) {
+                BolusView()
+                    .environmentObject(state)
+            } label: {
+                Image("bolus", bundle: nil)
+                    .renderingMode(.template)
+                    .resizable()
+                    .frame(width: 24, height: 24)
+                    .foregroundColor(.insulin)
+            }
         }
     }
 
@@ -208,7 +237,7 @@ struct MainView: View {
             return .loopGray
         }
         let delta = Date().timeIntervalSince(lastLoopDate) - Config.lag
-
+        
         if delta <= 5.minutes.timeInterval {
             return .loopGreen
         } else if delta <= 10.minutes.timeInterval {

+ 4 - 1
FreeAPSWatch WatchKit Extension/WatchStateModel.swift

@@ -20,10 +20,11 @@ class WatchStateModel: NSObject, ObservableObject {
     @Published var cob: Decimal?
     @Published var tempTargets: [TempTargetWatchPreset] = []
     @Published var bolusAfterCarbs = true
-
     @Published var isCarbsViewActive = false
     @Published var isTempTargetViewActive = false
     @Published var isBolusViewActive = false
+    @Published var displayHR = false
+    @Published var eventualBG = ""
     @Published var isConfirmationViewActive = false {
         didSet {
             confirmationTimeout = nil
@@ -158,6 +159,8 @@ class WatchStateModel: NSObject, ObservableObject {
         tempTargets = state.tempTargets
         bolusAfterCarbs = state.bolusAfterCarbs ?? true
         lastUpdate = Date()
+        eventualBG = state.eventualBG ?? ""
+        displayHR = state.displayHR ?? false
     }
 }