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()