diff --git a/Loop/Managers/LoopDataManager.swift b/Loop/Managers/LoopDataManager.swift index e4d6dadeb5..d1c66f134c 100644 --- a/Loop/Managers/LoopDataManager.swift +++ b/Loop/Managers/LoopDataManager.swift @@ -123,8 +123,6 @@ final class LoopDataManager { self.trustedTimeOffset = trustedTimeOffset - retrospectiveCorrection = settings.enabledRetrospectiveCorrectionAlgorithm - overrideIntentObserver = UserDefaults.appGroup?.observe(\.intentExtensionOverrideToSet, options: [.new], changeHandler: {[weak self] (defaults, change) in guard let name = change.newValue??.lowercased(), let appGroup = UserDefaults.appGroup else { return @@ -435,7 +433,23 @@ final class LoopDataManager { } // Confined to dataAccessQueue - private var retrospectiveCorrection: RetrospectiveCorrection + private var lastIntegralRetrospectiveCorrectionEnabled: Bool? + private var cachedRetrospectiveCorrection: RetrospectiveCorrection? + + var retrospectiveCorrection: RetrospectiveCorrection { + let currentIntegralRetrospectiveCorrectionEnabled = UserDefaults.standard.integralRetrospectiveCorrectionEnabled + + if lastIntegralRetrospectiveCorrectionEnabled != currentIntegralRetrospectiveCorrectionEnabled || cachedRetrospectiveCorrection == nil { + lastIntegralRetrospectiveCorrectionEnabled = currentIntegralRetrospectiveCorrectionEnabled + if currentIntegralRetrospectiveCorrectionEnabled { + cachedRetrospectiveCorrection = IntegralRetrospectiveCorrection(effectDuration: LoopSettings.retrospectiveCorrectionEffectDuration) + } else { + cachedRetrospectiveCorrection = StandardRetrospectiveCorrection(effectDuration: LoopSettings.retrospectiveCorrectionEffectDuration) + } + } + + return cachedRetrospectiveCorrection! + } // MARK: - Background task management diff --git a/Loop/Models/LoopSettings+Loop.swift b/Loop/Models/LoopSettings+Loop.swift index ff6f4d2f74..fd35b6416b 100644 --- a/Loop/Models/LoopSettings+Loop.swift +++ b/Loop/Models/LoopSettings+Loop.swift @@ -20,19 +20,4 @@ extension LoopSettings { static let retrospectiveCorrectionEffectDuration = TimeInterval(hours: 1) - /// Creates an instance of the enabled retrospective correction implementation - var enabledRetrospectiveCorrectionAlgorithm: RetrospectiveCorrection { - var enabledRetrospectiveCorrectionAlgorithm: RetrospectiveCorrection - - let isIntegralRetrospectiveCorrectionEnabled = UserDefaults.standard.integralRetrospectiveCorrectionEnabled - - if isIntegralRetrospectiveCorrectionEnabled { - enabledRetrospectiveCorrectionAlgorithm = IntegralRetrospectiveCorrection(effectDuration: LoopSettings.retrospectiveCorrectionEffectDuration) - } else { - enabledRetrospectiveCorrectionAlgorithm = StandardRetrospectiveCorrection(effectDuration: LoopSettings.retrospectiveCorrectionEffectDuration) - } - - return enabledRetrospectiveCorrectionAlgorithm - } - }