From 03679cf91088cf0820be18c6f3e8b2e95eb76d85 Mon Sep 17 00:00:00 2001
From: AlexanderAlferov <64849422+AlexanderAlferov@users.noreply.github.com>
Date: Fri, 19 Jun 2020 11:15:28 +0300
Subject: [PATCH] Feature/key retrieval on resume (#660)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* New feature: key retrieval on risk level refresh

* refresh the last time diagnosis keys fetched after transaction call

* TimerHelper update added

Co-authored-by: Philipp Woessner <philipp.woessner@sap.com>
Co-authored-by: Jakob Möller <jakob.moeller@sap.com>
---
 .../ui/viewmodel/TracingViewModel.kt          | 26 ++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/viewmodel/TracingViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/viewmodel/TracingViewModel.kt
index 4ca35e356..afaeeaee4 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/viewmodel/TracingViewModel.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/viewmodel/TracingViewModel.kt
@@ -3,15 +3,22 @@ package de.rki.coronawarnapp.ui.viewmodel
 import androidx.lifecycle.LiveData
 import androidx.lifecycle.ViewModel
 import androidx.lifecycle.viewModelScope
+import de.rki.coronawarnapp.CoronaWarnApplication
 import de.rki.coronawarnapp.exception.ExceptionCategory.INTERNAL
 import de.rki.coronawarnapp.exception.TransactionException
 import de.rki.coronawarnapp.exception.reporting.report
 import de.rki.coronawarnapp.storage.ExposureSummaryRepository
+import de.rki.coronawarnapp.storage.LocalData
 import de.rki.coronawarnapp.storage.RiskLevelRepository
 import de.rki.coronawarnapp.storage.TracingRepository
 import de.rki.coronawarnapp.timer.TimerHelper
+import de.rki.coronawarnapp.transaction.RetrieveDiagnosisKeysTransaction
 import de.rki.coronawarnapp.transaction.RiskLevelTransaction
+import de.rki.coronawarnapp.util.ConnectivityHelper
 import kotlinx.coroutines.launch
+import org.joda.time.DateTime
+import org.joda.time.DateTimeZone
+import org.joda.time.Instant
 import timber.log.Timber
 import java.util.Date
 
@@ -47,13 +54,30 @@ class TracingViewModel : ViewModel() {
     var isRefreshing: LiveData<Boolean> = TracingRepository.isRefreshing
 
     /**
-     * Launches the RiskLevelTransaction in the viewModel scope
+     * Launches the RetrieveDiagnosisKeysTransaction and RiskLevelTransaction in the viewModel scope
      *
      * @see RiskLevelTransaction
      * @see RiskLevelRepository
      */
     fun refreshRiskLevel() {
         viewModelScope.launch {
+            try {
+                val currentDate = DateTime(Instant.now(), DateTimeZone.getDefault())
+                val lastFetch = DateTime(
+                    LocalData.lastTimeDiagnosisKeysFromServerFetch(),
+                    DateTimeZone.getDefault()
+                )
+                val keysWereNotRetrievedToday = LocalData.lastTimeDiagnosisKeysFromServerFetch() == null ||
+                        currentDate.withTimeAtStartOfDay() != lastFetch.withTimeAtStartOfDay()
+                val isNetworkEnabled = ConnectivityHelper.isNetworkEnabled(CoronaWarnApplication.getAppContext())
+                if (keysWereNotRetrievedToday && isNetworkEnabled) {
+                    RetrieveDiagnosisKeysTransaction.start()
+                    refreshLastTimeDiagnosisKeysFetchedDate()
+                    TimerHelper.checkManualKeyRetrievalTimer()
+                }
+            } catch (e: TransactionException) {
+                e.cause?.report(INTERNAL)
+            }
             try {
                 RiskLevelTransaction.start()
             } catch (e: TransactionException) {
-- 
GitLab