From 367e9e9d0ca338f9c5c0bd6c83c26f060de8570d Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Fri, 23 Sep 2022 17:34:39 -0300 Subject: [PATCH] [db] attach install data from PackageManager to search results otherwise all found apps are considered not installed --- .../org/fdroid/database/AppListItemsTest.kt | 24 +++++++++++++++---- .../main/java/org/fdroid/database/AppDao.kt | 4 ++-- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/libs/database/src/dbTest/java/org/fdroid/database/AppListItemsTest.kt b/libs/database/src/dbTest/java/org/fdroid/database/AppListItemsTest.kt index a41f1dbc6..14336bf0e 100644 --- a/libs/database/src/dbTest/java/org/fdroid/database/AppListItemsTest.kt +++ b/libs/database/src/dbTest/java/org/fdroid/database/AppListItemsTest.kt @@ -45,8 +45,14 @@ internal class AppListItemsTest : AppTest() { appDao.insert(repoId, packageName3, app3, locales) appDao.insert(repoId, packageName2, app2, locales) - // nothing is installed - every { pm.getInstalledPackages(0) } returns emptyList() + // one of the apps is installed + @Suppress("DEPRECATION") + val packageInfo2 = PackageInfo().apply { + packageName = packageName2 + versionName = getRandomString() + versionCode = Random.nextInt(1, Int.MAX_VALUE) + } + every { pm.getInstalledPackages(0) } returns listOf(packageInfo2) // get first app by search, sort order doesn't matter appDao.getAppListItems(pm, "One", LAST_UPDATED).getOrFail().let { apps -> @@ -58,6 +64,8 @@ internal class AppListItemsTest : AppTest() { appDao.getAppListItems(pm, "Two", NAME).getOrFail().let { apps -> assertEquals(1, apps.size) assertEquals(app2, apps[0]) + assertEquals(packageInfo2.getVersionCode(), apps[0].installedVersionCode) + assertEquals(packageInfo2.versionName, apps[0].installedVersionName) } // get second and third app by searching for summary @@ -90,8 +98,14 @@ internal class AppListItemsTest : AppTest() { appDao.insert(repoId, packageName3, app3, locales) appDao.insert(repoId, packageName2, app2, locales) - // nothing is installed - every { pm.getInstalledPackages(0) } returns emptyList() + // one of the apps is installed + @Suppress("DEPRECATION") + val packageInfo2 = PackageInfo().apply { + packageName = packageName2 + versionName = getRandomString() + versionCode = Random.nextInt(1, Int.MAX_VALUE) + } + every { pm.getInstalledPackages(0) } returns listOf(packageInfo2) // get first app by search, sort order doesn't matter appDao.getAppListItems(pm, "A", "One", LAST_UPDATED).getOrFail().let { apps -> @@ -103,6 +117,8 @@ internal class AppListItemsTest : AppTest() { appDao.getAppListItems(pm, "A", "Two", NAME).getOrFail().let { apps -> assertEquals(1, apps.size) assertEquals(app2, apps[0]) + assertEquals(packageInfo2.getVersionCode(), apps[0].installedVersionCode) + assertEquals(packageInfo2.versionName, apps[0].installedVersionName) } // get second and third app by searching for summary diff --git a/libs/database/src/main/java/org/fdroid/database/AppDao.kt b/libs/database/src/main/java/org/fdroid/database/AppDao.kt index f25667377..4fb1c21cc 100644 --- a/libs/database/src/main/java/org/fdroid/database/AppDao.kt +++ b/libs/database/src/main/java/org/fdroid/database/AppDao.kt @@ -372,7 +372,7 @@ internal interface AppDaoInt : AppDao { return if (searchQuery.isNullOrEmpty()) when (sortOrder) { LAST_UPDATED -> getAppListItemsByLastUpdated().map(packageManager) NAME -> getAppListItemsByName().map(packageManager) - } else getAppListItems(searchQuery) + } else getAppListItems(searchQuery).map(packageManager) } override fun getAppListItems( @@ -384,7 +384,7 @@ internal interface AppDaoInt : AppDao { return if (searchQuery.isNullOrEmpty()) when (sortOrder) { LAST_UPDATED -> getAppListItemsByLastUpdated(category).map(packageManager) NAME -> getAppListItemsByName(category).map(packageManager) - } else getAppListItems(category, searchQuery) + } else getAppListItems(category, searchQuery).map(packageManager) } private fun LiveData>.map(