diff --git a/app/src/main/kotlin/com/simplemobiletools/clock/adapters/TimerAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/clock/adapters/TimerAdapter.kt index 899bf347..9e407c5f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/clock/adapters/TimerAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/clock/adapters/TimerAdapter.kt @@ -12,10 +12,7 @@ import androidx.recyclerview.widget.RecyclerView import com.simplemobiletools.clock.R import com.simplemobiletools.clock.activities.SimpleActivity import com.simplemobiletools.clock.dialogs.MyTimePickerDialogDialog -import com.simplemobiletools.clock.extensions.checkAlarmsWithDeletedSoundUri -import com.simplemobiletools.clock.extensions.colorLeftDrawable -import com.simplemobiletools.clock.extensions.config -import com.simplemobiletools.clock.extensions.timerHelper +import com.simplemobiletools.clock.extensions.* import com.simplemobiletools.clock.helpers.PICK_AUDIO_FILE_INTENT_ID import com.simplemobiletools.clock.models.Timer import com.simplemobiletools.clock.models.TimerState @@ -116,11 +113,11 @@ class TimerAdapter( } is TimerState.Paused -> { - timer_time.text = timer.state.tick.div(1000F).roundToInt().getFormattedDuration() + timer_time.text = timer.state.tick.getFormattedDuration() } is TimerState.Running -> { - timer_time.text = timer.state.tick.div(1000F).roundToInt().getFormattedDuration() + timer_time.text = timer.state.tick.getFormattedDuration() } } } @@ -142,9 +139,10 @@ class TimerAdapter( private fun updateTimer(timer: Timer, refresh: Boolean = true) { Log.w(TAG, "updateTimer: $timer") - activity.timerHelper.insertOrUpdateTimer(timer) - if (refresh) { - onRefresh.invoke() + activity.timerHelper.insertOrUpdateTimer(timer){ + if (refresh) { + onRefresh.invoke() + } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/clock/extensions/Long.kt b/app/src/main/kotlin/com/simplemobiletools/clock/extensions/Long.kt index 7500e536..d731ed59 100644 --- a/app/src/main/kotlin/com/simplemobiletools/clock/extensions/Long.kt +++ b/app/src/main/kotlin/com/simplemobiletools/clock/extensions/Long.kt @@ -1,8 +1,10 @@ package com.simplemobiletools.clock.extensions import android.text.format.DateFormat +import com.simplemobiletools.commons.extensions.getFormattedDuration import java.util.* import java.util.concurrent.TimeUnit +import kotlin.math.roundToInt fun Long.formatStopwatchTime(useLongerMSFormat: Boolean): String { val MSFormat = if (useLongerMSFormat) "%03d" else "%01d" @@ -37,5 +39,9 @@ fun Long.timestampFormat(format: String = "dd. MM. yyyy"): String { return DateFormat.format(format, calendar).toString() } +fun Long.getFormattedDuration(forceShowHours: Boolean = false): String { + return this.div(1000F).roundToInt().getFormattedDuration(forceShowHours) +} + val Long.secondsToMillis get() = TimeUnit.SECONDS.toMillis(this) val Long.millisToSeconds get() = TimeUnit.MILLISECONDS.toSeconds(this) diff --git a/app/src/main/kotlin/com/simplemobiletools/clock/fragments/TimerFragment.kt b/app/src/main/kotlin/com/simplemobiletools/clock/fragments/TimerFragment.kt index bf5d54cb..7936ed8b 100644 --- a/app/src/main/kotlin/com/simplemobiletools/clock/fragments/TimerFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/clock/fragments/TimerFragment.kt @@ -100,17 +100,24 @@ class TimerFragment : Fragment() { private fun updateViews(position: Int) { activity?.runOnUiThread { - val timer = timerAdapter.getItemAt(position) - updateViewStates(timer.state) + if (timerAdapter.itemCount > 0) { + val timer = timerAdapter.getItemAt(position) + updateViewStates(timer.state) + view.timer_play_pause.beVisible() + } else { + view.timer_delete.beGone() + view.timer_play_pause.beGone() + view.timer_reset.beGone() + } } } - private fun refreshTimers(scrollToLast: Boolean = false) { + private fun refreshTimers(scrollToLatest: Boolean = false) { activity?.timerHelper?.getTimers { timers -> Log.d(TAG, "refreshTimers: $timers") timerAdapter.submitList(timers) { - if (scrollToLast) { - view.timer_view_pager.currentItem = timers.lastIndex + if (scrollToLatest) { + view.timer_view_pager.currentItem = 0 } updateViews(timer_view_pager.currentItem) } diff --git a/app/src/main/kotlin/com/simplemobiletools/clock/helpers/TimerHelper.kt b/app/src/main/kotlin/com/simplemobiletools/clock/helpers/TimerHelper.kt index d6c8ea0b..e2ce3496 100644 --- a/app/src/main/kotlin/com/simplemobiletools/clock/helpers/TimerHelper.kt +++ b/app/src/main/kotlin/com/simplemobiletools/clock/helpers/TimerHelper.kt @@ -43,14 +43,16 @@ class TimerHelper(val context: Context) { fun insertNewTimer(callback: () -> Unit = {}) { ensureBackgroundThread { timerDao.insertOrUpdateTimer( - Timer(id = null, + Timer( + id = null, seconds = DEFAULT_TIME, TimerState.Idle, false, context.getDefaultAlarmSound(RingtoneManager.TYPE_ALARM).uri, context.getDefaultAlarmTitle(RingtoneManager.TYPE_ALARM), "", - DEFAULT_MAX_TIMER_REMINDER_SECS.toString()) + System.currentTimeMillis(), + ) ) callback.invoke() diff --git a/app/src/main/kotlin/com/simplemobiletools/clock/interfaces/TimerDao.kt b/app/src/main/kotlin/com/simplemobiletools/clock/interfaces/TimerDao.kt index b29d3fc8..133c8320 100644 --- a/app/src/main/kotlin/com/simplemobiletools/clock/interfaces/TimerDao.kt +++ b/app/src/main/kotlin/com/simplemobiletools/clock/interfaces/TimerDao.kt @@ -9,7 +9,7 @@ import com.simplemobiletools.clock.models.Timer @Dao interface TimerDao { - @Query("SELECT * FROM timers") + @Query("SELECT * FROM timers ORDER BY createdAt DESC") fun getTimers(): List @Query("SELECT * FROM timers WHERE id=:id") diff --git a/app/src/main/kotlin/com/simplemobiletools/clock/models/Timer.kt b/app/src/main/kotlin/com/simplemobiletools/clock/models/Timer.kt index b93b2ce4..a7f8b2e9 100644 --- a/app/src/main/kotlin/com/simplemobiletools/clock/models/Timer.kt +++ b/app/src/main/kotlin/com/simplemobiletools/clock/models/Timer.kt @@ -12,5 +12,5 @@ data class Timer( val soundUri: String, val soundTitle: String, val label: String, - val maxReminderSecs: String, + val createdAt: Long, ) diff --git a/app/src/main/kotlin/com/simplemobiletools/clock/services/TimerService.kt b/app/src/main/kotlin/com/simplemobiletools/clock/services/TimerService.kt index 6ea59b28..99c341b7 100644 --- a/app/src/main/kotlin/com/simplemobiletools/clock/services/TimerService.kt +++ b/app/src/main/kotlin/com/simplemobiletools/clock/services/TimerService.kt @@ -12,11 +12,15 @@ import android.os.IBinder import androidx.annotation.RequiresApi import androidx.core.app.NotificationCompat import com.simplemobiletools.clock.R -import com.simplemobiletools.clock.extensions.config +import com.simplemobiletools.clock.extensions.getFormattedDuration import com.simplemobiletools.clock.extensions.getOpenTimerTabIntent +import com.simplemobiletools.clock.extensions.timerHelper import com.simplemobiletools.clock.helpers.TIMER_RUNNING_NOTIF_ID +import com.simplemobiletools.clock.models.TimerEvent +import com.simplemobiletools.clock.models.TimerState import com.simplemobiletools.commons.extensions.getFormattedDuration import com.simplemobiletools.commons.helpers.isOreoPlus +import kotlin.math.roundToInt import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.Subscribe import org.greenrobot.eventbus.ThreadMode @@ -34,18 +38,43 @@ class TimerService : Service() { override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { super.onStartCommand(intent, flags, startId) - - val formattedDuration = config.timerSeconds.getFormattedDuration() - startForeground(TIMER_RUNNING_NOTIF_ID, notification(formattedDuration)) - + updateNotification() + startForeground(TIMER_RUNNING_NOTIF_ID, notification(getString(R.string.app_name), getString(R.string.timer_notification_msg), -1)) return START_NOT_STICKY } + private fun updateNotification() { + timerHelper.getTimers { timers -> + val runningTimers = timers.filter { it.state is TimerState.Running } + if (runningTimers.isNotEmpty()) { + val firstTimer = runningTimers.first() + val formattedDuration = (firstTimer.state as TimerState.Running).tick.getFormattedDuration() + val contextText = when { + runningTimers.size > 1 -> { + getString(R.string.timer_multiple_notification_msg, runningTimers.size) + } + firstTimer.label.isNotEmpty() -> { + getString(R.string.timer_single_notification_label_msg, firstTimer.label) + } + else -> { + getString(R.string.timer_single_notification_msg, runningTimers.size) + } + } + startForeground(TIMER_RUNNING_NOTIF_ID, notification(formattedDuration, contextText, firstTimer.id!!)) + } + } + } + @Subscribe(threadMode = ThreadMode.MAIN) fun onMessageEvent(event: TimerStopService) { stopService() } + @Subscribe(threadMode = ThreadMode.MAIN) + fun onMessageEvent(event: TimerEvent.Refresh) { + updateNotification() + } + private fun stopService() { if (isOreoPlus()) { stopForeground(true) @@ -60,7 +89,7 @@ class TimerService : Service() { } @TargetApi(Build.VERSION_CODES.O) - private fun notification(formattedDuration: String): Notification { + private fun notification(title: String, contentText: String, firstRunningTimerId: Long): Notification { val channelId = "simple_alarm_timer" val label = getString(R.string.timer) val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager @@ -73,15 +102,18 @@ class TimerService : Service() { } val builder = NotificationCompat.Builder(this) - .setContentTitle(label) - .setContentText(formattedDuration) - .setSmallIcon(R.drawable.ic_timer) - .setContentIntent(this.getOpenTimerTabIntent(0)) - .setPriority(Notification.PRIORITY_DEFAULT) - .setSound(null) - .setOngoing(true) - .setAutoCancel(true) - .setChannelId(channelId) + .setContentTitle(title) + .setContentText(contentText) + .setSmallIcon(R.drawable.ic_timer) + .setPriority(Notification.PRIORITY_DEFAULT) + .setSound(null) + .setOngoing(true) + .setAutoCancel(true) + .setChannelId(channelId) + + if (firstRunningTimerId != -1L) { + builder.setContentIntent(this.getOpenTimerTabIntent(firstRunningTimerId)) + } builder.setVisibility(NotificationCompat.VISIBILITY_PUBLIC) return builder.build() diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml index a9e6cfea..5f379b60 100644 --- a/app/src/main/res/values-az/strings.xml +++ b/app/src/main/res/values-az/strings.xml @@ -17,6 +17,12 @@ Creation order Alarm time + + Timers are running + %d timers are running + Timer for %s is running + %d timer is running + Saat bölməsi Siqnal bölməsi diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 0501d23c..17156571 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -17,6 +17,12 @@ Creation order Alarm time + + Timers are running + %d timers are running + Timer for %s is running + %d timer is running + Záložka hodin Záložka budíku diff --git a/app/src/main/res/values-cy/strings.xml b/app/src/main/res/values-cy/strings.xml index 8e177151..c84a6548 100644 --- a/app/src/main/res/values-cy/strings.xml +++ b/app/src/main/res/values-cy/strings.xml @@ -17,6 +17,12 @@ Creation order Alarm time + + Timers are running + %d timers are running + Timer for %s is running + %d timer is running + Tab cloc Tab larwm diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index e4bca230..f658b461 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -17,6 +17,12 @@ Creation order Alarm time + + Timers are running + %d timers are running + Timer for %s is running + %d timer is running + Ur Alarm diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 483a116c..3b64d43b 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -17,6 +17,12 @@ Creation order Alarm time + + Timers are running + %d timers are running + Timer for %s is running + %d timer is running + Uhr Wecker diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 549a81c6..700ed3d6 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -18,6 +18,12 @@ Creation order Alarm time + + Timers are running + %d timers are running + Timer for %s is running + %d timer is running + Ετικέτα Ρολογιού Ετικέτα Αφύπνισης diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index f7c9c035..4de9c65a 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -17,6 +17,12 @@ Creation order Alarm time + + Timers are running + %d timers are running + Timer for %s is running + %d timer is running + Pestaña de reloj Pestaña de alarma diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml index 117c3153..952f6bad 100644 --- a/app/src/main/res/values-eu/strings.xml +++ b/app/src/main/res/values-eu/strings.xml @@ -17,6 +17,12 @@ Creation order Alarm time + + Timers are running + %d timers are running + Timer for %s is running + %d timer is running + Erloju fitxa Alarma fitxa diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 24f85ffd..6a8ce234 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -16,6 +16,12 @@ Pyyhkäise oikealle sammuttaaksesi tai vasemmalle torkuttaaksesi. Luontijärjestys Herätysaika +  + + Timers are running + %d timers are running + Timer for %s is running + %d timer is running   Kello-välilehti diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index e14b52ea..6635335f 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -17,6 +17,12 @@ Creation order Alarm time + + Timers are running + %d timers are running + Timer for %s is running + %d timer is running + Horloge Réveil diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 751d5244..bd991217 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -17,6 +17,12 @@ Creation order Alarm time + + Timers are running + %d timers are running + Timer for %s is running + %d timer is running + Kartica sata Kartica alarma diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml index 42db057b..dd2447f5 100644 --- a/app/src/main/res/values-id/strings.xml +++ b/app/src/main/res/values-id/strings.xml @@ -17,6 +17,12 @@ Creation order Alarm time + + Timers are running + %d timers are running + Timer for %s is running + %d timer is running + Tab jam Tab alarm diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 42db057b..dd2447f5 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -17,6 +17,12 @@ Creation order Alarm time + + Timers are running + %d timers are running + Timer for %s is running + %d timer is running + Tab jam Tab alarm diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 574944c0..68893b2b 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -17,6 +17,12 @@ Creation order Alarm time + + Timers are running + %d timers are running + Timer for %s is running + %d timer is running + Scheda orologio Scheda sveglia diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index ee9c1e70..6560fd4e 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -17,6 +17,12 @@ Creation order Alarm time + + Timers are running + %d timers are running + Timer for %s is running + %d timer is running + 時計 アラーム diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index a2d53474..8b4f600f 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -17,6 +17,12 @@ Creation order Alarm time + + Timers are running + %d timers are running + Timer for %s is running + %d timer is running + Laikrodžio skirtukas Žadintuvo skirtukas diff --git a/app/src/main/res/values-ml/strings.xml b/app/src/main/res/values-ml/strings.xml index 638166c8..32517ac3 100644 --- a/app/src/main/res/values-ml/strings.xml +++ b/app/src/main/res/values-ml/strings.xml @@ -17,6 +17,12 @@ Creation order Alarm time + + Timers are running + %d timers are running + Timer for %s is running + %d timer is running + ക്ലോക്ക് ടാബ് അലാറം ടാബ് diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml index 122a31ea..906aa8a6 100644 --- a/app/src/main/res/values-nb/strings.xml +++ b/app/src/main/res/values-nb/strings.xml @@ -17,6 +17,12 @@ Creation order Alarm time + + Timers are running + %d timers are running + Timer for %s is running + %d timer is running + Klokke Alarm diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index d166eaf2..47ae120b 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -17,6 +17,12 @@ Aanmaakvolgorde Alarmtijd + + Timers are running + %d timers are running + Timer for %s is running + %d timer is running + Tab Klok Tab Alarm diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index cb9cb961..532e786e 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -17,6 +17,12 @@ Creation order Alarm time + + Timers are running + %d timers are running + Timer for %s is running + %d timer is running + Zegar Alarm diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 03876796..db9fc791 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -17,6 +17,12 @@ Creation order Alarm time + + Timers are running + %d timers are running + Timer for %s is running + %d timer is running + Relógio Alarme diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 721f0e08..fb3bbf1b 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -17,6 +17,12 @@ Creation order Alarm time + + Timers are running + %d timers are running + Timer for %s is running + %d timer is running + Часы Будильник diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index 777a19a3..ef249f79 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -17,6 +17,12 @@ Poradia vytvorenia Času budíka + + Timers are running + %d timers are running + Timer for %s is running + %d timer is running + Okno s časom Okno s budíkom diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 02f55b43..9539f017 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -17,6 +17,12 @@ Creation order Alarm time + + Timers are running + %d timers are running + Timer for %s is running + %d timer is running + Fliken Klocka Fliken Alarm diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 6cc351b4..759f7923 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -17,6 +17,12 @@ Creation order Alarm time + + Timers are running + %d timers are running + Timer for %s is running + %d timer is running + Saat sekmesi Alarm sekmesi diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 5300662f..3caeefdf 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -17,6 +17,12 @@ Creation order Alarm time + + Timers are running + %d timers are running + Timer for %s is running + %d timer is running + Годинник Будильник diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 05a7d5b9..4781772e 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -17,6 +17,12 @@ Creation order Alarm time + + Timers are running + %d timers are running + Timer for %s is running + %d timer is running + 时钟页面 闹钟页面 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 66177ddb..bfda24f9 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -17,6 +17,12 @@ Creation order Alarm time + + Timers are running + %d timers are running + Timer for %s is running + %d timer is running + 時鐘頁面 鬧鐘頁面 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3d6d4bc5..869cbd33 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -17,6 +17,12 @@ Creation order Alarm time + + Timers are running + %d timers are running + Timer for %s is running + %d timer is running + Clock tab Alarm tab