From baf529f9caaca4abfe724a1ce0a0a6570a37a345 Mon Sep 17 00:00:00 2001 From: jannis Date: Wed, 8 Jan 2020 13:36:03 +0100 Subject: [PATCH] New Setting to specify if announcements should be played always or only over headphones --- .../VoiceAnnouncementsSettingsActivity.java | 2 + .../announcement/AnnouncementMode.java | 42 +++++++++++++++++++ .../announcement/VoiceAnnouncements.java | 10 ++++- .../main/res/values-de/announcement_mode.xml | 27 ++++++++++++ app/src/main/res/values/announcement_mode.xml | 32 ++++++++++++++ app/src/main/res/values/strings.xml | 1 + .../xml/preferences_voice_announcements.xml | 6 +++ 7 files changed, 119 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/de/tadris/fitness/announcement/AnnouncementMode.java create mode 100644 app/src/main/res/values-de/announcement_mode.xml create mode 100644 app/src/main/res/values/announcement_mode.xml diff --git a/app/src/main/java/de/tadris/fitness/activity/VoiceAnnouncementsSettingsActivity.java b/app/src/main/java/de/tadris/fitness/activity/VoiceAnnouncementsSettingsActivity.java index a806b46..7bd86e7 100644 --- a/app/src/main/java/de/tadris/fitness/activity/VoiceAnnouncementsSettingsActivity.java +++ b/app/src/main/java/de/tadris/fitness/activity/VoiceAnnouncementsSettingsActivity.java @@ -41,6 +41,8 @@ public class VoiceAnnouncementsSettingsActivity extends FitoTrackSettingsActivit addPreferencesFromResource(R.xml.preferences_voice_announcements); + bindPreferenceSummaryToValue(findPreference("announcementMode")); + findPreference("speechConfig").setOnPreferenceClickListener(preference -> { showSpeechConfig(); return true; diff --git a/app/src/main/java/de/tadris/fitness/announcement/AnnouncementMode.java b/app/src/main/java/de/tadris/fitness/announcement/AnnouncementMode.java new file mode 100644 index 0000000..d2de2fd --- /dev/null +++ b/app/src/main/java/de/tadris/fitness/announcement/AnnouncementMode.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2020 Jannis Scheibe + * + * This file is part of FitoTrack + * + * FitoTrack is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * FitoTrack is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package de.tadris.fitness.announcement; + +import android.content.Context; +import android.preference.PreferenceManager; + +public enum AnnouncementMode { + + ALWAYS, + HEADPHONES; + + static AnnouncementMode getCurrentMode(Context context) { + String mode = PreferenceManager.getDefaultSharedPreferences(context).getString("announcementMode", "headphones"); + assert mode != null; + switch (mode) { + case "always": + return ALWAYS; + default: + case "headphones": + return HEADPHONES; + } + } + +} diff --git a/app/src/main/java/de/tadris/fitness/announcement/VoiceAnnouncements.java b/app/src/main/java/de/tadris/fitness/announcement/VoiceAnnouncements.java index dce822f..5bf90b8 100644 --- a/app/src/main/java/de/tadris/fitness/announcement/VoiceAnnouncements.java +++ b/app/src/main/java/de/tadris/fitness/announcement/VoiceAnnouncements.java @@ -42,6 +42,7 @@ public class VoiceAnnouncements { private long lastSpokenUpdateTime = 0; private int lastSpokenUpdateDistance = 0; + private final AnnouncementMode currentMode; private final long intervalTime; private final int intervalInMeters; @@ -57,6 +58,8 @@ public class VoiceAnnouncements { this.manager = new AnnouncementManager(context); this.audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); + + this.currentMode = AnnouncementMode.getCurrentMode(context); } private void ttsReady(int status) { @@ -109,8 +112,13 @@ public class VoiceAnnouncements { public void speak(String text) { if (!ttsAvailable) { + // Cannot speak return; - } // Cannot speak + } + if (currentMode == AnnouncementMode.HEADPHONES && !audioManager.isWiredHeadsetOn()) { + // Not allowed to speak + return; + } Log.d("Recorder", "TTS speaks: " + text); textToSpeech.speak(text, TextToSpeech.QUEUE_ADD, null, "announcement" + (++speakId)); } diff --git a/app/src/main/res/values-de/announcement_mode.xml b/app/src/main/res/values-de/announcement_mode.xml new file mode 100644 index 0000000..6867634 --- /dev/null +++ b/app/src/main/res/values-de/announcement_mode.xml @@ -0,0 +1,27 @@ + + + + + + Immer + Nur mit Kopfhörern + + + \ No newline at end of file diff --git a/app/src/main/res/values/announcement_mode.xml b/app/src/main/res/values/announcement_mode.xml new file mode 100644 index 0000000..9825b6e --- /dev/null +++ b/app/src/main/res/values/announcement_mode.xml @@ -0,0 +1,32 @@ + + + + + + Always + Only on headphones + + + + always + headphones + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ee0890c..1f751b4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -149,4 +149,5 @@ Description TextToSpeech is not available Edit Comment + Announcement Mode diff --git a/app/src/main/res/xml/preferences_voice_announcements.xml b/app/src/main/res/xml/preferences_voice_announcements.xml index 5b4062c..eeb5466 100644 --- a/app/src/main/res/xml/preferences_voice_announcements.xml +++ b/app/src/main/res/xml/preferences_voice_announcements.xml @@ -25,6 +25,12 @@ android:title="@string/pref_announcements_config_title" android:summary="@string/pref_announcements_config_summary" /> +