Skip to content

Commit 97f6c73

Browse files
authored
nate/fix/LOOP-1927/manual-glucose-entry (#256)
* allow manual glucose entry without carb entry * the manual glucose entry displayed in the CGM pill is never overridden * manually entered glucose needs interpretation from the CGM manager to be display correctly * update to glucose icon display if manual glucose entry * updating the display of a manual glucose entry within the CGM pill * the status bar determines when it should adjust its layout for narrow displays * updated tests * clean up * added hardcoded glucose range categorization when feature is disabled * DIY categorization glucose range for both manual and CGM values
1 parent 5780971 commit 97f6c73

17 files changed

+452
-75
lines changed

Common/FeatureFlags.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import Foundation
1111
let FeatureFlags = FeatureFlagConfiguration()
1212

1313
struct FeatureFlagConfiguration: Decodable {
14+
let cgmManagerCategorizeManualGlucoseRangeEnabled: Bool
1415
let criticalAlertsEnabled: Bool
1516
let deleteAllButtonEnabled: Bool
1617
let fiaspInsulinModelEnabled: Bool
@@ -26,6 +27,12 @@ struct FeatureFlagConfiguration: Decodable {
2627
let walshInsulinModelEnabled: Bool
2728

2829
fileprivate init() {
30+
#if CGM_MANAGER_CATEGORIZE_GLUCOSE_RANGE_ENABLED
31+
self.cgmManagerCategorizeManualGlucoseRangeEnabled = true
32+
#else
33+
self.cgmManagerCategorizeManualGlucoseRangeEnabled = false
34+
#endif
35+
2936
#if CRITICAL_ALERTS_ENABLED
3037
self.criticalAlertsEnabled = true
3138
#else
@@ -119,6 +126,7 @@ struct FeatureFlagConfiguration: Decodable {
119126
extension FeatureFlagConfiguration : CustomDebugStringConvertible {
120127
var debugDescription: String {
121128
return [
129+
"* cgmManagerCategorizeManualGlucoseRangeEnabled: \(cgmManagerCategorizeManualGlucoseRangeEnabled)",
122130
"* criticalAlertsEnabled: \(criticalAlertsEnabled)",
123131
"* deleteAllButtonEnabled: \(deleteAllButtonEnabled)",
124132
"* fiaspInsulinModelEnabled: \(fiaspInsulinModelEnabled)",

Common/Models/StatusExtensionContext.swift

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,12 @@ struct NetBasalContext {
2020
let end: Date?
2121
}
2222

23-
struct SensorDisplayableContext: SensorDisplayable {
23+
struct GlucoseDisplayableContext: GlucoseDisplayable {
2424
let isStateValid: Bool
2525
let stateDescription: String
2626
let trendType: GlucoseTrend?
2727
let isLocal: Bool
28-
let glucoseValueType: GlucoseValueType?
28+
let glucoseRangeCategory: GlucoseRangeCategory?
2929
}
3030

3131
struct GlucoseContext: GlucoseValue {
@@ -128,15 +128,15 @@ extension NetBasalContext: RawRepresentable {
128128
}
129129
}
130130

131-
extension SensorDisplayableContext: RawRepresentable {
131+
extension GlucoseDisplayableContext: RawRepresentable {
132132
typealias RawValue = [String: Any]
133133

134-
init(_ other: SensorDisplayable) {
134+
init(_ other: GlucoseDisplayable) {
135135
isStateValid = other.isStateValid
136136
stateDescription = other.stateDescription
137137
isLocal = other.isLocal
138138
trendType = other.trendType
139-
glucoseValueType = other.glucoseValueType
139+
glucoseRangeCategory = other.glucoseRangeCategory
140140
}
141141

142142
init?(rawValue: RawValue) {
@@ -158,10 +158,10 @@ extension SensorDisplayableContext: RawRepresentable {
158158
trendType = nil
159159
}
160160

161-
if let glucoseValueRawValue = rawValue["glucoseValueType"] as? GlucoseValueType.RawValue {
162-
glucoseValueType = GlucoseValueType(rawValue: glucoseValueRawValue)
161+
if let glucoseRangeCategoryRawValue = rawValue["glucoseRangeCategory"] as? GlucoseRangeCategory.RawValue {
162+
glucoseRangeCategory = GlucoseRangeCategory(rawValue: glucoseRangeCategoryRawValue)
163163
} else {
164-
glucoseValueType = nil
164+
glucoseRangeCategory = nil
165165
}
166166
}
167167

@@ -172,7 +172,7 @@ extension SensorDisplayableContext: RawRepresentable {
172172
"isLocal": isLocal
173173
]
174174
raw["trendType"] = trendType?.rawValue
175-
raw["glucoseValueType"] = glucoseValueType?.rawValue
175+
raw["glucoseRangeCategory"] = glucoseRangeCategory?.rawValue
176176

177177
return raw
178178
}
@@ -287,7 +287,7 @@ struct StatusExtensionContext: RawRepresentable {
287287
var netBasal: NetBasalContext?
288288
var batteryPercentage: Double?
289289
var reservoirCapacity: Double?
290-
var sensor: SensorDisplayableContext?
290+
var glucoseDisplay: GlucoseDisplayableContext?
291291
var pumpManagerHUDViewContext: PumpManagerHUDViewContext?
292292
var pumpStatusHighlightContext: DeviceStatusHighlightContext?
293293
var pumpLifecycleProgressContext: DeviceLifecycleProgressContext?
@@ -313,8 +313,8 @@ struct StatusExtensionContext: RawRepresentable {
313313
batteryPercentage = rawValue["batteryPercentage"] as? Double
314314
reservoirCapacity = rawValue["reservoirCapacity"] as? Double
315315

316-
if let rawValue = rawValue["sensor"] as? SensorDisplayableContext.RawValue {
317-
sensor = SensorDisplayableContext(rawValue: rawValue)
316+
if let rawValue = rawValue["glucoseDisplay"] as? GlucoseDisplayableContext.RawValue {
317+
glucoseDisplay = GlucoseDisplayableContext(rawValue: rawValue)
318318
}
319319

320320
if let rawPumpManagerHUDViewContext = rawValue["pumpManagerHUDViewContext"] as? PumpManagerHUDViewContext.RawValue {
@@ -348,7 +348,7 @@ struct StatusExtensionContext: RawRepresentable {
348348
raw["netBasal"] = netBasal?.rawValue
349349
raw["batteryPercentage"] = batteryPercentage
350350
raw["reservoirCapacity"] = reservoirCapacity
351-
raw["sensor"] = sensor?.rawValue
351+
raw["glucoseDisplay"] = glucoseDisplay?.rawValue
352352
raw["pumpManagerHUDViewContext"] = pumpManagerHUDViewContext?.rawValue
353353
raw["pumpStatusHighlightContext"] = pumpStatusHighlightContext?.rawValue
354354
raw["pumpLifecycleProgressContext"] = pumpLifecycleProgressContext?.rawValue

Loop Status Extension/StatusViewController.swift

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,6 @@ class StatusViewController: UIViewController, NCWidgetProviding {
2525
hudView.cgmStatusHUD.tintColor = .label
2626
hudView.pumpStatusHUD.tintColor = .insulinTintColor
2727
hudView.backgroundColor = .clear
28-
29-
if view.bounds.width < 375 {
30-
// need to adjust for narrow display
31-
hudView.adjustViewsForNarrowDisplay = true
32-
}
3328

3429
// given the reduced width of the widget, allow for tighter spacing
3530
hudView.containerView.spacing = 6.0
@@ -305,7 +300,8 @@ class StatusViewController: UIViewController, NCWidgetProviding {
305300
at: lastGlucose.startDate,
306301
unit: unit,
307302
staleGlucoseAge: recencyInterval,
308-
sensor: context.sensor
303+
glucoseDisplay: context.glucoseDisplay,
304+
wasUserEntered: lastGlucose.wasUserEntered
309305
)
310306
}
311307

Loop.xcodeproj/project.pbxproj

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -419,17 +419,19 @@
419419
B405E35924D2A75B00DD058D /* DerivedAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A966152923EA5A37005D8B29 /* DerivedAssets.xcassets */; };
420420
B405E35A24D2B1A400DD058D /* HUDAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4F2C15961E09E94E00E160D4 /* HUDAssets.xcassets */; };
421421
B405E35B24D2E05600DD058D /* HUDAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4F2C15961E09E94E00E160D4 /* HUDAssets.xcassets */; };
422+
B40D07C7251A89D500C1C6D7 /* GlucoseDisplay.swift in Sources */ = {isa = PBXBuildFile; fileRef = B40D07C6251A89D500C1C6D7 /* GlucoseDisplay.swift */; };
422423
B42C951424A3C76000857C73 /* CGMStatusHUDViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = B42C951324A3C76000857C73 /* CGMStatusHUDViewModel.swift */; };
423424
B43DA44124D9C12100CAFF4E /* DismissibleHostingController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B43DA44024D9C12100CAFF4E /* DismissibleHostingController.swift */; };
424425
B47A791C2508009E006C0E11 /* ChartAxisValuesStaticGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = B47A791B2508009E006C0E11 /* ChartAxisValuesStaticGenerator.swift */; };
425426
B48B0BAC24900093009A48DE /* PumpStatusHUDView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B48B0BAB24900093009A48DE /* PumpStatusHUDView.swift */; };
426-
B490A03F24D0550F00F509FA /* GlucoseValueType.swift in Sources */ = {isa = PBXBuildFile; fileRef = B490A03E24D0550F00F509FA /* GlucoseValueType.swift */; };
427+
B490A03F24D0550F00F509FA /* GlucoseRangeCategory.swift in Sources */ = {isa = PBXBuildFile; fileRef = B490A03E24D0550F00F509FA /* GlucoseRangeCategory.swift */; };
427428
B490A04124D0559D00F509FA /* DeviceLifecycleProgressState.swift in Sources */ = {isa = PBXBuildFile; fileRef = B490A04024D0559D00F509FA /* DeviceLifecycleProgressState.swift */; };
428429
B490A04324D055D900F509FA /* DeviceStatusHighlight.swift in Sources */ = {isa = PBXBuildFile; fileRef = B490A04224D055D900F509FA /* DeviceStatusHighlight.swift */; };
429430
B491B09E24D0B600004CBE8F /* DerivedAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A966152523EA5A25005D8B29 /* DerivedAssets.xcassets */; };
430431
B491B0A324D0B66D004CBE8F /* Color.swift in Sources */ = {isa = PBXBuildFile; fileRef = B490A03C24D04F9400F509FA /* Color.swift */; };
431432
B491B0A424D0B675004CBE8F /* UIColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43BFF0B11E45C18400FF19A9 /* UIColor.swift */; };
432433
B4AC0D3F24B9005300CDB0A1 /* UIImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 437CEEE31CDE5C0A003C8C80 /* UIImage.swift */; };
434+
B4BC56382518DEA900373647 /* CGMStatusHUDViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4BC56372518DEA900373647 /* CGMStatusHUDViewModelTests.swift */; };
433435
B4D620D424D9EDB900043B3C /* GuidanceColors.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4D620D324D9EDB900043B3C /* GuidanceColors.swift */; };
434436
B4E96D4B248A6B6E002DABAD /* DeviceStatusHUDView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4E96D4A248A6B6E002DABAD /* DeviceStatusHUDView.swift */; };
435437
B4E96D4F248A6E20002DABAD /* CGMStatusHUDView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4E96D4E248A6E20002DABAD /* CGMStatusHUDView.swift */; };
@@ -1268,15 +1270,17 @@
12681270
A9F703722489BC8500C98AD8 /* CarbStore+SimulatedCoreData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CarbStore+SimulatedCoreData.swift"; sourceTree = "<group>"; };
12691271
A9F703742489C9A000C98AD8 /* GlucoseStore+SimulatedCoreData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "GlucoseStore+SimulatedCoreData.swift"; sourceTree = "<group>"; };
12701272
A9F703762489D8AA00C98AD8 /* PersistentDeviceLog+SimulatedCoreData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PersistentDeviceLog+SimulatedCoreData.swift"; sourceTree = "<group>"; };
1273+
B40D07C6251A89D500C1C6D7 /* GlucoseDisplay.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GlucoseDisplay.swift; sourceTree = "<group>"; };
12711274
B42C951324A3C76000857C73 /* CGMStatusHUDViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CGMStatusHUDViewModel.swift; sourceTree = "<group>"; };
12721275
B42C951624A3CAF200857C73 /* NotificationsCriticalAlertPermissionsViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NotificationsCriticalAlertPermissionsViewModel.swift; sourceTree = "<group>"; };
12731276
B43DA44024D9C12100CAFF4E /* DismissibleHostingController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DismissibleHostingController.swift; sourceTree = "<group>"; };
12741277
B47A791B2508009E006C0E11 /* ChartAxisValuesStaticGenerator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChartAxisValuesStaticGenerator.swift; sourceTree = "<group>"; };
12751278
B48B0BAB24900093009A48DE /* PumpStatusHUDView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PumpStatusHUDView.swift; sourceTree = "<group>"; };
12761279
B490A03C24D04F9400F509FA /* Color.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Color.swift; sourceTree = "<group>"; };
1277-
B490A03E24D0550F00F509FA /* GlucoseValueType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GlucoseValueType.swift; sourceTree = "<group>"; };
1280+
B490A03E24D0550F00F509FA /* GlucoseRangeCategory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GlucoseRangeCategory.swift; sourceTree = "<group>"; };
12781281
B490A04024D0559D00F509FA /* DeviceLifecycleProgressState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeviceLifecycleProgressState.swift; sourceTree = "<group>"; };
12791282
B490A04224D055D900F509FA /* DeviceStatusHighlight.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeviceStatusHighlight.swift; sourceTree = "<group>"; };
1283+
B4BC56372518DEA900373647 /* CGMStatusHUDViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CGMStatusHUDViewModelTests.swift; sourceTree = "<group>"; };
12801284
B4D620D324D9EDB900043B3C /* GuidanceColors.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GuidanceColors.swift; sourceTree = "<group>"; };
12811285
B4E96D4A248A6B6E002DABAD /* DeviceStatusHUDView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeviceStatusHUDView.swift; sourceTree = "<group>"; };
12821286
B4E96D4E248A6E20002DABAD /* CGMStatusHUDView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CGMStatusHUDView.swift; sourceTree = "<group>"; };
@@ -1590,12 +1594,14 @@
15901594
children = (
15911595
43511CDD21FD80AD00566C63 /* RetrospectiveCorrection */,
15921596
C17824A41E1AD4D100D9D25C /* BolusRecommendation.swift */,
1597+
B40D07C6251A89D500C1C6D7 /* GlucoseDisplay.swift */,
15931598
43C2FAE01EB656A500364AFF /* GlucoseEffectVelocity.swift */,
15941599
436A0DA41D236A2A00104B24 /* LoopError.swift */,
1600+
E9C00EF424C623EF00628F35 /* LoopSettings+Loop.swift */,
15951601
4F526D601DF8D9A900A04910 /* NetBasal.swift */,
15961602
438D42F81D7C88BC003244B0 /* PredictionInputEffect.swift */,
1597-
4328E0311CFC068900E199AA /* WatchContext+LoopKit.swift */,
15981603
C165B8CD23302C5D0004112E /* RemoteCommand.swift */,
1604+
4328E0311CFC068900E199AA /* WatchContext+LoopKit.swift */,
15991605
E9C00EF424C623EF00628F35 /* LoopSettings+Loop.swift */,
16001606
A987CD4824A58A0100439ADC /* ZipArchive.swift */,
16011607
);
@@ -1966,7 +1972,9 @@
19661972
E9C58A7624DB510500487A17 /* Fixtures */,
19671973
A9E6DFE4246A0418005B1A1C /* Extensions */,
19681974
1DA7A83F24476E8C008257F0 /* Managers */,
1975+
E93E86AC24DDE02C00FF40C8 /* Mock Stores */,
19691976
A9E6DFED246A0460005B1A1C /* Models */,
1977+
B4BC56362518DE8800373647 /* ViewModels */,
19701978
43E2D90F1D20C581004DA55F /* Info.plist */,
19711979
A9DF02CA24F72B9E00B7C988 /* CriticalEventLogTests.swift */,
19721980
A9DAE7CF2332D77F006AE942 /* LoopTests.swift */,
@@ -2079,7 +2087,7 @@
20792087
B490A04024D0559D00F509FA /* DeviceLifecycleProgressState.swift */,
20802088
B490A04224D055D900F509FA /* DeviceStatusHighlight.swift */,
20812089
B43DA44024D9C12100CAFF4E /* DismissibleHostingController.swift */,
2082-
B490A03E24D0550F00F509FA /* GlucoseValueType.swift */,
2090+
B490A03E24D0550F00F509FA /* GlucoseRangeCategory.swift */,
20832091
B4D620D324D9EDB900043B3C /* GuidanceColors.swift */,
20842092
1DB1CA4C24A55F0000B3B94C /* Image.swift */,
20852093
434F54561D287FDB002A9274 /* NibLoadable.swift */,
@@ -2314,6 +2322,14 @@
23142322
path = ViewModel;
23152323
sourceTree = "<group>";
23162324
};
2325+
B4BC56362518DE8800373647 /* ViewModels */ = {
2326+
isa = PBXGroup;
2327+
children = (
2328+
B4BC56372518DEA900373647 /* CGMStatusHUDViewModelTests.swift */,
2329+
);
2330+
path = ViewModels;
2331+
sourceTree = "<group>";
2332+
};
23172333
C16DA84022E8E104008624C2 /* Plugins */ = {
23182334
isa = PBXGroup;
23192335
children = (
@@ -3350,6 +3366,7 @@
33503366
438D42FB1D7D11A4003244B0 /* PredictionInputEffectTableViewCell.swift in Sources */,
33513367
89A1B66E24ABFDF800117AC2 /* SupportedBolusVolumesUserInfo.swift in Sources */,
33523368
432E73CB1D24B3D6009AD15D /* RemoteDataServicesManager.swift in Sources */,
3369+
B40D07C7251A89D500C1C6D7 /* GlucoseDisplay.swift in Sources */,
33533370
43C2FAE11EB656A500364AFF /* GlucoseEffectVelocity.swift in Sources */,
33543371
);
33553372
runOnlyForDeploymentPostprocessing = 0;
@@ -3556,6 +3573,7 @@
35563573
A9DAE7D02332D77F006AE942 /* LoopTests.swift in Sources */,
35573574
E93E86B024DDE1BD00FF40C8 /* MockGlucoseStore.swift in Sources */,
35583575
1DFE9E172447B6270082C280 /* UserNotificationAlertPresenterTests.swift in Sources */,
3576+
B4BC56382518DEA900373647 /* CGMStatusHUDViewModelTests.swift in Sources */,
35593577
A9E6DFE8246A043D005B1A1C /* DoseStoreTests.swift in Sources */,
35603578
E93E86B224DDE21D00FF40C8 /* MockCarbStore.swift in Sources */,
35613579
);
@@ -3599,7 +3617,7 @@
35993617
43FCEEB3221BC3B60013DD30 /* DoseChart.swift in Sources */,
36003618
4F7528AA1DFE215100C322D6 /* HKUnit.swift in Sources */,
36013619
4FB76FB61E8C426900B39636 /* ChartPointsTouchHighlightLayerViewCache.swift in Sources */,
3602-
B490A03F24D0550F00F509FA /* GlucoseValueType.swift in Sources */,
3620+
B490A03F24D0550F00F509FA /* GlucoseRangeCategory.swift in Sources */,
36033621
4F2C15931E09BF2C00E160D4 /* HUDView.swift in Sources */,
36043622
43BFF0B71E45C20C00FF19A9 /* NumberFormatter.swift in Sources */,
36053623
B43DA44124D9C12100CAFF4E /* DismissibleHostingController.swift in Sources */,

Loop/Managers/DeviceDataManager.swift

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -544,8 +544,45 @@ extension DeviceDataManager {
544544
return pumpManager?.status
545545
}
546546

547-
var sensorState: SensorDisplayable? {
548-
return cgmManager?.sensorState
547+
func glucoseDisplay(for glucose: GlucoseSampleValue?) -> GlucoseDisplayable? {
548+
guard let glucose = glucose else {
549+
return cgmManager?.glucoseDisplay
550+
}
551+
552+
guard FeatureFlags.cgmManagerCategorizeManualGlucoseRangeEnabled else {
553+
// Using Dexcom default glucose thresholds to categorize a glucose range
554+
let urgentLowGlucoseThreshold = HKQuantity(unit: .milligramsPerDeciliter, doubleValue: 55)
555+
let lowGlucoseThreshold = HKQuantity(unit: .milligramsPerDeciliter, doubleValue: 80)
556+
let highGlucoseThreshold = HKQuantity(unit: .milligramsPerDeciliter, doubleValue: 200)
557+
558+
let glucoseRangeCategory: GlucoseRangeCategory
559+
switch glucose.quantity {
560+
case ...urgentLowGlucoseThreshold:
561+
glucoseRangeCategory = .urgentLow
562+
case urgentLowGlucoseThreshold..<lowGlucoseThreshold:
563+
glucoseRangeCategory = .low
564+
case lowGlucoseThreshold..<highGlucoseThreshold:
565+
glucoseRangeCategory = .normal
566+
default:
567+
glucoseRangeCategory = .high
568+
}
569+
570+
if glucose.wasUserEntered {
571+
return ManualGlucoseDisplay(glucoseRangeCategory: glucoseRangeCategory)
572+
} else {
573+
var glucoseDisplay = GlucoseDisplay(cgmManager?.glucoseDisplay)
574+
glucoseDisplay?.glucoseRangeCategory = glucoseRangeCategory
575+
return glucoseDisplay
576+
}
577+
}
578+
579+
if glucose.wasUserEntered {
580+
// the CGM manager needs to determine the glucose range category for a manual glucose based on its managed glucose thresholds
581+
let glucoseRangeCategory = (cgmManager as? CGMManagerUI)?.glucoseRangeCategory(for: glucose)
582+
return ManualGlucoseDisplay(glucoseRangeCategory: glucoseRangeCategory)
583+
} else {
584+
return cgmManager?.glucoseDisplay
585+
}
549586
}
550587

551588
func updatePumpManagerBLEHeartbeatPreference() {

Loop/Managers/StatusExtensionDataManager.swift

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -106,13 +106,13 @@ final class StatusExtensionDataManager {
106106
context.batteryPercentage = dataManager.pumpManager?.status.pumpBatteryChargeRemaining
107107
context.reservoirCapacity = dataManager.pumpManager?.pumpReservoirCapacity
108108

109-
if let sensorInfo = dataManager.sensorState {
110-
context.sensor = SensorDisplayableContext(
111-
isStateValid: sensorInfo.isStateValid,
112-
stateDescription: sensorInfo.stateDescription,
113-
trendType: sensorInfo.trendType,
114-
isLocal: sensorInfo.isLocal,
115-
glucoseValueType: sensorInfo.glucoseValueType
109+
if let glucoseDisplay = dataManager.glucoseDisplay(for: dataManager.glucoseStore.latestGlucose) {
110+
context.glucoseDisplay = GlucoseDisplayableContext(
111+
isStateValid: glucoseDisplay.isStateValid,
112+
stateDescription: glucoseDisplay.stateDescription,
113+
trendType: glucoseDisplay.trendType,
114+
isLocal: glucoseDisplay.isLocal,
115+
glucoseRangeCategory: glucoseDisplay.glucoseRangeCategory
116116
)
117117
}
118118

0 commit comments

Comments
 (0)