OLD | NEW |
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 Loading... |
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 Loading... |
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 } |
OLD | NEW |