diff options
author | Andrew Sapperstein <asapperstein@google.com> | 2014-07-22 18:17:53 -0700 |
---|---|---|
committer | Andrew Sapperstein <asapperstein@google.com> | 2014-07-23 20:33:53 -0700 |
commit | 3047a9f03d9febaf2aba1e5ea0827e0b740d1ab2 (patch) | |
tree | 87e898eceeade8cef576929df0cd23060ab801c3 /src | |
parent | cc6b6dd1f7677885a3fa2de30468978f246b7a02 (diff) | |
download | android_packages_apps_UnifiedEmail-3047a9f03d9febaf2aba1e5ea0827e0b740d1ab2.tar.gz android_packages_apps_UnifiedEmail-3047a9f03d9febaf2aba1e5ea0827e0b740d1ab2.tar.bz2 android_packages_apps_UnifiedEmail-3047a9f03d9febaf2aba1e5ea0827e0b740d1ab2.zip |
stable action items
b/16167419
Change-Id: I72c7c44f5728563da1fcbd39daa31ccd41845d8a
Diffstat (limited to 'src')
11 files changed, 29 insertions, 234 deletions
diff --git a/src/com/android/mail/analytics/AnalyticsUtils.java b/src/com/android/mail/analytics/AnalyticsUtils.java index 7894feba7..6734d6ea6 100644 --- a/src/com/android/mail/analytics/AnalyticsUtils.java +++ b/src/com/android/mail/analytics/AnalyticsUtils.java @@ -65,14 +65,10 @@ public class AnalyticsUtils { s = "refresh"; } else if (id == R.id.settings) { s = "settings"; - } else if (id == R.id.folder_options) { - s = "folder_options"; } else if (id == R.id.help_info_menu_item) { s = "help"; } else if (id == R.id.feedback_menu_item) { s = "feedback"; - } else if (id == R.id.manage_folders_item) { - s = "manage_folders"; } else if (id == R.id.move_to) { s = "move_to"; } else if (id == R.id.change_folders) { diff --git a/src/com/android/mail/browse/ConversationViewAdapter.java b/src/com/android/mail/browse/ConversationViewAdapter.java index bc953de1d..f562dd554 100644 --- a/src/com/android/mail/browse/ConversationViewAdapter.java +++ b/src/com/android/mail/browse/ConversationViewAdapter.java @@ -86,7 +86,7 @@ public class ConversationViewAdapter extends BaseAdapter { private final List<ConversationOverlayItem> mItems; private final VeiledAddressMatcher mMatcher; - @Retention(RetentionPolicy.CLASS) + @Retention(RetentionPolicy.SOURCE) @IntDef({ VIEW_TYPE_CONVERSATION_HEADER, VIEW_TYPE_CONVERSATION_FOOTER, diff --git a/src/com/android/mail/browse/SelectedConversationsActionMenu.java b/src/com/android/mail/browse/SelectedConversationsActionMenu.java index 9c3f6e1fa..5fbd34089 100644 --- a/src/com/android/mail/browse/SelectedConversationsActionMenu.java +++ b/src/com/android/mail/browse/SelectedConversationsActionMenu.java @@ -47,7 +47,6 @@ import com.android.mail.ui.ConversationUpdater; import com.android.mail.ui.DestructiveAction; import com.android.mail.ui.FolderOperation; import com.android.mail.ui.FolderSelectionDialog; -import com.android.mail.ui.MailActionBarView; import com.android.mail.utils.LogTag; import com.android.mail.utils.LogUtils; import com.android.mail.utils.Utils; @@ -414,14 +413,10 @@ public class SelectedConversationsActionMenu implements ActionMode.Callback, mFolder.name)); } final MenuItem archive = menu.findItem(R.id.archive); - final boolean accountSupportsArchive = - mAccount.supportsCapability(UIProvider.AccountCapabilities.ARCHIVE); - boolean showArchive = accountSupportsArchive - && mFolder.supportsCapability(FolderCapabilities.ARCHIVE); - if (archive == null) { - showArchive = false; - } else { - archive.setVisible(showArchive); + if (archive != null) { + archive.setVisible( + mAccount.supportsCapability(UIProvider.AccountCapabilities.ARCHIVE) && + mFolder.supportsCapability(FolderCapabilities.ARCHIVE)); } final MenuItem spam = menu.findItem(R.id.report_spam); spam.setVisible(!showMarkNotSpam @@ -461,9 +456,6 @@ public class SelectedConversationsActionMenu implements ActionMode.Callback, discardDrafts.setVisible(showDiscardDrafts); } - MailActionBarView.reorderMenu(mContext, mAccount, menu, - mContext.getResources().getInteger(R.integer.actionbar_max_items)); - return true; } diff --git a/src/com/android/mail/preferences/FolderPreferences.java b/src/com/android/mail/preferences/FolderPreferences.java index 9a3be1694..fe007d609 100644 --- a/src/com/android/mail/preferences/FolderPreferences.java +++ b/src/com/android/mail/preferences/FolderPreferences.java @@ -15,9 +15,6 @@ */ package com.android.mail.preferences; -import com.google.android.mail.common.base.Strings; -import com.google.common.collect.ImmutableSet; - import android.content.ContentUris; import android.content.Context; import android.database.Cursor; @@ -30,6 +27,8 @@ import com.android.mail.providers.Folder; import com.android.mail.providers.UIProvider.AccountCapabilities; import com.android.mail.providers.UIProvider.FolderCapabilities; import com.android.mail.utils.NotificationActionUtils.NotificationActionType; +import com.google.android.mail.common.base.Strings; +import com.google.common.collect.ImmutableSet; import java.util.LinkedHashSet; import java.util.Set; diff --git a/src/com/android/mail/preferences/MailPrefs.java b/src/com/android/mail/preferences/MailPrefs.java index fa0121682..cb4eb01ae 100644 --- a/src/com/android/mail/preferences/MailPrefs.java +++ b/src/com/android/mail/preferences/MailPrefs.java @@ -19,6 +19,7 @@ package com.android.mail.preferences; import android.content.Context; import android.content.SharedPreferences; +import android.support.annotation.StringDef; import com.android.mail.R; import com.android.mail.providers.Account; @@ -29,6 +30,8 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Sets; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; import java.util.Collections; import java.util.List; import java.util.Set; @@ -137,6 +140,13 @@ public final class MailPrefs extends VersionedPrefs { public static final String DISABLED = "disabled"; } + @Retention(RetentionPolicy.SOURCE) + @StringDef({ + RemovalActions.ARCHIVE, + RemovalActions.ARCHIVE_AND_DELETE, + RemovalActions.DELETE + }) + public @interface RemovalActionTypes {} public static final class RemovalActions { public static final String ARCHIVE = "archive"; public static final String DELETE = "delete"; @@ -241,7 +251,7 @@ public final class MailPrefs extends VersionedPrefs { * Sets the removal action preference. * @param removalAction The preferred {@link RemovalActions}. */ - public void setRemovalAction(final String removalAction) { + public void setRemovalAction(final @RemovalActionTypes String removalAction) { getEditor().putString(PreferenceKeys.REMOVAL_ACTION, removalAction).apply(); notifyBackupPreferenceChanged(); } diff --git a/src/com/android/mail/ui/AbstractActivityController.java b/src/com/android/mail/ui/AbstractActivityController.java index 8ed9010f2..75eafbacd 100644 --- a/src/com/android/mail/ui/AbstractActivityController.java +++ b/src/com/android/mail/ui/AbstractActivityController.java @@ -1282,7 +1282,7 @@ public abstract class AbstractActivityController implements ActivityController, mFloatingComposeButton = mActivity.findViewById(R.id.compose_button); mFloatingComposeButton.setOnClickListener(this); - mDrawerToggle = new ActionBarDrawerToggle(mActivity, mDrawerContainer, + mDrawerToggle = new ActionBarDrawerToggle(mActivity, mDrawerContainer, false, R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close); mDrawerContainer.setDrawerListener(mDrawerListener); mDrawerContainer.setDrawerShadow( @@ -1538,12 +1538,8 @@ public abstract class AbstractActivityController implements ActivityController, requestFolderRefresh(); } else if (id == R.id.settings) { Utils.showSettings(mActivity.getActivityContext(), mAccount); - } else if (id == R.id.folder_options) { - Utils.showFolderSettings(mActivity.getActivityContext(), mAccount, mFolder); } else if (id == R.id.help_info_menu_item) { mActivity.showHelp(mAccount, mViewMode.getMode()); - } else if (id == R.id.manage_folders_item) { - Utils.showManageFolder(mActivity.getActivityContext(), mAccount); } else if (id == R.id.move_to || id == R.id.change_folders) { final FolderSelectionDialog dialog = FolderSelectionDialog.getInstance(mAccount, Conversation.listOf(mCurrentConversation), isBatch, mFolder, diff --git a/src/com/android/mail/ui/FolderListFragment.java b/src/com/android/mail/ui/FolderListFragment.java index 2005719a2..94956fa7a 100644 --- a/src/com/android/mail/ui/FolderListFragment.java +++ b/src/com/android/mail/ui/FolderListFragment.java @@ -198,8 +198,6 @@ public class FolderListFragment extends ListFragment implements private final DrawerStateListener mDrawerListener = new DrawerStateListener(); - private boolean mShowFooter; - private BitmapCache mImagesCache; private ContactResolver mContactResolver; @@ -438,11 +436,6 @@ public class FolderListFragment extends ListFragment implements mInboxPresent = true; } - // only show the footer on drawered layouts, and definitely not in the folder selection - // activity - mShowFooter = !mIsFolderSelectionActivity - && getResources().getBoolean(R.bool.show_help_and_feedback_in_drawer); - return rootView; } @@ -1235,7 +1228,7 @@ public class FolderListFragment extends ListFragment implements private void update() { // if the parent activity shows a drawer, these items should participate in that drawer // (if it shows a *pane* they should *not* participate in that pane) - if (!mShowFooter) { + if (mIsFolderSelectionActivity) { return; } diff --git a/src/com/android/mail/ui/MailActionBarView.java b/src/com/android/mail/ui/MailActionBarView.java index a648f73ef..fcd64319f 100644 --- a/src/com/android/mail/ui/MailActionBarView.java +++ b/src/com/android/mail/ui/MailActionBarView.java @@ -36,7 +36,6 @@ import android.util.AttributeSet; import android.view.Menu; import android.view.MenuItem; import android.view.View; -import android.view.ViewConfiguration; import android.widget.LinearLayout; import android.widget.SearchView; import android.widget.SearchView.OnQueryTextListener; @@ -45,7 +44,6 @@ import android.widget.TextView; import com.android.mail.ConversationListContext; import com.android.mail.R; -import com.android.mail.preferences.MailPrefs; import com.android.mail.providers.Account; import com.android.mail.providers.AccountObserver; import com.android.mail.providers.Conversation; @@ -89,13 +87,10 @@ public class MailActionBarView extends LinearLayout implements ViewMode.ModeChan private Folder mFolder; private SearchView mSearchWidget; - private MenuItem mSettingsItem; - private MenuItem mHelpItem; - private MenuItem mFolderSettingsItem; private MenuItem mEmptyTrashItem; private MenuItem mEmptySpamItem; private boolean mUseLegacyTitle; - private View mLegacyTitleContainer; + private TextView mLegacyTitle; private TextView mLegacySubTitle; @@ -180,22 +175,22 @@ public class MailActionBarView extends LinearLayout implements ViewMode.ModeChan } private void initializeTitleViews() { - mLegacyTitleContainer = findViewById(R.id.legacy_title_container); - if (mLegacyTitleContainer != null) { + final View legacyTitleContainer = findViewById(R.id.legacy_title_container); + if (legacyTitleContainer != null) { // Determine if this device is running on MR1.1 or later final boolean runningMR11OrLater = actionBarSupportsNewMethods(mActionBar); if (runningMR11OrLater || !mController.isDrawerEnabled()) { // We don't need the legacy view, just hide it - mLegacyTitleContainer.setVisibility(View.GONE); + legacyTitleContainer.setVisibility(View.GONE); mUseLegacyTitle = false; } else { mUseLegacyTitle = true; // We need to show the legacy title/subtitle. Set the click listener - mLegacyTitleContainer.setOnClickListener(this); + legacyTitleContainer.setOnClickListener(this); - mLegacyTitle = (TextView)mLegacyTitleContainer.findViewById(R.id.legacy_title); + mLegacyTitle = (TextView) legacyTitleContainer.findViewById(R.id.legacy_title); mLegacySubTitle = - (TextView)mLegacyTitleContainer.findViewById(R.id.legacy_subtitle); + (TextView) legacyTitleContainer.findViewById(R.id.legacy_subtitle); } } } @@ -223,11 +218,8 @@ public class MailActionBarView extends LinearLayout implements ViewMode.ModeChan } public boolean onCreateOptionsMenu(Menu menu) { - mFolderSettingsItem = menu.findItem(R.id.folder_options); - mHelpItem = menu.findItem(R.id.help_info_menu_item); mEmptyTrashItem = menu.findItem(R.id.empty_trash); mEmptySpamItem = menu.findItem(R.id.empty_spam); - mSettingsItem = menu.findItem(R.id.settings); mSearch = menu.findItem(R.id.search); if (mSearch != null) { @@ -370,10 +362,6 @@ public class MailActionBarView extends LinearLayout implements ViewMode.ModeChan * conditions are properly set to the correct visibility */ public void validateVolatileMenuOptionVisibility() { - if (mFolderSettingsItem != null) { - mFolderSettingsItem.setVisible(mFolder != null - && mFolder.supportsCapability(FolderCapabilities.SUPPORTS_SETTINGS)); - } if (mEmptyTrashItem != null) { mEmptyTrashItem.setVisible(mAccount != null && mFolder != null && mAccount.supportsCapability(AccountCapabilities.EMPTY_TRASH) @@ -407,9 +395,6 @@ public class MailActionBarView extends LinearLayout implements ViewMode.ModeChan } validateVolatileMenuOptionVisibility(); - // Only show help in menu if it's not shown in drawer already, unless there's no drawer. - boolean showHelpAndSettingsInMenu = !mController.isDrawerEnabled(); - switch (getMode()) { case ViewMode.CONVERSATION: case ViewMode.SEARCH_RESULTS_CONVERSATION: @@ -418,17 +403,6 @@ public class MailActionBarView extends LinearLayout implements ViewMode.ModeChan // to show up during the time between the conversation is selected and the fragment // is added. setConversationModeOptions(menu); - // We want to use the user's preferred menu items here - final Resources resources = getResources(); - final int maxItems = resources.getInteger(R.integer.actionbar_max_items); - final int hiddenItems = resources.getInteger( - R.integer.actionbar_hidden_non_cab_items_no_physical_button); - final int totalItems = maxItems - - (ViewConfiguration.get(getContext()).hasPermanentMenuKey() - ? 0 : hiddenItems); - reorderMenu(getContext(), mAccount, menu, totalItems); - // Always enable help/settings in conversation mode. - showHelpAndSettingsInMenu = true; break; case ViewMode.CONVERSATION_LIST: // Show search if the account supports it @@ -438,130 +412,13 @@ public class MailActionBarView extends LinearLayout implements ViewMode.ModeChan // Hide compose and search Utils.setMenuItemVisibility(menu, R.id.compose, false); Utils.setMenuItemVisibility(menu, R.id.search, false); - // No drawer at this moment. - showHelpAndSettingsInMenu = true; break; } - if (mSettingsItem != null) { - mSettingsItem.setVisible(showHelpAndSettingsInMenu); - } - if (mHelpItem != null) { - mHelpItem.setVisible(showHelpAndSettingsInMenu - && mAccount != null - && mAccount.supportsCapability(AccountCapabilities.HELP_CONTENT)); - } - return false; } /** - * Reorders the specified {@link Menu}, taking into account the user's Archive/Delete - * preference. - */ - public static void reorderMenu(final Context context, final Account account, final Menu menu, - final int maxItems) { - final String removalAction = MailPrefs.get(context).getRemovalAction( - account.supportsCapability(AccountCapabilities.ARCHIVE)); - final boolean showArchive = MailPrefs.RemovalActions.ARCHIVE.equals(removalAction) || - MailPrefs.RemovalActions.ARCHIVE_AND_DELETE.equals(removalAction); - final boolean showDelete = MailPrefs.RemovalActions.DELETE.equals(removalAction) || - MailPrefs.RemovalActions.ARCHIVE_AND_DELETE.equals(removalAction); - - // Do a first pass to extract necessary information on what is safe to display - boolean archiveVisibleEnabled = false; - boolean deleteVisibleEnabled = false; - for (int i = 0; i < menu.size(); i++) { - final MenuItem menuItem = menu.getItem(i); - final int itemId = menuItem.getItemId(); - final boolean visible = menuItem.isVisible(); - final boolean enabled = menuItem.isEnabled(); - - if (itemId == R.id.archive || itemId == R.id.remove_folder) { - archiveVisibleEnabled |= (visible & enabled); - } else if (itemId == R.id.delete || itemId == R.id.discard_drafts) { - deleteVisibleEnabled |= (visible & enabled); - } - } - - int actionItems = 0; - MenuItem lastActionCandidate = null; - int totalVisibleItems = 0; - for (int i = 0; i < menu.size(); i++) { - final MenuItem menuItem = menu.getItem(i); - final int itemId = menuItem.getItemId(); - - // We only want to promote it if it's visible and has an icon - if (menuItem.isVisible() && menuItem.getIcon() != null) { - if (itemId == R.id.archive || itemId == R.id.remove_folder) { - /* - * If this is disabled, and we want to show both archive and delete, we will - * hide archive (rather than showing it disabled), and take up one of our - * spaces. If we only want to show archive, we'll hide it, but not take up - * a space. - */ - if (!menuItem.isEnabled() && showArchive) { - menuItem.setVisible(false); - - if (showDelete) { - actionItems++; - } - } else { - /* - * We show this if the following are all true: - * 1. The user wants to display archive, or delete is not visible - * 2. We have room for it - */ - if ((showArchive || !deleteVisibleEnabled) && actionItems < maxItems) { - menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); - actionItems++; - } - } - } else if (itemId == R.id.delete || itemId == R.id.discard_drafts) { - /* - * We show this if the following are all true: - * 1. The user wants to display delete, or archive is not visible - * 2. We have room for it - */ - if ((showDelete || !archiveVisibleEnabled) && actionItems < maxItems) { - menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); - actionItems++; - } - } else if (itemId == R.id.change_folders) { - final boolean showChangeFolder = account - .supportsCapability(AccountCapabilities.MULTIPLE_FOLDERS_PER_CONV); - menuItem.setVisible(showChangeFolder); - - if (showChangeFolder && actionItems < maxItems) { - menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); - actionItems++; - } - } else if (itemId == R.id.search) { - menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS - | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW); - actionItems++; - } else { - if (actionItems < maxItems) { - menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); - actionItems++; - } else { - lastActionCandidate = menuItem; - } - } - if (menuItem.isVisible()) { - totalVisibleItems++; - } - } - } - if ((totalVisibleItems - actionItems == 1) && lastActionCandidate != null) { - // We have exactly one item that we haven't promoted to display in the actionBar. - // There's no reason to put it in the overflow, because it will fit in the actionBar - // if we just don't display the overflow. - lastActionCandidate.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); - } - } - - /** * Put the ActionBar in List navigation mode. */ private void showNavList() { @@ -869,15 +726,13 @@ public class MailActionBarView extends LinearLayout implements ViewMode.ModeChan } private static boolean actionBarSupportsNewMethods(ActionBar bar) { - // TODO(pwestbro) switch this to - // (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) when we switch to the - // latest SDK - if (Build.VERSION.SDK_INT > 17) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { return true; } if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.JELLY_BEAN) { return false; } + // API 17 - why is this special? boolean supportsNewApi = false; try { if (bar != null) { @@ -896,10 +751,6 @@ public class MailActionBarView extends LinearLayout implements ViewMode.ModeChan } } - public ViewMode getViewModeController() { - return mViewModeController; - } - public void setViewModeController(ViewMode viewModeController) { mViewModeController = viewModeController; mViewModeController.addListener(this); diff --git a/src/com/android/mail/ui/SearchMailActionBarView.java b/src/com/android/mail/ui/SearchMailActionBarView.java index 08319babb..cf1ee0ab6 100644 --- a/src/com/android/mail/ui/SearchMailActionBarView.java +++ b/src/com/android/mail/ui/SearchMailActionBarView.java @@ -26,7 +26,6 @@ import android.widget.SearchView; import com.android.mail.ConversationListContext; import com.android.mail.utils.Utils; -import com.android.mail.R; /** * This class is used to show a custom actionbar for the search activity. This doesn't have any @@ -49,7 +48,6 @@ public class SearchMailActionBarView extends MailActionBarView { @Override public boolean onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); - Utils.setMenuItemVisibility(menu, R.id.manage_folders_item, false); switch (getMode()) { case ViewMode.SEARCH_RESULTS_LIST: setSearchQueryTerm(); diff --git a/src/com/android/mail/ui/TwoPaneController.java b/src/com/android/mail/ui/TwoPaneController.java index 656793cac..4139f0427 100644 --- a/src/com/android/mail/ui/TwoPaneController.java +++ b/src/com/android/mail/ui/TwoPaneController.java @@ -97,8 +97,6 @@ public final class TwoPaneController extends AbstractActivityController { if (action == R.id.settings || action == R.id.compose || action == R.id.help_info_menu_item - || action == R.id.manage_folders_item - || action == R.id.folder_options || action == R.id.feedback_menu_item) { return true; } diff --git a/src/com/android/mail/utils/Utils.java b/src/com/android/mail/utils/Utils.java index 4767fee9f..068b4db0e 100644 --- a/src/com/android/mail/utils/Utils.java +++ b/src/com/android/mail/utils/Utils.java @@ -620,44 +620,6 @@ public class Utils { } /** - * Show the settings screen for the supplied account. - */ - public static void showFolderSettings(Context context, Account account, Folder folder) { - if (account == null || folder == null) { - LogUtils.e(LOG_TAG, "Invalid attempt to show folder settings. account: %s folder: %s", - account, folder); - return; - } - final Intent settingsIntent = new Intent(Intent.ACTION_EDIT, - appendVersionQueryParameter(context, account.settingsIntentUri)); - - settingsIntent.setPackage(context.getPackageName()); - settingsIntent.putExtra(EditSettingsExtras.EXTRA_ACCOUNT, account); - settingsIntent.putExtra(EditSettingsExtras.EXTRA_FOLDER, folder); - settingsIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); - - context.startActivity(settingsIntent); - } - - /** - * Show the settings screen for managing all folders. - */ - public static void showManageFolder(Context context, Account account) { - if (account == null) { - LogUtils.e(LOG_TAG, "Invalid attempt to the manage folders screen with null account"); - return; - } - final Intent settingsIntent = new Intent(Intent.ACTION_EDIT, account.settingsIntentUri); - - settingsIntent.setPackage(context.getPackageName()); - settingsIntent.putExtra(EditSettingsExtras.EXTRA_ACCOUNT, account); - settingsIntent.putExtra(EditSettingsExtras.EXTRA_MANAGE_FOLDERS, true); - settingsIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); - - context.startActivity(settingsIntent); - } - - /** * Show the feedback screen for the supplied account. */ public static void sendFeedback(Activity activity, Account account, boolean reportingProblem) { |