| 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 |