forked from upstream-mirrors/OpenTracks
Announcements: add toggle to distance/speed unit announcement
Fixes #1805.
This commit is contained in:
+32
-27
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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() {
|
||||
}
|
||||
|
||||
@@ -250,6 +250,8 @@
|
||||
<bool name="voice_announce_average_speed_pace_default" translatable="false">true</bool>
|
||||
<string name="voice_announce_lap_speed_pace_key" translatable="false">voiceAnnounceLapSpeedPace</string>
|
||||
<bool name="voice_announce_lap_speed_pace_default" translatable="false">true</bool>
|
||||
<string name="voice_announce_unit_key" translatable="false">voiceAnnounceUnit</string>
|
||||
<bool name="voice_announce_unit_default" translatable="false">true</bool>
|
||||
|
||||
<string name="voice_announce_average_heart_rate_key" translatable="false">voiceAnnounceAverageHeartRate</string>
|
||||
<bool name="voice_announce_average_heart_rate_default" translatable="false">false</bool>
|
||||
|
||||
@@ -14,6 +14,7 @@ See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<resources>
|
||||
<string name="empty"></string>
|
||||
<string name="about_preference_title">About OpenTracks</string>
|
||||
<string name="about_description"><i>OpenTracks</i> is a sport tracking application that completely respects your privacy.</string>
|
||||
<string name="about_url">Project web page: <a href="%1$s">%1$s</a></string>
|
||||
@@ -413,6 +414,7 @@ limitations under the License.
|
||||
<string name="settings_announcements_lap_heart_rate">Lap heart rate</string>
|
||||
<string name="settings_announcements_average_speed_pace">Average speed/pace</string>
|
||||
<string name="settings_announcements_lap_speed_pace">Lap speed/pace</string>
|
||||
<string name="settings_announcements_unit">Distance/speed unit</string>
|
||||
|
||||
<!-- Custom Layout -->
|
||||
|
||||
@@ -602,6 +604,12 @@ limitations under the License.
|
||||
other {{n,number,#.0} knots}
|
||||
}
|
||||
</string>
|
||||
<string name="voiceSpeed">
|
||||
{n, plural,
|
||||
=1 {1}
|
||||
other {{n,number,#.0}}
|
||||
}
|
||||
</string>
|
||||
<string name="voice_on_device_speaker_title">Use the device\'s speaker</string>
|
||||
<string name="voice_per_kilometer">per kilometer</string>
|
||||
<string name="voice_per_mile">per mile</string>
|
||||
@@ -629,6 +637,13 @@ limitations under the License.
|
||||
other {{n,number,#.0} nautical miles}
|
||||
}
|
||||
</string>
|
||||
|
||||
<string name="voiceDistance">
|
||||
{n, plural,
|
||||
=1 {1 }
|
||||
other {{n,number,#.0}}
|
||||
}
|
||||
</string>
|
||||
<string name="average_heart_rate">Average heart rate</string>
|
||||
<string name="current_heart_rate">Current heart rate</string>
|
||||
<!-- Waypoint Type -->
|
||||
|
||||
@@ -59,6 +59,12 @@
|
||||
android:key="@string/voice_announce_lap_speed_pace_key"
|
||||
android:title="@string/settings_announcements_lap_speed_pace" />
|
||||
|
||||
<SwitchPreferenceCompat
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:defaultValue="@bool/voice_announce_unit_default"
|
||||
android:key="@string/voice_announce_unit_key"
|
||||
android:title="@string/settings_announcements_unit" />
|
||||
<SwitchPreferenceCompat
|
||||
android:defaultValue="@bool/voice_announce_average_heart_rate_default"
|
||||
android:key="@string/voice_announce_average_heart_rate_key"
|
||||
|
||||
Reference in New Issue
Block a user