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.content.Intent; | |
8 import android.net.MailTo; | 9 import android.net.MailTo; |
10 import android.net.Uri; | |
9 import android.support.annotation.IntDef; | 11 import android.support.annotation.IntDef; |
10 import android.text.TextUtils; | 12 import android.text.TextUtils; |
11 import android.view.ContextMenu; | 13 import android.view.ContextMenu; |
12 import android.view.MenuInflater; | 14 import android.view.MenuInflater; |
13 import android.view.MenuItem; | 15 import android.view.MenuItem; |
14 import android.webkit.MimeTypeMap; | 16 import android.webkit.MimeTypeMap; |
15 | 17 |
16 import org.chromium.base.metrics.RecordHistogram; | 18 import org.chromium.base.metrics.RecordHistogram; |
17 import org.chromium.chrome.R; | 19 import org.chromium.chrome.R; |
18 import org.chromium.chrome.browser.UrlConstants; | 20 import org.chromium.chrome.browser.UrlConstants; |
21 import org.chromium.chrome.browser.externalnav.ExternalNavigationDelegateImpl; | |
19 import org.chromium.chrome.browser.firstrun.FirstRunStatus; | 22 import org.chromium.chrome.browser.firstrun.FirstRunStatus; |
20 import org.chromium.chrome.browser.net.spdyproxy.DataReductionProxySettings; | 23 import org.chromium.chrome.browser.net.spdyproxy.DataReductionProxySettings; |
21 import org.chromium.chrome.browser.preferences.datareduction.DataReductionProxyU ma; | 24 import org.chromium.chrome.browser.preferences.datareduction.DataReductionProxyU ma; |
22 import org.chromium.chrome.browser.search_engines.TemplateUrlService; | 25 import org.chromium.chrome.browser.search_engines.TemplateUrlService; |
23 import org.chromium.chrome.browser.util.UrlUtilities; | 26 import org.chromium.chrome.browser.util.UrlUtilities; |
24 | 27 |
25 import java.lang.annotation.Retention; | 28 import java.lang.annotation.Retention; |
26 import java.lang.annotation.RetentionPolicy; | 29 import java.lang.annotation.RetentionPolicy; |
27 import java.util.Arrays; | 30 import java.util.Arrays; |
28 | 31 |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
70 R.id.contextmenu_open_in_incognito_tab, | 73 R.id.contextmenu_open_in_incognito_tab, |
71 R.id.contextmenu_save_link_as, | 74 R.id.contextmenu_save_link_as, |
72 R.id.contextmenu_load_original_image, | 75 R.id.contextmenu_load_original_image, |
73 R.id.contextmenu_open_image_in_new_tab, | 76 R.id.contextmenu_open_image_in_new_tab, |
74 R.id.contextmenu_search_by_image, | 77 R.id.contextmenu_search_by_image, |
75 }; | 78 }; |
76 | 79 |
77 // Additional items for custom tabs mode. | 80 // Additional items for custom tabs mode. |
78 private static final int[] CUSTOM_TAB_MODE_WHITELIST = { | 81 private static final int[] CUSTOM_TAB_MODE_WHITELIST = { |
79 R.id.contextmenu_open_image, | 82 R.id.contextmenu_open_image, |
80 R.id.contextmenu_search_by_image | 83 R.id.contextmenu_search_by_image, |
84 R.id.contextmenu_open_in_new_chrome_tab, | |
85 R.id.contextmenu_open_in_chrome_incognito_tab, | |
86 R.id.contextmenu_open_in_browser_id, | |
81 }; | 87 }; |
82 | 88 |
83 // Additional items for fullscreen tabs mode. | 89 // Additional items for fullscreen tabs mode. |
84 private static final int[] FULLSCREEN_TAB_MODE_WHITELIST = { | 90 private static final int[] FULLSCREEN_TAB_MODE_WHITELIST = { |
85 R.id.menu_id_open_in_chrome | 91 R.id.menu_id_open_in_chrome |
86 }; | 92 }; |
87 | 93 |
88 private final ContextMenuItemDelegate mDelegate; | 94 private final ContextMenuItemDelegate mDelegate; |
89 private MenuInflater mMenuInflater; | 95 private MenuInflater mMenuInflater; |
90 private final int mMode; | 96 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); | 318 menu.findItem(R.id.contextmenu_open_in_new_tab).setVisible(false); |
313 menu.findItem(R.id.contextmenu_open_in_incognito_tab).setVisible(fal se); | 319 menu.findItem(R.id.contextmenu_open_in_incognito_tab).setVisible(fal se); |
314 menu.findItem(R.id.contextmenu_search_by_image).setVisible(false); | 320 menu.findItem(R.id.contextmenu_search_by_image).setVisible(false); |
315 menu.findItem(R.id.menu_id_open_in_chrome).setVisible(false); | 321 menu.findItem(R.id.menu_id_open_in_chrome).setVisible(false); |
316 } | 322 } |
317 | 323 |
318 if (mMode == FULLSCREEN_TAB_MODE) { | 324 if (mMode == FULLSCREEN_TAB_MODE) { |
319 removeUnsupportedItems(menu, FULLSCREEN_TAB_MODE_WHITELIST); | 325 removeUnsupportedItems(menu, FULLSCREEN_TAB_MODE_WHITELIST); |
320 } else if (mMode == CUSTOM_TAB_MODE) { | 326 } else if (mMode == CUSTOM_TAB_MODE) { |
321 removeUnsupportedItems(menu, CUSTOM_TAB_MODE_WHITELIST); | 327 removeUnsupportedItems(menu, CUSTOM_TAB_MODE_WHITELIST); |
328 MenuItem defaultOpenMenuItem = menu.findItem(R.id.contextmenu_open_i n_browser_id); | |
329 if (isChromeDefault()) { | |
Ted C
2017/02/11 00:08:46
Let's use ChromePreferenceManager.getInstance(cont
ltian
2017/02/14 01:43:44
Done.
| |
330 defaultOpenMenuItem.setVisible(false); | |
331 } else { | |
332 menu.findItem(R.id.contextmenu_open_in_new_chrome_tab).setVisibl e(false); | |
333 menu.findItem(R.id.contextmenu_open_in_chrome_incognito_tab).set Visible(false); | |
334 defaultOpenMenuItem.setTitle(mDelegate.getTitleForOpenTabInExter nalApp()); | |
335 } | |
322 } else { | 336 } else { |
323 removeUnsupportedItems(menu, NORMAL_MODE_WHITELIST); | 337 removeUnsupportedItems(menu, NORMAL_MODE_WHITELIST); |
324 } | 338 } |
325 } | 339 } |
326 | 340 |
327 private void removeUnsupportedItems(ContextMenu menu, int[] whitelist) { | 341 private void removeUnsupportedItems(ContextMenu menu, int[] whitelist) { |
328 Arrays.sort(BASE_WHITELIST); | 342 Arrays.sort(BASE_WHITELIST); |
329 Arrays.sort(whitelist); | 343 Arrays.sort(whitelist); |
330 for (int i = 0; i < menu.size(); i++) { | 344 for (int i = 0; i < menu.size(); i++) { |
331 MenuItem item = menu.getItem(i); | 345 MenuItem item = menu.getItem(i); |
332 if (Arrays.binarySearch(whitelist, item.getItemId()) < 0 | 346 if (Arrays.binarySearch(whitelist, item.getItemId()) < 0 |
333 && Arrays.binarySearch(BASE_WHITELIST, item.getItemId()) < 0 ) { | 347 && Arrays.binarySearch(BASE_WHITELIST, item.getItemId()) < 0 ) { |
334 menu.removeItem(item.getItemId()); | 348 menu.removeItem(item.getItemId()); |
335 i--; | 349 i--; |
336 } | 350 } |
337 } | 351 } |
338 } | 352 } |
339 | 353 |
354 private boolean isChromeDefault() { | |
355 String url = "https://www.google.com"; | |
356 Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); | |
357 return ExternalNavigationDelegateImpl.willChromeHandleIntent(intent, fal se); | |
358 } | |
359 | |
340 @Override | 360 @Override |
341 public boolean onItemSelected(ContextMenuHelper helper, ContextMenuParams pa rams, int itemId) { | 361 public boolean onItemSelected(ContextMenuHelper helper, ContextMenuParams pa rams, int itemId) { |
342 if (itemId == R.id.contextmenu_open_in_other_window) { | 362 if (itemId == R.id.contextmenu_open_in_other_window) { |
343 ContextMenuUma.record(params, ContextMenuUma.ACTION_OPEN_IN_OTHER_WI NDOW); | 363 ContextMenuUma.record(params, ContextMenuUma.ACTION_OPEN_IN_OTHER_WI NDOW); |
344 mDelegate.onOpenInOtherWindow(params.getLinkUrl(), params.getReferre r()); | 364 mDelegate.onOpenInOtherWindow(params.getLinkUrl(), params.getReferre r()); |
345 } else if (itemId == R.id.contextmenu_open_in_new_tab) { | 365 } else if (itemId == R.id.contextmenu_open_in_new_tab) { |
346 ContextMenuUma.record(params, ContextMenuUma.ACTION_OPEN_IN_NEW_TAB) ; | 366 ContextMenuUma.record(params, ContextMenuUma.ACTION_OPEN_IN_NEW_TAB) ; |
347 mDelegate.onOpenInNewTab(params.getLinkUrl(), params.getReferrer()); | 367 mDelegate.onOpenInNewTab(params.getLinkUrl(), params.getReferrer()); |
348 } else if (itemId == R.id.contextmenu_open_in_incognito_tab) { | 368 } else if (itemId == R.id.contextmenu_open_in_incognito_tab) { |
349 ContextMenuUma.record(params, ContextMenuUma.ACTION_OPEN_IN_INCOGNIT O_TAB); | 369 ContextMenuUma.record(params, ContextMenuUma.ACTION_OPEN_IN_INCOGNIT O_TAB); |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
420 helper.startContextMenuDownload(true, false); | 440 helper.startContextMenuDownload(true, false); |
421 } | 441 } |
422 } else if (itemId == R.id.contextmenu_search_by_image) { | 442 } else if (itemId == R.id.contextmenu_search_by_image) { |
423 ContextMenuUma.record(params, ContextMenuUma.ACTION_SEARCH_BY_IMAGE) ; | 443 ContextMenuUma.record(params, ContextMenuUma.ACTION_SEARCH_BY_IMAGE) ; |
424 helper.searchForImage(); | 444 helper.searchForImage(); |
425 } else if (itemId == R.id.contextmenu_share_image) { | 445 } else if (itemId == R.id.contextmenu_share_image) { |
426 ContextMenuUma.record(params, ContextMenuUma.ACTION_SHARE_IMAGE); | 446 ContextMenuUma.record(params, ContextMenuUma.ACTION_SHARE_IMAGE); |
427 helper.shareImage(); | 447 helper.shareImage(); |
428 } else if (itemId == R.id.menu_id_open_in_chrome) { | 448 } else if (itemId == R.id.menu_id_open_in_chrome) { |
429 mDelegate.onOpenInChrome(params.getLinkUrl(), params.getPageUrl()); | 449 mDelegate.onOpenInChrome(params.getLinkUrl(), params.getPageUrl()); |
450 } else if (itemId == R.id.contextmenu_open_in_new_chrome_tab) { | |
451 mDelegate.onOpenInNewChromeTabFromCCT(params.getLinkUrl(), false); | |
452 } else if (itemId == R.id.contextmenu_open_in_chrome_incognito_tab) { | |
453 mDelegate.onOpenInNewChromeTabFromCCT(params.getLinkUrl(), true); | |
454 } else if (itemId == R.id.contextmenu_open_in_browser_id) { | |
455 mDelegate.onOpenInDefaultBrowser(params.getLinkUrl()); | |
430 } else { | 456 } else { |
431 assert false; | 457 assert false; |
432 } | 458 } |
433 | 459 |
434 return true; | 460 return true; |
435 } | 461 } |
436 | 462 |
437 private void setHeaderText(Context context, ContextMenu menu, String text) { | 463 private void setHeaderText(Context context, ContextMenu menu, String text) { |
438 ContextMenuTitleView title = new ContextMenuTitleView(context, text); | 464 ContextMenuTitleView title = new ContextMenuTitleView(context, text); |
439 menu.setHeaderView(title); | 465 menu.setHeaderView(title); |
440 } | 466 } |
441 } | 467 } |
OLD | NEW |