From f2ac1edc4bdcf38c6421c55eb99a53a3aca589df Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Sat, 23 Apr 2022 16:02:15 +0200 Subject: [PATCH] Create DistanceFormatter. Fixes #1197 --- .../data/models/DistanceFormatterTest.java | 33 ++++++++ .../opentracks/util/StringUtilsTest.java | 16 ---- .../opentracks/TrackListActivity.java | 3 +- .../data/models/DistanceFormatter.java | 82 +++++++++++++++++++ .../fragments/StatisticsRecordedFragment.java | 3 +- ...ckRecordingServiceNotificationManager.java | 7 +- .../AnnouncementsSettingsFragment.java | 2 +- .../settings/GpsSettingsFragment.java | 12 ++- .../opentracks/settings/PreferencesUtils.java | 52 +++++++----- .../AggregatedStatisticsAdapter.java | 3 +- .../intervals/IntervalStatisticsAdapter.java | 3 +- .../ui/intervals/IntervalsFragment.java | 12 ++- .../opentracks/util/StringUtils.java | 53 ------------ .../viewmodels/StatisticDataBuilder.java | 3 +- src/main/res/values-ar/strings.xml | 4 - src/main/res/values-b+en+001/strings.xml | 4 - src/main/res/values-b+es+419/strings.xml | 4 - src/main/res/values-bg/strings.xml | 4 - src/main/res/values-ca/strings.xml | 4 - src/main/res/values-cs/strings.xml | 4 - src/main/res/values-da/strings.xml | 4 - src/main/res/values-de/strings.xml | 4 - src/main/res/values-el/strings.xml | 4 - src/main/res/values-es/strings.xml | 4 - src/main/res/values-et/strings.xml | 4 - src/main/res/values-eu/strings.xml | 4 - src/main/res/values-fa/strings.xml | 4 - src/main/res/values-fi/strings.xml | 4 - src/main/res/values-fr-rCA/strings.xml | 4 - src/main/res/values-fr-rCH/strings.xml | 4 - src/main/res/values-fr/strings.xml | 4 - src/main/res/values-gl/strings.xml | 4 - src/main/res/values-hi/strings.xml | 4 - src/main/res/values-hr/strings.xml | 4 - src/main/res/values-hu/strings.xml | 4 - src/main/res/values-in/strings.xml | 4 - src/main/res/values-it/strings.xml | 4 - src/main/res/values-iw/strings.xml | 4 - src/main/res/values-ja/strings.xml | 4 - src/main/res/values-ko/strings.xml | 4 - src/main/res/values-lt/strings.xml | 4 - src/main/res/values-lv/strings.xml | 4 - src/main/res/values-mo/strings.xml | 4 - src/main/res/values-ms/strings.xml | 4 - src/main/res/values-nb/strings.xml | 4 - src/main/res/values-nl/strings.xml | 4 - src/main/res/values-pl/strings.xml | 4 - src/main/res/values-pt-rBR/strings.xml | 4 - src/main/res/values-pt-rPT/strings.xml | 4 - src/main/res/values-pt/strings.xml | 4 - src/main/res/values-ro/strings.xml | 4 - src/main/res/values-ru/strings.xml | 4 - src/main/res/values-sk/strings.xml | 4 - src/main/res/values-sl/strings.xml | 4 - src/main/res/values-sr/strings.xml | 4 - src/main/res/values-sv/strings.xml | 4 - src/main/res/values-th/strings.xml | 4 - src/main/res/values-tl/strings.xml | 4 - src/main/res/values-tr/strings.xml | 4 - src/main/res/values-uk/strings.xml | 4 - src/main/res/values-vi/strings.xml | 4 - src/main/res/values-zh-rHK/strings.xml | 4 - src/main/res/values-zh-rTW/strings.xml | 4 - src/main/res/values-zh/strings.xml | 4 - src/main/res/values/strings.xml | 4 - 65 files changed, 177 insertions(+), 311 deletions(-) create mode 100644 src/androidTest/java/de/dennisguse/opentracks/data/models/DistanceFormatterTest.java create mode 100644 src/main/java/de/dennisguse/opentracks/data/models/DistanceFormatter.java diff --git a/src/androidTest/java/de/dennisguse/opentracks/data/models/DistanceFormatterTest.java b/src/androidTest/java/de/dennisguse/opentracks/data/models/DistanceFormatterTest.java new file mode 100644 index 000000000..02c2f4e27 --- /dev/null +++ b/src/androidTest/java/de/dennisguse/opentracks/data/models/DistanceFormatterTest.java @@ -0,0 +1,33 @@ +package de.dennisguse.opentracks.data.models; + +import static org.junit.Assert.assertEquals; + +import android.content.Context; + +import androidx.test.core.app.ApplicationProvider; +import androidx.test.ext.junit.runners.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +@RunWith(AndroidJUnit4.class) +public class DistanceFormatterTest { + + private final Context context = ApplicationProvider.getApplicationContext(); + + @Test + public void testFormatDistance() { + DistanceFormatter formatter = DistanceFormatter.Builder() + .setDecimalCount(2) + .build(context); + + // A large number in metric + assertEquals("5.00 km", formatter.formatDistance(Distance.of(5000), true)); + // A large number in imperial + assertEquals("3.11 mi", formatter.formatDistance(Distance.of(5000), false)); + // A small number in metric + assertEquals("100.00 m", formatter.formatDistance(Distance.of(100), true)); + // A small number in imperial + assertEquals("328.08 ft", formatter.formatDistance(Distance.of(100), false)); + } +} \ No newline at end of file diff --git a/src/androidTest/java/de/dennisguse/opentracks/util/StringUtilsTest.java b/src/androidTest/java/de/dennisguse/opentracks/util/StringUtilsTest.java index 66304d783..85bdc6cf6 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/util/StringUtilsTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/util/StringUtilsTest.java @@ -47,7 +47,6 @@ import java.util.TimeZone; import java.util.stream.Collectors; import de.dennisguse.opentracks.LocaleRule; -import de.dennisguse.opentracks.data.models.Distance; import de.dennisguse.opentracks.data.models.Speed; /** @@ -91,21 +90,6 @@ public class StringUtilsTest { assertEquals("100:00:00", StringUtils.formatElapsedTimeWithHour(Duration.ofMillis(360000000))); } - /** - * Tests {@link StringUtils#formatDistance(android.content.Context, Distance, boolean)}. - */ - @Test - public void testFormatDistance() { - // A large number in metric - assertEquals("5.00 km", StringUtils.formatDistance(context, Distance.of(5000), true)); - // A large number in imperial - assertEquals("3.11 mi", StringUtils.formatDistance(context, Distance.of(5000), false)); - // A small number in metric - assertEquals("100.00 m", StringUtils.formatDistance(context, Distance.of(100), true)); - // A small number in imperial - assertEquals("328.08 ft", StringUtils.formatDistance(context, Distance.of(100), false)); - } - /** * Tests {@link StringUtils#formatCData(String)}. */ diff --git a/src/main/java/de/dennisguse/opentracks/TrackListActivity.java b/src/main/java/de/dennisguse/opentracks/TrackListActivity.java index 103ef8fa4..e593ebb7a 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackListActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackListActivity.java @@ -49,6 +49,7 @@ import java.util.ArrayList; import java.util.Arrays; import de.dennisguse.opentracks.data.models.Distance; +import de.dennisguse.opentracks.data.models.DistanceFormatter; import de.dennisguse.opentracks.data.models.Track; import de.dennisguse.opentracks.data.tables.TracksColumns; import de.dennisguse.opentracks.databinding.TrackListBinding; @@ -190,7 +191,7 @@ public class TrackListActivity extends AbstractTrackDeleteActivity implements Co int iconId = TrackIconUtils.getIconDrawable(icon); String name = cursor.getString(nameIndex); String totalTime = StringUtils.formatElapsedTime(Duration.ofMillis(cursor.getLong(totalTimeIndex))); - String totalDistance = StringUtils.formatDistance(TrackListActivity.this, Distance.of(cursor.getDouble(totalDistanceIndex)), metricUnits); + String totalDistance = DistanceFormatter.Builder().build(TrackListActivity.this).formatDistance(Distance.of(cursor.getDouble(totalDistanceIndex)), metricUnits); int markerCount = cursor.getInt(markerCountIndex); long startTime = cursor.getLong(startTimeIndex); int startTimeOffset = cursor.getInt(startTimeOffsetIndex); diff --git a/src/main/java/de/dennisguse/opentracks/data/models/DistanceFormatter.java b/src/main/java/de/dennisguse/opentracks/data/models/DistanceFormatter.java new file mode 100644 index 000000000..78c5e8608 --- /dev/null +++ b/src/main/java/de/dennisguse/opentracks/data/models/DistanceFormatter.java @@ -0,0 +1,82 @@ +package de.dennisguse.opentracks.data.models; + +import android.content.Context; +import android.content.res.Resources; +import android.util.Pair; + +import de.dennisguse.opentracks.R; +import de.dennisguse.opentracks.util.StringUtils; + +public class DistanceFormatter { + + private final Resources resources; + + private final int decimalCount; + + private DistanceFormatter(Resources resources, int decimalCount) { + this.resources = resources; + this.decimalCount = decimalCount; + } + + public String formatDistance(Distance distance, boolean metricUnits) { + if (distance.isInvalid()) { + return resources.getString(R.string.value_unknown); + } + + Pair distanceParts = getDistanceParts(distance, metricUnits); + + return resources.getString(R.string.distance_with_unit, distanceParts.first, distanceParts.second); + } + + /** + * Get the formatted distance with unit. + * + * @param metricUnits true to use metric unit + * @return the formatted distance (or null) and it's unit as {@link Pair} + */ + public Pair getDistanceParts(Distance distance, boolean metricUnits) { + if (distance.isInvalid()) { + return new Pair<>(null, resources.getString(metricUnits ? R.string.unit_meter : R.string.unit_feet)); + } + + if (metricUnits) { + if (distance.greaterThan(Distance.of(500))) { + 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)); + } + } else { + if (distance.greaterThan(Distance.ofMile(0.5))) { + 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)); + } + } + } + + public static Builder Builder() { + return new Builder(); + } + + public static class Builder { + + private int decimalCount; + + public Builder() { + decimalCount = 2; + } + + public Builder setDecimalCount(int decimalCount) { + this.decimalCount = decimalCount; + return this; + } + + public DistanceFormatter build(Resources resource) { + return new DistanceFormatter(resource, decimalCount); + } + + public DistanceFormatter build(Context context) { + return build(context.getResources()); + } + } +} diff --git a/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordedFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordedFragment.java index 28236cbc5..ab5a23d2d 100644 --- a/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordedFragment.java +++ b/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordedFragment.java @@ -37,6 +37,7 @@ import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.TrackRecordedActivity; import de.dennisguse.opentracks.adapters.StatisticsAdapter; import de.dennisguse.opentracks.data.ContentProviderUtils; +import de.dennisguse.opentracks.data.models.DistanceFormatter; import de.dennisguse.opentracks.data.models.Track; import de.dennisguse.opentracks.databinding.StatisticsRecordedBinding; import de.dennisguse.opentracks.settings.PreferencesUtils; @@ -186,7 +187,7 @@ public class StatisticsRecordedFragment extends Fragment { TrackStatistics trackStatistics = track.getTrackStatistics(); // Set total distance { - Pair parts = StringUtils.getDistanceParts(getContext(), trackStatistics.getTotalDistance(), preferenceMetricUnits); + Pair parts = DistanceFormatter.Builder().build(getContext()).getDistanceParts(trackStatistics.getTotalDistance(), preferenceMetricUnits); viewBinding.statsDistanceValue.setText(parts.first); viewBinding.statsDistanceUnit.setText(parts.second); diff --git a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingServiceNotificationManager.java b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingServiceNotificationManager.java index f996ed1be..98f4ffaed 100644 --- a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingServiceNotificationManager.java +++ b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingServiceNotificationManager.java @@ -17,6 +17,7 @@ import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.TrackListActivity; import de.dennisguse.opentracks.TrackRecordingActivity; import de.dennisguse.opentracks.data.models.Distance; +import de.dennisguse.opentracks.data.models.DistanceFormatter; import de.dennisguse.opentracks.data.models.TrackPoint; import de.dennisguse.opentracks.settings.PreferencesUtils; import de.dennisguse.opentracks.stats.TrackStatistics; @@ -79,8 +80,10 @@ class TrackRecordingServiceNotificationManager implements SharedPreferences.OnSh void updateTrackPoint(Context context, TrackStatistics trackStatistics, TrackPoint trackPoint, Distance recordingGpsAccuracy) { String formattedAccuracy = context.getString(R.string.value_none); + + DistanceFormatter formatter = DistanceFormatter.Builder().build(context); if (trackPoint.hasHorizontalAccuracy()) { - formattedAccuracy = StringUtils.formatDistance(context, trackPoint.getHorizontalAccuracy(), metricUnits); + formattedAccuracy = formatter.formatDistance(trackPoint.getHorizontalAccuracy(), metricUnits); boolean currentLocationWasAccurate = trackPoint.getHorizontalAccuracy().lessThan(recordingGpsAccuracy); boolean shouldAlert = !currentLocationWasAccurate && previousLocationWasAccurate; @@ -88,7 +91,7 @@ class TrackRecordingServiceNotificationManager implements SharedPreferences.OnSh previousLocationWasAccurate = currentLocationWasAccurate; } - notificationBuilder.setContentTitle(context.getString(R.string.track_distance_notification, StringUtils.formatDistance(context, trackStatistics.getTotalDistance(), metricUnits))); + notificationBuilder.setContentTitle(context.getString(R.string.track_distance_notification, formatter.formatDistance(trackStatistics.getTotalDistance(), metricUnits))); notificationBuilder.setContentText(context.getString(R.string.track_speed_notification, StringUtils.formatSpeed(context, trackPoint.getSpeed(), metricUnits, true))); notificationBuilder.setSubText(context.getString(R.string.track_recording_notification_accuracy, formattedAccuracy)); updateNotification(); diff --git a/src/main/java/de/dennisguse/opentracks/settings/AnnouncementsSettingsFragment.java b/src/main/java/de/dennisguse/opentracks/settings/AnnouncementsSettingsFragment.java index c27356089..a27e036a8 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/AnnouncementsSettingsFragment.java +++ b/src/main/java/de/dennisguse/opentracks/settings/AnnouncementsSettingsFragment.java @@ -28,6 +28,6 @@ public class AnnouncementsSettingsFragment extends PreferenceFragmentCompat { voiceFrequency.setEntries(PreferencesUtils.getVoiceAnnouncementFrequencyEntries()); ListPreference voiceDistance = findPreference(getString(R.string.voice_announcement_distance_key)); - voiceDistance.setEntries(PreferencesUtils.getVoiceAnnouncementDistanceEntries(getContext())); + voiceDistance.setEntries(PreferencesUtils.getVoiceAnnouncementDistanceEntries()); } } diff --git a/src/main/java/de/dennisguse/opentracks/settings/GpsSettingsFragment.java b/src/main/java/de/dennisguse/opentracks/settings/GpsSettingsFragment.java index 52204679d..7dfd8fceb 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/GpsSettingsFragment.java +++ b/src/main/java/de/dennisguse/opentracks/settings/GpsSettingsFragment.java @@ -9,7 +9,7 @@ import java.time.Duration; import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.data.models.Distance; -import de.dennisguse.opentracks.util.StringUtils; +import de.dennisguse.opentracks.data.models.DistanceFormatter; public class GpsSettingsFragment extends PreferenceFragmentCompat { @@ -17,12 +17,16 @@ public class GpsSettingsFragment extends PreferenceFragmentCompat { public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { addPreferencesFromResource(R.xml.settings_gps); + final DistanceFormatter formatter = DistanceFormatter.Builder() + .setDecimalCount(0) + .build(getContext()); + findPreference(getString(R.string.recording_distance_interval_key)) .setSummaryProvider( preference -> { boolean metricUnits = PreferencesUtils.isMetricUnits(); Distance distance = PreferencesUtils.getRecordingDistanceInterval(); - return getString(R.string.settings_recording_location_frequency_summary, StringUtils.formatDistance(getContext(), distance, metricUnits)); + return getString(R.string.settings_recording_location_frequency_summary, formatter.formatDistance(distance, metricUnits)); } ); @@ -31,7 +35,7 @@ public class GpsSettingsFragment extends PreferenceFragmentCompat { preference -> { boolean metricUnits = PreferencesUtils.isMetricUnits(); Distance distance = PreferencesUtils.getMaxRecordingDistance(); - return getString(R.string.settings_recording_max_recording_distance_summary, StringUtils.formatDistance(getContext(), distance, metricUnits)); + return getString(R.string.settings_recording_max_recording_distance_summary, formatter.formatDistance(distance, metricUnits)); } ); @@ -40,7 +44,7 @@ public class GpsSettingsFragment extends PreferenceFragmentCompat { preference -> { boolean metricUnits = PreferencesUtils.isMetricUnits(); Distance distance = PreferencesUtils.getThresholdHorizontalAccuracy(); - return getString(R.string.settings_recording_min_required_accuracy_summary, StringUtils.formatDistance(getContext(), distance, metricUnits)); + return getString(R.string.settings_recording_min_required_accuracy_summary, formatter.formatDistance(distance, metricUnits)); } ); diff --git a/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java b/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java index 98a4b51ac..7310b74ea 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java +++ b/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java @@ -39,12 +39,11 @@ import java.util.stream.Stream; import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.data.models.Distance; +import de.dennisguse.opentracks.data.models.DistanceFormatter; import de.dennisguse.opentracks.data.models.Speed; -import de.dennisguse.opentracks.data.models.UnitConversions; import de.dennisguse.opentracks.io.file.TrackFileFormat; import de.dennisguse.opentracks.ui.customRecordingLayout.CsvLayoutUtils; import de.dennisguse.opentracks.ui.customRecordingLayout.Layout; -import de.dennisguse.opentracks.util.StringUtils; import de.dennisguse.opentracks.util.TrackIconUtils; /** @@ -304,17 +303,20 @@ public class PreferencesUtils { /** * @return Result depends on isMetricUnits */ - @Deprecated //TODO Context should not be used here; requires refactoring of StringUtils. - static String[] getVoiceAnnouncementDistanceEntries(Context context) { + static String[] getVoiceAnnouncementDistanceEntries() { String[] values = resources.getStringArray(R.array.voice_announcement_distance_values); String[] options = new String[values.length]; boolean metricUnits = isMetricUnits(); + + DistanceFormatter formatter = DistanceFormatter.Builder() + .setDecimalCount(0) + .build(resources); for (int i = 0; i < values.length; i++) { if (resources.getString(R.string.announcement_off).equals(values[i])) { options[i] = resources.getString(R.string.value_off); } else { Distance distance = Distance.one(metricUnits).multipliedBy(Double.parseDouble(values[i])); - options[i] = StringUtils.formatDistance(context, distance, metricUnits, 0); + options[i] = formatter.formatDistance(distance, metricUnits); } } return options; @@ -353,21 +355,23 @@ public class PreferencesUtils { final int recordingDistanceIntervalDefault = (int) getRecordingDistanceIntervalDefault().toM(); boolean metricUnits = isMetricUnits(); + DistanceFormatter formatter = DistanceFormatter.Builder() + .setDecimalCount(0) + .build(resources); for (int i = 0; i < entryValues.length; i++) { int value = Integer.parseInt(entryValues[i]); - String displayValue; + Distance distance = Distance.of(1).multipliedBy(value); + + String displayValue = formatter.formatDistance(distance, metricUnits); if (metricUnits) { - displayValue = resources.getString(R.string.value_integer_meter, value); if (value == recordingDistanceIntervalDefault) { entries[i] = resources.getString(R.string.value_integer_meter_recommended, value); } else { entries[i] = displayValue; } } else { - int feet = (int) (value * UnitConversions.M_TO_FT); - displayValue = resources.getString(R.string.value_integer_feet, feet); if (value == recordingDistanceIntervalDefault) { - entries[i] = resources.getString(R.string.value_integer_feet_recommended, feet); + entries[i] = resources.getString(R.string.value_integer_feet_recommended, (int) distance.toFT()); } else { entries[i] = displayValue; } @@ -389,21 +393,23 @@ public class PreferencesUtils { final int maxRecordingDistanceDefault = Integer.parseInt(resources.getString(R.string.max_recording_distance_default)); boolean metricUnits = isMetricUnits(); + DistanceFormatter formatter = DistanceFormatter.Builder() + .setDecimalCount(0) + .build(resources); for (int i = 0; i < entryValues.length; i++) { int value = Integer.parseInt(entryValues[i]); - String displayValue; + Distance distance = Distance.of(1).multipliedBy(value); + + String displayValue = formatter.formatDistance(distance, metricUnits); if (metricUnits) { - displayValue = resources.getString(R.string.value_integer_meter, value); if (value == maxRecordingDistanceDefault) { entries[i] = resources.getString(R.string.value_integer_meter_recommended, value); } else { entries[i] = displayValue; } } else { - int feet = (int) (value * UnitConversions.M_TO_FT); - displayValue = resources.getString(R.string.value_integer_feet, feet); if (value == maxRecordingDistanceDefault) { - entries[i] = resources.getString(R.string.value_integer_feet_recommended, feet); + entries[i] = resources.getString(R.string.value_integer_feet_recommended, (int) distance.toFT()); } else { entries[i] = displayValue; } @@ -453,11 +459,16 @@ public class PreferencesUtils { boolean metricUnits = isMetricUnits(); + DistanceFormatter formatter = DistanceFormatter.Builder() + .setDecimalCount(0) + .build(resources); + for (int i = 0; i < entryValues.length; i++) { int value = Integer.parseInt(entryValues[i]); - String displayValue; + Distance distance = Distance.of(1).multipliedBy(value); + + String displayValue = formatter.formatDistance(distance, metricUnits); if (metricUnits) { - displayValue = resources.getString(R.string.value_integer_meter, value); if (value == recordingGPSAccuracyDefault) { entries[i] = resources.getString(R.string.value_integer_meter_recommended, value); } else if (value == recordingGPSAccuracyExcellent) { @@ -468,13 +479,10 @@ public class PreferencesUtils { entries[i] = displayValue; } } else { - int feet = (int) (value * UnitConversions.M_TO_FT); - displayValue = resources.getString(R.string.value_integer_feet, feet); - if (value == recordingGPSAccuracyDefault) { - entries[i] = resources.getString(R.string.value_integer_feet_recommended, feet); + entries[i] = resources.getString(R.string.value_integer_feet_recommended, (int) distance.toFT()); } else if (value == recordingGPSAccuracyExcellent) { - entries[i] = resources.getString(R.string.value_integer_feet_excellent_gps, feet); + entries[i] = resources.getString(R.string.value_integer_feet_excellent_gps, (int) distance.toFT()); } else { entries[i] = displayValue; } diff --git a/src/main/java/de/dennisguse/opentracks/ui/aggregatedStatistics/AggregatedStatisticsAdapter.java b/src/main/java/de/dennisguse/opentracks/ui/aggregatedStatistics/AggregatedStatisticsAdapter.java index 16e0a2d6e..93967c08a 100644 --- a/src/main/java/de/dennisguse/opentracks/ui/aggregatedStatistics/AggregatedStatisticsAdapter.java +++ b/src/main/java/de/dennisguse/opentracks/ui/aggregatedStatistics/AggregatedStatisticsAdapter.java @@ -13,6 +13,7 @@ import java.util.ArrayList; import java.util.List; import de.dennisguse.opentracks.R; +import de.dennisguse.opentracks.data.models.DistanceFormatter; import de.dennisguse.opentracks.settings.PreferencesUtils; import de.dennisguse.opentracks.util.StringUtils; import de.dennisguse.opentracks.util.TrackIconUtils; @@ -161,7 +162,7 @@ public class AggregatedStatisticsAdapter extends BaseAdapter { typeLabel.setText(category); numTracks.setText(StringUtils.valueInParentheses(String.valueOf(aggregatedStatistic.getCountTracks()))); - Pair parts = StringUtils.getDistanceParts(context, aggregatedStatistic.getTrackStatistics().getTotalDistance(), metricsUnits); + Pair parts = DistanceFormatter.Builder().build(context).getDistanceParts(aggregatedStatistic.getTrackStatistics().getTotalDistance(), metricsUnits); distance.setText(parts.first); distanceUnit.setText(parts.second); diff --git a/src/main/java/de/dennisguse/opentracks/ui/intervals/IntervalStatisticsAdapter.java b/src/main/java/de/dennisguse/opentracks/ui/intervals/IntervalStatisticsAdapter.java index 556a310e9..16b2d181c 100644 --- a/src/main/java/de/dennisguse/opentracks/ui/intervals/IntervalStatisticsAdapter.java +++ b/src/main/java/de/dennisguse/opentracks/ui/intervals/IntervalStatisticsAdapter.java @@ -13,6 +13,7 @@ import java.util.List; import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.data.models.Distance; +import de.dennisguse.opentracks.data.models.DistanceFormatter; import de.dennisguse.opentracks.util.StringUtils; public class IntervalStatisticsAdapter extends RecyclerView.Adapter { @@ -54,7 +55,7 @@ public class IntervalStatisticsAdapter extends RecyclerView.Adapter(getContext(), android.R.layout.simple_spinner_dropdown_item, IntervalStatisticsModel.IntervalOption.values()) { @NonNull @Override @@ -113,7 +117,7 @@ public class IntervalsFragment extends Fragment { TextView v = (TextView) super.getView(position, convertView, parent); IntervalStatisticsModel.IntervalOption option = getItem(position); - String stringValue = StringUtils.formatDistance(getContext(), option.getDistance(metricUnits), metricUnits, 0); + String stringValue = formatter.formatDistance(option.getDistance(metricUnits), metricUnits); v.setText(stringValue); return v; } @@ -130,13 +134,13 @@ public class IntervalsFragment extends Fragment { //TODO This duplicates the intervalAdapter code IntervalStatisticsModel.IntervalOption option = selectedInterval != null ? selectedInterval : IntervalStatisticsModel.IntervalOption.DEFAULT; - String stringValue = StringUtils.formatDistance(getContext(), option.getDistance(metricUnits), metricUnits, 0); + String stringValue = formatter.formatDistance(option.getDistance(metricUnits), metricUnits); viewBinding.intervalsDropdown.setText(stringValue, false); }); //TODO This duplicates the intervalAdapter code IntervalStatisticsModel.IntervalOption option = selectedInterval != null ? selectedInterval : IntervalStatisticsModel.IntervalOption.DEFAULT; - String stringValue = StringUtils.formatDistance(getContext(), option.getDistance(metricUnits), metricUnits, 0); + String stringValue = formatter.formatDistance(option.getDistance(metricUnits), metricUnits); viewBinding.intervalsDropdown.setText(stringValue, false); } diff --git a/src/main/java/de/dennisguse/opentracks/util/StringUtils.java b/src/main/java/de/dennisguse/opentracks/util/StringUtils.java index 675ef8ac5..6241ee8fc 100644 --- a/src/main/java/de/dennisguse/opentracks/util/StringUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/StringUtils.java @@ -128,27 +128,6 @@ public class StringUtils { return TextUtils.split(value, ":").length == 2 ? "0:" + value : value; } - /** - * Formats the distance in meters. - * - * @param context the context - * @param distance the distance - * @param metricUnits true to use metric units. False to use imperial units - */ - public static String formatDistance(Context context, Distance distance, boolean metricUnits) { - return formatDistance(context, distance, metricUnits, 2); - } - - public static String formatDistance(Context context, Distance distance, boolean metricUnits, int decimalCount) { - if (distance.isInvalid()) { - return context.getString(R.string.value_unknown); - } - - Pair distanceParts = getDistanceParts(context, distance, metricUnits, decimalCount); - - return context.getString(R.string.distance_with_unit, distanceParts.first, distanceParts.second); - } - public static String formatSpeed(Context context, Speed speed, boolean metricUnits, boolean reportSpeed) { Pair distanceParts = getSpeedParts(context, speed, metricUnits, reportSpeed); @@ -191,38 +170,6 @@ public class StringUtils { return context.getString(R.string.location_latitude_longitude, Location.convert(latitude, Location.FORMAT_DEGREES), Location.convert(longitude, Location.FORMAT_DEGREES)); } - /** - * Get the formatted distance with unit. - * - * @param context the context - * @param distance the distance - * @param metricUnits true to use metric unit - * @return the formatted distance (or null) and it's unit as {@link Pair} - */ - public static Pair getDistanceParts(Context context, Distance distance, boolean metricUnits) { - return getDistanceParts(context, distance, metricUnits, 2); - } - - public static Pair getDistanceParts(Context context, Distance distance, boolean metricUnits, int decimalCount) { - if (distance.isInvalid()) { - return new Pair<>(null, context.getString(metricUnits ? R.string.unit_meter : R.string.unit_feet)); - } - - if (metricUnits) { - if (distance.greaterThan(Distance.of(500))) { - return new Pair<>(formatDecimal(distance.toKM(), decimalCount), context.getString(R.string.unit_kilometer)); - } else { - return new Pair<>(formatDecimal(distance.toM(), decimalCount), context.getString(R.string.unit_meter)); - } - } else { - if (distance.greaterThan(Distance.ofMile(0.5))) { - return new Pair<>(formatDecimal(distance.toMI(), decimalCount), context.getString(R.string.unit_mile)); - } else { - return new Pair<>(formatDecimal(distance.toFT(), decimalCount), context.getString(R.string.unit_feet)); - } - } - } - /** * Gets the formatted speed with unit. * diff --git a/src/main/java/de/dennisguse/opentracks/viewmodels/StatisticDataBuilder.java b/src/main/java/de/dennisguse/opentracks/viewmodels/StatisticDataBuilder.java index 200f90b60..351c1902f 100644 --- a/src/main/java/de/dennisguse/opentracks/viewmodels/StatisticDataBuilder.java +++ b/src/main/java/de/dennisguse/opentracks/viewmodels/StatisticDataBuilder.java @@ -12,6 +12,7 @@ import java.util.stream.Collectors; import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.data.models.Cadence; +import de.dennisguse.opentracks.data.models.DistanceFormatter; import de.dennisguse.opentracks.data.models.Speed; import de.dennisguse.opentracks.data.models.TrackPoint; import de.dennisguse.opentracks.sensors.sensorData.SensorDataSet; @@ -53,7 +54,7 @@ public class StatisticDataBuilder { valueAndUnit = new Pair<>(StringUtils.formatElapsedTime(trackStatistics.getMovingTime()), null); title = context.getString(R.string.stats_moving_time); } else if (fieldKey.equals(context.getString(R.string.stats_custom_layout_distance_key))) { - valueAndUnit = StringUtils.getDistanceParts(context, trackStatistics.getTotalDistance(), metricUnits); + valueAndUnit = DistanceFormatter.Builder().build(context).getDistanceParts(trackStatistics.getTotalDistance(), metricUnits); title = context.getString(R.string.stats_distance); } else if (fieldKey.equals(context.getString(R.string.stats_custom_layout_speed_key)) || fieldKey.equals(context.getString(R.string.stats_custom_layout_pace_key))) { boolean reportSpeed = fieldKey.equals("speed"); diff --git a/src/main/res/values-ar/strings.xml b/src/main/res/values-ar/strings.xml index 1bacdffa5..82bc208a2 100644 --- a/src/main/res/values-ar/strings.xml +++ b/src/main/res/values-ar/strings.xml @@ -258,16 +258,12 @@ limitations under the License. د/كم دقيقة/ميل - %1$d قدم %1$d قدم (إشارة نظام تحديد المواقع ممتازة) %1$d قدم (موصى به) - %1$d كم %1$d‏ كم/ساعة - %1$d م %1$d م (إشارة نظام تحديد المواقع ممتازة) %1$d م (إشارة نظام تحديد المواقع سيئة) %1$d م (موصى به) - %1$d ميل %1$d‏‏ ميل/ساعة %1$d دقيقة %1$d ث diff --git a/src/main/res/values-b+en+001/strings.xml b/src/main/res/values-b+en+001/strings.xml index d0eb7daba..83c9bb001 100644 --- a/src/main/res/values-b+en+001/strings.xml +++ b/src/main/res/values-b+en+001/strings.xml @@ -211,16 +211,12 @@ mi/h min/km min/mi - %1$d ft %1$d ft (excellent GPS) %1$d ft (recommended) - %1$d km %1$d km/h - %1$d m %1$d m (excellent GPS) %1$d m (poor GPS) %1$d m (recommended) - %1$d mi %1$d mph %1$d min %1$d s diff --git a/src/main/res/values-b+es+419/strings.xml b/src/main/res/values-b+es+419/strings.xml index bd68fbb95..a4a5647cf 100644 --- a/src/main/res/values-b+es+419/strings.xml +++ b/src/main/res/values-b+es+419/strings.xml @@ -214,16 +214,12 @@ millas/hora min/km min/milla - %1$d pies %1$d pies (señal de GPS excelente) %1$d pies (recomendado) - %1$d km %1$d km/h - %1$d m %1$d m (señal de GPS excelente) %1$d m (señal de GPS deficiente) %1$d m (recomendado) - %1$d millas %1$d mi/h %1$d mín %1$d s diff --git a/src/main/res/values-bg/strings.xml b/src/main/res/values-bg/strings.xml index 59aa430d2..acbb0ec98 100644 --- a/src/main/res/values-bg/strings.xml +++ b/src/main/res/values-bg/strings.xml @@ -259,16 +259,12 @@ limitations under the License. мин/км мин/мил - %1$d фт %1$d фт (отличен GPS) %1$d фт (препоръчително) - %1$d км %1$d км/ч - %1$d м %1$d м (отличен GPS) %1$d м (слаб GPS) %1$d м (препоръчително) - %1$d мил %1$d мил/ч %1$d мин %1$d сек diff --git a/src/main/res/values-ca/strings.xml b/src/main/res/values-ca/strings.xml index bba21985d..4e3b66e4a 100644 --- a/src/main/res/values-ca/strings.xml +++ b/src/main/res/values-ca/strings.xml @@ -257,16 +257,12 @@ limitations under the License. min/km min/milles - %1$d peus %1$d peus (senyal de GPS excel·lent) %1$d peus (recomanat) - %1$d km %1$d km/h - %1$d m %1$d m (GPS amb bona senyal) %1$d m (GPS amb poca senyal) %1$d m (recomanat) - %1$d milles %1$d mi/h %1$d min %1$d s diff --git a/src/main/res/values-cs/strings.xml b/src/main/res/values-cs/strings.xml index 39cfa02b7..12ffbebe5 100644 --- a/src/main/res/values-cs/strings.xml +++ b/src/main/res/values-cs/strings.xml @@ -324,16 +324,12 @@ limitations under the License. min/km min/míle - %1$d stop %1$d stop (vynikající signál GPS) %1$d stop (doporučeno) - %1$d km %1$d km/h - %1$d m %1$d m (vynikající signál GPS) %1$d m (špatný signál GPS) %1$d m (doporučeno) - %1$d mil %1$d mil/h %1$d min %1$d s diff --git a/src/main/res/values-da/strings.xml b/src/main/res/values-da/strings.xml index d5b3b8346..7877212f3 100644 --- a/src/main/res/values-da/strings.xml +++ b/src/main/res/values-da/strings.xml @@ -329,16 +329,12 @@ Hvis GPS-enheden rapporterer unøjagtige data (f.eks. Placering, hastighed, høj min./km min./mil - %1$d fod %1$d fod (fremragende GPS) %1$d fod (anbefales) - %1$d km %1$d km/t - %1$d m %1$d m (fremragende GPS) %1$d m (dårlig GPS) %1$d m (anbefalet) - %1$d mil %1$d mil/t %1$d min %1$d sek diff --git a/src/main/res/values-de/strings.xml b/src/main/res/values-de/strings.xml index a19466e80..0642547f6 100644 --- a/src/main/res/values-de/strings.xml +++ b/src/main/res/values-de/strings.xml @@ -336,16 +336,12 @@ Meldet das GPS-Gerät ungenaue Daten (z.B. Standort, Geschwindigkeit, Höhe), ka min/km Min./Meile - %1$d Fuß %1$d Fuß (ausgezeichnetes GPS-Signal) %1$d Fuß (empfohlen) - %1$d km %1$d km/h - %1$d m %1$d m (ausgezeichnetes GPS-Signal) %1$d m (schlechtes GPS-Signal) %1$d m (empfohlen) - %1$d mi %1$d Meile/h %1$d min %1$d s diff --git a/src/main/res/values-el/strings.xml b/src/main/res/values-el/strings.xml index 96a3285b9..669156df7 100644 --- a/src/main/res/values-el/strings.xml +++ b/src/main/res/values-el/strings.xml @@ -258,16 +258,12 @@ limitations under the License. λεπτά / χιλ. λεπτά/μίλι - %1$d πόδια %1$d πόδια (τέλειο σήμα GPS) %1$d ft (συνιστάται) - %1$d χιλιόμετρα %1$d χλμ/ώρα - %1$d μέτρα %1$d μέτρα (τέλειο σήμα GPS) %1$d μέτρα (χαμηλό σήμα GPS) %1$d m (συνιστάται) - %1$d μίλια %1$d μίλια/ώρα %1$d λεπ. %1$d δευτ diff --git a/src/main/res/values-es/strings.xml b/src/main/res/values-es/strings.xml index d2e03617b..560a3befb 100644 --- a/src/main/res/values-es/strings.xml +++ b/src/main/res/values-es/strings.xml @@ -324,16 +324,12 @@ limitations under the License. min/km min/milla - %1$d pies %1$d pies (señal de GPS excelente) %1$d pies (recomendado) - %1$d km %1$d km/h - %1$d m %1$d m (señal de GPS excelente) %1$d m (señal de GPS deficiente) %1$d m (recomendado) - %1$d millas %1$d mi/h %1$d mín %1$d s diff --git a/src/main/res/values-et/strings.xml b/src/main/res/values-et/strings.xml index ea8fead0b..61560fa40 100644 --- a/src/main/res/values-et/strings.xml +++ b/src/main/res/values-et/strings.xml @@ -324,16 +324,12 @@ limitations under the License. min/km min/miilis - %1$d jalga %1$d jalga (tugev GPS-signaal) %1$d jalga (soovitatav) - %1$d km %1$d km/h - %1$d m %1$d m (tugev GPS-signaal) %1$d m (nõrk GPS-signaal) %1$d m (soovitatav) - %1$d miili %1$d miili/h %1$d min %1$d s diff --git a/src/main/res/values-eu/strings.xml b/src/main/res/values-eu/strings.xml index 34b9aeba4..164af6701 100644 --- a/src/main/res/values-eu/strings.xml +++ b/src/main/res/values-eu/strings.xml @@ -327,16 +327,12 @@ GPS gailuak datu okerrak salatzen baditu (adibidez, kokapena, abiadura, kota), O min/km min/mi - %1$d ft %1$d ft (GPS bikaina) %1$d oin (gomendatua) - %1$d km %1$d km/h - %1$d m %1$d m (GPS bikaina) %1$d m (GPS ahula) %1$d m (gomendatua) - %1$d mi %1$d mi/h %1$d min %1$d s diff --git a/src/main/res/values-fa/strings.xml b/src/main/res/values-fa/strings.xml index 727d70093..679a2962d 100644 --- a/src/main/res/values-fa/strings.xml +++ b/src/main/res/values-fa/strings.xml @@ -258,16 +258,12 @@ limitations under the License. دقیقه در کیلومتر دقیقه در مایل - %1$d فوت %1$d فوت (GPS عالی) %1$d فوت (توصیه می‌شود) - %1$d کیلومتر %1$d کیلومتر در ساعت - %1$d متر %1$d متر (GPS عالی) %1$d متر (GPS ضعیف) %1$d متر (توصیه شده) - %1$d مایل %1$d مایل در ساعت %1$d دقیقه %1$d ثانیه diff --git a/src/main/res/values-fi/strings.xml b/src/main/res/values-fi/strings.xml index 361070475..99ce12ad4 100644 --- a/src/main/res/values-fi/strings.xml +++ b/src/main/res/values-fi/strings.xml @@ -334,16 +334,12 @@ limitations under the License. min/km min/maili - %1$d jalkaa %1$d jalkaa (erinomainen GPS) %1$d jalkaa (suositus) - %1$d km %1$d km/h - %1$d m %1$d m (erinomainen GPS) %1$d m (heikko GPS) %1$d m (suositus) - %1$d mailia %1$d mailia/h %1$d min %1$d s diff --git a/src/main/res/values-fr-rCA/strings.xml b/src/main/res/values-fr-rCA/strings.xml index be4c31aec..bdde5cd6d 100644 --- a/src/main/res/values-fr-rCA/strings.xml +++ b/src/main/res/values-fr-rCA/strings.xml @@ -210,16 +210,12 @@ mi/h min/km min/mi - %1$d pi %1$d pi(s) (réception GPS excellente) %1$d pi (recommandé) - %1$d km %1$d km/h - %1$d m %1$d m (réception GPS excellente) %1$d m (mauvaise réception GPS) %1$d m (recommandé) - %1$d mi %1$d mi/h %1$d min %1$d s diff --git a/src/main/res/values-fr-rCH/strings.xml b/src/main/res/values-fr-rCH/strings.xml index c6c68138d..510c22fda 100644 --- a/src/main/res/values-fr-rCH/strings.xml +++ b/src/main/res/values-fr-rCH/strings.xml @@ -210,16 +210,12 @@ miles/h min/km min/mi - %1$d pied(s) %1$d pied(s) (réception GPS excellente) %1$d pied(s) (recommandé) - %1$d km %1$d km/h - %1$d m %1$d m (réception GPS excellente) %1$d m (mauvaise réception GPS) %1$d m (recommandé) - %1$d mile(s) %1$d mi/h %1$d min %1$d s diff --git a/src/main/res/values-fr/strings.xml b/src/main/res/values-fr/strings.xml index 31e5b028d..82298efdc 100644 --- a/src/main/res/values-fr/strings.xml +++ b/src/main/res/values-fr/strings.xml @@ -327,16 +327,12 @@ Si le dispositif GPS signale des données inexactes (par exemple, la localisatio min/km min/mi - %1$d pied(s) %1$d pied(s) (réception GPS excellente) %1$d pied(s) (recommandé) - %1$d km %1$d km/h - %1$d m %1$d m (réception GPS excellente) %1$d m (mauvaise réception GPS) %1$d m (recommandé) - %1$d mile(s) %1$d mi/h %1$d min %1$d s diff --git a/src/main/res/values-gl/strings.xml b/src/main/res/values-gl/strings.xml index 4a687d927..e2ced4c49 100644 --- a/src/main/res/values-gl/strings.xml +++ b/src/main/res/values-gl/strings.xml @@ -343,16 +343,12 @@ Se te detés ou estás en interiores, non se gardarán datos do sensor (mais ser min/km min/km - %1$d m %1$d m (GPS excelente) %1$d m (recomendado) - %1$d km %1$d km/h - %1$d m %1$d m (GPS excelente) %1$d m (GPS deficiente) %1$d m (recomendado) - %1$d km %1$d mi/h %1$d min %1$d s diff --git a/src/main/res/values-hi/strings.xml b/src/main/res/values-hi/strings.xml index 2f8d5af96..4fbba78b5 100644 --- a/src/main/res/values-hi/strings.xml +++ b/src/main/res/values-hi/strings.xml @@ -258,16 +258,12 @@ limitations under the License. मि/किमी मि/मील - %1$d फुट %1$d फुट (उत्कृष्ट GPS) %1$d फ़ुट (अनुशंसित) - %1$d किमी %1$d किमी/घं - %1$d मी %1$d मीटर (उत्कृष्ट GPS) %1$d मी (खराब GPS) %1$d मी (अनुशंसित) - %1$d मील %1$d मील/घं %1$d मि %1$d diff --git a/src/main/res/values-hr/strings.xml b/src/main/res/values-hr/strings.xml index 3c85f19a7..905ee908b 100644 --- a/src/main/res/values-hr/strings.xml +++ b/src/main/res/values-hr/strings.xml @@ -258,16 +258,12 @@ limitations under the License. min/km min/mi - %1$d ft %1$d ft (izvrstan GPS) %1$d ft (preporučeno) - %1$d km %1$d km/h - %1$d m %1$d m (izvrstan GPS) %1$d m (loš GPS) %1$d m (preporučeno) - %1$d mi %1$d mi/h %1$d min %1$d s diff --git a/src/main/res/values-hu/strings.xml b/src/main/res/values-hu/strings.xml index c454bc4a7..cebb411c7 100644 --- a/src/main/res/values-hu/strings.xml +++ b/src/main/res/values-hu/strings.xml @@ -259,16 +259,12 @@ limitations under the License. perc/km perc/mérföld - %1$d láb %1$d láb (kiváló GPS-jel) %1$d láb (ajánlott) - %1$d km %1$d km/ó - %1$d m %1$d m (kiváló GPS-jel) %1$d m (gyenge GPS-jel) %1$d m (ajánlott) - %1$d mérföld %1$d mérföld/ó %1$d perc %1$d mp diff --git a/src/main/res/values-in/strings.xml b/src/main/res/values-in/strings.xml index ca0dfa248..551305f90 100644 --- a/src/main/res/values-in/strings.xml +++ b/src/main/res/values-in/strings.xml @@ -212,16 +212,12 @@ mph min/km mnt/mil - %1$d kaki %1$d kaki (GPS sangat baik) %1$d kaki (direkomendasikan) - %1$d km %1$d km/j - %1$d m %1$d m (GPS sangat baik) %1$d m (GPS buruk) %1$d m (disarankan) - %1$d mil %1$d mi/j %1$d mnt %1$d d diff --git a/src/main/res/values-it/strings.xml b/src/main/res/values-it/strings.xml index 48f431e42..1c95de339 100644 --- a/src/main/res/values-it/strings.xml +++ b/src/main/res/values-it/strings.xml @@ -299,16 +299,12 @@ Infatti, un\'applicazione deve supportare ACTION_VIEW con MIME applica min/km min/mi - %1$d ft %1$d ft (segnale GPS forte) %1$d ft (consigliato) - %1$d km %1$d km/h - %1$d m %1$d m (segnale GPS forte) %1$d m (segnale GPS debole) %1$d m (consigliato) - %1$d mi %1$d mi/h %1$d min %1$d s diff --git a/src/main/res/values-iw/strings.xml b/src/main/res/values-iw/strings.xml index bad83a51e..88a6d3748 100644 --- a/src/main/res/values-iw/strings.xml +++ b/src/main/res/values-iw/strings.xml @@ -210,16 +210,12 @@ מייל/שעה דקות/ק\"מ דקות/מייל - %1$d רגל %1$d רגל (GPS מעולה) %1$d רגל (מומלץ) - %1$d ק\"מ %1$d קמ\"ש - %1$d מ\' %1$d מ\' (GPS מעולה) %1$d מ\' (GPS חלש) %1$d מ\' (מומלץ) - %1$d מייל %1$d מייל לשעה %1$d דקות %1$d ש\' diff --git a/src/main/res/values-ja/strings.xml b/src/main/res/values-ja/strings.xml index c15b0be47..84408f2be 100644 --- a/src/main/res/values-ja/strings.xml +++ b/src/main/res/values-ja/strings.xml @@ -258,16 +258,12 @@ limitations under the License. 分/km 分/マイル - %1$dft %1$dft(GPS信号: 強) %1$dft(推奨) - %1$dkm %1$dkm/時 - %1$dm %1$dm(GPS信号: 強) %1$dm(GPS信号: 弱) %1$dm(推奨) - %1$dmi %1$dマイル/時 %1$d分 %1$d秒 diff --git a/src/main/res/values-ko/strings.xml b/src/main/res/values-ko/strings.xml index bb4fa385d..7ce427caf 100644 --- a/src/main/res/values-ko/strings.xml +++ b/src/main/res/values-ko/strings.xml @@ -258,16 +258,12 @@ limitations under the License. min/km min/mi - %1$d피트 %1$d피트(GPS 수신 원활) %1$d피트(권장) - %1$dkm 시속 %1$dkm - %1$dm %1$d미터(GPS 수신 원활) %1$d미터(GPS 수신 불량) %1$d미터(권장) - %1$d마일 시속 %1$d마일 %1$d분 %1$d초 diff --git a/src/main/res/values-lt/strings.xml b/src/main/res/values-lt/strings.xml index ce695e5ab..0247cf362 100644 --- a/src/main/res/values-lt/strings.xml +++ b/src/main/res/values-lt/strings.xml @@ -259,16 +259,12 @@ limitations under the License. min./km min./myl - %1$d pėd %1$d pėd. (puikus GPS) %1$d pėd. (rekomenduojama) - %1$d km %1$d km/h - %1$d m %1$d m (puikus GPS) %1$d m (prastas GPS) %1$d m (rekomenduojama) - %1$d myl %1$d myl./h %1$d min %1$d sek diff --git a/src/main/res/values-lv/strings.xml b/src/main/res/values-lv/strings.xml index f516c5bfc..85b6ca3c4 100644 --- a/src/main/res/values-lv/strings.xml +++ b/src/main/res/values-lv/strings.xml @@ -259,16 +259,12 @@ limitations under the License. min/km min/jūdzē - %1$d pēda(-as) %1$d pēda(-as) (izcilas kvalitātes GPS) %1$d pēdas (ieteicams) - %1$d km %1$d km/h - %1$d m %1$d m (izcilas kvalitātes GPS) %1$d m (vājš GPS) %1$d m (ieteicams) - %1$d jūdze(-es) %1$d jūdze(-es)/h %1$d min %1$d sek diff --git a/src/main/res/values-mo/strings.xml b/src/main/res/values-mo/strings.xml index f55f7ff89..f623f842c 100644 --- a/src/main/res/values-mo/strings.xml +++ b/src/main/res/values-mo/strings.xml @@ -210,16 +210,12 @@ mi/h min/km min/mi - %1$d ft %1$d ft (semnal GPS excelent) %1$d ft (recomandat) - %1$d km %1$d km/h - %1$d m %1$d m (semnal GPS excelent) %1$d m (semnal GPS slab) %1$d m (recomandat) - %1$d mi %1$d mi/h %1$d min %1$d s diff --git a/src/main/res/values-ms/strings.xml b/src/main/res/values-ms/strings.xml index d7db72e57..faf093bcf 100644 --- a/src/main/res/values-ms/strings.xml +++ b/src/main/res/values-ms/strings.xml @@ -258,16 +258,12 @@ limitations under the License. min/km min/bt - %1$d kaki %1$d kaki (GPS bagus) %1$d kaki (disyorkan) - %1$d km %1$d km/j - %1$d m %1$d m (GPS bagus) %1$d m (GPS lemah) %1$d m (disyorkan) - %1$d bt %1$d bt/j %1$d min %1$d s diff --git a/src/main/res/values-nb/strings.xml b/src/main/res/values-nb/strings.xml index cfb7196fb..b0b21ef02 100644 --- a/src/main/res/values-nb/strings.xml +++ b/src/main/res/values-nb/strings.xml @@ -259,16 +259,12 @@ limitations under the License. min/km min/mi - %1$d fot %1$d fot (utmerket GPS) %1$d fot (anbefales) - %1$d km %1$d km/t - %1$d m %1$d m (utmerket GPS) %1$d m (dårlig GPS) %1$d m (anbefales) - %1$d mi %1$d mi/h %1$d min %1$d s diff --git a/src/main/res/values-nl/strings.xml b/src/main/res/values-nl/strings.xml index 0b795202d..0cc92c37d 100644 --- a/src/main/res/values-nl/strings.xml +++ b/src/main/res/values-nl/strings.xml @@ -326,16 +326,12 @@ Als het GPS-apparaat onnauwkeurige gegevens rapporteert (bijv. locatie, snelheid min/km min/mi - %1$d ft %1$d ft (uitstekend GPS-signaal) %1$d ft (aanbevolen) - %1$d km %1$d km/u - %1$d m %1$d m (uitstekend GPS-signaal) %1$d m (slecht GPS-signaal) %1$d m (aanbevolen) - %1$d mi %1$d mi/u %1$d min %1$d s diff --git a/src/main/res/values-pl/strings.xml b/src/main/res/values-pl/strings.xml index bd5d1d86d..a3b148551 100644 --- a/src/main/res/values-pl/strings.xml +++ b/src/main/res/values-pl/strings.xml @@ -295,16 +295,12 @@ limitations under the License. min/km min/mi - %1$d ft %1$d ft (doskonały sygnał GPS) %1$d ft (zalecane) - %1$d km %1$d km/h - %1$d m %1$d m (doskonały sygnał GPS) %1$d m (słaby sygnał GPS) %1$d m (zalecane) - %1$d mi %1$d mil/h %1$d min %1$d s diff --git a/src/main/res/values-pt-rBR/strings.xml b/src/main/res/values-pt-rBR/strings.xml index 396c1c432..c3f5d362c 100644 --- a/src/main/res/values-pt-rBR/strings.xml +++ b/src/main/res/values-pt-rBR/strings.xml @@ -212,16 +212,12 @@ mph min/km min/milhas - %1$d pés %1$d pés (GPS excelente) %1$d pés (recomendado) - %1$d km %1$d km/h - %1$d m %1$d m (GPS excelente) %1$d m (GPS com sinal baixo) %1$d m (recomendado) - %1$d milhas %1$d milhas/h %1$d min %1$d s diff --git a/src/main/res/values-pt-rPT/strings.xml b/src/main/res/values-pt-rPT/strings.xml index c32dd297c..0b5b36394 100644 --- a/src/main/res/values-pt-rPT/strings.xml +++ b/src/main/res/values-pt-rPT/strings.xml @@ -210,16 +210,12 @@ mi/h min/km min/milha - %1$d pés %1$d pés (GPS excelente) %1$d pés (recomendado) - %1$d km %1$d km/h - %1$d m %1$d m (GPS excelente) %1$d m (GPS fraco) %1$d m (recomendado) - %1$d mi %1$d mi/h %1$d min %1$d seg diff --git a/src/main/res/values-pt/strings.xml b/src/main/res/values-pt/strings.xml index bbef3f78e..603a7dd08 100644 --- a/src/main/res/values-pt/strings.xml +++ b/src/main/res/values-pt/strings.xml @@ -259,16 +259,12 @@ limitations under the License. min/km min/milhas - %1$d pés %1$d pés (GPS excelente) %1$d pés (recomendado) - %1$d km %1$d km/h - %1$d m %1$d m (GPS excelente) %1$d m (GPS com sinal baixo) %1$d m (recomendado) - %1$d milhas %1$d milhas/h %1$d min %1$d s diff --git a/src/main/res/values-ro/strings.xml b/src/main/res/values-ro/strings.xml index 7d9eb7810..24358910d 100644 --- a/src/main/res/values-ro/strings.xml +++ b/src/main/res/values-ro/strings.xml @@ -259,16 +259,12 @@ limitations under the License. min/km min/mi - %1$d ft %1$d ft (semnal GPS excelent) %1$d ft (recomandat) - %1$d km %1$d km/h - %1$d m %1$d m (semnal GPS excelent) %1$d m (semnal GPS slab) %1$d m (recomandat) - %1$d mi %1$d mi/h %1$d min %1$d s diff --git a/src/main/res/values-ru/strings.xml b/src/main/res/values-ru/strings.xml index cbdb51238..6d0d4c051 100644 --- a/src/main/res/values-ru/strings.xml +++ b/src/main/res/values-ru/strings.xml @@ -259,16 +259,12 @@ limitations under the License. мин/км мин/мил - %1$d фт %1$d фт (отличный сигнал) %1$d фт (рекомендуется) - %1$d км %1$d км/ч - %1$d м %1$d м (отличный сигнал) %1$d м (слабый сигнал) %1$d м (рекомендуется) - %1$d мил %1$d миль/ч %1$d мин %1$d сек diff --git a/src/main/res/values-sk/strings.xml b/src/main/res/values-sk/strings.xml index af07c48a7..76f5bb0c7 100644 --- a/src/main/res/values-sk/strings.xml +++ b/src/main/res/values-sk/strings.xml @@ -259,16 +259,12 @@ limitations under the License. min./km min./mi - %1$d st %1$d st. (výborný signál GPS) %1$d st. (odporúčané) - %1$d km %1$d km/h - %1$d m %1$d m (výborný signál GPS) %1$d m (slabý signál GPS) %1$d m (odporúčané) - %1$d mi %1$d mi/h %1$d min %1$d s diff --git a/src/main/res/values-sl/strings.xml b/src/main/res/values-sl/strings.xml index 309822f7d..4d0c6ef69 100644 --- a/src/main/res/values-sl/strings.xml +++ b/src/main/res/values-sl/strings.xml @@ -260,16 +260,12 @@ limitations under the License. min/km min/mi - %1$d čevljev %1$d čevljev (odličen signal GPS) %1$d čevljev (priporočeno) - %1$d km %1$d km/h - %1$d m %1$d m (odličen signal GPS) %1$d m (slab signal GPS) %1$d m (priporočeno) - %1$d mi %1$d mi/h %1$d min %1$d s diff --git a/src/main/res/values-sr/strings.xml b/src/main/res/values-sr/strings.xml index 1a9fd764e..8f7fc40c7 100644 --- a/src/main/res/values-sr/strings.xml +++ b/src/main/res/values-sr/strings.xml @@ -257,16 +257,12 @@ limitations under the License. мин/км мин/ми - %1$d ст %1$d ст (одличан GPS) %1$d ст (препоручено) - %1$d км %1$d км/ч - %1$d м %1$d м (одличан GPS) %1$d м (слаб GPS) %1$d м (препоручено) - %1$d ми %1$d ми/ч %1$d мин %1$d сек diff --git a/src/main/res/values-sv/strings.xml b/src/main/res/values-sv/strings.xml index 8ac53593a..c34b97735 100644 --- a/src/main/res/values-sv/strings.xml +++ b/src/main/res/values-sv/strings.xml @@ -259,16 +259,12 @@ limitations under the License. min/km min/mile - %1$d fot %1$d fot (utmärkt GPS-mottagning) %1$d fot (rekommenderas) - %1$d km %1$d km/tim - %1$d m %1$d m (utmärkt GPS-mottagning) %1$d m (dålig GPS-mottagning) %1$d m (rekommenderas) - %1$d mile %1$d mi/tim %1$d min %1$d s diff --git a/src/main/res/values-th/strings.xml b/src/main/res/values-th/strings.xml index dbd65e88f..486abd0a3 100644 --- a/src/main/res/values-th/strings.xml +++ b/src/main/res/values-th/strings.xml @@ -257,16 +257,12 @@ limitations under the License. นาที/กม. นาที/ไมล์ - %1$d ฟุต %1$d ฟุต (สัญญาณ GPS ดี) %1$d ฟุต (แนะนำ) - %1$d กม. %1$d กม./ชม. - %1$d ม. %1$d ม. (สัญญาณ GPS ดี) %1$d ม. (สัญญาณ GPS ไม่ดี) %1$d ม. (แนะนำ) - %1$d ไมล์ %1$d ไมล์/ชม. %1$d นาที %1$d วินาที diff --git a/src/main/res/values-tl/strings.xml b/src/main/res/values-tl/strings.xml index 44a1959b9..22a802c8d 100644 --- a/src/main/res/values-tl/strings.xml +++ b/src/main/res/values-tl/strings.xml @@ -259,16 +259,12 @@ limitations under the License. min/km min/mi - %1$d ft %1$d ft (malinaw na GPS) %1$d ft (inirerekomenda) - %1$d km %1$d km/h - %1$d m %1$d m (malakas ang GPS) %1$d m (mahina ang GPS) %1$d m (inirerekomenda) - %1$d mi %1$d mi/h %1$d min %1$d s diff --git a/src/main/res/values-tr/strings.xml b/src/main/res/values-tr/strings.xml index 11b663048..9a7a63946 100644 --- a/src/main/res/values-tr/strings.xml +++ b/src/main/res/values-tr/strings.xml @@ -258,16 +258,12 @@ limitations under the License. dk./km dk./mil - %1$d ft %1$d ft (mükemmel GPS) %1$d ft (önerilir) - %1$d km %1$d km/sa. - %1$d m %1$d m (mükemmel GPS) %1$d m (zayıf GPS) %1$d m (önerilen) - %1$d mil %1$d mil/sa. %1$d dk. %1$d sn. diff --git a/src/main/res/values-uk/strings.xml b/src/main/res/values-uk/strings.xml index 8232ff356..7a785ed01 100644 --- a/src/main/res/values-uk/strings.xml +++ b/src/main/res/values-uk/strings.xml @@ -259,16 +259,12 @@ limitations under the License. хв/км хв./милю - %1$d фут %1$d фут. (відмінний сигнал GPS) %1$d фут. (рекомендовано) - %1$d км %1$d км/год - %1$d м %1$d м (відмінний сигнал GPS) %1$d м (слабкий сигнал GPS) %1$d м (рекомендовано) - Миль: %1$d %1$d миль/год %1$d хв %1$d сек diff --git a/src/main/res/values-vi/strings.xml b/src/main/res/values-vi/strings.xml index 54986ca8a..c4e5e2b41 100644 --- a/src/main/res/values-vi/strings.xml +++ b/src/main/res/values-vi/strings.xml @@ -259,16 +259,12 @@ limitations under the License. phút/km phút/dặm - %1$d ft %1$d ft (tín hiệu GPS tốt) %1$d ft (được đề nghị) - %1$d km %1$d km/giờ - %1$d m %1$d m (tín hiệu GPS tốt) %1$d m (tín hiệu GPS xấu) %1$d m (được đề nghị) - %1$d dặm %1$d dặm/giờ %1$d phút %1$d giây diff --git a/src/main/res/values-zh-rHK/strings.xml b/src/main/res/values-zh-rHK/strings.xml index 8c2d069b4..ffd86d8fb 100644 --- a/src/main/res/values-zh-rHK/strings.xml +++ b/src/main/res/values-zh-rHK/strings.xml @@ -210,16 +210,12 @@ 英里/小時 分鐘/公里 分鐘/英里 - %1$d 英尺 %1$d 英尺 (GPS 訊號佳) %1$d 英尺 (建議值) - %1$d 公里 %1$d 公里/小時 - %1$d 公尺 %1$d 公尺 (GPS 訊號佳) %1$d 公尺 (GPS 訊號差) %1$d 公尺 (建議值) - %1$d 英里 %1$d 英里/小時 %1$d 分鐘 %1$d 秒 diff --git a/src/main/res/values-zh-rTW/strings.xml b/src/main/res/values-zh-rTW/strings.xml index adb8afeff..a1ffc4e33 100644 --- a/src/main/res/values-zh-rTW/strings.xml +++ b/src/main/res/values-zh-rTW/strings.xml @@ -210,16 +210,12 @@ 英里/小時 分鐘/公里 分鐘/英里 - %1$d 英尺 %1$d 英尺 (GPS 訊號佳) %1$d 英尺 (建議值) - %1$d 公里 %1$d 公里/小時 - %1$d 公尺 %1$d 公尺 (GPS 訊號佳) %1$d 公尺 (GPS 訊號差) %1$d 公尺 (建議值) - %1$d 英里 %1$d 英里/小時 %1$d 分鐘 %1$d 秒 diff --git a/src/main/res/values-zh/strings.xml b/src/main/res/values-zh/strings.xml index 5cdb99014..2a0e1a347 100644 --- a/src/main/res/values-zh/strings.xml +++ b/src/main/res/values-zh/strings.xml @@ -276,16 +276,12 @@ limitations under the License. 分钟/公里 分钟/英里 - %1$d 英尺 %1$d 英尺(GPS 信号极佳) %1$d 英尺(推荐) - %1$d 公里 %1$d 公里/小时 - %1$d 米 %1$d 米(GPS 信号极佳) %1$d 米(GPS 信号差) %1$d 米(推荐) - %1$d 英里 %1$d 英里/小时 %1$d 分钟 %1$d 秒 diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 3e15cecd7..e6c6d745b 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -529,18 +529,14 @@ limitations under the License. %1$s, %2$s - %1$d ft %1$d ft (excellent GPS) %1$d ft (recommended) - %1$d km %1$d km/h %1$.1f km/h %1$.1f km/h (recommended) - %1$d m %1$d m (excellent GPS) %1$d m (poor GPS) %1$d m (recommended) - %1$d mi %1$d mi/h %1$.1f mi/h %1$.1f mi/h (recommended)