diff --git a/app/src/main/java/com/bartlomiejpluta/ttsserver/core/tts/engine/TTSEngine.kt b/app/src/main/java/com/bartlomiejpluta/ttsserver/core/tts/engine/TTSEngine.kt
index d7c3634..680f13c 100644
--- a/app/src/main/java/com/bartlomiejpluta/ttsserver/core/tts/engine/TTSEngine.kt
+++ b/app/src/main/java/com/bartlomiejpluta/ttsserver/core/tts/engine/TTSEngine.kt
@@ -3,17 +3,12 @@ package com.bartlomiejpluta.ttsserver.core.tts.engine
import android.content.Context
import android.content.SharedPreferences
import android.media.AudioAttributes
-import android.media.MediaPlayer
-import android.net.Uri
import android.speech.tts.TextToSpeech
import cafe.adriel.androidaudioconverter.model.AudioFormat
-import com.bartlomiejpluta.ttsserver.core.tts.exception.TTSException
-import com.bartlomiejpluta.ttsserver.core.tts.listener.GongListener
import com.bartlomiejpluta.ttsserver.core.tts.listener.TTSProcessListener
import com.bartlomiejpluta.ttsserver.core.tts.status.TTSStatus
import com.bartlomiejpluta.ttsserver.core.tts.status.TTSStatusHolder
import com.bartlomiejpluta.ttsserver.core.util.AudioConverter
-import com.bartlomiejpluta.ttsserver.ui.preference.key.PreferenceKey
import java.io.File
import java.security.MessageDigest
import java.util.*
@@ -75,29 +70,10 @@ class TTSEngine(
tts.setOnUtteranceProgressListener(listener)
tts.language = language
- playGong()
tts.speak(text, TextToSpeech.QUEUE_ADD, null, uuid)
listener.await()
}
- private fun playGong() {
- if (!preferences.getBoolean(PreferenceKey.ENABLE_GONG, false)) {
- return
- }
-
- val listener = GongListener()
- val uri = preferences.getString(PreferenceKey.GONG, null) ?: throw TTSException()
-
- MediaPlayer().apply {
- setOnCompletionListener(listener)
- setAudioAttributes(gongAudioAttributes)
- setDataSource(context, Uri.parse(uri))
- prepare()
- start()
- listener.await()
- }
- }
-
companion object {
private val gongAudioAttributes = AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
diff --git a/app/src/main/java/com/bartlomiejpluta/ttsserver/ui/preference/component/PreferencesFragment.kt b/app/src/main/java/com/bartlomiejpluta/ttsserver/ui/preference/component/PreferencesFragment.kt
index a0467de..aae94c5 100644
--- a/app/src/main/java/com/bartlomiejpluta/ttsserver/ui/preference/component/PreferencesFragment.kt
+++ b/app/src/main/java/com/bartlomiejpluta/ttsserver/ui/preference/component/PreferencesFragment.kt
@@ -1,6 +1,5 @@
package com.bartlomiejpluta.ttsserver.ui.preference.component
-import android.app.TimePickerDialog
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
@@ -13,26 +12,18 @@ import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat
import androidx.preference.SwitchPreference
import com.bartlomiejpluta.R
-import com.bartlomiejpluta.ttsserver.core.web.mime.MimeType
import com.bartlomiejpluta.ttsserver.service.foreground.ForegroundService
import com.bartlomiejpluta.ttsserver.service.state.ServiceState
import com.bartlomiejpluta.ttsserver.ui.main.MainActivity
import com.bartlomiejpluta.ttsserver.ui.preference.custom.IntEditTextPreference
import com.bartlomiejpluta.ttsserver.ui.preference.key.PreferenceKey
-import com.bartlomiejpluta.ttsserver.ui.preference.model.TimeRange
class PreferencesFragment : PreferenceFragmentCompat() {
private lateinit var portPreference: IntEditTextPreference
- private lateinit var sayEndpointPreference: SwitchPreference
- private lateinit var fileEndpointPreference: SwitchPreference
- private lateinit var sonosEndpointPreference: SwitchPreference
private lateinit var httpDebugPreference: SwitchPreference
- private lateinit var enableGongPreference: SwitchPreference
+ private lateinit var clearCachePreference: Preference
private lateinit var ttsEnginePreference: Preference
- private lateinit var enableSonosSilenceScheduler: SwitchPreference
- private lateinit var enableSpeakersSilenceScheduler: SwitchPreference
- private lateinit var clearSonosCachePreference: Preference
private val receiver = object : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
@@ -44,8 +35,6 @@ class PreferencesFragment : PreferenceFragmentCompat() {
private fun updateViewAccordingToServiceState(state: ServiceState) {
portPreference.isEnabled = state == ServiceState.STOPPED
- sonosEndpointPreference.isEnabled = state == ServiceState.STOPPED
- enableGongPreference.isEnabled = state == ServiceState.STOPPED
}
override fun onResume() {
@@ -68,102 +57,17 @@ class PreferencesFragment : PreferenceFragmentCompat() {
portPreference = findPreference(PreferenceKey.PORT)!!
portPreference.setOnBindEditTextListener { it.inputType = InputType.TYPE_CLASS_NUMBER }
httpDebugPreference = findPreference(PreferenceKey.ENABLE_HTTP_DEBUG)!!
- sayEndpointPreference = findPreference(PreferenceKey.ENABLE_SAY_ENDPOINT)!!
- fileEndpointPreference = findPreference(PreferenceKey.ENABLE_FILE_ENDPOINTS)!!
- sonosEndpointPreference = findPreference(PreferenceKey.ENABLE_SONOS_ENDPOINT)!!
- enableGongPreference = findPreference(PreferenceKey.ENABLE_GONG)!!
- enableGongPreference.setOnPreferenceClickListener { preference ->
- openFilePicker(preference)
-
- true
- }
ttsEnginePreference = findPreference(PreferenceKey.TTS)!!
ttsEnginePreference.setOnPreferenceClickListener {
startActivity(Intent(ANDROID_TTS_SETTINGS))
true
}
- enableSpeakersSilenceScheduler = findPreference(PreferenceKey.ENABLE_SPEAKERS_SILENCE_SCHEDULER)!!
- enableSpeakersSilenceScheduler.setOnPreferenceClickListener { preference ->
- if(!enableSpeakersSilenceScheduler.isChecked) {
- return@setOnPreferenceClickListener true
- }
- enableSpeakersSilenceScheduler.isChecked = false
-
- val schedule = preference
- .sharedPreferences
- .getString(
- PreferenceKey.SPEAKERS_SILENCE_SCHEDULE,
- DEFAULT_SCHEDULE
- )!!
- .let {
- TimeRange.parse(
- it
- )
- }
-
- TimePickerDialog(context, { _, newBeginHour, newBeginMinute ->
- TimePickerDialog(context, { _, newEndHour, newEndMinute ->
- preference.sharedPreferences.edit()?.let { editor ->
- val newSchedule =
- TimeRange(
- newBeginHour,
- newBeginMinute,
- newEndHour,
- newEndMinute
- )
- editor.putString(PreferenceKey.SPEAKERS_SILENCE_SCHEDULE, newSchedule.toString())
- editor.apply()
- enableSpeakersSilenceScheduler.isChecked = true
- }
- }, schedule.endHour, schedule.endMinute, true).show()
- }, schedule.beginHour, schedule.beginMinute, true).show()
-
- true
- }
- enableSonosSilenceScheduler = findPreference(PreferenceKey.ENABLE_SONOS_SILENCE_SCHEDULER)!!
- enableSonosSilenceScheduler.setOnPreferenceClickListener { preference ->
- if(!enableSonosSilenceScheduler.isChecked) {
- return@setOnPreferenceClickListener true
- }
- enableSonosSilenceScheduler.isChecked = false
-
- val schedule = preference
- .sharedPreferences
- .getString(
- PreferenceKey.SONOS_SILENCE_SCHEDULE,
- DEFAULT_SCHEDULE
- )!!
- .let {
- TimeRange.parse(
- it
- )
- }
-
- TimePickerDialog(context, { _, newBeginHour, newBeginMinute ->
- TimePickerDialog(context, { _, newEndHour, newEndMinute ->
- preference.sharedPreferences.edit()?.let { editor ->
- val newSchedule =
- TimeRange(
- newBeginHour,
- newBeginMinute,
- newEndHour,
- newEndMinute
- )
- editor.putString(PreferenceKey.SONOS_SILENCE_SCHEDULE, newSchedule.toString())
- editor.apply()
- enableSonosSilenceScheduler.isChecked = true
- }
- }, schedule.endHour, schedule.endMinute, true).show()
- }, schedule.beginHour, schedule.beginMinute, true).show()
-
- true
- }
- clearSonosCachePreference = findPreference(PreferenceKey.INVALIDATE_SONOS_CACHE)!!
- clearSonosCachePreference.setOnPreferenceClickListener {
+ clearCachePreference = findPreference(PreferenceKey.INVALIDATE_CACHE)!!
+ clearCachePreference.setOnPreferenceClickListener {
context?.cacheDir?.listFiles()?.forEach { it.delete() }
Toast.makeText(
context,
- getString(R.string.preference_invalidate_sonos_cache_toast),
+ getString(R.string.preference_invalidate_cache_toast),
Toast.LENGTH_SHORT
).show()
true
@@ -171,38 +75,8 @@ class PreferencesFragment : PreferenceFragmentCompat() {
updateViewAccordingToServiceState(ForegroundService.state)
}
- private fun openFilePicker(preference: Preference?) {
- if ((preference as SwitchPreference).isChecked) {
- val intent = Intent(Intent.ACTION_OPEN_DOCUMENT)
- .apply { type = MimeType.WAV.mimeType }
- .let { Intent.createChooser(it, getString(R.string.preference_gong_picker_prompt)) }
-
- startActivityForResult(intent,
- PICKFILE_RESULT_CODE
- )
- }
- }
-
- override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
- when (requestCode) {
- PICKFILE_RESULT_CODE -> updateGongPathPreference(resultCode, data)
- }
- }
-
- private fun updateGongPathPreference(resultCode: Int, data: Intent?) {
- enableGongPreference.isChecked = resultCode == -1
-
- if (resultCode == -1) {
- enableGongPreference.sharedPreferences?.edit()?.let { editor ->
- editor.putString(PreferenceKey.GONG, data?.data?.toString())
- editor.commit()
- }
- }
- }
companion object {
private const val ANDROID_TTS_SETTINGS = "com.android.settings.TTS_SETTINGS"
- private const val PICKFILE_RESULT_CODE = 1
- private val DEFAULT_SCHEDULE = "22:00-07:00"
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/bartlomiejpluta/ttsserver/ui/preference/key/Preference.kt b/app/src/main/java/com/bartlomiejpluta/ttsserver/ui/preference/key/Preference.kt
index d3c9b7e..96107b5 100644
--- a/app/src/main/java/com/bartlomiejpluta/ttsserver/ui/preference/key/Preference.kt
+++ b/app/src/main/java/com/bartlomiejpluta/ttsserver/ui/preference/key/Preference.kt
@@ -4,15 +4,6 @@ package com.bartlomiejpluta.ttsserver.ui.preference.key
object PreferenceKey {
const val PORT = "preference_port"
const val ENABLE_HTTP_DEBUG = "preference_http_debug"
- const val ENABLE_SAY_ENDPOINT = "preference_enable_say_endpoint"
- const val ENABLE_FILE_ENDPOINTS = "preference_enable_file_endpoints"
- const val ENABLE_SONOS_ENDPOINT = "preference_enable_sonos_endpoint"
- const val ENABLE_GONG = "preference_enable_gong"
- const val GONG = "preference_gong"
+ const val INVALIDATE_CACHE = "preference_invalidate_cache"
const val TTS = "preference_tts"
- const val ENABLE_SPEAKERS_SILENCE_SCHEDULER = "preference_enable_speakers_silence_scheduler"
- const val SPEAKERS_SILENCE_SCHEDULE = "preference_speakers_silence_schedule"
- const val ENABLE_SONOS_SILENCE_SCHEDULER = "preference_enable_sonos_silence_scheduler"
- const val SONOS_SILENCE_SCHEDULE = "preference_sonos_silence_schedule"
- const val INVALIDATE_SONOS_CACHE = "preference_invalidate_sonos_cache"
}
\ 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 c6032cb..bd1de1c 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -17,31 +17,15 @@
Settings
The desired port on which HTTP server is intended to listening
Server port
- Allow HTTP clients to use /say endpoint which enables them to say message using builtin speakers or external ones connected to the device
- Enable /say endpoint
- Allow HTTP clients to use file endpoints (/wav, /mp3, /flac etc.) which enables them to retrieve TTS message as audio file
- Enable file endpoints
- Allow HTTP clients to use /sonos endpoint which enables them to send TTS messages directly to Sonos devices
- Enable /sonos endpoint
Attach the stacktrace to each error HTTP response if available
Enable HTTP debugging
- Choose a gong file
- Play a signal gong before the announcement
- Enable gong
Go to platform\'s TTS engine settings and adjust its parameters
TTS engine settings
- Determine a time range when /say endpoint should be disabled
- Enable silence scheduler
- Determine a time range when /sonos endpoint should be disabled
- Enable silence scheduler
- Clear application cache directory from already generated Sonos TTS data for given sentences. You typically want to do it when you change the TTS engine\'s voice settings.
- Invalidate Sonos cache
+ Clear application cache directory from already generated TTS data for given sentences. You typically want to do it when you change the TTS engine\'s voice settings.
+ Invalidate cache
Server
- Features
TTS engine
- Speakers
- Sonos
- Sonos cache has been invalidated
+ Cache has been invalidated
Settings
Help
diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml
index 0fab131..f9765d6 100644
--- a/app/src/main/res/xml/preferences.xml
+++ b/app/src/main/res/xml/preferences.xml
@@ -15,38 +15,14 @@
android:summary="@string/preference_http_debug_summary"
android:title="@string/preference_http_debug_title"
app:iconSpaceReserved="false" />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file