mirror of
https://github.com/SimpleMobileTools/Simple-Clock.git
synced 2024-12-17 18:58:27 +01:00
Handle deletion of timers when running
This commit is contained in:
parent
dc3ddacffa
commit
a214ef9327
@ -14,7 +14,7 @@ import com.facebook.stetho.Stetho
|
|||||||
import com.simplemobiletools.clock.extensions.getOpenTimerTabIntent
|
import com.simplemobiletools.clock.extensions.getOpenTimerTabIntent
|
||||||
import com.simplemobiletools.clock.extensions.getTimerNotification
|
import com.simplemobiletools.clock.extensions.getTimerNotification
|
||||||
import com.simplemobiletools.clock.extensions.timerHelper
|
import com.simplemobiletools.clock.extensions.timerHelper
|
||||||
import com.simplemobiletools.clock.helpers.TIMER_NOTIF_ID
|
import com.simplemobiletools.clock.helpers.INVALID_TIMER_ID
|
||||||
import com.simplemobiletools.clock.models.TimerEvent
|
import com.simplemobiletools.clock.models.TimerEvent
|
||||||
import com.simplemobiletools.clock.models.TimerState
|
import com.simplemobiletools.clock.models.TimerState
|
||||||
import com.simplemobiletools.clock.services.TimerStopService
|
import com.simplemobiletools.clock.services.TimerStopService
|
||||||
@ -74,6 +74,14 @@ class App : Application(), LifecycleObserver {
|
|||||||
countDownTimers[event.timerId]?.cancel()
|
countDownTimers[event.timerId]?.cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||||
|
fun onMessageEvent(event: TimerEvent.Delete) {
|
||||||
|
countDownTimers[event.timerId]?.cancel()
|
||||||
|
timerHelper.deleteTimer(event.timerId){
|
||||||
|
EventBus.getDefault().post(TimerEvent.Refresh(INVALID_TIMER_ID))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||||
fun onMessageEvent(event: TimerEvent.Start) {
|
fun onMessageEvent(event: TimerEvent.Start) {
|
||||||
val countDownTimer = object : CountDownTimer(event.duration, 1000) {
|
val countDownTimer = object : CountDownTimer(event.duration, 1000) {
|
||||||
@ -95,7 +103,7 @@ class App : Application(), LifecycleObserver {
|
|||||||
val pendingIntent = getOpenTimerTabIntent(event.timerId)
|
val pendingIntent = getOpenTimerTabIntent(event.timerId)
|
||||||
val notification = getTimerNotification(timer, pendingIntent, false)
|
val notification = getTimerNotification(timer, pendingIntent, false)
|
||||||
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
|
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
|
||||||
notificationManager.notify(TIMER_NOTIF_ID, notification)
|
notificationManager.notify(event.timerId, notification)
|
||||||
updateTimerState(event.timerId, TimerState.Finished)
|
updateTimerState(event.timerId, TimerState.Finished)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,7 +10,6 @@ import com.simplemobiletools.clock.activities.SimpleActivity
|
|||||||
import com.simplemobiletools.clock.extensions.getFormattedDuration
|
import com.simplemobiletools.clock.extensions.getFormattedDuration
|
||||||
import com.simplemobiletools.clock.extensions.hideTimerNotification
|
import com.simplemobiletools.clock.extensions.hideTimerNotification
|
||||||
import com.simplemobiletools.clock.extensions.secondsToMillis
|
import com.simplemobiletools.clock.extensions.secondsToMillis
|
||||||
import com.simplemobiletools.clock.extensions.timerHelper
|
|
||||||
import com.simplemobiletools.clock.models.Timer
|
import com.simplemobiletools.clock.models.Timer
|
||||||
import com.simplemobiletools.clock.models.TimerEvent
|
import com.simplemobiletools.clock.models.TimerEvent
|
||||||
import com.simplemobiletools.clock.models.TimerState
|
import com.simplemobiletools.clock.models.TimerState
|
||||||
@ -93,9 +92,7 @@ class TimerAdapter(
|
|||||||
getItem(position)
|
getItem(position)
|
||||||
}
|
}
|
||||||
removeSelectedItems(positions)
|
removeSelectedItems(positions)
|
||||||
activity.timerHelper.deleteTimers(timersToRemove) {
|
timersToRemove.forEach(::deleteTimer)
|
||||||
onRefresh.invoke()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupView(view: View, timer: Timer) {
|
private fun setupView(view: View, timer: Timer) {
|
||||||
@ -117,7 +114,7 @@ class TimerAdapter(
|
|||||||
|
|
||||||
timer_reset.applyColorFilter(textColor)
|
timer_reset.applyColorFilter(textColor)
|
||||||
timer_reset.setOnClickListener {
|
timer_reset.setOnClickListener {
|
||||||
stopTimer(timer)
|
resetTimer(timer)
|
||||||
}
|
}
|
||||||
|
|
||||||
timer_play_pause.applyColorFilter(if (adjustedPrimaryColor == Color.WHITE) Color.BLACK else Color.WHITE)
|
timer_play_pause.applyColorFilter(if (adjustedPrimaryColor == Color.WHITE) Color.BLACK else Color.WHITE)
|
||||||
@ -139,8 +136,13 @@ class TimerAdapter(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun stopTimer(timer: Timer) {
|
private fun resetTimer(timer: Timer) {
|
||||||
EventBus.getDefault().post(TimerEvent.Reset(timer.id!!, timer.seconds.secondsToMillis))
|
EventBus.getDefault().post(TimerEvent.Reset(timer.id!!, timer.seconds.secondsToMillis))
|
||||||
simpleActivity.hideTimerNotification()
|
simpleActivity.hideTimerNotification(timer.id!!)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun deleteTimer(timer: Timer) {
|
||||||
|
EventBus.getDefault().post(TimerEvent.Delete(timer.id!!))
|
||||||
|
simpleActivity.hideTimerNotification(timer.id!!)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -148,7 +148,7 @@ fun Context.getOpenTimerTabIntent(timerId: Int): PendingIntent {
|
|||||||
val intent = getLaunchIntent() ?: Intent(this, SplashActivity::class.java)
|
val intent = getLaunchIntent() ?: Intent(this, SplashActivity::class.java)
|
||||||
intent.putExtra(OPEN_TAB, TAB_TIMER)
|
intent.putExtra(OPEN_TAB, TAB_TIMER)
|
||||||
intent.putExtra(TIMER_ID, timerId)
|
intent.putExtra(TIMER_ID, timerId)
|
||||||
return PendingIntent.getActivity(this, TIMER_NOTIF_ID, intent, PendingIntent.FLAG_UPDATE_CURRENT)
|
return PendingIntent.getActivity(this, timerId, intent, PendingIntent.FLAG_UPDATE_CURRENT)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Context.getAlarmIntent(alarm: Alarm): PendingIntent {
|
fun Context.getAlarmIntent(alarm: Alarm): PendingIntent {
|
||||||
@ -167,7 +167,7 @@ fun Context.hideNotification(id: Int) {
|
|||||||
manager.cancel(id)
|
manager.cancel(id)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Context.hideTimerNotification() = hideNotification(TIMER_NOTIF_ID)
|
fun Context.hideTimerNotification(timerId: Int) = hideNotification(timerId)
|
||||||
|
|
||||||
fun Context.updateWidgets() {
|
fun Context.updateWidgets() {
|
||||||
val widgetsCnt =
|
val widgetsCnt =
|
||||||
@ -321,7 +321,7 @@ fun Context.getTimerNotification(timer: Timer, pendingIntent: PendingIntent, add
|
|||||||
.setAutoCancel(true)
|
.setAutoCancel(true)
|
||||||
.setSound(Uri.parse(soundUri), STREAM_ALARM)
|
.setSound(Uri.parse(soundUri), STREAM_ALARM)
|
||||||
.setChannelId(channelId)
|
.setChannelId(channelId)
|
||||||
.addAction(R.drawable.ic_cross_vector, getString(R.string.dismiss), if (addDeleteIntent) reminderActivityIntent else getHideTimerPendingIntent())
|
.addAction(R.drawable.ic_cross_vector, getString(R.string.dismiss), if (addDeleteIntent) reminderActivityIntent else getHideTimerPendingIntent(timer.id!!))
|
||||||
|
|
||||||
if (addDeleteIntent) {
|
if (addDeleteIntent) {
|
||||||
builder.setDeleteIntent(reminderActivityIntent)
|
builder.setDeleteIntent(reminderActivityIntent)
|
||||||
@ -339,9 +339,10 @@ fun Context.getTimerNotification(timer: Timer, pendingIntent: PendingIntent, add
|
|||||||
return notification
|
return notification
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Context.getHideTimerPendingIntent(): PendingIntent {
|
fun Context.getHideTimerPendingIntent(timerId: Int): PendingIntent {
|
||||||
val intent = Intent(this, HideTimerReceiver::class.java)
|
val intent = Intent(this, HideTimerReceiver::class.java)
|
||||||
return PendingIntent.getBroadcast(this, TIMER_NOTIF_ID, intent, PendingIntent.FLAG_UPDATE_CURRENT)
|
intent.putExtra(TIMER_ID, timerId)
|
||||||
|
return PendingIntent.getBroadcast(this, timerId, intent, PendingIntent.FLAG_UPDATE_CURRENT)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Context.getHideAlarmPendingIntent(alarm: Alarm): PendingIntent {
|
fun Context.getHideAlarmPendingIntent(alarm: Alarm): PendingIntent {
|
||||||
|
@ -38,7 +38,6 @@ const val OPEN_ALARMS_TAB_INTENT_ID = 9996
|
|||||||
const val UPDATE_WIDGET_INTENT_ID = 9997
|
const val UPDATE_WIDGET_INTENT_ID = 9997
|
||||||
const val OPEN_APP_INTENT_ID = 9998
|
const val OPEN_APP_INTENT_ID = 9998
|
||||||
const val ALARM_NOTIF_ID = 9998
|
const val ALARM_NOTIF_ID = 9998
|
||||||
const val TIMER_NOTIF_ID = 9999
|
|
||||||
const val TIMER_RUNNING_NOTIF_ID = 10000
|
const val TIMER_RUNNING_NOTIF_ID = 10000
|
||||||
|
|
||||||
const val OPEN_TAB = "open_tab"
|
const val OPEN_TAB = "open_tab"
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package com.simplemobiletools.clock.models
|
package com.simplemobiletools.clock.models
|
||||||
|
|
||||||
sealed class TimerEvent(open val timerId: Int) {
|
sealed class TimerEvent(open val timerId: Int) {
|
||||||
|
data class Delete(override val timerId: Int) : TimerEvent(timerId)
|
||||||
data class Reset(override val timerId: Int, val duration: Long) : TimerEvent(timerId)
|
data class Reset(override val timerId: Int, val duration: Long) : TimerEvent(timerId)
|
||||||
data class Start(override val timerId: Int, val duration: Long) : TimerEvent(timerId)
|
data class Start(override val timerId: Int, val duration: Long) : TimerEvent(timerId)
|
||||||
data class Pause(override val timerId: Int, val duration: Long) : TimerEvent(timerId)
|
data class Pause(override val timerId: Int, val duration: Long) : TimerEvent(timerId)
|
||||||
|
@ -4,12 +4,15 @@ import android.content.BroadcastReceiver
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import com.simplemobiletools.clock.extensions.hideTimerNotification
|
import com.simplemobiletools.clock.extensions.hideTimerNotification
|
||||||
|
import com.simplemobiletools.clock.helpers.INVALID_TIMER_ID
|
||||||
|
import com.simplemobiletools.clock.helpers.TIMER_ID
|
||||||
import com.simplemobiletools.clock.models.TimerState
|
import com.simplemobiletools.clock.models.TimerState
|
||||||
import org.greenrobot.eventbus.EventBus
|
import org.greenrobot.eventbus.EventBus
|
||||||
|
|
||||||
class HideTimerReceiver : BroadcastReceiver() {
|
class HideTimerReceiver : BroadcastReceiver() {
|
||||||
override fun onReceive(context: Context, intent: Intent) {
|
override fun onReceive(context: Context, intent: Intent) {
|
||||||
context.hideTimerNotification()
|
val timerId = intent.getIntExtra(TIMER_ID, INVALID_TIMER_ID)
|
||||||
|
context.hideTimerNotification(timerId)
|
||||||
EventBus.getDefault().post(TimerState.Idle)
|
EventBus.getDefault().post(TimerState.Idle)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user