Voice announcements: added setting to skip announcements on the device's internal speaker.

Fixes #1392.
This commit is contained in:
Dennis Guse
2023-04-04 22:34:47 +02:00
parent 9aab3c216c
commit 3f600f6be7
7 changed files with 25 additions and 2 deletions
+1
View File
@@ -131,6 +131,7 @@ dependencies {
implementation 'com.google.android.material:material:1.8.0' implementation 'com.google.android.material:material:1.8.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4' implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation 'androidx.core:core-splashscreen:1.0.0' 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:core:1.5.0'
androidTestImplementation 'androidx.test.ext:junit:1.1.5' androidTestImplementation 'androidx.test.ext:junit:1.1.5'
@@ -327,7 +327,7 @@ public class TrackRecordingService extends Service implements TrackPointCreator.
TrackPoint trackPoint = data.second.first; TrackPoint trackPoint = data.second.first;
egm2008CorrectionManager.correctAltitude(this, trackPoint); egm2008CorrectionManager.correctAltitude(this, trackPoint);
localVoiceAnnouncementManager.update(data.first); localVoiceAnnouncementManager.update(this, data.first);
recordingDataObservable.postValue(new RecordingData(data.first, trackPoint, data.second.second)); recordingDataObservable.postValue(new RecordingData(data.first, trackPoint, data.second.second));
} }
@@ -15,12 +15,14 @@
*/ */
package de.dennisguse.opentracks.services.announcement; package de.dennisguse.opentracks.services.announcement;
import android.content.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.util.Log; import android.util.Log;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting;
import androidx.mediarouter.media.MediaRouter;
import java.time.Duration; import java.time.Duration;
@@ -73,12 +75,20 @@ public class VoiceAnnouncementManager implements SharedPreferences.OnSharedPrefe
updateNextTaskDistance(); updateNextTaskDistance();
} }
public void update(@NonNull Track track) { public void update(@NonNull Context context, @NonNull Track track) {
if (voiceAnnouncement == null) { if (voiceAnnouncement == null) {
Log.e(TAG, "Cannot update when in status shutdown."); Log.e(TAG, "Cannot update when in status shutdown.");
return; return;
} }
if (!PreferencesUtils.shouldVoiceAnnouncementOnDeviceSpeaker()
&& MediaRouter.getInstance(context)
.getSelectedRoute()
.isDeviceSpeaker()) {
Log.i(TAG, "No voice announcement on device speaker.");
return;
}
boolean announce = false; boolean announce = false;
this.trackStatistics = track.getTrackStatistics(); this.trackStatistics = track.getTrackStatistics();
if (trackStatistics.getTotalDistance().greaterThan(nextTotalDistance)) { if (trackStatistics.getTotalDistance().greaterThan(nextTotalDistance)) {
@@ -302,6 +302,11 @@ public class PreferencesUtils {
return getBoolean(R.string.stats_fullscreen_while_recording_key, DEFAULT); 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() { 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);
+2
View File
@@ -235,6 +235,8 @@
<item>1.2</item> <item>1.2</item>
<item>1.3</item> <item>1.3</item>
</string-array> </string-array>
<string name="voice_on_device_speaker_key" translatable="false">voiceOnDeviceSpeaker</string>
<bool name="voice_on_device_speaker_default" translatable="false">true</bool>
<string name="voice_announce_total_distance_key" translatable="false">voiceAnnounceTotalDistance</string> <string name="voice_announce_total_distance_key" translatable="false">voiceAnnounceTotalDistance</string>
<string name="voice_announce_moving_time_key" translatable="false">voiceAnnounceMovingTime</string> <string name="voice_announce_moving_time_key" translatable="false">voiceAnnounceMovingTime</string>
<string name="voice_announce_average_speed_pace_key" translatable="false">voiceAnnounceAverageSpeedPace</string> <string name="voice_announce_average_speed_pace_key" translatable="false">voiceAnnounceAverageSpeedPace</string>
+1
View File
@@ -575,6 +575,7 @@ limitations under the License.
<item quantity="one">1 knot</item> <item quantity="one">1 knot</item>
<item quantity="other">%1$.1f knots</item> <item quantity="other">%1$.1f knots</item>
</plurals> </plurals>
<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>
<string name="voice_per_nautical_mile">per nautical mile</string> <string name="voice_per_nautical_mile">per nautical mile</string>
@@ -26,6 +26,10 @@
android:title="@string/menu_voice_rate" android:title="@string/menu_voice_rate"
app:useSimpleSummaryProvider="true" /> app:useSimpleSummaryProvider="true" />
<CheckBoxPreference
android:defaultValue="@bool/voice_on_device_speaker_default"
android:key="@string/voice_on_device_speaker_key"
android:title="@string/voice_on_device_speaker_title" />
<PreferenceCategory android:title="@string/settings_announcements_title"> <PreferenceCategory android:title="@string/settings_announcements_title">
<SwitchPreference <SwitchPreference