From 37762f300b35195bdac6d9c69c2a41345b1a92cf Mon Sep 17 00:00:00 2001 From: Jonathan Bennett Date: Thu, 6 Jul 2023 16:26:38 -0500 Subject: [PATCH] feat: Add option for Miles and Feet for distance (#651) --- app/src/main/java/com/geeksville/mesh/NodeInfo.kt | 9 ++++++--- .../main/java/com/geeksville/mesh/ui/UsersFragment.kt | 2 +- .../main/java/com/geeksville/mesh/ui/map/MapFragment.kt | 2 +- app/src/test/java/com/geeksville/mesh/NodeInfoTest.kt | 4 ++-- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/geeksville/mesh/NodeInfo.kt b/app/src/main/java/com/geeksville/mesh/NodeInfo.kt index 96e230765..1c752fbfd 100644 --- a/app/src/main/java/com/geeksville/mesh/NodeInfo.kt +++ b/app/src/main/java/com/geeksville/mesh/NodeInfo.kt @@ -218,11 +218,14 @@ data class NodeInfo( } /// @return a nice human readable string for the distance, or null for unknown - fun distanceStr(o: NodeInfo?) = distance(o)?.let { dist -> + fun distanceStr(o: NodeInfo?, prefUnits: Int = 0) = distance(o)?.let { dist -> when { dist == 0 -> null // same point - dist < 1000 -> "%.0f m".format(dist.toDouble()) - else -> "%.1f km".format(dist / 1000.0) + prefUnits == ConfigProtos.Config.DisplayConfig.DisplayUnits.METRIC_VALUE && dist < 1000 -> "%.0f m".format(dist.toDouble()) + prefUnits == ConfigProtos.Config.DisplayConfig.DisplayUnits.METRIC_VALUE && dist >= 1000 -> "%.1f km".format(dist / 1000.0) + prefUnits == ConfigProtos.Config.DisplayConfig.DisplayUnits.IMPERIAL_VALUE && dist < 1609 -> "%.0f ft".format(dist.toDouble()*3.281) + prefUnits == ConfigProtos.Config.DisplayConfig.DisplayUnits.IMPERIAL_VALUE && dist >= 1609 -> "%.1f mi".format(dist / 1609.34) + else -> null } } } diff --git a/app/src/main/java/com/geeksville/mesh/ui/UsersFragment.kt b/app/src/main/java/com/geeksville/mesh/ui/UsersFragment.kt index 5672896be..18bdb69f4 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/UsersFragment.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/UsersFragment.kt @@ -194,7 +194,7 @@ class UsersFragment : ScreenFragment("Users"), Logging { } val ourNodeInfo = model.ourNodeInfo.value - val distance = ourNodeInfo?.distanceStr(n) + val distance = ourNodeInfo?.distanceStr(n, model.config.display.units.number) if (distance != null) { holder.distanceView.text = distance holder.distanceView.visibility = View.VISIBLE diff --git a/app/src/main/java/com/geeksville/mesh/ui/map/MapFragment.kt b/app/src/main/java/com/geeksville/mesh/ui/map/MapFragment.kt index f322a3625..2da68ce52 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/map/MapFragment.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/map/MapFragment.kt @@ -152,7 +152,7 @@ fun MapView(model: UIViewModel = viewModel()) { MarkerWithLabel(map, "${u.longName} ${formatAgo(p.time)}").apply { title = "${u.longName} ${node.batteryStr}" snippet = model.gpsString(p) - ourNode?.distanceStr(node)?.let { dist -> + ourNode?.distanceStr(node, model.config.display.units.number)?.let { dist -> val string = context.getString(R.string.map_subDescription) subDescription = string.format(ourNode.bearing(node), dist) } diff --git a/app/src/test/java/com/geeksville/mesh/NodeInfoTest.kt b/app/src/test/java/com/geeksville/mesh/NodeInfoTest.kt index a78b9d4d8..58264ba50 100644 --- a/app/src/test/java/com/geeksville/mesh/NodeInfoTest.kt +++ b/app/src/test/java/com/geeksville/mesh/NodeInfoTest.kt @@ -34,7 +34,7 @@ class NodeInfoTest { @Test fun distanceStrGood() { - Assert.assertEquals(ni1.distanceStr(ni2), "1.1 km") - Assert.assertEquals(ni1.distanceStr(ni3), "111 m") + Assert.assertEquals(ni1.distanceStr(ni2, ConfigProtos.Config.DisplayConfig.DisplayUnits.METRIC_VALUE), "1.1 km") + Assert.assertEquals(ni1.distanceStr(ni3, ConfigProtos.Config.DisplayConfig.DisplayUnits.METRIC_VALUE), "111 m") } }