fix: enforce `SignalInfo` single-line layout

closes #1441
pull/1444/head
andrekir 2024-11-30 14:19:39 -03:00
rodzic e412faecb9
commit f4c24dbfff
3 zmienionych plików z 27 dodań i 22 usunięć

Wyświetl plik

@ -69,6 +69,7 @@ import com.geeksville.mesh.database.entity.NodeEntity
import com.geeksville.mesh.ui.components.MenuItemAction import com.geeksville.mesh.ui.components.MenuItemAction
import com.geeksville.mesh.ui.components.NodeKeyStatusIcon import com.geeksville.mesh.ui.components.NodeKeyStatusIcon
import com.geeksville.mesh.ui.components.NodeMenu import com.geeksville.mesh.ui.components.NodeMenu
import com.geeksville.mesh.ui.components.SignalInfo
import com.geeksville.mesh.ui.components.SimpleAlertDialog import com.geeksville.mesh.ui.components.SimpleAlertDialog
import com.geeksville.mesh.ui.compose.ElevationInfo import com.geeksville.mesh.ui.compose.ElevationInfo
import com.geeksville.mesh.ui.compose.SatelliteCountInfo import com.geeksville.mesh.ui.compose.SatelliteCountInfo
@ -235,8 +236,9 @@ fun NodeItem(
Row( Row(
modifier = Modifier.fillMaxWidth(), modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.SpaceBetween, horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically,
) { ) {
signalInfo( SignalInfo(
node = thatNode, node = thatNode,
isThisNode = isThisNode isThisNode = isThisNode
) )

Wyświetl plik

@ -19,10 +19,14 @@ package com.geeksville.mesh.ui.components
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.ExperimentalLayoutApi
import androidx.compose.foundation.layout.FlowRow
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width
import androidx.compose.material.Icon import androidx.compose.material.Icon
import androidx.compose.material.MaterialTheme import androidx.compose.material.MaterialTheme
import androidx.compose.material.Text import androidx.compose.material.Text
@ -61,17 +65,23 @@ private enum class Quality(
* Displays the `snr` and `rssi` color coded based on the signal quality, along with * Displays the `snr` and `rssi` color coded based on the signal quality, along with
* a human readable description and related icon. * a human readable description and related icon.
*/ */
@OptIn(ExperimentalLayoutApi::class)
@Composable @Composable
fun NodeSignalQuality(snr: Float, rssi: Int) { fun NodeSignalQuality(snr: Float, rssi: Int, modifier: Modifier = Modifier) {
val quality = determineSignalQuality(snr, rssi) val quality = determineSignalQuality(snr, rssi)
Row( FlowRow(
modifier = Modifier.fillMaxWidth(), modifier = modifier,
verticalAlignment = Alignment.CenterVertically, maxLines = 1,
horizontalArrangement = Arrangement.SpaceBetween
) { ) {
Snr(snr) Snr(snr)
Spacer(Modifier.width(8.dp))
Rssi(rssi) Rssi(rssi)
Text(text = "${stringResource(R.string.signal)} ${stringResource(quality.nameRes)}") Spacer(Modifier.width(8.dp))
Text(
text = "${stringResource(R.string.signal)} ${stringResource(quality.nameRes)}",
fontSize = MaterialTheme.typography.button.fontSize
)
Spacer(Modifier.width(8.dp))
Icon( Icon(
imageVector = quality.imageVector, imageVector = quality.imageVector,
contentDescription = stringResource(R.string.signal_quality), contentDescription = stringResource(R.string.signal_quality),
@ -129,10 +139,7 @@ private fun Snr(snr: Float) {
} }
Text( Text(
text = "%s %.2fdB".format( text = "%s %.2fdB".format(stringResource(id = R.string.snr), snr),
stringResource(id = R.string.snr),
snr
),
color = color, color = color,
fontSize = MaterialTheme.typography.button.fontSize fontSize = MaterialTheme.typography.button.fontSize
) )
@ -148,10 +155,7 @@ private fun Rssi(rssi: Int) {
Quality.BAD.color Quality.BAD.color
} }
Text( Text(
text = "%s %ddB".format( text = "%s %ddBm".format(stringResource(id = R.string.rssi), rssi),
stringResource(id = R.string.rssi),
rssi
),
color = color, color = color,
fontSize = MaterialTheme.typography.button.fontSize fontSize = MaterialTheme.typography.button.fontSize
) )

Wyświetl plik

@ -15,7 +15,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.geeksville.mesh.ui package com.geeksville.mesh.ui.components
import androidx.compose.material.MaterialTheme import androidx.compose.material.MaterialTheme
import androidx.compose.material.Text import androidx.compose.material.Text
@ -27,7 +27,6 @@ import androidx.compose.ui.tooling.preview.PreviewLightDark
import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.tooling.preview.PreviewParameter
import com.geeksville.mesh.R import com.geeksville.mesh.R
import com.geeksville.mesh.database.entity.NodeEntity import com.geeksville.mesh.database.entity.NodeEntity
import com.geeksville.mesh.ui.components.NodeSignalQuality
import com.geeksville.mesh.ui.preview.NodeEntityPreviewParameterProvider import com.geeksville.mesh.ui.preview.NodeEntityPreviewParameterProvider
import com.geeksville.mesh.ui.theme.AppTheme import com.geeksville.mesh.ui.theme.AppTheme
@ -35,7 +34,7 @@ const val MAX_VALID_SNR = 100F
const val MAX_VALID_RSSI = 0 const val MAX_VALID_RSSI = 0
@Composable @Composable
fun signalInfo( fun SignalInfo(
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
node: NodeEntity, node: NodeEntity,
isThisNode: Boolean isThisNode: Boolean
@ -59,7 +58,7 @@ fun signalInfo(
add("ch:${node.channel}") add("ch:${node.channel}")
} }
if (node.hopsAway != 0) add(hopsString) if (node.hopsAway != 0) add(hopsString)
}.joinToString(" | ") }.joinToString(" ")
} }
if (text.isNotEmpty()) { if (text.isNotEmpty()) {
Text( Text(
@ -81,7 +80,7 @@ fun signalInfo(
@Preview(showBackground = true) @Preview(showBackground = true)
fun SignalInfoSimplePreview() { fun SignalInfoSimplePreview() {
AppTheme { AppTheme {
signalInfo( SignalInfo(
node = NodeEntity( node = NodeEntity(
num = 1, num = 1,
lastHeard = 0, lastHeard = 0,
@ -102,7 +101,7 @@ fun SignalInfoPreview(
node: NodeEntity node: NodeEntity
) { ) {
AppTheme { AppTheme {
signalInfo( SignalInfo(
node = node, node = node,
isThisNode = false isThisNode = false
) )
@ -116,7 +115,7 @@ fun SignalInfoSelfPreview(
node: NodeEntity node: NodeEntity
) { ) {
AppTheme { AppTheme {
signalInfo( SignalInfo(
node = node, node = node,
isThisNode = true isThisNode = true
) )