From eda489e42853e14dd15aafcec53837a16d2faaeb Mon Sep 17 00:00:00 2001 From: y20k Date: Mon, 14 May 2018 17:43:34 +0200 Subject: [PATCH] Trackbook now displays kilometer (or miles) if a distance is longer than 1 km (or 1 mi). Plus: added a unit-switch for Great Britain (see #12) --- .../trackbook/MainActivityTrackFragment.java | 2 +- .../trackbook/helpers/LengthUnitHelper.java | 45 +++++++++++++++---- build.gradle | 2 +- 3 files changed, 38 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/org/y20k/trackbook/MainActivityTrackFragment.java b/app/src/main/java/org/y20k/trackbook/MainActivityTrackFragment.java index f54dd9d..70f3fb1 100755 --- a/app/src/main/java/org/y20k/trackbook/MainActivityTrackFragment.java +++ b/app/src/main/java/org/y20k/trackbook/MainActivityTrackFragment.java @@ -253,7 +253,7 @@ public class MainActivityTrackFragment extends Fragment implements AdapterView.O attachTapListenerToStatisticHeaderViews(); // attach listener for taps on statistics - for US and other states plagued by Imperial units - if (LengthUnitHelper.getUnitSystem() == IMPERIAL) { + if (LengthUnitHelper.getUnitSystem() == IMPERIAL || Locale.getDefault().getCountry().equals("GB")) { attachTapListenerToStatisticsSheet(); } diff --git a/app/src/main/java/org/y20k/trackbook/helpers/LengthUnitHelper.java b/app/src/main/java/org/y20k/trackbook/helpers/LengthUnitHelper.java index b02bff8..36e834c 100644 --- a/app/src/main/java/org/y20k/trackbook/helpers/LengthUnitHelper.java +++ b/app/src/main/java/org/y20k/trackbook/helpers/LengthUnitHelper.java @@ -36,20 +36,47 @@ public final class LengthUnitHelper implements TrackbookKeys { /* Converts for the given uni System a distance value to a readable string */ public static String convertDistanceToString(double distance, int unitSystem) { - // check for locale and set unit system accordingly String unit; + NumberFormat numberFormat = NumberFormat.getNumberInstance(); + + // check for locale and set unit system accordingly if (unitSystem == IMPERIAL) { - // convert distance to feet - distance = distance * 3.28084f; - // set measurement unit - unit = "ft"; + // miles and feet + if (distance > 1610) { + // convert distance to miles + distance = distance * 0.000621371192; + // set measurement unit + unit = "mi"; + // set number precision + numberFormat.setMaximumFractionDigits(2); + } else { + // convert distance to feet + distance = distance * 3.28084f; + // set measurement unit + unit = "ft"; + // set number precision + numberFormat.setMaximumFractionDigits(0); + } + + } else { - // set measurement unit - unit = "m"; + // kilometer and meter + if (distance >= 1000) { + // convert distance to kilometer + distance = distance * 0.001f; + // set measurement unit + unit = "km"; + // set number precision + numberFormat.setMaximumFractionDigits(2); + } else { + // set measurement unit + unit = "m"; + // set number precision + numberFormat.setMaximumFractionDigits(0); + } + } // format distance according to current locale - NumberFormat numberFormat = NumberFormat.getNumberInstance(); - numberFormat.setMaximumFractionDigits(0); return numberFormat.format(distance) + " " + unit; } diff --git a/build.gradle b/build.gradle index bb17ccb..8ea4786 100644 --- a/build.gradle +++ b/build.gradle @@ -30,7 +30,7 @@ allprojects { constraintLayoutVersion = '1.1.0-beta5' osmdroidVersion = '6.0.1' - gsonVersion = '2.8.2' + gsonVersion = '2.8.4' } }