Make it possible to show folders in the widget conv list items.

The code is all in unified, but I am fairly certain email doesn't want this
if it does, I will move the parts where we actually call it out of the overridden
GmailWidgetBuilder and into here...

Change-Id: I16cddd34e009d808cb2b6e49f6586eeba518a101
diff --git a/src/com/android/mail/widget/WidgetConversationViewBuilder.java b/src/com/android/mail/widget/WidgetConversationViewBuilder.java
index 59acd6e..89b5c7a 100644
--- a/src/com/android/mail/widget/WidgetConversationViewBuilder.java
+++ b/src/com/android/mail/widget/WidgetConversationViewBuilder.java
@@ -18,6 +18,10 @@
 
 import com.android.mail.R;
 import com.android.mail.providers.Account;
+import com.android.mail.providers.Folder;
+import com.android.mail.ui.FolderDisplayer;
+
+import java.util.Map;
 
 import android.content.Context;
 import android.content.res.Resources;
@@ -52,6 +56,63 @@
 
     private final Context mContext;
 
+    /**
+     * Label Displayer for Widget
+     */
+    protected static class WidgetFolderDisplayer extends FolderDisplayer {
+        public WidgetFolderDisplayer(Context context) {
+            super(context);
+        }
+
+        // Maximum number of folders we want to display
+        private static final int MAX_DISPLAYED_FOLDERS_COUNT = 3;
+
+        /*
+         * Load Conversation Labels
+         */
+        @Override
+        public void loadConversationFolders(String rawFolders, Folder ignoreFolder) {
+            super.loadConversationFolders(rawFolders, ignoreFolder);
+        }
+
+        private int getFolderViewId(int position) {
+            switch (position) {
+                case 0:
+                    return R.id.widget_folder_0;
+                case 1:
+                    return R.id.widget_folder_1;
+                case 2:
+                    return R.id.widget_folder_2;
+            }
+            return 0;
+        }
+
+        /**
+         * Display folders
+         */
+        public void displayFolders(RemoteViews remoteViews) {
+            int displayedFolder = 0;
+            for (Folder folderValues : mFoldersSortedSet) {
+                int viewId = getFolderViewId(displayedFolder);
+                if (viewId == 0) {
+                    continue;
+                }
+                remoteViews.setViewVisibility(viewId, View.VISIBLE);
+                int color[] = new int[] {folderValues.getBackgroundColor(mDefaultBgColor)};
+                Bitmap bitmap = Bitmap.createBitmap(color, 1, 1, Bitmap.Config.RGB_565);
+                remoteViews.setImageViewBitmap(viewId, bitmap);
+
+                if (++displayedFolder == MAX_DISPLAYED_FOLDERS_COUNT) {
+                    break;
+                }
+            }
+
+            for (int i = displayedFolder; i < MAX_DISPLAYED_FOLDERS_COUNT; i++) {
+                remoteViews.setViewVisibility(getFolderViewId(i), View.GONE);
+            }
+        }
+    }
+
     /*
      * Get font sizes and bitmaps from Resources
      */
@@ -94,9 +155,9 @@
     /*
      * Return the full View
      */
-    public RemoteViews getStyledView(
-            CharSequence senders, CharSequence status, CharSequence date, CharSequence subject,
-            CharSequence snippet, String folders, boolean hasAttachments, boolean read) {
+    public RemoteViews getStyledView(CharSequence senders, CharSequence status, CharSequence date,
+            CharSequence subject, CharSequence snippet, String folders, boolean hasAttachments,
+            boolean read, Folder currentFolder) {
 
         final boolean isUnread = !read;
 
diff --git a/src/com/android/mail/widget/WidgetService.java b/src/com/android/mail/widget/WidgetService.java
index bd50886..eb531ab 100644
--- a/src/com/android/mail/widget/WidgetService.java
+++ b/src/com/android/mail/widget/WidgetService.java
@@ -51,7 +51,10 @@
 
     @Override
     public RemoteViewsFactory onGetViewFactory(Intent intent) {
-        return new MailFactory(getApplicationContext(), intent, this);
+        Context context = getApplicationContext();
+        Account account = Account.newinstance(intent.getStringExtra(WidgetProvider.EXTRA_ACCOUNT));
+        return new MailFactory(context, intent, this, new WidgetConversationViewBuilder(context,
+                account), account);
     }
 
 
@@ -64,7 +67,7 @@
     /**
      * Remote Views Factory for Mail Widget.
      */
-    private static class MailFactory
+    protected static class MailFactory
             implements RemoteViewsService.RemoteViewsFactory, OnLoadCompleteListener<Cursor> {
         private static final int MAX_CONVERSATIONS_COUNT = 25;
         private static final int MAX_SENDERS_LENGTH = 25;
@@ -85,13 +88,14 @@
         private WidgetService mService;
         private int mSenderFormatVersion;
 
-        public MailFactory(Context context, Intent intent, WidgetService service) {
+        public MailFactory(Context context, Intent intent, WidgetService service,
+                WidgetConversationViewBuilder builder, Account account) {
             mContext = context;
             mAppWidgetId = intent.getIntExtra(
                     AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
-            mAccount = Account.newinstance(intent.getStringExtra(WidgetProvider.EXTRA_ACCOUNT));
+            mAccount = account;
             mFolder = new Folder(intent.getStringExtra(WidgetProvider.EXTRA_FOLDER));
-            mWidgetConversationViewBuilder = new WidgetConversationViewBuilder(mContext, mAccount);
+            mWidgetConversationViewBuilder = builder;
             mResolver = context.getContentResolver();
             mService = service;
         }
@@ -221,8 +225,8 @@
                 // Load up our remote view.
                 RemoteViews remoteViews = mWidgetConversationViewBuilder.getStyledView(
                         senderBuilder, statusBuilder, date, filterTag(conversation.subject),
-                        conversation.snippet, conversation.folderList, conversation.hasAttachments,
-                        conversation.read);
+                        conversation.snippet, conversation.rawFolders, conversation.hasAttachments,
+                        conversation.read, mFolder);
 
                 // On click intent.
                 remoteViews.setOnClickFillInIntent(R.id.widget_conversation,