From 65d57c76491dabc4fb8f336cb301beb418d3866c Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Mon, 27 Jul 2020 17:36:00 -0500 Subject: [PATCH] Convert TimerPlugin to Kotlin --- .../todoroo/astrid/timers/TimerPlugin.java | 123 ------------------ .../com/todoroo/astrid/timers/TimerPlugin.kt | 106 +++++++++++++++ 2 files changed, 106 insertions(+), 123 deletions(-) delete mode 100644 app/src/main/java/com/todoroo/astrid/timers/TimerPlugin.java create mode 100644 app/src/main/java/com/todoroo/astrid/timers/TimerPlugin.kt diff --git a/app/src/main/java/com/todoroo/astrid/timers/TimerPlugin.java b/app/src/main/java/com/todoroo/astrid/timers/TimerPlugin.java deleted file mode 100644 index 8e4474554..000000000 --- a/app/src/main/java/com/todoroo/astrid/timers/TimerPlugin.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright (c) 2012 Todoroo Inc - * - * See the file "LICENSE" for the full license governing this code. - */ - -package com.todoroo.astrid.timers; - -import static org.tasks.time.DateTimeUtils.currentTimeMillis; - -import android.app.PendingIntent; -import android.content.Context; -import android.content.Intent; -import android.content.res.Resources; -import androidx.core.app.NotificationCompat; -import com.todoroo.andlib.sql.Criterion; -import com.todoroo.andlib.sql.QueryTemplate; -import com.todoroo.andlib.utility.DateUtilities; -import com.todoroo.astrid.api.Filter; -import com.todoroo.astrid.dao.TaskDaoBlocking; -import com.todoroo.astrid.data.Task; -import com.todoroo.astrid.utility.Constants; -import dagger.hilt.android.qualifiers.ApplicationContext; -import io.reactivex.Completable; -import io.reactivex.schedulers.Schedulers; -import javax.inject.Inject; -import org.tasks.R; -import org.tasks.intents.TaskIntents; -import org.tasks.notifications.NotificationManager; - -public class TimerPlugin { - - private final Context context; - private final NotificationManager notificationManager; - private final TaskDaoBlocking taskDao; - - @Inject - public TimerPlugin( - @ApplicationContext Context context, - NotificationManager notificationManager, - TaskDaoBlocking taskDao) { - this.context = context; - this.notificationManager = notificationManager; - this.taskDao = taskDao; - } - - public void startTimer(Task task) { - updateTimer(task, true); - } - - public void stopTimer(Task task) { - updateTimer(task, false); - } - - /** - * toggles timer and updates elapsed time. - * - * @param start if true, start timer. else, stop it - */ - private void updateTimer(Task task, boolean start) { - if (task == null) { - return; - } - - if (start) { - if (task.getTimerStart() == 0) { - task.setTimerStart(DateUtilities.now()); - } - } else { - if (task.getTimerStart() > 0) { - int newElapsed = (int) ((DateUtilities.now() - task.getTimerStart()) / 1000L); - task.setTimerStart(0L); - task.setElapsedSeconds(task.getElapsedSeconds() + newElapsed); - } - } - - Completable.fromAction( - () -> { - taskDao.save(task); - updateNotifications(); - }) - .subscribeOn(Schedulers.io()) - .subscribe(); - } - - public void updateNotifications() { - int count = taskDao.activeTimers(); - if (count == 0) { - notificationManager.cancel(Constants.NOTIFICATION_TIMER); - } else { - Filter filter = createFilter(context); - Intent notifyIntent = TaskIntents.getTaskListIntent(context, filter); - PendingIntent pendingIntent = - PendingIntent.getActivity(context, Constants.NOTIFICATION_TIMER, notifyIntent, 0); - - Resources r = context.getResources(); - String appName = r.getString(R.string.app_name); - String text = - r.getString( - R.string.TPl_notification, r.getQuantityString(R.plurals.Ntasks, count, count)); - NotificationCompat.Builder builder = - new NotificationCompat.Builder(context, NotificationManager.NOTIFICATION_CHANNEL_TIMERS) - .setContentIntent(pendingIntent) - .setContentTitle(appName) - .setContentText(text) - .setWhen(currentTimeMillis()) - .setSmallIcon(R.drawable.ic_timer_white_24dp) - .setAutoCancel(false) - .setOngoing(true); - notificationManager.notify(Constants.NOTIFICATION_TIMER, builder, false, false, false); - } - } - - public static Filter createFilter(Context context) { - Filter filter = - new Filter( - context.getString(R.string.TFE_workingOn), - new QueryTemplate() - .where(Criterion.and(Task.TIMER_START.gt(0), Task.DELETION_DATE.eq(0)))); - filter.icon = R.drawable.ic_outline_timer_24px; - return filter; - } -} diff --git a/app/src/main/java/com/todoroo/astrid/timers/TimerPlugin.kt b/app/src/main/java/com/todoroo/astrid/timers/TimerPlugin.kt new file mode 100644 index 000000000..c72576f8b --- /dev/null +++ b/app/src/main/java/com/todoroo/astrid/timers/TimerPlugin.kt @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2012 Todoroo Inc + * + * See the file "LICENSE" for the full license governing this code. + */ +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.dao.TaskDaoBlocking +import com.todoroo.astrid.data.Task +import com.todoroo.astrid.utility.Constants +import dagger.hilt.android.qualifiers.ApplicationContext +import io.reactivex.Completable +import io.reactivex.schedulers.Schedulers +import org.tasks.R +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: TaskDaoBlocking) { + fun startTimer(task: Task?) { + updateTimer(task, true) + } + + fun stopTimer(task: Task?) { + updateTimer(task, false) + } + + /** + * toggles timer and updates elapsed time. + * + * @param start if true, start timer. else, stop it + */ + private fun updateTimer(task: Task?, start: Boolean) { + if (task == null) { + return + } + if (start) { + if (task.timerStart == 0L) { + task.timerStart = DateUtilities.now() + } + } else { + if (task.timerStart > 0) { + val newElapsed = ((DateUtilities.now() - task.timerStart) / 1000L).toInt() + task.timerStart = 0L + task.elapsedSeconds = task.elapsedSeconds + newElapsed + } + } + Completable.fromAction { + taskDao.save(task) + updateNotifications() + } + .subscribeOn(Schedulers.io()) + .subscribe() + } + + 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, 0) + 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 { + val filter = Filter( + context.getString(R.string.TFE_workingOn), + QueryTemplate() + .where(and(Task.TIMER_START.gt(0), Task.DELETION_DATE.eq(0)))) + filter.icon = R.drawable.ic_outline_timer_24px + return filter + } + } +} \ No newline at end of file