From d7f339c6f8200b84228844eb4e005367b63874da Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Thu, 13 May 2021 07:32:25 +0200 Subject: [PATCH] Settings: disable voice announcement setting if not TTS available. Fixes #763. --- .../tasks/AnnouncementPeriodicTask.java | 5 --- .../opentracks/settings/SettingsActivity.java | 31 ++++++++++++++++++- 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/src/main/java/de/dennisguse/opentracks/services/tasks/AnnouncementPeriodicTask.java b/src/main/java/de/dennisguse/opentracks/services/tasks/AnnouncementPeriodicTask.java index 6db83ec34..4b1fe4aa7 100644 --- a/src/main/java/de/dennisguse/opentracks/services/tasks/AnnouncementPeriodicTask.java +++ b/src/main/java/de/dennisguse/opentracks/services/tasks/AnnouncementPeriodicTask.java @@ -138,11 +138,6 @@ public class AnnouncementPeriodicTask implements PeriodicTask { @Override public void run(@NonNull TrackRecordingService trackRecordingService) { - if (trackRecordingService == null) { - Log.e(TAG, "TrackRecordingService is null."); - return; - } - announce(trackRecordingService.getRecordingTrackId(), trackRecordingService.getTrackStatistics()); } diff --git a/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java b/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java index 1e99ae443..44280e7bd 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java +++ b/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java @@ -3,10 +3,12 @@ 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; @@ -93,6 +95,9 @@ public class SettingsActivity extends AbstractActivity implements ChooseActivity public static class PrefsFragment extends PreferenceFragmentCompat { + private TextToSpeech tts; + private int ttsInitStatus; + private SharedPreferences sharedPreferences; private final SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener = (sharedPreferences, key) -> { @@ -125,6 +130,22 @@ public class SettingsActivity extends AbstractActivity implements ChooseActivity // Used to forward update from ChooseActivityTypeDialogFragment; TODO Could be replaced with LiveData. private ActivityTypePreference.ActivityPreferenceDialog activityPreferenceDialog; + private Preference voiceAnnouncements; + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + ttsInitStatus = TextToSpeech.ERROR; + tts = new TextToSpeech(getContext(), status -> { + ttsInitStatus = status; + Log.i(TAG, "TextToSpeech initialized with status " + status); + + if (voiceAnnouncements != null) { + updateVoiceAnnouncements(); + } + }); + } + @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { sharedPreferences = PreferencesUtils.getSharedPreferences(getContext()); @@ -150,6 +171,9 @@ public class SettingsActivity extends AbstractActivity implements ChooseActivity //Use same value for not set as Androidx ListPreference and EditTextPreference return directory != null ? directory.getName() : getString(R.string.not_set); }); + + voiceAnnouncements = findPreference(getString(R.string.voice_frequency_key)); + updateVoiceAnnouncements(); } @Override @@ -208,6 +232,8 @@ public class SettingsActivity extends AbstractActivity implements ChooseActivity super.onDestroy(); trackRecordingServiceConnection.unbind(getContext()); sharedPreferences = null; + voiceAnnouncements = null; + tts = null; } public void setDefaultActivity(String iconValue) { @@ -296,6 +322,10 @@ public class SettingsActivity extends AbstractActivity implements ChooseActivity }); } + private void updateVoiceAnnouncements() { + voiceAnnouncements.setEnabled(ttsInitStatus == TextToSpeech.SUCCESS); + } + private void onRecordingStatusChanged(TrackRecordingService.RecordingStatus status) { this.recordingStatus = status; if (!status.isRecording() && isAdded()) { @@ -303,5 +333,4 @@ public class SettingsActivity extends AbstractActivity implements ChooseActivity } } } - }