summaryrefslogtreecommitdiffstats
path: root/src/com/android
diff options
context:
space:
mode:
authorScott Kennedy <skennedy@google.com>2013-05-22 18:35:17 -0700
committerScott Kennedy <skennedy@google.com>2013-05-22 18:35:17 -0700
commit7f8aed6bea276d6069abbfbdb25263a9ec92a684 (patch)
tree337bf67aa9ba512cde2e0fa10bd80222c704e37e /src/com/android
parent5b582622b8e98cd4d47274df8a7a0b56d8f595f8 (diff)
downloadandroid_packages_apps_UnifiedEmail-7f8aed6bea276d6069abbfbdb25263a9ec92a684.tar.gz
android_packages_apps_UnifiedEmail-7f8aed6bea276d6069abbfbdb25263a9ec92a684.tar.bz2
android_packages_apps_UnifiedEmail-7f8aed6bea276d6069abbfbdb25263a9ec92a684.zip
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
Diffstat (limited to 'src/com/android')
-rw-r--r--src/com/android/mail/MailIntentService.java2
-rw-r--r--src/com/android/mail/utils/NotificationUtils.java45
2 files changed, 42 insertions, 5 deletions
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<NotificationKey> keyBuilder = ImmutableList.builder();
+
+ for (final NotificationKey key : notificationMap.keySet()) {
+ if (account.equals(key.account.name)) {
+ keyBuilder.add(key);
+ }
+ }
+
+ final List<NotificationKey> 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<Long> findContacts(Context context, Collection<String> addresses) {