diff --git a/app/src/main/java/se/ajpanton/notificationlog/ViewLogsFragment.kt b/app/src/main/java/se/ajpanton/notificationlog/ViewLogsFragment.kt index 976c69e..2e8ef6e 100644 --- a/app/src/main/java/se/ajpanton/notificationlog/ViewLogsFragment.kt +++ b/app/src/main/java/se/ajpanton/notificationlog/ViewLogsFragment.kt @@ -135,8 +135,16 @@ class ViewLogsFragment : Fragment(R.layout.fragment_view_logs) { viewLifecycleOwner.lifecycleScope.launch { val apps = withContext(Dispatchers.IO) { val byPackage = linkedMapOf() + appFilterStore.selectedApps().forEach { app -> + val name = app.name.takeUnless { it == app.packageName } ?: runCatching { + appContext.packageManager.getApplicationLabel( + appContext.packageManager.getApplicationInfo(app.packageName, 0), + ).toString() + }.getOrDefault(app.packageName) + byPackage[app.packageName] = LoggedApp(name, app.packageName) + } EncryptedNotificationLogStore(appContext).forEachNewest { entry -> - byPackage.putIfAbsent(entry.packageName, LoggedApp(entry.appName, entry.packageName)) + byPackage[entry.packageName] = LoggedApp(entry.appName, entry.packageName) } byPackage.values.sortedWith(compareBy(String.CASE_INSENSITIVE_ORDER) { it.name }) } @@ -150,7 +158,9 @@ class ViewLogsFragment : Fragment(R.layout.fragment_view_logs) { apps.map { it.packageName in selected }.toBooleanArray(), ) { _, which, checked -> if (checked) selected += apps[which].packageName else selected -= apps[which].packageName - appFilterStore.save(selected) + appFilterStore.save(apps.filter { it.packageName in selected }.map { app -> + LogAppFilterStore.App(app.name, app.packageName) + }) changed = true } .setNeutralButton("Reset") { _, _ -> diff --git a/app/src/main/java/se/ajpanton/notificationlog/settings/LogAppFilterStore.kt b/app/src/main/java/se/ajpanton/notificationlog/settings/LogAppFilterStore.kt index 810ef11..d78bd2e 100644 --- a/app/src/main/java/se/ajpanton/notificationlog/settings/LogAppFilterStore.kt +++ b/app/src/main/java/se/ajpanton/notificationlog/settings/LogAppFilterStore.kt @@ -7,6 +7,22 @@ class LogAppFilterStore(context: Context) { private val prefs = context.getSharedPreferences("log-app-filter", Context.MODE_PRIVATE) fun selectedPackages(): Set = prefs.getStringSet("packages", emptySet()).orEmpty().toSet() - fun save(packages: Set) = prefs.edit { putStringSet("packages", packages) } - fun clear() = prefs.edit { remove("packages") } + + fun selectedApps(): List = selectedPackages().map { packageName -> + App(prefs.getString("name:$packageName", packageName).orEmpty(), packageName) + } + + fun save(apps: Collection) = prefs.edit { + val packages = apps.mapTo(mutableSetOf()) { it.packageName } + prefs.all.keys.filter { it.startsWith("name:") && it.removePrefix("name:") !in packages }.forEach(::remove) + putStringSet("packages", packages) + apps.forEach { putString("name:${it.packageName}", it.name) } + } + + fun clear() = prefs.edit { + remove("packages") + prefs.all.keys.filter { it.startsWith("name:") }.forEach(::remove) + } + + data class App(val name: String, val packageName: String) }