DownloadWorkerUtil: Only trigger downloads if app is in foreground
Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
@@ -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)
|
||||||
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user