Package-level declarations

Types

Link copied to clipboard

Utility object for chart styling and component creation. Provides reusable styled lines, points, and axes for Vico charts.

Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
data class EnvironmentGraphingData(val metrics: List<Telemetry>, val shouldPlot: List<Boolean>, val leftMinMax: Pair<Float, Float> = Pair(0f, 0f), val rightMinMax: Pair<Float, Float> = Pair(0f, 0f), val times: Pair<Int, Int> = Pair(0, 0))
Link copied to clipboard
data class EnvironmentMetricsState(val environmentMetrics: List<Telemetry> = emptyList())
Link copied to clipboard
data class InfoDialogData(val titleRes: StringResource, val definitionRes: StringResource, val color: Color)
Link copied to clipboard
data class LegendData(val nameRes: StringResource, val color: Color, val isLine: Boolean = false, val metricKey: Any? = null, val labelOverride: String? = null)
Link copied to clipboard
open class MetricsViewModel(val destNum: Int, dispatchers: CoroutineDispatchers, meshLogRepository: MeshLogRepository, serviceRepository: ServiceRepository, nodeRepository: NodeRepository, tracerouteSnapshotRepository: TracerouteSnapshotRepository, nodeRequestActions: NodeRequestActions, alertManager: AlertManager, getNodeDetailsUseCase: GetNodeDetailsUseCase, fileService: FileService) : ViewModel

ViewModel responsible for managing and graphing metrics (telemetry, signal strength, paxcount) for a specific node.

Properties

Link copied to clipboard
const val BYTES_IN_GB: Double
Link copied to clipboard
const val BYTES_IN_KB: Double = 1024.0
Link copied to clipboard
const val BYTES_IN_MB: Double

Functions

Link copied to clipboard
fun AdaptiveMetricLayout(chartPart: @Composable (Modifier) -> Unit, listPart: @Composable (Modifier) -> Unit, modifier: Modifier = Modifier, isChartExpanded: Boolean = false)

An adaptive layout for metric screens. Uses a split Row for wide screens (tablets/landscape) and a stacked Column for narrow screens (phones). When isChartExpanded is true, the card list is hidden and the chart fills the available space.

Link copied to clipboard
fun <T> BaseMetricScreen(onNavigateUp: () -> Unit, telemetryType: TelemetryType?, titleRes: StringResource, nodeName: String, data: List<T>, timeProvider: (T) -> Double, infoData: List<InfoDialogData> = emptyList(), onRequestTelemetry: () -> Unit? = null, onExportCsv: () -> Unit? = null, extraActions: @Composable () -> Unit = {}, chartPart: @Composable (Modifier, Double?, VicoScrollState, (Double) -> Unit) -> Unit, listPart: @Composable (Modifier, Double?, LazyListState, (Double) -> Unit) -> Unit, controlPart: @Composable () -> Unit = {})

A high-level template for metric screens that handles the Scaffold, AppBar, adaptive layout, and chart-to-list synchronisation.

Link copied to clipboard
fun DeleteItem(onClick: () -> Unit)
Link copied to clipboard
fun DeviceMetricsScreen(viewModel: MetricsViewModel, onNavigateUp: () -> Unit)
Link copied to clipboard
fun EnvironmentMetricsChart(modifier: Modifier = Modifier, telemetries: List<Telemetry>, graphData: EnvironmentGraphingData, vicoScrollState: VicoScrollState, selectedX: Double?, onPointSelected: (Double) -> Unit)
Link copied to clipboard
fun EnvironmentMetricsScreen(viewModel: MetricsViewModel, onNavigateUp: () -> Unit)
Link copied to clipboard
fun formatBytes(bytes: Long, decimalPlaces: Int = 2): String
Link copied to clipboard
fun GenericMetricChart(modelProducer: CartesianChartModelProducer, layers: List<LineCartesianLayer>, modifier: Modifier = Modifier, startAxis: VerticalAxis<Axis.Position.Vertical.Start>? = null, endAxis: VerticalAxis<Axis.Position.Vertical.End>? = null, bottomAxis: HorizontalAxis<Axis.Position.Horizontal.Bottom>? = null, marker: CartesianMarker? = null, decorations: List<Decoration> = emptyList(), selectedX: Double? = null, onPointSelected: (Double) -> Unit? = null, vicoScrollState: VicoScrollState = rememberVicoScrollState())

A generic chart host for Meshtastic metric charts. Handles common boilerplate for markers, scrolling, and point selection synchronization.

Link copied to clipboard
fun HostMetricsLogScreen(viewModel: MetricsViewModel, onNavigateUp: () -> Unit)

Full-screen host metrics log with chart and card list, built on BaseMetricScreen. Shows load averages and free memory over time with time-frame filtering, chart expand/collapse, and card-to-chart synchronisation.

Link copied to clipboard
fun Legend(legendData: List<LegendData>, modifier: Modifier = Modifier, hiddenSet: Set<Int> = emptySet(), onToggle: (Int) -> Unit? = null)

Creates the legend that identifies the colors used for the graph.

Link copied to clipboard
fun LegendIndicator(color: Color, isLine: Boolean = false)

Draws a small colored line segment or circle to identify a chart series.

Link copied to clipboard
fun LegendInfoDialog(infoData: List<InfoDialogData>, onDismiss: () -> Unit)

Displays a dialog with information about the legend items.

Link copied to clipboard
fun LogLine(modifier: Modifier = Modifier, label: String, value: String)
Link copied to clipboard
fun MetricChartScaffold(isEmpty: Boolean, legendData: List<LegendData>, modifier: Modifier = Modifier, hiddenSet: Set<Int> = emptySet(), onToggle: (Int) -> Unit? = null, content: @Composable ColumnScope.(CartesianChartModelProducer, Modifier) -> Unit)

Common scaffold for all metric chart composables. Provides:

Link copied to clipboard
fun MetricIndicator(color: Color, modifier: Modifier = Modifier)
Link copied to clipboard
fun MetricLogItem(icon: ImageVector, text: String, contentDescription: String, modifier: Modifier = Modifier)

Shared metric log/list UI components used by TracerouteLog, NeighborInfoLog, HostMetricsLog, and PositionLog.

Link copied to clipboard
fun MetricValueRow(color: Color, text: String, modifier: Modifier = Modifier)

A compact row displaying a colored MetricIndicator dot/line followed by a text value.

Link copied to clipboard
fun NeighborInfoLogScreen(modifier: Modifier = Modifier, viewModel: MetricsViewModel, onNavigateUp: () -> Unit)
Link copied to clipboard
fun PaxcountInfo(pax: String, modifier: Modifier = Modifier, contentColor: Color = MaterialTheme.colorScheme.onSurface)
Link copied to clipboard
fun PaxMetricsItem(log: MeshLog, pax: Paxcount, isSelected: Boolean, onClick: () -> Unit)
Link copied to clipboard
fun PaxMetricsScreen(metricsViewModel: MetricsViewModel, onNavigateUp: () -> Unit)
Link copied to clipboard
fun PositionCard(position: Position, displayUnits: Config.DisplayConfig.DisplayUnits, isSelected: Boolean, onClick: () -> Unit)

A SelectableMetricCard-based position item that matches the visual style of DeviceMetricsCard, SignalMetricsCard, and other metric cards. Replaces the previous table-row layout with a card that shows timestamp, coordinates, satellites, altitude, speed, and heading.

Link copied to clipboard
fun PositionLogScreen(viewModel: MetricsViewModel, onNavigateUp: () -> Unit)
Link copied to clipboard
fun PowerMetricsScreen(viewModel: MetricsViewModel, onNavigateUp: () -> Unit)
Link copied to clipboard
fun rememberConditionalLayer(hasData: Boolean, lineProvider: LineCartesianLayer.LineProvider, verticalAxisPosition: Axis.Position.Vertical, rangeProvider: CartesianLayerRangeProvider? = null): LineCartesianLayer?

Creates a LineCartesianLayer only when hasData is true, returning null otherwise.

Link copied to clipboard
fun HardwareModel.safeNumber(fallbackValue: Int = -1): Int

Safely extracts the hardware model number from a HardwareModel enum.

Link copied to clipboard
fun SelectableMetricCard(isSelected: Boolean, onClick: () -> Unit, modifier: Modifier = Modifier, content: @Composable () -> Unit)

A selectable Card for metric log items. Provides consistent selection styling (primary border + primaryContainer background) and text selection support across all metric screens.

Link copied to clipboard
fun SignalMetricsScreen(viewModel: MetricsViewModel, onNavigateUp: () -> Unit)
Link copied to clipboard
fun TimeFrameSelector(selectedTimeFrame: TimeFrame, availableTimeFrames: List<TimeFrame>, onTimeFrameSelected: (TimeFrame) -> Unit, modifier: Modifier = Modifier)
Link copied to clipboard
fun TracerouteLogScreen(modifier: Modifier = Modifier, viewModel: MetricsViewModel, onNavigateUp: () -> Unit, onViewOnMap: (requestId: Int, responseLogUuid: String) -> Unit = { _, _ -> })

Full-screen traceroute log with chart and card list, built on BaseMetricScreen. Shows forward/return hops and round-trip duration over time. Supports time-frame filtering, chart expand/collapse, and card-to-chart synchronisation.

Link copied to clipboard
fun TracerouteMapScreen(metricsViewModel: MetricsViewModel, requestId: Int, logUuid: String? = null, onNavigateUp: () -> Unit)