Files
IndPjsk/app/src/main/java/net/bluemangoo/indpjsk/data/InstalledApps.kt
T
2026-10-29 16:36:43 +08:00

42 lines
1.2 KiB
Kotlin

package net.bluemangoo.indpjsk.data
import android.content.Context
import android.graphics.drawable.Drawable
data class AppEntry(
val packageName: String,
val label: String,
val icon: Drawable,
)
object InstalledApps {
fun list(context: Context): List<AppEntry> {
val pm = context.packageManager
return pm.getInstalledApplications(0)
.asSequence()
.mapNotNull { info ->
runCatching {
AppEntry(
packageName = info.packageName,
label = pm.getApplicationLabel(info).toString(),
icon = pm.getApplicationIcon(info),
)
}.getOrNull()
}
.distinctBy { it.packageName }
.sortedBy { it.label.lowercase() }
.toList()
}
fun get(context: Context, packageName: String): AppEntry? = runCatching {
val pm = context.packageManager
val info = pm.getApplicationInfo(packageName, 0)
AppEntry(
packageName = packageName,
label = pm.getApplicationLabel(info).toString(),
icon = pm.getApplicationIcon(info),
)
}.getOrNull()
}