diff --git a/Loop/Managers/DeviceDataManager.swift b/Loop/Managers/DeviceDataManager.swift index c3b11f82a7..3b6578ce08 100644 --- a/Loop/Managers/DeviceDataManager.swift +++ b/Loop/Managers/DeviceDataManager.swift @@ -1273,7 +1273,7 @@ extension DeviceDataManager { func deleteTestingCGMData(completion: ((Error?) -> Void)? = nil) { guard let testingCGMManager = cgmManager as? TestingCGMManager else { - assertionFailure("\(#function) should be invoked only when a testing CGM manager is in use") + completion?(nil) return } diff --git a/Loop/Managers/LoopAppManager.swift b/Loop/Managers/LoopAppManager.swift index 613a108df6..c8067e66ed 100644 --- a/Loop/Managers/LoopAppManager.swift +++ b/Loop/Managers/LoopAppManager.swift @@ -625,6 +625,14 @@ extension LoopAppManager: ResetLoopManagerDelegate { } } + func resetTestingData(completion: @escaping () -> Void) { + deviceDataManager.deleteTestingCGMData { [weak deviceDataManager] _ in + deviceDataManager?.deleteTestingPumpData { _ in + completion() + } + } + } + func presentCouldNotResetLoopAlert(error: Error) { alertManager.presentCouldNotResetLoopAlert(error: error) } diff --git a/Loop/Managers/ResetLoopManager.swift b/Loop/Managers/ResetLoopManager.swift index 316c16b21b..fe3f1710a1 100644 --- a/Loop/Managers/ResetLoopManager.swift +++ b/Loop/Managers/ResetLoopManager.swift @@ -12,6 +12,8 @@ protocol ResetLoopManagerDelegate: AnyObject { func loopWillReset() func loopDidReset() + func resetTestingData(completion: @escaping () -> Void) + func presentConfirmationAlert( confirmAction: @escaping (_ pumpManager: PumpManager?, _ completion: @escaping () -> Void) -> Void, cancelAction: @escaping () -> Void @@ -46,15 +48,17 @@ class ResetLoopManager { self?.resetAlertPresented = false guard let pumpManager else { - self?.resetLoop() - completion() + self?.resetLoop { + completion() + } return } pumpManager.prepareForDeactivation() { [weak self] error in guard let error = error else { - self?.resetLoop() - completion() + self?.resetLoop() { + completion() + } return } @@ -84,13 +88,15 @@ class ResetLoopManager { loopIsAlreadyReset = hasReset } - private func resetLoop() { + private func resetLoop(completion: @escaping () -> Void) { delegate?.loopWillReset() - - resetLoopDocuments() - resetLoopUserDefaults() - - delegate?.loopDidReset() + + delegate?.resetTestingData { [weak self] in + self?.resetLoopDocuments() + self?.resetLoopUserDefaults() + self?.delegate?.loopDidReset() + completion() + } } private func resetLoopUserDefaults() { diff --git a/Loop/View Controllers/StatusTableViewController.swift b/Loop/View Controllers/StatusTableViewController.swift index ce0edc0587..b2669fd6cf 100644 --- a/Loop/View Controllers/StatusTableViewController.swift +++ b/Loop/View Controllers/StatusTableViewController.swift @@ -239,9 +239,15 @@ final class StatusTableViewController: LoopChartsTableViewController { private var bolusState: PumpManagerStatus.BolusState = .noBolus { didSet { if oldValue != bolusState { - // Bolus starting - if case .inProgress = bolusState { - bolusProgressReporter = deviceManager.pumpManager?.createBolusProgressReporter(reportingOn: DispatchQueue.main) + switch bolusState { + case .inProgress(_): + guard case .inProgress = oldValue else { + // Bolus starting + bolusProgressReporter = deviceManager.pumpManager?.createBolusProgressReporter(reportingOn: DispatchQueue.main) + break + } + default: + break } refreshContext.update(with: .status) reloadData(animated: true) @@ -784,7 +790,7 @@ final class StatusTableViewController: LoopChartsTableViewController { case (.enactingBolus, .enactingBolus): break case (.bolusing(let oldDose), .bolusing(let newDose)): - if oldDose != newDose { + if oldDose.syncIdentifier != newDose.syncIdentifier { tableView.reloadRows(at: [statusIndexPath], with: animated ? .fade : .none) } case (.pumpSuspended(resuming: let wasResuming), .pumpSuspended(resuming: let isResuming)):