data: DownloadWorkerUtil -> DownloadHelper

Relocate and rename DownloadWorkerUtil to DownloadHelper.

We plan on having a separate helper class for updates too and considering all
util methods are more or less independent, it doesn't makes sense to keep these
classes into util package

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2024-10-08 14:01:33 +05:30
parent 9a49ccc727
commit 86f3713ab7
8 changed files with 35 additions and 34 deletions

View File

@@ -31,7 +31,7 @@ import com.aurora.extensions.setAppTheme
import com.aurora.store.data.event.EventFlow import com.aurora.store.data.event.EventFlow
import com.aurora.store.data.receiver.PackageManagerReceiver import com.aurora.store.data.receiver.PackageManagerReceiver
import com.aurora.store.util.CommonUtil import com.aurora.store.util.CommonUtil
import com.aurora.store.util.DownloadWorkerUtil import com.aurora.store.data.helper.DownloadHelper
import com.aurora.store.util.NotificationUtil import com.aurora.store.util.NotificationUtil
import com.aurora.store.util.PackageUtil import com.aurora.store.util.PackageUtil
import com.aurora.store.util.Preferences import com.aurora.store.util.Preferences
@@ -53,7 +53,7 @@ class AuroraApp : Application(), Configuration.Provider, ImageLoaderFactory {
lateinit var workerFactory: HiltWorkerFactory lateinit var workerFactory: HiltWorkerFactory
@Inject @Inject
lateinit var downloadWorkerUtil: DownloadWorkerUtil lateinit var downloadHelper: DownloadHelper
override val workManagerConfiguration: Configuration override val workManagerConfiguration: Configuration
get() = Configuration.Builder() get() = Configuration.Builder()
@@ -87,7 +87,7 @@ class AuroraApp : Application(), Configuration.Provider, ImageLoaderFactory {
NotificationUtil.createNotificationChannel(this) NotificationUtil.createNotificationChannel(this)
// Initialize DownloadWorker to observe and trigger downloads // Initialize DownloadWorker to observe and trigger downloads
downloadWorkerUtil.init() downloadHelper.init()
//Register broadcast receiver for package install/uninstall //Register broadcast receiver for package install/uninstall
ContextCompat.registerReceiver( ContextCompat.registerReceiver(

View File

@@ -1,4 +1,4 @@
package com.aurora.store.util package com.aurora.store.data.helper
import android.content.Context import android.content.Context
import android.util.Log import android.util.Log
@@ -14,6 +14,7 @@ import com.aurora.store.data.room.download.Download
import com.aurora.store.data.room.download.DownloadDao import com.aurora.store.data.room.download.DownloadDao
import com.aurora.store.data.room.update.Update import com.aurora.store.data.room.update.Update
import com.aurora.store.data.work.DownloadWorker import com.aurora.store.data.work.DownloadWorker
import com.aurora.store.util.PathUtil
import com.google.gson.Gson import com.google.gson.Gson
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.SharingStarted
@@ -27,7 +28,7 @@ import javax.inject.Inject
/** /**
* Helper class to work with the [DownloadWorker]. * Helper class to work with the [DownloadWorker].
*/ */
class DownloadWorkerUtil @Inject constructor( class DownloadHelper @Inject constructor(
@ApplicationContext private val context: Context, @ApplicationContext private val context: Context,
private val downloadDao: DownloadDao, private val downloadDao: DownloadDao,
private val gson: Gson private val gson: Gson
@@ -46,7 +47,7 @@ class DownloadWorkerUtil @Inject constructor(
val downloadsList = downloadDao.downloads() val downloadsList = downloadDao.downloads()
.stateIn(AuroraApp.scope, SharingStarted.WhileSubscribed(), emptyList()) .stateIn(AuroraApp.scope, SharingStarted.WhileSubscribed(), emptyList())
private val TAG = DownloadWorkerUtil::class.java.simpleName private val TAG = DownloadHelper::class.java.simpleName
/** /**
* Removes failed download from the queue and starts observing for newly enqueued apps. * Removes failed download from the queue and starts observing for newly enqueued apps.
@@ -180,7 +181,7 @@ class DownloadWorkerUtil @Inject constructor(
// Ensure all app downloads are unique to preserve individual records // Ensure all app downloads are unique to preserve individual records
WorkManager.getInstance(context) WorkManager.getInstance(context)
.enqueueUniqueWork( .enqueueUniqueWork(
"${DOWNLOAD_WORKER}/${download.packageName}", "$DOWNLOAD_WORKER/${download.packageName}",
ExistingWorkPolicy.KEEP, work ExistingWorkPolicy.KEEP, work
) )
} }

View File

@@ -33,7 +33,7 @@ import com.aurora.store.data.providers.AuthProvider
import com.aurora.store.data.room.download.Download import com.aurora.store.data.room.download.Download
import com.aurora.store.data.room.download.DownloadDao import com.aurora.store.data.room.download.DownloadDao
import com.aurora.store.util.CertUtil import com.aurora.store.util.CertUtil
import com.aurora.store.util.DownloadWorkerUtil import com.aurora.store.data.helper.DownloadHelper
import com.aurora.store.util.NotificationUtil import com.aurora.store.util.NotificationUtil
import com.aurora.store.util.PathUtil import com.aurora.store.util.PathUtil
import com.google.gson.Gson import com.google.gson.Gson
@@ -53,7 +53,7 @@ import com.aurora.gplayapi.data.models.File as GPlayFile
/** /**
* An expedited long-running worker to download and trigger installation for given apps. * An expedited long-running worker to download and trigger installation for given apps.
* *
* Avoid using this worker directly and prefer using [DownloadWorkerUtil] instead. * Avoid using this worker directly and prefer using [DownloadHelper] instead.
*/ */
@HiltWorker @HiltWorker
class DownloadWorker @AssistedInject constructor( class DownloadWorker @AssistedInject constructor(
@@ -92,7 +92,7 @@ class DownloadWorker @AssistedInject constructor(
// Try to parse input data into a valid app // Try to parse input data into a valid app
try { try {
val downloadData = inputData.getString(DownloadWorkerUtil.DOWNLOAD_DATA) val downloadData = inputData.getString(DownloadHelper.DOWNLOAD_DATA)
download = gson.fromJson(downloadData, Download::class.java) download = gson.fromJson(downloadData, Download::class.java)
val bitmap = BitmapFactory.decodeStream(withContext(Dispatchers.IO) { val bitmap = BitmapFactory.decodeStream(withContext(Dispatchers.IO) {

View File

@@ -18,7 +18,7 @@ import com.aurora.extensions.isMAndAbove
import com.aurora.store.data.installer.AppInstaller import com.aurora.store.data.installer.AppInstaller
import com.aurora.store.data.providers.AuthProvider import com.aurora.store.data.providers.AuthProvider
import com.aurora.store.util.AppUtil import com.aurora.store.util.AppUtil
import com.aurora.store.util.DownloadWorkerUtil import com.aurora.store.data.helper.DownloadHelper
import com.aurora.store.util.NotificationUtil import com.aurora.store.util.NotificationUtil
import com.aurora.store.util.Preferences import com.aurora.store.util.Preferences
import com.aurora.store.util.Preferences.PREFERENCE_UPDATES_AUTO import com.aurora.store.util.Preferences.PREFERENCE_UPDATES_AUTO
@@ -39,7 +39,7 @@ import java.util.concurrent.TimeUnit.MINUTES
@HiltWorker @HiltWorker
class UpdateWorker @AssistedInject constructor( class UpdateWorker @AssistedInject constructor(
private val appUtil: AppUtil, private val appUtil: AppUtil,
private val downloadWorkerUtil: DownloadWorkerUtil, private val downloadHelper: DownloadHelper,
private val authProvider: AuthProvider, private val authProvider: AuthProvider,
@Assisted private val appContext: Context, @Assisted private val appContext: Context,
@Assisted workerParams: WorkerParameters @Assisted workerParams: WorkerParameters
@@ -143,7 +143,7 @@ class UpdateWorker @AssistedInject constructor(
if (list.isEmpty()) return@let if (list.isEmpty()) return@let
Log.i(TAG, "Found auto-update enabled apps, updating!") Log.i(TAG, "Found auto-update enabled apps, updating!")
list.forEach { downloadWorkerUtil.enqueueUpdate(it) } list.forEach { downloadHelper.enqueueUpdate(it) }
} }
// Notify about remaining apps (if any) // Notify about remaining apps (if any)

View File

@@ -30,7 +30,7 @@ import com.aurora.extensions.browse
import com.aurora.store.R import com.aurora.store.R
import com.aurora.store.data.room.download.Download import com.aurora.store.data.room.download.Download
import com.aurora.store.databinding.FragmentDownloadBinding import com.aurora.store.databinding.FragmentDownloadBinding
import com.aurora.store.util.DownloadWorkerUtil import com.aurora.store.data.helper.DownloadHelper
import com.aurora.store.view.epoxy.views.DownloadViewModel_ import com.aurora.store.view.epoxy.views.DownloadViewModel_
import com.aurora.store.view.epoxy.views.app.NoAppViewModel_ import com.aurora.store.view.epoxy.views.app.NoAppViewModel_
import com.aurora.store.view.ui.commons.BaseFragment import com.aurora.store.view.ui.commons.BaseFragment
@@ -44,7 +44,7 @@ import javax.inject.Inject
class DownloadFragment : BaseFragment<FragmentDownloadBinding>() { class DownloadFragment : BaseFragment<FragmentDownloadBinding>() {
@Inject @Inject
lateinit var downloadWorkerUtil: DownloadWorkerUtil lateinit var downloadHelper: DownloadHelper
private lateinit var downloadList: List<Download> private lateinit var downloadList: List<Download>
@@ -62,19 +62,19 @@ class DownloadFragment : BaseFragment<FragmentDownloadBinding>() {
when (it.itemId) { when (it.itemId) {
R.id.action_force_clear_all -> { R.id.action_force_clear_all -> {
viewLifecycleOwner.lifecycleScope.launch(NonCancellable) { viewLifecycleOwner.lifecycleScope.launch(NonCancellable) {
downloadWorkerUtil.clearAllDownloads() downloadHelper.clearAllDownloads()
} }
} }
R.id.action_cancel_all -> { R.id.action_cancel_all -> {
viewLifecycleOwner.lifecycleScope.launch(NonCancellable) { viewLifecycleOwner.lifecycleScope.launch(NonCancellable) {
downloadWorkerUtil.cancelAll() downloadHelper.cancelAll()
} }
} }
R.id.action_clear_completed -> { R.id.action_clear_completed -> {
viewLifecycleOwner.lifecycleScope.launch(NonCancellable) { viewLifecycleOwner.lifecycleScope.launch(NonCancellable) {
downloadWorkerUtil.clearFinishedDownloads() downloadHelper.clearFinishedDownloads()
} }
} }
} }
@@ -83,7 +83,7 @@ class DownloadFragment : BaseFragment<FragmentDownloadBinding>() {
} }
viewLifecycleOwner.lifecycleScope.launch { viewLifecycleOwner.lifecycleScope.launch {
downloadWorkerUtil.downloadsList.collectLatest { downloadHelper.downloadsList.collectLatest {
downloadList = it downloadList = it
updateController(it.reversed()) updateController(it.reversed())
} }

View File

@@ -33,7 +33,7 @@ import com.aurora.store.R
import com.aurora.store.data.installer.AppInstaller import com.aurora.store.data.installer.AppInstaller
import com.aurora.store.data.model.DownloadStatus import com.aurora.store.data.model.DownloadStatus
import com.aurora.store.databinding.SheetDownloadMenuBinding import com.aurora.store.databinding.SheetDownloadMenuBinding
import com.aurora.store.util.DownloadWorkerUtil import com.aurora.store.data.helper.DownloadHelper
import com.aurora.store.util.PathUtil import com.aurora.store.util.PathUtil
import com.aurora.store.viewmodel.sheets.SheetsViewModel import com.aurora.store.viewmodel.sheets.SheetsViewModel
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
@@ -62,7 +62,7 @@ class DownloadMenuSheet : BaseDialogSheet<SheetDownloadMenuBinding>() {
} }
@Inject @Inject
lateinit var downloadWorkerUtil: DownloadWorkerUtil lateinit var downloadHelper: DownloadHelper
@Inject @Inject
lateinit var appInstaller: AppInstaller lateinit var appInstaller: AppInstaller
@@ -101,14 +101,14 @@ class DownloadMenuSheet : BaseDialogSheet<SheetDownloadMenuBinding>() {
R.id.action_cancel -> { R.id.action_cancel -> {
findViewTreeLifecycleOwner()?.lifecycleScope?.launch(NonCancellable) { findViewTreeLifecycleOwner()?.lifecycleScope?.launch(NonCancellable) {
downloadWorkerUtil.cancelDownload(args.download.packageName) downloadHelper.cancelDownload(args.download.packageName)
} }
dismissAllowingStateLoss() dismissAllowingStateLoss()
} }
R.id.action_clear -> { R.id.action_clear -> {
findViewTreeLifecycleOwner()?.lifecycleScope?.launch(NonCancellable) { findViewTreeLifecycleOwner()?.lifecycleScope?.launch(NonCancellable) {
downloadWorkerUtil.clearDownload( downloadHelper.clearDownload(
args.download.packageName, args.download.packageName,
args.download.versionCode args.download.versionCode
) )

View File

@@ -24,7 +24,7 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import com.aurora.store.data.room.update.Update import com.aurora.store.data.room.update.Update
import com.aurora.store.util.AppUtil import com.aurora.store.util.AppUtil
import com.aurora.store.util.DownloadWorkerUtil import com.aurora.store.data.helper.DownloadHelper
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
@@ -35,13 +35,13 @@ import javax.inject.Inject
@HiltViewModel @HiltViewModel
class UpdatesViewModel @Inject constructor( class UpdatesViewModel @Inject constructor(
private val appUtil: AppUtil, private val appUtil: AppUtil,
private val downloadWorkerUtil: DownloadWorkerUtil, private val downloadHelper: DownloadHelper,
) : ViewModel() { ) : ViewModel() {
private val TAG = UpdatesViewModel::class.java.simpleName private val TAG = UpdatesViewModel::class.java.simpleName
var updateAllEnqueued: Boolean = false var updateAllEnqueued: Boolean = false
val downloadsList get() = downloadWorkerUtil.downloadsList val downloadsList get() = downloadHelper.downloadsList
val updates get() = appUtil.updates val updates get() = appUtil.updates
private val _fetchingUpdates = MutableStateFlow(false) private val _fetchingUpdates = MutableStateFlow(false)
@@ -59,14 +59,14 @@ class UpdatesViewModel @Inject constructor(
} }
fun download(update: Update) { fun download(update: Update) {
viewModelScope.launch { downloadWorkerUtil.enqueueUpdate(update) } viewModelScope.launch { downloadHelper.enqueueUpdate(update) }
} }
fun cancelDownload(packageName: String) { fun cancelDownload(packageName: String) {
viewModelScope.launch { downloadWorkerUtil.cancelDownload(packageName) } viewModelScope.launch { downloadHelper.cancelDownload(packageName) }
} }
fun cancelAll() { fun cancelAll() {
viewModelScope.launch { downloadWorkerUtil.cancelAll(true) } viewModelScope.launch { downloadHelper.cancelAll(true) }
} }
} }

View File

@@ -16,7 +16,7 @@ import com.aurora.store.data.model.Report
import com.aurora.store.data.providers.AuthProvider import com.aurora.store.data.providers.AuthProvider
import com.aurora.store.data.room.favourites.Favourite import com.aurora.store.data.room.favourites.Favourite
import com.aurora.store.data.room.favourites.FavouriteDao import com.aurora.store.data.room.favourites.FavouriteDao
import com.aurora.store.util.DownloadWorkerUtil import com.aurora.store.data.helper.DownloadHelper
import com.google.gson.GsonBuilder import com.google.gson.GsonBuilder
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
@@ -34,7 +34,7 @@ import com.aurora.gplayapi.data.models.datasafety.Report as DataSafetyReport
@HiltViewModel @HiltViewModel
class AppDetailsViewModel @Inject constructor( class AppDetailsViewModel @Inject constructor(
@ApplicationContext private val context: Context, @ApplicationContext private val context: Context,
private val downloadWorkerUtil: DownloadWorkerUtil, private val downloadHelper: DownloadHelper,
private val authProvider: AuthProvider, private val authProvider: AuthProvider,
private val favouriteDao: FavouriteDao, private val favouriteDao: FavouriteDao,
private val httpClient: IHttpClient private val httpClient: IHttpClient
@@ -75,7 +75,7 @@ class AppDetailsViewModel @Inject constructor(
private val _favourite = MutableStateFlow<Boolean>(false) private val _favourite = MutableStateFlow<Boolean>(false)
val favourite = _favourite.asStateFlow() val favourite = _favourite.asStateFlow()
val downloadsList get() = downloadWorkerUtil.downloadsList val downloadsList get() = downloadHelper.downloadsList
fun fetchAppDetails(packageName: String) { fun fetchAppDetails(packageName: String) {
viewModelScope.launch(Dispatchers.IO) { viewModelScope.launch(Dispatchers.IO) {
@@ -179,11 +179,11 @@ class AppDetailsViewModel @Inject constructor(
} }
fun download(app: App) { fun download(app: App) {
viewModelScope.launch { downloadWorkerUtil.enqueueApp(app) } viewModelScope.launch { downloadHelper.enqueueApp(app) }
} }
fun cancelDownload(app: App) { fun cancelDownload(app: App) {
viewModelScope.launch { downloadWorkerUtil.cancelDownload(app.packageName) } viewModelScope.launch { downloadHelper.cancelDownload(app.packageName) }
} }
fun toggleFavourite(app: App) { fun toggleFavourite(app: App) {