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,