| 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.appmenu; | 5 package org.chromium.chrome.browser.appmenu; |
| 6 | 6 |
| 7 import android.content.Context; | 7 import android.content.Context; |
| 8 import android.content.pm.ResolveInfo; | 8 import android.content.pm.ResolveInfo; |
| 9 import android.graphics.PorterDuff; | 9 import android.graphics.PorterDuff; |
| 10 import android.graphics.drawable.Drawable; | 10 import android.graphics.drawable.Drawable; |
| 11 import android.os.SystemClock; | 11 import android.os.SystemClock; |
| 12 import android.support.annotation.Nullable; |
| 12 import android.view.Menu; | 13 import android.view.Menu; |
| 13 import android.view.MenuItem; | 14 import android.view.MenuItem; |
| 15 import android.view.View; |
| 14 | 16 |
| 15 import org.chromium.base.ApiCompatibilityUtils; | 17 import org.chromium.base.ApiCompatibilityUtils; |
| 16 import org.chromium.base.CommandLine; | 18 import org.chromium.base.CommandLine; |
| 17 import org.chromium.base.ContextUtils; | 19 import org.chromium.base.ContextUtils; |
| 18 import org.chromium.base.metrics.RecordHistogram; | 20 import org.chromium.base.metrics.RecordHistogram; |
| 19 import org.chromium.chrome.R; | 21 import org.chromium.chrome.R; |
| 20 import org.chromium.chrome.browser.ChromeActivity; | 22 import org.chromium.chrome.browser.ChromeActivity; |
| 21 import org.chromium.chrome.browser.ChromeSwitches; | 23 import org.chromium.chrome.browser.ChromeSwitches; |
| 22 import org.chromium.chrome.browser.ShortcutHelper; | 24 import org.chromium.chrome.browser.ShortcutHelper; |
| 23 import org.chromium.chrome.browser.UrlConstants; | 25 import org.chromium.chrome.browser.UrlConstants; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 37 | 39 |
| 38 import java.util.concurrent.TimeUnit; | 40 import java.util.concurrent.TimeUnit; |
| 39 | 41 |
| 40 /** | 42 /** |
| 41 * App Menu helper that handles hiding and showing menu items based on activity
state. | 43 * App Menu helper that handles hiding and showing menu items based on activity
state. |
| 42 */ | 44 */ |
| 43 public class AppMenuPropertiesDelegate { | 45 public class AppMenuPropertiesDelegate { |
| 44 // Indices for different levels in drawable.btn_reload_stop. | 46 // Indices for different levels in drawable.btn_reload_stop. |
| 45 // Used only when preparing menu and refresh reload button in menu when tab | 47 // Used only when preparing menu and refresh reload button in menu when tab |
| 46 // page load status changes. | 48 // page load status changes. |
| 47 private static final int RELOAD_BUTTON_LEVEL_RELOAD = 0; | 49 static final int RELOAD_BUTTON_LEVEL_RELOAD = 0; |
| 48 private static final int RELOAD_BUTTON_LEVEL_STOP_LOADING = 1; | 50 static final int RELOAD_BUTTON_LEVEL_STOP_LOADING = 1; |
| 49 | 51 |
| 50 protected MenuItem mReloadMenuItem; | 52 protected MenuItem mReloadMenuItem; |
| 51 | 53 |
| 52 protected final ChromeActivity mActivity; | 54 protected final ChromeActivity mActivity; |
| 53 | 55 |
| 54 protected BookmarkBridge mBookmarkBridge; | 56 protected BookmarkBridge mBookmarkBridge; |
| 55 | 57 |
| 58 @Nullable |
| 59 private AppMenuIconRowFooter mAppMenuIconRowFooter; |
| 60 |
| 56 public AppMenuPropertiesDelegate(ChromeActivity activity) { | 61 public AppMenuPropertiesDelegate(ChromeActivity activity) { |
| 57 mActivity = activity; | 62 mActivity = activity; |
| 58 } | 63 } |
| 59 | 64 |
| 60 /** | 65 /** |
| 61 * @return Whether the App Menu should be shown. | 66 * @return Whether the App Menu should be shown. |
| 62 */ | 67 */ |
| 63 public boolean shouldShowAppMenu() { | 68 public boolean shouldShowAppMenu() { |
| 64 return mActivity.shouldShowAppMenu(); | 69 return mActivity.shouldShowAppMenu(); |
| 65 } | 70 } |
| (...skipping 29 matching lines...) Expand all Loading... |
| 95 menu.setGroupVisible(R.id.PAGE_MENU, isPageMenu); | 100 menu.setGroupVisible(R.id.PAGE_MENU, isPageMenu); |
| 96 menu.setGroupVisible(R.id.OVERVIEW_MODE_MENU, isOverviewMenu); | 101 menu.setGroupVisible(R.id.OVERVIEW_MODE_MENU, isOverviewMenu); |
| 97 menu.setGroupVisible(R.id.TABLET_EMPTY_MODE_MENU, isTabletEmptyModeMenu)
; | 102 menu.setGroupVisible(R.id.TABLET_EMPTY_MODE_MENU, isTabletEmptyModeMenu)
; |
| 98 | 103 |
| 99 if (isPageMenu && currentTab != null) { | 104 if (isPageMenu && currentTab != null) { |
| 100 String url = currentTab.getUrl(); | 105 String url = currentTab.getUrl(); |
| 101 boolean isChromeScheme = url.startsWith(UrlConstants.CHROME_URL_PREF
IX) | 106 boolean isChromeScheme = url.startsWith(UrlConstants.CHROME_URL_PREF
IX) |
| 102 || url.startsWith(UrlConstants.CHROME_NATIVE_URL_PREFIX); | 107 || url.startsWith(UrlConstants.CHROME_NATIVE_URL_PREFIX); |
| 103 boolean isFileScheme = url.startsWith(UrlConstants.FILE_URL_PREFIX); | 108 boolean isFileScheme = url.startsWith(UrlConstants.FILE_URL_PREFIX); |
| 104 boolean isContentScheme = url.startsWith(UrlConstants.CONTENT_URL_PR
EFIX); | 109 boolean isContentScheme = url.startsWith(UrlConstants.CONTENT_URL_PR
EFIX); |
| 105 boolean shouldShowIconRow = !mActivity.isTablet() | 110 |
| 106 || mActivity.getWindow().getDecorView().getWidth() | 111 // If the BottomSheet is not null, the icon row will be displayed us
ing |
| 107 < DeviceFormFactor.getMinimumTabletWidthPx(mActivity
); | 112 // AppMenuIconRowFooter as a prompt view. |
| 113 boolean shouldShowIconRow = mActivity.getBottomSheet() == null |
| 114 && (!mActivity.isTablet() |
| 115 || mActivity.getWindow().getDecorView().getWidth(
) |
| 116 < DeviceFormFactor.getMinimumTabletWidthP
x(mActivity)); |
| 108 | 117 |
| 109 // Update the icon row items (shown in narrow form factors). | 118 // Update the icon row items (shown in narrow form factors). |
| 110 menu.findItem(R.id.icon_row_menu_id).setVisible(shouldShowIconRow); | 119 menu.findItem(R.id.icon_row_menu_id).setVisible(shouldShowIconRow); |
| 111 if (shouldShowIconRow) { | 120 if (shouldShowIconRow) { |
| 112 // Disable the "Forward" menu item if there is no page to go to. | 121 // Disable the "Forward" menu item if there is no page to go to. |
| 113 MenuItem forwardMenuItem = menu.findItem(R.id.forward_menu_id); | 122 MenuItem forwardMenuItem = menu.findItem(R.id.forward_menu_id); |
| 114 forwardMenuItem.setEnabled(currentTab.canGoForward()); | 123 forwardMenuItem.setEnabled(currentTab.canGoForward()); |
| 115 | 124 |
| 116 mReloadMenuItem = menu.findItem(R.id.reload_menu_id); | 125 mReloadMenuItem = menu.findItem(R.id.reload_menu_id); |
| 117 mReloadMenuItem.setIcon(R.drawable.btn_reload_stop); | 126 mReloadMenuItem.setIcon(R.drawable.btn_reload_stop); |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 215 // main_menu.xml contains multiple items with the same id in different g
roups | 224 // main_menu.xml contains multiple items with the same id in different g
roups |
| 216 // e.g.: new_incognito_tab_menu_id. | 225 // e.g.: new_incognito_tab_menu_id. |
| 217 disableEnableMenuItem(menu, R.id.new_incognito_tab_menu_id, | 226 disableEnableMenuItem(menu, R.id.new_incognito_tab_menu_id, |
| 218 true, | 227 true, |
| 219 PrefServiceBridge.getInstance().isIncognitoModeEnabled(), | 228 PrefServiceBridge.getInstance().isIncognitoModeEnabled(), |
| 220 PrefServiceBridge.getInstance().isIncognitoModeManaged()); | 229 PrefServiceBridge.getInstance().isIncognitoModeManaged()); |
| 221 mActivity.prepareMenu(menu); | 230 mActivity.prepareMenu(menu); |
| 222 } | 231 } |
| 223 | 232 |
| 224 /** | 233 /** |
| 234 * Called after the menu has been shown to finish initializing views. |
| 235 * @param menu The {@link AppMenu} that was shown. |
| 236 */ |
| 237 public void onShow(final AppMenu menu) { |
| 238 View promptView = menu.getPromptView(); |
| 239 if (!(promptView instanceof AppMenuIconRowFooter)) { |
| 240 mAppMenuIconRowFooter = null; |
| 241 return; |
| 242 } |
| 243 |
| 244 mAppMenuIconRowFooter = (AppMenuIconRowFooter) promptView; |
| 245 mAppMenuIconRowFooter.initialize(mActivity, menu, mBookmarkBridge); |
| 246 } |
| 247 |
| 248 /** |
| 225 * Sets the visibility and labels of the "Add to Home screen" and "Open WebA
PK" menu items. | 249 * Sets the visibility and labels of the "Add to Home screen" and "Open WebA
PK" menu items. |
| 226 */ | 250 */ |
| 227 protected void prepareAddToHomescreenMenuItem( | 251 protected void prepareAddToHomescreenMenuItem( |
| 228 Menu menu, Tab currentTab, boolean canShowHomeScreenMenuItem) { | 252 Menu menu, Tab currentTab, boolean canShowHomeScreenMenuItem) { |
| 229 // Record whether or not we have finished installability checks for this
page when we're | 253 // Record whether or not we have finished installability checks for this
page when we're |
| 230 // preparing the menu to be displayed. This will let us determine if it
is feasible to | 254 // preparing the menu to be displayed. This will let us determine if it
is feasible to |
| 231 // change the add to homescreen menu item based on whether a site is a P
WA. | 255 // change the add to homescreen menu item based on whether a site is a P
WA. |
| 232 currentTab.getAppBannerManager().recordMenuOpen(); | 256 currentTab.getAppBannerManager().recordMenuOpen(); |
| 233 | 257 |
| 234 MenuItem homescreenItem = menu.findItem(R.id.add_to_homescreen_id); | 258 MenuItem homescreenItem = menu.findItem(R.id.add_to_homescreen_id); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 264 /** | 288 /** |
| 265 * Notify the delegate that the load state changed. | 289 * Notify the delegate that the load state changed. |
| 266 * @param isLoading Whether the page is currently loading. | 290 * @param isLoading Whether the page is currently loading. |
| 267 */ | 291 */ |
| 268 public void loadingStateChanged(boolean isLoading) { | 292 public void loadingStateChanged(boolean isLoading) { |
| 269 if (mReloadMenuItem != null) { | 293 if (mReloadMenuItem != null) { |
| 270 mReloadMenuItem.getIcon().setLevel(isLoading | 294 mReloadMenuItem.getIcon().setLevel(isLoading |
| 271 ? RELOAD_BUTTON_LEVEL_STOP_LOADING : RELOAD_BUTTON_LEVEL_REL
OAD); | 295 ? RELOAD_BUTTON_LEVEL_STOP_LOADING : RELOAD_BUTTON_LEVEL_REL
OAD); |
| 272 mReloadMenuItem.setTitle(isLoading | 296 mReloadMenuItem.setTitle(isLoading |
| 273 ? R.string.accessibility_btn_stop_loading : R.string.accessi
bility_btn_refresh); | 297 ? R.string.accessibility_btn_stop_loading : R.string.accessi
bility_btn_refresh); |
| 298 } else if (mAppMenuIconRowFooter != null) { |
| 299 mAppMenuIconRowFooter.loadingStateChanged(isLoading); |
| 274 } | 300 } |
| 275 } | 301 } |
| 276 | 302 |
| 277 /** | 303 /** |
| 278 * Notify the delegate that menu was dismissed. | 304 * Notify the delegate that menu was dismissed. |
| 279 */ | 305 */ |
| 280 public void onMenuDismissed() { | 306 public void onMenuDismissed() { |
| 281 mReloadMenuItem = null; | 307 mReloadMenuItem = null; |
| 282 } | 308 } |
| 283 | 309 |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 354 String url = currentTab.getUrl(); | 380 String url = currentTab.getUrl(); |
| 355 boolean isChromeScheme = url.startsWith(UrlConstants.CHROME_URL_PREFIX) | 381 boolean isChromeScheme = url.startsWith(UrlConstants.CHROME_URL_PREFIX) |
| 356 || url.startsWith(UrlConstants.CHROME_NATIVE_URL_PREFIX); | 382 || url.startsWith(UrlConstants.CHROME_NATIVE_URL_PREFIX); |
| 357 requstMenuItem.setVisible(!isChromeScheme || currentTab.isNativePage()); | 383 requstMenuItem.setVisible(!isChromeScheme || currentTab.isNativePage()); |
| 358 requstMenuItem.setChecked(currentTab.getUseDesktopUserAgent()); | 384 requstMenuItem.setChecked(currentTab.getUseDesktopUserAgent()); |
| 359 requstMenuItem.setTitleCondensed(requstMenuItem.isChecked() | 385 requstMenuItem.setTitleCondensed(requstMenuItem.isChecked() |
| 360 ? mActivity.getString(R.string.menu_request_desktop_site_on) | 386 ? mActivity.getString(R.string.menu_request_desktop_site_on) |
| 361 : mActivity.getString(R.string.menu_request_desktop_site_off)); | 387 : mActivity.getString(R.string.menu_request_desktop_site_off)); |
| 362 } | 388 } |
| 363 } | 389 } |
| OLD | NEW |