42 lines
1.2 KiB
Kotlin
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()
|
|
}
|