From 12e4f8e1352a92ecfee775fdb9aaf8e798a7e513 Mon Sep 17 00:00:00 2001
From: Rituraj Sambherao <54317407+ritsam@users.noreply.github.com>
Date: Thu, 23 Jul 2020 14:13:00 +0100
Subject: [PATCH] Stop notification when App is at End of life (#897)

* Stop notification when at End of life

* Stopping background worker when user is tested positive and they submit the keys.

* Stop background services when diagnosis keys are submitted

* check added before starting backgrouns schedular

To prevent Backgrond services from starting again, a check has been added that checks if diagnosis keys are submitted already.

* tests modified based on code changes

Co-authored-by: Philipp Woessner <64482866+pwoessner@users.noreply.github.com>
---
 .../rki/coronawarnapp/service/submission/SubmissionService.kt  | 2 ++
 .../de/rki/coronawarnapp/worker/BackgroundWorkScheduler.kt     | 1 +
 .../transaction/SubmitDiagnosisKeysTransactionTest.kt          | 3 +++
 3 files changed, 6 insertions(+)

diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/service/submission/SubmissionService.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/service/submission/SubmissionService.kt
index 4eaa6d860..a5026b3fe 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/service/submission/SubmissionService.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/service/submission/SubmissionService.kt
@@ -9,6 +9,7 @@ import de.rki.coronawarnapp.service.submission.SubmissionConstants.TELE_TAN_KEY_
 import de.rki.coronawarnapp.storage.LocalData
 import de.rki.coronawarnapp.transaction.SubmitDiagnosisKeysTransaction
 import de.rki.coronawarnapp.util.formatter.TestResult
+import de.rki.coronawarnapp.worker.BackgroundWorkScheduler
 
 object SubmissionService {
     suspend fun asyncRegisterDevice() {
@@ -89,6 +90,7 @@ object SubmissionService {
     }
 
     fun submissionSuccessful() {
+        BackgroundWorkScheduler.stopWorkScheduler()
         LocalData.numberOfSuccessfulSubmissions(1)
     }
 
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/worker/BackgroundWorkScheduler.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/worker/BackgroundWorkScheduler.kt
index 0cc08f347..88c08d83d 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/worker/BackgroundWorkScheduler.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/worker/BackgroundWorkScheduler.kt
@@ -68,6 +68,7 @@ object BackgroundWorkScheduler {
      * @see isWorkActive
      */
     fun startWorkScheduler() {
+        if (LocalData.numberOfSuccessfulSubmissions() > 0) return
         val isPeriodicWorkActive = isWorkActive(WorkTag.DIAGNOSIS_KEY_RETRIEVAL_PERIODIC_WORKER.tag)
         logWorkActiveStatus(
             WorkTag.DIAGNOSIS_KEY_RETRIEVAL_PERIODIC_WORKER.tag,
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/transaction/SubmitDiagnosisKeysTransactionTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/transaction/SubmitDiagnosisKeysTransactionTest.kt
index 18c475ede..60bef8b27 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/transaction/SubmitDiagnosisKeysTransactionTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/transaction/SubmitDiagnosisKeysTransactionTest.kt
@@ -6,6 +6,7 @@ import de.rki.coronawarnapp.nearby.InternalExposureNotificationClient
 import de.rki.coronawarnapp.service.diagnosiskey.DiagnosisKeyService
 import de.rki.coronawarnapp.service.submission.SubmissionService
 import de.rki.coronawarnapp.storage.LocalData
+import de.rki.coronawarnapp.worker.BackgroundWorkScheduler
 import io.mockk.Runs
 import io.mockk.coEvery
 import io.mockk.coVerifyOrder
@@ -30,6 +31,8 @@ class SubmitDiagnosisKeysTransactionTest {
         mockkObject(SubmissionService)
         mockkObject(InternalExposureNotificationClient)
         mockkObject(DiagnosisKeyService)
+        mockkObject(BackgroundWorkScheduler)
+        every { BackgroundWorkScheduler.stopWorkScheduler() } just Runs
         every { LocalData.numberOfSuccessfulSubmissions(any()) } just Runs
         coEvery { SubmissionService.asyncRequestAuthCode(any()) } returns authString
     }
-- 
GitLab