From 02e704bcbafc747555c95e542ac89856d70d76f0 Mon Sep 17 00:00:00 2001
From: Philipp Woessner <64482866+pwoessner@users.noreply.github.com>
Date: Tue, 4 Aug 2020 16:15:02 +0200
Subject: [PATCH] Re-schedule jobs if they were killed and the app was woken up
 by the WakeUpService (#972)

* re-schedule jobs if they were killed and the app was woken up by the WakeUpService

* init WorkManager in onCreate
---
 .../coronawarnapp/CoronaWarnApplication.kt    | 22 +++++++++++++------
 1 file changed, 15 insertions(+), 7 deletions(-)

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 244c88119..c9814562f 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
@@ -16,9 +16,11 @@ import androidx.lifecycle.ProcessLifecycleOwner
 import androidx.lifecycle.lifecycleScope
 import androidx.localbroadcastmanager.content.LocalBroadcastManager
 import androidx.work.Configuration
+import androidx.work.WorkManager
 import de.rki.coronawarnapp.exception.reporting.ErrorReportReceiver
 import de.rki.coronawarnapp.exception.reporting.ReportingConstants.ERROR_REPORT_LOCAL_BROADCAST_CHANNEL
 import de.rki.coronawarnapp.notification.NotificationHelper
+import de.rki.coronawarnapp.storage.LocalData
 import de.rki.coronawarnapp.transaction.RetrieveDiagnosisKeysTransaction
 import de.rki.coronawarnapp.util.ConnectivityHelper
 import de.rki.coronawarnapp.worker.BackgroundWorkHelper
@@ -30,7 +32,7 @@ import java.security.Security
 import java.util.UUID
 
 class CoronaWarnApplication : Application(), LifecycleObserver,
-    Application.ActivityLifecycleCallbacks, Configuration.Provider {
+    Application.ActivityLifecycleCallbacks {
 
     companion object {
         val TAG: String? = CoronaWarnApplication::class.simpleName
@@ -54,6 +56,12 @@ class CoronaWarnApplication : Application(), LifecycleObserver,
     override fun onCreate() {
         super.onCreate()
         instance = this
+
+        val configuration = Configuration.Builder()
+            .setMinimumLoggingLevel(android.util.Log.DEBUG)
+            .build()
+        WorkManager.initialize(this, configuration)
+
         NotificationHelper.createNotificationChannel()
         // Enable Conscrypt for TLS1.3 Support below API Level 29
         Security.insertProviderAt(Conscrypt.newProvider(), 1)
@@ -70,7 +78,7 @@ class CoronaWarnApplication : Application(), LifecycleObserver,
             "Application onCreate", "App was woken up"
         )
         // Only do this if the background jobs are enabled
-        if (ConnectivityHelper.autoModeEnabled(applicationContext))
+        if (ConnectivityHelper.autoModeEnabled(applicationContext)) {
             ProcessLifecycleOwner.get().lifecycleScope.launch {
                 // we want a wakelock as the OS does not handle this for us like in the background
                 // job execution
@@ -114,6 +122,11 @@ class CoronaWarnApplication : Application(), LifecycleObserver,
                 if (wifiLock.isHeld) wifiLock.release()
                 if (wakeLock.isHeld) wakeLock.release()
             }
+
+            // if the user is onboarded we will schedule period background jobs
+            // in case the app was force stopped and woken up again by the Google WakeUpService
+            if (LocalData.onboardingCompletedTimestamp() != null) BackgroundWorkScheduler.startWorkScheduler()
+        }
     }
 
     /**
@@ -167,9 +180,4 @@ class CoronaWarnApplication : Application(), LifecycleObserver,
         LocalBroadcastManager.getInstance(this)
             .registerReceiver(errorReceiver, IntentFilter(ERROR_REPORT_LOCAL_BROADCAST_CHANNEL))
     }
-
-    override fun getWorkManagerConfiguration() =
-        Configuration.Builder()
-            .setMinimumLoggingLevel(android.util.Log.DEBUG)
-            .build()
 }
-- 
GitLab