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" /> +