From 464cee7a211b6275b6048f9c047c7f75bfba2c75 Mon Sep 17 00:00:00 2001 From: MikePlante1 <82073483+MikePlante1@users.noreply.github.com> Date: Fri, 9 Feb 2024 11:18:12 -0500 Subject: [PATCH] Add an option to confirm boluses faster on Apple Watch (#508) --- .../Resources/json/defaults/freeaps/freeaps_settings.json | 1 + FreeAPS/Sources/Models/FreeAPSSettings.swift | 5 +++++ .../Modules/WatchConfig/View/WatchConfigRootView.swift | 2 ++ .../Sources/Modules/WatchConfig/WatchConfigStateModel.swift | 2 ++ FreeAPS/Sources/Services/WatchManager/WatchManager.swift | 1 + FreeAPSWatch WatchKit Extension/DataFlow.swift | 1 + .../Views/BolusConfirmationView.swift | 2 +- FreeAPSWatch WatchKit Extension/WatchStateModel.swift | 2 ++ 8 files changed, 15 insertions(+), 1 deletion(-) diff --git a/FreeAPS/Resources/json/defaults/freeaps/freeaps_settings.json b/FreeAPS/Resources/json/defaults/freeaps/freeaps_settings.json index 05e85190c9..fde30ed99b 100644 --- a/FreeAPS/Resources/json/defaults/freeaps/freeaps_settings.json +++ b/FreeAPS/Resources/json/defaults/freeaps/freeaps_settings.json @@ -44,6 +44,7 @@ "rulerMarks" : false, "maxCarbs": 1000, "displayFatAndProteinOnWatch": false, + "confirmBolusFaster": false, "overrideFactor": 0.8, "useCalc": false, "fattyMeals": false, diff --git a/FreeAPS/Sources/Models/FreeAPSSettings.swift b/FreeAPS/Sources/Models/FreeAPSSettings.swift index 74f2182b4e..5a2d3f9cc7 100644 --- a/FreeAPS/Sources/Models/FreeAPSSettings.swift +++ b/FreeAPS/Sources/Models/FreeAPSSettings.swift @@ -44,6 +44,7 @@ struct FreeAPSSettings: JSON, Equatable { var rulerMarks: Bool = false var maxCarbs: Decimal = 1000 var displayFatAndProteinOnWatch: Bool = false + var confirmBolusFaster: Bool = false var onlyAutotuneBasals: Bool = false var overrideFactor: Decimal = 0.8 var useCalc: Bool = false @@ -255,6 +256,10 @@ extension FreeAPSSettings: Decodable { settings.displayFatAndProteinOnWatch = displayFatAndProteinOnWatch } + if let confirmBolusFaster = try? container.decode(Bool.self, forKey: .confirmBolusFaster) { + settings.confirmBolusFaster = confirmBolusFaster + } + if let onlyAutotuneBasals = try? container.decode(Bool.self, forKey: .onlyAutotuneBasals) { settings.onlyAutotuneBasals = onlyAutotuneBasals } diff --git a/FreeAPS/Sources/Modules/WatchConfig/View/WatchConfigRootView.swift b/FreeAPS/Sources/Modules/WatchConfig/View/WatchConfigRootView.swift index fad8456157..eaaf5c90a2 100644 --- a/FreeAPS/Sources/Modules/WatchConfig/View/WatchConfigRootView.swift +++ b/FreeAPS/Sources/Modules/WatchConfig/View/WatchConfigRootView.swift @@ -21,6 +21,8 @@ extension WatchConfig { Toggle("Display Protein & Fat", isOn: $state.displayFatAndProteinOnWatch) + Toggle("Confirm Bolus Faster", isOn: $state.confirmBolusFaster) + Section(header: Text("Garmin Watch")) { List { ForEach(state.devices, id: \.uuid) { device in diff --git a/FreeAPS/Sources/Modules/WatchConfig/WatchConfigStateModel.swift b/FreeAPS/Sources/Modules/WatchConfig/WatchConfigStateModel.swift index 825fe20024..a4f52b0a69 100644 --- a/FreeAPS/Sources/Modules/WatchConfig/WatchConfigStateModel.swift +++ b/FreeAPS/Sources/Modules/WatchConfig/WatchConfigStateModel.swift @@ -31,6 +31,7 @@ extension WatchConfig { @Published var devices: [IQDevice] = [] @Published var selectedAwConfig: AwConfig = .HR @Published var displayFatAndProteinOnWatch = false + @Published var confirmBolusFaster = false private(set) var preferences = Preferences() @@ -38,6 +39,7 @@ extension WatchConfig { preferences = provider.preferences 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 diff --git a/FreeAPS/Sources/Services/WatchManager/WatchManager.swift b/FreeAPS/Sources/Services/WatchManager/WatchManager.swift index f5e5a580e9..74e3f4b3b4 100644 --- a/FreeAPS/Sources/Services/WatchManager/WatchManager.swift +++ b/FreeAPS/Sources/Services/WatchManager/WatchManager.swift @@ -118,6 +118,7 @@ final class BaseWatchManager: NSObject, WatchManager, Injectable { self.state.bolusAfterCarbs = !self.settingsManager.settings.skipBolusScreenAfterCarbs self.state.displayOnWatch = self.settingsManager.settings.displayOnWatch self.state.displayFatAndProteinOnWatch = self.settingsManager.settings.displayFatAndProteinOnWatch + self.state.confirmBolusFaster = self.settingsManager.settings.confirmBolusFaster let eBG = self.eventualBGString() self.state.eventualBG = eBG.map { "⇢ " + $0 } diff --git a/FreeAPSWatch WatchKit Extension/DataFlow.swift b/FreeAPSWatch WatchKit Extension/DataFlow.swift index d6f7848c13..0b02b0ef4a 100644 --- a/FreeAPSWatch WatchKit Extension/DataFlow.swift +++ b/FreeAPSWatch WatchKit Extension/DataFlow.swift @@ -22,6 +22,7 @@ struct WatchState: Codable { var eventualBGRaw: String? var displayOnWatch: AwConfig? var displayFatAndProteinOnWatch: Bool? + var confirmBolusFaster: Bool? var useNewCalc: Bool? var isf: Decimal? var override: String? diff --git a/FreeAPSWatch WatchKit Extension/Views/BolusConfirmationView.swift b/FreeAPSWatch WatchKit Extension/Views/BolusConfirmationView.swift index 23a9d4cc48..aa85dff411 100644 --- a/FreeAPSWatch WatchKit Extension/Views/BolusConfirmationView.swift +++ b/FreeAPSWatch WatchKit Extension/Views/BolusConfirmationView.swift @@ -75,7 +75,7 @@ struct BolusConfirmationView: View { $crownProgress, from: 0.0, through: 100.0, - by: 0.5, + by: state.confirmBolusFaster ? 5 : 0.5, sensitivity: .high, isContinuous: false, isHapticFeedbackEnabled: true diff --git a/FreeAPSWatch WatchKit Extension/WatchStateModel.swift b/FreeAPSWatch WatchKit Extension/WatchStateModel.swift index 387e0920be..dbbdac667f 100644 --- a/FreeAPSWatch WatchKit Extension/WatchStateModel.swift +++ b/FreeAPSWatch WatchKit Extension/WatchStateModel.swift @@ -34,6 +34,7 @@ class WatchStateModel: NSObject, ObservableObject { @Published var isBolusViewActive = false @Published var displayOnWatch: AwConfig = .BGTarget @Published var displayFatAndProteinOnWatch = false + @Published var confirmBolusFaster = false @Published var useNewCalc = false @Published var eventualBG = "" @Published var isConfirmationViewActive = false { @@ -175,6 +176,7 @@ class WatchStateModel: NSObject, ObservableObject { eventualBG = state.eventualBG ?? "" displayOnWatch = state.displayOnWatch ?? .BGTarget displayFatAndProteinOnWatch = state.displayFatAndProteinOnWatch ?? false + confirmBolusFaster = state.confirmBolusFaster ?? false useNewCalc = state.useNewCalc ?? false isf = state.isf override = state.override