Preferences: nicer formattings for distances.

This commit is contained in:
Dennis Guse
2022-07-01 17:30:08 +02:00
parent e5785dd3ac
commit be9d56721e
2 changed files with 23 additions and 9 deletions
@@ -16,11 +16,14 @@ public class DistanceFormatter {
private final int decimalCount; private final int decimalCount;
private final double threshold;
private final UnitSystem unitSystem; 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.resources = resources;
this.decimalCount = decimalCount; this.decimalCount = decimalCount;
this.threshold = threshold;
this.unitSystem = unitSystem; this.unitSystem = unitSystem;
assert unitSystem != null; assert unitSystem != null;
} }
@@ -56,19 +59,19 @@ public class DistanceFormatter {
switch (unitSystem) { switch (unitSystem) {
case METRIC: 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)); return new Pair<>(StringUtils.formatDecimal(distance.toKM(), decimalCount), resources.getString(R.string.unit_kilometer));
} else { } else {
return new Pair<>(StringUtils.formatDecimal(distance.toM(), decimalCount), resources.getString(R.string.unit_meter)); return new Pair<>(StringUtils.formatDecimal(distance.toM(), decimalCount), resources.getString(R.string.unit_meter));
} }
case IMPERIAL: 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)); return new Pair<>(StringUtils.formatDecimal(distance.toMI(), decimalCount), resources.getString(R.string.unit_mile));
} else { } else {
return new Pair<>(StringUtils.formatDecimal(distance.toFT(), decimalCount), resources.getString(R.string.unit_feet)); return new Pair<>(StringUtils.formatDecimal(distance.toFT(), decimalCount), resources.getString(R.string.unit_feet));
} }
case NAUTICAL_IMPERIAL: 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)); return new Pair<>(StringUtils.formatDecimal(distance.toNauticalMiles(), decimalCount), resources.getString(R.string.unit_nautical_mile));
} else { } else {
return new Pair<>(StringUtils.formatDecimal(distance.toFT(), decimalCount), resources.getString(R.string.unit_feet)); 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 UnitSystem unitSystem;
private double threshold;
public Builder() { public Builder() {
decimalCount = 2; decimalCount = 2;
threshold = 0.5;
} }
public Builder setDecimalCount(int decimalCount) { public Builder setDecimalCount(int decimalCount) {
@@ -102,8 +108,13 @@ public class DistanceFormatter {
return this; return this;
} }
public Builder setThreshold(double threshold) {
this.threshold = threshold;
return this;
}
public DistanceFormatter build(Resources resource) { public DistanceFormatter build(Resources resource) {
return new DistanceFormatter(resource, decimalCount, unitSystem); return new DistanceFormatter(resource, decimalCount, threshold, unitSystem);
} }
public DistanceFormatter build(Context context) { public DistanceFormatter build(Context context) {
@@ -323,7 +323,7 @@ public class PreferencesUtils {
UnitSystem unitSystem = getUnitSystem(); UnitSystem unitSystem = getUnitSystem();
DistanceFormatter formatter = DistanceFormatter.Builder() DistanceFormatter formatter = DistanceFormatter.Builder()
.setDecimalCount(1) .setDecimalCount(0)
.setUnit(unitSystem) .setUnit(unitSystem)
.build(resources); .build(resources);
for (int i = 0; i < values.length; i++) { for (int i = 0; i < values.length; i++) {
@@ -417,7 +417,8 @@ public class PreferencesUtils {
DistanceFormatter formatter = DistanceFormatter.Builder() DistanceFormatter formatter = DistanceFormatter.Builder()
.setUnit(unitSystem) .setUnit(unitSystem)
.setDecimalCount(1) .setDecimalCount(0)
.setThreshold(Double.MAX_VALUE)
.build(resources); .build(resources);
for (int i = 0; i < entryValues.length; i++) { for (int i = 0; i < entryValues.length; i++) {
int value = Integer.parseInt(entryValues[i]); int value = Integer.parseInt(entryValues[i]);
@@ -461,7 +462,8 @@ public class PreferencesUtils {
UnitSystem unitSystem = getUnitSystem(); UnitSystem unitSystem = getUnitSystem();
DistanceFormatter formatter = DistanceFormatter.Builder() DistanceFormatter formatter = DistanceFormatter.Builder()
.setDecimalCount(1) .setDecimalCount(0)
.setThreshold(Double.MAX_VALUE)
.setUnit(unitSystem) .setUnit(unitSystem)
.build(resources); .build(resources);
for (int i = 0; i < entryValues.length; i++) { for (int i = 0; i < entryValues.length; i++) {
@@ -534,7 +536,8 @@ public class PreferencesUtils {
UnitSystem unitSystem = getUnitSystem(); UnitSystem unitSystem = getUnitSystem();
DistanceFormatter formatter = DistanceFormatter.Builder() DistanceFormatter formatter = DistanceFormatter.Builder()
.setDecimalCount(1) .setDecimalCount(0)
.setThreshold(Double.MAX_VALUE)
.setUnit(unitSystem) .setUnit(unitSystem)
.build(resources); .build(resources);