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 {
|
viewLifecycleOwner.lifecycleScope.launch {
|
||||||
val apps = withContext(Dispatchers.IO) {
|
val apps = withContext(Dispatchers.IO) {
|
||||||
val byPackage = linkedMapOf<String, LoggedApp>()
|
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 ->
|
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 })
|
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(),
|
apps.map { it.packageName in selected }.toBooleanArray(),
|
||||||
) { _, which, checked ->
|
) { _, which, checked ->
|
||||||
if (checked) selected += apps[which].packageName else selected -= apps[which].packageName
|
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
|
changed = true
|
||||||
}
|
}
|
||||||
.setNeutralButton("Reset") { _, _ ->
|
.setNeutralButton("Reset") { _, _ ->
|
||||||
|
|||||||
@@ -7,6 +7,22 @@ class LogAppFilterStore(context: Context) {
|
|||||||
private val prefs = context.getSharedPreferences("log-app-filter", Context.MODE_PRIVATE)
|
private val prefs = context.getSharedPreferences("log-app-filter", Context.MODE_PRIVATE)
|
||||||
|
|
||||||
fun selectedPackages(): Set<String> = prefs.getStringSet("packages", emptySet()).orEmpty().toSet()
|
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