Skip to content

Commit f29fb48

Browse files
committed
Cache app labels for faster app picking
1 parent c59d422 commit f29fb48

File tree

3 files changed

+25
-8
lines changed

3 files changed

+25
-8
lines changed
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package tech.httptoolkit.android
2+
3+
import android.content.pm.ApplicationInfo
4+
import android.content.pm.PackageManager
5+
6+
object AppLabelCache {
7+
8+
private val cache = HashMap<String, String>() // PackageName -> Label
9+
10+
fun getAppLabel(packageManager: PackageManager, applicationInfo: ApplicationInfo): String {
11+
return cache.getOrPut(applicationInfo.packageName) {
12+
applicationInfo.loadLabel(packageManager).toString()
13+
}
14+
}
15+
16+
}

app/src/main/java/tech/httptoolkit/android/ApplicationListActivity.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ class ApplicationListActivity : AppCompatActivity(), SwipeRefreshLayout.OnRefres
7777

7878
private fun matchesFilters(app: PackageInfo): Boolean {
7979
val appInfo = app.applicationInfo
80-
val appLabel = appInfo.loadLabel(packageManager)
80+
val appLabel = AppLabelCache.getAppLabel(packageManager, appInfo)
8181
val isSystemApp = appInfo.flags and ApplicationInfo.FLAG_SYSTEM == 1
8282

8383
return (textFilter.isEmpty() || appLabel.contains(textFilter, true)) && // Filter by name
@@ -100,8 +100,8 @@ class ApplicationListActivity : AppCompatActivity(), SwipeRefreshLayout.OnRefres
100100
private suspend fun loadAllApps(): List<PackageInfo> =
101101
withContext(Dispatchers.IO) {
102102
return@withContext packageManager.getInstalledPackages(PackageManager.GET_META_DATA).apply {
103-
sortBy {
104-
it.applicationInfo.loadLabel(packageManager).toString().toUpperCase(
103+
sortBy { pkg ->
104+
AppLabelCache.getAppLabel(packageManager, pkg.applicationInfo).toUpperCase(
105105
Locale.getDefault()
106106
)
107107
}

app/src/main/java/tech/httptoolkit/android/ApplicationListAdapter.kt

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,12 @@ class ApplicationListAdapter(
3737
}
3838
}
3939

40-
fun bind(appInfo: PackageInfo) {
41-
itemView.row_app_icon_image.setImageDrawable(appInfo.applicationInfo.loadIcon(packageManager))
42-
itemView.row_app_name.text = appInfo.applicationInfo.loadLabel(packageManager)
43-
itemView.row_app_package_name.text = appInfo.packageName
44-
itemView.row_app_switch.isChecked = isAppWhitelisted(appInfo)
40+
fun bind(packageInfo: PackageInfo) {
41+
val appInfo = packageInfo.applicationInfo
42+
itemView.row_app_icon_image.setImageDrawable(appInfo.loadIcon(packageManager))
43+
itemView.row_app_name.text = AppLabelCache.getAppLabel(packageManager, appInfo)
44+
itemView.row_app_package_name.text = packageInfo.packageName
45+
itemView.row_app_switch.isChecked = isAppWhitelisted(packageInfo)
4546
}
4647
}
4748
}

0 commit comments

Comments
 (0)