Skip to content
Snippets Groups Projects
Unverified Commit 5d9e9503 authored by Kolya Opahle's avatar Kolya Opahle Committed by GitHub
Browse files

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: default avatarKolya Opahle <k.opahle@sap.com>

* Fixed MainActivityTest for instrumentation runs

Signed-off-by: default avatarKolya Opahle <k.opahle@sap.com>

* Removed invalid logging from DataDonationAnalyticsScheduler

* Removed Timber import from DataDonationAnalyticsScheduler

Co-authored-by: default avatarharambasicluka <64483219+harambasicluka@users.noreply.github.com>
Co-authored-by: default avatarRalf Gehrer <ralfgehrer@users.noreply.github.com>
parent 5cb96c57
No related branches found
No related tags found
No related merge requests found
...@@ -17,6 +17,7 @@ import de.rki.coronawarnapp.contactdiary.ui.ContactDiarySettings ...@@ -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.ContactDiaryOverviewFragment
import de.rki.coronawarnapp.contactdiary.ui.overview.ContactDiaryOverviewViewModel import de.rki.coronawarnapp.contactdiary.ui.overview.ContactDiaryOverviewViewModel
import de.rki.coronawarnapp.contactdiary.ui.overview.adapter.ListItem 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.deadman.DeadmanNotificationScheduler
import de.rki.coronawarnapp.environment.EnvironmentSetup import de.rki.coronawarnapp.environment.EnvironmentSetup
import de.rki.coronawarnapp.main.CWASettings import de.rki.coronawarnapp.main.CWASettings
...@@ -440,4 +441,10 @@ class MainProviderModule { ...@@ -440,4 +441,10 @@ class MainProviderModule {
mockk<ContactDiaryWorkScheduler>(relaxed = true).apply { mockk<ContactDiaryWorkScheduler>(relaxed = true).apply {
every { schedulePeriodic() } just Runs every { schedulePeriodic() } just Runs
} }
@Provides
fun dataDonationAnalyticsScheduler(): DataDonationAnalyticsScheduler =
mockk<DataDonationAnalyticsScheduler>(relaxed = true).apply {
every { schedulePeriodic() } just Runs
}
} }
...@@ -92,7 +92,6 @@ class CoronaWarnApplication : Application(), HasAndroidInjector { ...@@ -92,7 +92,6 @@ class CoronaWarnApplication : Application(), HasAndroidInjector {
deadmanNotificationScheduler.schedulePeriodic() deadmanNotificationScheduler.schedulePeriodic()
} }
contactDiaryWorkScheduler.schedulePeriodic() contactDiaryWorkScheduler.schedulePeriodic()
dataDonationAnalyticsScheduler.schedulePeriodic()
} }
deviceTimeHandler.launch() deviceTimeHandler.launch()
......
...@@ -22,12 +22,13 @@ class DataDonationAnalyticsScheduler @Inject constructor( ...@@ -22,12 +22,13 @@ class DataDonationAnalyticsScheduler @Inject constructor(
* Enqueue background analytics submission periodic work * Enqueue background analytics submission periodic work
*/ */
fun schedulePeriodic() { fun schedulePeriodic() {
val additionalDelay = timeCalculation.getDelay() val initialDelay = timeCalculation.getDelay()
// Create unique work and enqueue // Create unique work and enqueue
workManager.enqueueUniquePeriodicWork( workManager.enqueueUniquePeriodicWork(
PERIODIC_WORK_NAME, PERIODIC_WORK_NAME,
ExistingPeriodicWorkPolicy.KEEP, ExistingPeriodicWorkPolicy.KEEP,
workBuilder.buildPeriodicWork(additionalDelay) workBuilder.buildPeriodicWork(initialDelay)
) )
} }
......
...@@ -14,12 +14,12 @@ import javax.inject.Inject ...@@ -14,12 +14,12 @@ import javax.inject.Inject
@Reusable @Reusable
class DataDonationAnalyticsWorkBuilder @Inject constructor() { class DataDonationAnalyticsWorkBuilder @Inject constructor() {
fun buildPeriodicWork(additionalDelay: Duration): PeriodicWorkRequest = fun buildPeriodicWork(initialDelay: Duration): PeriodicWorkRequest =
PeriodicWorkRequestBuilder<DataDonationAnalyticsPeriodicWorker>( PeriodicWorkRequestBuilder<DataDonationAnalyticsPeriodicWorker>(
DateTimeConstants.HOURS_PER_DAY.toLong(), TimeUnit.HOURS DateTimeConstants.HOURS_PER_DAY.toLong(), TimeUnit.HOURS
) )
.setInitialDelay( .setInitialDelay(
DateTimeConstants.HOURS_PER_DAY.toLong() + additionalDelay.standardHours, initialDelay.standardHours,
TimeUnit.HOURS TimeUnit.HOURS
) )
.setBackoffCriteria( .setBackoffCriteria(
......
...@@ -17,6 +17,7 @@ import dagger.android.HasAndroidInjector ...@@ -17,6 +17,7 @@ import dagger.android.HasAndroidInjector
import de.rki.coronawarnapp.R import de.rki.coronawarnapp.R
import de.rki.coronawarnapp.contactdiary.retention.ContactDiaryWorkScheduler import de.rki.coronawarnapp.contactdiary.retention.ContactDiaryWorkScheduler
import de.rki.coronawarnapp.databinding.ActivityMainBinding import de.rki.coronawarnapp.databinding.ActivityMainBinding
import de.rki.coronawarnapp.datadonation.analytics.worker.DataDonationAnalyticsScheduler
import de.rki.coronawarnapp.deadman.DeadmanNotificationScheduler import de.rki.coronawarnapp.deadman.DeadmanNotificationScheduler
import de.rki.coronawarnapp.storage.LocalData import de.rki.coronawarnapp.storage.LocalData
import de.rki.coronawarnapp.ui.base.startActivitySafely import de.rki.coronawarnapp.ui.base.startActivitySafely
...@@ -61,6 +62,7 @@ class MainActivity : AppCompatActivity(), HasAndroidInjector { ...@@ -61,6 +62,7 @@ class MainActivity : AppCompatActivity(), HasAndroidInjector {
@Inject lateinit var powerManagement: PowerManagement @Inject lateinit var powerManagement: PowerManagement
@Inject lateinit var deadmanScheduler: DeadmanNotificationScheduler @Inject lateinit var deadmanScheduler: DeadmanNotificationScheduler
@Inject lateinit var contactDiaryWorkScheduler: ContactDiaryWorkScheduler @Inject lateinit var contactDiaryWorkScheduler: ContactDiaryWorkScheduler
@Inject lateinit var dataDonationAnalyticsScheduler: DataDonationAnalyticsScheduler
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
AppInjector.setup(this) AppInjector.setup(this)
...@@ -108,6 +110,7 @@ class MainActivity : AppCompatActivity(), HasAndroidInjector { ...@@ -108,6 +110,7 @@ class MainActivity : AppCompatActivity(), HasAndroidInjector {
scheduleWork() scheduleWork()
vm.doBackgroundNoiseCheck() vm.doBackgroundNoiseCheck()
contactDiaryWorkScheduler.schedulePeriodic() contactDiaryWorkScheduler.schedulePeriodic()
dataDonationAnalyticsScheduler.schedulePeriodic()
if (!LocalData.isAllowedToSubmitDiagnosisKeys()) { if (!LocalData.isAllowedToSubmitDiagnosisKeys()) {
deadmanScheduler.schedulePeriodic() deadmanScheduler.schedulePeriodic()
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment