refactor: split MetricsViewModel state updates

- Consolidates `MetricViewModel` back to a single state flow
- Introduces a `MutableStateFlow` for state updates, allowing more independent control
- Moves `Telemetry`, `MeshPacket`, and config updates into separate coroutines
This commit is contained in:
andrekir 2024-11-02 09:34:30 -03:00 committed by Andre K
parent dcd5ca1c8e
commit 26f210047d
4 changed files with 75 additions and 62 deletions

View file

@ -83,7 +83,7 @@ fun EnvironmentMetricsScreen(
return (celsius * 1.8F) + 32
}
val processedTelemetries: List<Telemetry> = if (state.environmentDisplayFahrenheit) {
val processedTelemetries: List<Telemetry> = if (state.isFahrenheit) {
state.environmentMetrics.map { telemetry ->
val temperatureFahrenheit =
celsiusToFahrenheit(telemetry.environmentMetrics.temperature)
@ -124,7 +124,7 @@ fun EnvironmentMetricsScreen(
items(processedTelemetries) { telemetry ->
EnvironmentMetricsCard(
telemetry,
state.environmentDisplayFahrenheit
state.isFahrenheit
)
}
}

View file

@ -53,7 +53,7 @@ fun TracerouteLogScreen(
viewModel: MetricsViewModel = hiltViewModel(),
modifier: Modifier = Modifier,
) {
val state by viewModel.tracerouteState.collectAsStateWithLifecycle()
val state by viewModel.state.collectAsStateWithLifecycle()
val dateFormat = remember {
DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM)
}
@ -80,9 +80,9 @@ fun TracerouteLogScreen(
modifier = modifier.fillMaxSize(),
contentPadding = PaddingValues(horizontal = 16.dp),
) {
items(state.requests, key = { it.uuid }) { log ->
val result = remember(state.requests) {
state.results.find { it.decoded.requestId == log.fromRadio.packet.id }
items(state.tracerouteRequests, key = { it.uuid }) { log ->
val result = remember(state.tracerouteRequests) {
state.tracerouteResults.find { it.decoded.requestId == log.fromRadio.packet.id }
}
val route = remember(result) { result?.fullRouteDiscovery }