Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Cartfile.resolved
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
github "LoopKit/Amplitude-iOS" "2137d5fd44bf630ed33e1e72d7af6d8f8612f270"
github "LoopKit/CGMBLEKit" "fe92d93c24d18ff9755ff027e9b036d3769a8a0a"
github "LoopKit/G4ShareSpy" "f6ae0cf1753131135f26046ddf07e096da884b84"
github "LoopKit/LoopKit" "eaed65166138c5ea1b8d8dddc7b14f1032f3da06"
github "LoopKit/LoopKit" "166f889e7c9e4369c8ba7168b4e1cf5c417354a8"
github "LoopKit/dexcom-share-client-swift" "cdbb1cd19cf54b37add6d6c25300445a6abe24da"
github "i-schuetz/SwiftCharts" "0.6.5"
github "maxkonovalov/MKRingProgressView" "2.2.2"
Expand Down
12 changes: 8 additions & 4 deletions LoopCore/LoopSettings.swift
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,10 @@ public struct LoopSettings: Equatable {

public let statusChartMinimumHistoryDisplay: TimeInterval = .hours(1)

public var glucoseUnit: HKUnit? {
return glucoseTargetRangeSchedule?.unit
}

// MARK - Guardrails

public func allowedSensitivityValues(for unit: HKUnit) -> [Double] {
Expand Down Expand Up @@ -121,12 +125,12 @@ extension LoopSettings {
}

public func preMealOverride(beginningAt date: Date = Date(), for duration: TimeInterval) -> TemporaryScheduleOverride? {
guard let premealTargetRange = preMealTargetRange else {
guard let premealTargetRange = preMealTargetRange, let unit = glucoseUnit else {
return nil
}
return TemporaryScheduleOverride(
context: .preMeal,
settings: TemporaryScheduleOverrideSettings(targetRange: premealTargetRange),
settings: TemporaryScheduleOverrideSettings(unit: unit, targetRange: premealTargetRange),
startDate: date,
duration: .finite(duration)
)
Expand All @@ -137,12 +141,12 @@ extension LoopSettings {
}

public func legacyWorkoutOverride(beginningAt date: Date = Date(), for duration: TimeInterval) -> TemporaryScheduleOverride? {
guard let legacyWorkoutTargetRange = legacyWorkoutTargetRange else {
guard let legacyWorkoutTargetRange = legacyWorkoutTargetRange, let unit = glucoseUnit else {
return nil
}
return TemporaryScheduleOverride(
context: .legacyWorkout,
settings: TemporaryScheduleOverrideSettings(targetRange: legacyWorkoutTargetRange),
settings: TemporaryScheduleOverrideSettings(unit: unit, targetRange: legacyWorkoutTargetRange),
startDate: date,
duration: duration.isInfinite ? .indefinite : .finite(duration)
)
Expand Down
4 changes: 2 additions & 2 deletions LoopUI/Extensions/ChartPoint.swift
Original file line number Diff line number Diff line change
Expand Up @@ -60,9 +60,9 @@ extension ChartPoint {
guard let targetRange = override.settings.targetRange else {
return []
}
let quantityRange = HKQuantity(unit: .milligramsPerDeciliter, doubleValue: targetRange.minValue)...HKQuantity(unit: .milligramsPerDeciliter, doubleValue: targetRange.maxValue)

return pointsForGlucoseRangeScheduleOverride(
range: quantityRange.doubleRangeWithMinimumIncrement(in: unit),
range: targetRange.doubleRangeWithMinimumIncrement(in: unit),
activeInterval: override.activeInterval,
unit: unit,
xAxisValues: xAxisValues,
Expand Down
2 changes: 1 addition & 1 deletion WatchApp Extension/Managers/ComplicationChartManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ final class ComplicationChartManager {
private func drawOverridesIfNeeded(in context: CGContext, using scaler: GlucoseChartScaler) {
guard
let override = data?.activeScheduleOverride,
let overrideHashable = TemporaryScheduleOverrideHashable(override)
let overrideHashable = TemporaryScheduleOverrideHashable(override, unit: unit)
else {
return
}
Expand Down
13 changes: 1 addition & 12 deletions WatchApp Extension/Models/GlucoseChartData.swift
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ struct GlucoseChartData {
max = Swift.max(max, correction.value.upperBound.doubleValue(for: unit))
}

if let override = activeOverrideQuantityRange {
if let override = activeScheduleOverride?.settings.targetRange {
min = Swift.min(min, override.lowerBound.doubleValue(for: unit))
max = Swift.max(max, override.upperBound.doubleValue(for: unit))
}
Expand Down Expand Up @@ -88,17 +88,6 @@ struct GlucoseChartData {
}
return override
}

private var activeOverrideQuantityRange: Range<HKQuantity>? {
guard let targetRange = activeScheduleOverride?.settings.targetRange else {
return nil
}

let unit = self.unit ?? .milligramsPerDeciliter
let lowerBound = HKQuantity(unit: unit, doubleValue: targetRange.minValue)
let upperBound = HKQuantity(unit: unit, doubleValue: targetRange.maxValue)
return lowerBound..<upperBound
}
}

private extension HKUnit {
Expand Down
4 changes: 2 additions & 2 deletions WatchApp Extension/Scenes/GlucoseChartScene.swift
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,7 @@ class GlucoseChartScene: SKScene {
// Make temporary overrides visually match what we do in the Loop app. This means that we have
// one darker box which represents the duration of the override, but we have a second lighter box which
// extends to the end of the visible window.
if let range = activeOverride, let rangeHashable = TemporaryScheduleOverrideHashable(range) {
if let range = activeOverride, let rangeHashable = TemporaryScheduleOverrideHashable(range, unit: unit) {
let (sprite1, created) = getSprite(forHash: rangeHashable.chartHashValue)
sprite1.color = UIColor.glucose.withAlphaComponent(0.4)
sprite1.zPosition = NodePlane.overrideRanges.zPosition
Expand All @@ -260,7 +260,7 @@ class GlucoseChartScene: SKScene {
if rangeHashable.end < spannedInterval.end {
let extendedDuration = spannedInterval.end.timeIntervalSince(rangeHashable.start)
let extendedRange = TemporaryScheduleOverride(context: rangeHashable.override.context, settings: rangeHashable.override.settings, startDate: rangeHashable.start, duration: .finite(extendedDuration))
let extendedRangeHashable = TemporaryScheduleOverrideHashable(extendedRange)! // Target range already known to be non-nil
let extendedRangeHashable = TemporaryScheduleOverrideHashable(extendedRange, unit: unit)! // Target range already known to be non-nil
let (sprite2, created) = getSprite(forHash: extendedRangeHashable.chartHashValue)
sprite2.color = UIColor.glucose.withAlphaComponent(0.25)
sprite2.zPosition = NodePlane.overrideRanges.zPosition
Expand Down
8 changes: 5 additions & 3 deletions WatchApp Extension/Scenes/GlucoseChartValueHashable.swift
Original file line number Diff line number Diff line change
Expand Up @@ -77,12 +77,14 @@ extension AbsoluteScheduleValue: GlucoseChartValueHashable where T == ClosedRang

struct TemporaryScheduleOverrideHashable: GlucoseChartValueHashable {
let override: TemporaryScheduleOverride
let unit: HKUnit

init?(_ override: TemporaryScheduleOverride) {
init?(_ override: TemporaryScheduleOverride, unit: HKUnit) {
guard override.settings.targetRange != nil else {
return nil
}
self.override = override
self.unit = unit
}

var start: Date {
Expand All @@ -94,10 +96,10 @@ struct TemporaryScheduleOverrideHashable: GlucoseChartValueHashable {
}

var min: Double {
return override.settings.targetRange!.minValue
return override.settings.targetRange!.lowerBound.doubleValue(for: unit)
}

var max: Double {
return override.settings.targetRange!.maxValue
return override.settings.targetRange!.upperBound.doubleValue(for: unit)
}
}