AppUtils: Filter cloneable apps to include only launchable packages

Signed-off-by: minaripenguin <minaripenguin@users.noreply.github.com>
This commit is contained in:
minaripenguin
2024-10-27 10:19:19 +08:00
committed by Joey
parent 7dab125134
commit 0cd4745921

View File

@@ -5,26 +5,22 @@ import android.content.pm.PackageInfo
import android.os.UserHandle import android.os.UserHandle
class AppUtils { class AppUtils {
public fun getCloneableAppList(context: Context): List<PackageInfo> { fun getCloneableAppList(context: Context): List<PackageInfo> {
var packageList: List<PackageInfo> = val packageManager = context.packageManager
context.getPackageManager().getInstalledPackagesAsUser(/* flags*/ 0, UserHandle.myUserId()) val packageList: List<PackageInfo> =
packageManager.getInstalledPackagesAsUser(0, UserHandle.myUserId())
var filteredList: List<PackageInfo> = packageList.filter {
val packageName = it.applicationInfo?.packageName
val isSystemApp = it.applicationInfo?.isSystemApp()
val isResourceOverlay = it.applicationInfo?.isResourceOverlay()
val cloneableApps = context.resources.getStringArray(com.android.internal.R.array.cloneable_apps)?.toList() val cloneableApps = context.resources.getStringArray(com.android.internal.R.array.cloneable_apps)?.toList()
val filteredList = packageList.filter { packageInfo ->
cloneableApps?.contains(packageName) == true || (isSystemApp == false && isResourceOverlay == false) val packageName = packageInfo.applicationInfo?.packageName
val isSystemApp = packageInfo.applicationInfo?.isSystemApp() == true
packageName != null && (cloneableApps?.contains(packageName) == true || !isSystemApp) &&
packageManager.getLaunchIntentForPackage(packageName) != null
} }
return filteredList return filteredList
} }
public fun getCloneableAppListStr(context: Context): List<String> { fun getCloneableAppListStr(context: Context): List<String> {
return getCloneableAppList(context).map { return getCloneableAppList(context).map { it.packageName }
x -> x.packageName
}.toList()
} }
} }