mirror of
https://github.com/meshtastic/Meshtastic-Android.git
synced 2026-04-20 22:23:37 +00:00
Fix/2207 node details respects units (#2374)
This commit is contained in:
parent
43503cd0ce
commit
a832ed50c5
5 changed files with 24 additions and 12 deletions
|
|
@ -289,6 +289,7 @@ class MetricsViewModel @Inject constructor(
|
|||
state.copy(
|
||||
isManaged = profile.config.security.isManaged,
|
||||
isFahrenheit = moduleConfig.telemetry.environmentDisplayFahrenheit,
|
||||
displayUnits = profile.config.display.units
|
||||
)
|
||||
}
|
||||
}.launchIn(viewModelScope)
|
||||
|
|
|
|||
|
|
@ -89,11 +89,9 @@ data class Node(
|
|||
else -> latLongToMeter(latitude, longitude, o.latitude, o.longitude).toInt()
|
||||
}
|
||||
|
||||
// @return a nice human readable string for the distance, or null for unknown
|
||||
fun distanceStr(o: Node, displayUnits: Int = 0): String? = distance(o)?.let { dist ->
|
||||
val system = DisplayConfig.DisplayUnits.forNumber(displayUnits)
|
||||
return if (dist > 0) dist.toDistanceString(system) else null
|
||||
}
|
||||
// @return formatted distance string to another node, using the given display units
|
||||
fun distanceStr(o: Node, displayUnits: DisplayConfig.DisplayUnits): String? =
|
||||
distance(o)?.toDistanceString(displayUnits)
|
||||
|
||||
// @return bearing to the other position in degrees
|
||||
fun bearing(o: Node?): Int? = when {
|
||||
|
|
|
|||
|
|
@ -308,7 +308,7 @@ fun MapView(
|
|||
val nodesWithPosition = nodes.filter { it.validPosition != null }
|
||||
val ourNode = model.ourNodeInfo.value
|
||||
val gpsFormat = model.config.display.gpsFormat.number
|
||||
val displayUnits = model.config.display.units.number
|
||||
val displayUnits = model.config.display.units
|
||||
val mapFilterState = model.mapFilterStateFlow.value // Access mapFilterState directly
|
||||
return nodesWithPosition.mapNotNull { node ->
|
||||
if (mapFilterState.onlyFavorites && !node.isFavorite && !node.equals(ourNode)) {
|
||||
|
|
|
|||
|
|
@ -145,6 +145,7 @@ import com.geeksville.mesh.util.formatAgo
|
|||
import com.geeksville.mesh.util.formatUptime
|
||||
import com.geeksville.mesh.util.thenIf
|
||||
import com.geeksville.mesh.util.toDistanceString
|
||||
import com.geeksville.mesh.util.toSmallDistanceString
|
||||
import com.geeksville.mesh.util.toSpeedString
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlin.time.Duration.Companion.milliseconds
|
||||
|
|
@ -294,7 +295,7 @@ private fun NodeDetailList(
|
|||
|
||||
if (node.hasEnvironmentMetrics) {
|
||||
PreferenceCategory(stringResource(R.string.environment))
|
||||
EnvironmentMetrics(node, metricsState.isFahrenheit)
|
||||
EnvironmentMetrics(node, metricsState.isFahrenheit, metricsState.displayUnits)
|
||||
Spacer(modifier = Modifier.height(8.dp))
|
||||
}
|
||||
|
||||
|
|
@ -732,6 +733,7 @@ private fun InfoCard(
|
|||
private fun EnvironmentMetrics(
|
||||
node: Node,
|
||||
isFahrenheit: Boolean = false,
|
||||
displayUnits: DisplayUnits,
|
||||
) = with(node.environmentMetrics) {
|
||||
FlowRow(
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
|
|
@ -799,7 +801,7 @@ private fun EnvironmentMetrics(
|
|||
InfoCard(
|
||||
icon = Icons.Default.Height,
|
||||
text = stringResource(R.string.distance),
|
||||
value = "%.0f mm".format(distance)
|
||||
value = distance.toSmallDistanceString(displayUnits)
|
||||
)
|
||||
}
|
||||
if (hasLux()) {
|
||||
|
|
@ -815,7 +817,7 @@ private fun EnvironmentMetrics(
|
|||
InfoCard(
|
||||
icon = Icons.Outlined.Navigation,
|
||||
text = stringResource(R.string.wind),
|
||||
value = windSpeed.toSpeedString(),
|
||||
value = windSpeed.toSpeedString(displayUnits),
|
||||
rotateIcon = normalizedBearing.toFloat(),
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -91,7 +91,18 @@ fun Int.toDistanceString(system: DisplayUnits): String {
|
|||
}
|
||||
|
||||
@Suppress("MagicNumber")
|
||||
fun Float.toSpeedString() = when (DistanceUnit.getFromLocale()) {
|
||||
DisplayUnits.METRIC -> "%.0f km/h".format(this * 3.6)
|
||||
else -> "%.0f mph".format(this * 2.23694f)
|
||||
fun Float.toSpeedString(system: DisplayUnits): String =
|
||||
if (system == DisplayUnits.METRIC) {
|
||||
"%.0f km/h".format(this * 3.6)
|
||||
} else {
|
||||
"%.0f mph".format(this * 2.23694f)
|
||||
}
|
||||
|
||||
@Suppress("MagicNumber")
|
||||
fun Float.toSmallDistanceString(system: DisplayUnits): String {
|
||||
return if (system == DisplayUnits.IMPERIAL) {
|
||||
"%.2f in".format(this / 25.4f)
|
||||
} else {
|
||||
"%.0f mm".format(this)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue