From 0371350cc3b488e310b734d66edf3c6b33fbedf9 Mon Sep 17 00:00:00 2001 From: rmp22 <195054967+rmp22@users.noreply.github.com> Date: Sat, 19 Apr 2025 13:39:26 +0800 Subject: [PATCH] AppLockPackageListFragment: fix app filter Change-Id: I2e1441f6b394f5f3a40b627e039aa9a47fe26c1a --- .../applock/AppLockPackageListFragment.kt | 30 ++++++++++++------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/src/com/android/settings/security/applock/AppLockPackageListFragment.kt b/src/com/android/settings/security/applock/AppLockPackageListFragment.kt index 1f00ec87808..0cb48694642 100644 --- a/src/com/android/settings/security/applock/AppLockPackageListFragment.kt +++ b/src/com/android/settings/security/applock/AppLockPackageListFragment.kt @@ -62,24 +62,34 @@ class AppLockPackageListFragment : DashboardFragment() { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { super.onCreatePreferences(savedInstanceState, rootKey) + lifecycleScope.launch { val selectedPackages = getSelectedPackages() + val preferences = withContext(Dispatchers.Default) { - pm.getInstalledPackages( + val installedPackages = pm.getInstalledPackages( PackageInfoFlags.of(PackageManager.MATCH_ALL.toLong()) - ).filter { packageInfo -> - val isSystemApp = packageInfo.applicationInfo?.isSystemApp ?: false - !isSystemApp || launchablePackages.contains(packageInfo.packageName) || - whiteListedPackages.contains(packageInfo.packageName) - }.sortedWith { first, second -> - getLabel(first).compareTo(getLabel(second)) - } + ) + + installedPackages + .filter { packageInfo -> + val pkgName = packageInfo.packageName + val appInfo = packageInfo.applicationInfo + val isSystemApp = appInfo?.isSystemApp ?: false + val isLaunchable = pm.getLaunchIntentForPackage(pkgName) != null + val isWhitelisted = whiteListedPackages.contains(pkgName) + + val shouldInclude = isLaunchable && (!isSystemApp || isWhitelisted) + shouldInclude + } + .sortedBy { getLabel(it) } }.map { packageInfo -> createPreference(packageInfo, selectedPackages.contains(packageInfo.packageName)) } - preferenceScreen?.let { + + preferenceScreen?.let { screen -> preferences.forEach { pref -> - it.addPreference(pref) + screen.addPreference(pref) } } }