diff --git a/Loop/Managers/Alerts/AlertManager.swift b/Loop/Managers/Alerts/AlertManager.swift index 54d33126df..99c4cf9501 100644 --- a/Loop/Managers/Alerts/AlertManager.swift +++ b/Loop/Managers/Alerts/AlertManager.swift @@ -876,15 +876,6 @@ extension AlertManager { await alertPresenter.present(alert, animated: true) } - - func presentCouldNotResetLoopAlert(error: Error) async { - let titleString = String(format: NSLocalizedString("Could Not Restart %1$@", comment: "Format string for title of reset loop alert. (1: App name)"), Bundle.main.bundleDisplayName) - let message = String(format: NSLocalizedString("While trying to restart %1$@ an error occured.\n\n%2$@", comment: "Format string for message of reset loop alert. (1: App name) (2: error description)"), Bundle.main.bundleDisplayName, error.localizedDescription) - let alert = UIAlertController(title: titleString, message: message, preferredStyle: .alert) - alert.addAction(UIAlertAction(title: NSLocalizedString("Cancel", comment: "Cancel button for reset loop alert"), style: .cancel)) - - await alertPresenter.present(alert, animated: true) - } } fileprivate extension UserDefaults { diff --git a/Loop/Managers/DeviceDataManager.swift b/Loop/Managers/DeviceDataManager.swift index a9df54061f..8605580571 100644 --- a/Loop/Managers/DeviceDataManager.swift +++ b/Loop/Managers/DeviceDataManager.swift @@ -946,19 +946,13 @@ extension DeviceDataManager: PersistedAlertStore { // MARK: - CGMManagerDelegate extension DeviceDataManager: CGMManagerDelegate { - nonisolated func cgmManagerWantsDeletion(_ manager: CGMManager) async { - await withCheckedContinuation { continuation in - DispatchQueue.main.async { - self.log.default("CGM manager with identifier '%{public}@' wants deletion", manager.pluginIdentifier) - if let cgmManagerUI = self.cgmManager as? CGMManagerUI { - self.displayGlucoseUnitBroadcaster?.removeDisplayGlucoseUnitObserver(cgmManagerUI) - } - self.cgmManager = nil - self.settingsManager.storeSettings() - continuation.resume() - } + log.default("CGM manager with identifier '%{public}@' wants deletion", manager.pluginIdentifier) + if let cgmManagerUI = cgmManager as? CGMManagerUI { + displayGlucoseUnitBroadcaster?.removeDisplayGlucoseUnitObserver(cgmManagerUI) } + cgmManager = nil + settingsManager.storeSettings() } nonisolated @@ -1130,14 +1124,12 @@ extension DeviceDataManager: PumpManagerDelegate { nonisolated func pumpManagerPumpWasReplaced(_ pumpManager: PumpManager) { } - nonisolated func pumpManagerWillDeactivate(_ pumpManager: PumpManager) { - Task { @MainActor in - log.default("Pump manager with identifier '%{public}@' will deactivate", pumpManager.pluginIdentifier) + func pumpManagerWantsDeletion(_ pumpManager: PumpManager) async { + log.default("Pump manager with identifier '%{public}@' wants deletion", pumpManager.pluginIdentifier) - self.pumpManager = nil - deliveryUncertaintyAlertManager = nil - settingsManager.storeSettings() - } + self.pumpManager = nil + deliveryUncertaintyAlertManager = nil + settingsManager.storeSettings() } nonisolated func pumpManager(_ pumpManager: PumpManager, didUpdatePumpRecordsBasalProfileStartEvents pumpRecordsBasalProfileStartEvents: Bool) { diff --git a/Loop/Managers/LoopAppManager.swift b/Loop/Managers/LoopAppManager.swift index ed5d561377..47f1b67d7a 100644 --- a/Loop/Managers/LoopAppManager.swift +++ b/Loop/Managers/LoopAppManager.swift @@ -1084,12 +1084,6 @@ extension LoopAppManager: ResetLoopManagerDelegate { } } } - - func presentCouldNotResetLoopAlert(error: Error) { - Task { - await alertManager.presentCouldNotResetLoopAlert(error: error) - } - } } // MARK: - ServicesManagerDosingDelegate diff --git a/Loop/Managers/ResetLoopManager.swift b/Loop/Managers/ResetLoopManager.swift index afc0154a63..f1f29bdb6c 100644 --- a/Loop/Managers/ResetLoopManager.swift +++ b/Loop/Managers/ResetLoopManager.swift @@ -19,8 +19,6 @@ protocol ResetLoopManagerDelegate: AnyObject { confirmAction: @escaping (_ pumpManager: PumpManager?, _ completion: @escaping () -> Void) -> Void, cancelAction: @escaping () -> Void ) - - func presentCouldNotResetLoopAlert(error: Error) } class ResetLoopManager { @@ -56,15 +54,11 @@ class ResetLoopManager { return } - pumpManager.prepareForDeactivation() { [weak self] error in - guard let error = error else { - self?.resetLoop() { - completion() - } - return + Task { + await pumpManager.delete() + self?.resetLoop { + completion() } - - self?.delegate?.presentCouldNotResetLoopAlert(error: error) } }, cancelAction: { [weak self] in self?.resetAlertPresented = false diff --git a/Loop/Managers/TestingScenariosManager.swift b/Loop/Managers/TestingScenariosManager.swift index 9be28dbb7a..5c3d7cc54a 100644 --- a/Loop/Managers/TestingScenariosManager.swift +++ b/Loop/Managers/TestingScenariosManager.swift @@ -324,23 +324,20 @@ extension TestingScenariosManager { } private func reloadCGMManager(withIdentifier cgmManagerIdentifier: String) async -> TestingCGMManager { - await withCheckedContinuation { continuation in - self.deviceManager.cgmManager?.delete() { [weak self] in - let result = self?.deviceManager.setupCGMManager(withIdentifier: cgmManagerIdentifier, prefersToSkipUserInteraction: true) - switch result { - case .success(let setupUIResult): - switch setupUIResult { - case .createdAndOnboarded(let cgmManager): - let cgmManager = cgmManager as! TestingCGMManager - cgmManager.autoStartTrace = false - continuation.resume(returning: cgmManager) - default: - fatalError("Failed to reload CGM manager. UI interaction required for setup") - } - default: - fatalError("Failed to reload CGM manager. Setup failed") - } + await deviceManager.cgmManager?.delete() + let result = deviceManager.setupCGMManager(withIdentifier: cgmManagerIdentifier, prefersToSkipUserInteraction: true) + switch result { + case .success(let setupUIResult): + switch setupUIResult { + case .createdAndOnboarded(let cgmManager): + let cgmManager = cgmManager as! TestingCGMManager + cgmManager.autoStartTrace = false + return cgmManager + default: + fatalError("Failed to reload CGM manager. UI interaction required for setup") } + default: + fatalError("Failed to reload CGM manager. Setup failed") } } diff --git a/Loop/View Controllers/StatusTableViewController.swift b/Loop/View Controllers/StatusTableViewController.swift index ece45a5df3..3551774a9b 100644 --- a/Loop/View Controllers/StatusTableViewController.swift +++ b/Loop/View Controllers/StatusTableViewController.swift @@ -2037,13 +2037,11 @@ final class StatusTableViewController: LoopChartsTableViewController { fatalError("Test Crash") }) actionSheet.addAction(UIAlertAction(title: "Delete CGM Manager", style: .destructive) { _ in - self.deviceManager.cgmManager?.delete() { } + Task { await self.deviceManager.cgmManager?.delete() } }) - + actionSheet.addAction(UIAlertAction(title: "Delete Pump Manager", style: .destructive) { _ in - self.deviceManager.pumpManager?.prepareForDeactivation(){ [weak self] _ in - self?.deviceManager.pumpManager?.notifyDelegateOfDeactivation() { } - } + Task { await self.deviceManager.pumpManager?.delete() } }) actionSheet.addCancelAction() diff --git a/WatchApp Extension/Managers/WatchCGMHost.swift b/WatchApp Extension/Managers/WatchCGMHost.swift index bf1f3915a9..eea7d20dd7 100644 --- a/WatchApp Extension/Managers/WatchCGMHost.swift +++ b/WatchApp Extension/Managers/WatchCGMHost.swift @@ -101,7 +101,7 @@ final class WatchCGMHost { private func remove() { guard let previous = cgmManager else { return } previous.cgmManagerDelegate = nil - previous.delete {} + Task { await previous.delete() } cgmManager = nil builtFrom = nil rawManager = nil