From 51f2c691794e6aa73a4cbc72be20b49068f56919 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jakob=20M=C3=B6ller?= <jakob.moeller@sap.com>
Date: Thu, 2 Jul 2020 13:42:05 +0200
Subject: [PATCH] Switch Exception Throwing of the enabledCheck in the
 RetrieveDiagnosisKeysTransaction.kt (#799)

Fixes #770

Signed-off-by: d067928 <jakob.moeller@sap.com>
---
 .../transaction/RetrieveDiagnosisKeysTransaction.kt  | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/transaction/RetrieveDiagnosisKeysTransaction.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/transaction/RetrieveDiagnosisKeysTransaction.kt
index 82f7d6f3b..49823d1a8 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/transaction/RetrieveDiagnosisKeysTransaction.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/transaction/RetrieveDiagnosisKeysTransaction.kt
@@ -116,6 +116,16 @@ object RetrieveDiagnosisKeysTransaction : Transaction() {
 
     /** initiates the transaction. This suspend function guarantees a successful transaction once completed. */
     suspend fun start() = lockAndExecuteUnique {
+        /**
+         * Handles the case when the ENClient got disabled but the Transaction is still scheduled
+         * in a background job. Also it acts as a failure catch in case the orchestration code did
+         * not check in before.
+         */
+        if (!InternalExposureNotificationClient.asyncIsEnabled()) {
+            Timber.w("EN is not enabled, skipping RetrieveDiagnosisKeys")
+            executeClose()
+            return@lockAndExecuteUnique
+        }
         /****************************************************
          * INIT TRANSACTION
          ****************************************************/
@@ -193,8 +203,6 @@ object RetrieveDiagnosisKeysTransaction : Transaction() {
      * Executes the INIT Transaction State
      */
     private suspend fun executeSetup() = executeState(SETUP) {
-        if (!InternalExposureNotificationClient.asyncIsEnabled())
-            throw IllegalStateException("The Exposure Notification Framework must be active, check your tracing status")
         lastFetchDateForRollback.set(LocalData.lastTimeDiagnosisKeysFromServerFetch())
         val currentDate = Date(System.currentTimeMillis())
         Timber.d("using $currentDate as current date in Transaction.")
-- 
GitLab