Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(967)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java

Issue 2815453002: [Android] Show Browser Actions dialog in Chrome (Closed)
Patch Set: Fix tests fail. Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java
index 2ca251af34e9451fabdb9eede12177d1ff6a875d..064749bfbf7386e1d2f22d7d605d7f479ea178a1 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java
@@ -38,10 +38,20 @@ import java.util.Set;
* A {@link ContextMenuPopulator} used for showing the default Chrome context menu.
*/
public class ChromeContextMenuPopulator implements ContextMenuPopulator {
-
private static final String TAG = "CCMenuPopulator";
/**
+ * Defines the Groups of each Context Menu Item
+ */
+ @Retention(RetentionPolicy.SOURCE)
+ @IntDef({LINK, IMAGE, VIDEO})
+ public @interface ContextMenuGroup {}
+
+ public static final int LINK = 0;
+ public static final int IMAGE = 1;
+ public static final int VIDEO = 2;
+
+ /**
* Defines the context menu modes
*/
@Retention(RetentionPolicy.SOURCE)
@@ -56,71 +66,68 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator {
public static final int CUSTOM_TAB_MODE = 1;
public static final int FULLSCREEN_TAB_MODE = 2;
- /**
- * Defines the Groups of each Context Menu Item
- */
- @Retention(RetentionPolicy.SOURCE)
- @IntDef({LINK, IMAGE, VIDEO})
- public @interface ContextMenuGroup {}
-
- public static final int LINK = 0;
- public static final int IMAGE = 1;
- public static final int VIDEO = 2;
-
// Items that are included in all context menus.
- private static final Set<ContextMenuItem> BASE_WHITELIST =
- Collections.unmodifiableSet(CollectionUtil.newHashSet(ContextMenuItem.COPY_LINK_ADDRESS,
- ContextMenuItem.CALL, ContextMenuItem.SEND_MESSAGE,
- ContextMenuItem.ADD_TO_CONTACTS, ContextMenuItem.COPY,
- ContextMenuItem.COPY_LINK_TEXT, ContextMenuItem.LOAD_ORIGINAL_IMAGE,
- ContextMenuItem.SAVE_LINK_AS, ContextMenuItem.SAVE_IMAGE,
- ContextMenuItem.SHARE_IMAGE, ContextMenuItem.SAVE_VIDEO));
+ private static final Set<? extends ContextMenuItem> BASE_WHITELIST =
+ Collections.unmodifiableSet(CollectionUtil.newHashSet(
+ ChromeContextMenuItem.COPY_LINK_ADDRESS, ChromeContextMenuItem.CALL,
+ ChromeContextMenuItem.SEND_MESSAGE, ChromeContextMenuItem.ADD_TO_CONTACTS,
+ ChromeContextMenuItem.COPY, ChromeContextMenuItem.COPY_LINK_TEXT,
+ ChromeContextMenuItem.LOAD_ORIGINAL_IMAGE, ChromeContextMenuItem.SAVE_LINK_AS,
+ ChromeContextMenuItem.SAVE_IMAGE, ChromeContextMenuItem.SHARE_IMAGE,
+ ChromeContextMenuItem.SAVE_VIDEO));
// Items that are included for normal Chrome browser mode.
- private static final Set<ContextMenuItem> NORMAL_MODE_WHITELIST =
- Collections.unmodifiableSet(CollectionUtil.newHashSet(ContextMenuItem.OPEN_IN_NEW_TAB,
- ContextMenuItem.OPEN_IN_OTHER_WINDOW, ContextMenuItem.OPEN_IN_INCOGNITO_TAB,
- ContextMenuItem.SAVE_LINK_AS, ContextMenuItem.OPEN_IMAGE_IN_NEW_TAB,
- ContextMenuItem.SEARCH_BY_IMAGE));
+ private static final Set<? extends ContextMenuItem> NORMAL_MODE_WHITELIST =
+ Collections.unmodifiableSet(CollectionUtil.newHashSet(
+ ChromeContextMenuItem.OPEN_IN_NEW_TAB,
+ ChromeContextMenuItem.OPEN_IN_OTHER_WINDOW,
+ ChromeContextMenuItem.OPEN_IN_INCOGNITO_TAB, ChromeContextMenuItem.SAVE_LINK_AS,
+ ChromeContextMenuItem.OPEN_IMAGE_IN_NEW_TAB,
+ ChromeContextMenuItem.SEARCH_BY_IMAGE));
// Additional items for custom tabs mode.
- private static final Set<ContextMenuItem> CUSTOM_TAB_MODE_WHITELIST =
- Collections.unmodifiableSet(CollectionUtil.newHashSet(ContextMenuItem.OPEN_IMAGE,
- ContextMenuItem.SEARCH_BY_IMAGE, ContextMenuItem.OPEN_IN_NEW_CHROME_TAB,
- ContextMenuItem.OPEN_IN_CHROME_INCOGNITO_TAB,
- ContextMenuItem.OPEN_IN_BROWSER_ID));
+ private static final Set<? extends ContextMenuItem> CUSTOM_TAB_MODE_WHITELIST =
+ Collections.unmodifiableSet(CollectionUtil.newHashSet(ChromeContextMenuItem.OPEN_IMAGE,
+ ChromeContextMenuItem.SEARCH_BY_IMAGE,
+ ChromeContextMenuItem.OPEN_IN_NEW_CHROME_TAB,
+ ChromeContextMenuItem.OPEN_IN_CHROME_INCOGNITO_TAB,
+ ChromeContextMenuItem.OPEN_IN_BROWSER_ID));
// Additional items for fullscreen tabs mode.
- private static final Set<ContextMenuItem> FULLSCREEN_TAB_MODE_WHITELIST =
- Collections.unmodifiableSet(CollectionUtil.newHashSet(ContextMenuItem.OPEN_IN_CHROME));
+ private static final Set<? extends ContextMenuItem> FULLSCREEN_TAB_MODE_WHITELIST =
+ Collections.unmodifiableSet(
+ CollectionUtil.newHashSet(ChromeContextMenuItem.OPEN_IN_CHROME));
// The order of the items within each lists determines the order of the context menu.
- private static final List<ContextMenuItem> CUSTOM_TAB_GROUP = Collections.unmodifiableList(
- CollectionUtil.newArrayList(ContextMenuItem.OPEN_IN_NEW_CHROME_TAB,
- ContextMenuItem.OPEN_IN_CHROME_INCOGNITO_TAB,
- ContextMenuItem.OPEN_IN_BROWSER_ID));
-
- private static final List<ContextMenuItem> LINK_GROUP =
- Collections.unmodifiableList(CollectionUtil.newArrayList(
- ContextMenuItem.OPEN_IN_OTHER_WINDOW, ContextMenuItem.OPEN_IN_NEW_TAB,
- ContextMenuItem.OPEN_IN_INCOGNITO_TAB, ContextMenuItem.COPY_LINK_ADDRESS,
- ContextMenuItem.COPY_LINK_TEXT, ContextMenuItem.SAVE_LINK_AS));
-
- private static final List<ContextMenuItem> IMAGE_GROUP =
+ private static final List<? extends ContextMenuItem> CUSTOM_TAB_GROUP =
+ Collections.unmodifiableList(
+ CollectionUtil.newArrayList(ChromeContextMenuItem.OPEN_IN_NEW_CHROME_TAB,
+ ChromeContextMenuItem.OPEN_IN_CHROME_INCOGNITO_TAB,
+ ChromeContextMenuItem.OPEN_IN_BROWSER_ID));
+
+ private static final List<? extends ContextMenuItem> LINK_GROUP = Collections.unmodifiableList(
+ CollectionUtil.newArrayList(ChromeContextMenuItem.OPEN_IN_OTHER_WINDOW,
+ ChromeContextMenuItem.OPEN_IN_NEW_TAB,
+ ChromeContextMenuItem.OPEN_IN_INCOGNITO_TAB,
+ ChromeContextMenuItem.COPY_LINK_ADDRESS, ChromeContextMenuItem.COPY_LINK_TEXT,
+ ChromeContextMenuItem.SAVE_LINK_AS));
+
+ private static final List<? extends ContextMenuItem> IMAGE_GROUP =
Collections.unmodifiableList(CollectionUtil.newArrayList(
- ContextMenuItem.LOAD_ORIGINAL_IMAGE, ContextMenuItem.SAVE_IMAGE,
- ContextMenuItem.OPEN_IMAGE, ContextMenuItem.OPEN_IMAGE_IN_NEW_TAB,
- ContextMenuItem.SEARCH_BY_IMAGE, ContextMenuItem.SHARE_IMAGE));
+ ChromeContextMenuItem.LOAD_ORIGINAL_IMAGE, ChromeContextMenuItem.SAVE_IMAGE,
+ ChromeContextMenuItem.OPEN_IMAGE, ChromeContextMenuItem.OPEN_IMAGE_IN_NEW_TAB,
+ ChromeContextMenuItem.SEARCH_BY_IMAGE, ChromeContextMenuItem.SHARE_IMAGE));
- private static final List<ContextMenuItem> MESSAGE_GROUP = Collections.unmodifiableList(
- CollectionUtil.newArrayList(ContextMenuItem.CALL, ContextMenuItem.SEND_MESSAGE,
- ContextMenuItem.ADD_TO_CONTACTS, ContextMenuItem.COPY));
+ private static final List<? extends ContextMenuItem> MESSAGE_GROUP =
+ Collections.unmodifiableList(CollectionUtil.newArrayList(ChromeContextMenuItem.CALL,
+ ChromeContextMenuItem.SEND_MESSAGE, ChromeContextMenuItem.ADD_TO_CONTACTS,
+ ChromeContextMenuItem.COPY));
- private static final List<ContextMenuItem> VIDEO_GROUP =
- Collections.unmodifiableList(CollectionUtil.newArrayList(ContextMenuItem.SAVE_VIDEO));
+ private static final List<? extends ContextMenuItem> VIDEO_GROUP = Collections.unmodifiableList(
+ CollectionUtil.newArrayList(ChromeContextMenuItem.SAVE_VIDEO));
- private static final List<ContextMenuItem> OTHER_GROUP = Collections.unmodifiableList(
- CollectionUtil.newArrayList(ContextMenuItem.OPEN_IN_CHROME));
+ private static final List<? extends ContextMenuItem> OTHER_GROUP = Collections.unmodifiableList(
+ CollectionUtil.newArrayList(ChromeContextMenuItem.OPEN_IN_CHROME));
private final ContextMenuItemDelegate mDelegate;
private final int mMode;
@@ -259,9 +266,9 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator {
supportedOptions.addAll(NORMAL_MODE_WHITELIST);
}
} else {
- supportedOptions.add(ContextMenuItem.COPY_LINK_ADDRESS);
- supportedOptions.add(ContextMenuItem.COPY_LINK_TEXT);
- supportedOptions.add(ContextMenuItem.COPY);
+ supportedOptions.add(ChromeContextMenuItem.COPY_LINK_ADDRESS);
+ supportedOptions.add(ChromeContextMenuItem.COPY_LINK_TEXT);
+ supportedOptions.add(ChromeContextMenuItem.COPY);
}
Set<ContextMenuItem> disabledOptions = getDisabledOptions(params);
@@ -345,8 +352,9 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator {
itemGroups.add(new Pair<>(titleResId, items));
}
- private void addValidItems(List<ContextMenuItem> validItems, List<ContextMenuItem> allItems,
- Set<ContextMenuItem> supportedOptions, Set<ContextMenuItem> disabledOptions) {
+ private static void addValidItems(List<ContextMenuItem> validItems,
+ List<? extends ContextMenuItem> allItems, Set<ContextMenuItem> supportedOptions,
+ Set<ContextMenuItem> disabledOptions) {
for (int i = 0; i < allItems.size(); i++) {
ContextMenuItem item = allItems.get(i);
if (supportedOptions.contains(item) && !disabledOptions.contains(item)) {
@@ -361,10 +369,10 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator {
* given for example (a, b, c) will be added to list d, e f, as a, b, c, d, e, f not
* c, b, a, d, e, f.
*/
- private void addValidItemsToFront(List<ContextMenuItem> validItems,
- List<ContextMenuItem> allItems, Set<ContextMenuItem> supportedOptions,
+ private static void addValidItemsToFront(List<ContextMenuItem> validItems,
+ List<? extends ContextMenuItem> allItems, Set<ContextMenuItem> supportedOptions,
Set<ContextMenuItem> disabledOptions) {
- for (int i = allItems.size() - 1; i >= 0; i--) {
+ for (int i = 0; i < allItems.size(); i++) {
ContextMenuItem item = allItems.get(i);
if (supportedOptions.contains(item) && !disabledOptions.contains(item)) {
assert !validItems.contains(item);
@@ -395,83 +403,83 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator {
}
if (params.isAnchor() && !mDelegate.isOpenInOtherWindowSupported()) {
- disabledOptions.add(ContextMenuItem.OPEN_IN_OTHER_WINDOW);
+ disabledOptions.add(ChromeContextMenuItem.OPEN_IN_OTHER_WINDOW);
}
if (mDelegate.isIncognito() || !mDelegate.isIncognitoSupported()) {
- disabledOptions.add(ContextMenuItem.OPEN_IN_INCOGNITO_TAB);
+ disabledOptions.add(ChromeContextMenuItem.OPEN_IN_INCOGNITO_TAB);
}
if (params.getLinkText().trim().isEmpty() || params.isImage()) {
- disabledOptions.add(ContextMenuItem.COPY_LINK_TEXT);
+ disabledOptions.add(ChromeContextMenuItem.COPY_LINK_TEXT);
}
if (params.isAnchor() && !isAcceptedScheme(params.getLinkUrl())) {
- disabledOptions.add(ContextMenuItem.OPEN_IN_OTHER_WINDOW);
- disabledOptions.add(ContextMenuItem.OPEN_IN_NEW_TAB);
- disabledOptions.add(ContextMenuItem.OPEN_IN_INCOGNITO_TAB);
+ disabledOptions.add(ChromeContextMenuItem.OPEN_IN_OTHER_WINDOW);
+ disabledOptions.add(ChromeContextMenuItem.OPEN_IN_NEW_TAB);
+ disabledOptions.add(ChromeContextMenuItem.OPEN_IN_INCOGNITO_TAB);
}
if (isEmptyUrl(params.getLinkUrl())) {
- disabledOptions.add(ContextMenuItem.OPEN_IN_OTHER_WINDOW);
- disabledOptions.add(ContextMenuItem.OPEN_IN_NEW_TAB);
- disabledOptions.add(ContextMenuItem.OPEN_IN_INCOGNITO_TAB);
+ disabledOptions.add(ChromeContextMenuItem.OPEN_IN_OTHER_WINDOW);
+ disabledOptions.add(ChromeContextMenuItem.OPEN_IN_NEW_TAB);
+ disabledOptions.add(ChromeContextMenuItem.OPEN_IN_INCOGNITO_TAB);
}
if (MailTo.isMailTo(params.getLinkUrl())) {
- disabledOptions.add(ContextMenuItem.COPY_LINK_TEXT);
- disabledOptions.add(ContextMenuItem.COPY_LINK_ADDRESS);
+ disabledOptions.add(ChromeContextMenuItem.COPY_LINK_TEXT);
+ disabledOptions.add(ChromeContextMenuItem.COPY_LINK_ADDRESS);
if (!mDelegate.supportsSendEmailMessage()) {
- disabledOptions.add(ContextMenuItem.SEND_MESSAGE);
+ disabledOptions.add(ChromeContextMenuItem.SEND_MESSAGE);
}
if (TextUtils.isEmpty(MailTo.parse(params.getLinkUrl()).getTo())
|| !mDelegate.supportsAddToContacts()) {
- disabledOptions.add(ContextMenuItem.ADD_TO_CONTACTS);
+ disabledOptions.add(ChromeContextMenuItem.ADD_TO_CONTACTS);
}
- disabledOptions.add(ContextMenuItem.CALL);
+ disabledOptions.add(ChromeContextMenuItem.CALL);
} else if (UrlUtilities.isTelScheme(params.getLinkUrl())) {
- disabledOptions.add(ContextMenuItem.COPY_LINK_TEXT);
- disabledOptions.add(ContextMenuItem.COPY_LINK_ADDRESS);
+ disabledOptions.add(ChromeContextMenuItem.COPY_LINK_TEXT);
+ disabledOptions.add(ChromeContextMenuItem.COPY_LINK_ADDRESS);
if (!mDelegate.supportsCall()) {
- disabledOptions.add(ContextMenuItem.CALL);
+ disabledOptions.add(ChromeContextMenuItem.CALL);
}
if (!mDelegate.supportsSendTextMessage()) {
- disabledOptions.add(ContextMenuItem.SEND_MESSAGE);
+ disabledOptions.add(ChromeContextMenuItem.SEND_MESSAGE);
}
if (!mDelegate.supportsAddToContacts()) {
- disabledOptions.add(ContextMenuItem.ADD_TO_CONTACTS);
+ disabledOptions.add(ChromeContextMenuItem.ADD_TO_CONTACTS);
}
}
if (!isDownloadableScheme(params.getLinkUrl())) {
- disabledOptions.add(ContextMenuItem.SAVE_LINK_AS);
+ disabledOptions.add(ChromeContextMenuItem.SAVE_LINK_AS);
}
boolean isSrcDownloadableScheme = isDownloadableScheme(params.getSrcUrl());
if (params.isVideo()) {
boolean saveableAndDownloadable = params.canSaveMedia() && isSrcDownloadableScheme;
if (!saveableAndDownloadable) {
- disabledOptions.add(ContextMenuItem.SAVE_VIDEO);
+ disabledOptions.add(ChromeContextMenuItem.SAVE_VIDEO);
}
} else if (params.isImage() && params.imageWasFetchedLoFi()) {
DataReductionProxyUma.previewsLoFiContextMenuAction(
DataReductionProxyUma.ACTION_LOFI_LOAD_IMAGE_CONTEXT_MENU_SHOWN);
// All image context menu items other than "Load image," "Open original image in
// new tab," and "Copy image URL" should be disabled on Lo-Fi images.
- disabledOptions.add(ContextMenuItem.SAVE_IMAGE);
- disabledOptions.add(ContextMenuItem.OPEN_IMAGE);
- disabledOptions.add(ContextMenuItem.SEARCH_BY_IMAGE);
- disabledOptions.add(ContextMenuItem.SHARE_IMAGE);
+ disabledOptions.add(ChromeContextMenuItem.SAVE_IMAGE);
+ disabledOptions.add(ChromeContextMenuItem.OPEN_IMAGE);
+ disabledOptions.add(ChromeContextMenuItem.SEARCH_BY_IMAGE);
+ disabledOptions.add(ChromeContextMenuItem.SHARE_IMAGE);
} else if (params.isImage() && !params.imageWasFetchedLoFi()) {
- disabledOptions.add(ContextMenuItem.LOAD_ORIGINAL_IMAGE);
+ disabledOptions.add(ChromeContextMenuItem.LOAD_ORIGINAL_IMAGE);
if (!isSrcDownloadableScheme) {
- disabledOptions.add(ContextMenuItem.SAVE_IMAGE);
+ disabledOptions.add(ChromeContextMenuItem.SAVE_IMAGE);
}
// Avoid showing open image option for same image which is already opened.
if (mDelegate.getPageUrl().equals(params.getSrcUrl())) {
- disabledOptions.add(ContextMenuItem.OPEN_IMAGE);
+ disabledOptions.add(ChromeContextMenuItem.OPEN_IMAGE);
}
final TemplateUrlService templateUrlServiceInstance = getTemplateUrlService();
final boolean isSearchByImageAvailable = isSrcDownloadableScheme
@@ -480,7 +488,7 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator {
&& templateUrlServiceInstance.getDefaultSearchEngineTemplateUrl() != null;
if (!isSearchByImageAvailable) {
- disabledOptions.add(ContextMenuItem.SEARCH_BY_IMAGE);
+ disabledOptions.add(ChromeContextMenuItem.SEARCH_BY_IMAGE);
}
}
@@ -488,17 +496,17 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator {
try {
URI uri = new URI(getUrl(params));
if (UrlUtilities.isInternalScheme(uri) || isEmptyUrl(getUrl(params))) {
- disabledOptions.add(ContextMenuItem.OPEN_IN_NEW_CHROME_TAB);
- disabledOptions.add(ContextMenuItem.OPEN_IN_CHROME_INCOGNITO_TAB);
- disabledOptions.add(ContextMenuItem.OPEN_IN_BROWSER_ID);
+ disabledOptions.add(ChromeContextMenuItem.OPEN_IN_NEW_CHROME_TAB);
+ disabledOptions.add(ChromeContextMenuItem.OPEN_IN_CHROME_INCOGNITO_TAB);
+ disabledOptions.add(ChromeContextMenuItem.OPEN_IN_BROWSER_ID);
} else if (ChromePreferenceManager.getInstance().getCachedChromeDefaultBrowser()) {
- disabledOptions.add(ContextMenuItem.OPEN_IN_BROWSER_ID);
+ disabledOptions.add(ChromeContextMenuItem.OPEN_IN_BROWSER_ID);
if (!mDelegate.isIncognitoSupported()) {
- disabledOptions.add(ContextMenuItem.OPEN_IN_CHROME_INCOGNITO_TAB);
+ disabledOptions.add(ChromeContextMenuItem.OPEN_IN_CHROME_INCOGNITO_TAB);
}
} else {
- disabledOptions.add(ContextMenuItem.OPEN_IN_NEW_CHROME_TAB);
- disabledOptions.add(ContextMenuItem.OPEN_IN_CHROME_INCOGNITO_TAB);
+ disabledOptions.add(ChromeContextMenuItem.OPEN_IN_NEW_CHROME_TAB);
+ disabledOptions.add(ChromeContextMenuItem.OPEN_IN_CHROME_INCOGNITO_TAB);
}
} catch (URISyntaxException e) {
return disabledOptions;

Powered by Google App Engine
This is Rietveld 408576698