From 1d9780e4d84877d5d2e888f55a653a041ddcc166 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Fri, 15 Sep 2017 12:20:56 -0500 Subject: [PATCH] Remove all notifications when summary is cleared --- .../todoroo/astrid/reminders/NotificationTests.java | 4 ++-- .../org/tasks/notifications/NotificationDao.java | 3 +++ .../org/tasks/notifications/NotificationManager.java | 12 +++++++++--- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/app/src/androidTest/java/com/todoroo/astrid/reminders/NotificationTests.java b/app/src/androidTest/java/com/todoroo/astrid/reminders/NotificationTests.java index f678c9ebf..5ac7c75f0 100644 --- a/app/src/androidTest/java/com/todoroo/astrid/reminders/NotificationTests.java +++ b/app/src/androidTest/java/com/todoroo/astrid/reminders/NotificationTests.java @@ -5,9 +5,9 @@ */ package com.todoroo.astrid.reminders; -import android.app.Notification; import android.content.Context; import android.support.test.runner.AndroidJUnit4; +import android.support.v4.app.NotificationCompat; import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.astrid.dao.TaskDao; @@ -93,7 +93,7 @@ public class NotificationTests extends DatabaseTestCase { notifier.triggerTaskNotification(task.getId(), ReminderService.TYPE_DUE); - verify(notificationManager).notify(eq((int) task.getId()), any(Notification.class), true, false, false); + verify(notificationManager).notify(eq((int) task.getId()), any(NotificationCompat.Builder.class), true, false, false); } @Test diff --git a/app/src/main/java/org/tasks/notifications/NotificationDao.java b/app/src/main/java/org/tasks/notifications/NotificationDao.java index e51cf137a..426b3a0ad 100644 --- a/app/src/main/java/org/tasks/notifications/NotificationDao.java +++ b/app/src/main/java/org/tasks/notifications/NotificationDao.java @@ -24,6 +24,9 @@ public interface NotificationDao { @Query("DELETE FROM notification WHERE task = :taskId") int delete(long taskId); + @Query("DELETE FROM notification WHERE task IN(:taskIds)") + void deleteAll(List taskIds); + @Query("SELECT MAX(timestamp) FROM notification") long latestTimestamp(); } diff --git a/app/src/main/java/org/tasks/notifications/NotificationManager.java b/app/src/main/java/org/tasks/notifications/NotificationManager.java index 3046c2dc7..af726e025 100644 --- a/app/src/main/java/org/tasks/notifications/NotificationManager.java +++ b/app/src/main/java/org/tasks/notifications/NotificationManager.java @@ -45,9 +45,9 @@ import timber.log.Timber; import static android.content.Intent.FLAG_ACTIVITY_MULTIPLE_TASK; import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK; -import static com.google.common.collect.Iterables.transform; import static com.google.common.collect.Iterables.tryFind; import static com.google.common.collect.Lists.newArrayList; +import static com.google.common.collect.Lists.transform; import static com.todoroo.andlib.utility.AndroidUtilities.atLeastJellybean; import static com.todoroo.andlib.utility.AndroidUtilities.atLeastOreo; @@ -103,7 +103,13 @@ public class NotificationManager { public void cancel(long id) { notificationManagerCompat.cancel((int) id); Completable.fromAction(() -> { - if (notificationDao.delete(id) > 0) { + if (id == SUMMARY_NOTIFICATION_ID) { + List tasks = transform(notificationDao.getAll(), n -> n.taskId); + for (Long task : tasks) { + notificationManagerCompat.cancel(task.intValue()); + } + notificationDao.deleteAll(tasks); + } else if (notificationDao.delete(id) > 0) { if (notificationDao.count() == 1) { List notifications = notificationDao.getAll(); org.tasks.notifications.Notification notification = notifications.get(0); @@ -189,7 +195,7 @@ public class NotificationManager { notificationManagerCompat.cancel(SUMMARY_NOTIFICATION_ID); } else { List notifications = notificationDao.getAllOrdered(); - Iterable notificationIds = transform(notifications, n -> n.taskId); + List notificationIds = transform(notifications, n -> n.taskId); QueryTemplate query = new QueryTemplate().where(Task.ID.in(notificationIds)); Filter filter = new Filter(context.getString(R.string.notifications), query); List tasks = taskDao.toList(Query.select(Task.PROPERTIES)