From 40a1aab7d4c181e04ec683f7e682670686841f5c Mon Sep 17 00:00:00 2001 From: DaneEvans Date: Thu, 7 Aug 2025 14:47:32 +1000 Subject: [PATCH] closes #2646: fix UI overlap on traceroute delete (#2652) --- .../mesh/ui/metrics/TracerouteLog.kt | 96 ++++++------------- 1 file changed, 30 insertions(+), 66 deletions(-) diff --git a/app/src/main/java/com/geeksville/mesh/ui/metrics/TracerouteLog.kt b/app/src/main/java/com/geeksville/mesh/ui/metrics/TracerouteLog.kt index dc73bae22..24577db71 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/metrics/TracerouteLog.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/metrics/TracerouteLog.kt @@ -67,17 +67,11 @@ import java.text.DateFormat @OptIn(ExperimentalFoundationApi::class) @Composable -fun TracerouteLogScreen( - modifier: Modifier = Modifier, - viewModel: MetricsViewModel = hiltViewModel(), -) { +fun TracerouteLogScreen(modifier: Modifier = Modifier, viewModel: MetricsViewModel = hiltViewModel()) { val state by viewModel.state.collectAsStateWithLifecycle() - val dateFormat = remember { - DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM) - } + val dateFormat = remember { DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM) } - fun getUsername(nodeNum: Int): String = - with(viewModel.getUser(nodeNum)) { "$longName ($shortName)" } + fun getUsername(nodeNum: Int): String = with(viewModel.getUser(nodeNum)) { "$longName ($shortName)" } var showDialog by remember { mutableStateOf(null) } @@ -85,23 +79,17 @@ fun TracerouteLogScreen( val message = showDialog ?: return SimpleAlertDialog( title = R.string.traceroute, - text = { - SelectionContainer { - Text(text = message) - } - }, - onDismiss = { showDialog = null } + text = { SelectionContainer { Text(text = message) } }, + onDismiss = { showDialog = null }, ) } - LazyColumn( - modifier = modifier.fillMaxSize(), - contentPadding = PaddingValues(horizontal = 16.dp), - ) { + LazyColumn(modifier = modifier.fillMaxSize(), contentPadding = PaddingValues(horizontal = 16.dp)) { items(state.tracerouteRequests, key = { it.uuid }) { log -> - val result = remember(state.tracerouteRequests) { - state.tracerouteResults.find { it.decoded.requestId == log.fromRadio.packet.id } - } + val result = + remember(state.tracerouteRequests) { + state.tracerouteResults.find { it.decoded.requestId == log.fromRadio.packet.id } + } val route = remember(result) { result?.fullRouteDiscovery } val time = dateFormat.format(log.received_date) @@ -112,18 +100,14 @@ fun TracerouteLogScreen( TracerouteItem( icon = icon, text = "$time - $text", - modifier = Modifier.combinedClickable( - onLongClick = { expanded = true }, - ) { + modifier = + Modifier.combinedClickable(onLongClick = { expanded = true }) { if (result != null) { showDialog = result.getTracerouteResponse(::getUsername) } - } + }, ) - DropdownMenu( - expanded = expanded, - onDismissRequest = { expanded = false }, - ) { + DropdownMenu(expanded = expanded, onDismissRequest = { expanded = false }) { DeleteItem { viewModel.deleteLog(log.uuid) expanded = false @@ -139,46 +123,29 @@ private fun DeleteItem(onClick: () -> Unit) { DropdownMenuItem( onClick = onClick, text = { - Icon( - imageVector = Icons.Default.Delete, - contentDescription = stringResource(id = R.string.delete), - tint = MaterialTheme.colorScheme.error, - ) - Spacer(modifier = Modifier.width(12.dp)) - Text( - text = stringResource(id = R.string.delete), - color = MaterialTheme.colorScheme.error, - ) - } + Row(verticalAlignment = Alignment.CenterVertically) { + Icon( + imageVector = Icons.Default.Delete, + contentDescription = stringResource(id = R.string.delete), + tint = MaterialTheme.colorScheme.error, + ) + Spacer(modifier = Modifier.width(12.dp)) + Text(text = stringResource(id = R.string.delete), color = MaterialTheme.colorScheme.error) + } + }, ) } @Composable -private fun TracerouteItem( - icon: ImageVector, - text: String, - modifier: Modifier = Modifier, -) { - Card( - modifier = modifier - .fillMaxWidth() - .heightIn(min = 56.dp) - .padding(vertical = 2.dp), - ) { +private fun TracerouteItem(icon: ImageVector, text: String, modifier: Modifier = Modifier) { + Card(modifier = modifier.fillMaxWidth().heightIn(min = 56.dp).padding(vertical = 2.dp)) { Row( - modifier = Modifier - .padding(horizontal = 16.dp, vertical = 8.dp), + modifier = Modifier.padding(horizontal = 16.dp, vertical = 8.dp), verticalAlignment = Alignment.CenterVertically, ) { - Icon( - imageVector = icon, - contentDescription = stringResource(id = R.string.traceroute) - ) + Icon(imageVector = icon, contentDescription = stringResource(id = R.string.traceroute)) Spacer(modifier = Modifier.width(8.dp)) - Text( - text = text, - style = MaterialTheme.typography.bodyLarge, - ) + Text(text = text, style = MaterialTheme.typography.bodyLarge) } } } @@ -209,9 +176,6 @@ private fun MeshProtos.RouteDiscovery?.getTextAndIcon(): Pair