From c0e0ac9d343a9795544bf9b3079d18b41c2a05d1 Mon Sep 17 00:00:00 2001 From: Danny Baumann Date: Wed, 2 Jan 2013 15:43:29 +0100 Subject: [PATCH] Fix marking messages as read from notification. MessagingController.setFlag(Account, List, Flag, boolean, boolean) expects database IDs, while Message.getId() returns UIDs. Fix the operation by using a variant that expects UIDs. --- .../k9/service/NotificationActionService.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/com/fsck/k9/service/NotificationActionService.java b/src/com/fsck/k9/service/NotificationActionService.java index 8d900a3c7..096961d22 100644 --- a/src/com/fsck/k9/service/NotificationActionService.java +++ b/src/com/fsck/k9/service/NotificationActionService.java @@ -25,7 +25,7 @@ public class NotificationActionService extends CoreService { private final static String EXTRA_ACCOUNT = "account"; private final static String EXTRA_MESSAGE = "message"; - private final static String EXTRA_MESSAGE_IDS = "message_ids"; + private final static String EXTRA_MESSAGE_LIST = "messages"; public static PendingIntent getReplyIntent(Context context, final Account account, final Message message) { Intent i = new Intent(context, NotificationActionService.class); @@ -37,15 +37,15 @@ public class NotificationActionService extends CoreService { } public static PendingIntent getReadAllMessagesIntent(Context context, final Account account, final Collection messages) { - ArrayList messageIds = new ArrayList(); + ArrayList refs = new ArrayList(); for (Message m : messages) { - messageIds.add(m.getId()); + refs.add(m.makeMessageReference()); } Intent i = new Intent(context, NotificationActionService.class); i.putExtra(EXTRA_ACCOUNT, account.getUuid()); - i.putExtra(EXTRA_MESSAGE_IDS, messageIds); + i.putExtra(EXTRA_MESSAGE_LIST, refs); i.setAction(READ_ALL_ACTION); return PendingIntent.getService(context, account.getAccountNumber(), i, PendingIntent.FLAG_UPDATE_CURRENT); @@ -64,9 +64,11 @@ public class NotificationActionService extends CoreService { if (K9.DEBUG) Log.i(K9.LOG_TAG, "NotificationActionService marking messages as read"); - ArrayList messageIds = (ArrayList) intent.getSerializableExtra(EXTRA_MESSAGE_IDS); - - controller.setFlag(account, messageIds, Flag.SEEN, true, false); + ArrayList refs = (ArrayList) + intent.getSerializableExtra(EXTRA_MESSAGE_LIST); + for (MessageReference ref : refs) { + controller.setFlag(account, ref.folderName, ref.uid, Flag.SEEN, true); + } } else if (REPLY_ACTION.equals(intent.getAction())) { if (K9.DEBUG) Log.i(K9.LOG_TAG, "NotificationActionService initiating reply");