@@ -701,40 +701,44 @@ class DeviceDataManager: CarbStoreDelegate, TransmitterDelegate {
701701 }
702702 }
703703
704- // TODO: Add a setter with a duration argument
705- var workoutMode : Bool ? {
706- get {
707- guard let range = glucoseTargetRangeSchedule else {
708- return nil
709- }
704+ var workoutModeEnabled : Bool ? {
705+ guard let range = glucoseTargetRangeSchedule else {
706+ return nil
707+ }
710708
711- guard let override = range. temporaryOverride else {
712- return false
713- }
709+ guard let override = range. temporaryOverride else {
710+ return false
711+ }
712+
713+ return override. endDate. timeIntervalSinceNow > 0
714+ }
714715
715- return override. endDate. timeIntervalSinceNow > 0
716+ /// Attempts to enable workout glucose targets for the given duration, and returns true if successful.
717+ /// TODO: This can live on the schedule itself once its a value type, since didSet would invoke when mutated.
718+ func enableWorkoutMode( duration duration: NSTimeInterval ) -> Bool {
719+ guard let glucoseTargetRangeSchedule = glucoseTargetRangeSchedule else {
720+ return false
716721 }
717- set {
718- guard let glucoseTargetRangeSchedule = glucoseTargetRangeSchedule, newValue = newValue else {
719- return
720- }
721722
722- if newValue {
723- // Hardcoded: 160-180 mg/dL for 1 hour.
724- let endDate = NSDate ( timeIntervalSinceNow: NSTimeInterval ( hours: 1 ) )
725- let unit = HKUnit . milligramsPerDeciliterUnit ( )
726- let targets = DoubleRange (
727- minValue: HKQuantity ( unit: unit, doubleValue: 160 ) . doubleValueForUnit ( glucoseTargetRangeSchedule. unit) ,
728- maxValue: HKQuantity ( unit: unit, doubleValue: 180 ) . doubleValueForUnit ( glucoseTargetRangeSchedule. unit)
729- )
723+ // Hardcoded: 160-180 mg/dL for 1 hour.
724+ let endDate = NSDate ( timeIntervalSinceNow: NSTimeInterval ( hours: 1 ) )
725+ let unit = HKUnit . milligramsPerDeciliterUnit ( )
726+ let targets = DoubleRange (
727+ minValue: HKQuantity ( unit: unit, doubleValue: 160 ) . doubleValueForUnit ( glucoseTargetRangeSchedule. unit) ,
728+ maxValue: HKQuantity ( unit: unit, doubleValue: 180 ) . doubleValueForUnit ( glucoseTargetRangeSchedule. unit)
729+ )
730730
731- glucoseTargetRangeSchedule. setOverride ( targets, untilDate: endDate)
732- } else {
733- glucoseTargetRangeSchedule. clearOverride ( )
734- }
731+ glucoseTargetRangeSchedule. setOverride ( targets, untilDate: endDate)
735732
736- NSNotificationCenter . defaultCenter ( ) . postNotificationName ( self . dynamicType. LoopSettingsUpdatedNotification, object: self )
737- }
733+ NSNotificationCenter . defaultCenter ( ) . postNotificationName ( self . dynamicType. LoopSettingsUpdatedNotification, object: self )
734+
735+ return true
736+ }
737+
738+ func disableWorkoutMode( ) {
739+ glucoseTargetRangeSchedule? . clearOverride ( )
740+
741+ NSNotificationCenter . defaultCenter ( ) . postNotificationName ( self . dynamicType. LoopSettingsUpdatedNotification, object: self )
738742 }
739743
740744 var maximumBasalRatePerHour : Double ? = NSUserDefaults . standardUserDefaults ( ) . maximumBasalRatePerHour {
0 commit comments