From 8f2d1722adff94c45ef17f79984fd91c4f3c90a8 Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Sun, 29 Aug 2021 20:22:31 +0200 Subject: [PATCH] Announcements: can be triggered by time and distance (instead of either). Fixes #921. --- .../TrackRecordingServiceTestLooper.java | 28 ------ .../tasks/VoiceAnnouncementManagerTest.java | 32 +++++- .../opentracks/TrackListActivity.java | 2 +- .../opentracks/TrackRecordedActivity.java | 2 +- .../opentracks/TrackRecordingActivity.java | 2 +- .../opentracks/fragments/ChartFragment.java | 2 +- .../services/TrackRecordingService.java | 13 +-- .../tasks/VoiceAnnouncementManager.java | 99 +++++++------------ .../opentracks/settings/SettingsActivity.java | 9 +- .../opentracks/util/PreferencesUtils.java | 27 ++++- .../opentracks/util/StringUtils.java | 30 +++--- src/main/res/values-ar/strings.xml | 1 - src/main/res/values-b+en+001/strings.xml | 1 - src/main/res/values-b+es+419/strings.xml | 1 - src/main/res/values-bg/strings.xml | 1 - src/main/res/values-ca/strings.xml | 1 - src/main/res/values-cs/strings.xml | 1 - src/main/res/values-da/strings.xml | 1 - src/main/res/values-de/strings.xml | 1 - src/main/res/values-el/strings.xml | 1 - src/main/res/values-es/strings.xml | 1 - src/main/res/values-et/strings.xml | 1 - src/main/res/values-eu/strings.xml | 1 - src/main/res/values-fa/strings.xml | 1 - src/main/res/values-fi/strings.xml | 1 - src/main/res/values-fr-rCA/strings.xml | 1 - src/main/res/values-fr-rCH/strings.xml | 1 - src/main/res/values-fr/strings.xml | 1 - src/main/res/values-gl/strings.xml | 1 - src/main/res/values-hi/strings.xml | 1 - src/main/res/values-hr/strings.xml | 1 - src/main/res/values-hu/strings.xml | 1 - src/main/res/values-in/strings.xml | 1 - src/main/res/values-it/strings.xml | 1 - src/main/res/values-iw/strings.xml | 1 - src/main/res/values-ja/strings.xml | 1 - src/main/res/values-ko/strings.xml | 1 - src/main/res/values-lt/strings.xml | 1 - src/main/res/values-lv/strings.xml | 1 - src/main/res/values-mo/strings.xml | 1 - src/main/res/values-ms/strings.xml | 1 - src/main/res/values-nb/strings.xml | 1 - src/main/res/values-nl/strings.xml | 1 - src/main/res/values-pl/strings.xml | 1 - src/main/res/values-pt-rBR/strings.xml | 1 - src/main/res/values-pt-rPT/strings.xml | 1 - src/main/res/values-pt/strings.xml | 1 - src/main/res/values-ro/strings.xml | 1 - src/main/res/values-ru/strings.xml | 1 - src/main/res/values-sk/strings.xml | 1 - src/main/res/values-sl/strings.xml | 1 - src/main/res/values-sr/strings.xml | 1 - src/main/res/values-sv/strings.xml | 1 - src/main/res/values-th/strings.xml | 1 - src/main/res/values-tl/strings.xml | 1 - src/main/res/values-tr/strings.xml | 1 - src/main/res/values-uk/strings.xml | 1 - src/main/res/values-vi/strings.xml | 1 - src/main/res/values-zh-rHK/strings.xml | 1 - src/main/res/values-zh-rTW/strings.xml | 1 - src/main/res/values-zh/strings.xml | 1 - src/main/res/values/settings.xml | 35 ++++--- src/main/res/values/settings_deprecated.xml | 1 - src/main/res/values/strings.xml | 6 +- src/main/res/xml/settings.xml | 36 ++++--- 65 files changed, 169 insertions(+), 205 deletions(-) diff --git a/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceTestLooper.java b/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceTestLooper.java index 2ea29eeb6..30a208e7c 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceTestLooper.java +++ b/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceTestLooper.java @@ -107,34 +107,6 @@ public class TrackRecordingServiceTestLooper { fullRecordingSession(); } - @MediumTest - @Test - public void testWithProperties_voiceFrequencyDefault() throws TimeoutException { - SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(context).edit(); - editor.putInt(context.getString(R.string.voice_frequency_key), Integer.parseInt(context.getResources().getString(R.string.voice_frequency_default))); - editor.commit(); - fullRecordingSession(); - } - - @MediumTest - @Test - public void testWithProperties_voiceFrequencyByDistance() throws TimeoutException { - SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(context).edit(); - editor.putInt(context.getString(R.string.voice_frequency_key), -1); - editor.commit(); - fullRecordingSession(); - } - - @MediumTest - @Test - public void testWithProperties_voiceFrequencyByTime() throws TimeoutException { - SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(context).edit(); - editor.putInt(context.getString(R.string.voice_frequency_key), 1); - editor.commit(); - fullRecordingSession(); - } - - @MediumTest @Test public void testWithProperties_maxRecordingDistanceDefault() throws TimeoutException { diff --git a/src/androidTest/java/de/dennisguse/opentracks/services/tasks/VoiceAnnouncementManagerTest.java b/src/androidTest/java/de/dennisguse/opentracks/services/tasks/VoiceAnnouncementManagerTest.java index 582c55986..06d1898f4 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/services/tasks/VoiceAnnouncementManagerTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/services/tasks/VoiceAnnouncementManagerTest.java @@ -15,6 +15,7 @@ import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; +import java.time.Duration; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; @@ -54,16 +55,37 @@ public class VoiceAnnouncementManagerTest { .getService(); VoiceAnnouncementManager voiceAnnouncementManager = new VoiceAnnouncementManager(service); - voiceAnnouncementManager.setMetricUnits(true); - voiceAnnouncementManager.setTaskFrequency(-5); + voiceAnnouncementManager.setFrequency(Distance.ofKilometer(5)); // when TrackStatistics statistics = new TrackStatistics(); - statistics.setTotalDistance(Distance.of(13000)); - assertEquals(Distance.of(15000), voiceAnnouncementManager.calculateNextTaskDistance(statistics)); + statistics.setTotalDistance(Distance.ofKilometer(13)); + voiceAnnouncementManager.restore(statistics); + assertEquals(Distance.of(15000), voiceAnnouncementManager.getNextTotalDistance()); statistics.setTotalDistance(Distance.of(15100)); - assertEquals(Distance.of(20000), voiceAnnouncementManager.calculateNextTaskDistance(statistics)); + voiceAnnouncementManager.restore(statistics); + assertEquals(Distance.of(20000), voiceAnnouncementManager.getNextTotalDistance()); + } + + @Test + public void calculateNextTotalTime() throws TimeoutException { + // given + TrackRecordingService service = ((TrackRecordingService.Binder) mServiceRule.bindService(new Intent(context, TrackRecordingService.class))) + .getService(); + + VoiceAnnouncementManager voiceAnnouncementManager = new VoiceAnnouncementManager(service); + voiceAnnouncementManager.setFrequency(Duration.ofSeconds(5)); + + // when + TrackStatistics statistics = new TrackStatistics(); + statistics.setTotalTime(Duration.ofSeconds(91)); + voiceAnnouncementManager.restore(statistics); + assertEquals(Duration.ofSeconds(95), voiceAnnouncementManager.getNextTotalTime()); + + statistics.setTotalTime(Duration.ofSeconds(95)); + voiceAnnouncementManager.restore(statistics); + assertEquals(Duration.ofSeconds(100), voiceAnnouncementManager.getNextTotalTime()); } } \ No newline at end of file diff --git a/src/main/java/de/dennisguse/opentracks/TrackListActivity.java b/src/main/java/de/dennisguse/opentracks/TrackListActivity.java index b16a3b07e..71527b080 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackListActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackListActivity.java @@ -77,7 +77,7 @@ public class TrackListActivity extends AbstractTrackDeleteActivity implements Co private static final String TAG = TrackListActivity.class.getSimpleName(); - // The following are set in onCreate + // The following are setFrequency in onCreate private SharedPreferences sharedPreferences; private TrackRecordingServiceConnection trackRecordingServiceConnection; private ResourceCursorAdapter resourceCursorAdapter; diff --git a/src/main/java/de/dennisguse/opentracks/TrackRecordedActivity.java b/src/main/java/de/dennisguse/opentracks/TrackRecordedActivity.java index f832e46d4..9c15a7152 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackRecordedActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackRecordedActivity.java @@ -66,7 +66,7 @@ public class TrackRecordedActivity extends AbstractTrackDeleteActivity implement private static final String CURRENT_TAB_TAG_KEY = "current_tab_tag_key"; - // The following are set in onCreate. + // The following are setFrequency in onCreate. private ContentProviderUtils contentProviderUtils; private SharedPreferences sharedPreferences; private TrackDataHub trackDataHub; diff --git a/src/main/java/de/dennisguse/opentracks/TrackRecordingActivity.java b/src/main/java/de/dennisguse/opentracks/TrackRecordingActivity.java index 29faca1a8..b042c53b6 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackRecordingActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackRecordingActivity.java @@ -51,7 +51,7 @@ public class TrackRecordingActivity extends AbstractActivity implements ChooseAc private static final String CURRENT_TAB_TAG_KEY = "current_tab_tag_key"; - // The following are set in onCreate + // The following are setFrequency in onCreate private ContentProviderUtils contentProviderUtils; private SharedPreferences sharedPreferences; private TrackRecordingServiceConnection trackRecordingServiceConnection; diff --git a/src/main/java/de/dennisguse/opentracks/fragments/ChartFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/ChartFragment.java index 775c0ee8c..38172c201 100644 --- a/src/main/java/de/dennisguse/opentracks/fragments/ChartFragment.java +++ b/src/main/java/de/dennisguse/opentracks/fragments/ChartFragment.java @@ -108,7 +108,7 @@ public class ChartFragment extends Fragment implements TrackDataListener { }; /** - * A runnable that will set the orange pointer as appropriate and redraw. + * A runnable that will setFrequency the orange pointer as appropriate and redraw. */ private final Runnable updateChart = new Runnable() { @Override diff --git a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java index d3e84f47f..bc29f8e80 100644 --- a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java +++ b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java @@ -73,7 +73,7 @@ public class TrackRecordingService extends Service implements TrackPointCreator. public static final RecordingData NOT_RECORDING = new RecordingData(null, null, null); public static final GpsStatusValue STATUS_GPS_DEFAULT = GpsStatusValue.GPS_NONE; - // The following variables are set in onCreate: + // The following variables are setFrequency in onCreate: private VoiceAnnouncementManager voiceAnnouncementManager; private TrackRecordingServiceNotificationManager notificationManager; @@ -104,20 +104,21 @@ public class TrackRecordingService extends Service implements TrackPointCreator. Context context = TrackRecordingService.this; if (PreferencesUtils.isKey(context, R.string.stats_units_key, key)) { boolean metricUnits = PreferencesUtils.isMetricUnits(sharedPreferences, context); - voiceAnnouncementManager.setMetricUnits(metricUnits); notificationManager.setMetricUnits(metricUnits); } - if (PreferencesUtils.isKey(context, R.string.voice_frequency_key, key)) { - voiceAnnouncementManager.setTaskFrequency(PreferencesUtils.getVoiceFrequency(sharedPreferences, context)); + if (PreferencesUtils.isKey(context, R.string.voice_announcement_frequency_key, key)) { + voiceAnnouncementManager.setFrequency(PreferencesUtils.getVoiceAnnouncementFrequency(sharedPreferences, context)); + } + if (PreferencesUtils.isKey(context, new int[]{R.string.voice_announcement_distance_key, R.string.stats_units_key}, key)) { + voiceAnnouncementManager.setFrequency(PreferencesUtils.getVoiceAnnouncementDistance(sharedPreferences, context)); } - trackPointCreator.onSharedPreferenceChanged(sharedPreferences, key); trackRecordingManager.onSharedPreferenceChanged(sharedPreferences, key); } }; - // The following variables are set when recording: + // The following variables are setFrequency when recording: private WakeLock wakeLock; private final Binder binder = new Binder(); diff --git a/src/main/java/de/dennisguse/opentracks/services/tasks/VoiceAnnouncementManager.java b/src/main/java/de/dennisguse/opentracks/services/tasks/VoiceAnnouncementManager.java index 64e90ed30..b9fa9f920 100644 --- a/src/main/java/de/dennisguse/opentracks/services/tasks/VoiceAnnouncementManager.java +++ b/src/main/java/de/dennisguse/opentracks/services/tasks/VoiceAnnouncementManager.java @@ -40,48 +40,35 @@ public class VoiceAnnouncementManager { private final TrackRecordingService trackRecordingService; - private final int TASK_FREQUENCY_OFF; - /** - * The task frequency. - * A positive value is a time frequency (minutes). - * A negative value is a distance frequency (km or mi). - * A zero value is to turn off periodic task. - */ - private int taskFrequency; - private VoiceAnnouncement voiceAnnouncement; - private boolean metricUnits; - private TrackStatistics trackStatistics; private static final Distance DISTANCE_OFF = Distance.of(Double.MAX_VALUE); + private Distance distanceFrequency = DISTANCE_OFF; + @NonNull private Distance nextTotalDistance = DISTANCE_OFF; private static final Duration TOTALTIME_OFF = Duration.ofMillis(Long.MAX_VALUE); + private Duration totalTimeFrequency = TOTALTIME_OFF; + @NonNull private Duration nextTotalTime = TOTALTIME_OFF; public VoiceAnnouncementManager(@NonNull TrackRecordingService trackRecordingService) { this.trackRecordingService = trackRecordingService; - - TASK_FREQUENCY_OFF = Integer.parseInt(trackRecordingService.getString(R.string.frequency_off)); - taskFrequency = TASK_FREQUENCY_OFF; } public void restore(@Nullable TrackStatistics trackStatistics) { - if (taskFrequency == TASK_FREQUENCY_OFF) { - Log.d(TAG, "Task frequency is off."); - return; - } - voiceAnnouncement = new VoiceAnnouncement(trackRecordingService); voiceAnnouncement.start(); - if (isTimeFrequency()) { - nextTotalTime = trackStatistics != null ? calculateNextDuration(trackStatistics) : TOTALTIME_OFF; - } else { - // For distance periodic task - updateNextTaskDistance(trackStatistics); + this.trackStatistics = trackStatistics; + + if (!totalTimeFrequency.isZero()) { + nextTotalTime = calculateNextDuration(); + } + if (!distanceFrequency.isZero()) { + nextTotalDistance = calculateNextTaskDistance(); } } @@ -90,14 +77,15 @@ public class VoiceAnnouncementManager { Log.e(TAG, "Cannot update when in status shutdown."); return; } + boolean announce = false; this.trackStatistics = track.getTrackStatistics(); if (trackStatistics.getTotalDistance().greaterThan(nextTotalDistance)) { - updateNextTaskDistance(trackStatistics); + nextTotalDistance = calculateNextTaskDistance(); announce = true; } if (!trackStatistics.getTotalTime().minus(nextTotalTime).isNegative()) { - nextTotalTime = calculateNextDuration(trackStatistics); + nextTotalTime = calculateNextDuration(); announce = true; } @@ -113,59 +101,48 @@ public class VoiceAnnouncementManager { } } - public void setTaskFrequency(int taskFrequency) { - this.taskFrequency = taskFrequency; + public void setFrequency(Duration frequency) { + this.totalTimeFrequency = frequency; restore(this.trackStatistics); } - public void setMetricUnits(boolean metricUnits) { - this.metricUnits = metricUnits; - updateNextTaskDistance(this.trackStatistics); - } - - private void updateNextTaskDistance(TrackStatistics trackStatistics) { - if (!isDistanceFrequency()) { - nextTotalDistance = DISTANCE_OFF; - Log.d(TAG, "SplitManager: Distance splits disabled."); - return; - } - - if (trackStatistics == null) { - return; - } - - nextTotalDistance = calculateNextTaskDistance(trackStatistics); + public void setFrequency(Distance frequency) { + this.distanceFrequency = frequency; + restore(this.trackStatistics); } @VisibleForTesting - public Distance calculateNextTaskDistance(@NonNull TrackStatistics trackStatistics) { + public Distance calculateNextTaskDistance() { + if (trackStatistics == null) { + return DISTANCE_OFF; + } + Distance distance = trackStatistics.getTotalDistance(); - Distance announcementInterval = Distance.one(metricUnits).multipliedBy(Math.abs(taskFrequency)); - int index = (int) (distance.dividedBy(announcementInterval)); - return announcementInterval.multipliedBy(index + 1); + int index = (int) (distance.dividedBy(distanceFrequency)); + return distanceFrequency.multipliedBy(index + 1); } - private Duration calculateNextDuration(@Nullable TrackStatistics trackStatistics) { + private Duration calculateNextDuration() { if (trackStatistics == null) { - return null; + return TOTALTIME_OFF; } - if (!isTimeFrequency()) { - throw new RuntimeException("Using distance frequency as time frequency is impossible."); - } Duration totalTime = trackStatistics.getTotalTime(); - Duration interval = Duration.ofMinutes(taskFrequency); - Duration intervalMod = Duration.ofMillis(trackStatistics.getTotalTime().toMillis() % interval.toMillis()); + Duration intervalMod = Duration.ofMillis(trackStatistics.getTotalTime().toMillis() % totalTimeFrequency.toMillis()); - return totalTime.plus(interval.minus(intervalMod)); + return totalTime.plus(totalTimeFrequency.minus(intervalMod)); } - private boolean isTimeFrequency() { - return taskFrequency > 0; + @VisibleForTesting + @NonNull + public Duration getNextTotalTime() { + return nextTotalTime; } - private boolean isDistanceFrequency() { - return taskFrequency < 0; + @VisibleForTesting + @NonNull + public Distance getNextTotalDistance() { + return nextTotalDistance; } } diff --git a/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java b/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java index df4311c88..0d07447ba 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java +++ b/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java @@ -3,12 +3,10 @@ package de.dennisguse.opentracks.settings; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; -import android.speech.tts.TextToSpeech; import android.util.Log; import android.view.View; import android.widget.Toast; -import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.widget.Toolbar; import androidx.documentfile.provider.DocumentFile; @@ -286,8 +284,11 @@ public class SettingsActivity extends AbstractActivity implements ChooseActivity private void updateUnits() { boolean metricUnits = PreferencesUtils.isMetricUnits(sharedPreferences, getActivity()); - ListPreference voiceFrequency = findPreference(getString(R.string.voice_frequency_key)); - voiceFrequency.setEntries(StringUtils.getFrequencyOptions(getActivity(), metricUnits)); + ListPreference voiceFrequency = findPreference(getString(R.string.voice_announcement_frequency_key)); + voiceFrequency.setEntries(StringUtils.getAnnouncementFrequency(getActivity())); + + ListPreference voiceDistance = findPreference(getString(R.string.voice_announcement_distance_key)); + voiceDistance.setEntries(StringUtils.getAnnouncementDistance(getActivity(), metricUnits)); ListPreference minRecordingInterval = findPreference(getString(R.string.min_recording_interval_key)); minRecordingInterval.setEntries(PreferenceHelper.getMinRecordingIntervalEntries(getActivity())); diff --git a/src/main/java/de/dennisguse/opentracks/util/PreferencesUtils.java b/src/main/java/de/dennisguse/opentracks/util/PreferencesUtils.java index 89ee40110..792e59532 100644 --- a/src/main/java/de/dennisguse/opentracks/util/PreferencesUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/PreferencesUtils.java @@ -90,6 +90,15 @@ public class PreferencesUtils { return key == null || key.equals(getKey(context, keyId)); } + public static boolean isKey(Context context, int[] keyIds, String key) { + for(int keyId : keyIds) { + if (isKey(context, keyId, key)) { + return true; + } + } + return false; + } + private static boolean getBoolean(SharedPreferences sharedPreferences, Context context, int keyId, boolean defaultValue) { return sharedPreferences.getBoolean(getKey(context, keyId), defaultValue); } @@ -216,13 +225,23 @@ public class PreferencesUtils { return getBoolean(sharedPreferences, context, R.string.stats_fullscreen_while_recording_key, DEFAULT); } - public static int getVoiceFrequency(SharedPreferences sharedPreferences, Context context) { - final int VOICE_FREQUENCY_DEFAULT = Integer.parseInt(context.getResources().getString(R.string.voice_frequency_default)); - return getInt(sharedPreferences, context, R.string.voice_frequency_key, VOICE_FREQUENCY_DEFAULT); + public static Duration getVoiceAnnouncementFrequency(SharedPreferences sharedPreferences, Context context) { + final int DEFAULT = Integer.parseInt(context.getResources().getString(R.string.voice_announcement_frequency_default)); + int value = getInt(sharedPreferences, context, R.string.voice_announcement_frequency_key, DEFAULT); + return Duration.ofSeconds(value); + } + + /** + * @return Result depends on isMetricUnits + */ + public static Distance getVoiceAnnouncementDistance(SharedPreferences sharedPreferences, Context context) { + final float DEFAULT = Integer.parseInt(context.getResources().getString(R.string.voice_announcement_distance_default)); + float value = getFloat(sharedPreferences, context, R.string.voice_announcement_distance_key, DEFAULT); + return Distance.one(isMetricUnits(sharedPreferences, context)).multipliedBy(value); } public static float getVoiceSpeedRate(SharedPreferences sharedPreferences, Context context) { - final float DEFAULT = Float.parseFloat(context.getResources().getString(R.string.voice_frequency_default)); + final float DEFAULT = Float.parseFloat(context.getResources().getString(R.string.voice_speed_rate_default)); return getFloat(sharedPreferences, context, R.string.voice_speed_rate_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 6a4b1e697..9fd5dd3e5 100644 --- a/src/main/java/de/dennisguse/opentracks/util/StringUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/StringUtils.java @@ -292,28 +292,34 @@ public class StringUtils { } } - /** - * Gets the frequency display options. - * - * @param context the context - * @param metricUnits true to display in metric units - */ - public static String[] getFrequencyOptions(Context context, boolean metricUnits) { - String[] values = context.getResources().getStringArray(R.array.frequency_values); + public static String[] getAnnouncementFrequency(Context context) { + String[] values = context.getResources().getStringArray(R.array.voice_announcement_frequency_values); String[] options = new String[values.length]; for (int i = 0; i < values.length; i++) { - int value = Integer.parseInt(values[i]); - if (context.getString(R.string.frequency_off).equals(values[i])) { + if (context.getString(R.string.announcement_off).equals(values[i])) { options[i] = context.getString(R.string.value_off); - } else if (value < 0) { - options[i] = context.getString(metricUnits ? R.string.value_integer_kilometer : R.string.value_integer_mile, Math.abs(value)); } else { + int value = Integer.parseInt(values[i]); options[i] = context.getString(R.string.value_integer_minute, value); } } return options; } + public static String[] getAnnouncementDistance(Context context, boolean metricUnits) { + String[] values = context.getResources().getStringArray(R.array.voice_announcement_distance_values); + String[] options = new String[values.length]; + for (int i = 0; i < values.length; i++) { + if (context.getString(R.string.announcement_off).equals(values[i])) { + options[i] = context.getString(R.string.value_off); + } else { + int value = Integer.parseInt(values[i]); + options[i] = context.getString(metricUnits ? R.string.value_integer_kilometer : R.string.value_integer_mile, value); + } + } + return options; + } + /** * @return the formatted altitude_m (or null) and it's unit as {@link Pair} */ diff --git a/src/main/res/values-ar/strings.xml b/src/main/res/values-ar/strings.xml index 87e731fc6..c228de41a 100644 --- a/src/main/res/values-ar/strings.xml +++ b/src/main/res/values-ar/strings.xml @@ -177,7 +177,6 @@ limitations under the License. إظهار على الخريطة بدء GPS إيقاف GPS - معدل الصوت خدمة التسجيل diff --git a/src/main/res/values-b+en+001/strings.xml b/src/main/res/values-b+en+001/strings.xml index 0a5bb4d62..d8815bc5f 100644 --- a/src/main/res/values-b+en+001/strings.xml +++ b/src/main/res/values-b+en+001/strings.xml @@ -144,7 +144,6 @@ Show on map Start GPS Stop GPS - Voice frequency Recording service Battery level Cadence diff --git a/src/main/res/values-b+es+419/strings.xml b/src/main/res/values-b+es+419/strings.xml index a7c6c65f3..0ee5e028f 100644 --- a/src/main/res/values-b+es+419/strings.xml +++ b/src/main/res/values-b+es+419/strings.xml @@ -145,7 +145,6 @@ Mostrar en el mapa Iniciar GPS Detener GPS - Frecuencia de voz Reanudar ruta Servicio de grabación Nivel de la batería diff --git a/src/main/res/values-bg/strings.xml b/src/main/res/values-bg/strings.xml index fc4be18b3..7c3269548 100644 --- a/src/main/res/values-bg/strings.xml +++ b/src/main/res/values-bg/strings.xml @@ -173,7 +173,6 @@ limitations under the License. Показване на картата Стартиране на GPS Спиране на GPS - Честота на гласа Услуга за запис diff --git a/src/main/res/values-ca/strings.xml b/src/main/res/values-ca/strings.xml index a4e580874..c2f1a4465 100644 --- a/src/main/res/values-ca/strings.xml +++ b/src/main/res/values-ca/strings.xml @@ -173,7 +173,6 @@ limitations under the License. Mostra-ho al mapa Activa el GPS Desactiva el GPS - Freqüència de veu Servei d\'enregistrament diff --git a/src/main/res/values-cs/strings.xml b/src/main/res/values-cs/strings.xml index a5edad5fc..92182988c 100644 --- a/src/main/res/values-cs/strings.xml +++ b/src/main/res/values-cs/strings.xml @@ -227,7 +227,6 @@ Pokud zařízení GPS hlásí nepřesná data (např. Polohu, rychlost, nadmořs Zobrazit na mapě Spustit GPS Ukončit GPS - Frekvence hlasových oznámení Obnovit měření Služba pro záznam diff --git a/src/main/res/values-da/strings.xml b/src/main/res/values-da/strings.xml index 76564e94e..3d941c9a9 100644 --- a/src/main/res/values-da/strings.xml +++ b/src/main/res/values-da/strings.xml @@ -229,7 +229,6 @@ Hvis GPS-enheden rapporterer unøjagtige data (f.eks. Placering, hastighed, høj Vis på kort Start GPS Stop GPS - Stemmefrekvens Genoptag sporet Registreringstjeneste diff --git a/src/main/res/values-de/strings.xml b/src/main/res/values-de/strings.xml index c15917bd0..70ae8a8af 100644 --- a/src/main/res/values-de/strings.xml +++ b/src/main/res/values-de/strings.xml @@ -230,7 +230,6 @@ Meldet das GPS-Gerät ungenaue Daten (z.B. Standort, Geschwindigkeit, Höhe), ka Auf Karte anzeigen GPS aktivieren GPS deaktivieren - Ansagehäufigkeit Track fortsetzen Dienst für Aufzeichnung diff --git a/src/main/res/values-el/strings.xml b/src/main/res/values-el/strings.xml index 3f2344860..798078ff7 100644 --- a/src/main/res/values-el/strings.xml +++ b/src/main/res/values-el/strings.xml @@ -173,7 +173,6 @@ limitations under the License. Εμφάνιση στον χάρτη Έναρξη GPS Διακοπή GPS - Συχνότητα ανακοινώσεων Υπηρεσία καταγραφής diff --git a/src/main/res/values-es/strings.xml b/src/main/res/values-es/strings.xml index 8312f8e4e..dc0cfeb21 100644 --- a/src/main/res/values-es/strings.xml +++ b/src/main/res/values-es/strings.xml @@ -226,7 +226,6 @@ Si el dispositivo GPS reporta datos inexactos (por ejemplo, ubicación, velocida Mostrar en el mapa Iniciar GPS Detener GPS - Frecuencia de voz Reanudar ruta Servicio de grabación diff --git a/src/main/res/values-et/strings.xml b/src/main/res/values-et/strings.xml index 4f485f1ed..888082982 100644 --- a/src/main/res/values-et/strings.xml +++ b/src/main/res/values-et/strings.xml @@ -226,7 +226,6 @@ Kui GPS-seade teatab ebatäpsetest andmetest (nt asukoht, kiirus, kõrgus), ei s Kuva kaardil Käivita GPS Peata GPS - Häälteadete sagedus Jätka pala Salvestamisteenus diff --git a/src/main/res/values-eu/strings.xml b/src/main/res/values-eu/strings.xml index b0481c948..0da70fb66 100644 --- a/src/main/res/values-eu/strings.xml +++ b/src/main/res/values-eu/strings.xml @@ -227,7 +227,6 @@ GPS gailuak datu okerrak salatzen baditu (adibidez, kokapena, abiadura, kota), O Erakutsi mapan Hasi GPSa Gelditu GPSa - Ahotsaren frekuentzia Jarraitu pista Grabaketa-zerbitzua diff --git a/src/main/res/values-fa/strings.xml b/src/main/res/values-fa/strings.xml index f4d69a333..d159a3bdb 100644 --- a/src/main/res/values-fa/strings.xml +++ b/src/main/res/values-fa/strings.xml @@ -173,7 +173,6 @@ limitations under the License. نمایش روی نقشه شروع GPS توقف GPS - بسامد اعلان صوتی خدمات ضبط diff --git a/src/main/res/values-fi/strings.xml b/src/main/res/values-fi/strings.xml index d141f12d2..70aaac401 100644 --- a/src/main/res/values-fi/strings.xml +++ b/src/main/res/values-fi/strings.xml @@ -230,7 +230,6 @@ limitations under the License. Näytä kartalta Käynnistä GPS Pysäytä GPS - Ilmoitustiheys Jatka reittiä Tallennuspalvelu diff --git a/src/main/res/values-fr-rCA/strings.xml b/src/main/res/values-fr-rCA/strings.xml index 71f8f9e8c..e75c3a7f5 100644 --- a/src/main/res/values-fr-rCA/strings.xml +++ b/src/main/res/values-fr-rCA/strings.xml @@ -144,7 +144,6 @@ Afficher sur une carte Démarrer le GPS Arrêter le GPS - Fréquence vocale Service d\'enregistrement Niveau de charge de la pile Cadence diff --git a/src/main/res/values-fr-rCH/strings.xml b/src/main/res/values-fr-rCH/strings.xml index 09bcd5c92..3dad1d1c0 100644 --- a/src/main/res/values-fr-rCH/strings.xml +++ b/src/main/res/values-fr-rCH/strings.xml @@ -144,7 +144,6 @@ Afficher sur la carte Démarrer le GPS Arrêter le GPS - Fréquence vocale Service enregistrement Niveau de la batterie Cadence diff --git a/src/main/res/values-fr/strings.xml b/src/main/res/values-fr/strings.xml index 4d6a09fd8..33ffba3d6 100644 --- a/src/main/res/values-fr/strings.xml +++ b/src/main/res/values-fr/strings.xml @@ -226,7 +226,6 @@ Si le dispositif GPS signale des données inexactes (par exemple, la localisatio Afficher sur la carte Démarrer le GPS Arrêter le GPS - Fréquence vocale Reprendre la trace Service enregistrement diff --git a/src/main/res/values-gl/strings.xml b/src/main/res/values-gl/strings.xml index 073fe7282..ad769c477 100644 --- a/src/main/res/values-gl/strings.xml +++ b/src/main/res/values-gl/strings.xml @@ -237,7 +237,6 @@ Se te detés ou estás en interiores, non se gardarán datos do sensor (mais ser Amosar no mapa Iniciar GPS Desactivar GPS - Frecuencia da voz Retomar gravación Servizo de gravación diff --git a/src/main/res/values-hi/strings.xml b/src/main/res/values-hi/strings.xml index 0a89eaa3c..692103c6c 100644 --- a/src/main/res/values-hi/strings.xml +++ b/src/main/res/values-hi/strings.xml @@ -173,7 +173,6 @@ limitations under the License. नक्शे पर दिखाएं GPS प्रारंभ करें GPS बंद करें - ध्वनि आवृत्ति रिकॉर्डिंग सेवा diff --git a/src/main/res/values-hr/strings.xml b/src/main/res/values-hr/strings.xml index 6672f4887..3232a3049 100644 --- a/src/main/res/values-hr/strings.xml +++ b/src/main/res/values-hr/strings.xml @@ -174,7 +174,6 @@ limitations under the License. Prikaži na karti Pokreni GPS Zaustavi GPS - Učest. glas. objava Usluga snimanja diff --git a/src/main/res/values-hu/strings.xml b/src/main/res/values-hu/strings.xml index 9754d7a65..3b76d4410 100644 --- a/src/main/res/values-hu/strings.xml +++ b/src/main/res/values-hu/strings.xml @@ -173,7 +173,6 @@ limitations under the License. Megjelenítés a térképen GPS indítása GPS leállítása - Utasítások gyakorisága Rögzítőszolgáltatás diff --git a/src/main/res/values-in/strings.xml b/src/main/res/values-in/strings.xml index cd631a1b2..bb24333c1 100644 --- a/src/main/res/values-in/strings.xml +++ b/src/main/res/values-in/strings.xml @@ -143,7 +143,6 @@ Tampilkan di peta Nyalakan GPS Matikan GPS - Kerapatan suara Layanan perekaman Level baterai Tempo diff --git a/src/main/res/values-it/strings.xml b/src/main/res/values-it/strings.xml index 42d99eeda..75941b818 100644 --- a/src/main/res/values-it/strings.xml +++ b/src/main/res/values-it/strings.xml @@ -215,7 +215,6 @@ Infatti, un\'applicazione deve supportare ACTION_VIEW con MIME applica Visualizza su mappa Accendi GPS Spegni GPS - Frequenza voce Servizio di registrazione diff --git a/src/main/res/values-iw/strings.xml b/src/main/res/values-iw/strings.xml index 6af0b6b01..995fa33e1 100644 --- a/src/main/res/values-iw/strings.xml +++ b/src/main/res/values-iw/strings.xml @@ -146,7 +146,6 @@ הצג במפה הפעל GPS עצור GPS - תדירות הודעות קוליות שירות הקלטה טעינת סוללה קצב diff --git a/src/main/res/values-ja/strings.xml b/src/main/res/values-ja/strings.xml index dc77bcecc..b666387ef 100644 --- a/src/main/res/values-ja/strings.xml +++ b/src/main/res/values-ja/strings.xml @@ -172,7 +172,6 @@ limitations under the License. 地図で見る GPSを開始 GPSを停止 - 音声アナウンスの頻度 記録サービス diff --git a/src/main/res/values-ko/strings.xml b/src/main/res/values-ko/strings.xml index a6a2b44cc..102ce7799 100644 --- a/src/main/res/values-ko/strings.xml +++ b/src/main/res/values-ko/strings.xml @@ -172,7 +172,6 @@ limitations under the License. 지도에 표시 GPS 시작 GPS 중지 - 음성 안내 빈도 기록 서비스 diff --git a/src/main/res/values-lt/strings.xml b/src/main/res/values-lt/strings.xml index 2723da282..5c4f452a9 100644 --- a/src/main/res/values-lt/strings.xml +++ b/src/main/res/values-lt/strings.xml @@ -174,7 +174,6 @@ limitations under the License. Rodyti žemėlapyje Įjungti GPS Išjungti GPS - Balso dažnumas Įrašymo paslauga diff --git a/src/main/res/values-lv/strings.xml b/src/main/res/values-lv/strings.xml index 96c6c7939..38f6a9966 100644 --- a/src/main/res/values-lv/strings.xml +++ b/src/main/res/values-lv/strings.xml @@ -174,7 +174,6 @@ limitations under the License. Rādīt kartē Palaist GPS Apturēt GPS - Balss ziņas Ierakstīšanas pakalpojums diff --git a/src/main/res/values-mo/strings.xml b/src/main/res/values-mo/strings.xml index bd32c139d..507b6e381 100644 --- a/src/main/res/values-mo/strings.xml +++ b/src/main/res/values-mo/strings.xml @@ -145,7 +145,6 @@ Afișați pe hartă Porniți GPS Opriți GPS - Frecvența vocii Serviciu de înregistrare Nivelul bateriei Cadenţă diff --git a/src/main/res/values-ms/strings.xml b/src/main/res/values-ms/strings.xml index dd9964b9a..3fa4273e3 100644 --- a/src/main/res/values-ms/strings.xml +++ b/src/main/res/values-ms/strings.xml @@ -172,7 +172,6 @@ limitations under the License. Tunjukkan pada peta Mulakan GPS Hentikan GPS - Kekerapan suara Khidmat rakaman diff --git a/src/main/res/values-nb/strings.xml b/src/main/res/values-nb/strings.xml index 3d9d4d343..abc83c23e 100644 --- a/src/main/res/values-nb/strings.xml +++ b/src/main/res/values-nb/strings.xml @@ -173,7 +173,6 @@ limitations under the License. Vis på kart Start GPS Stopp GPS - Talefrekvens Opptakstjeneste diff --git a/src/main/res/values-nl/strings.xml b/src/main/res/values-nl/strings.xml index 4731a1a34..5872d6bf9 100644 --- a/src/main/res/values-nl/strings.xml +++ b/src/main/res/values-nl/strings.xml @@ -226,7 +226,6 @@ Als het GPS-apparaat onnauwkeurige gegevens rapporteert (bijv. locatie, snelheid Weergeven op kaart GPS starten GPS stoppen - Frequentie voor gesproken berichten Hervat spoor Opnameservice diff --git a/src/main/res/values-pl/strings.xml b/src/main/res/values-pl/strings.xml index 055eaa51d..6c59dff09 100644 --- a/src/main/res/values-pl/strings.xml +++ b/src/main/res/values-pl/strings.xml @@ -186,7 +186,6 @@ limitations under the License. Pokaż na mapie Uruchom GPS Zatrzymaj GPS - Częstość powiadomień Kontynuuj trasę Usługa rejestrowania diff --git a/src/main/res/values-pt-rBR/strings.xml b/src/main/res/values-pt-rBR/strings.xml index 67610006d..b368a5120 100644 --- a/src/main/res/values-pt-rBR/strings.xml +++ b/src/main/res/values-pt-rBR/strings.xml @@ -144,7 +144,6 @@ Mostrar no mapa Iniciar GPS Parar GPS - Frequência da voz Serviço de gravação Nível da bateria Cadência diff --git a/src/main/res/values-pt-rPT/strings.xml b/src/main/res/values-pt-rPT/strings.xml index 26470a287..b80378f0f 100644 --- a/src/main/res/values-pt-rPT/strings.xml +++ b/src/main/res/values-pt-rPT/strings.xml @@ -144,7 +144,6 @@ Mostrar no mapa Ligar GPS Desligar GPS - Frequência de voz Serviço de gravação Nível da bateria Cadência diff --git a/src/main/res/values-pt/strings.xml b/src/main/res/values-pt/strings.xml index 051952e24..345c55122 100644 --- a/src/main/res/values-pt/strings.xml +++ b/src/main/res/values-pt/strings.xml @@ -173,7 +173,6 @@ limitations under the License. Mostrar no mapa Iniciar GPS Parar GPS - Frequência da voz Serviço de gravação diff --git a/src/main/res/values-ro/strings.xml b/src/main/res/values-ro/strings.xml index 89db1e4ef..9201b94d7 100644 --- a/src/main/res/values-ro/strings.xml +++ b/src/main/res/values-ro/strings.xml @@ -174,7 +174,6 @@ limitations under the License. Afișați pe hartă Porniți GPS Opriți GPS - Frecvența vocii Serviciu de înregistrare diff --git a/src/main/res/values-ru/strings.xml b/src/main/res/values-ru/strings.xml index 567811e4a..aaf72228e 100644 --- a/src/main/res/values-ru/strings.xml +++ b/src/main/res/values-ru/strings.xml @@ -175,7 +175,6 @@ limitations under the License. Показать на карте Включить GPS Отключить GPS - Голосовые оповещения Служба записи треков diff --git a/src/main/res/values-sk/strings.xml b/src/main/res/values-sk/strings.xml index 3d3d231f9..3b61bdb3a 100644 --- a/src/main/res/values-sk/strings.xml +++ b/src/main/res/values-sk/strings.xml @@ -174,7 +174,6 @@ limitations under the License. Zobraziť na mape Aktivovať GPS Deaktivovať GPS - Hlasová frekvencia Služba na záznam diff --git a/src/main/res/values-sl/strings.xml b/src/main/res/values-sl/strings.xml index ee838309a..6f1553b9a 100644 --- a/src/main/res/values-sl/strings.xml +++ b/src/main/res/values-sl/strings.xml @@ -175,7 +175,6 @@ limitations under the License. Pokaži na zemljevidu Zaženi GPS Ustavi GPS - Pogostost glas. obv. Storitev snemanja diff --git a/src/main/res/values-sr/strings.xml b/src/main/res/values-sr/strings.xml index ce227b1e5..f363aa446 100644 --- a/src/main/res/values-sr/strings.xml +++ b/src/main/res/values-sr/strings.xml @@ -174,7 +174,6 @@ limitations under the License. Прикажи на мапи Покрени GPS Заустави GPS - Учесталост гласа Услуга бележења diff --git a/src/main/res/values-sv/strings.xml b/src/main/res/values-sv/strings.xml index da3cb7c13..ef6e8053b 100644 --- a/src/main/res/values-sv/strings.xml +++ b/src/main/res/values-sv/strings.xml @@ -173,7 +173,6 @@ limitations under the License. Visa på karta Starta GPS Stoppa GPS - Röstfrekvens Inspelningstjänst diff --git a/src/main/res/values-th/strings.xml b/src/main/res/values-th/strings.xml index 1e00a73ef..540e2203c 100644 --- a/src/main/res/values-th/strings.xml +++ b/src/main/res/values-th/strings.xml @@ -172,7 +172,6 @@ limitations under the License. แสดงบนแผนที่ เริ่ม GPS หยุด GPS - ความถี่เสียง บริการการบันทึก diff --git a/src/main/res/values-tl/strings.xml b/src/main/res/values-tl/strings.xml index 400d6419f..4816eecc7 100644 --- a/src/main/res/values-tl/strings.xml +++ b/src/main/res/values-tl/strings.xml @@ -173,7 +173,6 @@ limitations under the License. Ipakita sa mapa Simulan ang GPS Itigil ang GPS - Dalas ng voice Serbisyo ng pagrerekord diff --git a/src/main/res/values-tr/strings.xml b/src/main/res/values-tr/strings.xml index 2e9583957..f479c593c 100644 --- a/src/main/res/values-tr/strings.xml +++ b/src/main/res/values-tr/strings.xml @@ -173,7 +173,6 @@ limitations under the License. Haritada göster GPS\'i aç GPS\'i kapat - Ses sıklığı Kayıt hizmeti diff --git a/src/main/res/values-uk/strings.xml b/src/main/res/values-uk/strings.xml index 3f9de88cb..97e37afb3 100644 --- a/src/main/res/values-uk/strings.xml +++ b/src/main/res/values-uk/strings.xml @@ -175,7 +175,6 @@ limitations under the License. Показати на карті Увімкнути GPS Вимкнути GPS - Голосові сповіщення Служба запису diff --git a/src/main/res/values-vi/strings.xml b/src/main/res/values-vi/strings.xml index f9f6b57b7..accd168f7 100644 --- a/src/main/res/values-vi/strings.xml +++ b/src/main/res/values-vi/strings.xml @@ -172,7 +172,6 @@ limitations under the License. Hiển thị trên bản đồ Bắt đầu GPS Dừng GPS - Tần suất giọng nói Dịch vụ ghi diff --git a/src/main/res/values-zh-rHK/strings.xml b/src/main/res/values-zh-rHK/strings.xml index a634e471b..877d0f435 100644 --- a/src/main/res/values-zh-rHK/strings.xml +++ b/src/main/res/values-zh-rHK/strings.xml @@ -143,7 +143,6 @@ 在地圖上顯示 啟動 GPS 關閉 GPS - 語音播報頻率 記錄服務 電池電量 轉速 diff --git a/src/main/res/values-zh-rTW/strings.xml b/src/main/res/values-zh-rTW/strings.xml index b65e89f29..66ff6b08f 100644 --- a/src/main/res/values-zh-rTW/strings.xml +++ b/src/main/res/values-zh-rTW/strings.xml @@ -143,7 +143,6 @@ 在地圖上顯示 啟動 GPS 關閉 GPS - 語音播報頻率 記錄服務 電池電量 轉速 diff --git a/src/main/res/values-zh/strings.xml b/src/main/res/values-zh/strings.xml index e8d195d9e..99cb9504a 100644 --- a/src/main/res/values-zh/strings.xml +++ b/src/main/res/values-zh/strings.xml @@ -172,7 +172,6 @@ limitations under the License. 在地图上显示 启动 GPS 关闭 GPS - 语音提示频率 语音提示速率 继续 diff --git a/src/main/res/values/settings.xml b/src/main/res/values/settings.xml index b5fa76834..92b6d2b48 100644 --- a/src/main/res/values/settings.xml +++ b/src/main/res/values/settings.xml @@ -211,24 +211,29 @@ @string/settings_recording_track_name_number_option - voiceFrequency - @string/frequency_off - 0 - - @string/frequency_off + 0 + voiceFrequencyV2 + @string/announcement_off + + @string/voice_announcement_frequency_default + 60 + 120 + 300 + 600 + 900 + 1800 + 3600 + + voiceDistance + @string/announcement_off + + @string/voice_announcement_distance_default 1 - 2 5 10 - 15 - 30 - 60 - -1 - -5 - -10 - -25 - -50 - -100 + 25 + 50 + 100 voiceSpeedRate 0.9 diff --git a/src/main/res/values/settings_deprecated.xml b/src/main/res/values/settings_deprecated.xml index 2906d2113..ef307431f 100644 --- a/src/main/res/values/settings_deprecated.xml +++ b/src/main/res/values/settings_deprecated.xml @@ -17,7 +17,6 @@ splitFrequency - @string/frequency_off chartShowCadence diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 562f573b2..86ecfa06a 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -302,7 +302,6 @@ limitations under the License. Show on map Start GPS Stop GPS - Voice frequency Voice speed Resume track @@ -361,7 +360,10 @@ limitations under the License. Day Night - + Announcements + Time interval + Distance interval + Reset Reset Custom Layout diff --git a/src/main/res/xml/settings.xml b/src/main/res/xml/settings.xml index 6560e18e1..01610a2e2 100644 --- a/src/main/res/xml/settings.xml +++ b/src/main/res/xml/settings.xml @@ -74,19 +74,6 @@ limitations under the License. android:key="@string/stats_fullscreen_while_recording_key" android:summary="@string/settings_recording_fullscreen_on_while_recording_summary" android:title="@string/settings_recording_fullscreen_on_while_recording_title" /> - - + + + + + +