diff --git a/Loop/Managers/DoseMath.swift b/Loop/Managers/DoseMath.swift index 9f6fe51f3a..cb224a271f 100644 --- a/Loop/Managers/DoseMath.swift +++ b/Loop/Managers/DoseMath.swift @@ -163,7 +163,7 @@ struct DoseMath { let eventualGlucoseTargets = glucoseTargetRange.value(at: eventualGlucose.startDate) guard minGlucose.quantity >= minimumBGGuard.quantity else { - return BolusRecommendation(amount: 0, pendingInsulin: pendingInsulin, notice: .glucoseBelowMinimumGuard) + return BolusRecommendation(amount: 0, pendingInsulin: pendingInsulin, notice: .glucoseBelowMinimumGuard(minGlucose: minGlucose, unit: glucoseTargetRange.unit)) } let targetGlucose = eventualGlucoseTargets.maxValue @@ -180,7 +180,7 @@ struct DoseMath { let notice: BolusRecommendationNotice? if cappedAmount > 0 && minGlucose.quantity.doubleValue(for: glucoseTargetRange.unit) < eventualGlucoseTargets.minValue { if minGlucose.startDate == glucose[0].startDate { - notice = .currentGlucoseBelowTarget + notice = .currentGlucoseBelowTarget(glucose: minGlucose, unit: glucoseTargetRange.unit) } else { notice = .predictedGlucoseBelowTarget(minGlucose: minGlucose, unit: glucoseTargetRange.unit) } diff --git a/Loop/Managers/LoopDataManager.swift b/Loop/Managers/LoopDataManager.swift index 5908573567..2ed393cd9a 100644 --- a/Loop/Managers/LoopDataManager.swift +++ b/Loop/Managers/LoopDataManager.swift @@ -436,7 +436,7 @@ final class LoopDataManager { completionHandler(nil, LoopError.missingDataError("Glucose data not available")) return } - + if let carbStore = deviceDataManager.carbStore { carbStore.getGlucoseEffects(startDate: effectStartDate) { (effects, error) -> Void in if let error = error { diff --git a/Loop/Models/BolusRecommendation.swift b/Loop/Models/BolusRecommendation.swift index 80951c68d1..cc225f26ee 100644 --- a/Loop/Models/BolusRecommendation.swift +++ b/Loop/Models/BolusRecommendation.swift @@ -11,26 +11,29 @@ import LoopKit import HealthKit enum BolusRecommendationNotice: CustomStringConvertible, Equatable { - case glucoseBelowMinimumGuard - case currentGlucoseBelowTarget + case glucoseBelowMinimumGuard(minGlucose: GlucoseValue, unit: HKUnit) + case currentGlucoseBelowTarget(glucose: GlucoseValue, unit: HKUnit) case predictedGlucoseBelowTarget(minGlucose: GlucoseValue, unit: HKUnit) public var description: String { + switch self { - case .glucoseBelowMinimumGuard: - return NSLocalizedString("Predicted glucose is below your minimum BG Guard setting.", comment: "Notice message when recommending bolus when BG is below minimum BG guard.") - case .currentGlucoseBelowTarget: - return NSLocalizedString("Glucose is below target range.", comment: "Message when offering bolus prediction even though bg is below range.") + case .glucoseBelowMinimumGuard(let minGlucose, let unit): + let glucoseFormatter = NumberFormatter.glucoseFormatter(for: unit) + let bgStr = glucoseFormatter.describingGlucose(minGlucose.quantity, for: unit)! + return String(format: NSLocalizedString("Predicted glucose of %1$@ is below your minimum BG Guard setting.", comment: "Notice message when recommending bolus when BG is below minimum BG guard. (1: glucose value)"), bgStr) + case .currentGlucoseBelowTarget(let glucose, let unit): + let glucoseFormatter = NumberFormatter.glucoseFormatter(for: unit) + let bgStr = glucoseFormatter.describingGlucose(glucose.quantity, for: unit)! + return String(format: NSLocalizedString("Current glucose of %1$@ is below target range.", comment: "Message when offering bolus prediction even though bg is below range. (1: glucose value)"), bgStr) case .predictedGlucoseBelowTarget(let minGlucose, let unit): let timeFormatter = DateFormatter() timeFormatter.dateStyle = .none timeFormatter.timeStyle = .short let time = timeFormatter.string(from: minGlucose.startDate) - let numberFormatter = NumberFormatter.glucoseFormatter(for: unit) - - let minBGStr = numberFormatter.describingGlucose(minGlucose.quantity, for: unit)! - + let glucoseFormatter = NumberFormatter.glucoseFormatter(for: unit) + let minBGStr = glucoseFormatter.describingGlucose(minGlucose.quantity, for: unit)! return String(format: NSLocalizedString("Predicted glucose at %1$@ is %2$@.", comment: "Message when offering bolus prediction even though bg is below range and minBG is in future. (1: glucose time)(2: glucose number)"), time, minBGStr) } diff --git a/Loop/View Controllers/BolusViewController.swift b/Loop/View Controllers/BolusViewController.swift index e59e7952d2..3a699f5915 100644 --- a/Loop/View Controllers/BolusViewController.swift +++ b/Loop/View Controllers/BolusViewController.swift @@ -65,12 +65,6 @@ final class BolusViewController: UITableViewController, IdentifiableClass, UITex var glucoseUnit: HKUnit = HKUnit.milligramsPerDeciliterUnit() - var loopError: Error? = nil { - didSet { - updateNotice(); - } - } - var bolusRecommendation: BolusRecommendation? = nil { didSet { let amount = bolusRecommendation?.amount ?? 0 @@ -243,9 +237,7 @@ final class BolusViewController: UITableViewController, IdentifiableClass, UITex }() private func updateNotice() { - if let error = loopError { - noticeLabel?.text = "⚠ " + error.localizedDescription - } else if let notice = bolusRecommendation?.notice { + if let notice = bolusRecommendation?.notice { noticeLabel?.text = "⚠ " + String(describing: notice) } else { noticeLabel?.text = nil diff --git a/Loop/View Controllers/StatusTableViewController.swift b/Loop/View Controllers/StatusTableViewController.swift index e970fec0ba..7a7b8ed7b5 100644 --- a/Loop/View Controllers/StatusTableViewController.swift +++ b/Loop/View Controllers/StatusTableViewController.swift @@ -676,12 +676,11 @@ final class StatusTableViewController: UITableViewController, UIGestureRecognize } } } - self.dataManager.loopManager.getLoopStatus({ (_, _, _, _, _, iob, cob, error) in + self.dataManager.loopManager.getLoopStatus({ (_, _, _, _, _, iob, cob, _) in DispatchQueue.main.async { vc.glucoseUnit = self.charts.glucoseUnit vc.activeInsulin = iob?.value vc.activeCarbohydrates = cob?.quantity.doubleValue(for: HKUnit.gram()) - vc.loopError = error } })