From 3b47b6f0d6735adfdbb5b7a5581c845a0682f3a4 Mon Sep 17 00:00:00 2001
From: Kolya Opahle <k.opahle@sap.com>
Date: Thu, 4 Jun 2020 13:43:20 +0200
Subject: [PATCH] Handling a NoRegistrationTokenSetException by returning
 UNPAIRED state (#161)

---
 .../storage/SubmissionRepository.kt           | 41 +++++++++++--------
 1 file changed, 23 insertions(+), 18 deletions(-)

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 31f3ac152..f6ab3dad8 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
@@ -1,6 +1,7 @@
 package de.rki.coronawarnapp.storage
 
 import androidx.lifecycle.MutableLiveData
+import de.rki.coronawarnapp.exception.NoRegistrationTokenSetException
 import de.rki.coronawarnapp.service.submission.SubmissionService
 import de.rki.coronawarnapp.util.DeviceUIState
 import de.rki.coronawarnapp.util.formatter.TestResult
@@ -18,7 +19,7 @@ object SubmissionRepository {
         if (LocalData.numberOfSuccessfulSubmissions() == 1) {
             uiState = DeviceUIState.SUBMITTED_FINAL
         } else {
-            if (LocalData.registrationToken() != "") {
+            if (LocalData.registrationToken() != null) {
                 uiState = when {
                     LocalData.isAllowedToSubmitDiagnosisKeys() == true -> {
                         DeviceUIState.PAIRED_POSITIVE
@@ -31,27 +32,31 @@ object SubmissionRepository {
     }
 
     private suspend fun fetchTestResult(): DeviceUIState {
-        val testResult = SubmissionService.asyncRequestTestResult()
+        try {
+            val testResult = SubmissionService.asyncRequestTestResult()
 
-        if (testResult == TestResult.POSITIVE) {
-            LocalData.isAllowedToSubmitDiagnosisKeys(true)
-        }
+            if (testResult == TestResult.POSITIVE) {
+                LocalData.isAllowedToSubmitDiagnosisKeys(true)
+            }
 
-        val initialTestResultReceivedTimestamp = LocalData.inititalTestResultReceivedTimestamp()
+            val initialTestResultReceivedTimestamp = LocalData.inititalTestResultReceivedTimestamp()
 
-        if (initialTestResultReceivedTimestamp == null) {
-            val currentTime = System.currentTimeMillis()
-            LocalData.inititalTestResultReceivedTimestamp(currentTime)
-            testResultReceivedDate.value = Date(currentTime)
-        } else {
-            testResultReceivedDate.value = Date(initialTestResultReceivedTimestamp)
-        }
+            if (initialTestResultReceivedTimestamp == null) {
+                val currentTime = System.currentTimeMillis()
+                LocalData.inititalTestResultReceivedTimestamp(currentTime)
+                testResultReceivedDate.value = Date(currentTime)
+            } else {
+                testResultReceivedDate.value = Date(initialTestResultReceivedTimestamp)
+            }
 
-        return when (testResult) {
-            TestResult.NEGATIVE -> DeviceUIState.PAIRED_NEGATIVE
-            TestResult.POSITIVE -> DeviceUIState.PAIRED_POSITIVE
-            TestResult.PENDING -> DeviceUIState.PAIRED_NO_RESULT
-            TestResult.INVALID -> DeviceUIState.PAIRED_ERROR
+            return when (testResult) {
+                TestResult.NEGATIVE -> DeviceUIState.PAIRED_NEGATIVE
+                TestResult.POSITIVE -> DeviceUIState.PAIRED_POSITIVE
+                TestResult.PENDING -> DeviceUIState.PAIRED_NO_RESULT
+                TestResult.INVALID -> DeviceUIState.PAIRED_ERROR
+            }
+        } catch (err: NoRegistrationTokenSetException) {
+            return DeviceUIState.UNPAIRED
         }
     }
 
-- 
GitLab