diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index e91f62f9..04e87a2f 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -124,6 +124,10 @@
+
+
+
+
diff --git a/app/src/main/kotlin/com/simplemobiletools/clock/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/clock/extensions/Context.kt
index 983ef28a..a7eaef78 100644
--- a/app/src/main/kotlin/com/simplemobiletools/clock/extensions/Context.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/clock/extensions/Context.kt
@@ -27,17 +27,18 @@ import com.simplemobiletools.clock.models.Alarm
import com.simplemobiletools.clock.models.MyTimeZone
import com.simplemobiletools.clock.models.Timer
import com.simplemobiletools.clock.models.TimerState
-import com.simplemobiletools.clock.receivers.AlarmReceiver
-import com.simplemobiletools.clock.receivers.HideAlarmReceiver
-import com.simplemobiletools.clock.receivers.HideTimerReceiver
+import com.simplemobiletools.clock.receivers.*
import com.simplemobiletools.clock.services.SnoozeService
import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import java.text.SimpleDateFormat
-import java.util.*
+import java.util.Calendar
+import java.util.Date
+import java.util.TimeZone
import kotlin.math.pow
+import kotlin.time.Duration.Companion.minutes
val Context.config: Config get() = Config.newInstance(applicationContext)
@@ -147,11 +148,26 @@ fun Context.setupAlarmClock(alarm: Alarm, triggerInSeconds: Int) {
val targetMS = System.currentTimeMillis() + triggerInSeconds * 1000
try {
AlarmManagerCompat.setAlarmClock(alarmManager, targetMS, getOpenAlarmTabIntent(), getAlarmIntent(alarm))
+
+ // show a notification to allow dismissing the alarm 10 minutes before it actually triggers
+ val dismissalTriggerTime = if (targetMS - System.currentTimeMillis() < 10.minutes.inWholeMilliseconds) {
+ System.currentTimeMillis() + 500
+ } else {
+ targetMS - 10.minutes.inWholeMilliseconds
+ }
+ AlarmManagerCompat.setExactAndAllowWhileIdle(alarmManager, 0, dismissalTriggerTime, getEarlyAlarmDismissalIntent(alarm))
} catch (e: Exception) {
showErrorToast(e)
}
}
+fun Context.getEarlyAlarmDismissalIntent(alarm: Alarm): PendingIntent {
+ val intent = Intent(this, EarlyAlarmDismissalReceiver::class.java).apply {
+ putExtra(ALARM_ID, alarm.id)
+ }
+ return PendingIntent.getBroadcast(this, EARLY_ALARM_DISMISSAL_INTENT_ID, intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE)
+}
+
fun Context.getOpenAlarmTabIntent(): PendingIntent {
val intent = getLaunchIntent() ?: Intent(this, SplashActivity::class.java)
intent.putExtra(OPEN_TAB, TAB_ALARM)
@@ -427,6 +443,14 @@ fun Context.getHideAlarmPendingIntent(alarm: Alarm, channelId: String): PendingI
return PendingIntent.getBroadcast(this, alarm.id, intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE)
}
+fun Context.getDismissAlarmPendingIntent(alarmId: Int, notificationId: Int): PendingIntent {
+ val intent = Intent(this, DismissAlarmReceiver::class.java).apply {
+ putExtra(ALARM_ID, alarmId)
+ putExtra(NOTIFICATION_ID, notificationId)
+ }
+ return PendingIntent.getBroadcast(this, alarmId, intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE)
+}
+
fun Context.getAlarmNotification(pendingIntent: PendingIntent, alarm: Alarm): Notification {
val soundUri = alarm.soundUri
if (soundUri != SILENT) {
diff --git a/app/src/main/kotlin/com/simplemobiletools/clock/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/clock/helpers/Constants.kt
index c9894afe..904ebe0d 100644
--- a/app/src/main/kotlin/com/simplemobiletools/clock/helpers/Constants.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/clock/helpers/Constants.kt
@@ -26,20 +26,24 @@ const val WAS_INITIAL_WIDGET_SET_UP = "was_initial_widget_set_up"
const val TABS_COUNT = 4
const val EDITED_TIME_ZONE_SEPARATOR = ":"
const val ALARM_ID = "alarm_id"
+const val NOTIFICATION_ID = "notification_id"
const val DEFAULT_ALARM_MINUTES = 480
const val DEFAULT_MAX_ALARM_REMINDER_SECS = 300
const val DEFAULT_MAX_TIMER_REMINDER_SECS = 60
const val SIMPLE_PHONE = "Simple_Phone"
const val ALARM_NOTIFICATION_CHANNEL_ID = "Alarm_Channel"
+const val EARLY_ALARM_DISMISSAL_CHANNEL_ID = "Early Alarm Dismissal"
+const val OPEN_STOPWATCH_TAB_INTENT_ID = 9993
const val PICK_AUDIO_FILE_INTENT_ID = 9994
const val REMINDER_ACTIVITY_INTENT_ID = 9995
const val OPEN_ALARMS_TAB_INTENT_ID = 9996
-const val OPEN_STOPWATCH_TAB_INTENT_ID = 9993
-const val OPEN_APP_INTENT_ID = 9998
+const val OPEN_APP_INTENT_ID = 9997
const val ALARM_NOTIF_ID = 9998
const val TIMER_RUNNING_NOTIF_ID = 10000
const val STOPWATCH_RUNNING_NOTIF_ID = 10001
+const val EARLY_ALARM_DISMISSAL_INTENT_ID = 10002
+const val EARLY_ALARM_NOTIF_ID = 10003
const val OPEN_TAB = "open_tab"
const val TAB_CLOCK = 0
diff --git a/app/src/main/kotlin/com/simplemobiletools/clock/models/Alarm.kt b/app/src/main/kotlin/com/simplemobiletools/clock/models/Alarm.kt
index b9b4ada5..37092f77 100644
--- a/app/src/main/kotlin/com/simplemobiletools/clock/models/Alarm.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/clock/models/Alarm.kt
@@ -1,4 +1,12 @@
package com.simplemobiletools.clock.models
-data class Alarm(var id: Int, var timeInMinutes: Int, var days: Int, var isEnabled: Boolean, var vibrate: Boolean, var soundTitle: String,
- var soundUri: String, var label: String)
+data class Alarm(
+ var id: Int,
+ var timeInMinutes: Int,
+ var days: Int,
+ var isEnabled: Boolean,
+ var vibrate: Boolean,
+ var soundTitle: String,
+ var soundUri: String,
+ var label: String
+)
diff --git a/app/src/main/kotlin/com/simplemobiletools/clock/receivers/AlarmReceiver.kt b/app/src/main/kotlin/com/simplemobiletools/clock/receivers/AlarmReceiver.kt
index a1e7b7cc..20c0c1b5 100644
--- a/app/src/main/kotlin/com/simplemobiletools/clock/receivers/AlarmReceiver.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/clock/receivers/AlarmReceiver.kt
@@ -16,6 +16,7 @@ import com.simplemobiletools.clock.extensions.*
import com.simplemobiletools.clock.helpers.ALARM_ID
import com.simplemobiletools.clock.helpers.ALARM_NOTIFICATION_CHANNEL_ID
import com.simplemobiletools.clock.helpers.ALARM_NOTIF_ID
+import com.simplemobiletools.clock.helpers.EARLY_ALARM_NOTIF_ID
import com.simplemobiletools.commons.extensions.showErrorToast
import com.simplemobiletools.commons.helpers.isOreoPlus
@@ -25,6 +26,8 @@ class AlarmReceiver : BroadcastReceiver() {
val id = intent.getIntExtra(ALARM_ID, -1)
val alarm = context.dbHelper.getAlarmWithId(id) ?: return
+ context.hideNotification(EARLY_ALARM_NOTIF_ID) // hide early dismissal notification if not already dismissed
+
if (context.isScreenOn()) {
context.showAlarmNotification(alarm)
Handler().postDelayed({
diff --git a/app/src/main/kotlin/com/simplemobiletools/clock/receivers/DismissAlarmReceiver.kt b/app/src/main/kotlin/com/simplemobiletools/clock/receivers/DismissAlarmReceiver.kt
new file mode 100644
index 00000000..36492a54
--- /dev/null
+++ b/app/src/main/kotlin/com/simplemobiletools/clock/receivers/DismissAlarmReceiver.kt
@@ -0,0 +1,51 @@
+package com.simplemobiletools.clock.receivers
+
+import android.content.BroadcastReceiver
+import android.content.Context
+import android.content.Intent
+import com.simplemobiletools.clock.extensions.*
+import com.simplemobiletools.clock.helpers.ALARM_ID
+import com.simplemobiletools.clock.helpers.NOTIFICATION_ID
+import com.simplemobiletools.clock.models.Alarm
+import com.simplemobiletools.commons.extensions.removeBit
+import com.simplemobiletools.commons.helpers.ensureBackgroundThread
+import java.util.Calendar
+import kotlin.math.pow
+
+class DismissAlarmReceiver : BroadcastReceiver() {
+ override fun onReceive(context: Context, intent: Intent) {
+ val alarmId = intent.getIntExtra(ALARM_ID, -1)
+ val notificationId = intent.getIntExtra(NOTIFICATION_ID, -1)
+ if (alarmId == -1) {
+ return
+ }
+
+ context.hideNotification(notificationId)
+
+ ensureBackgroundThread {
+ context.dbHelper.getAlarmWithId(alarmId)?.let { alarm ->
+ context.cancelAlarmClock(alarm)
+ scheduleNextAlarm(alarm, context)
+ if (alarm.days < 0) {
+ context.dbHelper.updateAlarmEnabledState(alarm.id, false)
+ context.updateWidgets()
+ }
+ }
+ }
+ }
+
+ private fun scheduleNextAlarm(alarm: Alarm, context: Context) {
+ val oldBitmask = alarm.days
+ alarm.days = removeTodayFromBitmask(oldBitmask)
+ context.scheduleNextAlarm(alarm, false)
+ alarm.days = oldBitmask
+ }
+
+ private fun removeTodayFromBitmask(bitmask: Int): Int {
+ val calendar = Calendar.getInstance()
+ calendar.firstDayOfWeek = Calendar.MONDAY
+ val dayOfWeek = (calendar.get(Calendar.DAY_OF_WEEK) + 5) % 7
+ val todayBitmask = 2.0.pow(dayOfWeek).toInt()
+ return bitmask.removeBit(todayBitmask)
+ }
+}
diff --git a/app/src/main/kotlin/com/simplemobiletools/clock/receivers/EarlyAlarmDismissalReceiver.kt b/app/src/main/kotlin/com/simplemobiletools/clock/receivers/EarlyAlarmDismissalReceiver.kt
new file mode 100644
index 00000000..b5fd5348
--- /dev/null
+++ b/app/src/main/kotlin/com/simplemobiletools/clock/receivers/EarlyAlarmDismissalReceiver.kt
@@ -0,0 +1,58 @@
+package com.simplemobiletools.clock.receivers
+
+import android.app.Notification
+import android.app.NotificationChannel
+import android.app.NotificationManager
+import android.content.BroadcastReceiver
+import android.content.Context
+import android.content.Intent
+import android.text.format.DateFormat
+import androidx.core.app.NotificationCompat
+import com.simplemobiletools.clock.R
+import com.simplemobiletools.clock.extensions.getDismissAlarmPendingIntent
+import com.simplemobiletools.clock.extensions.getNextAlarm
+import com.simplemobiletools.clock.extensions.getOpenAlarmTabIntent
+import com.simplemobiletools.clock.helpers.*
+import com.simplemobiletools.commons.helpers.isOreoPlus
+import java.text.SimpleDateFormat
+import java.util.*
+
+class EarlyAlarmDismissalReceiver : BroadcastReceiver() {
+
+ override fun onReceive(context: Context, intent: Intent) {
+ val alarmId = intent.getIntExtra(ALARM_ID, -1)
+ if (alarmId == -1) {
+ return
+ }
+
+ triggerEarlyDismissalNotification(context, alarmId)
+ }
+
+ private fun triggerEarlyDismissalNotification(context: Context, alarmId: Int) {
+ val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
+ if (isOreoPlus()) {
+ NotificationChannel(EARLY_ALARM_DISMISSAL_CHANNEL_ID, context.getString(R.string.early_alarm_dismissal), NotificationManager.IMPORTANCE_DEFAULT).apply {
+ setBypassDnd(true)
+ setSound(null, null)
+ notificationManager.createNotificationChannel(this)
+ }
+ }
+
+ val dismissIntent = context.getDismissAlarmPendingIntent(alarmId, EARLY_ALARM_NOTIF_ID)
+ val contentIntent = context.getOpenAlarmTabIntent()
+ val notification = NotificationCompat.Builder(context)
+ .setContentTitle(context.getString(R.string.upcoming_alarm))
+ .setContentText(context.getNextAlarm())
+ .setSmallIcon(R.drawable.ic_alarm_vector)
+ .setPriority(Notification.PRIORITY_LOW)
+ .addAction(0, context.getString(R.string.dismiss), dismissIntent)
+ .setContentIntent(contentIntent)
+ .setSound(null)
+ .setAutoCancel(true)
+ .setChannelId(EARLY_ALARM_DISMISSAL_CHANNEL_ID)
+ .build()
+
+ notificationManager.notify(EARLY_ALARM_NOTIF_ID, notification)
+ }
+
+}
diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml
index 8a160b4b..b8fe62cf 100644
--- a/app/src/main/res/values-ar/strings.xml
+++ b/app/src/main/res/values-ar/strings.xml
@@ -29,6 +29,8 @@
لم يتم العثور على موقتات
Add timer
التنبيه القادم
+ Early alarm dismissal
+
أجهزة ضبط الوقت قيد التشغيل
عداد الوقت لـ %s قيد التشغيل
@@ -55,4 +57,4 @@
Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
-->
-
\ No newline at end of file
+
diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml
index b182d782..7e5956d4 100644
--- a/app/src/main/res/values-az/strings.xml
+++ b/app/src/main/res/values-az/strings.xml
@@ -28,6 +28,7 @@
No timers found
Add timer
Upcoming alarm
+ Early alarm dismissal
Timers are running
diff --git a/app/src/main/res/values-be/strings.xml b/app/src/main/res/values-be/strings.xml
index 71132cce..e5e43972 100644
--- a/app/src/main/res/values-be/strings.xml
+++ b/app/src/main/res/values-be/strings.xml
@@ -29,6 +29,8 @@
Таймеры не знойдзены
Add timer
Маючы адбыцца будзільнік
+ Early alarm dismissal
+
Таймеры запушчаны
Таймер для %s запушчаны
@@ -53,4 +55,4 @@
Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
-->
-
\ No newline at end of file
+
diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml
index 6fecafb9..34c33d1b 100644
--- a/app/src/main/res/values-bg/strings.xml
+++ b/app/src/main/res/values-bg/strings.xml
@@ -29,6 +29,7 @@
No timers found
Add timer
Upcoming alarm
+ Early alarm dismissal
Таймерите са включени
Таймерът за %s е включен
diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml
index 0feb9c29..bbfd33b8 100644
--- a/app/src/main/res/values-ca/strings.xml
+++ b/app/src/main/res/values-ca/strings.xml
@@ -29,6 +29,8 @@
No s\'ha trobat cap temporitzador
Add timer
Pròxima alarma
+ Early alarm dismissal
+
Els temporitzadors estan en marxa
El temporitzador per a %s està en marxa
@@ -51,4 +53,4 @@
Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
-->
-
\ No newline at end of file
+
diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml
index 9c701cb4..bc2c4dc9 100644
--- a/app/src/main/res/values-cs/strings.xml
+++ b/app/src/main/res/values-cs/strings.xml
@@ -29,6 +29,8 @@
Nenalezeny žádné časovače
Přidat časovač
Nadcházející budík
+ Early alarm dismissal
+
Časovače běží
Časovač pro %s běží
@@ -52,4 +54,4 @@
Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
-->
-
\ No newline at end of file
+
diff --git a/app/src/main/res/values-cy/strings.xml b/app/src/main/res/values-cy/strings.xml
index 1f213628..fecbd339 100644
--- a/app/src/main/res/values-cy/strings.xml
+++ b/app/src/main/res/values-cy/strings.xml
@@ -29,6 +29,8 @@
No timers found
Add timer
Upcoming alarm
+ Early alarm dismissal
+
Timers are running
Timer for %s is running
diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml
index 4fd9d7ba..66603ad4 100644
--- a/app/src/main/res/values-da/strings.xml
+++ b/app/src/main/res/values-da/strings.xml
@@ -28,6 +28,7 @@
No timers found
Add timer
Upcoming alarm
+ Early alarm dismissal
Timers are running
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 3a564247..378a951d 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -29,6 +29,8 @@
Keine Timer gefunden
Timer hinzufügen
Bevorstehender Alarm
+ Early alarm dismissal
+
Die Timer laufen
Timer für %s läuft
@@ -51,4 +53,4 @@
Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
-->
-
\ No newline at end of file
+
diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml
index ddb5113c..d70af139 100644
--- a/app/src/main/res/values-el/strings.xml
+++ b/app/src/main/res/values-el/strings.xml
@@ -29,6 +29,8 @@
Δεν βρέθηκαν χρονόμετρα
Προσθήκη χρονόμετρου
Επερχόμενη αφύπνιση
+ Early alarm dismissal
+
Τα χρονόμετρα σε λειτουργία
Το χρονόμετρο για %s σε λειτουργία
diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml
index 2dc612d7..9b635250 100644
--- a/app/src/main/res/values-eo/strings.xml
+++ b/app/src/main/res/values-eo/strings.xml
@@ -29,6 +29,7 @@
No timers found
Add timer
Upcoming alarm
+ Early alarm dismissal
Timers are running
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index 48a18951..0e803863 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -29,6 +29,8 @@
No se encontraron temporizadores
Add timer
Próxima alarma
+ Early alarm dismissal
+
Los temporizadores están en marcha
El temporizador para %s está en marcha
@@ -52,4 +54,4 @@
Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
-->
-
\ No newline at end of file
+
diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml
index ad0152af..f0aa24b9 100644
--- a/app/src/main/res/values-et/strings.xml
+++ b/app/src/main/res/values-et/strings.xml
@@ -29,6 +29,8 @@
Ei leitud taimereid
Lisage taimer
Järgmine äratus
+ Early alarm dismissal
+
Taimerid töötavad
%s taimer töötab
@@ -51,4 +53,4 @@
Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
-->
-
\ No newline at end of file
+
diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml
index ece09303..0957cb2a 100644
--- a/app/src/main/res/values-eu/strings.xml
+++ b/app/src/main/res/values-eu/strings.xml
@@ -28,6 +28,7 @@
No timers found
Add timer
Upcoming alarm
+ Early alarm dismissal
Timers are running
diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml
index 93216b8f..9827677a 100644
--- a/app/src/main/res/values-fi/strings.xml
+++ b/app/src/main/res/values-fi/strings.xml
@@ -29,6 +29,8 @@
Ajastuksia ei löytynyt
Lisää ajastus
Ajastettu herätys
+ Early alarm dismissal
+
Ajastuksia on käynnissä
%s ajastus on käynnissä
@@ -51,4 +53,4 @@
Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
-->
-
\ No newline at end of file
+
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 7d150ae7..f8e534b9 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -29,6 +29,8 @@
Aucune minuterie trouvée
Ajouter une minuterie
Alarme à venir
+ Early alarm dismissal
+
Les minuteries sont en marche
La minuterie de %s est en marche
@@ -52,4 +54,4 @@
Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
-->
-
\ No newline at end of file
+
diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml
index 0522b2bc..5c1b7992 100644
--- a/app/src/main/res/values-gl/strings.xml
+++ b/app/src/main/res/values-gl/strings.xml
@@ -29,6 +29,8 @@
Non se atoparon temporizadores
Engadir temporizador
Próxima alarma
+ Early alarm dismissal
+
Os temporizadores atopanse traballando
O temporizador para %s atopase traballando
@@ -51,4 +53,4 @@
Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
-->
-
\ No newline at end of file
+
diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml
index 30c2cbfb..3741c8af 100644
--- a/app/src/main/res/values-hr/strings.xml
+++ b/app/src/main/res/values-hr/strings.xml
@@ -29,6 +29,8 @@
Nema brojača vremena
Dodaj brojač vremena
Nadolazeći alarm
+ Early alarm dismissal
+
Brojači su pokrenuti
Brojač za %s je pokrenut
@@ -52,4 +54,4 @@
Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
-->
-
\ No newline at end of file
+
diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml
index 25392f97..5b0a4ca3 100644
--- a/app/src/main/res/values-hu/strings.xml
+++ b/app/src/main/res/values-hu/strings.xml
@@ -29,6 +29,8 @@
Nincsenek időzitők
Időzítő hozzáadása
Közelgő riasztás
+ Early alarm dismissal
+
Az időzítő megy
A(z) %s időzítő fut
@@ -51,4 +53,4 @@
Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
-->
-
\ No newline at end of file
+
diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml
index d9e3b213..6c23fa66 100644
--- a/app/src/main/res/values-in/strings.xml
+++ b/app/src/main/res/values-in/strings.xml
@@ -29,6 +29,8 @@
Tidak ada pewaktu yang ditemukan
Tambahkan pewaktu
Alarm berikut
+ Early alarm dismissal
+
Pewaktu sedang berjalan
Pewaktu untuk %s sedang berjalan
@@ -50,4 +52,4 @@
Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
-->
-
\ No newline at end of file
+
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index e92c354d..2faf23f6 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -29,6 +29,8 @@
Nessun contaminuti trovato
Aggiungi contaminuti
Allarme imminente
+ Early alarm dismissal
+
I contaminuti sono in funzione
Il contaminuti per %s è in funzione
@@ -52,4 +54,4 @@
Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
-->
-
\ No newline at end of file
+
diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml
index b3dde4cb..0cb0fc2b 100644
--- a/app/src/main/res/values-iw/strings.xml
+++ b/app/src/main/res/values-iw/strings.xml
@@ -29,6 +29,8 @@
No timers found
Add timer
Upcoming alarm
+ Early alarm dismissal
+
טיימר פועל
טיימר עבור %s פועל
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index f8b4eea8..e27614c3 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -29,6 +29,8 @@
タイマーが見つかりません
タイマーを追加
今後のアラーム
+ Early alarm dismissal
+
タイマーが作動中
タイマー %s が作動中
@@ -50,4 +52,4 @@
Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
-->
-
\ No newline at end of file
+
diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml
index 0f2fb5b3..1508dd28 100644
--- a/app/src/main/res/values-lt/strings.xml
+++ b/app/src/main/res/values-lt/strings.xml
@@ -28,6 +28,7 @@
No timers found
Add timer
Upcoming alarm
+ Early alarm dismissal
Timers are running
diff --git a/app/src/main/res/values-ml/strings.xml b/app/src/main/res/values-ml/strings.xml
index ba90bbdf..7344244d 100644
--- a/app/src/main/res/values-ml/strings.xml
+++ b/app/src/main/res/values-ml/strings.xml
@@ -29,6 +29,8 @@
ടൈമറുകളൊന്നും കണ്ടെത്തിയില്ല
ടൈമർ ചേർക്കുക
Upcoming alarm
+ Early alarm dismissal
+
ടൈമറുകൾ പ്രവർത്തിക്കുന്നു
%s-നുള്ള ടൈമർ പ്രവർത്തിക്കുന്നു
@@ -51,4 +53,4 @@
Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
-->
-
\ No newline at end of file
+
diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml
index 34bf849c..84a219d8 100644
--- a/app/src/main/res/values-nb-rNO/strings.xml
+++ b/app/src/main/res/values-nb-rNO/strings.xml
@@ -29,6 +29,8 @@
Ingen timere funnet
Add timer
Kommende alarm
+ Early alarm dismissal
+
Timere er i gang
Timer for %s er i gang
@@ -51,4 +53,4 @@
Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
-->
-
\ No newline at end of file
+
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index 8e9b3bc9..8b920293 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -29,6 +29,8 @@
Geen timers
Timer toevoegen
Volgende wekker
+ Early alarm dismissal
+
Timers lopen
Timer voor %s loopt
@@ -51,4 +53,4 @@
Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
-->
-
\ No newline at end of file
+
diff --git a/app/src/main/res/values-pa-rPK/strings.xml b/app/src/main/res/values-pa-rPK/strings.xml
index 30d0c332..6ac3dfd1 100644
--- a/app/src/main/res/values-pa-rPK/strings.xml
+++ b/app/src/main/res/values-pa-rPK/strings.xml
@@ -32,6 +32,7 @@
Upcoming alarm
سماں والے چالو کیتے جا رہے اے
%s لئی سماں والا چالو کیتا جا رہا اے
+ Early alarm dismissal
- %d سماں والا چالو کیتا جا رہا اے
- %d سماں والے چالو کیتے جا رہے اے
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index 4e361945..3c5cc87a 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -29,6 +29,8 @@
Nie znaleziono minutników
Dodaj minutnik
Nadchodzący alarm
+ Early alarm dismissal
+
Minutniki są uruchomione
Minutnik dla %s jest uruchomiony
@@ -53,4 +55,4 @@
Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
-->
-
\ No newline at end of file
+
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index 25f69672..8c749d0f 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -29,6 +29,8 @@
Nenhum temporizador encontrado
Adicionar temporizador
Próximo alarme
+ Early alarm dismissal
+
Temporizadores em execução
O temporizador para %s está em execução
diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml
index cb42aa34..17ea3605 100644
--- a/app/src/main/res/values-pt/strings.xml
+++ b/app/src/main/res/values-pt/strings.xml
@@ -29,6 +29,8 @@
Nenhum temporizador encontrado
Adicionar temporizador
Próximo alarme
+ Early alarm dismissal
+
Temporizadores em curso
Temporizador para %s está em curso
@@ -52,4 +54,4 @@
Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
-->
-
\ No newline at end of file
+
diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml
index 4fd36b8c..80d9109c 100644
--- a/app/src/main/res/values-ro/strings.xml
+++ b/app/src/main/res/values-ro/strings.xml
@@ -29,6 +29,8 @@
Nu au fost găsite temporizatoare
Adaugă temporizator
Upcoming alarm
+ Early alarm dismissal
+
Temporizatoarele sunt pornite
Temporizatorul de %s este pornit
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index f99f6a7a..4995907e 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -29,6 +29,8 @@
Таймеры отсутствуют
Добавить таймер
Предстоящий будильник
+ Early alarm dismissal
+
Таймеры запущены
Таймер для %s запущен
@@ -53,4 +55,4 @@
Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
-->
-
\ No newline at end of file
+
diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml
index 83276e54..99f9395f 100644
--- a/app/src/main/res/values-sk/strings.xml
+++ b/app/src/main/res/values-sk/strings.xml
@@ -28,6 +28,7 @@
Nenašli sa žiadne časovače
Pridať časovač
Nadchádzajúci budík
+ Predčasné zrušenie budíka
Sú spustené časovače
diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml
index d3c7dc42..c1456749 100644
--- a/app/src/main/res/values-sl/strings.xml
+++ b/app/src/main/res/values-sl/strings.xml
@@ -29,6 +29,8 @@
Ni časovnikov
Dodajte časovnik
Upcoming alarm
+ Early alarm dismissal
+
Tečejo časovniki
Časovnik za %s teče
diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml
index 7f4cccfa..6738397e 100644
--- a/app/src/main/res/values-sr/strings.xml
+++ b/app/src/main/res/values-sr/strings.xml
@@ -32,6 +32,7 @@
Тајмери раде
Тајмер за %s је покренут
Нови тајмер
+ Early alarm dismissal
- %d тајмер ради
- %d тајмери раде
diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml
index 0309448a..71656dbf 100644
--- a/app/src/main/res/values-sv/strings.xml
+++ b/app/src/main/res/values-sv/strings.xml
@@ -29,6 +29,8 @@
Inga timers hittades
Lägg till timer
Kommande alarm
+ Early alarm dismissal
+
Timers är igång
Timer för %s är igång
@@ -51,4 +53,4 @@
Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
-->
-
\ No newline at end of file
+
diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml
index 2dc612d7..9b635250 100644
--- a/app/src/main/res/values-th/strings.xml
+++ b/app/src/main/res/values-th/strings.xml
@@ -29,6 +29,7 @@
No timers found
Add timer
Upcoming alarm
+ Early alarm dismissal
Timers are running
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index dad28a57..c7f298bf 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -29,6 +29,8 @@
Zamanlayıcı bulunamadı
Zamanlayıcı ekle
Yaklaşan alarm
+ Early alarm dismissal
+
Zamanlayıcılar çalışıyor
%s için zamanlayıcı çalışıyor
@@ -51,4 +53,4 @@
Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
-->
-
\ No newline at end of file
+
diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml
index 22d1a197..96248bb7 100644
--- a/app/src/main/res/values-uk/strings.xml
+++ b/app/src/main/res/values-uk/strings.xml
@@ -29,6 +29,8 @@
Таймерів не знайдено
Add timer
Майбутній будильник
+ Early alarm dismissal
+
Таймери працюють
Таймер для %s працює
@@ -53,4 +55,4 @@
Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
-->
-
\ No newline at end of file
+
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index 8efb2ff3..ff65a5e8 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -29,6 +29,8 @@
未找到计时器
添加计时器
即将到来的闹铃
+ Early alarm dismissal
+
计时器正在运行
%s 的计时器正在运行
@@ -50,4 +52,4 @@
Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
-->
-
\ No newline at end of file
+
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index 46fc8fd8..fd136db8 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -28,6 +28,7 @@
No timers found
Add timer
Upcoming alarm
+ Early alarm dismissal
Timers are running
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index f20088f8..ca82614f 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -29,6 +29,7 @@
No timers found
Add timer
Upcoming alarm
+ Early alarm dismissal
Timers are running