From a0c9e398cbad188335f581c5c4a9339baae24359 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Thu, 12 Sep 2024 11:38:19 +0530 Subject: [PATCH] AppUtil: Do update filtering on init instead Also deal with the case of app being updated when app wasn't in foreground Signed-off-by: Aayush Gupta --- .../com/aurora/store/data/room/update/Update.kt | 4 ++++ app/src/main/java/com/aurora/store/util/AppUtil.kt | 13 ++++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/aurora/store/data/room/update/Update.kt b/app/src/main/java/com/aurora/store/data/room/update/Update.kt index 99f0778f5..997eaca29 100644 --- a/app/src/main/java/com/aurora/store/data/room/update/Update.kt +++ b/app/src/main/java/com/aurora/store/data/room/update/Update.kt @@ -64,4 +64,8 @@ data class Update( fun isInstalled(context: Context): Boolean { return PackageUtil.isInstalled(context, packageName) } + + fun isUpToDate(context: Context): Boolean { + return PackageUtil.isInstalled(context, packageName, versionCode) + } } diff --git a/app/src/main/java/com/aurora/store/util/AppUtil.kt b/app/src/main/java/com/aurora/store/util/AppUtil.kt index 8babb03f8..27ac019b8 100644 --- a/app/src/main/java/com/aurora/store/util/AppUtil.kt +++ b/app/src/main/java/com/aurora/store/util/AppUtil.kt @@ -24,6 +24,8 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.withContext import javax.inject.Inject +import kotlinx.coroutines.flow.firstOrNull +import kotlinx.coroutines.launch class AppUtil @Inject constructor( private val gson: Gson, @@ -41,10 +43,19 @@ class AppUtil @Inject constructor( context, Preferences.PREFERENCE_UPDATES_EXTENDED ) val updates = updateDao.updates() - .map { list -> list.filter { it.isInstalled(context) } } .map { list -> if (!isExtendedUpdateEnabled) list.filter { it.hasValidCert } else list } .stateIn(AuroraApp.scope, SharingStarted.WhileSubscribed(), null) + init { + AuroraApp.scope.launch { + updateDao.updates().firstOrNull()?.forEach { update -> + if (!update.isInstalled(context) || update.isUpToDate(context)) { + deleteUpdate(update.packageName) + } + } + } + } + suspend fun checkUpdates(tmpAuthData: AuthData? = null): List { Log.i(TAG, "Checking for updates") val packageInfoMap = PackageUtil.getPackageInfoMap(context)