feat: allow hiding offline and/or non-direct nodes from list and map (#2052)

Co-authored-by: James Rich <2199651+jamesarich@users.noreply.github.com>
This commit is contained in:
Łukasz Kosson 2025-06-09 19:44:53 +02:00 committed by GitHub
parent 6becdf137b
commit e781d6774b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 211 additions and 16 deletions

View file

@ -104,6 +104,10 @@ fun NodeScreen(
onSortSelect = model::setSortOption,
includeUnknown = state.includeUnknown,
onToggleIncludeUnknown = model::toggleIncludeUnknown,
onlyOnline = state.onlyOnline,
onToggleOnlyOnline = model::toggleOnlyOnline,
onlyDirect = state.onlyDirect,
onToggleOnlyDirect = model::toggleOnlyDirect,
showDetails = state.showDetails,
onToggleShowDetails = model::toggleShowDetails,
)

View file

@ -59,6 +59,7 @@ import com.geeksville.mesh.model.NodeSortOption
import com.geeksville.mesh.ui.common.preview.LargeFontPreview
import com.geeksville.mesh.ui.common.theme.AppTheme
@Suppress("LongParameterList")
@Composable
fun NodeFilterTextField(
modifier: Modifier = Modifier,
@ -68,6 +69,10 @@ fun NodeFilterTextField(
onSortSelect: (NodeSortOption) -> Unit,
includeUnknown: Boolean,
onToggleIncludeUnknown: () -> Unit,
onlyOnline: Boolean,
onToggleOnlyOnline: () -> Unit,
onlyDirect: Boolean,
onToggleOnlyDirect: () -> Unit,
showDetails: Boolean,
onToggleShowDetails: () -> Unit,
) {
@ -86,6 +91,10 @@ fun NodeFilterTextField(
onSortSelect = onSortSelect,
includeUnknown = includeUnknown,
onToggleIncludeUnknown = onToggleIncludeUnknown,
onlyOnline = onlyOnline,
onToggleOnlyOnline = onToggleOnlyOnline,
onlyDirect = onlyDirect,
onToggleOnlyDirect = onToggleOnlyDirect,
showDetails = showDetails,
onToggleShowDetails = onToggleShowDetails,
)
@ -152,6 +161,10 @@ private fun NodeSortButton(
onSortSelect: (NodeSortOption) -> Unit,
includeUnknown: Boolean,
onToggleIncludeUnknown: () -> Unit,
onlyOnline: Boolean,
onToggleOnlyOnline: () -> Unit,
onlyDirect: Boolean,
onToggleOnlyDirect: () -> Unit,
showDetails: Boolean,
onToggleShowDetails: () -> Unit,
modifier: Modifier = Modifier,
@ -207,6 +220,46 @@ private fun NodeSortButton(
}
}
)
DropdownMenuItem(
onClick = {
onToggleOnlyOnline()
expanded = false
},
text = {
Row {
AnimatedVisibility(visible = onlyOnline) {
Icon(
imageVector = Icons.Default.Done,
contentDescription = null,
modifier = Modifier.padding(end = 4.dp),
)
}
Text(
text = stringResource(id = R.string.node_filter_only_online),
)
}
}
)
DropdownMenuItem(
onClick = {
onToggleOnlyDirect()
expanded = false
},
text = {
Row {
AnimatedVisibility(visible = onlyDirect) {
Icon(
imageVector = Icons.Default.Done,
contentDescription = null,
modifier = Modifier.padding(end = 4.dp),
)
}
Text(
text = stringResource(id = R.string.node_filter_only_direct),
)
}
}
)
HorizontalDivider()
DropdownMenuItem(
onClick = {
@ -243,6 +296,10 @@ private fun NodeFilterTextFieldPreview() {
onSortSelect = {},
includeUnknown = false,
onToggleIncludeUnknown = {},
onlyOnline = false,
onToggleOnlyOnline = {},
onlyDirect = false,
onToggleOnlyDirect = {},
showDetails = false,
onToggleShowDetails = {},
)