diff --git a/src/frontends/android/app/src/main/java/org/strongswan/android/ui/SelectedApplicationsActivity.kt b/src/frontends/android/app/src/main/java/org/strongswan/android/ui/SelectedApplicationsActivity.kt index 6486f5d8f..8fdade228 100644 --- a/src/frontends/android/app/src/main/java/org/strongswan/android/ui/SelectedApplicationsActivity.kt +++ b/src/frontends/android/app/src/main/java/org/strongswan/android/ui/SelectedApplicationsActivity.kt @@ -150,9 +150,17 @@ private fun SelectedAppsScreen( onChange(selected) } - val filtered = remember(apps, query) { - if (query.isBlank()) apps - else apps.filter { it.toString().contains(query, ignoreCase = true) || it.info.packageName.contains(query, ignoreCase = true) } + /* pure system apps are hidden by default (they are rarely worth excluding); a selected one always shows */ + var showSystem by remember { mutableStateOf(false) } + val filtered = remember(apps, query, showSystem, selected) { + apps.filter { entry -> + val flags = entry.info.flags + val system = (flags and android.content.pm.ApplicationInfo.FLAG_SYSTEM) != 0 && + (flags and android.content.pm.ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) == 0 + (showSystem || !system || selected.contains(entry.info.packageName)) && + (query.isBlank() || entry.toString().contains(query, ignoreCase = true) || + entry.info.packageName.contains(query, ignoreCase = true)) + } } SecondaryScaffold(title = stringResource(R.string.profile_select_apps), onBack = onBack) { padding -> @@ -164,6 +172,17 @@ private fun SelectedAppsScreen( singleLine = true, modifier = Modifier.padding(horizontal = ShxSpacing.lg, vertical = ShxSpacing.sm).fillMaxWidth(), ) + androidx.compose.foundation.layout.Row( + verticalAlignment = androidx.compose.ui.Alignment.CenterVertically, + modifier = Modifier + .fillMaxWidth() + .clickable { showSystem = !showSystem } + .padding(horizontal = ShxSpacing.lg), + ) + { + Text(stringResource(R.string.apps_show_system), modifier = Modifier.weight(1f)) + androidx.compose.material3.Switch(checked = showSystem, onCheckedChange = null) + } if (loading) { LoadingIndicator(Modifier.padding(ShxSpacing.xl).size(32.dp)) diff --git a/src/frontends/android/app/src/main/res/values-de/strings.xml b/src/frontends/android/app/src/main/res/values-de/strings.xml index 691270d88..ee3914794 100644 --- a/src/frontends/android/app/src/main/res/values-de/strings.xml +++ b/src/frontends/android/app/src/main/res/values-de/strings.xml @@ -509,4 +509,5 @@ Alle Warnungen Fehler + Systemapps anzeigen diff --git a/src/frontends/android/app/src/main/res/values-ru/strings.xml b/src/frontends/android/app/src/main/res/values-ru/strings.xml index a3210c137..f69179dcb 100644 --- a/src/frontends/android/app/src/main/res/values-ru/strings.xml +++ b/src/frontends/android/app/src/main/res/values-ru/strings.xml @@ -506,4 +506,5 @@ Все Предупреждения Ошибки + Показывать системные приложения diff --git a/src/frontends/android/app/src/main/res/values/strings.xml b/src/frontends/android/app/src/main/res/values/strings.xml index 28f4f577b..3af02c5cb 100644 --- a/src/frontends/android/app/src/main/res/values/strings.xml +++ b/src/frontends/android/app/src/main/res/values/strings.xml @@ -511,4 +511,5 @@ All Warnings Errors + Show system apps