diff --git a/provider_src/com/android/email/service/ImapService.java b/provider_src/com/android/email/service/ImapService.java index 52ba306d3..4396c532e 100644 --- a/provider_src/com/android/email/service/ImapService.java +++ b/provider_src/com/android/email/service/ImapService.java @@ -510,43 +510,45 @@ public class ImapService extends Service { } } } - stopIdlingForFolders(foldersToStop); + stopIdlingForFoldersInBackground(foldersToStop); } private void unregisterAllIdledMailboxes(final boolean disconnect) { - // Run away from the UI thread + final ArrayList foldersToStop = new ArrayList<>(); + synchronized (mIdledFolders) { + LogUtils.i(LOG_TAG, "Unregister all idle mailboxes"); + + if (disconnect) { + int count = mIdledFolders.size(); + for (int i = 0; i < count; i++) { + ImapFolder folder = mIdledFolders.get(mIdledFolders.keyAt(i)); + if (folder != null && folder.isIdling()) { + foldersToStop.add(folder); + } + } + } + mIdledFolders.clear(); + } + stopIdlingForFoldersInBackground(foldersToStop); + } + + private void stopIdlingForFoldersInBackground(final List folders) { + if (folders.isEmpty()) { + return; + } sExecutor.execute(new Runnable() { @Override public void run() { - final ArrayList foldersToStop = new ArrayList<>(); - synchronized (mIdledFolders) { - LogUtils.i(LOG_TAG, "Unregister all idle mailboxes"); - - if (disconnect) { - int count = mIdledFolders.size(); - for (int i = 0; i < count; i++) { - ImapFolder folder = mIdledFolders.get(mIdledFolders.keyAt(i)); - if (folder != null && folder.isIdling()) { - foldersToStop.add(folder); - } - } + for (ImapFolder folder : folders) { + try { + folder.stopIdling(true); + } catch (MessagingException me) { + // ignored } - mIdledFolders.clear(); } - stopIdlingForFolders(foldersToStop); } }); } - - private void stopIdlingForFolders(final List folders) { - for (ImapFolder folder : folders) { - try { - folder.stopIdling(true); - } catch (MessagingException me) { - // ignored - } - } - } } private static class ImapEmailConnectivityManager extends EmailConnectivityManager {