From 3baa2b39779a2c2a605ef9486e8b649cbb66d0b6 Mon Sep 17 00:00:00 2001
From: Ralf Gehrer <ralfgehrer@users.noreply.github.com>
Date: Wed, 18 Nov 2020 14:52:47 +0100
Subject: [PATCH] Remove manual refresh of last fetched timestamp
 (EXPOSUREAPP-3843) #1648

---
 .../de/rki/coronawarnapp/storage/LocalData.kt     |  8 ++++++++
 .../coronawarnapp/storage/TracingRepository.kt    | 15 +--------------
 .../ui/main/home/HomeFragmentViewModel.kt         |  1 -
 .../details/RiskDetailsFragmentViewModel.kt       |  1 -
 4 files changed, 9 insertions(+), 16 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 04b08cdd1..279d405c9 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
@@ -5,9 +5,11 @@ import androidx.core.content.edit
 import de.rki.coronawarnapp.CoronaWarnApplication
 import de.rki.coronawarnapp.R
 import de.rki.coronawarnapp.risk.RiskLevel
+import de.rki.coronawarnapp.util.preferences.createFlowPreference
 import de.rki.coronawarnapp.util.security.SecurityHelper.globalEncryptedSharedPreferencesInstance
 import kotlinx.coroutines.flow.Flow
 import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.map
 import java.util.Date
 
 /**
@@ -399,6 +401,12 @@ object LocalData {
         return Date(time)
     }
 
+    fun lastTimeDiagnosisKeysFromServerFetchFlow() =
+        getSharedPreferenceInstance()
+            .createFlowPreference<Long?>(CoronaWarnApplication.getAppContext()
+                .getString(R.string.preference_timestamp_diagnosis_keys_fetch), 0L).flow
+            .map { if (it != null && it != 0L) Date(it) else null }
+
     /**
      * Sets the last time the server fetched the diagnosis keys from the server as Date object
      * from the EncryptedSharedPrefs
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/TracingRepository.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/TracingRepository.kt
index e45cbc98f..64f63583a 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/TracingRepository.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/TracingRepository.kt
@@ -49,22 +49,11 @@ class TracingRepository @Inject constructor(
     private val timeStamper: TimeStamper
 ) {
 
-    private val internalLastTimeDiagnosisKeysFetched = MutableStateFlow<Date?>(null)
-    val lastTimeDiagnosisKeysFetched: Flow<Date?> = internalLastTimeDiagnosisKeysFetched
+    val lastTimeDiagnosisKeysFetched: Flow<Date?> = LocalData.lastTimeDiagnosisKeysFromServerFetchFlow()
 
     private val internalActiveTracingDaysInRetentionPeriod = MutableStateFlow(0L)
     val activeTracingDaysInRetentionPeriod: Flow<Long> = internalActiveTracingDaysInRetentionPeriod
 
-    /**
-     * Refresh the last time diagnosis keys fetched date with the current shared preferences state.
-     *
-     * @see LocalData
-     */
-    fun refreshLastTimeDiagnosisKeysFetchedDate() {
-        internalLastTimeDiagnosisKeysFetched.value =
-            LocalData.lastTimeDiagnosisKeysFromServerFetch()
-    }
-
     private val internalIsRefreshing =
         taskController.tasks.map { it.isDownloadDiagnosisKeysTaskRunning() || it.isRiskLevelTaskRunning() }
 
@@ -104,7 +93,6 @@ class TracingRepository @Inject constructor(
                 )
             )
             taskController.submit(DefaultTaskRequest(RiskLevelTask::class))
-            refreshLastTimeDiagnosisKeysFetchedDate()
             TimerHelper.startManualKeyRetrievalTimer()
         }
     }
@@ -152,7 +140,6 @@ class TracingRepository @Inject constructor(
                             DownloadDiagnosisKeysTask.Arguments()
                         )
                     )
-                    refreshLastTimeDiagnosisKeysFetchedDate()
                     TimerHelper.checkManualKeyRetrievalTimer()
 
                     taskController.submit(DefaultTaskRequest(RiskLevelTask::class))
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/home/HomeFragmentViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/home/HomeFragmentViewModel.kt
index ea111127b..0141c47ef 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/home/HomeFragmentViewModel.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/home/HomeFragmentViewModel.kt
@@ -104,7 +104,6 @@ class HomeFragmentViewModel @AssistedInject constructor(
         // TODO the ordering here is weird, do we expect these to run in sequence?
         tracingRepository.refreshRiskLevel()
         tracingRepository.refreshExposureSummary()
-        tracingRepository.refreshLastTimeDiagnosisKeysFetchedDate()
         tracingRepository.refreshActiveTracingDaysInRetentionPeriod()
         TimerHelper.checkManualKeyRetrievalTimer()
         tracingRepository.refreshLastSuccessfullyCalculatedScore()
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/tracing/details/RiskDetailsFragmentViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/tracing/details/RiskDetailsFragmentViewModel.kt
index 2075f82ed..0c7d1c019 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/tracing/details/RiskDetailsFragmentViewModel.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/tracing/details/RiskDetailsFragmentViewModel.kt
@@ -37,7 +37,6 @@ class RiskDetailsFragmentViewModel @AssistedInject constructor(
     fun refreshData() {
         tracingRepository.refreshRiskLevel()
         tracingRepository.refreshExposureSummary()
-        tracingRepository.refreshLastTimeDiagnosisKeysFetchedDate()
         TimerHelper.checkManualKeyRetrievalTimer()
         tracingRepository.refreshActiveTracingDaysInRetentionPeriod()
     }
-- 
GitLab