AuroraApp: Switch from GlobalScope to MainScope
Use MainScope instead of GlobalScope managed in the application class Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
@@ -31,11 +31,13 @@ import com.aurora.store.util.DownloadWorkerUtil
|
||||
import com.aurora.store.util.NotificationUtil
|
||||
import com.aurora.store.util.PackageUtil
|
||||
import dagger.hilt.android.HiltAndroidApp
|
||||
import kotlinx.coroutines.MainScope
|
||||
import kotlinx.coroutines.cancel
|
||||
import javax.inject.Inject
|
||||
import org.lsposed.hiddenapibypass.HiddenApiBypass
|
||||
|
||||
@HiltAndroidApp
|
||||
class AuroraApplication : Application(), Configuration.Provider {
|
||||
class AuroraApp : Application(), Configuration.Provider {
|
||||
|
||||
@Inject
|
||||
lateinit var workerFactory: HiltWorkerFactory
|
||||
@@ -50,6 +52,10 @@ class AuroraApplication : Application(), Configuration.Provider {
|
||||
.build()
|
||||
|
||||
companion object {
|
||||
// Alternative to GlobalScope
|
||||
var scope = MainScope()
|
||||
private set
|
||||
|
||||
val enqueuedInstalls: MutableSet<String> = mutableSetOf()
|
||||
}
|
||||
|
||||
@@ -76,4 +82,9 @@ class AuroraApplication : Application(), Configuration.Provider {
|
||||
CommonUtil.cleanupInstallationSessions(applicationContext)
|
||||
}
|
||||
|
||||
override fun onLowMemory() {
|
||||
super.onLowMemory()
|
||||
scope.cancel("onLowMemory() called by system")
|
||||
scope = MainScope()
|
||||
}
|
||||
}
|
||||
@@ -22,7 +22,7 @@ package com.aurora.store.data.installer
|
||||
import android.content.Context
|
||||
import android.net.Uri
|
||||
import androidx.core.content.FileProvider
|
||||
import com.aurora.store.AuroraApplication
|
||||
import com.aurora.store.AuroraApp
|
||||
import com.aurora.store.BuildConfig
|
||||
import com.aurora.store.data.event.InstallerEvent
|
||||
import com.aurora.store.util.Log
|
||||
@@ -33,15 +33,15 @@ import java.io.File
|
||||
abstract class InstallerBase(protected var context: Context) : IInstaller {
|
||||
|
||||
override fun clearQueue() {
|
||||
AuroraApplication.enqueuedInstalls.clear()
|
||||
AuroraApp.enqueuedInstalls.clear()
|
||||
}
|
||||
|
||||
override fun isAlreadyQueued(packageName: String): Boolean {
|
||||
return AuroraApplication.enqueuedInstalls.contains(packageName)
|
||||
return AuroraApp.enqueuedInstalls.contains(packageName)
|
||||
}
|
||||
|
||||
override fun removeFromInstallQueue(packageName: String) {
|
||||
AuroraApplication.enqueuedInstalls.remove(packageName)
|
||||
AuroraApp.enqueuedInstalls.remove(packageName)
|
||||
}
|
||||
|
||||
open fun postError(packageName: String, error: String?, extra: String?) {
|
||||
|
||||
@@ -32,7 +32,7 @@ import android.os.RemoteException
|
||||
import androidx.core.content.FileProvider
|
||||
import com.aurora.services.IPrivilegedCallback
|
||||
import com.aurora.services.IPrivilegedService
|
||||
import com.aurora.store.AuroraApplication
|
||||
import com.aurora.store.AuroraApp
|
||||
import com.aurora.store.BuildConfig
|
||||
import com.aurora.store.R
|
||||
import com.aurora.store.data.event.BusEvent
|
||||
@@ -108,7 +108,7 @@ class ServiceInstaller(context: Context) : InstallerBase(context) {
|
||||
readyWithAction.set(true)
|
||||
return
|
||||
}
|
||||
AuroraApplication.enqueuedInstalls.add(packageName)
|
||||
AuroraApp.enqueuedInstalls.add(packageName)
|
||||
val service = IPrivilegedService.Stub.asInterface(binder)
|
||||
|
||||
if (service.hasPrivilegedPermissions()) {
|
||||
|
||||
@@ -26,14 +26,12 @@ import android.net.NetworkCapabilities
|
||||
import android.net.NetworkRequest
|
||||
import android.util.Log
|
||||
import com.aurora.extensions.isMAndAbove
|
||||
import com.aurora.store.AuroraApp
|
||||
import com.aurora.store.data.model.NetworkStatus
|
||||
import kotlinx.coroutines.DelicateCoroutinesApi
|
||||
import kotlinx.coroutines.GlobalScope
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.asStateFlow
|
||||
import kotlinx.coroutines.flow.launchIn
|
||||
|
||||
@OptIn(DelicateCoroutinesApi::class)
|
||||
class NetworkProvider(context: Context) {
|
||||
|
||||
private val TAG = NetworkProvider::class.java.simpleName
|
||||
@@ -45,7 +43,7 @@ class NetworkProvider(context: Context) {
|
||||
context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
|
||||
|
||||
init {
|
||||
networkStatus.launchIn(GlobalScope)
|
||||
networkStatus.launchIn(AuroraApp.scope)
|
||||
|
||||
// Monitor network
|
||||
connectivityManager.registerNetworkCallback(getNetworkRequest(),
|
||||
|
||||
@@ -39,9 +39,9 @@ import com.aurora.store.util.Preferences.PREFERENCE_AUTO_DELETE
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import javax.inject.Inject
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.cancel
|
||||
import kotlinx.coroutines.flow.filter
|
||||
import kotlinx.coroutines.flow.firstOrNull
|
||||
import kotlinx.coroutines.withContext
|
||||
import org.greenrobot.eventbus.EventBus
|
||||
|
||||
@AndroidEntryPoint
|
||||
@@ -70,7 +70,7 @@ open class PackageManagerReceiver : BroadcastReceiver() {
|
||||
downloadWorkerUtil.downloadsList.filter { it.isNotEmpty() }.firstOrNull()
|
||||
?.find { it.packageName == packageName && it.downloadStatus == DownloadStatus.COMPLETED }
|
||||
?.let {
|
||||
notifyInstallation(context, it)
|
||||
withContext(Dispatchers.IO) { notifyInstallation(context, it) }
|
||||
if (Preferences.getBoolean(context, PREFERENCE_AUTO_DELETE)) {
|
||||
clearDownloads(context, it)
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ import androidx.work.OneTimeWorkRequestBuilder
|
||||
import androidx.work.OutOfQuotaPolicy
|
||||
import androidx.work.WorkManager
|
||||
import com.aurora.gplayapi.data.models.App
|
||||
import com.aurora.store.AuroraApp
|
||||
import com.aurora.store.data.model.DownloadStatus
|
||||
import com.aurora.store.data.room.download.Download
|
||||
import com.aurora.store.data.room.download.DownloadDao
|
||||
@@ -15,8 +16,6 @@ import com.aurora.store.data.work.DownloadWorker
|
||||
import com.google.gson.Gson
|
||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||
import javax.inject.Inject
|
||||
import kotlinx.coroutines.DelicateCoroutinesApi
|
||||
import kotlinx.coroutines.GlobalScope
|
||||
import kotlinx.coroutines.flow.SharingStarted
|
||||
import kotlinx.coroutines.flow.collectLatest
|
||||
import kotlinx.coroutines.flow.filter
|
||||
@@ -24,7 +23,6 @@ import kotlinx.coroutines.flow.firstOrNull
|
||||
import kotlinx.coroutines.flow.stateIn
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
@OptIn(DelicateCoroutinesApi::class)
|
||||
class DownloadWorkerUtil @Inject constructor(
|
||||
@ApplicationContext private val context: Context,
|
||||
private val downloadDao: DownloadDao,
|
||||
@@ -42,12 +40,12 @@ class DownloadWorkerUtil @Inject constructor(
|
||||
}
|
||||
|
||||
val downloadsList = downloadDao.downloads()
|
||||
.stateIn(GlobalScope, SharingStarted.WhileSubscribed(), emptyList())
|
||||
.stateIn(AuroraApp.scope, SharingStarted.WhileSubscribed(), emptyList())
|
||||
|
||||
private val TAG = DownloadWorkerUtil::class.java.simpleName
|
||||
|
||||
fun init() {
|
||||
GlobalScope.launch {
|
||||
AuroraApp.scope.launch {
|
||||
cancelFailedDownloads(downloadDao.downloads().firstOrNull() ?: emptyList())
|
||||
}.invokeOnCompletion {
|
||||
observeDownloads()
|
||||
@@ -55,7 +53,7 @@ class DownloadWorkerUtil @Inject constructor(
|
||||
}
|
||||
|
||||
private fun observeDownloads() {
|
||||
GlobalScope.launch {
|
||||
AuroraApp.scope.launch {
|
||||
downloadDao.downloads().collectLatest { list ->
|
||||
// Check and trigger next download in queue, if any
|
||||
if (!list.any { it.downloadStatus == DownloadStatus.DOWNLOADING }) {
|
||||
|
||||
Reference in New Issue
Block a user