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