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

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

Issue 2710833002: Refactor ChromeContextMenuPopulator population (Closed)
Patch Set: Fixed based off Ted's comments Created 3 years, 9 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
« no previous file with comments | « no previous file | chrome/android/javatests/src/org/chromium/chrome/browser/contextmenu/ContextMenuTest.java » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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.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.CollectionUtil;
16 import org.chromium.base.metrics.RecordHistogram; 17 import org.chromium.base.metrics.RecordHistogram;
17 import org.chromium.chrome.R; 18 import org.chromium.chrome.R;
18 import org.chromium.chrome.browser.UrlConstants; 19 import org.chromium.chrome.browser.UrlConstants;
19 import org.chromium.chrome.browser.firstrun.FirstRunStatus; 20 import org.chromium.chrome.browser.firstrun.FirstRunStatus;
20 import org.chromium.chrome.browser.preferences.ChromePreferenceManager; 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.HashSet;
29 import java.util.Set;
28 30
29 /** 31 /**
30 * A {@link ContextMenuPopulator} used for showing the default Chrome context me nu. 32 * A {@link ContextMenuPopulator} used for showing the default Chrome context me nu.
31 */ 33 */
32 public class ChromeContextMenuPopulator implements ContextMenuPopulator { 34 public class ChromeContextMenuPopulator implements ContextMenuPopulator {
33 35
34 private static final String TAG = "CCMenuPopulator"; 36 private static final String TAG = "CCMenuPopulator";
35 37
36 /** 38 /**
37 * Defines the context menu modes 39 * Defines the context menu modes
38 */ 40 */
39 @Retention(RetentionPolicy.SOURCE) 41 @Retention(RetentionPolicy.SOURCE)
40 @IntDef({ 42 @IntDef({
41 NORMAL_MODE, /* Default mode */ 43 NORMAL_MODE, /* Default mode */
42 CUSTOM_TAB_MODE, /* Custom tab mode */ 44 CUSTOM_TAB_MODE, /* Custom tab mode */
43 FULLSCREEN_TAB_MODE /* Full screen mode */ 45 FULLSCREEN_TAB_MODE /* Full screen mode */
44 }) 46 })
45 public @interface ContextMenuMode {} 47 public @interface ContextMenuMode {}
46 48
47 public static final int NORMAL_MODE = 0; 49 public static final int NORMAL_MODE = 0;
48 public static final int CUSTOM_TAB_MODE = 1; 50 public static final int CUSTOM_TAB_MODE = 1;
49 public static final int FULLSCREEN_TAB_MODE = 2; 51 public static final int FULLSCREEN_TAB_MODE = 2;
50 52
51 // Items that are included in all context menus. 53 // Items that are included in all context menus.
52 private static final int[] BASE_WHITELIST = { 54 private static final Set<Integer> BASE_WHITELIST = CollectionUtil.newHashSet (
53 R.id.contextmenu_copy_link_address, 55 R.id.contextmenu_copy_link_address, R.id.contextmenu_call,
54 R.id.contextmenu_call, 56 R.id.contextmenu_send_message, R.id.contextmenu_add_to_contacts, R.i d.contextmenu_copy,
55 R.id.contextmenu_send_message, 57 R.id.contextmenu_copy_link_text, R.id.contextmenu_load_original_imag e,
56 R.id.contextmenu_add_to_contacts, 58 R.id.contextmenu_save_link_as, R.id.contextmenu_save_image,
57 R.id.contextmenu_copy, 59 R.id.contextmenu_share_image, R.id.contextmenu_save_video);
58 R.id.contextmenu_copy_link_text,
59 R.id.contextmenu_load_original_image,
60 R.id.contextmenu_save_link_as,
61 R.id.contextmenu_save_image,
62 R.id.contextmenu_share_image,
63 R.id.contextmenu_save_video,
64 };
65 60
66 // Items that are included for normal Chrome browser mode. 61 // Items that are included for normal Chrome browser mode.
67 private static final int[] NORMAL_MODE_WHITELIST = { 62 private static final Set<Integer> NORMAL_MODE_WHITELIST = CollectionUtil.new HashSet(
68 R.id.contextmenu_open_in_new_tab, 63 R.id.contextmenu_open_in_new_tab, R.id.contextmenu_open_in_other_win dow,
69 R.id.contextmenu_open_in_other_window, 64 R.id.contextmenu_open_in_incognito_tab, R.id.contextmenu_save_link_a s,
70 R.id.contextmenu_open_in_incognito_tab, 65 R.id.contextmenu_open_image_in_new_tab, R.id.contextmenu_search_by_i mage);
71 R.id.contextmenu_save_link_as,
72 R.id.contextmenu_open_image_in_new_tab,
73 R.id.contextmenu_search_by_image,
74 };
75 66
76 // Additional items for custom tabs mode. 67 // Additional items for custom tabs mode.
77 private static final int[] CUSTOM_TAB_MODE_WHITELIST = { 68 private static final Set<Integer> CUSTOM_TAB_MODE_WHITELIST = CollectionUtil .newHashSet(
78 R.id.contextmenu_open_image, R.id.contextmenu_search_by_image, 69 R.id.contextmenu_open_image, R.id.contextmenu_search_by_image,
79 R.id.contextmenu_open_in_new_chrome_tab, R.id.contextmenu_open_in_ch rome_incognito_tab, 70 R.id.contextmenu_open_in_new_chrome_tab, R.id.contextmenu_open_in_ch rome_incognito_tab,
80 R.id.contextmenu_open_in_browser_id, 71 R.id.contextmenu_open_in_browser_id);
81 };
82 72
83 // Additional items for fullscreen tabs mode. 73 // Additional items for fullscreen tabs mode.
84 private static final int[] FULLSCREEN_TAB_MODE_WHITELIST = { 74 private static final Set<Integer> FULLSCREEN_TAB_MODE_WHITELIST =
85 R.id.menu_id_open_in_chrome 75 CollectionUtil.newHashSet(R.id.menu_id_open_in_chrome);
86 };
87 76
88 private final ContextMenuItemDelegate mDelegate; 77 private final ContextMenuItemDelegate mDelegate;
89 private MenuInflater mMenuInflater; 78 private MenuInflater mMenuInflater;
90 private final int mMode; 79 private final int mMode;
91 80
92 static class ContextMenuUma { 81 static class ContextMenuUma {
93 // Note: these values must match the ContextMenuOption enum in histogram s.xml. 82 // Note: these values must match the ContextMenuOption enum in histogram s.xml.
94 static final int ACTION_OPEN_IN_NEW_TAB = 0; 83 static final int ACTION_OPEN_IN_NEW_TAB = 0;
95 static final int ACTION_OPEN_IN_INCOGNITO_TAB = 1; 84 static final int ACTION_OPEN_IN_INCOGNITO_TAB = 1;
96 static final int ACTION_COPY_LINK_ADDRESS = 2; 85 static final int ACTION_COPY_LINK_ADDRESS = 2;
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
198 setHeaderText(context, menu, params.getTitleText()); 187 setHeaderText(context, menu, params.getTitleText());
199 } 188 }
200 189
201 if (mMenuInflater == null) mMenuInflater = new MenuInflater(context); 190 if (mMenuInflater == null) mMenuInflater = new MenuInflater(context);
202 191
203 mMenuInflater.inflate(R.menu.chrome_context_menu, menu); 192 mMenuInflater.inflate(R.menu.chrome_context_menu, menu);
204 193
205 menu.setGroupVisible(R.id.contextmenu_group_anchor, params.isAnchor()); 194 menu.setGroupVisible(R.id.contextmenu_group_anchor, params.isAnchor());
206 menu.setGroupVisible(R.id.contextmenu_group_image, params.isImage()); 195 menu.setGroupVisible(R.id.contextmenu_group_image, params.isImage());
207 menu.setGroupVisible(R.id.contextmenu_group_video, params.isVideo()); 196 menu.setGroupVisible(R.id.contextmenu_group_video, params.isVideo());
197 menu.setGroupVisible(R.id.contextmenu_group_message,
198 MailTo.isMailTo(params.getLinkUrl())
199 || UrlUtilities.isTelScheme(params.getLinkUrl()));
208 200
201 Set<Integer> supportedOptions = new HashSet<>();
202 supportedOptions.addAll(BASE_WHITELIST);
203 if (mMode == FULLSCREEN_TAB_MODE) {
204 supportedOptions.addAll(FULLSCREEN_TAB_MODE_WHITELIST);
205 } else if (mMode == CUSTOM_TAB_MODE) {
206 supportedOptions.addAll(CUSTOM_TAB_MODE_WHITELIST);
207 if (!ChromePreferenceManager.getInstance().getCachedChromeDefaultBro wser()) {
208 menu.findItem(R.id.contextmenu_open_in_browser_id)
209 .setTitle(mDelegate.getTitleForOpenTabInExternalApp());
210 }
211 } else {
212 supportedOptions.addAll(NORMAL_MODE_WHITELIST);
213 }
214
215 Set<Integer> disabledOptions = getDisabledOptions(params);
216 // Iterate through the entire menu list, if if doesn't exist in the map, don't show it.
217 for (int i = 0; i < menu.size(); i++) {
218 MenuItem item = menu.getItem(i);
219 if (!item.isVisible()) continue;
220 item.setVisible(supportedOptions.contains(item.getItemId())
221 && !disabledOptions.contains(item.getItemId()));
222 }
223
224 // Special case for searching by image element.
225 if (supportedOptions.contains(R.id.contextmenu_search_by_image)) {
226 menu.findItem(R.id.contextmenu_search_by_image)
227 .setTitle(context.getString(R.string.contextmenu_search_web_ for_image,
228 TemplateUrlService.getInstance()
229 .getDefaultSearchEngineTemplateUrl()
230 .getShortName()));
231 }
232 }
233
234 /**
235 * Given a set of params. It creates a list of items that should not be acce ssible in specific
236 * instances. Since it doesn't have access to the menu groups, they need to be filtered outside
237 * of this method.
238 * @param params The parameters used to create a list of items that should n ot be allowed.
239 */
240 private Set<Integer> getDisabledOptions(ContextMenuParams params) {
241 Set<Integer> disabledOptions = new HashSet<>();
209 if (params.isAnchor() && !mDelegate.isOpenInOtherWindowSupported()) { 242 if (params.isAnchor() && !mDelegate.isOpenInOtherWindowSupported()) {
210 menu.findItem(R.id.contextmenu_open_in_other_window).setVisible(fals e); 243 disabledOptions.add(R.id.contextmenu_open_in_other_window);
211 } 244 }
212 245
213 if (mDelegate.isIncognito() || !mDelegate.isIncognitoSupported()) { 246 if (mDelegate.isIncognito() || !mDelegate.isIncognitoSupported()) {
214 menu.findItem(R.id.contextmenu_open_in_incognito_tab).setVisible(fal se); 247 disabledOptions.add(R.id.contextmenu_open_in_incognito_tab);
215 } 248 }
216 249
217 if (params.getLinkText().trim().isEmpty() || params.isImage()) { 250 if (params.getLinkText().trim().isEmpty() || params.isImage()) {
218 menu.findItem(R.id.contextmenu_copy_link_text).setVisible(false); 251 disabledOptions.add(R.id.contextmenu_copy_link_text);
219 } 252 }
220 253
221 if (params.isAnchor() && !UrlUtilities.isAcceptedScheme(params.getLinkUr l())) { 254 if (params.isAnchor() && !UrlUtilities.isAcceptedScheme(params.getLinkUr l())) {
222 menu.findItem(R.id.contextmenu_open_in_other_window).setVisible(fals e); 255 disabledOptions.add(R.id.contextmenu_open_in_other_window);
223 menu.findItem(R.id.contextmenu_open_in_new_tab).setVisible(false); 256 disabledOptions.add(R.id.contextmenu_open_in_new_tab);
224 menu.findItem(R.id.contextmenu_open_in_incognito_tab).setVisible(fal se); 257 disabledOptions.add(R.id.contextmenu_open_in_incognito_tab);
225 } 258 }
226 259
227 if (MailTo.isMailTo(params.getLinkUrl())) { 260 if (MailTo.isMailTo(params.getLinkUrl())) {
228 menu.findItem(R.id.contextmenu_copy_link_text).setVisible(false); 261 disabledOptions.add(R.id.contextmenu_copy_link_text);
229 menu.findItem(R.id.contextmenu_copy_link_address).setVisible(false); 262 disabledOptions.add(R.id.contextmenu_copy_link_address);
230 menu.setGroupVisible(R.id.contextmenu_group_message, true);
231 if (!mDelegate.supportsSendEmailMessage()) { 263 if (!mDelegate.supportsSendEmailMessage()) {
232 menu.findItem(R.id.contextmenu_send_message).setVisible(false); 264 disabledOptions.add(R.id.contextmenu_send_message);
233 } 265 }
234 if (TextUtils.isEmpty(MailTo.parse(params.getLinkUrl()).getTo()) 266 if (TextUtils.isEmpty(MailTo.parse(params.getLinkUrl()).getTo())
235 || !mDelegate.supportsAddToContacts()) { 267 || !mDelegate.supportsAddToContacts()) {
236 menu.findItem(R.id.contextmenu_add_to_contacts).setVisible(false ); 268 disabledOptions.add(R.id.contextmenu_add_to_contacts);
237 } 269 }
238 menu.findItem(R.id.contextmenu_call).setVisible(false); 270 disabledOptions.add(R.id.contextmenu_call);
239 } else if (UrlUtilities.isTelScheme(params.getLinkUrl())) { 271 } else if (UrlUtilities.isTelScheme(params.getLinkUrl())) {
240 menu.findItem(R.id.contextmenu_copy_link_text).setVisible(false); 272 disabledOptions.add(R.id.contextmenu_copy_link_text);
241 menu.findItem(R.id.contextmenu_copy_link_address).setVisible(false); 273 disabledOptions.add(R.id.contextmenu_copy_link_address);
242 menu.setGroupVisible(R.id.contextmenu_group_message, true);
243 if (!mDelegate.supportsCall()) { 274 if (!mDelegate.supportsCall()) {
244 menu.findItem(R.id.contextmenu_call).setVisible(false); 275 disabledOptions.add(R.id.contextmenu_call);
245 } 276 }
246 if (!mDelegate.supportsSendTextMessage()) { 277 if (!mDelegate.supportsSendTextMessage()) {
247 menu.findItem(R.id.contextmenu_send_message).setVisible(false); 278 disabledOptions.add(R.id.contextmenu_send_message);
248 } 279 }
249 if (!mDelegate.supportsAddToContacts()) { 280 if (!mDelegate.supportsAddToContacts()) {
250 menu.findItem(R.id.contextmenu_add_to_contacts).setVisible(false ); 281 disabledOptions.add(R.id.contextmenu_add_to_contacts);
251 } 282 }
252 } else {
253 menu.setGroupVisible(R.id.contextmenu_group_message, false);
254 } 283 }
255 284
256 menu.findItem(R.id.contextmenu_save_link_as).setVisible( 285 if (!UrlUtilities.isDownloadableScheme(params.getLinkUrl())) {
257 UrlUtilities.isDownloadableScheme(params.getLinkUrl())); 286 disabledOptions.add(R.id.contextmenu_save_link_as);
287 }
258 288
289 boolean isSrcDownloadableScheme = UrlUtilities.isDownloadableScheme(para ms.getSrcUrl());
259 if (params.isVideo()) { 290 if (params.isVideo()) {
260 menu.findItem(R.id.contextmenu_save_video).setVisible( 291 boolean saveableAndDownloadable = params.canSaveMedia() && isSrcDown loadableScheme;
261 params.canSaveMedia() && UrlUtilities.isDownloadableScheme(p arams.getSrcUrl())); 292 if (!saveableAndDownloadable) {
293 disabledOptions.add(R.id.contextmenu_save_video);
294 }
262 } else if (params.isImage() && params.imageWasFetchedLoFi()) { 295 } else if (params.isImage() && params.imageWasFetchedLoFi()) {
263 DataReductionProxyUma.previewsLoFiContextMenuAction( 296 DataReductionProxyUma.previewsLoFiContextMenuAction(
264 DataReductionProxyUma.ACTION_LOFI_LOAD_IMAGE_CONTEXT_MENU_SH OWN); 297 DataReductionProxyUma.ACTION_LOFI_LOAD_IMAGE_CONTEXT_MENU_SH OWN);
265 // All image context menu items other than "Load image," "Open origi nal image in 298 // All image context menu items other than "Load image," "Open origi nal image in
266 // new tab," and "Copy image URL" should be disabled on Lo-Fi images . 299 // new tab," and "Copy image URL" should be disabled on Lo-Fi images .
267 menu.findItem(R.id.contextmenu_save_image).setVisible(false); 300 disabledOptions.add(R.id.contextmenu_save_image);
268 menu.findItem(R.id.contextmenu_open_image).setVisible(false); 301 disabledOptions.add(R.id.contextmenu_open_image);
269 menu.findItem(R.id.contextmenu_search_by_image).setVisible(false); 302 disabledOptions.add(R.id.contextmenu_search_by_image);
270 menu.findItem(R.id.contextmenu_share_image).setVisible(false); 303 disabledOptions.add(R.id.contextmenu_share_image);
271 } else if (params.isImage() && !params.imageWasFetchedLoFi()) { 304 } else if (params.isImage() && !params.imageWasFetchedLoFi()) {
272 menu.findItem(R.id.contextmenu_load_original_image).setVisible(false ); 305 disabledOptions.add(R.id.contextmenu_load_original_image);
273 306
274 menu.findItem(R.id.contextmenu_save_image).setVisible( 307 if (!isSrcDownloadableScheme) {
275 UrlUtilities.isDownloadableScheme(params.getSrcUrl())); 308 disabledOptions.add(R.id.contextmenu_save_image);
309 }
276 310
277 // Avoid showing open image option for same image which is already o pened. 311 // Avoid showing open image option for same image which is already o pened.
278 if (mDelegate.getPageUrl().equals(params.getSrcUrl())) { 312 if (mDelegate.getPageUrl().equals(params.getSrcUrl())) {
279 menu.findItem(R.id.contextmenu_open_image).setVisible(false); 313 disabledOptions.add(R.id.contextmenu_open_image);
280 } 314 }
281 final TemplateUrlService templateUrlServiceInstance = TemplateUrlSer vice.getInstance(); 315 final TemplateUrlService templateUrlServiceInstance = TemplateUrlSer vice.getInstance();
282 final boolean isSearchByImageAvailable = 316 final boolean isSearchByImageAvailable = isSrcDownloadableScheme
283 UrlUtilities.isDownloadableScheme(params.getSrcUrl()) 317 && templateUrlServiceInstance.isLoaded()
284 && templateUrlServiceInstance.isLoaded() 318 && templateUrlServiceInstance.isSearchByImageAvailable()
285 && templateUrlServiceInstance.isSearchByImageAvailab le() 319 && templateUrlServiceInstance.getDefaultSearchEngineTemplate Url() != null;
286 && templateUrlServiceInstance.getDefaultSearchEngine TemplateUrl()
287 != null;
288 320
289 menu.findItem(R.id.contextmenu_search_by_image).setVisible(isSearchB yImageAvailable); 321 if (!isSearchByImageAvailable) {
290 if (isSearchByImageAvailable) { 322 disabledOptions.add(R.id.contextmenu_search_by_image);
291 menu.findItem(R.id.contextmenu_search_by_image).setTitle(
292 context.getString(R.string.contextmenu_search_web_for_im age,
293 TemplateUrlService.getInstance()
294 .getDefaultSearchEngineTemplateUrl().get ShortName()));
295 } 323 }
296 } 324 }
297 325
298 // Hide all items that could spawn additional tabs until FRE has been co mpleted. 326 // Hide all items that could spawn additional tabs until FRE has been co mpleted.
299 if (!FirstRunStatus.getFirstRunFlowComplete()) { 327 if (!FirstRunStatus.getFirstRunFlowComplete()) {
300 menu.findItem(R.id.contextmenu_open_image_in_new_tab).setVisible(fal se); 328 disabledOptions.add(R.id.contextmenu_open_image_in_new_tab);
301 menu.findItem(R.id.contextmenu_open_in_other_window).setVisible(fals e); 329 disabledOptions.add(R.id.contextmenu_open_in_other_window);
302 menu.findItem(R.id.contextmenu_open_in_new_tab).setVisible(false); 330 disabledOptions.add(R.id.contextmenu_open_in_new_tab);
303 menu.findItem(R.id.contextmenu_open_in_incognito_tab).setVisible(fal se); 331 disabledOptions.add(R.id.contextmenu_open_in_incognito_tab);
304 menu.findItem(R.id.contextmenu_search_by_image).setVisible(false); 332 disabledOptions.add(R.id.contextmenu_search_by_image);
305 menu.findItem(R.id.menu_id_open_in_chrome).setVisible(false); 333 disabledOptions.add(R.id.menu_id_open_in_chrome);
306 } 334 }
307 335
308 if (mMode == FULLSCREEN_TAB_MODE) { 336 if (mMode == CUSTOM_TAB_MODE) {
309 removeUnsupportedItems(menu, FULLSCREEN_TAB_MODE_WHITELIST);
310 } else if (mMode == CUSTOM_TAB_MODE) {
311 removeUnsupportedItems(menu, CUSTOM_TAB_MODE_WHITELIST);
312 MenuItem defaultOpenMenuItem = menu.findItem(R.id.contextmenu_open_i n_browser_id);
313 if (ChromePreferenceManager.getInstance().getCachedChromeDefaultBrow ser()) { 337 if (ChromePreferenceManager.getInstance().getCachedChromeDefaultBrow ser()) {
314 defaultOpenMenuItem.setVisible(false); 338 disabledOptions.add(R.id.contextmenu_open_in_browser_id);
315 } else { 339 } else {
316 menu.findItem(R.id.contextmenu_open_in_new_chrome_tab).setVisibl e(false); 340 disabledOptions.add(R.id.contextmenu_open_in_new_chrome_tab);
317 menu.findItem(R.id.contextmenu_open_in_chrome_incognito_tab).set Visible(false); 341 disabledOptions.add(R.id.contextmenu_open_in_chrome_incognito_ta b);
318 defaultOpenMenuItem.setTitle(mDelegate.getTitleForOpenTabInExter nalApp());
319 }
320 } else {
321 removeUnsupportedItems(menu, NORMAL_MODE_WHITELIST);
322 }
323 }
324
325 private void removeUnsupportedItems(ContextMenu menu, int[] whitelist) {
326 Arrays.sort(BASE_WHITELIST);
327 Arrays.sort(whitelist);
328 for (int i = 0; i < menu.size(); i++) {
329 MenuItem item = menu.getItem(i);
330 if (Arrays.binarySearch(whitelist, item.getItemId()) < 0
331 && Arrays.binarySearch(BASE_WHITELIST, item.getItemId()) < 0 ) {
332 menu.removeItem(item.getItemId());
333 i--;
334 } 342 }
335 } 343 }
344
345 return disabledOptions;
336 } 346 }
337 347
338 @Override 348 @Override
339 public boolean onItemSelected(ContextMenuHelper helper, ContextMenuParams pa rams, int itemId) { 349 public boolean onItemSelected(ContextMenuHelper helper, ContextMenuParams pa rams, int itemId) {
340 if (itemId == R.id.contextmenu_open_in_other_window) { 350 if (itemId == R.id.contextmenu_open_in_other_window) {
341 ContextMenuUma.record(params, ContextMenuUma.ACTION_OPEN_IN_OTHER_WI NDOW); 351 ContextMenuUma.record(params, ContextMenuUma.ACTION_OPEN_IN_OTHER_WI NDOW);
342 mDelegate.onOpenInOtherWindow(params.getLinkUrl(), params.getReferre r()); 352 mDelegate.onOpenInOtherWindow(params.getLinkUrl(), params.getReferre r());
343 } else if (itemId == R.id.contextmenu_open_in_new_tab) { 353 } else if (itemId == R.id.contextmenu_open_in_new_tab) {
344 ContextMenuUma.record(params, ContextMenuUma.ACTION_OPEN_IN_NEW_TAB) ; 354 ContextMenuUma.record(params, ContextMenuUma.ACTION_OPEN_IN_NEW_TAB) ;
345 mDelegate.onOpenInNewTab(params.getLinkUrl(), params.getReferrer()); 355 mDelegate.onOpenInNewTab(params.getLinkUrl(), params.getReferrer());
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
430 } 440 }
431 441
432 return true; 442 return true;
433 } 443 }
434 444
435 private void setHeaderText(Context context, ContextMenu menu, String text) { 445 private void setHeaderText(Context context, ContextMenu menu, String text) {
436 ContextMenuTitleView title = new ContextMenuTitleView(context, text); 446 ContextMenuTitleView title = new ContextMenuTitleView(context, text);
437 menu.setHeaderView(title); 447 menu.setHeaderView(title);
438 } 448 }
439 } 449 }
OLDNEW
« no previous file with comments | « no previous file | chrome/android/javatests/src/org/chromium/chrome/browser/contextmenu/ContextMenuTest.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698