Moving some code out of TimerPlugin

pull/2884/head
Alex Baker 3 weeks 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.Join
import com.todoroo.andlib.sql.QueryTemplate
import com.todoroo.astrid.api.AstridOrderingFilter
import com.todoroo.astrid.api.Filter
import com.todoroo.astrid.api.FilterImpl
import com.todoroo.astrid.data.Task
import com.todoroo.astrid.timers.TimerPlugin
import dagger.hilt.android.qualifiers.ApplicationContext
import org.tasks.R
import org.tasks.data.CaldavAccount
@ -26,6 +24,7 @@ import org.tasks.filters.MyTasksFilter
import org.tasks.filters.NotificationsFilter
import org.tasks.filters.RecentlyModifiedFilter
import org.tasks.filters.SnoozedFilter
import org.tasks.filters.TimerFilter
import org.tasks.filters.TodayFilter
import org.tasks.preferences.Preferences
import javax.inject.Inject
@ -52,7 +51,7 @@ class BuiltInFilterExposer @Inject constructor(
filters.add(getSnoozedFilter(r))
}
if (taskDao.activeTimers() > 0) {
filters.add(TimerPlugin.createFilter(context))
filters.add(getTimerFilter(r))
}
if (taskDao.hasNotifications() > 0) {
filters.add(getNotificationsFilter(context))
@ -144,6 +143,8 @@ class BuiltInFilterExposer @Inject constructor(
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))
@JvmStatic

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

@ -5,33 +5,21 @@
*/
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.astrid.api.Filter
import com.todoroo.astrid.api.FilterImpl
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.intents.TaskIntents
import org.tasks.notifications.NotificationManager
import org.tasks.time.DateTimeUtils
import javax.inject.Inject
class TimerPlugin @Inject constructor(
@param:ApplicationContext private val context: Context,
private val notificationManager: NotificationManager,
private val taskDao: TaskDao) {
suspend fun startTimer(task: Task?) {
private val taskDao: TaskDao
) {
suspend fun startTimer(task: Task) {
updateTimer(task, true)
}
suspend fun stopTimer(task: Task?) {
suspend fun stopTimer(task: Task) {
updateTimer(task, false)
}
@ -40,10 +28,7 @@ class TimerPlugin @Inject constructor(
*
* @param start if true, start timer. else, stop it
*/
private suspend fun updateTimer(task: Task?, start: Boolean) {
if (task == null) {
return
}
private suspend fun updateTimer(task: Task, start: Boolean) {
if (start) {
if (task.timerStart == 0L) {
task.timerStart = DateUtilities.now()
@ -52,60 +37,10 @@ class TimerPlugin @Inject constructor(
if (task.timerStart > 0) {
val newElapsed = ((DateUtilities.now() - task.timerStart) / 1000L).toInt()
task.timerStart = 0L
task.elapsedSeconds = task.elapsedSeconds + newElapsed
task.elapsedSeconds += newElapsed
}
}
taskDao.update(task)
updateNotifications()
}
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,
)
}
notificationManager.updateTimerNotification()
}
}

@ -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.preUpsideDownCake
import com.todoroo.astrid.core.BuiltInFilterExposer
import com.todoroo.astrid.utility.Constants
import dagger.hilt.android.qualifiers.ApplicationContext
import org.tasks.LocalBroadcastManager
import org.tasks.R
@ -24,6 +25,7 @@ import org.tasks.reminders.SnoozeActivity
import org.tasks.reminders.SnoozeDialog
import org.tasks.themes.ColorProvider
import org.tasks.time.DateTime
import org.tasks.time.DateTimeUtils
import timber.log.Timber
import javax.inject.Inject
import javax.inject.Singleton
@ -384,6 +386,40 @@ class NotificationManager @Inject constructor(
.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() {
notificationManager.cancel(SUMMARY_NOTIFICATION_ID)
}

Loading…
Cancel
Save