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;
}