DownloadWorkerUtil: Only trigger downloads if app is in foreground

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2023-12-14 18:12:24 +05:30
parent cc0302cbe9
commit c7c35da492
3 changed files with 22 additions and 2 deletions

View File

@@ -28,6 +28,7 @@ import android.content.Intent
import android.graphics.Color import android.graphics.Color
import android.net.Uri import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.os.PowerManager
import android.util.DisplayMetrics import android.util.DisplayMetrics
import android.util.TypedValue import android.util.TypedValue
import android.view.LayoutInflater import android.view.LayoutInflater
@@ -175,3 +176,9 @@ fun Context.accentColor(): Int {
} }
return ContextCompat.getColor(this, color) return ContextCompat.getColor(this, color)
} }
fun Context.isIgnoringBatteryOptimizations(): Boolean {
if (!isMAndAbove()) return true
return !(getSystemService(Context.POWER_SERVICE) as PowerManager)
.isIgnoringBatteryOptimizations(packageName)
}

View File

@@ -20,6 +20,8 @@
package com.aurora.store.util package com.aurora.store.util
import android.content.Context import android.content.Context
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.ProcessLifecycleOwner
import com.aurora.extensions.isSAndAbove import com.aurora.extensions.isSAndAbove
import com.aurora.store.R import com.aurora.store.R
import com.aurora.store.data.model.ProxyInfo import com.aurora.store.data.model.ProxyInfo
@@ -209,4 +211,8 @@ object CommonUtil {
else -> null else -> null
} }
} }
fun inForeground(): Boolean {
return ProcessLifecycleOwner.get().lifecycle.currentState.isAtLeast(Lifecycle.State.CREATED)
}
} }

View File

@@ -7,6 +7,7 @@ import androidx.work.ExistingWorkPolicy
import androidx.work.OneTimeWorkRequestBuilder import androidx.work.OneTimeWorkRequestBuilder
import androidx.work.OutOfQuotaPolicy import androidx.work.OutOfQuotaPolicy
import androidx.work.WorkManager import androidx.work.WorkManager
import com.aurora.extensions.isIgnoringBatteryOptimizations
import com.aurora.gplayapi.data.models.App import com.aurora.gplayapi.data.models.App
import com.aurora.store.data.model.DownloadStatus import com.aurora.store.data.model.DownloadStatus
import com.aurora.store.data.room.download.Download import com.aurora.store.data.room.download.Download
@@ -17,6 +18,7 @@ import dagger.hilt.android.qualifiers.ApplicationContext
import javax.inject.Inject import javax.inject.Inject
import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.DelicateCoroutinesApi
import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.cancel
import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.flow.stateIn
@@ -56,8 +58,13 @@ class DownloadWorkerUtil @Inject constructor(
val enqueuedDownloads = list.filter { it.status == DownloadStatus.QUEUED } val enqueuedDownloads = list.filter { it.status == DownloadStatus.QUEUED }
enqueuedDownloads.firstOrNull()?.let { enqueuedDownloads.firstOrNull()?.let {
try { try {
Log.i(DOWNLOAD_WORKER, "Downloading ${it.packageName}") if (context.isIgnoringBatteryOptimizations() || CommonUtil.inForeground()) {
trigger(it) Log.i(DOWNLOAD_WORKER, "Downloading ${it.packageName}")
trigger(it)
} else {
Log.i(TAG, "Not in foreground or ignoring battery optimization")
cancel()
}
} catch (exception: Exception) { } catch (exception: Exception) {
Log.i(DOWNLOAD_WORKER, "Failed to download app", exception) Log.i(DOWNLOAD_WORKER, "Failed to download app", exception)
downloadDao.delete(it.packageName) downloadDao.delete(it.packageName)