Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(139)

Side by Side Diff: chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java

Issue 2663373003: [Android] Add options in the context menu of CCT to open in a new Chrome tab or incoginto tab (Closed)
Patch Set: Fix failure for test cases Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698