From be9d56721e499bc52e3c898746438c7409bc77e6 Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Fri, 1 Jul 2022 17:30:08 +0200 Subject: [PATCH] Preferences: nicer formattings for distances. --- .../data/models/DistanceFormatter.java | 21 ++++++++++++++----- .../opentracks/settings/PreferencesUtils.java | 11 ++++++---- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/main/java/de/dennisguse/opentracks/data/models/DistanceFormatter.java b/src/main/java/de/dennisguse/opentracks/data/models/DistanceFormatter.java index 696a1fbca..52dd301a8 100644 --- a/src/main/java/de/dennisguse/opentracks/data/models/DistanceFormatter.java +++ b/src/main/java/de/dennisguse/opentracks/data/models/DistanceFormatter.java @@ -16,11 +16,14 @@ public class DistanceFormatter { private final int decimalCount; + private final double threshold; + private final UnitSystem unitSystem; - private DistanceFormatter(Resources resources, int decimalCount, UnitSystem unitSystem) { + private DistanceFormatter(Resources resources, int decimalCount, double threshold, UnitSystem unitSystem) { this.resources = resources; this.decimalCount = decimalCount; + this.threshold = threshold; this.unitSystem = unitSystem; assert unitSystem != null; } @@ -56,19 +59,19 @@ public class DistanceFormatter { switch (unitSystem) { case METRIC: - if (distance.greaterThan(Distance.of(500))) { + if (distance.greaterThan(Distance.ofKilometer(threshold))) { return new Pair<>(StringUtils.formatDecimal(distance.toKM(), decimalCount), resources.getString(R.string.unit_kilometer)); } else { return new Pair<>(StringUtils.formatDecimal(distance.toM(), decimalCount), resources.getString(R.string.unit_meter)); } case IMPERIAL: - if (distance.greaterThan(Distance.ofMile(0.5))) { + if (distance.greaterThan(Distance.ofMile(threshold))) { return new Pair<>(StringUtils.formatDecimal(distance.toMI(), decimalCount), resources.getString(R.string.unit_mile)); } else { return new Pair<>(StringUtils.formatDecimal(distance.toFT(), decimalCount), resources.getString(R.string.unit_feet)); } case NAUTICAL_IMPERIAL: - if (distance.greaterThan(Distance.ofNauticalMile(0.5))) { + if (distance.greaterThan(Distance.ofNauticalMile(threshold))) { return new Pair<>(StringUtils.formatDecimal(distance.toNauticalMiles(), decimalCount), resources.getString(R.string.unit_nautical_mile)); } else { return new Pair<>(StringUtils.formatDecimal(distance.toFT(), decimalCount), resources.getString(R.string.unit_feet)); @@ -88,8 +91,11 @@ public class DistanceFormatter { private UnitSystem unitSystem; + private double threshold; + public Builder() { decimalCount = 2; + threshold = 0.5; } public Builder setDecimalCount(int decimalCount) { @@ -102,8 +108,13 @@ public class DistanceFormatter { return this; } + public Builder setThreshold(double threshold) { + this.threshold = threshold; + return this; + } + public DistanceFormatter build(Resources resource) { - return new DistanceFormatter(resource, decimalCount, unitSystem); + return new DistanceFormatter(resource, decimalCount, threshold, unitSystem); } public DistanceFormatter build(Context context) { diff --git a/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java b/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java index 00088041e..a9f7d6ca6 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java +++ b/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java @@ -323,7 +323,7 @@ public class PreferencesUtils { UnitSystem unitSystem = getUnitSystem(); DistanceFormatter formatter = DistanceFormatter.Builder() - .setDecimalCount(1) + .setDecimalCount(0) .setUnit(unitSystem) .build(resources); for (int i = 0; i < values.length; i++) { @@ -417,7 +417,8 @@ public class PreferencesUtils { DistanceFormatter formatter = DistanceFormatter.Builder() .setUnit(unitSystem) - .setDecimalCount(1) + .setDecimalCount(0) + .setThreshold(Double.MAX_VALUE) .build(resources); for (int i = 0; i < entryValues.length; i++) { int value = Integer.parseInt(entryValues[i]); @@ -461,7 +462,8 @@ public class PreferencesUtils { UnitSystem unitSystem = getUnitSystem(); DistanceFormatter formatter = DistanceFormatter.Builder() - .setDecimalCount(1) + .setDecimalCount(0) + .setThreshold(Double.MAX_VALUE) .setUnit(unitSystem) .build(resources); for (int i = 0; i < entryValues.length; i++) { @@ -534,7 +536,8 @@ public class PreferencesUtils { UnitSystem unitSystem = getUnitSystem(); DistanceFormatter formatter = DistanceFormatter.Builder() - .setDecimalCount(1) + .setDecimalCount(0) + .setThreshold(Double.MAX_VALUE) .setUnit(unitSystem) .build(resources);