Chromium Code Reviews| 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 |