| Index: chrome/android/java_staging/src/org/chromium/chrome/browser/toolbar/ToolbarTablet.java
|
| diff --git a/chrome/android/java_staging/src/org/chromium/chrome/browser/toolbar/ToolbarTablet.java b/chrome/android/java_staging/src/org/chromium/chrome/browser/toolbar/ToolbarTablet.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..5dae79d04abfb7ff210b2a4dbadf991417b5c503
|
| --- /dev/null
|
| +++ b/chrome/android/java_staging/src/org/chromium/chrome/browser/toolbar/ToolbarTablet.java
|
| @@ -0,0 +1,411 @@
|
| +// Copyright 2015 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +package org.chromium.chrome.browser.toolbar;
|
| +
|
| +import android.annotation.SuppressLint;
|
| +import android.content.Context;
|
| +import android.content.res.ColorStateList;
|
| +import android.util.AttributeSet;
|
| +import android.view.View;
|
| +import android.view.View.OnClickListener;
|
| +import android.widget.ImageButton;
|
| +
|
| +import com.google.android.apps.chrome.R;
|
| +
|
| +import org.chromium.base.ApiCompatibilityUtils;
|
| +import org.chromium.base.CommandLine;
|
| +import org.chromium.base.metrics.RecordUserAction;
|
| +import org.chromium.chrome.browser.ChromeSwitches;
|
| +import org.chromium.chrome.browser.NavigationPopup;
|
| +import org.chromium.chrome.browser.Tab;
|
| +import org.chromium.chrome.browser.device.DeviceClassManager;
|
| +import org.chromium.chrome.browser.omnibox.LocationBar;
|
| +import org.chromium.chrome.browser.partnercustomizations.HomepageManager;
|
| +import org.chromium.chrome.browser.widget.TintedImageButton;
|
| +
|
| +/**
|
| + * The Toolbar object for Tablet screens.
|
| + */
|
| +@SuppressLint("Instantiatable")
|
| +
|
| +public class ToolbarTablet extends ToolbarLayout implements OnClickListener {
|
| +
|
| + private TintedImageButton mHomeButton;
|
| + private TintedImageButton mBackButton;
|
| + private TintedImageButton mForwardButton;
|
| + private TintedImageButton mReloadButton;
|
| + private TintedImageButton mBookmarkButton;
|
| + private ImageButton mAccessibilitySwitcherButton;
|
| +
|
| + private OnClickListener mBookmarkListener;
|
| + private OnClickListener mTabSwitcherListener;
|
| +
|
| + private boolean mInTabSwitcherwMode = false;
|
| +
|
| + private boolean mShowTabStack;
|
| +
|
| + private NavigationPopup mNavigationPopup;
|
| +
|
| + private TabSwitcherDrawable mTabSwitcherButtonDrawable;
|
| + private TabSwitcherDrawable mTabSwitcherButtonDrawableLight;
|
| +
|
| + private Boolean mUseLightColorAssets;
|
| + private LocationBar mLocationBar;
|
| +
|
| + /**
|
| + * Constructs a ToolbarTablet object.
|
| + * @param context The Context in which this View object is created.
|
| + * @param attrs The AttributeSet that was specified with this View.
|
| + */
|
| + public ToolbarTablet(Context context, AttributeSet attrs) {
|
| + super(context, attrs);
|
| + }
|
| +
|
| + @Override
|
| + public void onFinishInflate() {
|
| + super.onFinishInflate();
|
| + mLocationBar = (LocationBar) findViewById(R.id.location_bar);
|
| +
|
| + mHomeButton = (TintedImageButton) findViewById(R.id.home_button);
|
| + mBackButton = (TintedImageButton) findViewById(R.id.back_button);
|
| + mForwardButton = (TintedImageButton) findViewById(R.id.forward_button);
|
| + mReloadButton = (TintedImageButton) findViewById(R.id.refresh_button);
|
| + mShowTabStack = DeviceClassManager.isAccessibilityModeEnabled(getContext())
|
| + || CommandLine.getInstance().hasSwitch(ChromeSwitches.ENABLE_TABLET_TAB_STACK);
|
| +
|
| + mTabSwitcherButtonDrawable =
|
| + TabSwitcherDrawable.createTabSwitcherDrawable(getResources(), false);
|
| + mTabSwitcherButtonDrawableLight =
|
| + TabSwitcherDrawable.createTabSwitcherDrawable(getResources(), true);
|
| +
|
| + mAccessibilitySwitcherButton = (ImageButton) findViewById(R.id.tab_switcher_button);
|
| + mAccessibilitySwitcherButton.setImageDrawable(mTabSwitcherButtonDrawable);
|
| + updateSwitcherButtonVisibility(mShowTabStack);
|
| +
|
| + mBookmarkButton = (TintedImageButton) findViewById(R.id.bookmark_button);
|
| +
|
| + mMenuButton = (TintedImageButton) findViewById(R.id.menu_button);
|
| + mMenuButton.setVisibility(
|
| + shouldShowMenuButton() ? View.VISIBLE : View.GONE);
|
| +
|
| + if (mAccessibilitySwitcherButton.getVisibility() == View.GONE
|
| + && mMenuButton.getVisibility() == View.GONE) {
|
| + ApiCompatibilityUtils.setPaddingRelative((View) mMenuButton.getParent(), 0, 0,
|
| + getResources().getDimensionPixelSize(R.dimen.tablet_toolbar_end_padding), 0);
|
| + }
|
| + }
|
| +
|
| + /**
|
| + * Sets up key listeners after native initialization is complete, so that we can invoke
|
| + * native functions.
|
| + */
|
| + @Override
|
| + public void onNativeLibraryReady() {
|
| + super.onNativeLibraryReady();
|
| + mLocationBar.onNativeLibraryReady();
|
| + mHomeButton.setOnClickListener(this);
|
| + mHomeButton.setOnKeyListener(new KeyboardNavigationListener() {
|
| + @Override
|
| + public View getNextFocusForward() {
|
| + if (mBackButton.isFocusable()) {
|
| + return findViewById(R.id.back_button);
|
| + } else if (mForwardButton.isFocusable()) {
|
| + return findViewById(R.id.forward_button);
|
| + } else {
|
| + return findViewById(R.id.refresh_button);
|
| + }
|
| + }
|
| +
|
| + @Override
|
| + public View getNextFocusBackward() {
|
| + return findViewById(R.id.menu_button);
|
| + }
|
| + });
|
| +
|
| + mBackButton.setOnClickListener(this);
|
| + mBackButton.setLongClickable(true);
|
| + mBackButton.setOnKeyListener(new KeyboardNavigationListener() {
|
| + @Override
|
| + public View getNextFocusForward() {
|
| + if (mForwardButton.isFocusable()) {
|
| + return findViewById(R.id.forward_button);
|
| + } else {
|
| + return findViewById(R.id.refresh_button);
|
| + }
|
| + }
|
| +
|
| + @Override
|
| + public View getNextFocusBackward() {
|
| + if (mHomeButton.getVisibility() == VISIBLE) {
|
| + return findViewById(R.id.home_button);
|
| + } else {
|
| + return findViewById(R.id.menu_button);
|
| + }
|
| + }
|
| + });
|
| +
|
| + mForwardButton.setOnClickListener(this);
|
| + mForwardButton.setLongClickable(true);
|
| + mForwardButton.setOnKeyListener(new KeyboardNavigationListener() {
|
| + @Override
|
| + public View getNextFocusForward() {
|
| + return findViewById(R.id.refresh_button);
|
| + }
|
| +
|
| + @Override
|
| + public View getNextFocusBackward() {
|
| + if (mBackButton.isFocusable()) {
|
| + return mBackButton;
|
| + } else if (mHomeButton.getVisibility() == VISIBLE) {
|
| + return findViewById(R.id.home_button);
|
| + } else {
|
| + return findViewById(R.id.menu_button);
|
| + }
|
| + }
|
| + });
|
| +
|
| + mReloadButton.setOnClickListener(this);
|
| + mReloadButton.setOnKeyListener(new KeyboardNavigationListener() {
|
| + @Override
|
| + public View getNextFocusForward() {
|
| + return findViewById(R.id.url_bar);
|
| + }
|
| +
|
| + @Override
|
| + public View getNextFocusBackward() {
|
| + if (mForwardButton.isFocusable()) {
|
| + return mForwardButton;
|
| + } else if (mBackButton.isFocusable()) {
|
| + return mBackButton;
|
| + } else if (mHomeButton.getVisibility() == VISIBLE) {
|
| + return findViewById(R.id.home_button);
|
| + } else {
|
| + return findViewById(R.id.menu_button);
|
| + }
|
| + }
|
| + });
|
| +
|
| + mAccessibilitySwitcherButton.setOnClickListener(this);
|
| + mBookmarkButton.setOnClickListener(this);
|
| + mMenuButton.setOnKeyListener(new KeyboardNavigationListener() {
|
| + @Override
|
| + public View getNextFocusForward() {
|
| + return getCurrentTabView();
|
| + }
|
| +
|
| + @Override
|
| + public View getNextFocusBackward() {
|
| + return findViewById(R.id.url_bar);
|
| + }
|
| +
|
| + @Override
|
| + protected boolean handleEnterKeyPress() {
|
| + return getMenuButtonHelper().onEnterKeyPress(mMenuButton);
|
| + }
|
| + });
|
| + if (HomepageManager.isHomepageEnabled(getContext())) {
|
| + mHomeButton.setVisibility(VISIBLE);
|
| + }
|
| + }
|
| +
|
| + @Override
|
| + public boolean showContextMenuForChild(View originalView) {
|
| + if (mBackButton == originalView) {
|
| + // Display backwards navigation popup.
|
| + displayNavigationPopup(false, mBackButton);
|
| + return true;
|
| + } else if (mForwardButton == originalView) {
|
| + // Display forwards navigation popup.
|
| + displayNavigationPopup(true, mForwardButton);
|
| + return true;
|
| + }
|
| + return super.showContextMenuForChild(originalView);
|
| + }
|
| +
|
| + @Override
|
| + public void onWindowFocusChanged(boolean hasWindowFocus) {
|
| + // Ensure the the popup is not shown after resuming activity from background.
|
| + if (hasWindowFocus && mNavigationPopup != null) {
|
| + mNavigationPopup.dismiss();
|
| + mNavigationPopup = null;
|
| + }
|
| + super.onWindowFocusChanged(hasWindowFocus);
|
| + }
|
| +
|
| + private void displayNavigationPopup(boolean isForward, View anchorView) {
|
| + Tab tab = getToolbarDataProvider().getTab();
|
| + if (tab == null || tab.getWebContents() == null) return;
|
| + mNavigationPopup = new NavigationPopup(
|
| + getContext(), tab.getWebContents().getNavigationController(), isForward);
|
| +
|
| + mNavigationPopup.setAnchorView(anchorView);
|
| +
|
| + int menuWidth = getResources().getDimensionPixelSize(R.dimen.menu_width);
|
| + mNavigationPopup.setWidth(menuWidth);
|
| +
|
| + if (mNavigationPopup.shouldBeShown()) mNavigationPopup.show();
|
| + }
|
| +
|
| + @Override
|
| + public void onClick(View v) {
|
| + if (mHomeButton == v) {
|
| + openHomepage();
|
| + } else if (mBackButton == v) {
|
| + if (!back()) return;
|
| + RecordUserAction.record("MobileToolbarBack");
|
| + RecordUserAction.record("MobileTabClobbered");
|
| + } else if (mForwardButton == v) {
|
| + forward();
|
| + RecordUserAction.record("MobileToolbarForward");
|
| + RecordUserAction.record("MobileTabClobbered");
|
| + } else if (mReloadButton == v) {
|
| + stopOrReloadCurrentTab();
|
| + } else if (mBookmarkButton == v) {
|
| + if (mBookmarkListener != null) {
|
| + mBookmarkListener.onClick(mBookmarkButton);
|
| + RecordUserAction.record("MobileToolbarToggleBookmark");
|
| + }
|
| + } else if (mAccessibilitySwitcherButton == v) {
|
| + if (mTabSwitcherListener != null) {
|
| + mTabSwitcherListener.onClick(mAccessibilitySwitcherButton);
|
| + }
|
| + }
|
| + }
|
| +
|
| + private void updateSwitcherButtonVisibility(boolean enabled) {
|
| + mAccessibilitySwitcherButton.setVisibility(mShowTabStack || enabled
|
| + ? View.VISIBLE : View.GONE);
|
| + }
|
| +
|
| + @Override
|
| + public boolean isReadyForTextureCapture() {
|
| + return !urlHasFocus();
|
| + }
|
| +
|
| + @Override
|
| + public void onTabOrModelChanged() {
|
| + super.onTabOrModelChanged();
|
| + boolean incognito = isIncognito();
|
| + if (mUseLightColorAssets == null || mUseLightColorAssets != incognito) {
|
| + setBackgroundResource(incognito
|
| + ? R.color.incognito_primary_color : R.color.default_primary_color);
|
| +
|
| + ColorStateList dark = getResources().getColorStateList(R.color.dark_mode_tint);
|
| + ColorStateList white = getResources().getColorStateList(R.color.light_mode_tint);
|
| + mMenuButton.setTint(incognito ? white : dark);
|
| + mHomeButton.setTint(incognito ? white : dark);
|
| + mBackButton.setTint(incognito ? white : dark);
|
| + mForwardButton.setTint(incognito ? white : dark);
|
| + if (incognito) {
|
| + mLocationBar.getContainerView().getBackground().setAlpha(
|
| + ToolbarPhone.LOCATION_BAR_TRANSPARENT_BACKGROUND_ALPHA);
|
| + } else {
|
| + mLocationBar.getContainerView().getBackground().setAlpha(255);
|
| + }
|
| + mAccessibilitySwitcherButton.setImageDrawable(
|
| + incognito ? mTabSwitcherButtonDrawableLight : mTabSwitcherButtonDrawable);
|
| + mLocationBar.updateVisualsForState();
|
| + mUseLightColorAssets = incognito;
|
| + }
|
| + mLocationBar.setUrlBarFocus(false);
|
| + }
|
| +
|
| + @Override
|
| + protected void updateBackButtonVisibility(boolean canGoBack) {
|
| + boolean enableButton = canGoBack && !mInTabSwitcherwMode;
|
| + mBackButton.setEnabled(enableButton);
|
| + mBackButton.setFocusable(enableButton);
|
| + }
|
| +
|
| + @Override
|
| + protected void updateForwardButtonVisibility(boolean canGoForward) {
|
| + boolean enableButton = canGoForward && !mInTabSwitcherwMode;
|
| + mForwardButton.setEnabled(enableButton);
|
| + mForwardButton.setFocusable(enableButton);
|
| + }
|
| +
|
| + @Override
|
| + protected void updateReloadButtonVisibility(boolean isReloading) {
|
| + if (isReloading) {
|
| + mReloadButton.setImageResource(R.drawable.btn_close);
|
| + mReloadButton.setContentDescription(getContext().getString(
|
| + R.string.accessibility_btn_stop_loading));
|
| + } else {
|
| + mReloadButton.setImageResource(R.drawable.btn_toolbar_reload);
|
| + mReloadButton.setContentDescription(getContext().getString(
|
| + R.string.accessibility_btn_refresh));
|
| + }
|
| + ColorStateList dark = getResources().getColorStateList(R.color.dark_mode_tint);
|
| + ColorStateList white = getResources().getColorStateList(R.color.light_mode_tint);
|
| + mReloadButton.setTint(isIncognito() ? white : dark);
|
| + mReloadButton.setEnabled(!mInTabSwitcherwMode);
|
| + }
|
| +
|
| + @Override
|
| + protected void updateBookmarkButtonVisibility(boolean isBookmarked) {
|
| + int tintColor = isIncognito() ? R.color.light_mode_tint : R.color.dark_mode_tint;
|
| + if (isBookmarked) {
|
| + mBookmarkButton.setImageResource(R.drawable.btn_star_filled);
|
| + // Non-incognito mode shows a blue filled star.
|
| + if (!isIncognito()) tintColor = R.color.blue_mode_tint;
|
| + } else {
|
| + mBookmarkButton.setImageResource(R.drawable.btn_star);
|
| + }
|
| + ColorStateList tint = getResources().getColorStateList(tintColor);
|
| + mBookmarkButton.setTint(tint);
|
| + }
|
| +
|
| + @Override
|
| + protected void setTabSwitcherMode(
|
| + boolean inTabSwitcherMode, boolean showToolbar, boolean delayAnimation) {
|
| + if (mShowTabStack && inTabSwitcherMode) {
|
| + mInTabSwitcherwMode = true;
|
| + mBackButton.setEnabled(false);
|
| + mForwardButton.setEnabled(false);
|
| + mReloadButton.setEnabled(false);
|
| + mLocationBar.getContainerView().setVisibility(View.INVISIBLE);
|
| + } else {
|
| + mInTabSwitcherwMode = false;
|
| + mLocationBar.getContainerView().setVisibility(View.VISIBLE);
|
| + }
|
| + }
|
| +
|
| + @Override
|
| + protected void updateTabCountVisuals(int numberOfTabs) {
|
| + mAccessibilitySwitcherButton.setContentDescription(
|
| + getResources().getString(R.string.accessibility_toolbar_btn_tabswitcher_toggle,
|
| + numberOfTabs));
|
| + mTabSwitcherButtonDrawable.updateForTabCount(numberOfTabs, isIncognito());
|
| + mTabSwitcherButtonDrawableLight.updateForTabCount(numberOfTabs, isIncognito());
|
| + }
|
| +
|
| + @Override
|
| + public void onAccessibilityStatusChanged(boolean enabled) {
|
| + mShowTabStack = enabled || CommandLine.getInstance().hasSwitch(
|
| + ChromeSwitches.ENABLE_TABLET_TAB_STACK);
|
| + updateSwitcherButtonVisibility(enabled);
|
| + }
|
| +
|
| + @Override
|
| + public void setBookmarkClickHandler(OnClickListener listener) {
|
| + mBookmarkListener = listener;
|
| + }
|
| +
|
| + @Override
|
| + public void setOnTabSwitcherClickHandler(OnClickListener listener) {
|
| + mTabSwitcherListener = listener;
|
| + }
|
| +
|
| + @Override
|
| + protected void onHomeButtonUpdate(boolean homeButtonEnabled) {
|
| + mHomeButton.setVisibility(homeButtonEnabled ? VISIBLE : GONE);
|
| + }
|
| +
|
| + @Override
|
| + public LocationBar getLocationBar() {
|
| + return mLocationBar;
|
| + }
|
| +
|
| +}
|
|
|