diff --git a/src/main/java/de/dennisguse/opentracks/services/announcement/VoiceAnnouncementUtils.java b/src/main/java/de/dennisguse/opentracks/services/announcement/VoiceAnnouncementUtils.java
index 05179f1b7..1dfeedf36 100644
--- a/src/main/java/de/dennisguse/opentracks/services/announcement/VoiceAnnouncementUtils.java
+++ b/src/main/java/de/dennisguse/opentracks/services/announcement/VoiceAnnouncementUtils.java
@@ -7,6 +7,7 @@ import static de.dennisguse.opentracks.settings.PreferencesUtils.shouldVoiceAnno
import static de.dennisguse.opentracks.settings.PreferencesUtils.shouldVoiceAnnounceLapSpeedPace;
import static de.dennisguse.opentracks.settings.PreferencesUtils.shouldVoiceAnnounceMovingTime;
import static de.dennisguse.opentracks.settings.PreferencesUtils.shouldVoiceAnnounceTotalDistance;
+import static de.dennisguse.opentracks.settings.PreferencesUtils.shouldVoiceAnnounceUnit;
import android.content.Context;
import android.icu.text.MessageFormat;
@@ -27,6 +28,7 @@ import de.dennisguse.opentracks.settings.UnitSystem;
import de.dennisguse.opentracks.stats.SensorStatistics;
import de.dennisguse.opentracks.stats.TrackStatistics;
import de.dennisguse.opentracks.ui.intervals.IntervalStatistics;
+import de.dennisguse.opentracks.util.StringUtils;
class VoiceAnnouncementUtils {
@@ -44,34 +46,37 @@ class VoiceAnnouncementUtils {
Speed averageMovingSpeed = trackStatistics.getAverageMovingSpeed();
Speed currentDistancePerTime = currentInterval != null ? currentInterval.getSpeed() : null;
- int perUnitStringId;
- int distanceId;
- int speedId;
- String unitDistanceTTS;
- String unitSpeedTTS;
- switch (unitSystem) {
- case METRIC -> {
- perUnitStringId = R.string.voice_per_kilometer;
- distanceId = R.string.voiceDistanceKilometersPlural;
- speedId = R.string.voiceSpeedKilometersPerHourPlural;
- unitDistanceTTS = "kilometer";
- unitSpeedTTS = "kilometer per hour";
+ int perUnitStringId = R.string.empty;
+ int distanceId = R.string.voiceDistance;
+ int speedId = R.string.voiceSpeed;
+ String unitDistanceTTS = StringUtils.EMPTY;
+ String unitSpeedTTS = StringUtils.EMPTY;
+
+ if(shouldVoiceAnnounceUnit()) {
+ switch (unitSystem) {
+ case METRIC -> {
+ perUnitStringId = R.string.voice_per_kilometer;
+ distanceId = R.string.voiceDistanceKilometersPlural;
+ speedId = R.string.voiceSpeedKilometersPerHourPlural;
+ unitDistanceTTS = "kilometer";
+ unitSpeedTTS = "kilometer per hour";
+ }
+ case IMPERIAL_FEET, IMPERIAL_METER -> {
+ perUnitStringId = R.string.voice_per_mile;
+ distanceId = R.string.voiceDistanceMilesPlural;
+ speedId = R.string.voiceSpeedMilesPerHourPlural;
+ unitDistanceTTS = "mile";
+ unitSpeedTTS = "mile per hour";
+ }
+ case NAUTICAL_IMPERIAL -> {
+ perUnitStringId = R.string.voice_per_nautical_mile;
+ distanceId = R.string.voiceDistanceNauticalMilesPlural;
+ speedId = R.string.voiceSpeedMKnotsPlural;
+ unitDistanceTTS = "nautical mile";
+ unitSpeedTTS = "knots";
+ }
+ default -> throw new RuntimeException("Not implemented");
}
- case IMPERIAL_FEET, IMPERIAL_METER -> {
- perUnitStringId = R.string.voice_per_mile;
- distanceId = R.string.voiceDistanceMilesPlural;
- speedId = R.string.voiceSpeedMilesPerHourPlural;
- unitDistanceTTS = "mile";
- unitSpeedTTS = "mile per hour";
- }
- case NAUTICAL_IMPERIAL -> {
- perUnitStringId = R.string.voice_per_nautical_mile;
- distanceId = R.string.voiceDistanceNauticalMilesPlural;
- speedId = R.string.voiceSpeedMKnotsPlural;
- unitDistanceTTS = "nautical mile";
- unitSpeedTTS = "knots";
- }
- default -> throw new RuntimeException("Not implemented");
}
double distanceInUnit = totalDistance.toKM_Miles(unitSystem);
diff --git a/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java b/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java
index 9263de001..d12760e1c 100644
--- a/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java
+++ b/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java
@@ -333,6 +333,10 @@ public class PreferencesUtils {
return getBoolean(R.string.voice_announce_idle_key, true);
}
+ public static boolean shouldVoiceAnnounceUnit() {
+ return getBoolean(R.string.voice_announce_unit_key, true);
+ }
+
public static Duration getVoiceAnnouncementFrequency() {
final int DEFAULT = Integer.parseInt(resources.getString(R.string.voice_announcement_frequency_default));
int value = getInt(R.string.voice_announcement_frequency_key, DEFAULT);
diff --git a/src/main/java/de/dennisguse/opentracks/util/StringUtils.java b/src/main/java/de/dennisguse/opentracks/util/StringUtils.java
index 294650ecc..855f287f4 100644
--- a/src/main/java/de/dennisguse/opentracks/util/StringUtils.java
+++ b/src/main/java/de/dennisguse/opentracks/util/StringUtils.java
@@ -57,6 +57,7 @@ import de.dennisguse.opentracks.settings.UnitSystem;
public class StringUtils {
private static final String TAG = StringUtils.class.getSimpleName();
+ public static final String EMPTY = "";
private StringUtils() {
}
diff --git a/src/main/res/values/settings.xml b/src/main/res/values/settings.xml
index 2c276fec6..a3276d42f 100644
--- a/src/main/res/values/settings.xml
+++ b/src/main/res/values/settings.xml
@@ -250,6 +250,8 @@
true
voiceAnnounceLapSpeedPace
true
+ voiceAnnounceUnit
+ true
voiceAnnounceAverageHeartRate
false
diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml
index 0e0623147..ea8047449 100644
--- a/src/main/res/values/strings.xml
+++ b/src/main/res/values/strings.xml
@@ -14,6 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License.
-->
+
About OpenTracks
OpenTracks is a sport tracking application that completely respects your privacy.
Project web page: %1$s
@@ -413,6 +414,7 @@ limitations under the License.
Lap heart rate
Average speed/pace
Lap speed/pace
+ Distance/speed unit
@@ -602,6 +604,12 @@ limitations under the License.
other {{n,number,#.0} knots}
}
+
+ {n, plural,
+ =1 {1}
+ other {{n,number,#.0}}
+ }
+
Use the device\'s speaker
per kilometer
per mile
@@ -629,6 +637,13 @@ limitations under the License.
other {{n,number,#.0} nautical miles}
}
+
+
+ {n, plural,
+ =1 {1 }
+ other {{n,number,#.0}}
+ }
+
Average heart rate
Current heart rate
diff --git a/src/main/res/xml/settings_announcements.xml b/src/main/res/xml/settings_announcements.xml
index 3e13ffb97..bb12c55c3 100644
--- a/src/main/res/xml/settings_announcements.xml
+++ b/src/main/res/xml/settings_announcements.xml
@@ -59,6 +59,12 @@
android:key="@string/voice_announce_lap_speed_pace_key"
android:title="@string/settings_announcements_lap_speed_pace" />
+