manager: lazy load app name and icon

This commit is contained in:
tiann
2022-12-15 15:15:30 +08:00
parent 21e2306a50
commit c4b32332d2

View File

@@ -25,9 +25,9 @@ import java.util.*
private const val TAG = "SuperUser" private const val TAG = "SuperUser"
class SuperUserData( class SuperUserData(
val name: CharSequence, val name: () -> CharSequence,
val description: String, val description: String,
val icon: Drawable, val icon: () -> Drawable,
val uid: Int, val uid: Int,
initialChecked: Boolean = false initialChecked: Boolean = false
) { ) {
@@ -44,11 +44,11 @@ fun SuperUserItem(
Column { Column {
ListItem( ListItem(
headlineText = { Text(superUserData.name.toString()) }, headlineText = { Text(superUserData.name().toString()) },
supportingText = { Text(superUserData.description) }, supportingText = { Text(superUserData.description) },
leadingContent = { leadingContent = {
Image( Image(
painter = rememberDrawablePainter(drawable = superUserData.icon), painter = rememberDrawablePainter(drawable = superUserData.icon()),
contentDescription = superUserData.name.toString(), contentDescription = superUserData.name.toString(),
modifier = Modifier modifier = Modifier
.padding(4.dp) .padding(4.dp)
@@ -78,12 +78,15 @@ private fun getAppList(context: Context): List<SuperUserData> {
val result = mutableListOf<SuperUserData>() val result = mutableListOf<SuperUserData>()
val unknownName = { "Unknown" }
val unknownDesc = "Unknown"
val defaultIcon = { context.getDrawable(android.R.drawable.sym_def_app_icon)!! }
// add allow list // add allow list
for (uid in allowList) { for (uid in allowList) {
val packagesForUid = pm.getPackagesForUid(uid) val packagesForUid = pm.getPackagesForUid(uid)
if (packagesForUid == null || packagesForUid.isEmpty()) { if (packagesForUid == null || packagesForUid.isEmpty()) {
result.add(SuperUserData("Unknown", "Unknown", result.add(SuperUserData(unknownName, unknownDesc, defaultIcon, uid, true))
context.getDrawable(android.R.drawable.sym_def_app_icon)!!, uid, true))
continue continue
} }
@@ -91,9 +94,9 @@ private fun getAppList(context: Context): List<SuperUserData> {
val applicationInfo = pm.getApplicationInfo(packageName, 0) val applicationInfo = pm.getApplicationInfo(packageName, 0)
result.add( result.add(
SuperUserData( SuperUserData(
name = applicationInfo.loadLabel(pm), name = { applicationInfo.loadLabel(pm) },
description = applicationInfo.packageName, description = applicationInfo.packageName,
icon = applicationInfo.loadIcon(pm), icon = { applicationInfo.loadIcon(pm) },
uid = uid, uid = uid,
initialChecked = true initialChecked = true
) )
@@ -105,8 +108,11 @@ private fun getAppList(context: Context): List<SuperUserData> {
for (uid in denyList) { for (uid in denyList) {
val packagesForUid = pm.getPackagesForUid(uid) val packagesForUid = pm.getPackagesForUid(uid)
if (packagesForUid == null || packagesForUid.isEmpty()) { if (packagesForUid == null || packagesForUid.isEmpty()) {
result.add(SuperUserData("Unknown", "Unknown", result.add(
context.getDrawable(android.R.drawable.sym_def_app_icon)!!, uid, true)) SuperUserData(
unknownName, unknownDesc, defaultIcon, uid, true
)
)
continue continue
} }
@@ -114,9 +120,9 @@ private fun getAppList(context: Context): List<SuperUserData> {
val applicationInfo = pm.getApplicationInfo(packageName, 0) val applicationInfo = pm.getApplicationInfo(packageName, 0)
result.add( result.add(
SuperUserData( SuperUserData(
name = applicationInfo.loadLabel(pm), name = { applicationInfo.loadLabel(pm) },
description = applicationInfo.packageName, description = applicationInfo.packageName,
icon = applicationInfo.loadIcon(pm), icon = { applicationInfo.loadIcon(pm) },
uid = uid, uid = uid,
initialChecked = false initialChecked = false
) )
@@ -133,9 +139,9 @@ private fun getAppList(context: Context): List<SuperUserData> {
} }
result.add( result.add(
SuperUserData( SuperUserData(
name = app.loadLabel(pm), name = { app.loadLabel(pm) },
description = app.packageName, description = app.packageName,
icon = app.loadIcon(pm), icon = { app.loadIcon(pm) },
uid = app.uid, uid = app.uid,
initialChecked = false initialChecked = false
) )