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.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.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 @@ static Spannable createStatistics(Context context, TrackStatistics trackStatisti 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"; - } - 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"; + 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"); } - 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 static boolean shouldVoiceAnnouncementIdle() { 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 @@ 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" /> +