From 945bccd633d8122d539301740f768ebc6eaad039 Mon Sep 17 00:00:00 2001 From: Jesse Vincent Date: Fri, 8 Oct 2010 05:34:33 +0000 Subject: [PATCH] First pass at a sane "restore list state" behavior when going back to a messagelist from a message view --- .../fsck/k9/activity/MessageInfoHolder.java | 1 + src/com/fsck/k9/activity/MessageList.java | 24 +++++++++++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/com/fsck/k9/activity/MessageInfoHolder.java b/src/com/fsck/k9/activity/MessageInfoHolder.java index 73d797070..8379d0384 100644 --- a/src/com/fsck/k9/activity/MessageInfoHolder.java +++ b/src/com/fsck/k9/activity/MessageInfoHolder.java @@ -21,6 +21,7 @@ public class MessageInfoHolder public boolean flagged; public boolean downloaded; public boolean partially_downloaded; + public boolean dirty; public Message message; public FolderInfoHolder folder; public boolean selected; diff --git a/src/com/fsck/k9/activity/MessageList.java b/src/com/fsck/k9/activity/MessageList.java index 8a95b09ab..c2e7ff34c 100644 --- a/src/com/fsck/k9/activity/MessageList.java +++ b/src/com/fsck/k9/activity/MessageList.java @@ -771,11 +771,11 @@ public class MessageList mController.addListener(mAdapter.mListener); mAdapter.messages.clear(); - mAdapter.notifyDataSetChanged(); + mAdapter.markAllMessagesAsDirty(); if (mFolderName != null) { - mController.listLocalMessages(mAccount, mFolderName, mAdapter.mListener); + mController.listLocalMessagesSynchronous(mAccount, mFolderName, mAdapter.mListener); mController.notifyAccountCancel(this, mAccount); MessagingController.getInstance(getApplication()).notifyAccountCancel(this, mAccount); @@ -788,6 +788,8 @@ public class MessageList } mHandler.refreshTitle(); + mAdapter.pruneDirtyMessages(); + mAdapter.notifyDataSetChanged(); restoreListState(); } @@ -2241,6 +2243,24 @@ public class MessageList mAnsweredIcon = getResources().getDrawable(R.drawable.ic_mms_answered_small); } + public void markAllMessagesAsDirty() + { + for (MessageInfoHolder holder : mAdapter.messages) + { + holder.dirty = true; + } + } + public void pruneDirtyMessages() + { + for (MessageInfoHolder holder : mAdapter.messages) + { + if (holder.dirty) + { + removeMessage(holder); + } + } + } + public void removeMessages(List holders) { if (holders != null)