OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 package org.chromium.chrome.browser.contextmenu; | 5 package org.chromium.chrome.browser.contextmenu; |
6 | 6 |
7 import android.content.Context; | 7 import android.content.Context; |
8 import android.net.MailTo; | 8 import android.net.MailTo; |
9 import android.support.annotation.IntDef; | 9 import android.support.annotation.IntDef; |
10 import android.text.TextUtils; | 10 import android.text.TextUtils; |
11 import android.view.ContextMenu; | 11 import android.view.ContextMenu; |
12 import android.view.MenuInflater; | 12 import android.view.MenuInflater; |
13 import android.view.MenuItem; | 13 import android.view.MenuItem; |
14 import android.webkit.MimeTypeMap; | 14 import android.webkit.MimeTypeMap; |
15 | 15 |
16 import org.chromium.base.metrics.RecordHistogram; | 16 import org.chromium.base.metrics.RecordHistogram; |
17 import org.chromium.chrome.R; | 17 import org.chromium.chrome.R; |
18 import org.chromium.chrome.browser.UrlConstants; | 18 import org.chromium.chrome.browser.UrlConstants; |
19 import org.chromium.chrome.browser.firstrun.FirstRunStatus; | 19 import org.chromium.chrome.browser.firstrun.FirstRunStatus; |
20 import org.chromium.chrome.browser.net.spdyproxy.DataReductionProxySettings; | 20 import org.chromium.chrome.browser.net.spdyproxy.DataReductionProxySettings; |
| 21 import org.chromium.chrome.browser.preferences.ChromePreferenceManager; |
21 import org.chromium.chrome.browser.preferences.datareduction.DataReductionProxyU
ma; | 22 import org.chromium.chrome.browser.preferences.datareduction.DataReductionProxyU
ma; |
22 import org.chromium.chrome.browser.search_engines.TemplateUrlService; | 23 import org.chromium.chrome.browser.search_engines.TemplateUrlService; |
23 import org.chromium.chrome.browser.util.UrlUtilities; | 24 import org.chromium.chrome.browser.util.UrlUtilities; |
24 | 25 |
25 import java.lang.annotation.Retention; | 26 import java.lang.annotation.Retention; |
26 import java.lang.annotation.RetentionPolicy; | 27 import java.lang.annotation.RetentionPolicy; |
27 import java.util.Arrays; | 28 import java.util.Arrays; |
28 | 29 |
29 /** | 30 /** |
30 * A {@link ContextMenuPopulator} used for showing the default Chrome context me
nu. | 31 * A {@link ContextMenuPopulator} used for showing the default Chrome context me
nu. |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
69 R.id.contextmenu_open_in_new_tab, | 70 R.id.contextmenu_open_in_new_tab, |
70 R.id.contextmenu_open_in_other_window, | 71 R.id.contextmenu_open_in_other_window, |
71 R.id.contextmenu_open_in_incognito_tab, | 72 R.id.contextmenu_open_in_incognito_tab, |
72 R.id.contextmenu_save_link_as, | 73 R.id.contextmenu_save_link_as, |
73 R.id.contextmenu_open_image_in_new_tab, | 74 R.id.contextmenu_open_image_in_new_tab, |
74 R.id.contextmenu_search_by_image, | 75 R.id.contextmenu_search_by_image, |
75 }; | 76 }; |
76 | 77 |
77 // Additional items for custom tabs mode. | 78 // Additional items for custom tabs mode. |
78 private static final int[] CUSTOM_TAB_MODE_WHITELIST = { | 79 private static final int[] CUSTOM_TAB_MODE_WHITELIST = { |
79 R.id.contextmenu_open_image, | 80 R.id.contextmenu_open_image, R.id.contextmenu_search_by_image, |
80 R.id.contextmenu_search_by_image | 81 R.id.contextmenu_open_in_new_chrome_tab, R.id.contextmenu_open_in_ch
rome_incognito_tab, |
| 82 R.id.contextmenu_open_in_browser_id, |
81 }; | 83 }; |
82 | 84 |
83 // Additional items for fullscreen tabs mode. | 85 // Additional items for fullscreen tabs mode. |
84 private static final int[] FULLSCREEN_TAB_MODE_WHITELIST = { | 86 private static final int[] FULLSCREEN_TAB_MODE_WHITELIST = { |
85 R.id.menu_id_open_in_chrome | 87 R.id.menu_id_open_in_chrome |
86 }; | 88 }; |
87 | 89 |
88 private final ContextMenuItemDelegate mDelegate; | 90 private final ContextMenuItemDelegate mDelegate; |
89 private MenuInflater mMenuInflater; | 91 private MenuInflater mMenuInflater; |
90 private final int mMode; | 92 private final int mMode; |
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
312 menu.findItem(R.id.contextmenu_open_in_new_tab).setVisible(false); | 314 menu.findItem(R.id.contextmenu_open_in_new_tab).setVisible(false); |
313 menu.findItem(R.id.contextmenu_open_in_incognito_tab).setVisible(fal
se); | 315 menu.findItem(R.id.contextmenu_open_in_incognito_tab).setVisible(fal
se); |
314 menu.findItem(R.id.contextmenu_search_by_image).setVisible(false); | 316 menu.findItem(R.id.contextmenu_search_by_image).setVisible(false); |
315 menu.findItem(R.id.menu_id_open_in_chrome).setVisible(false); | 317 menu.findItem(R.id.menu_id_open_in_chrome).setVisible(false); |
316 } | 318 } |
317 | 319 |
318 if (mMode == FULLSCREEN_TAB_MODE) { | 320 if (mMode == FULLSCREEN_TAB_MODE) { |
319 removeUnsupportedItems(menu, FULLSCREEN_TAB_MODE_WHITELIST); | 321 removeUnsupportedItems(menu, FULLSCREEN_TAB_MODE_WHITELIST); |
320 } else if (mMode == CUSTOM_TAB_MODE) { | 322 } else if (mMode == CUSTOM_TAB_MODE) { |
321 removeUnsupportedItems(menu, CUSTOM_TAB_MODE_WHITELIST); | 323 removeUnsupportedItems(menu, CUSTOM_TAB_MODE_WHITELIST); |
| 324 MenuItem defaultOpenMenuItem = menu.findItem(R.id.contextmenu_open_i
n_browser_id); |
| 325 if (ChromePreferenceManager.getInstance().getCachedChromeDefaultBrow
ser()) { |
| 326 defaultOpenMenuItem.setVisible(false); |
| 327 } else { |
| 328 menu.findItem(R.id.contextmenu_open_in_new_chrome_tab).setVisibl
e(false); |
| 329 menu.findItem(R.id.contextmenu_open_in_chrome_incognito_tab).set
Visible(false); |
| 330 defaultOpenMenuItem.setTitle(mDelegate.getTitleForOpenTabInExter
nalApp()); |
| 331 } |
322 } else { | 332 } else { |
323 removeUnsupportedItems(menu, NORMAL_MODE_WHITELIST); | 333 removeUnsupportedItems(menu, NORMAL_MODE_WHITELIST); |
324 } | 334 } |
325 } | 335 } |
326 | 336 |
327 private void removeUnsupportedItems(ContextMenu menu, int[] whitelist) { | 337 private void removeUnsupportedItems(ContextMenu menu, int[] whitelist) { |
328 Arrays.sort(BASE_WHITELIST); | 338 Arrays.sort(BASE_WHITELIST); |
329 Arrays.sort(whitelist); | 339 Arrays.sort(whitelist); |
330 for (int i = 0; i < menu.size(); i++) { | 340 for (int i = 0; i < menu.size(); i++) { |
331 MenuItem item = menu.getItem(i); | 341 MenuItem item = menu.getItem(i); |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
420 helper.startContextMenuDownload(true, false); | 430 helper.startContextMenuDownload(true, false); |
421 } | 431 } |
422 } else if (itemId == R.id.contextmenu_search_by_image) { | 432 } else if (itemId == R.id.contextmenu_search_by_image) { |
423 ContextMenuUma.record(params, ContextMenuUma.ACTION_SEARCH_BY_IMAGE)
; | 433 ContextMenuUma.record(params, ContextMenuUma.ACTION_SEARCH_BY_IMAGE)
; |
424 helper.searchForImage(); | 434 helper.searchForImage(); |
425 } else if (itemId == R.id.contextmenu_share_image) { | 435 } else if (itemId == R.id.contextmenu_share_image) { |
426 ContextMenuUma.record(params, ContextMenuUma.ACTION_SHARE_IMAGE); | 436 ContextMenuUma.record(params, ContextMenuUma.ACTION_SHARE_IMAGE); |
427 helper.shareImage(); | 437 helper.shareImage(); |
428 } else if (itemId == R.id.menu_id_open_in_chrome) { | 438 } else if (itemId == R.id.menu_id_open_in_chrome) { |
429 mDelegate.onOpenInChrome(params.getLinkUrl(), params.getPageUrl()); | 439 mDelegate.onOpenInChrome(params.getLinkUrl(), params.getPageUrl()); |
| 440 } else if (itemId == R.id.contextmenu_open_in_new_chrome_tab) { |
| 441 mDelegate.onOpenInNewChromeTabFromCCT(params.getLinkUrl(), false); |
| 442 } else if (itemId == R.id.contextmenu_open_in_chrome_incognito_tab) { |
| 443 mDelegate.onOpenInNewChromeTabFromCCT(params.getLinkUrl(), true); |
| 444 } else if (itemId == R.id.contextmenu_open_in_browser_id) { |
| 445 mDelegate.onOpenInDefaultBrowser(params.getLinkUrl()); |
430 } else { | 446 } else { |
431 assert false; | 447 assert false; |
432 } | 448 } |
433 | 449 |
434 return true; | 450 return true; |
435 } | 451 } |
436 | 452 |
437 private void setHeaderText(Context context, ContextMenu menu, String text) { | 453 private void setHeaderText(Context context, ContextMenu menu, String text) { |
438 ContextMenuTitleView title = new ContextMenuTitleView(context, text); | 454 ContextMenuTitleView title = new ContextMenuTitleView(context, text); |
439 menu.setHeaderView(title); | 455 menu.setHeaderView(title); |
440 } | 456 } |
441 } | 457 } |
OLD | NEW |