From 7f8aed6bea276d6069abbfbdb25263a9ec92a684 Mon Sep 17 00:00:00 2001 From: Scott Kennedy Date: Wed, 22 May 2013 18:35:17 -0700 Subject: Fix up some notification cancelling code Add a method to cancel all notifications for one account, and ensure that cancelling Folder notifications actually cancels the notifications. Bug: 7935576 Change-Id: I5d35665efdfe98a2a63692a00b2e5567d6d482a4 --- src/com/android/mail/MailIntentService.java | 2 +- src/com/android/mail/utils/NotificationUtils.java | 45 +++++++++++++++++++++-- 2 files changed, 42 insertions(+), 5 deletions(-) (limited to 'src/com/android/mail') diff --git a/src/com/android/mail/MailIntentService.java b/src/com/android/mail/MailIntentService.java index 065e5fd7e..2fa0717a9 100644 --- a/src/com/android/mail/MailIntentService.java +++ b/src/com/android/mail/MailIntentService.java @@ -66,7 +66,7 @@ public class MailIntentService extends IntentService { final Account account = intent.getParcelableExtra(Utils.EXTRA_ACCOUNT); final Folder folder = intent.getParcelableExtra(Utils.EXTRA_FOLDER); - NotificationUtils.clearFolderNotification(this, account, folder); + NotificationUtils.clearFolderNotification(this, account, folder, true /* markSeen */); } else if (ACTION_RESEND_NOTIFICATIONS.equals(action)) { final Uri accountUri = intent.getParcelableExtra(Utils.EXTRA_ACCOUNT_URI); final Uri folderUri = intent.getParcelableExtra(Utils.EXTRA_FOLDER_URI); diff --git a/src/com/android/mail/utils/NotificationUtils.java b/src/com/android/mail/utils/NotificationUtils.java index 7c1a362a1..b91ee77f9 100644 --- a/src/com/android/mail/utils/NotificationUtils.java +++ b/src/com/android/mail/utils/NotificationUtils.java @@ -32,7 +32,6 @@ import android.provider.ContactsContract; import android.provider.ContactsContract.CommonDataKinds.Email; import android.provider.ContactsContract.Contacts.Photo; import android.support.v4.app.NotificationCompat; -import android.text.Spannable; import android.text.SpannableString; import android.text.SpannableStringBuilder; import android.text.TextUtils; @@ -60,6 +59,7 @@ import com.google.android.common.html.parser.HTML4; import com.google.android.common.html.parser.HtmlDocument; import com.google.android.common.html.parser.HtmlTree; import com.google.common.base.Objects; +import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import com.google.common.collect.Sets; @@ -1195,9 +1195,10 @@ public class NotificationUtils { } /** - * Clears the notifications for the specified account/folder/conversation. + * Clears the notifications for the specified account/folder. */ - public static void clearFolderNotification(Context context, Account account, Folder folder) { + public static void clearFolderNotification(Context context, Account account, Folder folder, + final boolean markSeen) { LogUtils.v(LOG_TAG, "NotificationUtils: Clearing all notifications for %s/%s", account.name, folder.name); final NotificationMap notificationMap = getNotificationMap(context); @@ -1205,7 +1206,43 @@ public class NotificationUtils { notificationMap.remove(key); notificationMap.saveNotificationMap(context); - markSeen(context, folder); + final NotificationManager notificationManager = + (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); + notificationManager.cancel(getNotificationId(account.name, folder)); + + if (markSeen) { + markSeen(context, folder); + } + } + + /** + * Clears all notifications for the specified account. + */ + public static void clearAccountNotifications(final Context context, final String account) { + LogUtils.v(LOG_TAG, "NotificationUtils: Clearing all notifications for %s", account); + final NotificationMap notificationMap = getNotificationMap(context); + + // Find all NotificationKeys for this account + final ImmutableList.Builder keyBuilder = ImmutableList.builder(); + + for (final NotificationKey key : notificationMap.keySet()) { + if (account.equals(key.account.name)) { + keyBuilder.add(key); + } + } + + final List notificationKeys = keyBuilder.build(); + + final NotificationManager notificationManager = + (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); + + for (final NotificationKey notificationKey : notificationKeys) { + final Folder folder = notificationKey.folder; + notificationManager.cancel(getNotificationId(account, folder)); + notificationMap.remove(notificationKey); + } + + notificationMap.saveNotificationMap(context); } private static ArrayList findContacts(Context context, Collection addresses) { -- cgit v1.2.3