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

Side by Side Diff: chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.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: Rebase to master branch. 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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.customtabs; 5 package org.chromium.chrome.browser.customtabs;
6 6
7 import android.content.Intent;
8 import android.content.pm.PackageManager;
9 import android.content.pm.ResolveInfo;
10 import android.net.Uri;
11 import android.os.AsyncTask;
12 import android.view.Menu; 7 import android.view.Menu;
13 import android.view.MenuItem; 8 import android.view.MenuItem;
14 9
15 import org.chromium.base.BuildInfo;
16 import org.chromium.base.VisibleForTesting; 10 import org.chromium.base.VisibleForTesting;
17 import org.chromium.chrome.R; 11 import org.chromium.chrome.R;
18 import org.chromium.chrome.browser.ChromeActivity; 12 import org.chromium.chrome.browser.ChromeActivity;
13 import org.chromium.chrome.browser.DefaultBrowserInfo;
19 import org.chromium.chrome.browser.UrlConstants; 14 import org.chromium.chrome.browser.UrlConstants;
20 import org.chromium.chrome.browser.appmenu.AppMenuPropertiesDelegate; 15 import org.chromium.chrome.browser.appmenu.AppMenuPropertiesDelegate;
21 import org.chromium.chrome.browser.banners.AppBannerManager; 16 import org.chromium.chrome.browser.banners.AppBannerManager;
22 import org.chromium.chrome.browser.download.DownloadUtils; 17 import org.chromium.chrome.browser.download.DownloadUtils;
23 import org.chromium.chrome.browser.firstrun.FirstRunStatus; 18 import org.chromium.chrome.browser.firstrun.FirstRunStatus;
24 import org.chromium.chrome.browser.share.ShareHelper; 19 import org.chromium.chrome.browser.share.ShareHelper;
25 import org.chromium.chrome.browser.tab.Tab; 20 import org.chromium.chrome.browser.tab.Tab;
26 21
27 import java.util.HashMap; 22 import java.util.HashMap;
28 import java.util.List; 23 import java.util.List;
29 import java.util.Map; 24 import java.util.Map;
30 import java.util.concurrent.ExecutionException;
31 25
32 /** 26 /**
33 * App menu properties delegate for {@link CustomTabActivity}. 27 * App menu properties delegate for {@link CustomTabActivity}.
34 */ 28 */
35 public class CustomTabAppMenuPropertiesDelegate extends AppMenuPropertiesDelegat e { 29 public class CustomTabAppMenuPropertiesDelegate extends AppMenuPropertiesDelegat e {
36 private static final String SAMPLE_URL = "https://www.google.com"; 30 private static final String SAMPLE_URL = "https://www.google.com";
37 31
38 private final boolean mShowShare; 32 private final boolean mShowShare;
39 private final boolean mIsMediaViewer; 33 private final boolean mIsMediaViewer;
40 private final boolean mShowStar; 34 private final boolean mShowStar;
41 private final boolean mShowDownload; 35 private final boolean mShowDownload;
36 private final boolean mIsOpenedByChrome;
42 37
43 private final List<String> mMenuEntries; 38 private final List<String> mMenuEntries;
44 private final Map<MenuItem, Integer> mItemToIndexMap = new HashMap<MenuItem, Integer>(); 39 private final Map<MenuItem, Integer> mItemToIndexMap = new HashMap<MenuItem, Integer>();
45 private final AsyncTask<Void, Void, String> mDefaultBrowserFetcher;
46 40
47 private boolean mIsCustomEntryAdded; 41 private boolean mIsCustomEntryAdded;
48 42
49 /** 43 /**
50 * Creates an {@link CustomTabAppMenuPropertiesDelegate} instance. 44 * Creates an {@link CustomTabAppMenuPropertiesDelegate} instance.
51 */ 45 */
52 public CustomTabAppMenuPropertiesDelegate(final ChromeActivity activity, 46 public CustomTabAppMenuPropertiesDelegate(final ChromeActivity activity,
53 List<String> menuEntries, boolean showShare, final boolean isOpenedB yChrome, 47 List<String> menuEntries, boolean showShare, final boolean isOpenedB yChrome,
54 final boolean isMediaViewer, boolean showStar, boolean showDownload) { 48 final boolean isMediaViewer, boolean showStar, boolean showDownload) {
55 super(activity); 49 super(activity);
56 mMenuEntries = menuEntries; 50 mMenuEntries = menuEntries;
57 mShowShare = showShare; 51 mShowShare = showShare;
58 mIsMediaViewer = isMediaViewer; 52 mIsMediaViewer = isMediaViewer;
59 mShowStar = showStar; 53 mShowStar = showStar;
60 mShowDownload = showDownload; 54 mShowDownload = showDownload;
61 55 mIsOpenedByChrome = isOpenedByChrome;
62 mDefaultBrowserFetcher = new AsyncTask<Void, Void, String>() {
63 @Override
64 protected String doInBackground(Void... params) {
65 String packageLabel = null;
66 if (isOpenedByChrome) {
67 // If the Custom Tab was created by Chrome, Chrome should op en it.
68 packageLabel = BuildInfo.getPackageLabel(activity);
69 } else {
70 // Check if there is a default handler for the Intent. If s o, grab its label.
71 Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(SAM PLE_URL));
72 PackageManager pm = activity.getPackageManager();
73 ResolveInfo info = pm.resolveActivity(intent, 0);
74 if (info != null && info.match != 0) {
75 packageLabel = info.loadLabel(pm).toString();
76 }
77 }
78
79 return packageLabel == null
80 ? activity.getString(R.string.menu_open_in_product_defau lt)
81 : activity.getString(R.string.menu_open_in_product, pack ageLabel);
82 }
83 }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
84 } 56 }
85 57
86 @Override 58 @Override
87 public void prepareMenu(Menu menu) { 59 public void prepareMenu(Menu menu) {
88 Tab currentTab = mActivity.getActivityTab(); 60 Tab currentTab = mActivity.getActivityTab();
89 if (currentTab != null) { 61 if (currentTab != null) {
90 MenuItem forwardMenuItem = menu.findItem(R.id.forward_menu_id); 62 MenuItem forwardMenuItem = menu.findItem(R.id.forward_menu_id);
91 forwardMenuItem.setEnabled(currentTab.canGoForward()); 63 forwardMenuItem.setEnabled(currentTab.canGoForward());
92 64
93 mReloadMenuItem = menu.findItem(R.id.reload_menu_id); 65 mReloadMenuItem = menu.findItem(R.id.reload_menu_id);
(...skipping 21 matching lines...) Expand all
115 updateRequestDesktopSiteMenuItem(requestItem, currentTab); 87 updateRequestDesktopSiteMenuItem(requestItem, currentTab);
116 88
117 if (mIsMediaViewer) { 89 if (mIsMediaViewer) {
118 // Most of the menu items don't make sense when viewing media. 90 // Most of the menu items don't make sense when viewing media.
119 iconRow.setVisible(false); 91 iconRow.setVisible(false);
120 openInChromeItem.setVisible(false); 92 openInChromeItem.setVisible(false);
121 menu.findItem(R.id.find_in_page_id).setVisible(false); 93 menu.findItem(R.id.find_in_page_id).setVisible(false);
122 menu.findItem(R.id.request_desktop_site_id).setVisible(false); 94 menu.findItem(R.id.request_desktop_site_id).setVisible(false);
123 addToHomeScreenItem.setVisible(false); 95 addToHomeScreenItem.setVisible(false);
124 } else { 96 } else {
125 try { 97 openInChromeItem.setTitle(
126 openInChromeItem.setTitle(mDefaultBrowserFetcher.get()); 98 DefaultBrowserInfo.getTitleOpenInDefaultBrowser(mIsOpene dByChrome));
127 } catch (InterruptedException | ExecutionException e) {
128 openInChromeItem.setTitle(
129 mActivity.getString(R.string.menu_open_in_product_de fault));
130 }
131 updateBookmarkMenuItem(bookmarkItem, currentTab);
132 } 99 }
133 bookmarkItem.setVisible(mShowStar); 100 bookmarkItem.setVisible(mShowStar);
134 downloadItem.setVisible(mShowDownload); 101 downloadItem.setVisible(mShowDownload);
135 if (!FirstRunStatus.getFirstRunFlowComplete()) { 102 if (!FirstRunStatus.getFirstRunFlowComplete()) {
136 openInChromeItem.setVisible(false); 103 openInChromeItem.setVisible(false);
137 bookmarkItem.setVisible(false); 104 bookmarkItem.setVisible(false);
138 downloadItem.setVisible(false); 105 downloadItem.setVisible(false);
139 addToHomeScreenItem.setVisible(false); 106 addToHomeScreenItem.setVisible(false);
140 } 107 }
141 108
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
180 * the same title, a random one will be returned. This method is for testing purpose _only_. 147 * the same title, a random one will be returned. This method is for testing purpose _only_.
181 */ 148 */
182 @VisibleForTesting 149 @VisibleForTesting
183 MenuItem getMenuItemForTitle(String title) { 150 MenuItem getMenuItemForTitle(String title) {
184 for (MenuItem item : mItemToIndexMap.keySet()) { 151 for (MenuItem item : mItemToIndexMap.keySet()) {
185 if (item.getTitle().equals(title)) return item; 152 if (item.getTitle().equals(title)) return item;
186 } 153 }
187 return null; 154 return null;
188 } 155 }
189 } 156 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698