blob: d0c1aa0f9b279add8c6d699c09609aa0b237d02d [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.contextmenu;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.support.annotation.IdRes;
import android.support.annotation.StringRes;
import org.chromium.base.Callback;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.ChromeFeatureList;
import org.chromium.chrome.browser.DefaultBrowserInfo;
import org.chromium.chrome.browser.search_engines.TemplateUrlService;
/**
* List of all predefined Context Menu Items available in Chrome.
*/
public enum ChromeContextMenuItem implements ContextMenuItem {
// Custom Tab Group
OPEN_IN_NEW_CHROME_TAB(
R.string.contextmenu_open_in_new_chrome_tab, R.id.contextmenu_open_in_new_chrome_tab),
OPEN_IN_CHROME_INCOGNITO_TAB(R.string.contextmenu_open_in_chrome_incognito_tab,
R.id.contextmenu_open_in_chrome_incognito_tab),
OPEN_IN_BROWSER_ID(0, R.id.contextmenu_open_in_browser_id),
// Link Group
OPEN_IN_OTHER_WINDOW(
R.string.contextmenu_open_in_other_window, R.id.contextmenu_open_in_other_window),
OPEN_IN_NEW_TAB(R.string.contextmenu_open_in_new_tab, R.id.contextmenu_open_in_new_tab),
OPEN_IN_INCOGNITO_TAB(
R.string.contextmenu_open_in_incognito_tab, R.id.contextmenu_open_in_incognito_tab),
COPY_LINK_ADDRESS(R.string.contextmenu_copy_link_address, R.id.contextmenu_copy_link_address),
COPY_LINK_TEXT(R.string.contextmenu_copy_link_text, R.id.contextmenu_copy_link_text),
SAVE_LINK_AS(R.string.contextmenu_save_link, R.id.contextmenu_save_link_as),
// Image Group
LOAD_ORIGINAL_IMAGE(
R.string.contextmenu_load_original_image, R.id.contextmenu_load_original_image),
SAVE_IMAGE(R.string.contextmenu_save_image, R.id.contextmenu_save_image),
OPEN_IMAGE(R.string.contextmenu_open_image, R.id.contextmenu_open_image),
OPEN_IMAGE_IN_NEW_TAB(
R.string.contextmenu_open_image_in_new_tab, R.id.contextmenu_open_image_in_new_tab),
SEARCH_BY_IMAGE(R.string.contextmenu_search_web_for_image, R.id.contextmenu_search_by_image),
// Message Group
CALL(R.string.contextmenu_call, R.id.contextmenu_call),
SEND_MESSAGE(R.string.contextmenu_send_message, R.id.contextmenu_send_message),
ADD_TO_CONTACTS(R.string.contextmenu_add_to_contacts, R.id.contextmenu_add_to_contacts),
COPY(R.string.contextmenu_copy, R.id.contextmenu_copy),
// Video Group
SAVE_VIDEO(R.string.contextmenu_save_video, R.id.contextmenu_save_video),
// Other
OPEN_IN_CHROME(R.string.menu_open_in_chrome, R.id.contextmenu_open_in_chrome),
// Browser Action Items
BROWSER_ACTIONS_OPEN_IN_BACKGROUND(
R.string.browser_actions_open_in_background, R.id.browser_actions_open_in_background),
BROWSER_ACTIONS_OPEN_IN_INCOGNITO_TAB(R.string.browser_actions_open_in_incognito_tab,
R.id.browser_actions_open_in_incognito_tab),
BROWSER_ACTION_SAVE_LINK_AS(
R.string.browser_actions_save_link_as, R.id.browser_actions_save_link_as),
BROWSER_ACTIONS_COPY_ADDRESS(
R.string.browser_actions_copy_address, R.id.browser_actions_copy_address);
@StringRes
private final int mStringId;
@IdRes
private final int mMenuId;
/**
* A representation of a Context Menu Item. Each item should have a string and an id associated
* with it.
* @param stringId The string that describes the action of the item.
* @param menuId The id found in ids.xml.
*/
ChromeContextMenuItem(@StringRes int stringId, @IdRes int menuId) {
mStringId = stringId;
mMenuId = menuId;
}
/**
* Transforms the id of the item into a string. It manages special cases that need minor
* changes due to templating.
* @param context Requires to get the string resource related to the item.
* @return Returns a string for the menu item.
*/
@Override
public String getTitle(Context context) {
if (this == ChromeContextMenuItem.SEARCH_BY_IMAGE) {
return context.getString(R.string.contextmenu_search_web_for_image,
TemplateUrlService.getInstance()
.getDefaultSearchEngineTemplateUrl()
.getShortName());
} else if (this == OPEN_IN_BROWSER_ID) {
return DefaultBrowserInfo.getTitleOpenInDefaultBrowser(false);
} else if (mStringId == 0) {
return "";
}
if (ChromeFeatureList.isInitialized()
&& ChromeFeatureList.isEnabled(ChromeFeatureList.INCOGNITO_STRINGS)) {
@StringRes
int alternativeStringId = 0;
if (this == OPEN_IN_CHROME_INCOGNITO_TAB) {
alternativeStringId = R.string.contextmenu_open_in_chrome_private_tab;
} else if (this == OPEN_IN_INCOGNITO_TAB) {
alternativeStringId = R.string.contextmenu_open_in_private_tab;
} else if (this == BROWSER_ACTIONS_OPEN_IN_INCOGNITO_TAB) {
alternativeStringId = R.string.browser_actions_open_in_private_tab;
}
if (alternativeStringId != 0) {
return context.getString(alternativeStringId);
}
}
return context.getString(mStringId);
}
@Override
public void getDrawableAsync(Context context, Callback<Drawable> callback) {
callback.onResult(null);
}
@Override
public int getMenuId() {
return mMenuId;
}
}