Refactor unused preferences
This commit is contained in:
@@ -3,17 +3,12 @@ package com.bartlomiejpluta.ttsserver.core.tts.engine
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import android.media.AudioAttributes
|
import android.media.AudioAttributes
|
||||||
import android.media.MediaPlayer
|
|
||||||
import android.net.Uri
|
|
||||||
import android.speech.tts.TextToSpeech
|
import android.speech.tts.TextToSpeech
|
||||||
import cafe.adriel.androidaudioconverter.model.AudioFormat
|
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.listener.TTSProcessListener
|
||||||
import com.bartlomiejpluta.ttsserver.core.tts.status.TTSStatus
|
import com.bartlomiejpluta.ttsserver.core.tts.status.TTSStatus
|
||||||
import com.bartlomiejpluta.ttsserver.core.tts.status.TTSStatusHolder
|
import com.bartlomiejpluta.ttsserver.core.tts.status.TTSStatusHolder
|
||||||
import com.bartlomiejpluta.ttsserver.core.util.AudioConverter
|
import com.bartlomiejpluta.ttsserver.core.util.AudioConverter
|
||||||
import com.bartlomiejpluta.ttsserver.ui.preference.key.PreferenceKey
|
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.security.MessageDigest
|
import java.security.MessageDigest
|
||||||
import java.util.*
|
import java.util.*
|
||||||
@@ -75,29 +70,10 @@ class TTSEngine(
|
|||||||
tts.setOnUtteranceProgressListener(listener)
|
tts.setOnUtteranceProgressListener(listener)
|
||||||
|
|
||||||
tts.language = language
|
tts.language = language
|
||||||
playGong()
|
|
||||||
tts.speak(text, TextToSpeech.QUEUE_ADD, null, uuid)
|
tts.speak(text, TextToSpeech.QUEUE_ADD, null, uuid)
|
||||||
listener.await()
|
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 {
|
companion object {
|
||||||
private val gongAudioAttributes = AudioAttributes.Builder()
|
private val gongAudioAttributes = AudioAttributes.Builder()
|
||||||
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
|
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package com.bartlomiejpluta.ttsserver.ui.preference.component
|
package com.bartlomiejpluta.ttsserver.ui.preference.component
|
||||||
|
|
||||||
import android.app.TimePickerDialog
|
|
||||||
import android.content.BroadcastReceiver
|
import android.content.BroadcastReceiver
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
@@ -13,26 +12,18 @@ import androidx.preference.Preference
|
|||||||
import androidx.preference.PreferenceFragmentCompat
|
import androidx.preference.PreferenceFragmentCompat
|
||||||
import androidx.preference.SwitchPreference
|
import androidx.preference.SwitchPreference
|
||||||
import com.bartlomiejpluta.R
|
import com.bartlomiejpluta.R
|
||||||
import com.bartlomiejpluta.ttsserver.core.web.mime.MimeType
|
|
||||||
import com.bartlomiejpluta.ttsserver.service.foreground.ForegroundService
|
import com.bartlomiejpluta.ttsserver.service.foreground.ForegroundService
|
||||||
import com.bartlomiejpluta.ttsserver.service.state.ServiceState
|
import com.bartlomiejpluta.ttsserver.service.state.ServiceState
|
||||||
import com.bartlomiejpluta.ttsserver.ui.main.MainActivity
|
import com.bartlomiejpluta.ttsserver.ui.main.MainActivity
|
||||||
import com.bartlomiejpluta.ttsserver.ui.preference.custom.IntEditTextPreference
|
import com.bartlomiejpluta.ttsserver.ui.preference.custom.IntEditTextPreference
|
||||||
import com.bartlomiejpluta.ttsserver.ui.preference.key.PreferenceKey
|
import com.bartlomiejpluta.ttsserver.ui.preference.key.PreferenceKey
|
||||||
import com.bartlomiejpluta.ttsserver.ui.preference.model.TimeRange
|
|
||||||
|
|
||||||
|
|
||||||
class PreferencesFragment : PreferenceFragmentCompat() {
|
class PreferencesFragment : PreferenceFragmentCompat() {
|
||||||
private lateinit var portPreference: IntEditTextPreference
|
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 httpDebugPreference: SwitchPreference
|
||||||
private lateinit var enableGongPreference: SwitchPreference
|
private lateinit var clearCachePreference: Preference
|
||||||
private lateinit var ttsEnginePreference: 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() {
|
private val receiver = object : BroadcastReceiver() {
|
||||||
override fun onReceive(context: Context?, intent: Intent?) {
|
override fun onReceive(context: Context?, intent: Intent?) {
|
||||||
@@ -44,8 +35,6 @@ class PreferencesFragment : PreferenceFragmentCompat() {
|
|||||||
|
|
||||||
private fun updateViewAccordingToServiceState(state: ServiceState) {
|
private fun updateViewAccordingToServiceState(state: ServiceState) {
|
||||||
portPreference.isEnabled = state == ServiceState.STOPPED
|
portPreference.isEnabled = state == ServiceState.STOPPED
|
||||||
sonosEndpointPreference.isEnabled = state == ServiceState.STOPPED
|
|
||||||
enableGongPreference.isEnabled = state == ServiceState.STOPPED
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
@@ -68,102 +57,17 @@ class PreferencesFragment : PreferenceFragmentCompat() {
|
|||||||
portPreference = findPreference(PreferenceKey.PORT)!!
|
portPreference = findPreference(PreferenceKey.PORT)!!
|
||||||
portPreference.setOnBindEditTextListener { it.inputType = InputType.TYPE_CLASS_NUMBER }
|
portPreference.setOnBindEditTextListener { it.inputType = InputType.TYPE_CLASS_NUMBER }
|
||||||
httpDebugPreference = findPreference(PreferenceKey.ENABLE_HTTP_DEBUG)!!
|
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 = findPreference(PreferenceKey.TTS)!!
|
||||||
ttsEnginePreference.setOnPreferenceClickListener {
|
ttsEnginePreference.setOnPreferenceClickListener {
|
||||||
startActivity(Intent(ANDROID_TTS_SETTINGS))
|
startActivity(Intent(ANDROID_TTS_SETTINGS))
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
enableSpeakersSilenceScheduler = findPreference(PreferenceKey.ENABLE_SPEAKERS_SILENCE_SCHEDULER)!!
|
clearCachePreference = findPreference(PreferenceKey.INVALIDATE_CACHE)!!
|
||||||
enableSpeakersSilenceScheduler.setOnPreferenceClickListener { preference ->
|
clearCachePreference.setOnPreferenceClickListener {
|
||||||
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 {
|
|
||||||
context?.cacheDir?.listFiles()?.forEach { it.delete() }
|
context?.cacheDir?.listFiles()?.forEach { it.delete() }
|
||||||
Toast.makeText(
|
Toast.makeText(
|
||||||
context,
|
context,
|
||||||
getString(R.string.preference_invalidate_sonos_cache_toast),
|
getString(R.string.preference_invalidate_cache_toast),
|
||||||
Toast.LENGTH_SHORT
|
Toast.LENGTH_SHORT
|
||||||
).show()
|
).show()
|
||||||
true
|
true
|
||||||
@@ -171,38 +75,8 @@ class PreferencesFragment : PreferenceFragmentCompat() {
|
|||||||
updateViewAccordingToServiceState(ForegroundService.state)
|
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 {
|
companion object {
|
||||||
private const val ANDROID_TTS_SETTINGS = "com.android.settings.TTS_SETTINGS"
|
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"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4,15 +4,6 @@ package com.bartlomiejpluta.ttsserver.ui.preference.key
|
|||||||
object PreferenceKey {
|
object PreferenceKey {
|
||||||
const val PORT = "preference_port"
|
const val PORT = "preference_port"
|
||||||
const val ENABLE_HTTP_DEBUG = "preference_http_debug"
|
const val ENABLE_HTTP_DEBUG = "preference_http_debug"
|
||||||
const val ENABLE_SAY_ENDPOINT = "preference_enable_say_endpoint"
|
const val INVALIDATE_CACHE = "preference_invalidate_cache"
|
||||||
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 TTS = "preference_tts"
|
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"
|
|
||||||
}
|
}
|
||||||
@@ -17,31 +17,15 @@
|
|||||||
<string name="title_activity_preferences">Settings</string>
|
<string name="title_activity_preferences">Settings</string>
|
||||||
<string name="preference_port_summary">The desired port on which HTTP server is intended to listening</string>
|
<string name="preference_port_summary">The desired port on which HTTP server is intended to listening</string>
|
||||||
<string name="preference_port_title">Server port</string>
|
<string name="preference_port_title">Server port</string>
|
||||||
<string name="preference_enable_say_endpoint_summary">Allow HTTP clients to use /say endpoint which enables them to say message using builtin speakers or external ones connected to the device</string>
|
|
||||||
<string name="preference_enable_say_endpoint_title">Enable /say endpoint</string>
|
|
||||||
<string name="preference_enable_file_endpoints_summary">Allow HTTP clients to use file endpoints (/wav, /mp3, /flac etc.) which enables them to retrieve TTS message as audio file</string>
|
|
||||||
<string name="preference_enable_file_endpoints_title">Enable file endpoints</string>
|
|
||||||
<string name="preference_enable_sonos_endpoint_summary">Allow HTTP clients to use /sonos endpoint which enables them to send TTS messages directly to Sonos devices</string>
|
|
||||||
<string name="preference_enable_sonos_endpoint_title">Enable /sonos endpoint</string>
|
|
||||||
<string name="preference_http_debug_summary">Attach the stacktrace to each error HTTP response if available</string>
|
<string name="preference_http_debug_summary">Attach the stacktrace to each error HTTP response if available</string>
|
||||||
<string name="preference_http_debug_title">Enable HTTP debugging</string>
|
<string name="preference_http_debug_title">Enable HTTP debugging</string>
|
||||||
<string name="preference_gong_picker_prompt">Choose a gong file</string>
|
|
||||||
<string name="preference_enable_gong_summary">Play a signal gong before the announcement</string>
|
|
||||||
<string name="preference_enable_gong_title">Enable gong</string>
|
|
||||||
<string name="preference_tts_summary">Go to platform\'s TTS engine settings and adjust its parameters</string>
|
<string name="preference_tts_summary">Go to platform\'s TTS engine settings and adjust its parameters</string>
|
||||||
<string name="preference_tts_title">TTS engine settings</string>
|
<string name="preference_tts_title">TTS engine settings</string>
|
||||||
<string name="preference_enable_speakers_silence_scheduler_summary">Determine a time range when /say endpoint should be disabled</string>
|
<string name="preference_invalidate_cache_summary">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.</string>
|
||||||
<string name="preference_enable_speakers_silence_scheduler_title">Enable silence scheduler</string>
|
<string name="preference_invalidate_cache_title">Invalidate cache</string>
|
||||||
<string name="preference_enable_sonos_silence_scheduler_summary">Determine a time range when /sonos endpoint should be disabled</string>
|
|
||||||
<string name="preference_enable_sonos_silence_scheduler_title">Enable silence scheduler</string>
|
|
||||||
<string name="preference_invalidate_sonos_cache_summary">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.</string>
|
|
||||||
<string name="preference_invalidate_sonos_cache_title">Invalidate Sonos cache</string>
|
|
||||||
<string name="preference_category_server">Server</string>
|
<string name="preference_category_server">Server</string>
|
||||||
<string name="preference_category_features">Features</string>
|
|
||||||
<string name="preference_category_tts">TTS engine</string>
|
<string name="preference_category_tts">TTS engine</string>
|
||||||
<string name="preference_category_speakers">Speakers</string>
|
<string name="preference_invalidate_cache_toast">Cache has been invalidated</string>
|
||||||
<string name="preference_category_sonos">Sonos</string>
|
|
||||||
<string name="preference_invalidate_sonos_cache_toast">Sonos cache has been invalidated</string>
|
|
||||||
|
|
||||||
<string name="menu_settings">Settings</string>
|
<string name="menu_settings">Settings</string>
|
||||||
<string name="menu_help">Help</string>
|
<string name="menu_help">Help</string>
|
||||||
|
|||||||
@@ -15,38 +15,14 @@
|
|||||||
android:summary="@string/preference_http_debug_summary"
|
android:summary="@string/preference_http_debug_summary"
|
||||||
android:title="@string/preference_http_debug_title"
|
android:title="@string/preference_http_debug_title"
|
||||||
app:iconSpaceReserved="false" />
|
app:iconSpaceReserved="false" />
|
||||||
</PreferenceCategory>
|
<Preference
|
||||||
|
android:key="preference_invalidate_cache"
|
||||||
<PreferenceCategory android:title="@string/preference_category_features" app:iconSpaceReserved="false">
|
android:summary="@string/preference_invalidate_cache_summary"
|
||||||
<SwitchPreference
|
app:title="@string/preference_invalidate_cache_title"
|
||||||
android:defaultValue="true"
|
|
||||||
android:key="preference_enable_say_endpoint"
|
|
||||||
android:summary="@string/preference_enable_say_endpoint_summary"
|
|
||||||
android:title="@string/preference_enable_say_endpoint_title"
|
|
||||||
app:iconSpaceReserved="false" />
|
|
||||||
|
|
||||||
<SwitchPreference
|
|
||||||
android:defaultValue="true"
|
|
||||||
android:key="preference_enable_file_endpoints"
|
|
||||||
android:summary="@string/preference_enable_file_endpoints_summary"
|
|
||||||
android:title="@string/preference_enable_file_endpoints_title"
|
|
||||||
app:iconSpaceReserved="false" />
|
|
||||||
|
|
||||||
<SwitchPreference
|
|
||||||
android:defaultValue="true"
|
|
||||||
android:key="preference_enable_sonos_endpoint"
|
|
||||||
android:summary="@string/preference_enable_sonos_endpoint_summary"
|
|
||||||
android:title="@string/preference_enable_sonos_endpoint_title"
|
|
||||||
app:iconSpaceReserved="false" />
|
app:iconSpaceReserved="false" />
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
|
|
||||||
<PreferenceCategory android:title="@string/preference_category_tts" app:iconSpaceReserved="false">
|
<PreferenceCategory android:title="@string/preference_category_tts" app:iconSpaceReserved="false">
|
||||||
<SwitchPreference
|
|
||||||
android:defaultValue="false"
|
|
||||||
android:key="preference_enable_gong"
|
|
||||||
android:summary="@string/preference_enable_gong_summary"
|
|
||||||
android:title="@string/preference_enable_gong_title"
|
|
||||||
app:iconSpaceReserved="false" />
|
|
||||||
<Preference
|
<Preference
|
||||||
android:key="preference_tts"
|
android:key="preference_tts"
|
||||||
android:summary="@string/preference_tts_summary"
|
android:summary="@string/preference_tts_summary"
|
||||||
@@ -54,27 +30,4 @@
|
|||||||
app:iconSpaceReserved="false" />
|
app:iconSpaceReserved="false" />
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
|
|
||||||
<PreferenceCategory android:title="@string/preference_category_speakers" app:iconSpaceReserved="false">
|
|
||||||
<SwitchPreference
|
|
||||||
android:key="preference_enable_speakers_silence_scheduler"
|
|
||||||
android:summary="@string/preference_enable_speakers_silence_scheduler_summary"
|
|
||||||
app:title="@string/preference_enable_speakers_silence_scheduler_title"
|
|
||||||
app:iconSpaceReserved="false" />
|
|
||||||
</PreferenceCategory>
|
|
||||||
|
|
||||||
<PreferenceCategory android:title="@string/preference_category_sonos" app:iconSpaceReserved="false">
|
|
||||||
<SwitchPreference
|
|
||||||
android:key="preference_enable_sonos_silence_scheduler"
|
|
||||||
android:summary="@string/preference_enable_sonos_silence_scheduler_summary"
|
|
||||||
app:title="@string/preference_enable_sonos_silence_scheduler_title"
|
|
||||||
app:iconSpaceReserved="false" />
|
|
||||||
|
|
||||||
<Preference
|
|
||||||
android:key="preference_invalidate_sonos_cache"
|
|
||||||
android:summary="@string/preference_invalidate_sonos_cache_summary"
|
|
||||||
app:title="@string/preference_invalidate_sonos_cache_title"
|
|
||||||
app:iconSpaceReserved="false" />
|
|
||||||
</PreferenceCategory>
|
|
||||||
|
|
||||||
|
|
||||||
</androidx.preference.PreferenceScreen>
|
</androidx.preference.PreferenceScreen>
|
||||||
Reference in New Issue
Block a user