mirror of
				https://github.com/SimpleMobileTools/Simple-Clock.git
				synced 2025-06-05 22:19:17 +02:00 
			
		
		
		
	Merge branch 'master' into next-alarm-fix
This commit is contained in:
		| @@ -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"> | ||||
|   | ||||
| @@ -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) { | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
| ) | ||||
|   | ||||
| @@ -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({ | ||||
|   | ||||
| @@ -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) | ||||
|     } | ||||
| } | ||||
| @@ -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) | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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">Predčasné zrušenie budíka</string> | ||||
|  | ||||
|     <!--Timer--> | ||||
|     <string name="timers_notification_msg">Sú spustené časovače</string> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user