Keep selected app names after clearing logs
This commit is contained in:
@@ -135,8 +135,16 @@ class ViewLogsFragment : Fragment(R.layout.fragment_view_logs) {
|
||||
viewLifecycleOwner.lifecycleScope.launch {
|
||||
val apps = withContext(Dispatchers.IO) {
|
||||
val byPackage = linkedMapOf<String, LoggedApp>()
|
||||
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") { _, _ ->
|
||||
|
||||
@@ -7,6 +7,22 @@ class LogAppFilterStore(context: Context) {
|
||||
private val prefs = context.getSharedPreferences("log-app-filter", Context.MODE_PRIVATE)
|
||||
|
||||
fun selectedPackages(): Set<String> = prefs.getStringSet("packages", emptySet()).orEmpty().toSet()
|
||||
fun save(packages: Set<String>) = prefs.edit { putStringSet("packages", packages) }
|
||||
fun clear() = prefs.edit { remove("packages") }
|
||||
|
||||
fun selectedApps(): List<App> = selectedPackages().map { packageName ->
|
||||
App(prefs.getString("name:$packageName", packageName).orEmpty(), packageName)
|
||||
}
|
||||
|
||||
fun save(apps: Collection<App>) = 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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user