From 65cbb8481503c00b052c3f33f167287e638d62cc Mon Sep 17 00:00:00 2001
From: Kolya Opahle <k.opahle@sap.com>
Date: Tue, 27 Oct 2020 17:19:13 +0100
Subject: [PATCH] Homescreen Notifications, even though keys were submitted
 (EXPOSUREAPP-3181, EXPOSUREAPP-3182) (#1418)

* Added additional checks to notification of exposure/test-result to check for finished submission

Signed-off-by: Kolya Opahle <k.opahle@sap.com>

* Small changes to code style

Signed-off-by: Kolya Opahle <k.opahle@sap.com>

Co-authored-by: Matthias Urhahn <matthias.urhahn@sap.com>
Co-authored-by: harambasicluka <64483219+harambasicluka@users.noreply.github.com>
---
 .../main/java/de/rki/coronawarnapp/storage/LocalData.kt    | 2 ++
 .../de/rki/coronawarnapp/storage/SubmissionRepository.kt   | 2 +-
 .../rki/coronawarnapp/transaction/RiskLevelTransaction.kt  | 6 +++++-
 .../worker/DiagnosisTestResultRetrievalPeriodicWorker.kt   | 7 ++++++-
 4 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/LocalData.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/LocalData.kt
index 0945e1681..f029b82ca 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/LocalData.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/LocalData.kt
@@ -615,6 +615,8 @@ object LocalData {
         )
     }
 
+    fun submissionWasSuccessful(): Boolean = numberOfSuccessfulSubmissions() >= 1
+
     fun testGUID(): String? = getSharedPreferenceInstance().getString(
         CoronaWarnApplication.getAppContext()
             .getString(R.string.preference_test_guid),
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/SubmissionRepository.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/SubmissionRepository.kt
index cd5a6cfc3..eff4ebae8 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/SubmissionRepository.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/SubmissionRepository.kt
@@ -114,7 +114,7 @@ object SubmissionRepository {
     private suspend fun refreshUIState(refreshTestResult: Boolean) {
         var uiState = DeviceUIState.UNPAIRED
 
-        if (LocalData.numberOfSuccessfulSubmissions() == 1) {
+        if (LocalData.submissionWasSuccessful()) {
             uiState = DeviceUIState.SUBMITTED_FINAL
         } else {
             if (LocalData.registrationToken() != null) {
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/transaction/RiskLevelTransaction.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/transaction/RiskLevelTransaction.kt
index 4437bdd56..00694db84 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/transaction/RiskLevelTransaction.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/transaction/RiskLevelTransaction.kt
@@ -563,7 +563,11 @@ object RiskLevelTransaction : Transaction() {
      */
     private fun updateRiskLevelScore(riskLevel: RiskLevel) {
         val lastCalculatedScore = RiskLevelRepository.getLastCalculatedScore()
-        if (RiskLevel.riskLevelChangedBetweenLowAndHigh(lastCalculatedScore, riskLevel)) {
+        if (RiskLevel.riskLevelChangedBetweenLowAndHigh(
+                lastCalculatedScore,
+                riskLevel
+            ) && !LocalData.submissionWasSuccessful()
+        ) {
             NotificationHelper.sendNotification(
                 CoronaWarnApplication.getAppContext().getString(R.string.notification_body),
                 NotificationCompat.PRIORITY_HIGH
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/worker/DiagnosisTestResultRetrievalPeriodicWorker.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/worker/DiagnosisTestResultRetrievalPeriodicWorker.kt
index 8b247a223..03543b63c 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/worker/DiagnosisTestResultRetrievalPeriodicWorker.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/worker/DiagnosisTestResultRetrievalPeriodicWorker.kt
@@ -89,13 +89,18 @@ class DiagnosisTestResultRetrievalPeriodicWorker(
      * @see TestResult
      */
     private fun initiateNotification(testResult: TestResult) {
+        if (LocalData.isTestResultNotificationSent() || LocalData.submissionWasSuccessful()) {
+            return
+        }
+
         if (testResult == TestResult.NEGATIVE || testResult == TestResult.POSITIVE ||
             testResult == TestResult.INVALID
         ) {
             if (!CoronaWarnApplication.isAppInForeground) {
                 NotificationHelper.sendNotification(
                     CoronaWarnApplication.getAppContext()
-                        .getString(R.string.notification_name), CoronaWarnApplication.getAppContext()
+                        .getString(R.string.notification_name),
+                    CoronaWarnApplication.getAppContext()
                         .getString(R.string.notification_body),
                     NotificationCompat.PRIORITY_HIGH
                 )
-- 
GitLab