Merge "Disable rapid drawer tapping" into jb-ub-mail-ur9
diff --git a/src/com/android/mail/browse/ConversationItemView.java b/src/com/android/mail/browse/ConversationItemView.java
index 5165610..bcc4129 100644
--- a/src/com/android/mail/browse/ConversationItemView.java
+++ b/src/com/android/mail/browse/ConversationItemView.java
@@ -69,6 +69,7 @@
 import com.android.mail.providers.Folder;
 import com.android.mail.providers.UIProvider;
 import com.android.mail.providers.UIProvider.ConversationColumns;
+import com.android.mail.providers.UIProvider.FolderType;
 import com.android.mail.ui.AnimatedAdapter;
 import com.android.mail.ui.ControllableActivity;
 import com.android.mail.ui.ConversationSelectionSet;
@@ -213,8 +214,9 @@
         }
 
         @Override
-        public void loadConversationFolders(Conversation conv, final Uri ignoreFolderUri) {
-            super.loadConversationFolders(conv, ignoreFolderUri);
+        public void loadConversationFolders(Conversation conv, final Uri ignoreFolderUri,
+                final int ignoreFolderType) {
+            super.loadConversationFolders(conv, ignoreFolderUri, ignoreFolderType);
 
             mFoldersCount = mFoldersSortedSet.size();
             mHasMoreFolders = mFoldersCount > MAX_DISPLAYED_FOLDERS_COUNT;
@@ -569,8 +571,16 @@
             } else {
                 mHeader.folderDisplayer.reset();
             }
+
+            final int ignoreFolderType;
+            if (mDisplayedFolder.isInbox()) {
+                ignoreFolderType = FolderType.INBOX;
+            } else {
+                ignoreFolderType = -1;
+            }
+
             mHeader.folderDisplayer.loadConversationFolders(mHeader.conversation,
-                    mDisplayedFolder.uri);
+                    mDisplayedFolder.uri, ignoreFolderType);
         }
 
         if (mSelectedConversationSet != null) {
diff --git a/src/com/android/mail/browse/ConversationViewHeader.java b/src/com/android/mail/browse/ConversationViewHeader.java
index 3b34965..d89343a 100644
--- a/src/com/android/mail/browse/ConversationViewHeader.java
+++ b/src/com/android/mail/browse/ConversationViewHeader.java
@@ -157,7 +157,8 @@
                     0, 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
         }
 
-        mFolderDisplayer.loadConversationFolders(conv, null /* ignoreFolder */);
+        mFolderDisplayer.loadConversationFolders(conv, null /* ignoreFolder */,
+                -1 /* ignoreFolderType */);
         mFolderDisplayer.appendFolderSpans(sb);
 
         mFoldersView.setText(sb);
diff --git a/src/com/android/mail/browse/SelectedConversationsActionMenu.java b/src/com/android/mail/browse/SelectedConversationsActionMenu.java
index 43efc86..e9cf4f6 100644
--- a/src/com/android/mail/browse/SelectedConversationsActionMenu.java
+++ b/src/com/android/mail/browse/SelectedConversationsActionMenu.java
@@ -155,7 +155,7 @@
                 starConversations(true);
                 break;
             case R.id.remove_star:
-                if (mFolder.type == UIProvider.FolderType.STARRED) {
+                if (mFolder.isType(UIProvider.FolderType.STARRED)) {
                     LogUtils.d(LOG_TAG, "We are in a starred folder, removing the star");
                     performDestructiveAction(R.id.remove_star);
                 } else {
@@ -373,7 +373,7 @@
         // archive icon if the setting for that is true.
         final MenuItem removeFolder = menu.findItem(R.id.remove_folder);
         final MenuItem moveTo = menu.findItem(R.id.move_to);
-        final boolean showRemoveFolder = mFolder != null && mFolder.type == FolderType.DEFAULT
+        final boolean showRemoveFolder = mFolder != null && mFolder.isType(FolderType.DEFAULT)
                 && mFolder.supportsCapability(FolderCapabilities.CAN_ACCEPT_MOVED_MESSAGES)
                 && !mFolder.isProviderFolder();
         final boolean showMoveTo = mFolder != null
diff --git a/src/com/android/mail/providers/Conversation.java b/src/com/android/mail/providers/Conversation.java
index f978d00..e125f90 100644
--- a/src/com/android/mail/providers/Conversation.java
+++ b/src/com/android/mail/providers/Conversation.java
@@ -458,7 +458,8 @@
         cachedDisplayableFolders = null;
     }
 
-    public ArrayList<Folder> getRawFoldersForDisplay(final Uri ignoreFolderUri) {
+    public ArrayList<Folder> getRawFoldersForDisplay(final Uri ignoreFolderUri,
+            final int ignoreFolderType) {
         if (cachedDisplayableFolders == null) {
             cachedDisplayableFolders = new ArrayList<Folder>();
             for (Folder folder : rawFolders.folders) {
@@ -466,6 +467,10 @@
                 if (ignoreFolderUri != null && ignoreFolderUri.equals(folder.uri)) {
                     continue;
                 }
+                // Skip the ignoreFolderType
+                if (ignoreFolderType >= 0 && folder.isType(ignoreFolderType)) {
+                    continue;
+                }
                 cachedDisplayableFolders.add(folder);
             }
         }
diff --git a/src/com/android/mail/providers/Folder.java b/src/com/android/mail/providers/Folder.java
index a414f51..a013d8a 100644
--- a/src/com/android/mail/providers/Folder.java
+++ b/src/com/android/mail/providers/Folder.java
@@ -141,7 +141,8 @@
     public int lastSyncResult;
 
     /**
-     * Folder type. 0 is default.
+     * Folder type bit mask. 0 is default.
+     * @see FolderType
      */
     public int type;
 
@@ -437,7 +438,7 @@
             return;
         }
         boolean showBg =
-                !TextUtils.isEmpty(folder.bgColor) && folder.type != FolderType.INBOX_SECTION;
+                !TextUtils.isEmpty(folder.bgColor) && (folder.type & FolderType.INBOX_SECTION) == 0;
         final int backgroundColor = showBg ? Integer.parseInt(folder.bgColor) : 0;
         if (backgroundColor == Utils.getDefaultFolderBackgroundColor(colorBlock.getContext())) {
             showBg = false;
@@ -470,7 +471,7 @@
      * Return if the type of the folder matches a provider defined folder.
      */
     public boolean isProviderFolder() {
-        return type != UIProvider.FolderType.DEFAULT;
+        return !isType(UIProvider.FolderType.DEFAULT);
     }
 
     public int getBackgroundColor(int defaultColor) {
@@ -562,11 +563,11 @@
             if (toFind.equals(f.uri)) {
                 return true;
             }
-            hasInbox |= (f.type == UIProvider.FolderType.INBOX);
+            hasInbox |= f.isInbox();
         }
         // Did not find the URI of needle directly. If the needle is an Inbox and one of the folders
         // was an inbox, then the needle is contained (check Javadoc for explanation).
-        final boolean needleIsInbox = (needle.type == UIProvider.FolderType.INBOX);
+        final boolean needleIsInbox = needle.isInbox();
         return needleIsInbox ? hasInbox : false;
     }
 
@@ -589,18 +590,26 @@
         return target;
     }
 
+    public boolean isType(final int folderType) {
+        return (type & folderType) != 0;
+    }
+
+    public boolean isInbox() {
+        return isType(UIProvider.FolderType.INBOX);
+    }
+
     /**
      * Return if this is the trash folder.
      */
     public boolean isTrash() {
-        return type == UIProvider.FolderType.TRASH;
+        return isType(UIProvider.FolderType.TRASH);
     }
 
     /**
      * Return if this is a draft folder.
      */
     public boolean isDraft() {
-        return type == UIProvider.FolderType.DRAFT;
+        return isType(UIProvider.FolderType.DRAFT);
     }
 
     /**
@@ -615,7 +624,7 @@
      * Whether this is the special folder just used to display all mail for an account.
      */
     public boolean isViewAll() {
-        return type == UIProvider.FolderType.ALL_MAIL;
+        return isType(UIProvider.FolderType.ALL_MAIL);
     }
 
     /**
diff --git a/src/com/android/mail/providers/UIProvider.java b/src/com/android/mail/providers/UIProvider.java
index 86ab8aa..1ec1dbf 100644
--- a/src/com/android/mail/providers/UIProvider.java
+++ b/src/com/android/mail/providers/UIProvider.java
@@ -644,27 +644,27 @@
 
     public static final class FolderType {
         /** A user defined label. */
-        public static final int DEFAULT = 0;
+        public static final int DEFAULT = 1 << 0;
         /** A system defined inbox */
-        public static final int INBOX = 1;
+        public static final int INBOX = 1 << 1;
         /** A system defined containing mails to be edited before sending. */
-        public static final int DRAFT = 2;
+        public static final int DRAFT = 1 << 2;
         /** A system defined folder containing mails <b>to be</b> sent */
-        public static final int OUTBOX = 3;
+        public static final int OUTBOX = 1 << 3;
         /** A system defined folder containing sent mails */
-        public static final int SENT = 4;
+        public static final int SENT = 1 << 4;
         /** A system defined trash folder */
-        public static final int TRASH = 5;
+        public static final int TRASH = 1 << 5;
         /** A system defined spam folder */
-        public static final int SPAM = 6;
+        public static final int SPAM = 1 << 6;
         /** A system defined starred folder */
-        public static final int STARRED = 7;
+        public static final int STARRED = 1 << 7;
         /** Any other system label that we do not have a specific name for. */
-        public static final int OTHER_PROVIDER_FOLDER = 8;
+        public static final int OTHER_PROVIDER_FOLDER = 1 << 8;
         /** All mail folder **/
-        public static final int ALL_MAIL = 9;
+        public static final int ALL_MAIL = 1 << 9;
         /** Gmail's inbox sections **/
-        public static final int INBOX_SECTION = 10;
+        public static final int INBOX_SECTION = 1 << 10;
     }
 
     public static final class FolderCapabilities {
diff --git a/src/com/android/mail/ui/AbstractActivityController.java b/src/com/android/mail/ui/AbstractActivityController.java
index 0f07ef0..a18f392 100644
--- a/src/com/android/mail/ui/AbstractActivityController.java
+++ b/src/com/android/mail/ui/AbstractActivityController.java
@@ -2607,13 +2607,13 @@
         if (!supportsDrag(event, folder)) {
             return;
         }
-        if (folder.type == UIProvider.FolderType.STARRED) {
+        if (folder.isType(UIProvider.FolderType.STARRED)) {
             // Moving a conversation to the starred folder adds the star and
             // removes the current label
             handleDropInStarred(folder);
             return;
         }
-        if (mFolder.type == UIProvider.FolderType.STARRED) {
+        if (mFolder.isType(UIProvider.FolderType.STARRED)) {
             handleDragFromStarred(folder);
             return;
         }
diff --git a/src/com/android/mail/ui/ConversationListFragment.java b/src/com/android/mail/ui/ConversationListFragment.java
index 12d2087..bf3834e 100644
--- a/src/com/android/mail/ui/ConversationListFragment.java
+++ b/src/com/android/mail/ui/ConversationListFragment.java
@@ -741,7 +741,7 @@
             int action;
             mListView.enableSwipe(true);
             if (ConversationListContext.isSearchResult(mViewContext)
-                    || (mFolder != null && mFolder.type == FolderType.SPAM)) {
+                    || (mFolder != null && mFolder.isType(FolderType.SPAM))) {
                 action = R.id.delete;
             } else if (mFolder == null) {
                 action = R.id.remove_folder;
@@ -791,7 +791,7 @@
         }
         mConversationCursorHash = newCursorHash;
 
-        if (newCursor != null) {
+        if (newCursor != null && newCursor.getCount() > 0) {
             newCursor.markContentsSeen();
         }
 
diff --git a/src/com/android/mail/ui/FolderDisplayer.java b/src/com/android/mail/ui/FolderDisplayer.java
index 05cfebe..4c4a68c 100644
--- a/src/com/android/mail/ui/FolderDisplayer.java
+++ b/src/com/android/mail/ui/FolderDisplayer.java
@@ -26,6 +26,7 @@
 import com.android.mail.R;
 import com.android.mail.providers.Conversation;
 import com.android.mail.providers.Folder;
+import com.android.mail.providers.UIProvider.FolderType;
 
 import java.util.SortedSet;
 
@@ -53,11 +54,13 @@
      * Configure the FolderDisplayer object by parsing the rawFolders string.
      *
      * @param foldersString string containing serialized folders to display.
-     * @param ignoreFolder (optional) folder to omit from the displayed set
+     * @param ignoreFolderUri (optional) folder to omit from the displayed set
+     * @param ignoreFolderType -1, or the {@link FolderType} to omit from the displayed set
      */
-    public void loadConversationFolders(Conversation conv, final Uri ignoreFolderUri) {
+    public void loadConversationFolders(Conversation conv, final Uri ignoreFolderUri,
+            final int ignoreFolderType) {
         mFoldersSortedSet.clear();
-        mFoldersSortedSet.addAll(conv.getRawFoldersForDisplay(ignoreFolderUri));
+        mFoldersSortedSet.addAll(conv.getRawFoldersForDisplay(ignoreFolderUri, ignoreFolderType));
     }
 
     /**
diff --git a/src/com/android/mail/ui/FolderItemView.java b/src/com/android/mail/ui/FolderItemView.java
index 8235602..3c1afde 100644
--- a/src/com/android/mail/ui/FolderItemView.java
+++ b/src/com/android/mail/ui/FolderItemView.java
@@ -22,7 +22,6 @@
 
 import com.android.mail.providers.Account;
 import com.android.mail.providers.Folder;
-import com.android.mail.providers.UIProvider.FolderType;
 import com.android.mail.utils.LogTag;
 import com.android.mail.utils.LogUtils;
 import com.android.mail.utils.Utils;
@@ -123,7 +122,7 @@
         mDropHandler = dropHandler;
         mFolderTextView.setText(folder.name);
         mFolderParentIcon.setVisibility(mFolder.hasChildren ? View.VISIBLE : View.GONE);
-        if (folder.type == FolderType.INBOX_SECTION && mFolder.unseenCount > 0) {
+        if (mFolder.isInbox() && mFolder.unseenCount > 0) {
             mUnreadCountTextView.setVisibility(View.GONE);
             setUnseenCount(mFolder.getBackgroundColor(Color.BLACK), mFolder.unseenCount);
         } else {
diff --git a/src/com/android/mail/ui/FolderListFragment.java b/src/com/android/mail/ui/FolderListFragment.java
index 7ebea4a..e7aca91 100644
--- a/src/com/android/mail/ui/FolderListFragment.java
+++ b/src/com/android/mail/ui/FolderListFragment.java
@@ -23,7 +23,6 @@
 import android.content.CursorLoader;
 import android.content.Loader;
 import android.database.Cursor;
-import android.database.DataSetObserver;
 import android.net.Uri;
 import android.os.Bundle;
 import android.view.LayoutInflater;
@@ -655,7 +654,7 @@
                 // Adapter for a flat list. Everything is a FOLDER_USER, and there are no headers.
                 do {
                     final Folder f = Folder.getDeficientDisplayOnlyFolder(mCursor);
-                    if (mExcludedFolderTypes == null || !mExcludedFolderTypes.contains(f.type)) {
+                    if (!isFolderTypeExcluded(f.type)) {
                         mItemList.add(new DrawerItem(mActivity, f, DrawerItem.FOLDER_USER,
                                 mCursor.getPosition()));
                     }
@@ -672,7 +671,7 @@
             final List<DrawerItem> userFolderList = new ArrayList<DrawerItem>();
             do {
                 final Folder f = Folder.getDeficientDisplayOnlyFolder(mCursor);
-                if (mExcludedFolderTypes == null || !mExcludedFolderTypes.contains(f.type)) {
+                if (!isFolderTypeExcluded(f.type)) {
                     if (f.isProviderFolder()) {
                         mItemList.add(new DrawerItem(mActivity, f, DrawerItem.FOLDER_SYSTEM,
                                 mCursor.getPosition()));
@@ -694,7 +693,7 @@
             if (mExcludedFolderTypes != null) {
                 final Iterator<Folder> iterator = recentFolderList.iterator();
                 while (iterator.hasNext()) {
-                    if (mExcludedFolderTypes.contains(iterator.next().type)) {
+                    if (isFolderTypeExcluded(iterator.next().type)) {
                         iterator.remove();
                     }
                 }
@@ -968,4 +967,22 @@
     public boolean showingHierarchy() {
         return mParentFolder != null;
     }
+
+    /**
+     * Checks if the specified folder type bitmask contains a folder type that we want to exclude
+     * from displaying.
+     */
+    private boolean isFolderTypeExcluded(final int folderType) {
+        if (mExcludedFolderTypes == null) {
+            return false;
+        }
+
+        for (final int excludedType : mExcludedFolderTypes) {
+            if ((excludedType & folderType) != 0) {
+                return true;
+            }
+        }
+
+        return false;
+    }
 }
diff --git a/src/com/android/mail/ui/FolderOperation.java b/src/com/android/mail/ui/FolderOperation.java
index eeb812b..28fef50 100644
--- a/src/com/android/mail/ui/FolderOperation.java
+++ b/src/com/android/mail/ui/FolderOperation.java
@@ -18,7 +18,6 @@
 package com.android.mail.ui;
 
 import com.android.mail.providers.Folder;
-import com.android.mail.providers.UIProvider;
 import com.google.common.base.Objects;
 import com.google.common.collect.ImmutableList;
 
@@ -72,7 +71,7 @@
             if (Objects.equal(op.mFolder.uri, folder.uri) && !op.mAdd) {
                 return true;
             }
-            if (folder.isTrash() && op.mFolder.type == UIProvider.FolderType.INBOX) {
+            if (folder.isTrash() && op.mFolder.isInbox()) {
                 return true;
             }
         }
diff --git a/src/com/android/mail/ui/FolderSelectionActivity.java b/src/com/android/mail/ui/FolderSelectionActivity.java
index 3bee9b0..e5c34aa 100644
--- a/src/com/android/mail/ui/FolderSelectionActivity.java
+++ b/src/com/android/mail/ui/FolderSelectionActivity.java
@@ -155,7 +155,7 @@
      * Create a widget for the specified account and folder
      */
     protected void createWidget(int id, Account account, Folder selectedFolder) {
-        WidgetProvider.updateWidget(this, id, account, selectedFolder.uri,
+        WidgetProvider.updateWidget(this, id, account, selectedFolder.type, selectedFolder.uri,
                 selectedFolder.conversationListUri, selectedFolder.name);
         final Intent result = new Intent();
         result.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, id);
diff --git a/src/com/android/mail/ui/FolderSelectorAdapter.java b/src/com/android/mail/ui/FolderSelectorAdapter.java
index d5d85af..96e1d56 100644
--- a/src/com/android/mail/ui/FolderSelectorAdapter.java
+++ b/src/com/android/mail/ui/FolderSelectorAdapter.java
@@ -20,7 +20,6 @@
 import com.android.mail.R;
 import com.android.mail.providers.Folder;
 import com.android.mail.providers.UIProvider.FolderCapabilities;
-import com.android.mail.providers.UIProvider.FolderType;
 import com.google.common.base.Objects;
 import com.google.common.collect.Lists;
 
@@ -146,7 +145,7 @@
     protected boolean meetsRequirements(Folder folder) {
         // We only want to show the non-Trash folders that can accept moved messages
         return folder.supportsCapability(FolderCapabilities.CAN_ACCEPT_MOVED_MESSAGES) &&
-                folder.type != FolderType.TRASH && !Objects.equal(folder, mExcludedFolder);
+                !folder.isTrash() && !Objects.equal(folder, mExcludedFolder);
     }
 
     @Override
diff --git a/src/com/android/mail/utils/NotificationActionUtils.java b/src/com/android/mail/utils/NotificationActionUtils.java
index 208e0c1..09554bc 100644
--- a/src/com/android/mail/utils/NotificationActionUtils.java
+++ b/src/com/android/mail/utils/NotificationActionUtils.java
@@ -222,7 +222,7 @@
         final List<NotificationActionType> sortedActions =
                 new ArrayList<NotificationActionType>(unsortedActions.size());
 
-        if (folder.type == FolderType.INBOX || folder.type == FolderType.INBOX_SECTION) {
+        if (folder.isInbox()) {
             // Inbox
             /*
              * Action 1: Archive, Delete, Mute, Mark read, Add star, Mark important, Reply, Reply
@@ -495,8 +495,7 @@
         public int getActionTextResId() {
             switch (mNotificationActionType) {
                 case ARCHIVE_REMOVE_LABEL:
-                    if (mFolder.type == FolderType.INBOX
-                            || mFolder.type == FolderType.INBOX_SECTION) {
+                    if (mFolder.isInbox()) {
                         return R.string.notification_action_undo_archive;
                     } else {
                         return R.string.notification_action_undo_remove_label;
@@ -671,7 +670,7 @@
 
         switch (destructAction) {
             case ARCHIVE_REMOVE_LABEL: {
-                if (folder.type == FolderType.INBOX || folder.type == FolderType.INBOX_SECTION) {
+                if (folder.isInbox()) {
                     // Inbox, so archive
                     final ContentValues values = new ContentValues(1);
                     values.put(UIProvider.ConversationOperations.OPERATION_KEY,
diff --git a/src/com/android/mail/utils/Utils.java b/src/com/android/mail/utils/Utils.java
index a0453a5..6f967a8 100644
--- a/src/com/android/mail/utils/Utils.java
+++ b/src/com/android/mail/utils/Utils.java
@@ -1199,23 +1199,17 @@
      * the unread count, but for some folder types (outbox, drafts, trash) this will return the
      * total count.
      */
-    public static int getFolderUnreadDisplayCount(Folder folder) {
-        final int count;
+    public static int getFolderUnreadDisplayCount(final Folder folder) {
         if (folder != null) {
-            switch (folder.type) {
-                case UIProvider.FolderType.DRAFT:
-                case UIProvider.FolderType.TRASH:
-                case UIProvider.FolderType.OUTBOX:
-                    count = folder.totalCount;
-                    break;
-                default:
-                    count = folder.unreadCount;
-                    break;
+            if (folder.isDraft() || folder.isTrash()
+                    || folder.isType(UIProvider.FolderType.OUTBOX)) {
+                return folder.totalCount;
+            } else {
+                return folder.unreadCount;
             }
-        } else {
-            count = 0;
         }
-        return count;
+
+        return 0;
     }
 
     /**
diff --git a/src/com/android/mail/widget/BaseWidgetProvider.java b/src/com/android/mail/widget/BaseWidgetProvider.java
index d3f3364..fe8c8e8 100644
--- a/src/com/android/mail/widget/BaseWidgetProvider.java
+++ b/src/com/android/mail/widget/BaseWidgetProvider.java
@@ -36,6 +36,7 @@
 import com.android.mail.providers.Account;
 import com.android.mail.providers.Folder;
 import com.android.mail.providers.UIProvider;
+import com.android.mail.providers.UIProvider.FolderType;
 import com.android.mail.ui.MailboxSelectionActivity;
 import com.android.mail.utils.AccountUtils;
 import com.android.mail.utils.LogTag;
@@ -48,6 +49,7 @@
 
 public abstract class BaseWidgetProvider extends AppWidgetProvider {
     public static final String EXTRA_ACCOUNT = "account";
+    public static final String EXTRA_FOLDER_TYPE = "folder-type";
     public static final String EXTRA_FOLDER_URI = "folder-uri";
     public static final String EXTRA_FOLDER_CONVERSATION_LIST_URI = "folder-conversation-list-uri";
     public static final String EXTRA_FOLDER_DISPLAY_NAME = "folder-display-name";
@@ -121,13 +123,14 @@
         if (ACTION_UPDATE_WIDGET.equals(action)) {
             final int widgetId = intent.getIntExtra(EXTRA_WIDGET_ID, -1);
             final Account account = Account.newinstance(intent.getStringExtra(EXTRA_ACCOUNT));
+            final int folderType = intent.getIntExtra(EXTRA_FOLDER_TYPE, FolderType.DEFAULT);
             final Uri folderUri = intent.getParcelableExtra(EXTRA_FOLDER_URI);
             final Uri folderConversationListUri =
                     intent.getParcelableExtra(EXTRA_FOLDER_CONVERSATION_LIST_URI);
             final String folderDisplayName = intent.getStringExtra(EXTRA_FOLDER_DISPLAY_NAME);
 
             if (widgetId != -1 && account != null && folderUri != null) {
-                updateWidgetInternal(context, widgetId, account, folderUri,
+                updateWidgetInternal(context, widgetId, account, folderType, folderUri,
                         folderConversationListUri, folderDisplayName);
             }
         } else if (Utils.ACTION_NOTIFY_DATASET_CHANGED.equals(action)) {
@@ -242,7 +245,8 @@
                     }
                 }
 
-                updateWidgetInternal(mContext, mAppWidgetIds[i], account, folderUri,
+                updateWidgetInternal(mContext, mAppWidgetIds[i], account,
+                        folder == null ? FolderType.DEFAULT : folder.type, folderUri,
                         folder == null ? null : folder.conversationListUri, folder == null ? null
                                 : folder.name);
             }
@@ -276,7 +280,7 @@
      * Update the widget appWidgetId with the given account and folder
      */
     public static void updateWidget(Context context, int appWidgetId, Account account,
-            final Uri folderUri, final Uri folderConversationListUri,
+            final int folderType, final Uri folderUri, final Uri folderConversationListUri,
             final String folderDisplayName) {
         if (account == null || folderUri == null) {
             LogUtils.e(LOG_TAG,
@@ -288,7 +292,8 @@
         updateWidgetIntent.setType(account.mimeType);
         updateWidgetIntent.putExtra(EXTRA_WIDGET_ID, appWidgetId);
         updateWidgetIntent.putExtra(EXTRA_ACCOUNT, account.serialize());
-        updateWidgetIntent.putExtra(EXTRA_FOLDER_URI, folderUri);;
+        updateWidgetIntent.putExtra(EXTRA_FOLDER_TYPE, folderType);
+        updateWidgetIntent.putExtra(EXTRA_FOLDER_URI, folderUri);
         updateWidgetIntent.putExtra(EXTRA_FOLDER_CONVERSATION_LIST_URI, folderConversationListUri);
         updateWidgetIntent.putExtra(EXTRA_FOLDER_DISPLAY_NAME, folderDisplayName);
 
@@ -296,7 +301,7 @@
     }
 
     protected void updateWidgetInternal(Context context, int appWidgetId, Account account,
-            final Uri folderUri, final Uri folderConversationListUri,
+            final int folderType, final Uri folderUri, final Uri folderConversationListUri,
             final String folderDisplayName) {
         RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget);
         final boolean isAccountValid = isAccountValid(context, account);
@@ -323,8 +328,9 @@
             remoteViews.setOnClickPendingIntent(R.id.widget_configuration, clickIntent);
         } else {
             // Set folder to a space here to avoid flicker.
-            configureValidAccountWidget(context, remoteViews, appWidgetId, account, folderUri,
-                    folderConversationListUri, folderDisplayName == null ? " " : folderDisplayName);
+            configureValidAccountWidget(context, remoteViews, appWidgetId, account, folderType,
+                    folderUri, folderConversationListUri,
+                    folderDisplayName == null ? " " : folderDisplayName);
 
         }
         AppWidgetManager.getInstance(context).updateAppWidget(appWidgetId, remoteViews);
@@ -343,10 +349,11 @@
     }
 
     protected void configureValidAccountWidget(Context context, RemoteViews remoteViews,
-            int appWidgetId, Account account, final Uri folderUri,
+            int appWidgetId, Account account, final int folderType, final Uri folderUri,
             final Uri folderConversationListUri, String folderDisplayName) {
         WidgetService.configureValidAccountWidget(context, remoteViews, appWidgetId, account,
-                folderUri, folderConversationListUri, folderDisplayName, WidgetService.class);
+                folderType, folderUri, folderConversationListUri, folderDisplayName,
+                WidgetService.class);
     }
 
     private final void migrateAllLegacyWidgetInformation(Context context) {
diff --git a/src/com/android/mail/widget/WidgetConversationViewBuilder.java b/src/com/android/mail/widget/WidgetConversationViewBuilder.java
index 4a4ae64..45c4cd9 100644
--- a/src/com/android/mail/widget/WidgetConversationViewBuilder.java
+++ b/src/com/android/mail/widget/WidgetConversationViewBuilder.java
@@ -66,8 +66,9 @@
          * Load Conversation Labels
          */
         @Override
-        public void loadConversationFolders(Conversation conv, final Uri ignoreFolderUri) {
-            super.loadConversationFolders(conv, ignoreFolderUri);
+        public void loadConversationFolders(Conversation conv, final Uri ignoreFolderUri,
+                final int ignoreFolderType) {
+            super.loadConversationFolders(conv, ignoreFolderUri, ignoreFolderType);
         }
 
         private static int getFolderViewId(int position) {
@@ -146,7 +147,8 @@
      * Return the full View
      */
     public RemoteViews getStyledView(CharSequence date, Conversation conversation,
-            final Uri folderUri, SpannableStringBuilder senders, String filteredSubject) {
+            final Uri folderUri, final int ignoreFolderType, SpannableStringBuilder senders,
+            String filteredSubject) {
 
         final boolean isUnread = !conversation.read;
         String snippet = conversation.getSnippet();
@@ -194,7 +196,7 @@
         }
         if (mContext.getResources().getBoolean(R.bool.display_folder_colors_in_widget)) {
             mFolderDisplayer = new WidgetFolderDisplayer(mContext);
-            mFolderDisplayer.loadConversationFolders(conversation, folderUri);
+            mFolderDisplayer.loadConversationFolders(conversation, folderUri, ignoreFolderType);
             mFolderDisplayer.displayFolders(remoteViews);
         }
 
diff --git a/src/com/android/mail/widget/WidgetService.java b/src/com/android/mail/widget/WidgetService.java
index 3db1dcf..d234d2f 100644
--- a/src/com/android/mail/widget/WidgetService.java
+++ b/src/com/android/mail/widget/WidgetService.java
@@ -45,6 +45,7 @@
 import com.android.mail.providers.Conversation;
 import com.android.mail.providers.UIProvider;
 import com.android.mail.providers.UIProvider.ConversationListQueryParameters;
+import com.android.mail.providers.UIProvider.FolderType;
 import com.android.mail.utils.AccountUtils;
 import com.android.mail.utils.DelayedTaskHandler;
 import com.android.mail.utils.LogTag;
@@ -67,17 +68,17 @@
     }
 
     protected void configureValidAccountWidget(Context context, RemoteViews remoteViews,
-            int appWidgetId, Account account, final Uri folderUri,
+            int appWidgetId, Account account, final int folderType, final Uri folderUri,
             final Uri folderConversationListUri, String folderName) {
-        configureValidAccountWidget(context, remoteViews, appWidgetId, account, folderUri,
-                folderConversationListUri, folderName, WidgetService.class);
+        configureValidAccountWidget(context, remoteViews, appWidgetId, account, folderType,
+                folderUri, folderConversationListUri, folderName, WidgetService.class);
     }
 
     /**
      * Modifies the remoteView for the given account and folder.
      */
     public static void configureValidAccountWidget(Context context, RemoteViews remoteViews,
-            int appWidgetId, Account account, final Uri folderUri,
+            int appWidgetId, Account account, final int folderType, final Uri folderUri,
             final Uri folderConversationListUri, String folderDisplayName, Class<?> widgetService) {
         remoteViews.setViewVisibility(R.id.widget_folder, View.VISIBLE);
 
@@ -105,11 +106,11 @@
         remoteViews.setEmptyView(R.id.conversation_list, R.id.empty_conversation_list);
 
         WidgetService.configureValidWidgetIntents(context, remoteViews, appWidgetId, account,
-                folderUri, folderConversationListUri, folderDisplayName, widgetService);
+                folderType, folderUri, folderConversationListUri, folderDisplayName, widgetService);
     }
 
     public static void configureValidWidgetIntents(Context context, RemoteViews remoteViews,
-            int appWidgetId, Account account, final Uri folderUri,
+            int appWidgetId, Account account, final int folderType, final Uri folderUri,
             final Uri folderConversationListUri, final String folderDisplayName,
             Class<?> serviceClass) {
         remoteViews.setViewVisibility(R.id.widget_configuration, View.GONE);
@@ -119,6 +120,7 @@
         final Intent intent = new Intent(context, serviceClass);
         intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
         intent.putExtra(BaseWidgetProvider.EXTRA_ACCOUNT, account.serialize());
+        intent.putExtra(BaseWidgetProvider.EXTRA_FOLDER_TYPE, folderType);
         intent.putExtra(BaseWidgetProvider.EXTRA_FOLDER_URI, folderUri);
         intent.putExtra(BaseWidgetProvider.EXTRA_FOLDER_CONVERSATION_LIST_URI,
                 folderConversationListUri);
@@ -199,6 +201,7 @@
         private final Context mContext;
         private final int mAppWidgetId;
         private final Account mAccount;
+        private final int mFolderType;
         private final Uri mFolderUri;
         private final Uri mFolderConversationListUri;
         private final String mFolderDisplayName;
@@ -221,6 +224,7 @@
             mAppWidgetId = intent.getIntExtra(
                     AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
             mAccount = Account.newinstance(intent.getStringExtra(WidgetProvider.EXTRA_ACCOUNT));
+            mFolderType = intent.getIntExtra(WidgetProvider.EXTRA_FOLDER_TYPE, FolderType.DEFAULT);
             mFolderUri = intent.getParcelableExtra(WidgetProvider.EXTRA_FOLDER_URI);
             mFolderConversationListUri =
                     intent.getParcelableExtra(WidgetProvider.EXTRA_FOLDER_CONVERSATION_LIST_URI);
@@ -239,8 +243,8 @@
             // If the account of this widget has been removed, we want to update the widget to
             // "Tap to configure" mode.
             if (!mService.isWidgetConfigured(mContext, mAppWidgetId, mAccount)) {
-                BaseWidgetProvider.updateWidget(mContext, mAppWidgetId, mAccount, mFolderUri,
-                        mFolderConversationListUri, mFolderDisplayName);
+                BaseWidgetProvider.updateWidget(mContext, mAppWidgetId, mAccount, mFolderType,
+                        mFolderUri, mFolderConversationListUri, mFolderDisplayName);
             }
 
             mFolderInformationShown = false;
@@ -380,10 +384,17 @@
                 CharSequence date = DateUtils.getRelativeTimeSpanString(mContext,
                         conversation.dateMs);
 
+                final int ignoreFolderType;
+                if ((mFolderType & FolderType.INBOX) != 0) {
+                    ignoreFolderType = FolderType.INBOX;
+                } else {
+                    ignoreFolderType = -1;
+                }
+
                 // Load up our remote view.
-                RemoteViews remoteViews =
-                        mWidgetConversationViewBuilder.getStyledView(date, conversation,
-                                mFolderUri, senderBuilder, filterTag(conversation.subject));
+                RemoteViews remoteViews = mWidgetConversationViewBuilder.getStyledView(date,
+                        conversation, mFolderUri, ignoreFolderType, senderBuilder,
+                                filterTag(conversation.subject));
 
                 // On click intent.
                 remoteViews.setOnClickFillInIntent(R.id.widget_conversation,
@@ -500,7 +511,8 @@
                     // widget update. This causes the folder name to be shown as blank if the state
                     // of the widget is restored.
                     mService.configureValidAccountWidget(mContext, remoteViews, mAppWidgetId,
-                            mAccount, mFolderUri, mFolderConversationListUri, folderName);
+                            mAccount, mFolderType, mFolderUri, mFolderConversationListUri,
+                            folderName);
                     appWidgetManager.updateAppWidget(mAppWidgetId, remoteViews);
                     mFolderInformationShown = true;
                 }