From 2a2a0930c4c4904b6445e19249594ed540a29511 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Wed, 12 Mar 2025 16:06:08 +0800 Subject: [PATCH] fixup! Audit DownloadHelper & UpdateHelper scopes Move back both UpdateHelper and DownloadHelper to mainscope as they are only for observing changes to the data and don't need to be run on a IO dispatcher Signed-off-by: Aayush Gupta --- .../main/java/com/aurora/store/AuroraApp.kt | 6 ++---- .../store/data/helper/DownloadHelper.kt | 19 ++++++++++--------- .../aurora/store/data/helper/UpdateHelper.kt | 11 +++++------ 3 files changed, 17 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/com/aurora/store/AuroraApp.kt b/app/src/main/java/com/aurora/store/AuroraApp.kt index e6962d49c..b6bf58aa9 100644 --- a/app/src/main/java/com/aurora/store/AuroraApp.kt +++ b/app/src/main/java/com/aurora/store/AuroraApp.kt @@ -95,10 +95,8 @@ class AuroraApp : Application(), Configuration.Provider, SingletonImageLoader.Fa NotificationUtil.createNotificationChannel(this) // Initialize Download and Update helpers to observe and trigger downloads - scope.launch { - downloadHelper.init() - updateHelper.init() - } + downloadHelper.init() + updateHelper.init() //Register broadcast receiver for package install/uninstall ContextCompat.registerReceiver( diff --git a/app/src/main/java/com/aurora/store/data/helper/DownloadHelper.kt b/app/src/main/java/com/aurora/store/data/helper/DownloadHelper.kt index 433f1c2af..14b593873 100644 --- a/app/src/main/java/com/aurora/store/data/helper/DownloadHelper.kt +++ b/app/src/main/java/com/aurora/store/data/helper/DownloadHelper.kt @@ -16,12 +16,13 @@ import com.aurora.store.data.room.update.Update import com.aurora.store.data.work.DownloadWorker import com.aurora.store.util.PathUtil import dagger.hilt.android.qualifiers.ApplicationContext -import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.firstOrNull +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.stateIn -import kotlinx.coroutines.withContext +import kotlinx.coroutines.launch import javax.inject.Inject /** @@ -49,16 +50,16 @@ class DownloadHelper @Inject constructor( /** * Removes failed download from the queue and starts observing for newly enqueued apps. */ - suspend fun init() { - withContext(Dispatchers.IO) { + fun init() { + AuroraApp.scope.launch { cancelFailedDownloads(downloadDao.downloads().firstOrNull() ?: emptyList()) + }.invokeOnCompletion { + observeDownloads() } - - observeDownloads() } - private suspend fun observeDownloads() { - downloadDao.downloads().collect { list -> + private fun observeDownloads() { + downloadDao.downloads().onEach { list -> try { if (list.none { it.downloadStatus == DownloadStatus.DOWNLOADING }) { list.find { it.downloadStatus == DownloadStatus.QUEUED } @@ -70,7 +71,7 @@ class DownloadHelper @Inject constructor( } catch (exception: Exception) { Log.e(TAG, "Failed to enqueue download worker", exception) } - } + }.launchIn(AuroraApp.scope) } /** diff --git a/app/src/main/java/com/aurora/store/data/helper/UpdateHelper.kt b/app/src/main/java/com/aurora/store/data/helper/UpdateHelper.kt index 7f7447bcf..7df3604e1 100644 --- a/app/src/main/java/com/aurora/store/data/helper/UpdateHelper.kt +++ b/app/src/main/java/com/aurora/store/data/helper/UpdateHelper.kt @@ -25,14 +25,13 @@ import com.aurora.store.util.Preferences.PREFERENCES_UPDATES_RESTRICTIONS_IDLE import com.aurora.store.util.Preferences.PREFERENCES_UPDATES_RESTRICTIONS_METERED import com.aurora.store.util.Preferences.PREFERENCE_UPDATES_CHECK_INTERVAL import dagger.hilt.android.qualifiers.ApplicationContext -import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.firstOrNull import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.stateIn -import kotlinx.coroutines.withContext +import kotlinx.coroutines.launch import java.util.concurrent.TimeUnit.HOURS import java.util.concurrent.TimeUnit.MINUTES import javax.inject.Inject @@ -69,12 +68,12 @@ class UpdateHelper @Inject constructor( /** * Deletes invalid updates from database and starts observing events */ - suspend fun init() { - withContext(Dispatchers.IO) { + fun init() { + AuroraApp.scope.launch { deleteInvalidUpdates() + }.invokeOnCompletion { + observeUpdates() } - - observeUpdates() } private fun observeUpdates() {