From c7c657b3a21d602b72a5df350a1f0f68d7ea5491 Mon Sep 17 00:00:00 2001 From: Alex Paulescu <alex.paulescu@gmail.com> Date: Thu, 27 Aug 2020 14:21:46 +0300 Subject: [PATCH] Active tracing days no longer negative (EXPOSUREAPP-2366) (#1082) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Active tracing days no longer negative * Shortened line length Co-authored-by: Jakob Möller <jakob.moeller@sap.com> --- .../rki/coronawarnapp/risk/TimeVariables.kt | 29 +++++++++++-------- .../tracing/TracingIntervalRepository.kt | 2 +- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/risk/TimeVariables.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/risk/TimeVariables.kt index c518230d7..1857d1273 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/risk/TimeVariables.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/risk/TimeVariables.kt @@ -181,13 +181,17 @@ object TimeVariables { suspend fun getActiveTracingDaysInRetentionPeriod(): Long { // the active tracing time during the retention period - all non active tracing times val tracingActiveMS = getTimeRangeFromRetentionPeriod() + val retentionPeriodInMS = getDefaultRetentionPeriodInMS() + val lastNonActiveTracingTimestamp = LocalData.lastNonActiveTracingTimestamp() + val current = System.currentTimeMillis() + val retentionTimestamp = current - retentionPeriodInMS val inactiveTracingIntervals = TracingIntervalRepository .getDateRepository(CoronaWarnApplication.getAppContext()) .getIntervals() .toMutableList() // by default the tracing is assumed to be activated - // if the API is reachable we set the value accordingly + // if the API is reachable we set the value accordingly val enIsDisabled = try { !InternalExposureNotificationClient.asyncIsEnabled() } catch (e: ApiException) { @@ -195,21 +199,22 @@ object TimeVariables { false } - if (enIsDisabled) { - val current = System.currentTimeMillis() - val lastTimeTracingWasNotActivated = minOf( - LocalData.lastNonActiveTracingTimestamp() ?: current, - current - tracingActiveMS - ) - + // lastNonActiveTracingTimestamp could be null when en is disabled + // it only gets updated when you turn the en back on + // if en is disabled and lastNonActiveTracingTimestamp != null, only then we add a pair to + // the inactive intervals list to account for the time of inactivity between the last time + // en was not active and now. + if (enIsDisabled && lastNonActiveTracingTimestamp != null) { + val lastTimeTracingWasNotActivated = LocalData.lastNonActiveTracingTimestamp() ?: current inactiveTracingIntervals.add(Pair(lastTimeTracingWasNotActivated, current)) } - - val finalTracingMS = tracingActiveMS - inactiveTracingIntervals - .map { it.second - it.first } + val inactiveTracingMS = inactiveTracingIntervals + .map { it.second - maxOf(it.first, retentionTimestamp) } .sum() - return finalTracingMS.roundUpMsToDays() + // because we delete periods that are past 14 days but tracingActiveMS counts from first + // ever activation, there are edge cases where tracingActiveMS gets to be > 14 days + return (minOf(tracingActiveMS, retentionPeriodInMS) - inactiveTracingMS).roundUpMsToDays() } /**************************************************** diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/tracing/TracingIntervalRepository.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/tracing/TracingIntervalRepository.kt index 0f34787c3..2daf3d847 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/tracing/TracingIntervalRepository.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/tracing/TracingIntervalRepository.kt @@ -66,7 +66,7 @@ class TracingIntervalRepository(private val tracingIntervalDao: TracingIntervalD return tracingIntervalDao .getAllIntervals() - .map { Pair(maxOf(it.from, retentionTimestamp), it.to) } + .map { Pair(it.from, it.to) } .also { Timber.d("Intervals: $it") } } } -- GitLab