Early dismissal of alarm

This commit is contained in:
Rawlin C 2023-07-02 17:03:01 +05:30
parent f3402b5a61
commit 7af2a25fa8
50 changed files with 261 additions and 30 deletions

View File

@ -124,6 +124,10 @@
<receiver android:name=".receivers.HideAlarmReceiver" />
<receiver android:name=".receivers.DismissAlarmReceiver" />
<receiver android:name=".receivers.EarlyAlarmDismissalReceiver" />
<receiver
android:name=".receivers.BootCompletedReceiver"
android:exported="true">

View File

@ -27,14 +27,13 @@ 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 java.util.*
import kotlin.math.pow
import kotlin.time.Duration.Companion.minutes
val Context.config: Config get() = Config.newInstance(applicationContext)
@ -144,11 +143,23 @@ fun Context.setupAlarmClock(alarm: Alarm, triggerInSeconds: Int) {
val targetMS = System.currentTimeMillis() + triggerInSeconds * 1000
try {
AlarmManagerCompat.setAlarmClock(alarmManager, targetMS, getOpenAlarmTabIntent(), getAlarmIntent(alarm))
// Trigger a notification to dismiss the alarm 5 minutes before the alarm if the screen is on
val dismissalTriggerTime = if (targetMS - System.currentTimeMillis() < (5.minutes.inWholeMilliseconds))(System.currentTimeMillis() + 500) else targetMS - (5.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)
putExtra(ALARM_TIME, alarm.timeInMinutes)
}
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)
@ -379,6 +390,14 @@ fun Context.getHideAlarmPendingIntent(alarm: Alarm): PendingIntent {
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) {

View File

@ -26,18 +26,23 @@ 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 ALARM_TIME = "alarm_time"
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 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 EARLY_ALARM_DISMISSAL_INTENT_ID = 9999
const val ALARM_NOTIF_ID = 9998
const val EARLY_ALARM_NOTIF_ID = 9999
const val TIMER_RUNNING_NOTIF_ID = 10000
const val STOPWATCH_RUNNING_NOTIF_ID = 10001

View File

@ -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
)

View File

@ -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({

View File

@ -0,0 +1,52 @@
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.helpers.ensureBackgroundThread
import java.util.*
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, true)
alarm.days = oldBitmask
}
private fun removeTodayFromBitmask(bitmask: Int): Int {
val calendar = Calendar.getInstance()
var dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - Calendar.MONDAY // This will give values from 0 (Monday) to 6 (Sunday)
if (dayOfWeek < 0) { // Adjust for Calendar.MONDAY being 2
dayOfWeek += 7
}
val todayBitmask = 1 shl dayOfWeek // This will shift the number 1 to the left by dayOfWeek places, creating a bitmask for today
return bitmask and todayBitmask.inv() // This will return a new bitmask without today included
}
}

View File

@ -0,0 +1,66 @@
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 androidx.core.app.NotificationCompat
import com.simplemobiletools.clock.R
import com.simplemobiletools.clock.extensions.getDismissAlarmPendingIntent
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
val alarmTime = intent.getIntExtra(ALARM_TIME, -1)
triggerEarlyDismissalNotification(context, alarmTime, alarmId)
}
private fun triggerEarlyDismissalNotification(context: Context, alarmTime: Int, 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(getNotificationTimeString(alarmTime))
.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)
}
/**
* Gets the time at which the alarm is going to fire.
* eg: "Sun 1:30 pm"
*/
private fun getNotificationTimeString(alarmTime: Int): String {
val calendar = Calendar.getInstance()
val triggerTime = ((alarmTime - getCurrentDayMinutes()) * 60) - calendar.get(Calendar.SECOND)
val targetMs = System.currentTimeMillis() + (triggerTime * 1000)
val sdf = SimpleDateFormat("EEE h:mm a", Locale.getDefault())
return sdf.format(Date(targetMs))
}
}

View File

@ -29,6 +29,8 @@
<string name="no_timers_found">لم يتم العثور على موقتات</string>
<string name="add_timer">Add timer</string>
<string name="upcoming_alarm">التنبيه القادم</string>
<string name="early_alarm_dismissal">Early Alarm Dismissal</string>
<!--Timer-->
<string name="timers_notification_msg">أجهزة ضبط الوقت قيد التشغيل</string>
<string name="timer_single_notification_label_msg">عداد الوقت لـ %s قيد التشغيل</string>
@ -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
-->
</resources>
</resources>

View File

@ -28,6 +28,7 @@
<string name="no_timers_found">No timers found</string>
<string name="add_timer">Add timer</string>
<string name="upcoming_alarm">Upcoming alarm</string>
<string name="early_alarm_dismissal">Early Alarm Dismissal</string>
<!--Timer-->
<string name="timers_notification_msg">Timers are running</string>

View File

@ -29,6 +29,8 @@
<string name="no_timers_found">Таймеры не знойдзены</string>
<string name="add_timer">Add timer</string>
<string name="upcoming_alarm">Маючы адбыцца будзільнік</string>
<string name="early_alarm_dismissal">Early Alarm Dismissal</string>
<!--Timer-->
<string name="timers_notification_msg">Таймеры запушчаны</string>
<string name="timer_single_notification_label_msg">Таймер для %s запушчаны</string>
@ -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
-->
</resources>
</resources>

View File

@ -29,6 +29,7 @@
<string name="no_timers_found">No timers found</string>
<string name="add_timer">Add timer</string>
<string name="upcoming_alarm">Upcoming alarm</string>
<string name="early_alarm_dismissal">Early Alarm Dismissal</string>
<!--Timer-->
<string name="timers_notification_msg">Таймерите са включени</string>
<string name="timer_single_notification_label_msg">Таймерът за %s е включен</string>

View File

@ -29,6 +29,8 @@
<string name="no_timers_found">No s\'ha trobat cap temporitzador</string>
<string name="add_timer">Add timer</string>
<string name="upcoming_alarm">Pròxima alarma</string>
<string name="early_alarm_dismissal">Early Alarm Dismissal</string>
<!--Timer-->
<string name="timers_notification_msg">Els temporitzadors estan en marxa</string>
<string name="timer_single_notification_label_msg">El temporitzador per a %s està en marxa</string>
@ -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
-->
</resources>
</resources>

View File

@ -29,6 +29,8 @@
<string name="no_timers_found">Nenalezeny žádné časovače</string>
<string name="add_timer">Přidat časovač</string>
<string name="upcoming_alarm">Nadcházející budík</string>
<string name="early_alarm_dismissal">Early Alarm Dismissal</string>
<!--Timer-->
<string name="timers_notification_msg">Časovače běží</string>
<string name="timer_single_notification_label_msg">Časovač pro %s běží</string>
@ -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
-->
</resources>
</resources>

View File

@ -29,6 +29,8 @@
<string name="no_timers_found">No timers found</string>
<string name="add_timer">Add timer</string>
<string name="upcoming_alarm">Upcoming alarm</string>
<string name="early_alarm_dismissal">Early Alarm Dismissal</string>
<!--Timer-->
<string name="timers_notification_msg">Timers are running</string>
<string name="timer_single_notification_label_msg">Timer for %s is running</string>

View File

@ -28,6 +28,7 @@
<string name="no_timers_found">No timers found</string>
<string name="add_timer">Add timer</string>
<string name="upcoming_alarm">Upcoming alarm</string>
<string name="early_alarm_dismissal">Early Alarm Dismissal</string>
<!--Timer-->
<string name="timers_notification_msg">Timers are running</string>

View File

@ -29,6 +29,8 @@
<string name="no_timers_found">Keine Timer gefunden</string>
<string name="add_timer">Timer hinzufügen</string>
<string name="upcoming_alarm">Bevorstehender Alarm</string>
<string name="early_alarm_dismissal">Early Alarm Dismissal</string>
<!--Timer-->
<string name="timers_notification_msg">Die Timer laufen</string>
<string name="timer_single_notification_label_msg">Timer für %s läuft</string>
@ -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
-->
</resources>
</resources>

View File

@ -29,6 +29,8 @@
<string name="no_timers_found">Δεν βρέθηκαν χρονόμετρα</string>
<string name="add_timer">Προσθήκη χρονόμετρου</string>
<string name="upcoming_alarm">Επερχόμενη αφύπνιση</string>
<string name="early_alarm_dismissal">Early Alarm Dismissal</string>
<!--Timer-->
<string name="timers_notification_msg">Τα χρονόμετρα σε λειτουργία</string>
<string name="timer_single_notification_label_msg">Το χρονόμετρο για %s σε λειτουργία</string>

View File

@ -29,6 +29,7 @@
<string name="no_timers_found">No timers found</string>
<string name="add_timer">Add timer</string>
<string name="upcoming_alarm">Upcoming alarm</string>
<string name="early_alarm_dismissal">Early Alarm Dismissal</string>
<!--Timer-->
<string name="timers_notification_msg">Timers are running</string>

View File

@ -29,6 +29,8 @@
<string name="no_timers_found">No se encontraron temporizadores</string>
<string name="add_timer">Add timer</string>
<string name="upcoming_alarm">Próxima alarma</string>
<string name="early_alarm_dismissal">Early Alarm Dismissal</string>
<!--Timer-->
<string name="timers_notification_msg">Los temporizadores están en marcha</string>
<string name="timer_single_notification_label_msg">El temporizador para %s está en marcha</string>
@ -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
-->
</resources>
</resources>

View File

@ -29,6 +29,8 @@
<string name="no_timers_found">Ei leitud taimereid</string>
<string name="add_timer">Lisage taimer</string>
<string name="upcoming_alarm">Järgmine äratus</string>
<string name="early_alarm_dismissal">Early Alarm Dismissal</string>
<!--Timer-->
<string name="timers_notification_msg">Taimerid töötavad</string>
<string name="timer_single_notification_label_msg">%s taimer töötab</string>
@ -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
-->
</resources>
</resources>

View File

@ -28,6 +28,7 @@
<string name="no_timers_found">No timers found</string>
<string name="add_timer">Add timer</string>
<string name="upcoming_alarm">Upcoming alarm</string>
<string name="early_alarm_dismissal">Early Alarm Dismissal</string>
<!--Timer-->
<string name="timers_notification_msg">Timers are running</string>

View File

@ -29,6 +29,8 @@
<string name="no_timers_found">Ajastuksia ei löytynyt</string>
<string name="add_timer">Lisää ajastus</string>
<string name="upcoming_alarm">Ajastettu herätys</string>
<string name="early_alarm_dismissal">Early Alarm Dismissal</string>
<!--Timer-->
<string name="timers_notification_msg">Ajastuksia on käynnissä</string>
<string name="timer_single_notification_label_msg">%s ajastus on käynnissä</string>
@ -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
-->
</resources>
</resources>

View File

@ -29,6 +29,8 @@
<string name="no_timers_found">Aucune minuterie trouvée</string>
<string name="add_timer">Ajouter une minuterie</string>
<string name="upcoming_alarm">Alarme à venir</string>
<string name="early_alarm_dismissal">Early Alarm Dismissal</string>
<!--Timer-->
<string name="timers_notification_msg">Les minuteries sont en marche</string>
<string name="timer_single_notification_label_msg">La minuterie de %s est en marche</string>
@ -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
-->
</resources>
</resources>

View File

@ -29,6 +29,8 @@
<string name="no_timers_found">Non se atoparon temporizadores</string>
<string name="add_timer">Engadir temporizador</string>
<string name="upcoming_alarm">Próxima alarma</string>
<string name="early_alarm_dismissal">Early Alarm Dismissal</string>
<!--Timer-->
<string name="timers_notification_msg">Os temporizadores atopanse traballando</string>
<string name="timer_single_notification_label_msg">O temporizador para %s atopase traballando</string>
@ -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
-->
</resources>
</resources>

View File

@ -29,6 +29,8 @@
<string name="no_timers_found">Nema brojača vremena</string>
<string name="add_timer">Dodaj brojač vremena</string>
<string name="upcoming_alarm">Nadolazeći alarm</string>
<string name="early_alarm_dismissal">Early Alarm Dismissal</string>
<!--Timer-->
<string name="timers_notification_msg">Brojači su pokrenuti</string>
<string name="timer_single_notification_label_msg">Brojač za %s je pokrenut</string>
@ -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
-->
</resources>
</resources>

View File

@ -29,6 +29,8 @@
<string name="no_timers_found">Nincsenek időzitők</string>
<string name="add_timer">Időzítő hozzáadása</string>
<string name="upcoming_alarm">Közelgő riasztás</string>
<string name="early_alarm_dismissal">Early Alarm Dismissal</string>
<!--Timer-->
<string name="timers_notification_msg">Az időzítő megy</string>
<string name="timer_single_notification_label_msg">A(z) %s időzítő fut</string>
@ -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
-->
</resources>
</resources>

View File

@ -29,6 +29,8 @@
<string name="no_timers_found">Tidak ada pewaktu yang ditemukan</string>
<string name="add_timer">Tambahkan pewaktu</string>
<string name="upcoming_alarm">Alarm berikut</string>
<string name="early_alarm_dismissal">Early Alarm Dismissal</string>
<!--Timer-->
<string name="timers_notification_msg">Pewaktu sedang berjalan</string>
<string name="timer_single_notification_label_msg">Pewaktu untuk %s sedang berjalan</string>
@ -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
-->
</resources>
</resources>

View File

@ -29,6 +29,8 @@
<string name="no_timers_found">Nessun contaminuti trovato</string>
<string name="add_timer">Aggiungi contaminuti</string>
<string name="upcoming_alarm">Allarme imminente</string>
<string name="early_alarm_dismissal">Early Alarm Dismissal</string>
<!--Timer-->
<string name="timers_notification_msg">I contaminuti sono in funzione</string>
<string name="timer_single_notification_label_msg">Il contaminuti per %s è in funzione</string>
@ -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
-->
</resources>
</resources>

View File

@ -29,6 +29,8 @@
<string name="no_timers_found">No timers found</string>
<string name="add_timer">Add timer</string>
<string name="upcoming_alarm">Upcoming alarm</string>
<string name="early_alarm_dismissal">Early Alarm Dismissal</string>
<!--Timer-->
<string name="timers_notification_msg">‏טיימר פועל</string>
<string name="timer_single_notification_label_msg">טיימר עבור %s פועל</string>

View File

@ -29,6 +29,8 @@
<string name="no_timers_found">タイマーが見つかりません</string>
<string name="add_timer">タイマーを追加</string>
<string name="upcoming_alarm">今後のアラーム</string>
<string name="early_alarm_dismissal">Early Alarm Dismissal</string>
<!--Timer-->
<string name="timers_notification_msg">タイマーが作動中</string>
<string name="timer_single_notification_label_msg">タイマー %s が作動中</string>
@ -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
-->
</resources>
</resources>

View File

@ -28,6 +28,7 @@
<string name="no_timers_found">No timers found</string>
<string name="add_timer">Add timer</string>
<string name="upcoming_alarm">Upcoming alarm</string>
<string name="early_alarm_dismissal">Early Alarm Dismissal</string>
<!--Timer-->
<string name="timers_notification_msg">Timers are running</string>

View File

@ -29,6 +29,8 @@
<string name="no_timers_found">ടൈമറുകളൊന്നും കണ്ടെത്തിയില്ല</string>
<string name="add_timer">ടൈമർ ചേർക്കുക</string>
<string name="upcoming_alarm">Upcoming alarm</string>
<string name="early_alarm_dismissal">Early Alarm Dismissal</string>
<!--Timer-->
<string name="timers_notification_msg">ടൈമറുകൾ പ്രവർത്തിക്കുന്നു</string>
<string name="timer_single_notification_label_msg">%s-നുള്ള ടൈമർ പ്രവർത്തിക്കുന്നു</string>
@ -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
-->
</resources>
</resources>

View File

@ -29,6 +29,8 @@
<string name="no_timers_found">Ingen timere funnet</string>
<string name="add_timer">Add timer</string>
<string name="upcoming_alarm">Kommende alarm</string>
<string name="early_alarm_dismissal">Early Alarm Dismissal</string>
<!--Timer-->
<string name="timers_notification_msg">Timere er i gang</string>
<string name="timer_single_notification_label_msg">Timer for %s er i gang</string>
@ -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
-->
</resources>
</resources>

View File

@ -29,6 +29,8 @@
<string name="no_timers_found">Geen timers</string>
<string name="add_timer">Timer toevoegen</string>
<string name="upcoming_alarm">Volgende wekker</string>
<string name="early_alarm_dismissal">Early Alarm Dismissal</string>
<!--Timer-->
<string name="timers_notification_msg">Timers lopen</string>
<string name="timer_single_notification_label_msg">Timer voor %s loopt</string>
@ -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
-->
</resources>
</resources>

View File

@ -32,6 +32,7 @@
<string name="upcoming_alarm">Upcoming alarm</string>
<string name="timers_notification_msg">سماں والے چالو کیتے جا رہے اے</string>
<string name="timer_single_notification_label_msg">؜%s ؜لئی سماں والا چالو کیتا جا رہا اے</string>
<string name="early_alarm_dismissal">Early Alarm Dismissal</string>
<plurals name="timer_notification_msg">
<item quantity="one">؜%d؜ سماں والا چالو کیتا جا رہا اے</item>
<item quantity="other">؜%d؜ سماں والے چالو کیتے جا رہے اے</item>

View File

@ -29,6 +29,8 @@
<string name="no_timers_found">Nie znaleziono minutników</string>
<string name="add_timer">Dodaj minutnik</string>
<string name="upcoming_alarm">Nadchodzący alarm</string>
<string name="early_alarm_dismissal">Early Alarm Dismissal</string>
<!--Timer-->
<string name="timers_notification_msg">Minutniki są uruchomione</string>
<string name="timer_single_notification_label_msg">Minutnik dla %s jest uruchomiony</string>
@ -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
-->
</resources>
</resources>

View File

@ -29,6 +29,8 @@
<string name="no_timers_found">Nenhum temporizador encontrado</string>
<string name="add_timer">Adicionar temporizador</string>
<string name="upcoming_alarm">Próximo alarme</string>
<string name="early_alarm_dismissal">Early Alarm Dismissal</string>
<!--Timer-->
<string name="timers_notification_msg">Temporizadores em execução</string>
<string name="timer_single_notification_label_msg">O temporizador para %s está em execução</string>

View File

@ -29,6 +29,8 @@
<string name="no_timers_found">Nenhum temporizador encontrado</string>
<string name="add_timer">Adicionar temporizador</string>
<string name="upcoming_alarm">Próximo alarme</string>
<string name="early_alarm_dismissal">Early Alarm Dismissal</string>
<!--Timer-->
<string name="timers_notification_msg">Temporizadores em curso</string>
<string name="timer_single_notification_label_msg">Temporizador para %s está em curso</string>
@ -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
-->
</resources>
</resources>

View File

@ -29,6 +29,8 @@
<string name="no_timers_found">Nu au fost găsite temporizatoare</string>
<string name="add_timer">Adaugă temporizator</string>
<string name="upcoming_alarm">Upcoming alarm</string>
<string name="early_alarm_dismissal">Early Alarm Dismissal</string>
<!--Timer-->
<string name="timers_notification_msg">Temporizatoarele sunt pornite</string>
<string name="timer_single_notification_label_msg">Temporizatorul de %s este pornit</string>

View File

@ -29,6 +29,8 @@
<string name="no_timers_found">Таймеры отсутствуют</string>
<string name="add_timer">Добавить таймер</string>
<string name="upcoming_alarm">Предстоящий будильник</string>
<string name="early_alarm_dismissal">Early Alarm Dismissal</string>
<!--Timer-->
<string name="timers_notification_msg">Таймеры запущены</string>
<string name="timer_single_notification_label_msg">Таймер для %s запущен</string>
@ -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
-->
</resources>
</resources>

View File

@ -28,6 +28,7 @@
<string name="no_timers_found">Nenašli sa žiadne časovače</string>
<string name="add_timer">Pridať časovač</string>
<string name="upcoming_alarm">Nadchádzajúci budík</string>
<string name="early_alarm_dismissal">Early Alarm Dismissal</string>
<!--Timer-->
<string name="timers_notification_msg">Sú spustené časovače</string>

View File

@ -29,6 +29,8 @@
<string name="no_timers_found">Ni časovnikov</string>
<string name="add_timer">Dodajte časovnik</string>
<string name="upcoming_alarm">Upcoming alarm</string>
<string name="early_alarm_dismissal">Early Alarm Dismissal</string>
<!-- Timer -->
<string name="timers_notification_msg">Tečejo časovniki</string>
<string name="timer_single_notification_label_msg">Časovnik za %s teče</string>

View File

@ -32,6 +32,7 @@
<string name="timers_notification_msg">Тајмери раде</string>
<string name="timer_single_notification_label_msg">Тајмер за %s је покренут</string>
<string name="new_timer">Нови тајмер</string>
<string name="early_alarm_dismissal">Early Alarm Dismissal</string>
<plurals name="timer_notification_msg">
<item quantity="one">%d тајмер ради</item>
<item quantity="few">%d тајмери раде</item>

View File

@ -29,6 +29,8 @@
<string name="no_timers_found">Inga timers hittades</string>
<string name="add_timer">Lägg till timer</string>
<string name="upcoming_alarm">Kommande alarm</string>
<string name="early_alarm_dismissal">Early Alarm Dismissal</string>
<!--Timer-->
<string name="timers_notification_msg">Timers är igång</string>
<string name="timer_single_notification_label_msg">Timer för %s är igång</string>
@ -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
-->
</resources>
</resources>

View File

@ -29,6 +29,7 @@
<string name="no_timers_found">No timers found</string>
<string name="add_timer">Add timer</string>
<string name="upcoming_alarm">Upcoming alarm</string>
<string name="early_alarm_dismissal">Early Alarm Dismissal</string>
<!--Timer-->
<string name="timers_notification_msg">Timers are running</string>

View File

@ -29,6 +29,8 @@
<string name="no_timers_found">Zamanlayıcı bulunamadı</string>
<string name="add_timer">Zamanlayıcı ekle</string>
<string name="upcoming_alarm">Yaklaşan alarm</string>
<string name="early_alarm_dismissal">Early Alarm Dismissal</string>
<!--Timer-->
<string name="timers_notification_msg">Zamanlayıcılar çalışıyor</string>
<string name="timer_single_notification_label_msg">%s için zamanlayıcı çalışıyor</string>
@ -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
-->
</resources>
</resources>

View File

@ -29,6 +29,8 @@
<string name="no_timers_found">Таймерів не знайдено</string>
<string name="add_timer">Add timer</string>
<string name="upcoming_alarm">Майбутній будильник</string>
<string name="early_alarm_dismissal">Early Alarm Dismissal</string>
<!--Timer-->
<string name="timers_notification_msg">Таймери працюють</string>
<string name="timer_single_notification_label_msg">Таймер для %s працює</string>
@ -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
-->
</resources>
</resources>

View File

@ -29,6 +29,8 @@
<string name="no_timers_found">未找到计时器</string>
<string name="add_timer">添加计时器</string>
<string name="upcoming_alarm">即将到来的闹铃</string>
<string name="early_alarm_dismissal">Early Alarm Dismissal</string>
<!--Timer-->
<string name="timers_notification_msg">计时器正在运行</string>
<string name="timer_single_notification_label_msg">%s 的计时器正在运行</string>
@ -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
-->
</resources>
</resources>

View File

@ -28,6 +28,7 @@
<string name="no_timers_found">No timers found</string>
<string name="add_timer">Add timer</string>
<string name="upcoming_alarm">Upcoming alarm</string>
<string name="early_alarm_dismissal">Early Alarm Dismissal</string>
<!--Timer-->
<string name="timers_notification_msg">Timers are running</string>

View File

@ -29,6 +29,7 @@
<string name="no_timers_found">No timers found</string>
<string name="add_timer">Add timer</string>
<string name="upcoming_alarm">Upcoming alarm</string>
<string name="early_alarm_dismissal">Early Alarm Dismissal</string>
<!-- Timer -->
<string name="timers_notification_msg">Timers are running</string>