@@ -792,25 +792,31 @@ private suspend fun loadAllAppDataWithIcons(
792792 try {
793793 pm.getInstalledPackages(PackageManager .MATCH_ALL or PackageManager .MATCH_UNINSTALLED_PACKAGES )
794794 .asSequence()
795- .mapNotNull { pkg ->
796- val app = pkg.applicationInfo ? : return @mapNotNull null
797- val isInstalled = app.flags and ApplicationInfo .FLAG_INSTALLED != 0
798-
799- val icon = try {
800- app.loadIcon(pm).toBitmap().asImageBitmap()
801- } catch (e: Exception ) {
802- null
795+ .map { pkg ->
796+ val appInfo = pkg.applicationInfo ? : runCatching {
797+ pm.getApplicationInfo(
798+ pkg.packageName,
799+ PackageManager .MATCH_UNINSTALLED_PACKAGES or PackageManager .MATCH_DISABLED_COMPONENTS
800+ )
801+ }.getOrNull()
802+ val isInstalled = appInfo?.flags
803+ ?.and (ApplicationInfo .FLAG_INSTALLED )
804+ ?.let { it != 0 }
805+ ? : false
806+ val icon = appInfo?.let {
807+ runCatching { it.loadIcon(pm).toBitmap().asImageBitmap() }.getOrNull()
803808 }
804809
805810 AppData (
806811 packageName = pkg.packageName,
807- appName = runCatching {
808- app.loadLabel(pm).toString()
809- }.getOrElse { pkg.packageName },
810- isSystem =
811- app.flags and ApplicationInfo .FLAG_SYSTEM != 0 ||
812- app.flags and ApplicationInfo .FLAG_UPDATED_SYSTEM_APP != 0 ,
813- isDisabled = ! app.enabled,
812+ appName = appInfo?.let {
813+ runCatching { it.loadLabel(pm).toString() }.getOrNull()
814+ } ? : pkg.packageName,
815+ isSystem = appInfo?.let {
816+ it.flags and ApplicationInfo .FLAG_SYSTEM != 0 ||
817+ it.flags and ApplicationInfo .FLAG_UPDATED_SYSTEM_APP != 0
818+ } ? : false ,
819+ isDisabled = appInfo?.enabled == false ,
814820 isInstalled = isInstalled,
815821 icon = icon
816822 )
0 commit comments