diff options
author | Scott Kennedy <skennedy@google.com> | 2013-03-20 15:07:39 -0700 |
---|---|---|
committer | Scott Kennedy <skennedy@google.com> | 2013-03-20 18:18:03 -0700 |
commit | 67aa9e5162a15fb8b46b4113ac627cd20668f095 (patch) | |
tree | 7cb0084354530aa169c24d874b09a8b04b1c9567 /src/com | |
parent | 0f58cbf6acfc656f962129ae97dfe2e2c62c4002 (diff) | |
download | android_packages_apps_UnifiedEmail-67aa9e5162a15fb8b46b4113ac627cd20668f095.tar.gz android_packages_apps_UnifiedEmail-67aa9e5162a15fb8b46b4113ac627cd20668f095.tar.bz2 android_packages_apps_UnifiedEmail-67aa9e5162a15fb8b46b4113ac627cd20668f095.zip |
Exclude all inbox labels when we're viewing an inbox
Bug: 8426563
Change-Id: Ib9256fcdb658cb3df9b67485f7768f75bb8b6539
Diffstat (limited to 'src/com')
8 files changed, 74 insertions, 34 deletions
diff --git a/src/com/android/mail/browse/ConversationItemView.java b/src/com/android/mail/browse/ConversationItemView.java index 516561058..bcc4129e0 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.Conversation; 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 @@ public class ConversationItemView extends View implements SwipeableItemView, Tog } @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 @@ public class ConversationItemView extends View implements SwipeableItemView, Tog } 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 3b34965de..d89343ac4 100644 --- a/src/com/android/mail/browse/ConversationViewHeader.java +++ b/src/com/android/mail/browse/ConversationViewHeader.java @@ -157,7 +157,8 @@ public class ConversationViewHeader extends RelativeLayout implements OnClickLis 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 f978d006c..e125f9078 100644 --- a/src/com/android/mail/providers/Conversation.java +++ b/src/com/android/mail/providers/Conversation.java @@ -458,7 +458,8 @@ public class Conversation implements Parcelable { 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 @@ public class Conversation implements Parcelable { 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 05cfebe6c..4c4a68ccb 100644 --- a/src/com/android/mail/ui/FolderDisplayer.java +++ b/src/com/android/mail/ui/FolderDisplayer.java @@ -26,6 +26,7 @@ import android.net.Uri; 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 @@ public class FolderDisplayer { * 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 3bee9b03b..e5c34aa3e 100644 --- a/src/com/android/mail/ui/FolderSelectionActivity.java +++ b/src/com/android/mail/ui/FolderSelectionActivity.java @@ -155,7 +155,7 @@ public class FolderSelectionActivity extends Activity implements OnClickListener * 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 d3f3364cd..fe8c8e896 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.preferences.MailPrefs; 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 @@ import java.util.Set; 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 @@ public abstract class BaseWidgetProvider extends AppWidgetProvider { 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 @@ public abstract class BaseWidgetProvider extends AppWidgetProvider { } } - 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 @@ public abstract class BaseWidgetProvider extends AppWidgetProvider { * 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 @@ public abstract class BaseWidgetProvider extends AppWidgetProvider { 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 @@ public abstract class BaseWidgetProvider extends AppWidgetProvider { } 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 @@ public abstract class BaseWidgetProvider extends AppWidgetProvider { 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 @@ public abstract class BaseWidgetProvider extends AppWidgetProvider { } 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 4a4ae64ac..45c4cd990 100644 --- a/src/com/android/mail/widget/WidgetConversationViewBuilder.java +++ b/src/com/android/mail/widget/WidgetConversationViewBuilder.java @@ -66,8 +66,9 @@ public class WidgetConversationViewBuilder { * 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 @@ public class WidgetConversationViewBuilder { * 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 @@ public class WidgetConversationViewBuilder { } 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 3db1dcf66..d234d2f4c 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.Account; 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 @@ public class WidgetService extends RemoteViewsService { } 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 @@ public class WidgetService extends RemoteViewsService { 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 @@ public class WidgetService extends RemoteViewsService { 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 @@ public class WidgetService extends RemoteViewsService { 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 @@ public class WidgetService extends RemoteViewsService { 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 @@ public class WidgetService extends RemoteViewsService { // 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 @@ public class WidgetService extends RemoteViewsService { 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 @@ public class WidgetService extends RemoteViewsService { // 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; } |