Skip to content

Commit 5e260d1

Browse files
authored
Provide bolus amount suggestions for all watch boluses, and honor max bolus. (#145)
Progress toward #30
2 parents d2cefde + 7d536c0 commit 5e260d1

File tree

5 files changed

+38
-10
lines changed

5 files changed

+38
-10
lines changed

Loop/Managers/WatchDataManager.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ final class WatchDataManager: NSObject, WCSessionDelegate {
103103

104104
let glucose = deviceDataManager.glucoseStore?.latestGlucose
105105
let reservoir = deviceDataManager.doseStore.lastReservoirValue
106+
let maxBolus = deviceDataManager.maximumBolus
106107

107108
deviceDataManager.loopManager.getLoopStatus { (predictedGlucose, recommendedTempBasal, lastTempBasal, lastLoopCompleted, insulinOnBoard, error) in
108109

@@ -115,6 +116,7 @@ final class WatchDataManager: NSObject, WCSessionDelegate {
115116

116117
context.loopLastRunDate = lastLoopCompleted
117118
context.recommendedBolusDose = units
119+
context.maxBolus = maxBolus
118120

119121
if let trend = self.deviceDataManager.sensorInfo?.trendType {
120122
context.glucoseTrend = trend
@@ -155,7 +157,7 @@ final class WatchDataManager: NSObject, WCSessionDelegate {
155157
switch message["name"] as? String {
156158
case CarbEntryUserInfo.name?:
157159
addCarbEntryFromWatchMessage(message) { (units) in
158-
replyHandler(BolusSuggestionUserInfo(recommendedBolus: units ?? 0).rawValue)
160+
replyHandler(BolusSuggestionUserInfo(recommendedBolus: units ?? 0, maxBolus: self.deviceDataManager.maximumBolus).rawValue)
159161
}
160162
case SetBolusUserInfo.name?:
161163
if let bolus = SetBolusUserInfo(rawValue: message) {

WatchApp Extension/Controllers/BolusInterfaceController.swift

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,6 @@ final class BolusInterfaceController: WKInterfaceController, IdentifiableClass {
2727
}
2828
}
2929

30-
private var maxBolusValue: Double = 15
31-
3230
private func pickerValueFromBolusValue(bolusValue: Double) -> Int {
3331
switch bolusValue {
3432
case let bolus where bolus > 10:
@@ -71,15 +69,25 @@ final class BolusInterfaceController: WKInterfaceController, IdentifiableClass {
7169
super.awakeWithContext(context)
7270

7371
let maxPickerValue: Int
72+
var maxBolusValue: Double = 15
7473
let pickerValue: Int
7574

7675
if let context = context as? BolusSuggestionUserInfo {
77-
maxPickerValue = pickerValueFromBolusValue(context.recommendedBolus)
76+
let recommendedBolus = context.recommendedBolus
77+
78+
if let maxBolus = context.maxBolus {
79+
maxBolusValue = maxBolus
80+
} else if recommendedBolus > 0 {
81+
maxBolusValue = recommendedBolus
82+
}
83+
84+
maxPickerValue = pickerValueFromBolusValue(maxBolusValue)
85+
let recommendedPickerValue = pickerValueFromBolusValue(recommendedBolus)
7886
maxBolusValue = bolusValueFromPickerValue(maxPickerValue)
79-
pickerValue = Int(Double(maxPickerValue) * 0.75)
87+
pickerValue = Int(Double(recommendedPickerValue) * 0.75)
8088
bolusValue = bolusValueFromPickerValue(pickerValue)
8189

82-
if let valueString = formatter.stringFromNumber(maxBolusValue) {
90+
if let valueString = formatter.stringFromNumber(recommendedBolus) {
8391
recommendedValueLabel.setText(String(format: NSLocalizedString("Rec: %@ U", comment: "The label and value showing the recommended bolus"), valueString).localizedUppercaseString)
8492
}
8593
} else {

WatchApp Extension/Controllers/StatusInterfaceController.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ final class StatusInterfaceController: ContextInterfaceController {
8181
}
8282

8383
@IBAction func setBolus() {
84-
presentControllerWithName(BolusInterfaceController.className, context: nil)
84+
presentControllerWithName(BolusInterfaceController.className, context: dataManager.lastContextData?.bolusSuggestion)
8585
}
8686

8787
}

WatchApp Extension/Models/BolusSuggestionUserInfo.swift

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,11 @@ import Foundation
1111

1212
final class BolusSuggestionUserInfo: RawRepresentable {
1313
let recommendedBolus: Double
14+
let maxBolus: Double?
1415

15-
init(recommendedBolus: Double) {
16+
init(recommendedBolus: Double, maxBolus: Double? = nil) {
1617
self.recommendedBolus = recommendedBolus
18+
self.maxBolus = maxBolus
1719
}
1820

1921
// MARK: - RawRepresentable
@@ -30,13 +32,20 @@ final class BolusSuggestionUserInfo: RawRepresentable {
3032
}
3133

3234
self.recommendedBolus = recommendedBolus
35+
self.maxBolus = rawValue["mb"] as? Double
3336
}
3437

3538
var rawValue: RawValue {
36-
return [
39+
var raw: RawValue = [
3740
"v": self.dynamicType.version,
3841
"name": BolusSuggestionUserInfo.name,
3942
"br": recommendedBolus
4043
]
44+
45+
if let maxBolus = maxBolus {
46+
raw["mb"] = maxBolus
47+
}
48+
49+
return raw
4150
}
4251
}

WatchApp Extension/Models/WatchContext.swift

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,10 @@ import HealthKit
1313
final class WatchContext: NSObject, RawRepresentable {
1414
typealias RawValue = [String: AnyObject]
1515

16-
private let version = 2
16+
private let version = 3
1717

1818
var preferredGlucoseUnit: HKUnit?
19+
var maxBolus: Double?
1920

2021
var glucose: HKQuantity?
2122
var glucoseTrend: GlucoseTrend?
@@ -27,6 +28,12 @@ final class WatchContext: NSObject, RawRepresentable {
2728
var lastNetTempBasalDate: NSDate?
2829
var recommendedBolusDose: Double?
2930

31+
var bolusSuggestion: BolusSuggestionUserInfo? {
32+
guard let recommended = recommendedBolusDose else { return nil }
33+
34+
return BolusSuggestionUserInfo(recommendedBolus: recommended, maxBolus: maxBolus)
35+
}
36+
3037
var COB: Double?
3138
var IOB: Double?
3239
var reservoir: Double?
@@ -72,6 +79,7 @@ final class WatchContext: NSObject, RawRepresentable {
7279
lastNetTempBasalDate = rawValue["bad"] as? NSDate
7380
recommendedBolusDose = rawValue["rbo"] as? Double
7481
COB = rawValue["cob"] as? Double
82+
maxBolus = rawValue["mb"] as? Double
7583
}
7684

7785
var rawValue: RawValue {
@@ -94,6 +102,7 @@ final class WatchContext: NSObject, RawRepresentable {
94102
raw["gd"] = glucoseDate
95103
raw["iob"] = IOB
96104
raw["ld"] = loopLastRunDate
105+
raw["mb"] = maxBolus
97106
raw["r"] = reservoir
98107
raw["rbo"] = recommendedBolusDose
99108
raw["rp"] = reservoirPercentage

0 commit comments

Comments
 (0)