From 5d9e95031b485451bbbecd66b0848b1da3195641 Mon Sep 17 00:00:00 2001 From: Kolya Opahle <k.opahle@sap.com> Date: Mon, 22 Feb 2021 18:00:23 +0100 Subject: [PATCH] FIX: No PPA submission in background over 36+ hours (EXPOSUREAPP-5286) #2430 * Moved analytics worker scheduling to MainActivity from CoronaWarnApplication to make sure scheduling also happens on first app launch Removed the inital 24 Hours start delay offset from the DataDonationAnalyticsScheduler, a random delay between 0 and 24 Hours is still generated Signed-off-by: Kolya Opahle <k.opahle@sap.com> * Fixed MainActivityTest for instrumentation runs Signed-off-by: Kolya Opahle <k.opahle@sap.com> * Removed invalid logging from DataDonationAnalyticsScheduler * Removed Timber import from DataDonationAnalyticsScheduler Co-authored-by: harambasicluka <64483219+harambasicluka@users.noreply.github.com> Co-authored-by: Ralf Gehrer <ralfgehrer@users.noreply.github.com> --- .../java/de/rki/coronawarnapp/ui/main/MainActivityTest.kt | 7 +++++++ .../java/de/rki/coronawarnapp/CoronaWarnApplication.kt | 1 - .../analytics/worker/DataDonationAnalyticsScheduler.kt | 5 +++-- .../analytics/worker/DataDonationAnalyticsWorkBuilder.kt | 4 ++-- .../main/java/de/rki/coronawarnapp/ui/main/MainActivity.kt | 3 +++ 5 files changed, 15 insertions(+), 5 deletions(-) diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/main/MainActivityTest.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/main/MainActivityTest.kt index 647ff840a..d457ee7eb 100644 --- a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/main/MainActivityTest.kt +++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/main/MainActivityTest.kt @@ -17,6 +17,7 @@ import de.rki.coronawarnapp.contactdiary.ui.ContactDiarySettings import de.rki.coronawarnapp.contactdiary.ui.overview.ContactDiaryOverviewFragment import de.rki.coronawarnapp.contactdiary.ui.overview.ContactDiaryOverviewViewModel import de.rki.coronawarnapp.contactdiary.ui.overview.adapter.ListItem +import de.rki.coronawarnapp.datadonation.analytics.worker.DataDonationAnalyticsScheduler import de.rki.coronawarnapp.deadman.DeadmanNotificationScheduler import de.rki.coronawarnapp.environment.EnvironmentSetup import de.rki.coronawarnapp.main.CWASettings @@ -440,4 +441,10 @@ class MainProviderModule { mockk<ContactDiaryWorkScheduler>(relaxed = true).apply { every { schedulePeriodic() } just Runs } + + @Provides + fun dataDonationAnalyticsScheduler(): DataDonationAnalyticsScheduler = + mockk<DataDonationAnalyticsScheduler>(relaxed = true).apply { + every { schedulePeriodic() } just Runs + } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/CoronaWarnApplication.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/CoronaWarnApplication.kt index 92b105637..f797cf5b8 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/CoronaWarnApplication.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/CoronaWarnApplication.kt @@ -92,7 +92,6 @@ class CoronaWarnApplication : Application(), HasAndroidInjector { deadmanNotificationScheduler.schedulePeriodic() } contactDiaryWorkScheduler.schedulePeriodic() - dataDonationAnalyticsScheduler.schedulePeriodic() } deviceTimeHandler.launch() diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/datadonation/analytics/worker/DataDonationAnalyticsScheduler.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/datadonation/analytics/worker/DataDonationAnalyticsScheduler.kt index 7483d2c46..3b556a002 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/datadonation/analytics/worker/DataDonationAnalyticsScheduler.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/datadonation/analytics/worker/DataDonationAnalyticsScheduler.kt @@ -22,12 +22,13 @@ class DataDonationAnalyticsScheduler @Inject constructor( * Enqueue background analytics submission periodic work */ fun schedulePeriodic() { - val additionalDelay = timeCalculation.getDelay() + val initialDelay = timeCalculation.getDelay() + // Create unique work and enqueue workManager.enqueueUniquePeriodicWork( PERIODIC_WORK_NAME, ExistingPeriodicWorkPolicy.KEEP, - workBuilder.buildPeriodicWork(additionalDelay) + workBuilder.buildPeriodicWork(initialDelay) ) } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/datadonation/analytics/worker/DataDonationAnalyticsWorkBuilder.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/datadonation/analytics/worker/DataDonationAnalyticsWorkBuilder.kt index 748466cc4..60a06d08e 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/datadonation/analytics/worker/DataDonationAnalyticsWorkBuilder.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/datadonation/analytics/worker/DataDonationAnalyticsWorkBuilder.kt @@ -14,12 +14,12 @@ import javax.inject.Inject @Reusable class DataDonationAnalyticsWorkBuilder @Inject constructor() { - fun buildPeriodicWork(additionalDelay: Duration): PeriodicWorkRequest = + fun buildPeriodicWork(initialDelay: Duration): PeriodicWorkRequest = PeriodicWorkRequestBuilder<DataDonationAnalyticsPeriodicWorker>( DateTimeConstants.HOURS_PER_DAY.toLong(), TimeUnit.HOURS ) .setInitialDelay( - DateTimeConstants.HOURS_PER_DAY.toLong() + additionalDelay.standardHours, + initialDelay.standardHours, TimeUnit.HOURS ) .setBackoffCriteria( diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/MainActivity.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/MainActivity.kt index 7983f54e6..9fed2fe25 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/MainActivity.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/MainActivity.kt @@ -17,6 +17,7 @@ import dagger.android.HasAndroidInjector import de.rki.coronawarnapp.R import de.rki.coronawarnapp.contactdiary.retention.ContactDiaryWorkScheduler import de.rki.coronawarnapp.databinding.ActivityMainBinding +import de.rki.coronawarnapp.datadonation.analytics.worker.DataDonationAnalyticsScheduler import de.rki.coronawarnapp.deadman.DeadmanNotificationScheduler import de.rki.coronawarnapp.storage.LocalData import de.rki.coronawarnapp.ui.base.startActivitySafely @@ -61,6 +62,7 @@ class MainActivity : AppCompatActivity(), HasAndroidInjector { @Inject lateinit var powerManagement: PowerManagement @Inject lateinit var deadmanScheduler: DeadmanNotificationScheduler @Inject lateinit var contactDiaryWorkScheduler: ContactDiaryWorkScheduler + @Inject lateinit var dataDonationAnalyticsScheduler: DataDonationAnalyticsScheduler override fun onCreate(savedInstanceState: Bundle?) { AppInjector.setup(this) @@ -108,6 +110,7 @@ class MainActivity : AppCompatActivity(), HasAndroidInjector { scheduleWork() vm.doBackgroundNoiseCheck() contactDiaryWorkScheduler.schedulePeriodic() + dataDonationAnalyticsScheduler.schedulePeriodic() if (!LocalData.isAllowedToSubmitDiagnosisKeys()) { deadmanScheduler.schedulePeriodic() } -- GitLab