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 496e81def3560abef6d80be3a63d260d90c79725..6ef7765ec6204b72fc3f28b361a0a1d1cc99f48d 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 |
@@ -20,6 +20,7 @@ import org.chromium.chrome.browser.search_engines.TemplateUrlService; |
public class ChromeContextMenuPopulator implements ContextMenuPopulator { |
private final ChromeContextMenuItemDelegate mDelegate; |
private MenuInflater mMenuInflater; |
+ private static final String TEL_SCHEME = "tel:"; |
/** |
* Builds a {@link ChromeContextMenuPopulator}. |
@@ -40,8 +41,10 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { |
public void buildContextMenu(ContextMenu menu, Context context, ContextMenuParams params) { |
if (params.isImage() && !TextUtils.isEmpty(params.getSrcUrl())) |
menu.setHeaderTitle(params.getSrcUrl()); |
- else if (!TextUtils.isEmpty(params.getLinkUrl()) ) |
+ else if (!TextUtils.isEmpty(params.getLinkUrl())) |
menu.setHeaderTitle(params.getLinkUrl()); |
+ else if (isTelScheme(params)) |
+ menu.setHeaderTitle(params.getLinkText()); |
if (mMenuInflater == null) mMenuInflater = new MenuInflater(context); |
@@ -50,6 +53,7 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { |
menu.setGroupVisible(R.id.contextmenu_group_anchor, params.isAnchor()); |
menu.setGroupVisible(R.id.contextmenu_group_image, params.isImage()); |
menu.setGroupVisible(R.id.contextmenu_group_video, params.isVideo()); |
+ menu.setGroupVisible(R.id.contextmenu_group_tel, isTelScheme(params)); |
if (mDelegate.isIncognito() || !mDelegate.isIncognitoSupported()) { |
menu.findItem(R.id.contextmenu_open_in_incognito_tab).setVisible(false); |
@@ -59,6 +63,10 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { |
menu.findItem(R.id.contextmenu_copy_link_text).setVisible(false); |
} |
+ if (isTelScheme(params) && params.isAnchor()) { |
+ menu.setGroupVisible(R.id.contextmenu_group_anchor, false); |
+ } |
+ |
menu.findItem(R.id.contextmenu_save_link_as).setEnabled( |
UrlUtilities.isDownloadableScheme(params.getLinkUrl())); |
@@ -108,7 +116,8 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { |
mDelegate.onOpenImageInNewTab(params.getSrcUrl(), params.getReferrer()); |
} else if (itemId == R.id.contextmenu_copy_link_address_text) { |
mDelegate.onSaveToClipboard(params.getUnfilteredLinkUrl(), true); |
- } else if (itemId == R.id.contextmenu_copy_link_text) { |
+ } else if (itemId == R.id.contextmenu_copy_link_text || |
+ itemId == R.id.contextmenu_copy_phone_number) { |
mDelegate.onSaveToClipboard(params.getLinkText(), false); |
} else if (itemId == R.id.contextmenu_save_image || |
itemId == R.id.contextmenu_save_video) { |
@@ -119,10 +128,24 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { |
mDelegate.onSearchByImageInNewTab(); |
} else if (itemId == R.id.contextmenu_copy_image) { |
mDelegate.onSaveImageToClipboard(params.getSrcUrl()); |
+ } else if (itemId == R.id.contextmenu_call) { |
+ mDelegate.onCall(params.getLinkText()); |
+ } else if (itemId == R.id.contextmenu_send_text_message) { |
+ mDelegate.onSendTextMessage(params.getLinkText()); |
+ } else if (itemId == R.id.contextmenu_add_to_contacts) { |
+ mDelegate.onAddToContacts(params.getLinkText()); |
} else { |
assert false; |
} |
return true; |
} |
+ |
+ /** |
+ * Determines if a ContextMenuParams has tel: scheme |
+ * @param params ContextMenuParams |
+ */ |
+ private boolean isTelScheme(ContextMenuParams params) { |
+ return params.getLinkUrl().startsWith(TEL_SCHEME); |
+ } |
} |