diff --git a/src/xcode/ENA/ENA/Source/AppDelegate.swift b/src/xcode/ENA/ENA/Source/AppDelegate.swift index 6928cb0c55e..e17226f36d6 100644 --- a/src/xcode/ENA/ENA/Source/AppDelegate.swift +++ b/src/xcode/ENA/ENA/Source/AppDelegate.swift @@ -62,7 +62,7 @@ extension AppDelegate { switch didEndPrematurelyReason { case let .noSummary(error): return makeAlertController( - enError: error, + noSummaryError: error, localizedDescription: didEndPrematurelyReason.localizedDescription, rootController: rootController ) @@ -83,11 +83,11 @@ extension AppDelegate { } } - private func makeAlertController(enError: Error?, localizedDescription: String, rootController: UIViewController) -> UIAlertController { - switch enError { - case let error as ENError: + private func makeAlertController(noSummaryError: Error?, localizedDescription: String, rootController: UIViewController) -> UIAlertController? { + + if let enError = noSummaryError as? ENError { let openFAQ: (() -> Void)? = { - guard let url = error.faqURL else { return nil } + guard let url = enError.faqURL else { return nil } return { UIApplication.shared.open(url, options: [:]) } @@ -97,7 +97,12 @@ extension AppDelegate { secondaryActionTitle: AppStrings.Common.errorAlertActionMoreInfo, secondaryActionCompletion: openFAQ ) - default: + } else if let exposureDetectionError = noSummaryError as? ExposureDetectionError { + switch exposureDetectionError { + case .isAlreadyRunning: + return nil + } + } else { return rootController.setupErrorAlert( message: localizedDescription ) diff --git a/src/xcode/ENA/ENA/Source/Scenes/Home/HomeInteractor.swift b/src/xcode/ENA/ENA/Source/Scenes/Home/HomeInteractor.swift index 353cd06f7d0..122d8ba5c88 100644 --- a/src/xcode/ENA/ENA/Source/Scenes/Home/HomeInteractor.swift +++ b/src/xcode/ENA/ENA/Source/Scenes/Home/HomeInteractor.swift @@ -94,9 +94,15 @@ final class HomeInteractor: RequiresAppDependencies { self?.reloadActionSection() } - riskConsumer.didFailCalculateRisk = { [weak self] _ in - self?.state.riskDetectionFailed = true - self?.reloadActionSection() + riskConsumer.didFailCalculateRisk = { [weak self] error in + guard let self = self else { return } + + // Don't show already running errors. + guard !self.errorIsAlreadyRunningError(error) else { + return + } + self.state.riskDetectionFailed = true + self.reloadActionSection() } riskProvider.observeRisk(riskConsumer) @@ -171,6 +177,25 @@ final class HomeInteractor: RequiresAppDependencies { return sections } + + private func errorIsAlreadyRunningError(_ error: RiskProviderError) -> Bool { + switch error { + case .riskProviderIsRunning: + return true + case .failedKeyPackageDownload(let keyPackageDownloadError): + return keyPackageDownloadError == .downloadIsRunning + case .failedRiskDetection(let didEndPrematuralyReason): + if case let .noSummary(summaryError) = didEndPrematuralyReason { + if let exposureDetectionError = summaryError as? ExposureDetectionError { + return exposureDetectionError == .isAlreadyRunning + } + } + default: + break + } + + return false + } } // MARK: - Test result cell methods. diff --git a/src/xcode/ENA/ENA/Source/Services/Risk/Provider/RiskProvider.swift b/src/xcode/ENA/ENA/Source/Services/Risk/Provider/RiskProvider.swift index 7b2bf1c5e68..f1b2dcd5640 100644 --- a/src/xcode/ENA/ENA/Source/Services/Risk/Provider/RiskProvider.swift +++ b/src/xcode/ENA/ENA/Source/Services/Risk/Provider/RiskProvider.swift @@ -334,7 +334,6 @@ extension RiskProvider: RiskProviding { return true } - // Here we are in automatic mode and thus we have to check the validity of the current summary. let enoughTimeHasPassed = riskProvidingConfiguration.shouldPerformExposureDetection( activeTracingHours: store.tracingStatusHistory.activeTracing().inHours, lastExposureDetectionDate: store.summary?.date