From e60cb1e8ca58f0dc44b8dcfd42b6dcd32ca3c631 Mon Sep 17 00:00:00 2001
From: lmj0011 <9396189+lmj0011@users.noreply.github.com>
Date: Sun, 14 Jun 2020 14:40:11 -0500
Subject: [PATCH] - perform UpdateWorker work in IO thread - clear MainActivity
 Intent.extras after every use to prevent side effects from stale data

---
 .../jetpackreleasetracker/MainActivity.kt       |  2 ++
 .../helpers/workers/UpdateWorker.kt             | 17 ++++++++---------
 2 files changed, 10 insertions(+), 9 deletions(-)

diff --git a/app/src/main/java/name/lmj0011/jetpackreleasetracker/MainActivity.kt b/app/src/main/java/name/lmj0011/jetpackreleasetracker/MainActivity.kt
index a8f729d..ff5a45d 100644
--- a/app/src/main/java/name/lmj0011/jetpackreleasetracker/MainActivity.kt
+++ b/app/src/main/java/name/lmj0011/jetpackreleasetracker/MainActivity.kt
@@ -38,6 +38,8 @@ class MainActivity : AppCompatActivity() {
         intent.extras?.getInt("menuItemId")?.let {
             navigateTo(it)
         }
+
+        intent.replaceExtras(null)
     }
 
     override fun onCreateOptionsMenu(menu: Menu): Boolean {
diff --git a/app/src/main/java/name/lmj0011/jetpackreleasetracker/helpers/workers/UpdateWorker.kt b/app/src/main/java/name/lmj0011/jetpackreleasetracker/helpers/workers/UpdateWorker.kt
index 1432879..f610584 100644
--- a/app/src/main/java/name/lmj0011/jetpackreleasetracker/helpers/workers/UpdateWorker.kt
+++ b/app/src/main/java/name/lmj0011/jetpackreleasetracker/helpers/workers/UpdateWorker.kt
@@ -9,8 +9,7 @@ import androidx.core.app.NotificationManagerCompat
 import androidx.core.content.ContextCompat
 import androidx.work.CoroutineWorker
 import androidx.work.WorkerParameters
-import kotlinx.coroutines.async
-import kotlinx.coroutines.coroutineScope
+import kotlinx.coroutines.*
 import name.lmj0011.jetpackreleasetracker.MainActivity
 import name.lmj0011.jetpackreleasetracker.R
 import name.lmj0011.jetpackreleasetracker.database.AndroidXArtifact
@@ -22,25 +21,24 @@ import timber.log.Timber
 class UpdateWorker (private val appContext: Context, workerParams: WorkerParameters)
     : CoroutineWorker(appContext, workerParams) {
 
-    var debugMessage = "${this::class.simpleName} performed work."
-
-    override suspend fun doWork(): Result = coroutineScope {
+    override suspend fun doWork(): Result = withContext(Dispatchers.IO) {
         // Do the work here
         val application = appContext.applicationContext as Application
         val dataSource = AppDatabase.getInstance(appContext).androidXArtifactDao
+        var debugMessage = "${this::class.simpleName} performed work."
 
         /**
          * We're only using this viewModel for some of it's methods that don't involve live data.
-         *  Live data doesn't work as expected inside a Worker, since there it's not a lifecycleOwner
+         *  Live data doesn't work as expected inside a Worker, since it's not a lifecycleOwner
          */
         val librariesViewModel = LibrariesViewModel(dataSource, application)
+        val artifactsToInsert = mutableListOf<AndroidXArtifact>()
+        val artifactsToUpdate = mutableListOf<AndroidXArtifact>()
+        val newArtifactVersionsToNotifySet = mutableSetOf<String>()
 
         val job = async {
             val localArtifacts = dataSource.getAllAndroidXArtifactsForWorker()
             val upstreamArtifactsList = librariesViewModel.fetchArtifacts()
-            val artifactsToInsert = mutableListOf<AndroidXArtifact>()
-            val artifactsToUpdate = mutableListOf<AndroidXArtifact>()
-            val newArtifactVersionsToNotifySet = mutableSetOf<String>()
 
             upstreamArtifactsList.forEach {upstreamArtifact ->
                 val updatedArtifact = localArtifacts?.find { localArtifact ->
@@ -85,6 +83,7 @@ class UpdateWorker (private val appContext: Context, workerParams: WorkerParamet
                     )
                     .setSmallIcon(R.drawable.ic_new_releases_outline_24dp)
                     .setOnlyAlertOnce(true)
+                    .setAutoCancel(true)
                     .setColor(ContextCompat.getColor(appContext, R.color.colorPrimary))
                     .build()