From c7c35da4929960b9ab719bc2c3683b5ad5ed1f9e Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Thu, 14 Dec 2023 18:12:24 +0530 Subject: [PATCH] DownloadWorkerUtil: Only trigger downloads if app is in foreground Signed-off-by: Aayush Gupta --- app/src/main/java/com/aurora/extensions/Context.kt | 7 +++++++ app/src/main/java/com/aurora/store/util/CommonUtil.kt | 6 ++++++ .../java/com/aurora/store/util/DownloadWorkerUtil.kt | 11 +++++++++-- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/aurora/extensions/Context.kt b/app/src/main/java/com/aurora/extensions/Context.kt index dd1e1c08f..fabd8eeb1 100644 --- a/app/src/main/java/com/aurora/extensions/Context.kt +++ b/app/src/main/java/com/aurora/extensions/Context.kt @@ -28,6 +28,7 @@ import android.content.Intent import android.graphics.Color import android.net.Uri import android.os.Bundle +import android.os.PowerManager import android.util.DisplayMetrics import android.util.TypedValue import android.view.LayoutInflater @@ -175,3 +176,9 @@ fun Context.accentColor(): Int { } return ContextCompat.getColor(this, color) } + +fun Context.isIgnoringBatteryOptimizations(): Boolean { + if (!isMAndAbove()) return true + return !(getSystemService(Context.POWER_SERVICE) as PowerManager) + .isIgnoringBatteryOptimizations(packageName) +} diff --git a/app/src/main/java/com/aurora/store/util/CommonUtil.kt b/app/src/main/java/com/aurora/store/util/CommonUtil.kt index 7bd9b405e..fe801130f 100644 --- a/app/src/main/java/com/aurora/store/util/CommonUtil.kt +++ b/app/src/main/java/com/aurora/store/util/CommonUtil.kt @@ -20,6 +20,8 @@ package com.aurora.store.util import android.content.Context +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.ProcessLifecycleOwner import com.aurora.extensions.isSAndAbove import com.aurora.store.R import com.aurora.store.data.model.ProxyInfo @@ -209,4 +211,8 @@ object CommonUtil { else -> null } } + + fun inForeground(): Boolean { + return ProcessLifecycleOwner.get().lifecycle.currentState.isAtLeast(Lifecycle.State.CREATED) + } } diff --git a/app/src/main/java/com/aurora/store/util/DownloadWorkerUtil.kt b/app/src/main/java/com/aurora/store/util/DownloadWorkerUtil.kt index 7a45230f5..b8fc07a6e 100644 --- a/app/src/main/java/com/aurora/store/util/DownloadWorkerUtil.kt +++ b/app/src/main/java/com/aurora/store/util/DownloadWorkerUtil.kt @@ -7,6 +7,7 @@ import androidx.work.ExistingWorkPolicy import androidx.work.OneTimeWorkRequestBuilder import androidx.work.OutOfQuotaPolicy import androidx.work.WorkManager +import com.aurora.extensions.isIgnoringBatteryOptimizations import com.aurora.gplayapi.data.models.App import com.aurora.store.data.model.DownloadStatus import com.aurora.store.data.room.download.Download @@ -17,6 +18,7 @@ import dagger.hilt.android.qualifiers.ApplicationContext import javax.inject.Inject import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.cancel import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.stateIn @@ -56,8 +58,13 @@ class DownloadWorkerUtil @Inject constructor( val enqueuedDownloads = list.filter { it.status == DownloadStatus.QUEUED } enqueuedDownloads.firstOrNull()?.let { try { - Log.i(DOWNLOAD_WORKER, "Downloading ${it.packageName}") - trigger(it) + if (context.isIgnoringBatteryOptimizations() || CommonUtil.inForeground()) { + Log.i(DOWNLOAD_WORKER, "Downloading ${it.packageName}") + trigger(it) + } else { + Log.i(TAG, "Not in foreground or ignoring battery optimization") + cancel() + } } catch (exception: Exception) { Log.i(DOWNLOAD_WORKER, "Failed to download app", exception) downloadDao.delete(it.packageName)