diff --git a/src/com/android/email/MessagingController.java b/src/com/android/email/MessagingController.java index 5a23f6e13..ebee84eb9 100644 --- a/src/com/android/email/MessagingController.java +++ b/src/com/android/email/MessagingController.java @@ -616,7 +616,7 @@ public class MessagingController implements Runnable { if (Email.DEBUG) { - Log.v(Email.LOG_TAG, "callbackRunner started"); + Log.v(Email.LOG_TAG, "listLocalMessages callbackRunner started"); } while (stop == false) { @@ -631,7 +631,7 @@ public class MessagingController implements Runnable } catch (InterruptedException ie) { - Log.i(Email.LOG_TAG, "callbackRunner interrupted"); + Log.i(Email.LOG_TAG, "listLocalMessages callbackRunner interrupted"); } } else @@ -658,7 +658,7 @@ public class MessagingController implements Runnable latch.countDown(); if (Email.DEBUG) { - Log.v(Email.LOG_TAG, "callbackRunner finished"); + Log.v(Email.LOG_TAG, "listLocalMessages callbackRunner finished"); } } private void callbackPending() @@ -1015,23 +1015,6 @@ public class MessagingController implements Runnable } remoteMessageArray = null; - /* - * Get a list of the messages that are in the remote list but not on the - * local store, or messages that are in the local store but failed to download - * on the last sync. These are the new messages that we will download. - */ -// Iterator iter = remoteMessages.iterator(); -// while (iter.hasNext()) { -// Message message = iter.next(); -// Message localMessage = localUidMap.get(message.getUid()); -// if (localMessage == null || -// (!localMessage.isSet(Flag.DELETED) && -// !localMessage.isSet(Flag.X_DOWNLOADED_FULL) && -// !localMessage.isSet(Flag.X_DOWNLOADED_PARTIAL))) { -// unsyncedMessages.add(message); -// iter.remove(); -// } -// } } else if (remoteMessageCount < 0) { @@ -1222,14 +1205,25 @@ public class MessagingController implements Runnable { if (Email.DEBUG) { - Log.v(Email.LOG_TAG, "Message with uid " + message.getUid() + " is already downloaded"); + Log.v(Email.LOG_TAG, "Message with uid " + message.getUid() + " is already locally present"); } String newPushState = remoteFolder.getNewPushState(localFolder.getPushState(), message); if (newPushState != null) { localFolder.setPushState(newPushState); } - syncFlagMessages.add(message); + if (!localMessage.isSet(Flag.X_DOWNLOADED_FULL) && !localMessage.isSet(Flag.X_DOWNLOADED_PARTIAL)) + { + if (Email.DEBUG) + { + Log.v(Email.LOG_TAG, "Message with uid " + message.getUid() + " is downloaded, even partially; trying again"); + } + unsyncedMessages.add(message); + } + else + { + syncFlagMessages.add(message); + } } } } @@ -1966,7 +1960,23 @@ public class MessagingController implements Runnable } - + + private void queueSetFlag(Account account, String folderName, String newState, String flag, String[] uids) + { + PendingCommand command = new PendingCommand(); + command.command = PENDING_COMMAND_SET_FLAG; + int length = 3 + uids.length; + command.arguments = new String[length]; + command.arguments[0] = folderName; + command.arguments[1] = newState; + command.arguments[2] = flag; + for (int i = 0; i < uids.length; i++) + { + command.arguments[3 + i] = uids[i]; + } + queuePendingCommand(account, command); + processPendingCommands(account); + } /** * Processes a pending mark read or unread command. * @@ -1977,38 +1987,53 @@ public class MessagingController implements Runnable throws MessagingException { String folder = command.arguments[0]; - String uid = command.arguments[1]; if (account.getErrorFolderName().equals(folder)) { return; } - boolean newState = Boolean.parseBoolean(command.arguments[2]); + boolean newState = Boolean.parseBoolean(command.arguments[1]); - Flag flag = Flag.valueOf(command.arguments[3]); + Flag flag = Flag.valueOf(command.arguments[2]); Store remoteStore = Store.getInstance(account.getStoreUri(), mApplication); Folder remoteFolder = remoteStore.getFolder(folder); - if (!remoteFolder.exists()) + try { - return; + if (!remoteFolder.exists()) + { + return; + } + remoteFolder.open(OpenMode.READ_WRITE); + if (remoteFolder.getMode() != OpenMode.READ_WRITE) + { + return; + } + List messages = new ArrayList(); + for (int i = 3; i < command.arguments.length; i++) + { + String uid = command.arguments[i]; + if (!uid.startsWith(Email.LOCAL_UID_PREFIX)) + { + messages.add(remoteFolder.getMessage(uid)); + } + } + + if (messages.size() == 0) + { + return; + } + remoteFolder.setFlags(messages.toArray(new Message[0]), new Flag[] { flag }, newState); } - remoteFolder.open(OpenMode.READ_WRITE); - if (remoteFolder.getMode() != OpenMode.READ_WRITE) + finally { - return; + if (remoteFolder != null) + { + remoteFolder.close(false); + } } - Message remoteMessage = null; - if (!uid.startsWith(Email.LOCAL_UID_PREFIX)) - { - remoteMessage = remoteFolder.getMessage(uid); - } - if (remoteMessage == null) - { - return; - } - remoteMessage.setFlag(flag, newState); + } private void processPendingMarkAllAsRead(PendingCommand command, Account account) throws MessagingException @@ -2192,103 +2217,53 @@ public class MessagingController implements Runnable queuePendingCommand(account, command); processPendingCommands(account); } - - - - - - /** - * Mark the message with the given account, folder and uid either Seen or not Seen. - * @param account - * @param folder - * @param uid - * @param seen - */ - public void markMessageRead( - final Account account, - final String folder, - final String uid, - final boolean seen) - { - setMessageFlag(account, folder, uid, Flag.SEEN, seen); - } - - /** - * Mark the message with the given account, folder and uid either Seen or not Seen. - * @param account - * @param folder - * @param uid - * @param seen - */ - public void markMessageRead( - final Account account, - final Folder folder, - final Message message, - final boolean seen) - { - setMessageFlag(account, folder, message, Flag.SEEN, seen); - } - public void setFlag(final Account account, final String folder, final Message[] messages, final Flag flag, final boolean newState) + public void setFlag( + final Account account, + final String folderName, + final Message[] messages, + final Flag flag, + final boolean newState) { - for (Message message : messages) + String[] uids = new String[messages.length]; + for (int i = 0; i < messages.length; i++) { - setMessageFlag(account, folder, message.getUid(), flag, newState); + uids[i] = messages[i].getUid(); } + setFlag(account, folderName, uids, flag, newState); } - - public void setMessageFlag( + + public void setFlag( final Account account, - final String folder, - final String uid, - final Flag flag, - final boolean newState) - { - // TODO: put this into the background, but right now that causes odd behavior - // because the MessageList doesn't have its own cache of the flag states - try - { - Store localStore = Store.getInstance(account.getLocalStoreUri(), mApplication); - Folder localFolder = localStore.getFolder(folder); - localFolder.open(OpenMode.READ_WRITE); - - Message message = localFolder.getMessage(uid); - - setMessageFlag(account, localFolder, message, flag, newState); - - localFolder.close(false); - } - catch (MessagingException me) - { - addErrorMessage(account, me); - - throw new RuntimeException(me); - } - } - - public void setMessageFlag( - final Account account, - final Folder folder, - final Message message, + final String folderName, + final String[] uids, final Flag flag, final boolean newState) { // TODO: put this into the background, but right now that causes odd behavior // because the FolderMessageList doesn't have its own cache of the flag states + Folder localFolder = null; try { - String uid = message.getUid(); - String folderName = folder.getName(); - - message.setFlag(flag, newState); - - // Allows for re-allowing sending of messages that could not be sent - if (flag == Flag.FLAGGED && newState == false - && uid != null - && account.getOutboxFolderName().equals(folderName)) + Store localStore = Store.getInstance(account.getLocalStoreUri(), mApplication); + localFolder = localStore.getFolder(folderName); + localFolder.open(OpenMode.READ_WRITE); + Message[] messages = new Message[uids.length]; + for (int i = 0; i < uids.length; i++) { - sendCount.remove(uid); + String uid = uids[i]; + // Allows for re-allowing sending of messages that could not be sent + if (flag == Flag.FLAGGED && newState == false + && uid != null + && account.getOutboxFolderName().equals(folderName)) + { + sendCount.remove(uid); + } + messages[i] = localFolder.getMessage(uid); } + + localFolder.setFlags(messages, new Flag[] {flag}, newState); + for (MessagingListener l : getListeners()) { @@ -2300,10 +2275,7 @@ public class MessagingController implements Runnable return; } - PendingCommand command = new PendingCommand(); - command.command = PENDING_COMMAND_SET_FLAG; - command.arguments = new String[] { folderName, uid, Boolean.toString(newState), flag.toString() }; - queuePendingCommand(account, command); + queueSetFlag(account, folderName, Boolean.toString(newState), flag.toString(), uids); processPendingCommands(account); } catch (MessagingException me) @@ -2312,6 +2284,13 @@ public class MessagingController implements Runnable throw new RuntimeException(me); } + finally + { + if (localFolder != null) + { + localFolder.close(false); + } + } }//setMesssageFlag public void clearAllPending(final Account account) @@ -2386,7 +2365,7 @@ public class MessagingController implements Runnable // This is a view message request, so mark it read if (!message.isSet(Flag.SEEN)) { - markMessageRead(account, localFolder, message, true); + setFlag(account, localFolder.getName(), new Message[] { message }, Flag.SEEN, true); } if (listener != null && !getListeners().contains(listener)) @@ -2423,26 +2402,12 @@ public class MessagingController implements Runnable { if (remoteFolder!=null) { - try - { - remoteFolder.close(false); - } - catch (MessagingException e) - { - Log.w(Email.LOG_TAG, null, e); - } + remoteFolder.close(false); } if (localFolder!=null) { - try - { - localFolder.close(false); - } - catch (MessagingException e) - { - Log.w(Email.LOG_TAG, null, e); - } + localFolder.close(false); } }//finally }//run @@ -2504,7 +2469,7 @@ public class MessagingController implements Runnable localFolder.close(false); if (!message.isSet(Flag.SEEN)) { - markMessageRead(account, localFolder, message, true); + setFlag(account, localFolder.getName(), new Message[] { message }, Flag.SEEN, true); } for (MessagingListener l : getListeners()) @@ -3346,10 +3311,7 @@ public class MessagingController implements Runnable } else if (folder.equals(account.getTrashFolderName()) && account.getDeletePolicy() == Account.DELETE_POLICY_ON_DELETE) { - PendingCommand command = new PendingCommand(); - command.command = PENDING_COMMAND_SET_FLAG; - command.arguments = new String[] { folder, origUid, Boolean.toString(true), Flag.DELETED.toString() }; - queuePendingCommand(account, command); + queueSetFlag(account, folder, Boolean.toString(true), Flag.DELETED.toString(), new String[] { origUid }); processPendingCommands(account); } else if (account.getDeletePolicy() == Account.DELETE_POLICY_ON_DELETE) @@ -3362,10 +3324,7 @@ public class MessagingController implements Runnable } else if (account.getDeletePolicy() == Account.DELETE_POLICY_MARK_AS_READ) { - PendingCommand command = new PendingCommand(); - command.command = PENDING_COMMAND_SET_FLAG; - command.arguments = new String[] { folder, origUid, Boolean.toString(true), Flag.SEEN.toString() }; - queuePendingCommand(account, command); + queueSetFlag(account, folder, Boolean.toString(true), Flag.SEEN.toString(), new String[] { origUid }); processPendingCommands(account); } else @@ -3813,13 +3772,22 @@ public class MessagingController implements Runnable }); } - public void notifyAccount(Context context, Account thisAccount, int newMailCount, int unreadMessageCount) + public void notifyAccount(Context context, Account thisAccount, int newMailCount) { - Log.i(Email.LOG_TAG, "notifyAccount Account " + thisAccount.getDescription() + ", newMailCount = " + newMailCount - + ", unreadMessageCount = " + unreadMessageCount); + int unreadMessageCount = 0; + try + { + unreadMessageCount = thisAccount.getUnreadMessageCount(context, mApplication); + } + catch (Exception e) + { + Log.e(Email.LOG_TAG, "Unable to get unread message count", e); + } + Log.i(Email.LOG_TAG, "notifyAccount Account " + thisAccount.getDescription() + ", newMailCount = " + newMailCount); boolean isNotifyAccount = thisAccount.isNotifyNewMail(); if (isNotifyAccount) { + NotificationManager notifMgr = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE); if (newMailCount > 0 && unreadMessageCount > 0) @@ -3858,6 +3826,10 @@ public class MessagingController implements Runnable notifMgr.cancel(thisAccount.getAccountNumber()); } } + for (MessagingListener l : getListeners()) + { + l.accountStatusChanged(thisAccount, unreadMessageCount); + } } @@ -4131,14 +4103,12 @@ public class MessagingController implements Runnable localFolder.setLastPush(System.currentTimeMillis()); localFolder.setStatus(null); - int unreadMessageCount = account.getUnreadMessageCount(mApplication, mApplication); - Log.i(Email.LOG_TAG, "messagesArrived newCount = " + newCount + ", unreadMessageCount = " + unreadMessageCount); - notifyAccount(mApplication, account, newCount, unreadMessageCount); + Log.i(Email.LOG_TAG, "messagesArrived newCount = " + newCount); + notifyAccount(mApplication, account, newCount); for (MessagingListener l : getListeners()) { l.folderStatusChanged(account, remoteFolder.getName()); - l.accountStatusChanged(account, unreadMessageCount); } } diff --git a/src/com/android/email/activity/FolderList.java b/src/com/android/email/activity/FolderList.java index 9910b5b7b..bfebb1901 100644 --- a/src/com/android/email/activity/FolderList.java +++ b/src/com/android/email/activity/FolderList.java @@ -1373,14 +1373,8 @@ public class FolderList extends K9ListActivity this.unreadMessageCount = unreadCount; - try - { - folder.close(false); - } - catch (MessagingException me) - { - Log.e(Email.LOG_TAG, "Folder.close() failed", me); - } + folder.close(false); + } } diff --git a/src/com/android/email/activity/MessageCompose.java b/src/com/android/email/activity/MessageCompose.java index 45f30fe3d..79af03080 100644 --- a/src/com/android/email/activity/MessageCompose.java +++ b/src/com/android/email/activity/MessageCompose.java @@ -562,7 +562,7 @@ public class MessageCompose extends K9Activity implements OnClickListener, OnFoc Log.d(Email.LOG_TAG, "Setting message ANSWERED flag to true"); // TODO: Really, we should wait until we send the message, but that would require saving the original // message info along with a Draft copy, in case it is left in Drafts for a while before being sent - MessagingController.getInstance(getApplication()).setMessageFlag(mAccount, mFolder, mSourceMessageUid, Flag.ANSWERED, true); + MessagingController.getInstance(getApplication()).setFlag(mAccount, mFolder, new String[] { mSourceMessageUid }, Flag.ANSWERED, true); } updateTitle(); diff --git a/src/com/android/email/activity/MessageList.java b/src/com/android/email/activity/MessageList.java index 5fa9a63e2..43f9c4105 100644 --- a/src/com/android/email/activity/MessageList.java +++ b/src/com/android/email/activity/MessageList.java @@ -196,11 +196,17 @@ public class MessageList case MSG_REMOVE_MESSAGE: { List messages = (List)((Object[]) msg.obj)[0]; + for (MessageInfoHolder message : messages) { + if (message != null && message.selected && mSelectedCount > 0) + { + mSelectedCount--; + } mAdapter.messages.remove(message); } mAdapter.notifyDataSetChanged(); + configureBatchButtons(); break; } @@ -875,11 +881,6 @@ public class MessageList private void onDelete(MessageInfoHolder holder, int position) { - if (holder.read == false && holder.folder.unreadMessageCount > 0) - { - holder.folder.unreadMessageCount--; - } - mAdapter.removeMessage(holder); MessagingController.getInstance(getApplication()).deleteMessage(mAccount, holder.message.getFolder().getName(), holder.message, null); mListView.setSelection(position); @@ -986,14 +987,6 @@ public class MessageList return; } - if (holder.read == false) - { - if (holder.folder.unreadMessageCount > 0) - { - holder.folder.unreadMessageCount--; - } - } - mAdapter.removeMessage(holder); MessagingController.getInstance(getApplication()).moveMessage(mAccount, holder.message.getFolder().getName(), holder.message, folderName, null); @@ -1085,8 +1078,6 @@ public class MessageList holder.read = true; } - mCurrentFolder.unreadMessageCount = 0; - mHandler.sortMessages(); @@ -1111,15 +1102,7 @@ public class MessageList private void onToggleRead(MessageInfoHolder holder) { - - holder.folder.unreadMessageCount += (holder.read ? 1 : -1); - - if (holder.folder.unreadMessageCount < 0) - { - holder.folder.unreadMessageCount = 0; - } - - MessagingController.getInstance(getApplication()).markMessageRead(mAccount, holder.message.getFolder().getName(), holder.uid, !holder.read); + MessagingController.getInstance(getApplication()).setFlag(mAccount, holder.message.getFolder().getName(), new String[] { holder.uid }, Flag.SEEN, !holder.read); holder.read = !holder.read; mHandler.sortMessages(); } @@ -1127,7 +1110,7 @@ public class MessageList private void onToggleFlag(MessageInfoHolder holder) { - MessagingController.getInstance(getApplication()).setMessageFlag(mAccount, holder.message.getFolder().getName(), holder.uid, Flag.FLAGGED, !holder.flagged); + MessagingController.getInstance(getApplication()).setFlag(mAccount, holder.message.getFolder().getName(), new String[] { holder.uid }, Flag.FLAGGED, !holder.flagged); holder.flagged = !holder.flagged; mHandler.sortMessages(); } @@ -1661,10 +1644,11 @@ public class MessageList public FolderInfoHolder getFolder(String folder) { + LocalFolder local_folder = null; try { LocalStore localStore = (LocalStore)Store.getInstance(mAccount.getLocalStoreUri(), getApplication()); - LocalFolder local_folder = localStore.getFolder(folder); + local_folder = localStore.getFolder(folder); return new FolderInfoHolder((Folder)local_folder); } catch (Exception e) @@ -1672,6 +1656,13 @@ public class MessageList Log.e(Email.LOG_TAG, "getFolder(" + folder + ") goes boom: ",e); return null; } + finally + { + if (local_folder != null) + { + local_folder.close(false); + } + } } private static final int NON_MESSAGE_ITEMS = 1; @@ -2121,20 +2112,12 @@ public class MessageList if (isChecked) { mSelectedCount++; - if (mSelectedCount > 0) - { - - enableBatchButtons(); - } } - else + else if (mSelectedCount > 0) { mSelectedCount--; - if (mSelectedCount==0) - { - disableBatchButtons(); - } } + showBatchButtons(); message.selected = isChecked; } } @@ -2162,6 +2145,17 @@ public class MessageList } private void showBatchButtons() { + configureBatchButtons(); + //TODO: Fade in animation + mBatchButtonArea.setVisibility(View.VISIBLE); + } + + private void configureBatchButtons() + { + if (mSelectedCount < 0) + { + mSelectedCount = 0; + } if (mSelectedCount==0) { disableBatchButtons(); @@ -2170,8 +2164,6 @@ public class MessageList { enableBatchButtons(); } - //TODO: Fade in animation - mBatchButtonArea.setVisibility(View.VISIBLE); } class FooterViewHolder @@ -2180,65 +2172,27 @@ public class MessageList public TextView main; } - /* THERE IS NO FUCKING REASON THIS IS CLONED HERE */ - public class FolderInfoHolder implements Comparable + public class FolderInfoHolder { public String name; public String displayName; - public long lastChecked; - - public int unreadMessageCount; - public boolean loading; - public String status; - public boolean lastCheckFailed; - public boolean needsRefresh = false; - /** * Outbox is handled differently from any other folder. */ public boolean outbox; - public int compareTo(FolderInfoHolder o) - { - String s1 = this.name; - String s2 = o.name; - - if (Email.INBOX.equalsIgnoreCase(s1)) - { - return -1; - } - else if (Email.INBOX.equalsIgnoreCase(s2)) - { - return 1; - } - else - return s1.compareToIgnoreCase(s2); - } - public FolderInfoHolder(Folder folder) { populate(folder); } public void populate(Folder folder) { - int unreadCount = 0; - - try - { - folder.open(Folder.OpenMode.READ_WRITE); - unreadCount = folder.getUnreadMessageCount(); - } - catch (MessagingException me) - { - Log.e(Email.LOG_TAG, "Folder.getUnreadMessageCount() failed", me); - } - this.name = folder.getName(); if (this.name.equalsIgnoreCase(Email.INBOX)) @@ -2270,63 +2224,55 @@ public class MessageList { this.displayName = String.format(getString(R.string.special_mailbox_name_sent_fmt), this.name); } - - this.lastChecked = folder.getLastChecked(); - - String mess = truncateStatus(folder.getStatus()); - - this.status = mess; - - this.unreadMessageCount = unreadCount; - - try - { - folder.close(false); - } - catch (MessagingException me) - { - Log.e(Email.LOG_TAG, "Folder.close() failed", me); - } } } @Override public void onClick(View v) { - if (v==mBatchDeleteButton) + + List messageList = new ArrayList(); + for (MessageInfoHolder holder : mAdapter.messages) { - List messageList = new ArrayList(); - //TODO: Optimize i.e. batch all these operations - for (MessageInfoHolder holder : mAdapter.messages) + if (holder.selected) { - if (holder.selected) + if (v == mBatchDeleteButton) { - if (holder.read == false && holder.folder.unreadMessageCount > 0) - { - holder.folder.unreadMessageCount--; - } mAdapter.removeMessage(holder); - messageList.add(holder.message); } + else if (v == mBatchFlagButton) + { + holder.flagged = true; + } + else if (v == mBatchReadButton) + { + holder.read = true; + } + messageList.add(holder.message); } - if (!messageList.isEmpty()) + } + + + if (!messageList.isEmpty()) + { + if (mBatchDeleteButton == v) { - //We assume that all messages are in the same folder - String folderName = messageList.get(0).getFolder().getName(); - MessagingController.getInstance(getApplication()).deleteMessageList(mAccount, folderName, messageList, null); + MessagingController.getInstance(getApplication()).deleteMessageList(mAccount, mCurrentFolder.name, messageList, null); mSelectedCount = 0; - hideBatchButtons(); + configureBatchButtons(); } else { - //Should not happen - Toast.makeText(this, R.string.no_message_seletected_toast, Toast.LENGTH_SHORT).show(); + MessagingController.getInstance(getApplication()).setFlag(mAccount, mCurrentFolder.name, messageList.toArray(new Message[0]), + (v == mBatchReadButton ? Flag.SEEN : Flag.FLAGGED), true); } } else { - Toast.makeText(this, "Not yet implemented", Toast.LENGTH_SHORT).show(); + //Should not happen + Toast.makeText(this, R.string.no_message_seletected_toast, Toast.LENGTH_SHORT).show(); } + mHandler.sortMessages(); } diff --git a/src/com/android/email/activity/MessageView.java b/src/com/android/email/activity/MessageView.java index 2d58e8bf1..80d8a346f 100644 --- a/src/com/android/email/activity/MessageView.java +++ b/src/com/android/email/activity/MessageView.java @@ -844,8 +844,8 @@ public class MessageView extends K9Activity { if (mMessage != null) { - MessagingController.getInstance(getApplication()).setMessageFlag(mAccount, - mMessage.getFolder().getName(), mMessage.getUid(), Flag.FLAGGED, !mMessage.isSet(Flag.FLAGGED)); + MessagingController.getInstance(getApplication()).setFlag(mAccount, + mMessage.getFolder().getName(), new String[] { mMessage.getUid() }, Flag.FLAGGED, !mMessage.isSet(Flag.FLAGGED)); try { mMessage.setFlag(Flag.FLAGGED, !mMessage.isSet(Flag.FLAGGED)); @@ -970,10 +970,11 @@ public class MessageView extends K9Activity { if (mMessage != null) { - MessagingController.getInstance(getApplication()).markMessageRead( + MessagingController.getInstance(getApplication()).setFlag( mAccount, mFolder, - mMessage.getUid(), + new String[] { mMessage.getUid() }, + Flag.SEEN, false); } } diff --git a/src/com/android/email/mail/Folder.java b/src/com/android/email/mail/Folder.java index 1f6af2656..c59c628f6 100644 --- a/src/com/android/email/mail/Folder.java +++ b/src/com/android/email/mail/Folder.java @@ -37,7 +37,7 @@ public abstract class Folder * * @param expunge If true all deleted messages will be expunged. */ - public abstract void close(boolean expunge) throws MessagingException; + public abstract void close(boolean expunge); /** * @return True if further commands are not expected to have to open the diff --git a/src/com/android/email/mail/store/ImapStore.java b/src/com/android/email/mail/store/ImapStore.java index 280758bdc..664e861dd 100644 --- a/src/com/android/email/mail/store/ImapStore.java +++ b/src/com/android/email/mail/store/ImapStore.java @@ -613,7 +613,7 @@ public class ImapStore extends Store return mMode; } - public void close(boolean expunge) throws MessagingException + public void close(boolean expunge) { if (mMessageCount != -1) { @@ -624,9 +624,16 @@ public class ImapStore extends Store { return; } - if (expunge) + try { - expunge(); + if (expunge) + { + expunge(); + } + } + catch (MessagingException me) + { + Log.e(Email.LOG_TAG, "Unable to expunge remote folder " + getName(), me); } synchronized (this) { diff --git a/src/com/android/email/mail/store/LocalStore.java b/src/com/android/email/mail/store/LocalStore.java index 26e9aafef..ee804bee5 100644 --- a/src/com/android/email/mail/store/LocalStore.java +++ b/src/com/android/email/mail/store/LocalStore.java @@ -549,7 +549,7 @@ public class LocalStore extends Store implements Serializable sb.append(": "); for (String argument : arguments) { - sb.append(" "); + sb.append(", "); sb.append(argument); //sb.append("\n"); } @@ -728,11 +728,18 @@ public class LocalStore extends Store implements Serializable } @Override - public void close(boolean expunge) throws MessagingException + public void close(boolean expunge) { - if (expunge) + try { - expunge(); + if (expunge) + { + expunge(); + } + } + catch (MessagingException me) + { + Log.e(Email.LOG_TAG, "Unable to close LocalFolder " + getName(), me); } mFolderId = -1; } @@ -804,16 +811,14 @@ public class LocalStore extends Store implements Serializable { open(OpenMode.READ_WRITE); Message[] messages = getMessages(null); - for (int i = 0; i < messages.length; i++) + for (int i = mVisibleLimit; i < messages.length; i++) { - if (i >= mVisibleLimit) + if (listener != null) { - if (listener != null) - { - listener.messageRemoved(messages[i]); - } - messages[i].setFlag(Flag.X_DESTROYED, true); + listener.messageRemoved(messages[i]); } + messages[i].setFlag(Flag.X_DESTROYED, true); + } } diff --git a/src/com/android/email/mail/store/WebDavStore.java b/src/com/android/email/mail/store/WebDavStore.java index 9a242a835..19557bf65 100644 --- a/src/com/android/email/mail/store/WebDavStore.java +++ b/src/com/android/email/mail/store/WebDavStore.java @@ -1149,14 +1149,7 @@ public class WebDavStore extends Store { if (tmpFolder != null) { - try - { - tmpFolder.close(false); - } - catch (MessagingException me) - { - Log.e(Email.LOG_TAG, "Caught MessagingException while closing folder " + tmpFolder.getName()); - } + tmpFolder.close(false); } } } @@ -1384,7 +1377,7 @@ public class WebDavStore extends Store } @Override - public void close(boolean expunge) throws MessagingException + public void close(boolean expunge) { this.mMessageCount = 0; this.mUnreadMessageCount = 0; diff --git a/src/com/android/email/service/PollService.java b/src/com/android/email/service/PollService.java index 27d3febc0..04f2d4e26 100644 --- a/src/com/android/email/service/PollService.java +++ b/src/com/android/email/service/PollService.java @@ -150,18 +150,7 @@ public class PollService extends CoreService Integer newMailCount = accountsChecked.get(thisAccount.getUuid()); if (newMailCount != null) { - try - { - int unreadMessageCount = thisAccount.getUnreadMessageCount(context, getApplication()); - MessagingController.getInstance(getApplication()).notifyAccount(context, thisAccount, - newMailCount, unreadMessageCount); - - } - catch (MessagingException me) - { - Log.e(Email.LOG_TAG, "***** PollService *****: couldn't get unread count for account " + - thisAccount.getDescription(), me); - } + MessagingController.getInstance(getApplication()).notifyAccount(context, thisAccount, newMailCount); } }//for accounts }//checkMailDone