am 67aa9e51: Exclude all inbox labels when we\'re viewing an inbox

* commit '67aa9e5162a15fb8b46b4113ac627cd20668f095':
  Exclude all inbox labels when we're viewing an inbox
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/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/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/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/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;
                 }