Skip to content

Commit 36b5a7d

Browse files
committed
* Replaced sound utility for better sound handling
* Fixed bug with setting screen timeout to 1 minute (shows as seconds) * Updated Spanish translations * Updated Kotlin version
1 parent bf8cac6 commit 36b5a7d

File tree

7 files changed

+109
-96
lines changed

7 files changed

+109
-96
lines changed

app/src/main/java/com/thanksmister/iot/mqtt/alarmpanel/ui/fragments/ScreenSettingsFragment.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ class ScreenSettingsFragment : PreferenceFragmentCompat(), SharedPreferences.OnS
104104
inactivityPreference!!.setDefaultValue(configuration.inactivityTime)
105105
inactivityPreference!!.value = configuration.inactivityTime.toString()
106106

107-
if (configuration.inactivityTime <= SECONDS_VALUE) {
107+
if (configuration.inactivityTime < SECONDS_VALUE) {
108108
inactivityPreference!!.summary = getString(R.string.preference_summary_inactivity_seconds,
109109
DateUtils.convertInactivityTime(configuration.inactivityTime))
110110
} else {
@@ -182,7 +182,7 @@ class ScreenSettingsFragment : PreferenceFragmentCompat(), SharedPreferences.OnS
182182
Configuration.PREF_INACTIVITY_TIME -> {
183183
val inactivity = inactivityPreference!!.value!!.toLong()
184184
configuration.inactivityTime = inactivity
185-
if (inactivity <= SECONDS_VALUE) {
185+
if (inactivity < SECONDS_VALUE) {
186186
inactivityPreference!!.summary = getString(R.string.preference_summary_inactivity_seconds, DateUtils.convertInactivityTime(inactivity))
187187
} else {
188188
inactivityPreference!!.summary = getString(R.string.preference_summary_inactivity_minutes, DateUtils.convertInactivityTime(inactivity))

app/src/main/java/com/thanksmister/iot/mqtt/alarmpanel/ui/modules/TextToSpeechModule.kt

+1
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ class TextToSpeechModule( base: Context?, private val configuration: Configurati
103103
if(textToSpeech != null) {
104104
textToSpeech?.stop()
105105
textToSpeech?.shutdown()
106+
textToSpeech = null
106107
}
107108
}
108109
}

app/src/main/java/com/thanksmister/iot/mqtt/alarmpanel/ui/views/BaseAlarmView.kt

+8-5
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ abstract class BaseAlarmView : LinearLayout {
3333
super.onFinishInflate()
3434

3535
button0.setOnClickListener {
36-
playButtonPress()
36+
//playButtonPress()
37+
playContinuousBeep()
3738
addPinCode("0")
3839
}
3940

@@ -116,21 +117,23 @@ abstract class BaseAlarmView : LinearLayout {
116117

117118
fun destroySoundUtils() {
118119
if (soundUtils != null) {
119-
soundUtils!!.destroyBuzzer()
120+
soundUtils?.destroyBuzzer()
120121
}
121122
}
122123

123-
fun playButtonPress() {
124+
private fun playButtonPress() {
124125
if (soundUtils == null) {
125126
soundUtils = SoundUtils(context)
127+
soundUtils?.init()
126128
}
127-
soundUtils!!.playBuzzerOnButtonPress()
129+
soundUtils?.playBuzzerOnButtonPress()
128130
}
129131

130132
fun playContinuousBeep() {
131133
if (soundUtils == null) {
132134
soundUtils = SoundUtils(context)
133-
soundUtils!!.playBuzzerRepeat()
135+
soundUtils?.init()
136+
soundUtils?.playBuzzerRepeat()
134137
}
135138
}
136139

app/src/main/java/com/thanksmister/iot/mqtt/alarmpanel/utils/SoundUtils.java

-77
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
package com.thanksmister.iot.mqtt.alarmpanel.utils
2+
3+
import android.content.Context
4+
import android.content.ContextWrapper
5+
import android.media.MediaPlayer
6+
import android.os.Handler
7+
import android.os.HandlerThread
8+
import com.thanksmister.iot.mqtt.alarmpanel.R
9+
import timber.log.Timber
10+
11+
class SoundUtils(base: Context) : ContextWrapper(base) {
12+
13+
private var speaker: MediaPlayer? = null
14+
private var playing: Boolean = false
15+
private var repeating: Boolean = false
16+
17+
private val soundThread: HandlerThread = HandlerThread("buttonSound");
18+
private var soundHandler: Handler? = null
19+
20+
fun init(){
21+
Timber.d("init")
22+
soundThread.start();
23+
soundHandler = Handler(soundThread.looper);
24+
}
25+
26+
fun destroyBuzzer() {
27+
Timber.d("destroyBuzzer")
28+
soundHandler?.post(Runnable { soundHandler?.removeCallbacks(repeatAudioRunnable) })
29+
soundHandler?.post(Runnable { soundHandler?.removeCallbacks(streamAudioRunnable) })
30+
}
31+
32+
fun playBuzzerOnButtonPress() {
33+
Timber.d("playBuzzerOnButtonPress")
34+
if (repeating) {
35+
stopBuzzerRepeat()
36+
repeating = false
37+
}
38+
soundHandler?.post(streamAudioRunnable);
39+
}
40+
41+
private val streamAudioRunnable = Runnable {
42+
val speaker = MediaPlayer.create(applicationContext, R.raw.beep)
43+
speaker.setOnCompletionListener { mp ->
44+
mp.stop()
45+
mp.release()
46+
playing = false
47+
}
48+
speaker.start()
49+
playing = true
50+
}
51+
52+
private val repeatAudioRunnable = Runnable {
53+
Timber.d("repeatAudioRunnable")
54+
if(repeating) {
55+
speaker = MediaPlayer.create(applicationContext, R.raw.beep_loop)
56+
speaker?.setOnCompletionListener { mp ->
57+
mp.stop()
58+
mp.release()
59+
}
60+
speaker?.isLooping = true
61+
speaker?.start()
62+
}
63+
}
64+
65+
private fun stopBuzzerRepeat() {
66+
Timber.d("stopBuzzerRepeat")
67+
if (speaker != null) {
68+
if (speaker!!.isPlaying) {
69+
speaker!!.stop()
70+
}
71+
speaker!!.release()
72+
}
73+
repeating = false
74+
soundHandler?.removeCallbacks(repeatAudioRunnable);
75+
}
76+
77+
private fun repeatBuzzer() {
78+
soundHandler?.postDelayed(repeatAudioRunnable, 2000);
79+
}
80+
81+
fun playBuzzerRepeat() {
82+
Timber.d("playBuzzerRepeat")
83+
repeating = true
84+
soundHandler?.post(repeatAudioRunnable);
85+
}
86+
}

app/src/main/res/values-es/strings.xml

+11-11
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@
8585
<string name="preference_title_web">Página para el sistema de domótica</string>
8686
<string name="preference_summary_web">Visualiza la página de tu sistema de domótica deslizando la pantalla principal.</string>
8787
<string name="preference_title_web_url">Dirección del sistema de domótica</string>
88-
<string name="preference_summary_web_url">Introduce la dirección Ip de tu sistema de domótica con el prefijo y el puerto si es necesario (ejemplo: http://ipaddress:8123).</string>
88+
<string name="preference_summary_web_url">Introduce la dirección Ip de tu sistema de domótica con el prefijo y el puerto si es necesario. (ejemplo: http://ipaddress:8123).</string>
8989
<string name="preference_web_description">Esta es una prestación experimental. Esa página se renderizará con la versión para Android del navegador Chrome y puede que sea renderizada de diferentes formas, dependiendo de tus versiones del "Android SDK" y "WebView".</string>
9090

9191
<string name="preference_title_notification">Notificaciones</string>
@@ -96,24 +96,24 @@
9696
<string name="preference_summary_inactivity_minutes">Después de %1$s minuto(s) de inactividad, el brillo de la pantalla disminuye.</string>
9797

9898

99-
<string name="preference_title_notifications">Notificacioness</string>
99+
<string name="preference_title_notifications">Notificaciones</string>
100100
<string name="preference_title_mqtt_notifications">Notificaciones MQTT</string>
101-
<string name="preference_summary_mqtt_notifications">Mostrar o hablar las notificacioness MQTT.</string>
101+
<string name="preference_summary_mqtt_notifications">Mostrar o hablar las notificaciones MQTT.</string>
102102

103103
<string name="preference_title_alert">Notificaciones de alertas</string>
104104
<string name="preference_title_system_notifications">Notificaciones del sistema</string>
105105
<string name="preference_summary_alert">Usa un cuadro de diálogo para mostrar las notificaciones del sistema</string>
106106

107107
<string name="preference_tts_voice"> Voz TTS</string>
108108
<string name="preference_tts">Notificaciones TTS</string>
109-
<string name="preference_summary_tts">Usa el servicio "Google Text-To-Speech" para reproducir el valor de "alarmState" de los mensaje MQTT. (Nota: Requiere Android Lollipop o superior.)</string>
109+
<string name="preference_summary_tts">Usa el servicio "Google Text-To-Speech" para reproducir el valor de "alarmState" de los mensajes MQTT. (Nota: Requiere Android Lollipop o superior.)</string>
110110

111111
<string name="preference_tts_topic">TTS Topic</string>
112112
<string name="preference_tts_topic_title">Esteblece el "Topic Value"</string>
113113
<string name="preference_tts_topic_summary">Formato de ejemplo para el "message topic" y "alarmState" que será reproducido (ten en cuenta que para reproducir locuciones TTS, se necesitan unos altavoces externos): \n\n"{\"topic\":\"home/notification\", \"payload\":\"Hello!\"}"</string>
114114

115115

116-
<string name="preference_camera">Capturas con la cámara</string>
116+
<string name="preference_camera"> Cámara</string>
117117
<string name="preference_camera_title">Capturas con la cámara</string>
118118
<string name="preference_camera_summary">Uso de la cámara para la captura de una imagen y enviarla por email cuando alguien desactiva la alarma. (Nota: Requiere Android Lollipop o superior.)</string>
119119

@@ -132,7 +132,7 @@
132132
<string name="preference_mail_to_summary">Introduce el email de quien recibirá la imagen. Puedes introducir varios destinatarios separados por comas.(ejemplo: "mister@thankmister.com" or "mister@thankmister.com, me@thankmister.com")</string>
133133

134134
<string name="preference_mail_title">Ajustes de Mail Gun</string>
135-
<string name="preference_mail_description">Para enviar imágenes por email, necesitar abrir una cuenta en MailGun (mailgun.com) y proporcionar el nombre de dominio y la "api key", así como la dirección email del buzón.</string>
135+
<string name="preference_mail_description">Para enviar imágenes por email, necesitas abrir una cuenta en MailGun (mailgun.com) y proporcionar el nombre de dominio y la "api key", así como la dirección email del buzón.</string>
136136

137137
<string name="text_title_system">ALARMA</string>
138138
<string name="text_titled_disarmed">INACTIVA</string>
@@ -145,8 +145,8 @@
145145
<string name="toast_alarm_deactivated">¡Alarma desactivada!</string>
146146
<string name="activity_logs_title">Logs</string>
147147

148-
<string name="text_arm_home">ACTIVAR MODO "EN CASA"</string>
149-
<string name="text_arm_away">ACTIVAR MODO "FUERA DE CASA"</string>
148+
<string name="text_arm_home">MODO "EN CASA"</string>
149+
<string name="text_arm_away">MODO "FUERA DE CASA"</string>
150150
<string name="text_system">ALARMA</string>
151151
<string name="text_disarmed">INACTIVA</string>
152152
<string name="dialog_alarm_triggered">INTROCUCE EL CÓDIGO PARA ANULAR</string>
@@ -165,7 +165,7 @@
165165
<string name="mail_subject_text">Enviar sugerencias:</string>
166166

167167
<string name="thanks_mister_title">Thanks, Mister!</string>
168-
<string name="designer_developer_text">Diseño y desarrollo</string>
168+
<string name="designer_developer_text">Diseño y desarrollo:</string>
169169
<string name="company_url_text">thanksmister.com</string>
170170
<string name="company_email">mister@thanksmister.com</string>
171171
<string name="text_feedback">Sugerencias</string>
@@ -192,7 +192,7 @@
192192
<string name="progress_location">Estableciendo ubicación…</string>
193193
<string name="text_error_only_numbers">Asegúrate de que el valor solo contiene números y no está en blanco.</string>
194194
<string name="text_error_blank_entry">El valor no puede estar en blanco. Por favor, introcuce uno válido.</string>
195-
<string name="text_alarm_disabled_email">Tu alarma ha sido desactivada, esta una imagen de ese momento.</string>
195+
<string name="text_alarm_disabled_email">Tu alarma ha sido desactivada y esta una imagen de quien lo hizo.</string>
196196
<string name="text_alarm_disabled_email_subject">Alarma desactivada</string>
197197
<string name="text_camera_failed_configuration">La configuración de la cámara falló, dispones de cámara?</string>
198198
<string name="text_camera_failed_session">La captura ha fallado, dispones de cámara?</string>
@@ -243,7 +243,7 @@
243243
<string name="pref_telegram_token_summary">Ingrese su token de API de Telegram.</string>
244244
<string name="pref_telegram_chat_id_title">Telegram Chat Id</string>
245245
<string name="pref_telegram_api_title">Token de API de Telegram</string>
246-
<string name="pref_camera_send_image_notes">Puede usar Telegram, Mailgun o ambos para enviar imágenes capturadas.</string>
246+
<string name="pref_camera_send_image_notes">Puedes usar Telegram, Mailgun o ambos para enviar imágenes capturadas.</string>
247247
<string name="menu_item_help">Ayuda</string>
248248
<string name="error_mailgun_credentials">Hubo un problema al enviar la imagen por correo, compruebe sus credenciales de Mailgun.</string>
249249

build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Top-level build file where you can add configuration options common to all sub-projects/modules.
22

33
buildscript {
4-
ext.kotlin_version = '1.2.20'
4+
ext.kotlin_version = '1.2.21'
55
repositories {
66
jcenter()
77
maven {

0 commit comments

Comments
 (0)