From 1aeae36fc047ae68081b39b1bb2bccb7209c2081 Mon Sep 17 00:00:00 2001 From: Rahul Patel Date: Tue, 28 Jan 2025 02:25:59 +0530 Subject: [PATCH] PackageUtil: Load package infos in smaller chunks -- This fixes issue with loading apps when number of apps on device is fairly very large --- .../java/com/aurora/store/util/PackageUtil.kt | 27 ++++++++++++++++--- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/aurora/store/util/PackageUtil.kt b/app/src/main/java/com/aurora/store/util/PackageUtil.kt index a485d19af..81a736780 100644 --- a/app/src/main/java/com/aurora/store/util/PackageUtil.kt +++ b/app/src/main/java/com/aurora/store/util/PackageUtil.kt @@ -55,12 +55,31 @@ object PackageUtil { private const val VERSION_CODE_MICRO_G_HUAWEI = 240913007 fun getAllValidPackages(context: Context): List { - val sharedLibs = context.packageManager.systemSharedLibraryNames ?: emptyArray() - return context.packageManager.getInstalledPackages(PackageManager.GET_META_DATA) - .filter { it.isValidApp(context.packageManager) } + val packageManager = context.packageManager + val packageInfoList = mutableListOf() + + var offset = 0 + val limit = 60 + val total = packageManager.getInstalledPackages(0).size + + val sharedLibs = packageManager.systemSharedLibraryNames ?: emptyArray() + + while (offset < total) { + val packages = packageManager + .getInstalledPackages(PackageManager.GET_META_DATA) + .subList( + offset, + (offset + limit).coerceAtMost(total) + ) + packageInfoList.addAll(packages) + offset += limit + } + + return packageInfoList + .filter { it.isValidApp(packageManager) } .filterNot { it.packageName in sharedLibs } .sortedBy { - it.applicationInfo!!.loadLabel(context.packageManager).toString() + it.applicationInfo!!.loadLabel(packageManager).toString() .lowercase(Locale.getDefault()) } }