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.shouldVoiceAnnounceLapSpeedPace;
|
||||||
import static de.dennisguse.opentracks.settings.PreferencesUtils.shouldVoiceAnnounceMovingTime;
|
import static de.dennisguse.opentracks.settings.PreferencesUtils.shouldVoiceAnnounceMovingTime;
|
||||||
import static de.dennisguse.opentracks.settings.PreferencesUtils.shouldVoiceAnnounceTotalDistance;
|
import static de.dennisguse.opentracks.settings.PreferencesUtils.shouldVoiceAnnounceTotalDistance;
|
||||||
|
import static de.dennisguse.opentracks.settings.PreferencesUtils.shouldVoiceAnnounceUnit;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.icu.text.MessageFormat;
|
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.SensorStatistics;
|
||||||
import de.dennisguse.opentracks.stats.TrackStatistics;
|
import de.dennisguse.opentracks.stats.TrackStatistics;
|
||||||
import de.dennisguse.opentracks.ui.intervals.IntervalStatistics;
|
import de.dennisguse.opentracks.ui.intervals.IntervalStatistics;
|
||||||
|
import de.dennisguse.opentracks.util.StringUtils;
|
||||||
|
|
||||||
class VoiceAnnouncementUtils {
|
class VoiceAnnouncementUtils {
|
||||||
|
|
||||||
@@ -44,34 +46,37 @@ class VoiceAnnouncementUtils {
|
|||||||
Speed averageMovingSpeed = trackStatistics.getAverageMovingSpeed();
|
Speed averageMovingSpeed = trackStatistics.getAverageMovingSpeed();
|
||||||
Speed currentDistancePerTime = currentInterval != null ? currentInterval.getSpeed() : null;
|
Speed currentDistancePerTime = currentInterval != null ? currentInterval.getSpeed() : null;
|
||||||
|
|
||||||
int perUnitStringId;
|
int perUnitStringId = R.string.empty;
|
||||||
int distanceId;
|
int distanceId = R.string.voiceDistance;
|
||||||
int speedId;
|
int speedId = R.string.voiceSpeed;
|
||||||
String unitDistanceTTS;
|
String unitDistanceTTS = StringUtils.EMPTY;
|
||||||
String unitSpeedTTS;
|
String unitSpeedTTS = StringUtils.EMPTY;
|
||||||
switch (unitSystem) {
|
|
||||||
case METRIC -> {
|
if(shouldVoiceAnnounceUnit()) {
|
||||||
perUnitStringId = R.string.voice_per_kilometer;
|
switch (unitSystem) {
|
||||||
distanceId = R.string.voiceDistanceKilometersPlural;
|
case METRIC -> {
|
||||||
speedId = R.string.voiceSpeedKilometersPerHourPlural;
|
perUnitStringId = R.string.voice_per_kilometer;
|
||||||
unitDistanceTTS = "kilometer";
|
distanceId = R.string.voiceDistanceKilometersPlural;
|
||||||
unitSpeedTTS = "kilometer per hour";
|
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);
|
double distanceInUnit = totalDistance.toKM_Miles(unitSystem);
|
||||||
|
|||||||
@@ -333,6 +333,10 @@ public class PreferencesUtils {
|
|||||||
return getBoolean(R.string.voice_announce_idle_key, true);
|
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() {
|
public static Duration getVoiceAnnouncementFrequency() {
|
||||||
final int DEFAULT = Integer.parseInt(resources.getString(R.string.voice_announcement_frequency_default));
|
final int DEFAULT = Integer.parseInt(resources.getString(R.string.voice_announcement_frequency_default));
|
||||||
int value = getInt(R.string.voice_announcement_frequency_key, DEFAULT);
|
int value = getInt(R.string.voice_announcement_frequency_key, DEFAULT);
|
||||||
|
|||||||
@@ -57,6 +57,7 @@ import de.dennisguse.opentracks.settings.UnitSystem;
|
|||||||
public class StringUtils {
|
public class StringUtils {
|
||||||
|
|
||||||
private static final String TAG = StringUtils.class.getSimpleName();
|
private static final String TAG = StringUtils.class.getSimpleName();
|
||||||
|
public static final String EMPTY = "";
|
||||||
|
|
||||||
private StringUtils() {
|
private StringUtils() {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -250,6 +250,8 @@
|
|||||||
<bool name="voice_announce_average_speed_pace_default" translatable="false">true</bool>
|
<bool name="voice_announce_average_speed_pace_default" translatable="false">true</bool>
|
||||||
<string name="voice_announce_lap_speed_pace_key" translatable="false">voiceAnnounceLapSpeedPace</string>
|
<string name="voice_announce_lap_speed_pace_key" translatable="false">voiceAnnounceLapSpeedPace</string>
|
||||||
<bool name="voice_announce_lap_speed_pace_default" translatable="false">true</bool>
|
<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>
|
<string name="voice_announce_average_heart_rate_key" translatable="false">voiceAnnounceAverageHeartRate</string>
|
||||||
<bool name="voice_announce_average_heart_rate_default" translatable="false">false</bool>
|
<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.
|
limitations under the License.
|
||||||
-->
|
-->
|
||||||
<resources>
|
<resources>
|
||||||
|
<string name="empty"></string>
|
||||||
<string name="about_preference_title">About OpenTracks</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_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>
|
<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_lap_heart_rate">Lap heart rate</string>
|
||||||
<string name="settings_announcements_average_speed_pace">Average speed/pace</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_lap_speed_pace">Lap speed/pace</string>
|
||||||
|
<string name="settings_announcements_unit">Distance/speed unit</string>
|
||||||
|
|
||||||
<!-- Custom Layout -->
|
<!-- Custom Layout -->
|
||||||
|
|
||||||
@@ -602,6 +604,12 @@ limitations under the License.
|
|||||||
other {{n,number,#.0} knots}
|
other {{n,number,#.0} knots}
|
||||||
}
|
}
|
||||||
</string>
|
</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_on_device_speaker_title">Use the device\'s speaker</string>
|
||||||
<string name="voice_per_kilometer">per kilometer</string>
|
<string name="voice_per_kilometer">per kilometer</string>
|
||||||
<string name="voice_per_mile">per mile</string>
|
<string name="voice_per_mile">per mile</string>
|
||||||
@@ -629,6 +637,13 @@ limitations under the License.
|
|||||||
other {{n,number,#.0} nautical miles}
|
other {{n,number,#.0} nautical miles}
|
||||||
}
|
}
|
||||||
</string>
|
</string>
|
||||||
|
|
||||||
|
<string name="voiceDistance">
|
||||||
|
{n, plural,
|
||||||
|
=1 {1 }
|
||||||
|
other {{n,number,#.0}}
|
||||||
|
}
|
||||||
|
</string>
|
||||||
<string name="average_heart_rate">Average heart rate</string>
|
<string name="average_heart_rate">Average heart rate</string>
|
||||||
<string name="current_heart_rate">Current heart rate</string>
|
<string name="current_heart_rate">Current heart rate</string>
|
||||||
<!-- Waypoint Type -->
|
<!-- Waypoint Type -->
|
||||||
|
|||||||
@@ -59,6 +59,12 @@
|
|||||||
android:key="@string/voice_announce_lap_speed_pace_key"
|
android:key="@string/voice_announce_lap_speed_pace_key"
|
||||||
android:title="@string/settings_announcements_lap_speed_pace" />
|
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
|
<SwitchPreferenceCompat
|
||||||
android:defaultValue="@bool/voice_announce_average_heart_rate_default"
|
android:defaultValue="@bool/voice_announce_average_heart_rate_default"
|
||||||
android:key="@string/voice_announce_average_heart_rate_key"
|
android:key="@string/voice_announce_average_heart_rate_key"
|
||||||
|
|||||||
Reference in New Issue
Block a user