Moving some code out of TimerPlugin

pull/2884/head
Alex Baker 2 years ago
parent 6bf3bd4d08
commit 6118121698

@ -11,11 +11,9 @@ import com.todoroo.andlib.sql.Criterion.Companion.and
import com.todoroo.andlib.sql.Criterion.Companion.or import com.todoroo.andlib.sql.Criterion.Companion.or
import com.todoroo.andlib.sql.Join import com.todoroo.andlib.sql.Join
import com.todoroo.andlib.sql.QueryTemplate import com.todoroo.andlib.sql.QueryTemplate
import com.todoroo.astrid.api.AstridOrderingFilter
import com.todoroo.astrid.api.Filter import com.todoroo.astrid.api.Filter
import com.todoroo.astrid.api.FilterImpl import com.todoroo.astrid.api.FilterImpl
import com.todoroo.astrid.data.Task import com.todoroo.astrid.data.Task
import com.todoroo.astrid.timers.TimerPlugin
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import org.tasks.R import org.tasks.R
import org.tasks.data.CaldavAccount import org.tasks.data.CaldavAccount
@ -26,6 +24,7 @@ import org.tasks.filters.MyTasksFilter
import org.tasks.filters.NotificationsFilter import org.tasks.filters.NotificationsFilter
import org.tasks.filters.RecentlyModifiedFilter import org.tasks.filters.RecentlyModifiedFilter
import org.tasks.filters.SnoozedFilter import org.tasks.filters.SnoozedFilter
import org.tasks.filters.TimerFilter
import org.tasks.filters.TodayFilter import org.tasks.filters.TodayFilter
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
import javax.inject.Inject import javax.inject.Inject
@ -52,7 +51,7 @@ class BuiltInFilterExposer @Inject constructor(
filters.add(getSnoozedFilter(r)) filters.add(getSnoozedFilter(r))
} }
if (taskDao.activeTimers() > 0) { if (taskDao.activeTimers() > 0) {
filters.add(TimerPlugin.createFilter(context)) filters.add(getTimerFilter(r))
} }
if (taskDao.hasNotifications() > 0) { if (taskDao.hasNotifications() > 0) {
filters.add(getNotificationsFilter(context)) filters.add(getNotificationsFilter(context))
@ -144,6 +143,8 @@ class BuiltInFilterExposer @Inject constructor(
fun getSnoozedFilter(r: Resources) = SnoozedFilter(r.getString(R.string.filter_snoozed)) fun getSnoozedFilter(r: Resources) = SnoozedFilter(r.getString(R.string.filter_snoozed))
fun getTimerFilter(r: Resources) = TimerFilter(r.getString(R.string.TFE_workingOn))
fun getNotificationsFilter(context: Context) = NotificationsFilter(context.getString(R.string.notifications)) fun getNotificationsFilter(context: Context) = NotificationsFilter(context.getString(R.string.notifications))
@JvmStatic @JvmStatic

@ -102,7 +102,7 @@ class TaskDeleter @Inject constructor(
userActivityDao.delete(it) userActivityDao.delete(it)
} }
} }
timerPlugin.updateNotifications() notificationManager.updateTimerNotification()
deletionDao.purgeDeleted() deletionDao.purgeDeleted()
} }
} }

@ -5,33 +5,21 @@
*/ */
package com.todoroo.astrid.timers package com.todoroo.astrid.timers
import android.app.PendingIntent
import android.content.Context
import androidx.core.app.NotificationCompat
import com.todoroo.andlib.sql.Criterion.Companion.and
import com.todoroo.andlib.sql.QueryTemplate
import com.todoroo.andlib.utility.DateUtilities import com.todoroo.andlib.utility.DateUtilities
import com.todoroo.astrid.api.Filter
import com.todoroo.astrid.api.FilterImpl
import com.todoroo.astrid.data.Task import com.todoroo.astrid.data.Task
import com.todoroo.astrid.utility.Constants
import dagger.hilt.android.qualifiers.ApplicationContext
import org.tasks.R
import org.tasks.data.TaskDao import org.tasks.data.TaskDao
import org.tasks.intents.TaskIntents
import org.tasks.notifications.NotificationManager import org.tasks.notifications.NotificationManager
import org.tasks.time.DateTimeUtils
import javax.inject.Inject import javax.inject.Inject
class TimerPlugin @Inject constructor( class TimerPlugin @Inject constructor(
@param:ApplicationContext private val context: Context,
private val notificationManager: NotificationManager, private val notificationManager: NotificationManager,
private val taskDao: TaskDao) { private val taskDao: TaskDao
suspend fun startTimer(task: Task?) { ) {
suspend fun startTimer(task: Task) {
updateTimer(task, true) updateTimer(task, true)
} }
suspend fun stopTimer(task: Task?) { suspend fun stopTimer(task: Task) {
updateTimer(task, false) updateTimer(task, false)
} }
@ -40,10 +28,7 @@ class TimerPlugin @Inject constructor(
* *
* @param start if true, start timer. else, stop it * @param start if true, start timer. else, stop it
*/ */
private suspend fun updateTimer(task: Task?, start: Boolean) { private suspend fun updateTimer(task: Task, start: Boolean) {
if (task == null) {
return
}
if (start) { if (start) {
if (task.timerStart == 0L) { if (task.timerStart == 0L) {
task.timerStart = DateUtilities.now() task.timerStart = DateUtilities.now()
@ -52,60 +37,10 @@ class TimerPlugin @Inject constructor(
if (task.timerStart > 0) { if (task.timerStart > 0) {
val newElapsed = ((DateUtilities.now() - task.timerStart) / 1000L).toInt() val newElapsed = ((DateUtilities.now() - task.timerStart) / 1000L).toInt()
task.timerStart = 0L task.timerStart = 0L
task.elapsedSeconds = task.elapsedSeconds + newElapsed task.elapsedSeconds += newElapsed
} }
} }
taskDao.update(task) taskDao.update(task)
updateNotifications() notificationManager.updateTimerNotification()
}
suspend fun updateNotifications() {
val count = taskDao.activeTimers()
if (count == 0) {
notificationManager.cancel(Constants.NOTIFICATION_TIMER.toLong())
} else {
val filter = createFilter(context)
val notifyIntent = TaskIntents.getTaskListIntent(context, filter)
val pendingIntent = PendingIntent.getActivity(
context,
Constants.NOTIFICATION_TIMER,
notifyIntent,
PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
)
val r = context.resources
val appName = r.getString(R.string.app_name)
val text = r.getString(
R.string.TPl_notification, r.getQuantityString(R.plurals.Ntasks, count, count))
val builder = NotificationCompat.Builder(context, NotificationManager.NOTIFICATION_CHANNEL_TIMERS)
.setContentIntent(pendingIntent)
.setContentTitle(appName)
.setContentText(text)
.setWhen(DateTimeUtils.currentTimeMillis())
.setSmallIcon(R.drawable.ic_timer_white_24dp)
.setAutoCancel(false)
.setOngoing(true)
notificationManager.notify(
Constants.NOTIFICATION_TIMER.toLong(),
builder,
alert = false,
nonstop = false,
fiveTimes = false)
}
}
companion object {
fun createFilter(context: Context): Filter {
return FilterImpl(
title = context.getString(R.string.TFE_workingOn),
sql = QueryTemplate()
.where(
and(
Task.TIMER_START.gt(0),
Task.DELETION_DATE.eq(0)
)
).toString(),
icon = R.drawable.ic_outline_timer_24px,
)
}
} }
} }

@ -0,0 +1,26 @@
package org.tasks.filters
import com.todoroo.andlib.sql.Criterion
import com.todoroo.andlib.sql.QueryTemplate
import com.todoroo.astrid.api.Filter
import com.todoroo.astrid.api.FilterListItem
import com.todoroo.astrid.data.Task
import kotlinx.parcelize.Parcelize
import org.tasks.R
@Parcelize
data class TimerFilter(override val title: String?) : Filter {
override val icon
get() = R.drawable.ic_outline_timer_24px
override val sql: String
get() = QueryTemplate()
.where(
Criterion.and(
Task.TIMER_START.gt(0),
Task.DELETION_DATE.eq(0)
)
).toString()
override fun areItemsTheSame(other: FilterListItem) = other is TimerFilter
}

@ -8,6 +8,7 @@ import androidx.core.app.NotificationCompat
import com.todoroo.andlib.utility.AndroidUtilities import com.todoroo.andlib.utility.AndroidUtilities
import com.todoroo.andlib.utility.AndroidUtilities.preUpsideDownCake import com.todoroo.andlib.utility.AndroidUtilities.preUpsideDownCake
import com.todoroo.astrid.core.BuiltInFilterExposer import com.todoroo.astrid.core.BuiltInFilterExposer
import com.todoroo.astrid.utility.Constants
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import org.tasks.LocalBroadcastManager import org.tasks.LocalBroadcastManager
import org.tasks.R import org.tasks.R
@ -24,6 +25,7 @@ import org.tasks.reminders.SnoozeActivity
import org.tasks.reminders.SnoozeDialog import org.tasks.reminders.SnoozeDialog
import org.tasks.themes.ColorProvider import org.tasks.themes.ColorProvider
import org.tasks.time.DateTime import org.tasks.time.DateTime
import org.tasks.time.DateTimeUtils
import timber.log.Timber import timber.log.Timber
import javax.inject.Inject import javax.inject.Inject
import javax.inject.Singleton import javax.inject.Singleton
@ -384,6 +386,40 @@ class NotificationManager @Inject constructor(
.extend(wearableExtender) .extend(wearableExtender)
} }
suspend fun updateTimerNotification() {
val count = taskDao.activeTimers()
if (count == 0) {
cancel(Constants.NOTIFICATION_TIMER.toLong())
} else {
val filter = BuiltInFilterExposer.getTimerFilter(context.resources)
val notifyIntent = TaskIntents.getTaskListIntent(context, filter)
val pendingIntent = PendingIntent.getActivity(
context,
Constants.NOTIFICATION_TIMER,
notifyIntent,
PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
)
val r = context.resources
val appName = r.getString(R.string.app_name)
val text = r.getString(
R.string.TPl_notification, r.getQuantityString(R.plurals.Ntasks, count, count))
val builder = NotificationCompat.Builder(context, NotificationManager.NOTIFICATION_CHANNEL_TIMERS)
.setContentIntent(pendingIntent)
.setContentTitle(appName)
.setContentText(text)
.setWhen(DateTimeUtils.currentTimeMillis())
.setSmallIcon(R.drawable.ic_timer_white_24dp)
.setAutoCancel(false)
.setOngoing(true)
notify(
Constants.NOTIFICATION_TIMER.toLong(),
builder,
alert = false,
nonstop = false,
fiveTimes = false)
}
}
private fun cancelSummaryNotification() { private fun cancelSummaryNotification() {
notificationManager.cancel(SUMMARY_NOTIFICATION_ID) notificationManager.cancel(SUMMARY_NOTIFICATION_ID)
} }

Loading…
Cancel
Save