| Index: chrome/android/java_staging/src/org/chromium/chrome/browser/toolbar/CustomTabToolbar.java
|
| diff --git a/chrome/android/java_staging/src/org/chromium/chrome/browser/toolbar/CustomTabToolbar.java b/chrome/android/java_staging/src/org/chromium/chrome/browser/toolbar/CustomTabToolbar.java
|
| deleted file mode 100644
|
| index 078f52aa3998ac50a70e74dae51363daef40d82d..0000000000000000000000000000000000000000
|
| --- a/chrome/android/java_staging/src/org/chromium/chrome/browser/toolbar/CustomTabToolbar.java
|
| +++ /dev/null
|
| @@ -1,495 +0,0 @@
|
| -// 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.animation.Animator;
|
| -import android.animation.ObjectAnimator;
|
| -import android.annotation.SuppressLint;
|
| -import android.content.Context;
|
| -import android.content.res.ColorStateList;
|
| -import android.content.res.Configuration;
|
| -import android.content.res.Resources;
|
| -import android.graphics.Bitmap;
|
| -import android.graphics.drawable.BitmapDrawable;
|
| -import android.graphics.drawable.ColorDrawable;
|
| -import android.text.TextUtils;
|
| -import android.text.TextUtils.TruncateAt;
|
| -import android.util.AttributeSet;
|
| -import android.util.Pair;
|
| -import android.view.KeyEvent;
|
| -import android.view.MotionEvent;
|
| -import android.view.View;
|
| -import android.widget.ImageButton;
|
| -import android.widget.ImageView;
|
| -import android.widget.TextView;
|
| -
|
| -import org.chromium.base.ApiCompatibilityUtils;
|
| -import org.chromium.base.VisibleForTesting;
|
| -import org.chromium.chrome.R;
|
| -import org.chromium.chrome.browser.ContextualMenuBar.ActionBarDelegate;
|
| -import org.chromium.chrome.browser.CustomSelectionActionModeCallback;
|
| -import org.chromium.chrome.browser.Tab;
|
| -import org.chromium.chrome.browser.WebsiteSettingsPopup;
|
| -import org.chromium.chrome.browser.WindowDelegate;
|
| -import org.chromium.chrome.browser.appmenu.AppMenuButtonHelper;
|
| -import org.chromium.chrome.browser.document.BrandColorUtils;
|
| -import org.chromium.chrome.browser.dom_distiller.DomDistillerServiceFactory;
|
| -import org.chromium.chrome.browser.dom_distiller.DomDistillerTabUtils;
|
| -import org.chromium.chrome.browser.ntp.NativePageFactory;
|
| -import org.chromium.chrome.browser.ntp.NewTabPage;
|
| -import org.chromium.chrome.browser.omnibox.LocationBar;
|
| -import org.chromium.chrome.browser.omnibox.LocationBarLayout;
|
| -import org.chromium.chrome.browser.omnibox.UrlBar;
|
| -import org.chromium.chrome.browser.omnibox.UrlFocusChangeListener;
|
| -import org.chromium.chrome.browser.profiles.Profile;
|
| -import org.chromium.chrome.browser.ssl.ConnectionSecurityLevel;
|
| -import org.chromium.chrome.browser.tab.ChromeTab;
|
| -import org.chromium.chrome.browser.widget.TintedImageButton;
|
| -import org.chromium.components.dom_distiller.core.DomDistillerService;
|
| -import org.chromium.components.dom_distiller.core.DomDistillerUrlUtils;
|
| -import org.chromium.ui.base.WindowAndroid;
|
| -
|
| -/**
|
| - * The Toolbar layout to be used for a custom tab. This is used for both phone and tablet UIs.
|
| - */
|
| -public class CustomTabToolbar extends ToolbarLayout implements LocationBar {
|
| - private View mUrlInfoContainer;
|
| - private UrlBar mUrlBar;
|
| - private TextView mTitleBar;
|
| - private ImageView mSecurityButton;
|
| - private ImageButton mCustomActionButton;
|
| - private int mSecurityIconType;
|
| - private boolean mUseDarkColors;
|
| - private TintedImageButton mReturnButton;
|
| - private Animator mSecurityButtonShowAnimator;
|
| - private boolean mBackgroundColorSet;
|
| -
|
| - /**
|
| - * Constructor for getting this class inflated from an xml layout file.
|
| - */
|
| - public CustomTabToolbar(Context context, AttributeSet attrs) {
|
| - super(context, attrs);
|
| - }
|
| -
|
| - @Override
|
| - protected void onFinishInflate() {
|
| - super.onFinishInflate();
|
| - setBackground(new ColorDrawable(getResources().getColor(R.color.default_primary_color)));
|
| - mUrlBar = (UrlBar) findViewById(R.id.url_bar);
|
| - mUrlBar.setHint("");
|
| - mUrlBar.setDelegate(this);
|
| - mUrlBar.setEnabled(false);
|
| - mTitleBar = (TextView) findViewById(R.id.title_bar);
|
| - mUrlInfoContainer = findViewById(R.id.url_info_container);
|
| - mSecurityButton = (ImageButton) findViewById(R.id.security_button);
|
| - mSecurityIconType = ConnectionSecurityLevel.NONE;
|
| - mCustomActionButton = (ImageButton) findViewById(R.id.action_button);
|
| - mReturnButton = (TintedImageButton) findViewById(R.id.back_button);
|
| - mSecurityButtonShowAnimator = ObjectAnimator.ofFloat(mSecurityButton, ALPHA, 1);
|
| - mSecurityButtonShowAnimator
|
| - .setDuration(ToolbarPhone.URL_FOCUS_CHANGE_ANIMATION_DURATION_MS);
|
| - }
|
| -
|
| - @Override
|
| - protected int getToolbarHeightWithoutShadowResId() {
|
| - return R.dimen.custom_tabs_control_container_height;
|
| - }
|
| -
|
| - @Override
|
| - public void initialize(ToolbarDataProvider toolbarDataProvider,
|
| - ToolbarTabController tabController, AppMenuButtonHelper appMenuButtonHelper) {
|
| - super.initialize(toolbarDataProvider, tabController, appMenuButtonHelper);
|
| - updateVisualsForState();
|
| - }
|
| -
|
| - @Override
|
| - public void onNativeLibraryReady() {
|
| - super.onNativeLibraryReady();
|
| - mSecurityButton.setOnClickListener(new OnClickListener() {
|
| - @Override
|
| - public void onClick(View v) {
|
| - Tab currentTab = getToolbarDataProvider().getTab();
|
| - if (currentTab == null || currentTab.getWebContents() == null) return;
|
| -
|
| - WebsiteSettingsPopup.show(getContext(), currentTab.getProfile(),
|
| - currentTab.getWebContents());
|
| - }
|
| - });
|
| - }
|
| -
|
| - @Override
|
| - public void setCustomTabReturnClickHandler(OnClickListener listener) {
|
| - mReturnButton.setOnClickListener(listener);
|
| - }
|
| -
|
| - @Override
|
| - public void addCustomActionButton(Bitmap buttonSource, OnClickListener listener) {
|
| - Resources resources = getResources();
|
| -
|
| - // The height will be scaled to match spec while keeping the aspect ratio, so get the scaled
|
| - // width through that.
|
| - int sourceHeight = buttonSource.getHeight();
|
| - int sourceScaledHeight = resources.getDimensionPixelSize(R.dimen.toolbar_icon_height);
|
| - int sourceWidth = buttonSource.getWidth();
|
| - int sourceScaledWidth = sourceWidth * sourceScaledHeight / sourceHeight;
|
| - int minPadding = resources.getDimensionPixelSize(R.dimen.min_toolbar_icon_side_padding);
|
| -
|
| - int sidePadding = Math.max((2 * sourceScaledHeight - sourceScaledWidth) / 2, minPadding);
|
| - int topPadding = mCustomActionButton.getPaddingTop();
|
| - int bottomPadding = mCustomActionButton.getPaddingBottom();
|
| - mCustomActionButton.setPadding(sidePadding, topPadding, sidePadding, bottomPadding);
|
| -
|
| - mCustomActionButton.setImageDrawable(new BitmapDrawable(getResources(), buttonSource));
|
| - mCustomActionButton.setOnClickListener(listener);
|
| - mCustomActionButton.setVisibility(VISIBLE);
|
| - }
|
| -
|
| - /**
|
| - * @return The custom action button. For test purpose only.
|
| - */
|
| - @VisibleForTesting
|
| - public ImageButton getCustomActionButtonForTest() {
|
| - return mCustomActionButton;
|
| - }
|
| -
|
| - @Override
|
| - public ChromeTab getCurrentTab() {
|
| - return ChromeTab.fromTab(getToolbarDataProvider().getTab());
|
| - }
|
| -
|
| - @Override
|
| - public boolean showingOriginalUrlForPreview() {
|
| - return false;
|
| - }
|
| -
|
| - @Override
|
| - public boolean shouldEmphasizeHttpsScheme() {
|
| - int securityLevel = getSecurityLevel();
|
| - if (securityLevel == ConnectionSecurityLevel.SECURITY_ERROR
|
| - || securityLevel == ConnectionSecurityLevel.SECURITY_WARNING
|
| - || securityLevel == ConnectionSecurityLevel.SECURITY_POLICY_WARNING) {
|
| - return true;
|
| - }
|
| - return false;
|
| - }
|
| -
|
| - @Override
|
| - public void setTitleToPageTitle() {
|
| - Tab currentTab = getToolbarDataProvider().getTab();
|
| - if (currentTab == null || TextUtils.isEmpty(currentTab.getTitle())) {
|
| - mTitleBar.setText("");
|
| - return;
|
| - }
|
| - mTitleBar.setText(currentTab.getTitle());
|
| - }
|
| -
|
| - @Override
|
| - protected void onNavigatedToDifferentPage() {
|
| - super.onNavigatedToDifferentPage();
|
| - setTitleToPageTitle();
|
| - }
|
| -
|
| - @Override
|
| - public void setUrlToPageUrl() {
|
| - if (getCurrentTab() == null) {
|
| - mUrlBar.setUrl("", null);
|
| - return;
|
| - }
|
| -
|
| - String url = getCurrentTab().getUrl().trim();
|
| -
|
| - if (NativePageFactory.isNativePageUrl(url, getCurrentTab().isIncognito())) {
|
| - // Don't show anything for Chrome URLs.
|
| - mUrlBar.setUrl("", null);
|
| - return;
|
| - }
|
| - String displayText = getToolbarDataProvider().getText();
|
| - Pair<String, String> urlText = LocationBarLayout.splitPathFromUrlDisplayText(displayText);
|
| - displayText = urlText.first;
|
| -
|
| - if (DomDistillerUrlUtils.isDistilledPage(url)) {
|
| - if (isStoredArticle(url)) {
|
| - Profile profile = getCurrentTab().getProfile();
|
| - DomDistillerService domDistillerService =
|
| - DomDistillerServiceFactory.getForProfile(profile);
|
| - String originalUrl = domDistillerService.getUrlForEntry(
|
| - DomDistillerUrlUtils.getValueForKeyInUrl(url, "entry_id"));
|
| - displayText =
|
| - DomDistillerTabUtils.getFormattedUrlFromOriginalDistillerUrl(originalUrl);
|
| - } else if (DomDistillerUrlUtils.getOriginalUrlFromDistillerUrl(url) != null) {
|
| - String originalUrl = DomDistillerUrlUtils.getOriginalUrlFromDistillerUrl(url);
|
| - displayText =
|
| - DomDistillerTabUtils.getFormattedUrlFromOriginalDistillerUrl(originalUrl);
|
| - }
|
| - }
|
| -
|
| - if (mUrlBar.setUrl(url, displayText)) {
|
| - mUrlBar.deEmphasizeUrl();
|
| - mUrlBar.emphasizeUrl();
|
| - }
|
| - }
|
| -
|
| - private boolean isStoredArticle(String url) {
|
| - DomDistillerService domDistillerService =
|
| - DomDistillerServiceFactory.getForProfile(Profile.getLastUsedProfile());
|
| - String entryIdFromUrl = DomDistillerUrlUtils.getValueForKeyInUrl(url, "entry_id");
|
| - if (TextUtils.isEmpty(entryIdFromUrl)) return false;
|
| - return domDistillerService.hasEntry(entryIdFromUrl);
|
| - }
|
| -
|
| - @Override
|
| - public void updateLoadingState(boolean updateUrl) {
|
| - if (updateUrl) setUrlToPageUrl();
|
| - updateSecurityIcon(getSecurityLevel());
|
| - }
|
| -
|
| - @Override
|
| - public void updateVisualsForState() {
|
| - Resources resources = getResources();
|
| - updateSecurityIcon(getSecurityLevel());
|
| - ColorStateList colorStateList = resources.getColorStateList(mUseDarkColors
|
| - ? R.color.dark_mode_tint : R.color.light_mode_tint);
|
| - mMenuButton.setTint(colorStateList);
|
| - mReturnButton.setTint(colorStateList);
|
| - mUrlBar.setUseDarkTextColors(mUseDarkColors);
|
| -
|
| - int titleTextColor = mUseDarkColors ? resources.getColor(R.color.url_emphasis_default_text)
|
| - : resources.getColor(R.color.url_emphasis_light_default_text);
|
| - mTitleBar.setTextColor(titleTextColor);
|
| -
|
| - if (getProgressBar() != null) {
|
| - int progressBarResource = !mUseDarkColors
|
| - ? R.drawable.progress_bar_white : R.drawable.progress_bar;
|
| - getProgressBar().setProgressDrawable(
|
| - ApiCompatibilityUtils.getDrawable(getResources(), progressBarResource));
|
| - }
|
| - }
|
| -
|
| - @Override
|
| - public void setMenuButtonHelper(final AppMenuButtonHelper helper) {
|
| - mMenuButton.setOnTouchListener(new OnTouchListener() {
|
| - @SuppressLint("ClickableViewAccessibility")
|
| - @Override
|
| - public boolean onTouch(View v, MotionEvent event) {
|
| - return helper.onTouch(v, event);
|
| - }
|
| - });
|
| - mMenuButton.setOnKeyListener(new OnKeyListener() {
|
| - @Override
|
| - public boolean onKey(View view, int keyCode, KeyEvent event) {
|
| - if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_UP) {
|
| - return helper.onEnterKeyPress(view);
|
| - }
|
| - return false;
|
| - }
|
| - });
|
| - }
|
| -
|
| - @Override
|
| - public View getMenuAnchor() {
|
| - return mMenuButton;
|
| - }
|
| -
|
| - @Override
|
| - protected void onConfigurationChanged(Configuration newConfig) {
|
| - super.onConfigurationChanged(newConfig);
|
| - setTitleToPageTitle();
|
| - setUrlToPageUrl();
|
| - }
|
| -
|
| - @Override
|
| - public ColorDrawable getBackground() {
|
| - return (ColorDrawable) super.getBackground();
|
| - }
|
| -
|
| - @Override
|
| - public void initializeControls(WindowDelegate windowDelegate, ActionBarDelegate delegate,
|
| - WindowAndroid windowAndroid) {
|
| - }
|
| -
|
| - private int getSecurityLevel() {
|
| - if (getCurrentTab() == null) return ConnectionSecurityLevel.NONE;
|
| - return getCurrentTab().getSecurityLevel();
|
| - }
|
| -
|
| - @Override
|
| - public void updateSecurityIcon(int securityLevel) {
|
| - // ImageView#setImageResource is no-op if given resource is the current one.
|
| - mSecurityButton.setImageResource(LocationBarLayout.getSecurityIconResource(
|
| - securityLevel, !shouldEmphasizeHttpsScheme()));
|
| -
|
| - if (mSecurityIconType == securityLevel) return;
|
| - mSecurityIconType = securityLevel;
|
| -
|
| - if (securityLevel == ConnectionSecurityLevel.NONE) {
|
| - // TODO(yusufo): Add an animator for hiding as well.
|
| - mSecurityButton.setVisibility(GONE);
|
| - } else {
|
| - if (mSecurityButtonShowAnimator.isRunning()) mSecurityButtonShowAnimator.cancel();
|
| - mSecurityButton.setVisibility(VISIBLE);
|
| - mSecurityButtonShowAnimator.start();
|
| - mUrlBar.deEmphasizeUrl();
|
| - }
|
| - mUrlBar.emphasizeUrl();
|
| - mUrlBar.invalidate();
|
| - }
|
| -
|
| - /**
|
| - * For extending classes to override and carry out the changes related with the primary color
|
| - * for the current tab changing.
|
| - */
|
| - @Override
|
| - protected void onPrimaryColorChanged() {
|
| - if (mBackgroundColorSet) return;
|
| - int primaryColor = getToolbarDataProvider().getPrimaryColor();
|
| - getBackground().setColor(primaryColor);
|
| - mUseDarkColors = !BrandColorUtils.shouldUseLightDrawablesForToolbar(primaryColor);
|
| - updateVisualsForState();
|
| - mBackgroundColorSet = true;
|
| - }
|
| -
|
| - @Override
|
| - public View getContainerView() {
|
| - return this;
|
| - }
|
| -
|
| - @Override
|
| - public void setDefaultTextEditActionModeCallback(CustomSelectionActionModeCallback callback) {
|
| - mUrlBar.setCustomSelectionActionModeCallback(callback);
|
| - }
|
| -
|
| - private void updateLayoutParams() {
|
| - int startMargin = 0;
|
| - int urlInfoContainerChildIndex = -1;
|
| - for (int i = 0; i < getChildCount(); i++) {
|
| - View childView = getChildAt(i);
|
| - if (childView.getVisibility() != GONE) {
|
| - LayoutParams childLayoutParams = (LayoutParams) childView.getLayoutParams();
|
| - if (ApiCompatibilityUtils.getMarginStart(childLayoutParams) != startMargin) {
|
| - ApiCompatibilityUtils.setMarginStart(childLayoutParams, startMargin);
|
| - childView.setLayoutParams(childLayoutParams);
|
| - }
|
| - if (childView == mUrlInfoContainer) {
|
| - urlInfoContainerChildIndex = i;
|
| - break;
|
| - }
|
| - int widthMeasureSpec;
|
| - int heightMeasureSpec;
|
| - if (childLayoutParams.width == LayoutParams.WRAP_CONTENT) {
|
| - widthMeasureSpec = MeasureSpec.makeMeasureSpec(
|
| - getMeasuredWidth(), MeasureSpec.AT_MOST);
|
| - } else if (childLayoutParams.width == LayoutParams.MATCH_PARENT) {
|
| - widthMeasureSpec = MeasureSpec.makeMeasureSpec(
|
| - getMeasuredWidth(), MeasureSpec.EXACTLY);
|
| - } else {
|
| - widthMeasureSpec = MeasureSpec.makeMeasureSpec(
|
| - childLayoutParams.width, MeasureSpec.EXACTLY);
|
| - }
|
| - if (childLayoutParams.height == LayoutParams.WRAP_CONTENT) {
|
| - heightMeasureSpec = MeasureSpec.makeMeasureSpec(
|
| - getMeasuredHeight(), MeasureSpec.AT_MOST);
|
| - } else if (childLayoutParams.height == LayoutParams.MATCH_PARENT) {
|
| - heightMeasureSpec = MeasureSpec.makeMeasureSpec(
|
| - getMeasuredHeight(), MeasureSpec.EXACTLY);
|
| - } else {
|
| - heightMeasureSpec = MeasureSpec.makeMeasureSpec(
|
| - childLayoutParams.height, MeasureSpec.EXACTLY);
|
| - }
|
| - childView.measure(widthMeasureSpec, heightMeasureSpec);
|
| - startMargin += childView.getMeasuredWidth();
|
| - }
|
| - }
|
| -
|
| - assert urlInfoContainerChildIndex != -1;
|
| - int urlInfoContainerMarginEnd = 0;
|
| - for (int i = urlInfoContainerChildIndex + 1; i < getChildCount(); i++) {
|
| - View childView = getChildAt(i);
|
| - if (childView.getVisibility() != GONE) {
|
| - urlInfoContainerMarginEnd += childView.getMeasuredWidth();
|
| - }
|
| - }
|
| - LayoutParams urlLayoutParams = (LayoutParams) mUrlInfoContainer.getLayoutParams();
|
| -
|
| - if (ApiCompatibilityUtils.getMarginEnd(urlLayoutParams) != urlInfoContainerMarginEnd) {
|
| - ApiCompatibilityUtils.setMarginEnd(urlLayoutParams, urlInfoContainerMarginEnd);
|
| - mUrlInfoContainer.setLayoutParams(urlLayoutParams);
|
| - }
|
| - }
|
| -
|
| - @Override
|
| - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
| - updateLayoutParams();
|
| - super.onMeasure(widthMeasureSpec, heightMeasureSpec);
|
| - }
|
| -
|
| - @Override
|
| - public LocationBar getLocationBar() {
|
| - return this;
|
| - }
|
| -
|
| - @Override
|
| - protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
|
| - if (changed) {
|
| - final int availWidth = mUrlInfoContainer.getMeasuredWidth()
|
| - - ApiCompatibilityUtils.getPaddingStart(mTitleBar)
|
| - - ApiCompatibilityUtils.getPaddingEnd(mTitleBar);
|
| - String currentText = mTitleBar.getText().toString();
|
| - String currentTitle;
|
| - Tab currentTab = getToolbarDataProvider().getTab();
|
| - if (currentTab == null || TextUtils.isEmpty(currentTab.getTitle())) {
|
| - currentTitle = "";
|
| - } else {
|
| - currentTitle = currentTab.getTitle();
|
| - }
|
| - String ellipsizedText = TextUtils.ellipsize(currentTitle,
|
| - mTitleBar.getPaint(), availWidth, TruncateAt.END).toString();
|
| - if (!ellipsizedText.equals(currentText)) mTitleBar.setText(ellipsizedText);
|
| - }
|
| - super.onLayout(changed, left, top, right, bottom);
|
| - }
|
| -
|
| - // Toolbar and LocationBar calls that are not relevant here.
|
| -
|
| - @Override
|
| - public void setToolbarDataProvider(ToolbarDataProvider model) { }
|
| -
|
| - @Override
|
| - public void onUrlPreFocusChanged(boolean gainFocus) {
|
| - }
|
| -
|
| - @Override
|
| - public void setUrlFocusChangeListener(UrlFocusChangeListener listener) { }
|
| -
|
| - @Override
|
| - public void setUrlBarFocus(boolean shouldBeFocused) { }
|
| -
|
| - @Override
|
| - public long getFirstUrlBarFocusTime() {
|
| - return 0;
|
| - }
|
| -
|
| - @Override
|
| - public void setIgnoreURLBarModification(boolean ignore) {
|
| - }
|
| -
|
| - @Override
|
| - public void hideSuggestions() {
|
| - }
|
| -
|
| - @Override
|
| - public void updateMicButtonState() {
|
| - }
|
| -
|
| - @Override
|
| - public void onTabLoadingNTP(NewTabPage ntp) {
|
| - }
|
| -
|
| - @Override
|
| - public void setAutocompleteProfile(Profile profile) {
|
| - }
|
| -
|
| - @Override
|
| - public void backKeyPressed() { }
|
| -}
|
|
|