diff --git a/build.gradle b/build.gradle
index 874700295..2e46c7a82 100644
--- a/build.gradle
+++ b/build.gradle
@@ -131,6 +131,7 @@ dependencies {
implementation 'com.google.android.material:material:1.8.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation 'androidx.core:core-splashscreen:1.0.0'
+ implementation 'androidx.mediarouter:mediarouter:1.3.1'
androidTestImplementation 'androidx.test:core:1.5.0'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
diff --git a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java
index 1cef8f6ab..042ed8cb5 100644
--- a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java
+++ b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java
@@ -327,7 +327,7 @@ public class TrackRecordingService extends Service implements TrackPointCreator.
TrackPoint trackPoint = data.second.first;
egm2008CorrectionManager.correctAltitude(this, trackPoint);
- localVoiceAnnouncementManager.update(data.first);
+ localVoiceAnnouncementManager.update(this, data.first);
recordingDataObservable.postValue(new RecordingData(data.first, trackPoint, data.second.second));
}
diff --git a/src/main/java/de/dennisguse/opentracks/services/announcement/VoiceAnnouncementManager.java b/src/main/java/de/dennisguse/opentracks/services/announcement/VoiceAnnouncementManager.java
index 70680d209..1dbc557bd 100644
--- a/src/main/java/de/dennisguse/opentracks/services/announcement/VoiceAnnouncementManager.java
+++ b/src/main/java/de/dennisguse/opentracks/services/announcement/VoiceAnnouncementManager.java
@@ -15,12 +15,14 @@
*/
package de.dennisguse.opentracks.services.announcement;
+import android.content.Context;
import android.content.SharedPreferences;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
+import androidx.mediarouter.media.MediaRouter;
import java.time.Duration;
@@ -73,12 +75,20 @@ public class VoiceAnnouncementManager implements SharedPreferences.OnSharedPrefe
updateNextTaskDistance();
}
- public void update(@NonNull Track track) {
+ public void update(@NonNull Context context, @NonNull Track track) {
if (voiceAnnouncement == null) {
Log.e(TAG, "Cannot update when in status shutdown.");
return;
}
+ if (!PreferencesUtils.shouldVoiceAnnouncementOnDeviceSpeaker()
+ && MediaRouter.getInstance(context)
+ .getSelectedRoute()
+ .isDeviceSpeaker()) {
+ Log.i(TAG, "No voice announcement on device speaker.");
+ return;
+ }
+
boolean announce = false;
this.trackStatistics = track.getTrackStatistics();
if (trackStatistics.getTotalDistance().greaterThan(nextTotalDistance)) {
diff --git a/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java b/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java
index d6335d252..c05fab2e7 100644
--- a/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java
+++ b/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java
@@ -302,6 +302,11 @@ public class PreferencesUtils {
return getBoolean(R.string.stats_fullscreen_while_recording_key, DEFAULT);
}
+ public static boolean shouldVoiceAnnouncementOnDeviceSpeaker() {
+ final boolean DEFAULT = resources.getBoolean(R.bool.voice_on_device_speaker_default);
+ return getBoolean(R.string.voice_on_device_speaker_key, DEFAULT);
+ }
+
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/res/values/settings.xml b/src/main/res/values/settings.xml
index 9c0238d3f..53bc64c68 100644
--- a/src/main/res/values/settings.xml
+++ b/src/main/res/values/settings.xml
@@ -235,6 +235,8 @@
- 1.2
- 1.3
+ voiceOnDeviceSpeaker
+ true
voiceAnnounceTotalDistance
voiceAnnounceMovingTime
voiceAnnounceAverageSpeedPace
diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml
index 9e5f0d02d..e9fbdced4 100644
--- a/src/main/res/values/strings.xml
+++ b/src/main/res/values/strings.xml
@@ -575,6 +575,7 @@ limitations under the License.
- 1 knot
- %1$.1f knots
+ Use the device\'s speaker
per kilometer
per mile
per nautical mile
diff --git a/src/main/res/xml/settings_announcements.xml b/src/main/res/xml/settings_announcements.xml
index d4f193459..cfbb37b03 100644
--- a/src/main/res/xml/settings_announcements.xml
+++ b/src/main/res/xml/settings_announcements.xml
@@ -26,6 +26,10 @@
android:title="@string/menu_voice_rate"
app:useSimpleSummaryProvider="true" />
+