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 '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'
@@ -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));
}
@@ -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)) {
@@ -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);
+2
View File
@@ -235,6 +235,8 @@
<item>1.2</item>
<item>1.3</item>
</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_moving_time_key" translatable="false">voiceAnnounceMovingTime</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="other">%1$.1f knots</item>
</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_mile">per mile</string>
<string name="voice_per_nautical_mile">per nautical mile</string>
@@ -26,6 +26,10 @@
android:title="@string/menu_voice_rate"
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">
<SwitchPreference