diff --git a/core/ui/src/main/kotlin/org/meshtastic/core/ui/icon/Status.kt b/core/ui/src/main/kotlin/org/meshtastic/core/ui/icon/Status.kt index 525bb2ef7..efa5999e9 100644 --- a/core/ui/src/main/kotlin/org/meshtastic/core/ui/icon/Status.kt +++ b/core/ui/src/main/kotlin/org/meshtastic/core/ui/icon/Status.kt @@ -36,6 +36,7 @@ import androidx.compose.material.icons.twotone.Cloud import androidx.compose.material.icons.twotone.CloudDone import androidx.compose.material.icons.twotone.CloudOff import androidx.compose.material.icons.twotone.CloudSync +import androidx.compose.material.icons.twotone.HowToReg import androidx.compose.ui.graphics.vector.ImageVector val MeshtasticIcons.Favorite: ImageVector @@ -80,3 +81,6 @@ val MeshtasticIcons.VolumeMuteTwoTone: ImageVector val MeshtasticIcons.CheckCircle: ImageVector get() = Icons.Rounded.CheckCircleOutline + +val MeshtasticIcons.Acknowledged: ImageVector + get() = Icons.TwoTone.HowToReg diff --git a/feature/messaging/src/main/kotlin/org/meshtastic/feature/messaging/component/MessageItem.kt b/feature/messaging/src/main/kotlin/org/meshtastic/feature/messaging/component/MessageItem.kt index d9d0323a3..ab9486c7a 100644 --- a/feature/messaging/src/main/kotlin/org/meshtastic/feature/messaging/component/MessageItem.kt +++ b/feature/messaging/src/main/kotlin/org/meshtastic/feature/messaging/component/MessageItem.kt @@ -77,6 +77,7 @@ import org.meshtastic.core.ui.component.Rssi import org.meshtastic.core.ui.component.Snr import org.meshtastic.core.ui.component.preview.NodePreviewParameterProvider import org.meshtastic.core.ui.emoji.EmojiPicker +import org.meshtastic.core.ui.icon.Acknowledged import org.meshtastic.core.ui.icon.Cloud import org.meshtastic.core.ui.icon.CloudDone import org.meshtastic.core.ui.icon.CloudOffTwoTone @@ -370,7 +371,7 @@ private enum class ActiveSheet { fun MessageStatusIcon(status: MessageStatus, modifier: Modifier = Modifier) { val icon = when (status) { - MessageStatus.RECEIVED -> MeshtasticIcons.CloudDone + MessageStatus.RECEIVED -> MeshtasticIcons.Acknowledged MessageStatus.QUEUED -> MeshtasticIcons.CloudSync MessageStatus.DELIVERED -> MeshtasticIcons.CloudDone MessageStatus.SFPP_ROUTING -> MeshtasticIcons.CloudSync diff --git a/feature/node/src/main/kotlin/org/meshtastic/feature/node/metrics/PowerMetrics.kt b/feature/node/src/main/kotlin/org/meshtastic/feature/node/metrics/PowerMetrics.kt index 1c816ebf3..b73c0b68c 100644 --- a/feature/node/src/main/kotlin/org/meshtastic/feature/node/metrics/PowerMetrics.kt +++ b/feature/node/src/main/kotlin/org/meshtastic/feature/node/metrics/PowerMetrics.kt @@ -37,7 +37,9 @@ import androidx.compose.material.icons.Icons import androidx.compose.material.icons.rounded.Refresh import androidx.compose.material3.Card import androidx.compose.material3.CardDefaults +import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi +import androidx.compose.material3.FilterChip import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold @@ -116,6 +118,7 @@ private val LEGEND_DATA = ), ) +@OptIn(ExperimentalMaterial3Api::class) @Suppress("LongMethod") @Composable fun PowerMetricsScreen(viewModel: MetricsViewModel = hiltViewModel(), onNavigateUp: () -> Unit) { @@ -165,6 +168,19 @@ fun PowerMetricsScreen(viewModel: MetricsViewModel = hiltViewModel(), onNavigate snackbarHost = { SnackbarHost(snackbarHostState) }, ) { innerPadding -> Column(modifier = Modifier.padding(innerPadding)) { + Row( + modifier = Modifier.fillMaxWidth().padding(horizontal = 16.dp), + horizontalArrangement = Arrangement.spacedBy(8.dp), + ) { + PowerChannel.entries.forEach { channel -> + FilterChip( + selected = selectedChannel == channel, + onClick = { selectedChannel = channel }, + label = { Text(stringResource(channel.strRes)) }, + ) + } + } + PowerMetricsChart( modifier = Modifier.fillMaxWidth().fillMaxHeight(fraction = 0.33f), telemetries = data.reversed(),