Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1585)

Side by Side Diff: chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarPhone.java

Issue 2134663002: Use only toolbar to transition from fakebox to real omnibox. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: review Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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.toolbar; 5 package org.chromium.chrome.browser.toolbar;
6 6
7 import android.animation.Animator; 7 import android.animation.Animator;
8 import android.animation.AnimatorListenerAdapter; 8 import android.animation.AnimatorListenerAdapter;
9 import android.animation.AnimatorSet; 9 import android.animation.AnimatorSet;
10 import android.animation.ObjectAnimator; 10 import android.animation.ObjectAnimator;
11 import android.animation.ValueAnimator; 11 import android.animation.ValueAnimator;
12 import android.animation.ValueAnimator.AnimatorUpdateListener; 12 import android.animation.ValueAnimator.AnimatorUpdateListener;
13 import android.annotation.SuppressLint; 13 import android.annotation.SuppressLint;
14 import android.content.Context; 14 import android.content.Context;
15 import android.content.res.ColorStateList; 15 import android.content.res.ColorStateList;
16 import android.content.res.Resources; 16 import android.content.res.Resources;
17 import android.graphics.Canvas; 17 import android.graphics.Canvas;
18 import android.graphics.Color; 18 import android.graphics.Color;
19 import android.graphics.Point; 19 import android.graphics.Point;
20 import android.graphics.PorterDuff; 20 import android.graphics.PorterDuff;
21 import android.graphics.Rect; 21 import android.graphics.Rect;
22 import android.graphics.drawable.BitmapDrawable; 22 import android.graphics.drawable.BitmapDrawable;
23 import android.graphics.drawable.ColorDrawable; 23 import android.graphics.drawable.ColorDrawable;
24 import android.graphics.drawable.Drawable; 24 import android.graphics.drawable.Drawable;
25 import android.graphics.drawable.TransitionDrawable; 25 import android.graphics.drawable.TransitionDrawable;
26 import android.os.Build; 26 import android.os.Build;
27 import android.os.SystemClock; 27 import android.os.SystemClock;
28 import android.support.v4.view.animation.FastOutSlowInInterpolator;
28 import android.text.TextUtils; 29 import android.text.TextUtils;
29 import android.util.AttributeSet; 30 import android.util.AttributeSet;
30 import android.util.Property; 31 import android.util.Property;
31 import android.view.Gravity; 32 import android.view.Gravity;
32 import android.view.MotionEvent; 33 import android.view.MotionEvent;
33 import android.view.View; 34 import android.view.View;
34 import android.view.View.OnClickListener; 35 import android.view.View.OnClickListener;
35 import android.view.View.OnLongClickListener; 36 import android.view.View.OnLongClickListener;
36 import android.view.ViewDebug; 37 import android.view.ViewDebug;
37 import android.view.ViewGroup; 38 import android.view.ViewGroup;
38 import android.view.WindowManager; 39 import android.view.WindowManager;
40 import android.view.animation.Interpolator;
39 import android.view.animation.LinearInterpolator; 41 import android.view.animation.LinearInterpolator;
40 import android.widget.FrameLayout; 42 import android.widget.FrameLayout;
41 import android.widget.ImageView; 43 import android.widget.ImageView;
42 import android.widget.PopupWindow.OnDismissListener; 44 import android.widget.PopupWindow.OnDismissListener;
43 import android.widget.TextView; 45 import android.widget.TextView;
44 46
45 import org.chromium.base.ApiCompatibilityUtils; 47 import org.chromium.base.ApiCompatibilityUtils;
46 import org.chromium.base.SysUtils; 48 import org.chromium.base.SysUtils;
47 import org.chromium.base.VisibleForTesting; 49 import org.chromium.base.VisibleForTesting;
48 import org.chromium.base.metrics.RecordUserAction; 50 import org.chromium.base.metrics.RecordUserAction;
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 private static final int URL_CLEAR_FOCUS_TABSTACK_DELAY_MS = 200; 87 private static final int URL_CLEAR_FOCUS_TABSTACK_DELAY_MS = 200;
86 private static final int URL_CLEAR_FOCUS_MENU_DELAY_MS = 250; 88 private static final int URL_CLEAR_FOCUS_MENU_DELAY_MS = 250;
87 89
88 private static final int TAB_SWITCHER_MODE_ENTER_ANIMATION_DURATION_MS = 200 ; 90 private static final int TAB_SWITCHER_MODE_ENTER_ANIMATION_DURATION_MS = 200 ;
89 private static final int TAB_SWITCHER_MODE_EXIT_NORMAL_ANIMATION_DURATION_MS = 200; 91 private static final int TAB_SWITCHER_MODE_EXIT_NORMAL_ANIMATION_DURATION_MS = 200;
90 private static final int TAB_SWITCHER_MODE_EXIT_FADE_ANIMATION_DURATION_MS = 100; 92 private static final int TAB_SWITCHER_MODE_EXIT_FADE_ANIMATION_DURATION_MS = 100;
91 private static final int TAB_SWITCHER_MODE_POST_EXIT_ANIMATION_DURATION_MS = 100; 93 private static final int TAB_SWITCHER_MODE_POST_EXIT_ANIMATION_DURATION_MS = 100;
92 94
93 private static final float UNINITIALIZED_PERCENT = -1f; 95 private static final float UNINITIALIZED_PERCENT = -1f;
94 96
95 private static final String TAG = "ToolbarPhone";
96
97 static final int LOCATION_BAR_TRANSPARENT_BACKGROUND_ALPHA = 51; 97 static final int LOCATION_BAR_TRANSPARENT_BACKGROUND_ALPHA = 51;
98 98
99 private LocationBarPhone mPhoneLocationBar; 99 private static final Interpolator NTP_SEARCH_BOX_EXPANSION_INTERPOLATOR =
100 new FastOutSlowInInterpolator();
101
102 private LocationBarPhone mLocationBar;
100 103
101 private ViewGroup mToolbarButtonsContainer; 104 private ViewGroup mToolbarButtonsContainer;
102 private ImageView mToggleTabStackButton; 105 private ImageView mToggleTabStackButton;
103 private NewTabButton mNewTabButton; 106 private NewTabButton mNewTabButton;
104 private TintedImageButton mReturnButton; 107 private TintedImageButton mReturnButton;
105 private TintedImageButton mHomeButton; 108 private TintedImageButton mHomeButton;
106 private TextView mUrlBar; 109 private TextView mUrlBar;
107 private View mUrlActionsContainer; 110 private View mUrlActionContainer;
108 private ImageView mToolbarShadow; 111 private ImageView mToolbarShadow;
109 112
110 private final int mProgressBackBackgroundColorWhite; 113 private final int mProgressBackBackgroundColorWhite;
111 114
112 private ObjectAnimator mTabSwitcherModeAnimation; 115 private ObjectAnimator mTabSwitcherModeAnimation;
113 private ObjectAnimator mDelayedTabSwitcherModeAnimation; 116 private ObjectAnimator mDelayedTabSwitcherModeAnimation;
114 117
115 private final List<View> mTabSwitcherModeViews = new ArrayList<View>(); 118 private final List<View> mTabSwitcherModeViews = new ArrayList<View>();
116 private final Set<View> mBrowsingModeViews = new HashSet<View>(); 119 private final Set<View> mBrowsingModeViews = new HashSet<View>();
117 @ViewDebug.ExportedProperty(category = "chrome") 120 @ViewDebug.ExportedProperty(category = "chrome")
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 */ 170 */
168 @ViewDebug.ExportedProperty(category = "chrome") 171 @ViewDebug.ExportedProperty(category = "chrome")
169 private float mUrlExpansionPercent; 172 private float mUrlExpansionPercent;
170 private AnimatorSet mUrlFocusLayoutAnimator; 173 private AnimatorSet mUrlFocusLayoutAnimator;
171 private boolean mDisableLocationBarRelayout; 174 private boolean mDisableLocationBarRelayout;
172 private boolean mLayoutLocationBarInFocusedMode; 175 private boolean mLayoutLocationBarInFocusedMode;
173 private int mUnfocusedLocationBarLayoutWidth; 176 private int mUnfocusedLocationBarLayoutWidth;
174 private int mUnfocusedLocationBarLayoutLeft; 177 private int mUnfocusedLocationBarLayoutLeft;
175 private boolean mUnfocusedLocationBarUsesTransparentBg; 178 private boolean mUnfocusedLocationBarUsesTransparentBg;
176 179
177 private int mUrlBackgroundAlpha = 255; 180 private int mLocationBarBackgroundAlpha = 255;
178 private float mNtpSearchBoxScrollPercent = UNINITIALIZED_PERCENT; 181 private float mNtpSearchBoxScrollPercent = UNINITIALIZED_PERCENT;
179 private ColorDrawable mToolbarBackground; 182 private ColorDrawable mToolbarBackground;
180 183
181 // The omnibox background (white with a shadow). 184 /** The omnibox background (white with a shadow). */
182 private Drawable mLocationBarBackground; 185 private Drawable mLocationBarBackground;
186
183 private boolean mForceDrawLocationBarBackground; 187 private boolean mForceDrawLocationBarBackground;
184 private TabSwitcherDrawable mTabSwitcherButtonDrawable; 188 private TabSwitcherDrawable mTabSwitcherButtonDrawable;
185 private TabSwitcherDrawable mTabSwitcherButtonDrawableLight; 189 private TabSwitcherDrawable mTabSwitcherButtonDrawableLight;
186 190
187 private final int mLightModeDefaultColor; 191 private final int mLightModeDefaultColor;
188 private final int mDarkModeDefaultColor; 192 private final int mDarkModeDefaultColor;
189 193
190 private final Rect mUrlViewportBounds = new Rect(); 194 /** The boundaries of the omnibox, without the NTP-specific offset applied. */
191 private final Rect mUrlBackgroundPadding = new Rect(); 195 private final Rect mLocationBarBackgroundBounds = new Rect();
196
197 private final Rect mLocationBarBackgroundPadding = new Rect();
192 private final Rect mBackgroundOverlayBounds = new Rect(); 198 private final Rect mBackgroundOverlayBounds = new Rect();
193 private final Rect mLocationBarBackgroundOffset = new Rect();
194 199
195 private final Rect mNtpSearchBoxOriginalBounds = new Rect(); 200 /** Offset applied to the bounds of the omnibox if we are showing a New Tab Page. */
196 private final Rect mNtpSearchBoxTransformedBounds = new Rect(); 201 private final Rect mLocationBarBackgroundNtpOffset = new Rect();
197 202
198 private final int mLocationBarInsets; 203 /**
204 * Offsets applied to the <i>contents</i> of the omnibox if we are showing a New Tab Page.
205 * This can be different from {@link #mLocationBarBackgroundNtpOffset} due t o the fact that we
206 * extend the omnibox horizontally beyond the screen boundaries when focused , to hide its
207 * rounded corners.
208 */
209 private float mLocationBarNtpOffsetLeft;
210 private float mLocationBarNtpOffsetRight;
211
212 private final Rect mNtpSearchBoxBounds = new Rect();
213 private final Point mNtpSearchBoxTranslation = new Point();
214
199 private final int mToolbarSidePadding; 215 private final int mToolbarSidePadding;
216 private final int mLocationBarVerticalMargin;
217 private final int mLocationBarBackgroundCornerRadius;
200 218
201 private ValueAnimator mBrandColorTransitionAnimation; 219 private ValueAnimator mBrandColorTransitionAnimation;
202 private boolean mBrandColorTransitionActive; 220 private boolean mBrandColorTransitionActive;
203 221
204 private View.OnClickListener mReturnButtonListener; 222 private View.OnClickListener mReturnButtonListener;
205 private boolean mIsHomeButtonEnabled; 223 private boolean mIsHomeButtonEnabled;
206 224
207 private LayoutUpdateHost mLayoutUpdateHost; 225 private LayoutUpdateHost mLayoutUpdateHost;
208 226
209 /** Callout for the tab switcher button. */ 227 /** Callout for the tab switcher button. */
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
270 288
271 /** 289 /**
272 * Constructs a ToolbarPhone object. 290 * Constructs a ToolbarPhone object.
273 * @param context The Context in which this View object is created. 291 * @param context The Context in which this View object is created.
274 * @param attrs The AttributeSet that was specified with this View. 292 * @param attrs The AttributeSet that was specified with this View.
275 */ 293 */
276 public ToolbarPhone(Context context, AttributeSet attrs) { 294 public ToolbarPhone(Context context, AttributeSet attrs) {
277 super(context, attrs); 295 super(context, attrs);
278 mToolbarSidePadding = getResources().getDimensionPixelOffset( 296 mToolbarSidePadding = getResources().getDimensionPixelOffset(
279 R.dimen.toolbar_edge_padding); 297 R.dimen.toolbar_edge_padding);
280 // Insets used for the PhoneLocatioBar background drawable. 298 mLocationBarVerticalMargin =
281 mLocationBarInsets = getResources().getDimensionPixelSize(R.dimen.locati on_bar_margin_top) 299 getResources().getDimensionPixelOffset(R.dimen.location_bar_vert ical_margin);
282 + getResources().getDimensionPixelSize(R.dimen.location_bar_marg in_bottom); 300 mLocationBarBackgroundCornerRadius =
301 getResources().getDimensionPixelOffset(R.dimen.location_bar_corn er_radius);
283 mProgressBackBackgroundColorWhite = ApiCompatibilityUtils.getColor(getRe sources(), 302 mProgressBackBackgroundColorWhite = ApiCompatibilityUtils.getColor(getRe sources(),
284 R.color.progress_bar_background_white); 303 R.color.progress_bar_background_white);
285 mLightModeDefaultColor = 304 mLightModeDefaultColor =
286 ApiCompatibilityUtils.getColor(getResources(), R.color.light_mod e_tint); 305 ApiCompatibilityUtils.getColor(getResources(), R.color.light_mod e_tint);
287 mDarkModeDefaultColor = 306 mDarkModeDefaultColor =
288 ApiCompatibilityUtils.getColor(getResources(), R.color.dark_mode _tint); 307 ApiCompatibilityUtils.getColor(getResources(), R.color.dark_mode _tint);
289 } 308 }
290 309
291 @Override 310 @Override
292 public void onFinishInflate() { 311 public void onFinishInflate() {
293 super.onFinishInflate(); 312 super.onFinishInflate();
294 mPhoneLocationBar = (LocationBarPhone) findViewById(R.id.location_bar); 313 mLocationBar = (LocationBarPhone) findViewById(R.id.location_bar);
295 314
296 mToolbarButtonsContainer = (ViewGroup) findViewById(R.id.toolbar_buttons ); 315 mToolbarButtonsContainer = (ViewGroup) findViewById(R.id.toolbar_buttons );
297 316
298 mReturnButton = (TintedImageButton) findViewById(R.id.return_button); 317 mReturnButton = (TintedImageButton) findViewById(R.id.return_button);
299 mHomeButton = (TintedImageButton) findViewById(R.id.home_button); 318 mHomeButton = (TintedImageButton) findViewById(R.id.home_button);
300 319
301 mUrlBar = (TextView) findViewById(R.id.url_bar); 320 mUrlBar = (TextView) findViewById(R.id.url_bar);
302 321
303 mUrlActionsContainer = findViewById(R.id.url_action_container); 322 mUrlActionContainer = findViewById(R.id.url_action_container);
304 323
305 mBrowsingModeViews.add(mPhoneLocationBar); 324 mBrowsingModeViews.add(mLocationBar);
306 325
307 mToolbarBackground = new ColorDrawable(getToolbarColorForVisualState(Vis ualState.NORMAL)); 326 mToolbarBackground = new ColorDrawable(getToolbarColorForVisualState(Vis ualState.NORMAL));
308 mTabSwitcherAnimationBgOverlay = 327 mTabSwitcherAnimationBgOverlay =
309 new ColorDrawable(getToolbarColorForVisualState(VisualState.NORM AL)); 328 new ColorDrawable(getToolbarColorForVisualState(VisualState.NORM AL));
310 329
311 mLocationBarBackground = 330 mLocationBarBackground =
312 ApiCompatibilityUtils.getDrawable(getResources(), R.drawable.ins et_textbox); 331 ApiCompatibilityUtils.getDrawable(getResources(), R.drawable.tex tbox);
313 mLocationBarBackground.getPadding(mUrlBackgroundPadding); 332 mLocationBarBackground.getPadding(mLocationBarBackgroundPadding);
314 mPhoneLocationBar.setPadding( 333 mLocationBar.setPadding(
315 mUrlBackgroundPadding.left, mUrlBackgroundPadding.top, 334 mLocationBarBackgroundPadding.left, mLocationBarBackgroundPaddin g.top,
316 mUrlBackgroundPadding.right, mUrlBackgroundPadding.bottom); 335 mLocationBarBackgroundPadding.right, mLocationBarBackgroundPaddi ng.bottom);
317 336
318 setLayoutTransition(null); 337 setLayoutTransition(null);
319 338
320 mMenuButtonWrapper.setVisibility(shouldShowMenuButton() ? View.VISIBLE : View.GONE); 339 mMenuButtonWrapper.setVisibility(shouldShowMenuButton() ? View.VISIBLE : View.GONE);
321 if (FeatureUtilities.isDocumentMode(getContext())) { 340 if (FeatureUtilities.isDocumentMode(getContext())) {
322 ApiCompatibilityUtils.setMarginEnd( 341 ApiCompatibilityUtils.setMarginEnd(
323 (MarginLayoutParams) mMenuButtonWrapper.getLayoutParams(), 342 (MarginLayoutParams) mMenuButtonWrapper.getLayoutParams(),
324 getResources().getDimensionPixelSize(R.dimen.document_toolba r_menu_offset)); 343 getResources().getDimensionPixelSize(R.dimen.document_toolba r_menu_offset));
325 hideTabSwitchingResources(); 344 hideTabSwitchingResources();
326 } else { 345 } else {
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
433 return mToggleTabStackButton; 452 return mToggleTabStackButton;
434 } 453 }
435 454
436 @Override 455 @Override
437 protected boolean handleEnterKeyPress() { 456 protected boolean handleEnterKeyPress() {
438 return getMenuButtonHelper().onEnterKeyPress(mMenuButton); 457 return getMenuButtonHelper().onEnterKeyPress(mMenuButton);
439 } 458 }
440 }); 459 });
441 onHomeButtonUpdate(HomepageManager.isHomepageEnabled(getContext())); 460 onHomeButtonUpdate(HomepageManager.isHomepageEnabled(getContext()));
442 461
443 updateVisualsForToolbarState(mIsInTabSwitcherMode); 462 updateVisualsForToolbarState();
444 } 463 }
445 464
446 @Override 465 @Override
447 public boolean onInterceptTouchEvent(MotionEvent ev) { 466 public boolean onInterceptTouchEvent(MotionEvent ev) {
448 // If the NTP is partially scrolled, prevent all touch events to the chi ld views. This 467 // If the NTP is partially scrolled, prevent all touch events to the chi ld views. This
449 // is to not allow a secondary touch event to trigger entering the tab s witcher, which 468 // is to not allow a secondary touch event to trigger entering the tab s witcher, which
450 // can lead to really odd snapshots and transitions to the switcher. 469 // can lead to really odd snapshots and transitions to the switcher.
451 if (mNtpSearchBoxScrollPercent != 0f 470 if (mNtpSearchBoxScrollPercent != 0f
452 && mNtpSearchBoxScrollPercent != 1f 471 && mNtpSearchBoxScrollPercent != 1f
453 && mNtpSearchBoxScrollPercent != UNINITIALIZED_PERCENT) { 472 && mNtpSearchBoxScrollPercent != UNINITIALIZED_PERCENT) {
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
503 if (!changed) return; 522 if (!changed) return;
504 } else { 523 } else {
505 updateUnfocusedLocationBarLayoutParams(); 524 updateUnfocusedLocationBarLayoutParams();
506 } 525 }
507 526
508 super.onMeasure(widthMeasureSpec, heightMeasureSpec); 527 super.onMeasure(widthMeasureSpec, heightMeasureSpec);
509 } 528 }
510 529
511 private void updateUnfocusedLocationBarLayoutParams() { 530 private void updateUnfocusedLocationBarLayoutParams() {
512 boolean hasVisibleViewPriorToUrlBar = false; 531 boolean hasVisibleViewPriorToUrlBar = false;
513 for (int i = 0; i < mPhoneLocationBar.getChildCount(); i++) { 532 for (int i = 0; i < mLocationBar.getChildCount(); i++) {
514 View child = mPhoneLocationBar.getChildAt(i); 533 View child = mLocationBar.getChildAt(i);
515 if (child == mUrlBar) break; 534 if (child == mUrlBar) break;
516 if (child.getVisibility() != GONE) { 535 if (child.getVisibility() != GONE) {
517 hasVisibleViewPriorToUrlBar = true; 536 hasVisibleViewPriorToUrlBar = true;
518 break; 537 break;
519 } 538 }
520 } 539 }
521 540
522 int leftViewBounds = getViewBoundsLeftOfLocationBar(mVisualState); 541 int leftViewBounds = getViewBoundsLeftOfLocationBar(mVisualState);
523 if (!hasVisibleViewPriorToUrlBar) leftViewBounds += mToolbarSidePadding;
524 int rightViewBounds = getViewBoundsRightOfLocationBar(mVisualState); 542 int rightViewBounds = getViewBoundsRightOfLocationBar(mVisualState);
525 543
526 if (!mPhoneLocationBar.hasVisibleViewsAfterUrlBarWhenUnfocused()) { 544 if (!hasVisibleViewPriorToUrlBar) {
545 if (ApiCompatibilityUtils.isLayoutRtl(mLocationBar)) {
546 rightViewBounds -= mToolbarSidePadding;
547 } else {
548 leftViewBounds += mToolbarSidePadding;
549 }
550 }
551
552 if (!mLocationBar.hasVisibleViewsAfterUrlBarWhenUnfocused()) {
527 // Add spacing between the end of the URL and the edge of the omnibo x drawable. 553 // Add spacing between the end of the URL and the edge of the omnibo x drawable.
528 // This only applies if there is no end aligned view that should be visible 554 // This only applies if there is no end aligned view that should be visible
529 // while the omnibox is unfocused. 555 // while the omnibox is unfocused.
530 if (ApiCompatibilityUtils.isLayoutRtl(mPhoneLocationBar)) { 556 if (ApiCompatibilityUtils.isLayoutRtl(mLocationBar)) {
531 leftViewBounds += mToolbarSidePadding; 557 leftViewBounds += mToolbarSidePadding;
532 } else { 558 } else {
533 rightViewBounds -= mToolbarSidePadding; 559 rightViewBounds -= mToolbarSidePadding;
534 } 560 }
535 } 561 }
536 562
537 mUnfocusedLocationBarLayoutWidth = rightViewBounds - leftViewBounds; 563 mUnfocusedLocationBarLayoutWidth = rightViewBounds - leftViewBounds;
538 mUnfocusedLocationBarLayoutLeft = leftViewBounds; 564 mUnfocusedLocationBarLayoutLeft = leftViewBounds;
539 } 565 }
540 566
(...skipping 26 matching lines...) Expand all
567 593
568 int width = 0; 594 int width = 0;
569 int leftMargin = 0; 595 int leftMargin = 0;
570 596
571 // Always update the unfocused layout params regardless of whether we ar e using 597 // Always update the unfocused layout params regardless of whether we ar e using
572 // those in this current layout pass as they are needed for animations. 598 // those in this current layout pass as they are needed for animations.
573 updateUnfocusedLocationBarLayoutParams(); 599 updateUnfocusedLocationBarLayoutParams();
574 600
575 if (mLayoutLocationBarInFocusedMode || mVisualState == VisualState.NEW_T AB_NORMAL) { 601 if (mLayoutLocationBarInFocusedMode || mVisualState == VisualState.NEW_T AB_NORMAL) {
576 int priorVisibleWidth = 0; 602 int priorVisibleWidth = 0;
577 for (int i = 0; i < mPhoneLocationBar.getChildCount(); i++) { 603 for (int i = 0; i < mLocationBar.getChildCount(); i++) {
578 View child = mPhoneLocationBar.getChildAt(i); 604 View child = mLocationBar.getChildAt(i);
579 if (child == mPhoneLocationBar.getFirstViewVisibleWhenFocused()) break; 605 if (child == mLocationBar.getFirstViewVisibleWhenFocused()) brea k;
580 if (child.getVisibility() == GONE) continue; 606 if (child.getVisibility() == GONE) continue;
581 priorVisibleWidth += child.getMeasuredWidth(); 607 priorVisibleWidth += child.getMeasuredWidth();
582 } 608 }
583 609
584 width = containerWidth - (2 * mToolbarSidePadding) + priorVisibleWid th; 610 width = containerWidth - (2 * mToolbarSidePadding) + priorVisibleWid th;
585 if (ApiCompatibilityUtils.isLayoutRtl(mPhoneLocationBar)) { 611 if (ApiCompatibilityUtils.isLayoutRtl(mLocationBar)) {
586 leftMargin = mToolbarSidePadding; 612 leftMargin = mToolbarSidePadding;
587 } else { 613 } else {
588 leftMargin = -priorVisibleWidth + mToolbarSidePadding; 614 leftMargin = -priorVisibleWidth + mToolbarSidePadding;
589 } 615 }
590 } else { 616 } else {
591 width = mUnfocusedLocationBarLayoutWidth; 617 width = mUnfocusedLocationBarLayoutWidth;
592 leftMargin = mUnfocusedLocationBarLayoutLeft; 618 leftMargin = mUnfocusedLocationBarLayoutLeft;
593 } 619 }
594 620
595 boolean changed = false; 621 boolean changed = false;
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
670 696
671 @Override 697 @Override
672 protected void dispatchDraw(Canvas canvas) { 698 protected void dispatchDraw(Canvas canvas) {
673 if (!mTextureCaptureMode && mToolbarBackground.getColor() != Color.TRANS PARENT) { 699 if (!mTextureCaptureMode && mToolbarBackground.getColor() != Color.TRANS PARENT) {
674 // Update to compensate for orientation changes. 700 // Update to compensate for orientation changes.
675 mToolbarBackground.setBounds(0, 0, getWidth(), getHeight()); 701 mToolbarBackground.setBounds(0, 0, getWidth(), getHeight());
676 mToolbarBackground.draw(canvas); 702 mToolbarBackground.draw(canvas);
677 } 703 }
678 704
679 if (mLocationBarBackground != null 705 if (mLocationBarBackground != null
680 && (mPhoneLocationBar.getVisibility() == VISIBLE || mTextureCapt ureMode)) { 706 && (mLocationBar.getVisibility() == VISIBLE || mTextureCaptureMo de)) {
681 updateUrlViewportBounds(mUrlViewportBounds, mVisualState, false); 707 updateLocationBarBackgroundBounds(mLocationBarBackgroundBounds, mVis ualState);
682 } 708 }
683 709
684 if (mTextureCaptureMode) { 710 if (mTextureCaptureMode) {
685 drawTabSwitcherAnimationOverlay(canvas, 0.f); 711 drawTabSwitcherAnimationOverlay(canvas, 0.f);
686 } else { 712 } else {
687 boolean tabSwitcherAnimationFinished = false; 713 boolean tabSwitcherAnimationFinished = false;
688 if (mTabSwitcherModeAnimation != null) { 714 if (mTabSwitcherModeAnimation != null) {
689 tabSwitcherAnimationFinished = !mTabSwitcherModeAnimation.isRunn ing(); 715 tabSwitcherAnimationFinished = !mTabSwitcherModeAnimation.isRunn ing();
690 716
691 // Perform the fade logic before super.dispatchDraw(canvas) so t hat we can properly 717 // Perform the fade logic before super.dispatchDraw(canvas) so t hat we can properly
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
725 && !getToolbarDataProvider().getNewTabPageForCurrentTab().isCard sUiEnabled()) { 751 && !getToolbarDataProvider().getNewTabPageForCurrentTab().isCard sUiEnabled()) {
726 return; 752 return;
727 } 753 }
728 754
729 mNtpSearchBoxScrollPercent = scrollPercentage; 755 mNtpSearchBoxScrollPercent = scrollPercentage;
730 updateUrlExpansionPercent(); 756 updateUrlExpansionPercent();
731 updateUrlExpansionAnimation(); 757 updateUrlExpansionAnimation();
732 } 758 }
733 759
734 /** 760 /**
735 * Calculate the bounds for UrlViewport and set them to out rect. 761 * Calculate the bounds for the location bar background and set them to {@co de out}.
736 */ 762 */
737 private void updateUrlViewportBounds(Rect out, VisualState visualState, 763 private void updateLocationBarBackgroundBounds(Rect out, VisualState visualS tate) {
738 boolean ignoreTranslationY) { 764 // Calculate the visible boundaries of the left and right most child vie ws of the
739 // Calculate the visible boundaries of the left and right most child vie ws 765 // location bar.
740 // of the location bar. 766 float expansion = visualState == VisualState.NEW_TAB_NORMAL ? 1 : mUrlEx pansionPercent;
741 int leftViewPosition = (int) MathUtils.interpolate( 767 int leftViewPosition = (int) MathUtils.interpolate(
742 getViewBoundsLeftOfLocationBar(visualState), 0f, mUrlExpansionPe rcent) 768 getViewBoundsLeftOfLocationBar(visualState),
743 - mUrlBackgroundPadding.left; 769 -mLocationBarBackgroundCornerRadius,
770 expansion);
744 int rightViewPosition = (int) MathUtils.interpolate( 771 int rightViewPosition = (int) MathUtils.interpolate(
745 getViewBoundsRightOfLocationBar(visualState), getWidth(), mUrlEx pansionPercent) 772 getViewBoundsRightOfLocationBar(visualState),
746 + mUrlBackgroundPadding.right; 773 getWidth() + mLocationBarBackgroundCornerRadius,
774 expansion);
747 775
748 // The bounds are set by the following: 776 // The bounds are set by the following:
749 // - The left most visible location bar child view. 777 // - The left most visible location bar child view.
750 // - The top of the viewport is aligned with the top of the location bar . 778 // - The top of the viewport is aligned with the top of the location bar .
751 // - The right most visible location bar child view. 779 // - The right most visible location bar child view.
752 // - The bottom of the viewport is aligned with the bottom of the locati on bar. 780 // - The bottom of the viewport is aligned with the bottom of the locati on bar.
753 // Additional padding can be applied for use during animations. 781 // Additional padding can be applied for use during animations.
754 float yOffset = ignoreTranslationY ? mPhoneLocationBar.getTop() : mPhone LocationBar.getY(); 782 int verticalMargin = (int) MathUtils.interpolate(mLocationBarVerticalMar gin, 0, expansion);
755
756 out.set(leftViewPosition, 783 out.set(leftViewPosition,
757 (int) (yOffset - (mUrlBackgroundPadding.top * mUrlExpansionPerce nt)), 784 mLocationBar.getTop() + verticalMargin,
758 rightViewPosition, 785 rightViewPosition,
759 (int) (yOffset + MathUtils.interpolate(mPhoneLocationBar.getMeas uredHeight(), 786 mLocationBar.getBottom() - verticalMargin);
760 getHeight() + mUrlBackgroundPadding.bottom, mUrlExpansio nPercent)));
761 } 787 }
762 788
763 /** 789 /**
764 * Updates percentage of current the URL focus change animation. 790 * Updates percentage of current the URL focus change animation.
765 * @param percent 1.0 is 100% focused, 0 is completely unfocused. 791 * @param percent 1.0 is 100% focused, 0 is completely unfocused.
766 */ 792 */
767 private void setUrlFocusChangePercent(float percent) { 793 private void setUrlFocusChangePercent(float percent) {
768 mUrlFocusChangePercent = percent; 794 mUrlFocusChangePercent = percent;
769 updateUrlExpansionPercent(); 795 updateUrlExpansionPercent();
770 updateUrlExpansionAnimation(); 796 updateUrlExpansionAnimation();
771 } 797 }
772 798
773 private void updateUrlExpansionPercent() { 799 private void updateUrlExpansionPercent() {
774 mUrlExpansionPercent = Math.max(mNtpSearchBoxScrollPercent, mUrlFocusCha ngePercent); 800 mUrlExpansionPercent = Math.max(mNtpSearchBoxScrollPercent, mUrlFocusCha ngePercent);
775 assert mUrlExpansionPercent >= 0; 801 assert mUrlExpansionPercent >= 0;
776 assert mUrlExpansionPercent <= 1; 802 assert mUrlExpansionPercent <= 1;
777 } 803 }
778 804
805 /**
806 * Updates the parameters relating to expanding the location bar, as the res ult of either a
807 * focus change or scrolling the New Tab Page.
808 */
779 private void updateUrlExpansionAnimation() { 809 private void updateUrlExpansionAnimation() {
780 if (mIsInTabSwitcherMode || isTabSwitcherAnimationRunning()) { 810 if (mIsInTabSwitcherMode || isTabSwitcherAnimationRunning()) {
781 mToolbarButtonsContainer.setVisibility(VISIBLE); 811 mToolbarButtonsContainer.setVisibility(VISIBLE);
782 return; 812 return;
783 } 813 }
784 814
785 mLocationBarBackgroundOffset.setEmpty(); 815 FrameLayout.LayoutParams locationBarLayoutParams = getFrameLayoutParams( mLocationBar);
786
787 FrameLayout.LayoutParams locationBarLayoutParams =
788 getFrameLayoutParams(mPhoneLocationBar);
789 int currentLeftMargin = locationBarLayoutParams.leftMargin; 816 int currentLeftMargin = locationBarLayoutParams.leftMargin;
790 int currentWidth = locationBarLayoutParams.width; 817 int currentWidth = locationBarLayoutParams.width;
791 818
792 float inversePercent = 1f - mUrlExpansionPercent; 819 float locationBarBaseTranslationX = mUnfocusedLocationBarLayoutLeft - cu rrentLeftMargin;
793 float locationBarTranslationX = mUnfocusedLocationBarLayoutLeft - curren tLeftMargin; 820 boolean isLocationBarRtl = ApiCompatibilityUtils.isLayoutRtl(mLocationBa r);
794 boolean isLocationBarRtl = ApiCompatibilityUtils.isLayoutRtl(mPhoneLocat ionBar);
795 if (isLocationBarRtl) { 821 if (isLocationBarRtl) {
796 locationBarTranslationX += mUnfocusedLocationBarLayoutWidth - curren tWidth; 822 locationBarBaseTranslationX += mUnfocusedLocationBarLayoutWidth - cu rrentWidth;
797 } 823 }
798 locationBarTranslationX *= inversePercent; 824 locationBarBaseTranslationX *= 1f - mUrlExpansionPercent;
799 825
800 mPhoneLocationBar.setTranslationX(locationBarTranslationX); 826 mLocationBarBackgroundNtpOffset.setEmpty();
827 mLocationBarNtpOffsetLeft = 0;
828 mLocationBarNtpOffsetRight = 0;
829
830 Tab currentTab = getToolbarDataProvider().getTab();
831 if (currentTab != null) {
832 NewTabPage ntp = getToolbarDataProvider().getNewTabPageForCurrentTab ();
833 // Explicitly use the focus change percentage here because it applie s scroll
834 // compensation that only applies during focus animations.
835 if (ntp != null && mUrlFocusChangeInProgress) {
836 ntp.setUrlFocusChangeAnimationPercent(mUrlFocusChangePercent);
837 }
838
839 if (isLocationBarShownInNTP()) {
840 updateNtpTransitionAnimation();
841 } else {
842 // Reset these values in case we transitioned to a different pag e during the
843 // transition.
844 resetNtpAnimationValues();
845 }
846 }
847
848 boolean isRtl = ApiCompatibilityUtils.isLayoutRtl(this);
849
850 float locationBarTranslationX;
851 // Get the padding straight from the location bar instead of
852 // |mLocationBarBackgroundPadding|, because it might be different in inc ognito mode.
853 if (isRtl) {
854 locationBarTranslationX = locationBarBaseTranslationX
855 + mLocationBarNtpOffsetRight - mLocationBar.getPaddingRight( );
856 } else {
857 locationBarTranslationX = locationBarBaseTranslationX
858 + mLocationBarNtpOffsetLeft + mLocationBar.getPaddingLeft();
859 }
860 mLocationBar.setTranslationX(locationBarTranslationX);
801 861
802 // Negate the location bar translation to keep the URL action container in the same 862 // Negate the location bar translation to keep the URL action container in the same
803 // place during the focus expansion. 863 // place during the focus expansion.
804 if (!isLocationBarRtl || ApiCompatibilityUtils.isLayoutRtl(this)) { 864 float urlActionsTranslationX = 0;
805 mUrlActionsContainer.setTranslationX(-locationBarTranslationX); 865 if (!isLocationBarRtl || isRtl) {
866 urlActionsTranslationX = -locationBarBaseTranslationX;
806 } 867 }
807 868
808 mPhoneLocationBar.setUrlFocusChangePercent(mUrlExpansionPercent); 869 if (isRtl) {
870 urlActionsTranslationX += mLocationBarNtpOffsetLeft - mLocationBarNt pOffsetRight;
871 } else {
872 urlActionsTranslationX += mLocationBarNtpOffsetRight - mLocationBarN tpOffsetLeft;
873 }
874 mUrlActionContainer.setTranslationX(urlActionsTranslationX);
875
876 mLocationBar.setUrlFocusChangePercent(mUrlExpansionPercent);
809 877
810 // Ensure the buttons are invisible after focusing the omnibox to preven t them from 878 // Ensure the buttons are invisible after focusing the omnibox to preven t them from
811 // accepting click events. 879 // accepting click events.
812 int toolbarButtonVisibility = mUrlExpansionPercent == 1f ? INVISIBLE : V ISIBLE; 880 int toolbarButtonVisibility = mUrlExpansionPercent == 1f ? INVISIBLE : V ISIBLE;
813 mToolbarButtonsContainer.setVisibility(toolbarButtonVisibility); 881 mToolbarButtonsContainer.setVisibility(toolbarButtonVisibility);
814 if (mReturnButton.getVisibility() != GONE) { 882 if (mReturnButton.getVisibility() != GONE) {
815 mReturnButton.setVisibility(toolbarButtonVisibility); 883 mReturnButton.setVisibility(toolbarButtonVisibility);
816 } 884 }
817 if (mHomeButton.getVisibility() != GONE) { 885 if (mHomeButton.getVisibility() != GONE) {
818 mHomeButton.setVisibility(toolbarButtonVisibility); 886 mHomeButton.setVisibility(toolbarButtonVisibility);
819 } 887 }
820 888
821 // Force an invalidation of the location bar to properly handle the clip ping of the URL 889 // Force an invalidation of the location bar to properly handle the clip ping of the URL
822 // bar text as a result of the url action container translations. 890 // bar text as a result of the url action container translations.
823 mPhoneLocationBar.invalidate(); 891 mLocationBar.invalidate();
824 invalidate(); 892 invalidate();
825
826 Tab currentTab = getToolbarDataProvider().getTab();
827 if (currentTab == null) return;
828
829 NewTabPage ntp = getToolbarDataProvider().getNewTabPageForCurrentTab();
830 // Explicitly use the focus change percentage here because it applies sc roll compensation
831 // that only applies during focus animations.
832 if (ntp != null && mUrlFocusChangeInProgress) {
833 ntp.setUrlFocusChangeAnimationPercent(mUrlFocusChangePercent);
834 }
835
836 if (!isLocationBarShownInNTP()) {
837 // Reset these values in case we transitioned to a different page du ring the
838 // transition.
839 resetNtpAnimationValues();
840 return;
841 }
842
843 updateNtpTransitionAnimation();
844 } 893 }
845 894
895 /**
896 * Reset the parameters for the New Tab Page transition animation (expanding the location bar as
897 * a result of scrolling the New Tab Page) to their default values.
898 */
846 private void resetNtpAnimationValues() { 899 private void resetNtpAnimationValues() {
847 mLocationBarBackgroundOffset.setEmpty(); 900 mLocationBarBackgroundNtpOffset.setEmpty();
848 mPhoneLocationBar.setTranslationY(0); 901 mLocationBar.setTranslationY(0);
849 if (!mUrlFocusChangeInProgress) { 902 if (!mUrlFocusChangeInProgress) {
850 mToolbarButtonsContainer.setTranslationY(0); 903 mToolbarButtonsContainer.setTranslationY(0);
851 mReturnButton.setTranslationY(0); 904 mReturnButton.setTranslationY(0);
852 mHomeButton.setTranslationY(0); 905 mHomeButton.setTranslationY(0);
853 } 906 }
854 mToolbarShadow.setAlpha(1f); 907 mToolbarShadow.setAlpha(1f);
855 mPhoneLocationBar.setAlpha(1); 908 mLocationBar.setAlpha(1);
856 mForceDrawLocationBarBackground = false; 909 mForceDrawLocationBarBackground = false;
857 mUrlBackgroundAlpha = isIncognito() 910 mLocationBarBackgroundAlpha = 255;
858 || (mUnfocusedLocationBarUsesTransparentBg 911 if (isIncognito()
859 && !mUrlFocusChangeInProgress 912 || (mUnfocusedLocationBarUsesTransparentBg && !mUrlFocusChangeIn Progress
860 && !mPhoneLocationBar.hasFocus()) 913 && !mLocationBar.hasFocus())) {
861 ? LOCATION_BAR_TRANSPARENT_BACKGROUND_ALPHA : 255; 914 mLocationBarBackgroundAlpha = LOCATION_BAR_TRANSPARENT_BACKGROUND_AL PHA;
915 }
862 setAncestorsShouldClipChildren(true); 916 setAncestorsShouldClipChildren(true);
863 mNtpSearchBoxScrollPercent = UNINITIALIZED_PERCENT; 917 mNtpSearchBoxScrollPercent = UNINITIALIZED_PERCENT;
864 updateUrlExpansionPercent(); 918 updateUrlExpansionPercent();
865 } 919 }
866 920
921 /**
922 * Updates the parameters of the New Tab Page transition animation (expandin g the location bar
923 * as a result of scrolling the New Tab Page).
924 */
867 private void updateNtpTransitionAnimation() { 925 private void updateNtpTransitionAnimation() {
868 if (mIsInTabSwitcherMode) return; 926 if (mIsInTabSwitcherMode) return;
869 927
870 NewTabPage ntp = getToolbarDataProvider().getNewTabPageForCurrentTab();
871
872 setAncestorsShouldClipChildren(mUrlExpansionPercent == 0f); 928 setAncestorsShouldClipChildren(mUrlExpansionPercent == 0f);
873 mToolbarShadow.setAlpha(0f); 929 mToolbarShadow.setAlpha(0f);
874 930
875 float growthPercent = 0f; 931 NewTabPage ntp = getToolbarDataProvider().getNewTabPageForCurrentTab();
876 if (ntp.isCardsUiEnabled() || mUrlExpansionPercent == 0f || mUrlExpansio nPercent == 1f) { 932 ntp.getSearchBoxBounds(mNtpSearchBoxBounds, mNtpSearchBoxTranslation);
877 growthPercent = 1f - mUrlExpansionPercent; 933 int locationBarTranslationY =
878 } else { 934 Math.max(0, (mNtpSearchBoxBounds.top - mLocationBar.getTop()));
879 // During the transition from search box to omnibox, keep the omnibo x drawing 935 mLocationBar.setTranslationY(locationBarTranslationY);
880 // at the same size of the search box for first 40% of the scroll tr ansition.
881 growthPercent = mUrlExpansionPercent <= 0.4f
882 ? 1f : Math.min(1f, (1f - mUrlExpansionPercent) * 1.66667f);
883 }
884
885 int paddingTop = mPhoneLocationBar.getPaddingTop();
886 int paddingBottom = mPhoneLocationBar.getPaddingBottom();
887
888 ntp.getSearchBoxBounds(mNtpSearchBoxOriginalBounds, mNtpSearchBoxTransfo rmedBounds);
889 float halfHeightDifference = (mNtpSearchBoxTransformedBounds.height()
890 - (mPhoneLocationBar.getMeasuredHeight() - paddingTop - paddingB ottom
891 + mLocationBarInsets)) / 2f;
892 mPhoneLocationBar.setTranslationY(growthPercent == 0f ? 0 : Math.max(0,
893 (mNtpSearchBoxTransformedBounds.top - mPhoneLocationBar.getTop()
894 + halfHeightDifference)));
895 if (!mUrlFocusChangeInProgress) { 936 if (!mUrlFocusChangeInProgress) {
896 setButtonsTranslationY(); 937 setButtonsTranslationY();
897 } 938 }
898 939
899 mLocationBarBackgroundOffset.set( 940 // Linearly interpolate between the bounds of the search box on the NTP and the omnibox
900 (int) ((mNtpSearchBoxTransformedBounds.left - mUrlViewportBounds .left 941 // background bounds. |shrinkage| is the scaling factor for the offset - - if it's 1, we are
901 - mPhoneLocationBar.getPaddingLeft()) * growthPercent), 942 // shrinking the omnibox down to the size of the search box.
902 (int) ((-halfHeightDifference - paddingTop) * growthPercent), 943 float shrinkage;
903 (int) ((mNtpSearchBoxTransformedBounds.right - mUrlViewportBound s.right 944 if (ntp.isCardsUiEnabled()) {
904 + mPhoneLocationBar.getPaddingRight()) * growthPercent), 945 shrinkage = 1f
905 (int) ((halfHeightDifference - paddingBottom + mLocationBarInset s) 946 - NTP_SEARCH_BOX_EXPANSION_INTERPOLATOR.getInterpolation(mUr lExpansionPercent);
906 * growthPercent));
907
908 // The transparency of the location bar is dependent on how different it s size is
909 // from the final value. This is based on how much growth is applied be tween the
910 // desired size of the location bar to its drawn size. The location bar then only
911 // starts becoming opaque once the growth is at least half done.
912 if (growthPercent >= 0.5f) {
913 mPhoneLocationBar.setAlpha(0);
914 } else { 947 } else {
915 mPhoneLocationBar.setAlpha(1f - growthPercent * 2); 948 // During the transition from middle of the NTP to the top, keep the omnibox drawing
949 // at the same size of the search box for first 40% of the scroll tr ansition.
950 shrinkage = Math.min(1f, (1f - mUrlExpansionPercent) * 1.66667f);
916 } 951 }
917 952
918 // Go from a transparent url background to a fully opaque one in the fir st 40% of the 953 int leftBoundDifference = mNtpSearchBoxBounds.left - mLocationBarBackgro undBounds.left;
919 // scroll transition. 954 int rightBoundDifference = mNtpSearchBoxBounds.right - mLocationBarBackg roundBounds.right;
920 mUrlBackgroundAlpha = 955 mLocationBarBackgroundNtpOffset.set(
921 mUrlExpansionPercent >= 0.4f ? 255 : (int) ((mUrlExpansionPercen t * 2.5f) * 255); 956 (int) Math.round(leftBoundDifference * shrinkage),
922 if (mUrlExpansionPercent == 1f) mUrlBackgroundAlpha = 255; 957 locationBarTranslationY,
923 mForceDrawLocationBarBackground = mUrlExpansionPercent != 0f; 958 (int) Math.round(rightBoundDifference * shrinkage),
959 locationBarTranslationY);
960
961 // The omnibox background bounds are outset by |mLocationBarBackgroundCo rnerRadius| in the
962 // fully expanded state (and only there!) to hide the rounded corners, s o undo that before
963 // applying the shrinkage factor.
964 mLocationBarNtpOffsetLeft =
965 (leftBoundDifference - mLocationBarBackgroundCornerRadius) * shr inkage;
966 mLocationBarNtpOffsetRight =
967 (rightBoundDifference + mLocationBarBackgroundCornerRadius) * sh rinkage;
968
969 mLocationBarBackgroundAlpha = mUrlExpansionPercent > 0f ? 255 : 0;
970 mForceDrawLocationBarBackground = mLocationBarBackgroundAlpha > 0;
971 float relativeAlpha = mLocationBarBackgroundAlpha / 255f;
972 mLocationBar.setAlpha(relativeAlpha);
973
974 // The search box on the NTP is visible if our omnibox is invisible, and vice-versa.
975 ntp.setSearchBoxAlpha(1f - relativeAlpha);
976
977 if (!ntp.isCardsUiEnabled()) {
978 ntp.setSearchProviderLogoAlpha(Math.max(1f - mUrlExpansionPercent * 2.5f, 0f));
979 }
924 } 980 }
925 981
926 private void setButtonsTranslationY() { 982 private void setButtonsTranslationY() {
927 float searchBoxTranslationY = 983 int searchBoxTranslationY = Math.min(mNtpSearchBoxTranslation.y, 0);
928 mNtpSearchBoxTransformedBounds.top - mNtpSearchBoxOriginalBounds .top;
929 searchBoxTranslationY = Math.min(searchBoxTranslationY, 0);
930 mToolbarButtonsContainer.setTranslationY(searchBoxTranslationY); 984 mToolbarButtonsContainer.setTranslationY(searchBoxTranslationY);
931 mReturnButton.setTranslationY(searchBoxTranslationY); 985 mReturnButton.setTranslationY(searchBoxTranslationY);
932 mHomeButton.setTranslationY(searchBoxTranslationY); 986 mHomeButton.setTranslationY(searchBoxTranslationY);
933 } 987 }
934 988
935 private void setAncestorsShouldClipChildren(boolean clip) { 989 private void setAncestorsShouldClipChildren(boolean clip) {
936 if (!isLocationBarShownInNTP()) return; 990 if (!isLocationBarShownInNTP()) return;
937 ViewGroup parent = this; 991 ViewGroup parent = this;
938 while (parent != null) { 992 while (parent != null) {
939 parent.setClipChildren(clip); 993 parent.setClipChildren(clip);
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
976 } 1030 }
977 if (mHomeButton.getVisibility() != View.GONE) { 1031 if (mHomeButton.getVisibility() != View.GONE) {
978 // Draw the New Tab button used in the URL view. 1032 // Draw the New Tab button used in the URL view.
979 previousAlpha = mHomeButton.getAlpha(); 1033 previousAlpha = mHomeButton.getAlpha();
980 mHomeButton.setAlpha(previousAlpha * floatAlpha); 1034 mHomeButton.setAlpha(previousAlpha * floatAlpha);
981 drawChild(canvas, mHomeButton, SystemClock.uptimeMillis()); 1035 drawChild(canvas, mHomeButton, SystemClock.uptimeMillis());
982 mHomeButton.setAlpha(previousAlpha); 1036 mHomeButton.setAlpha(previousAlpha);
983 } 1037 }
984 1038
985 // Draw the location/URL bar. 1039 // Draw the location/URL bar.
986 previousAlpha = mPhoneLocationBar.getAlpha(); 1040 previousAlpha = mLocationBar.getAlpha();
987 mPhoneLocationBar.setAlpha(previousAlpha * floatAlpha); 1041 mLocationBar.setAlpha(previousAlpha * floatAlpha);
988 // If the location bar is now fully transparent, do not bother drawing i t. 1042 // If the location bar is now fully transparent, do not bother drawing i t.
989 if (mPhoneLocationBar.getAlpha() != 0) { 1043 if (mLocationBar.getAlpha() != 0) {
990 drawChild(canvas, mPhoneLocationBar, SystemClock.uptimeMillis()); 1044 drawChild(canvas, mLocationBar, SystemClock.uptimeMillis());
991 } 1045 }
992 mPhoneLocationBar.setAlpha(previousAlpha); 1046 mLocationBar.setAlpha(previousAlpha);
993 1047
994 // Draw the tab stack button and associated text. 1048 // Draw the tab stack button and associated text.
995 translateCanvasToView(this, mToolbarButtonsContainer, canvas); 1049 translateCanvasToView(this, mToolbarButtonsContainer, canvas);
996 1050
997 if (mTabSwitcherAnimationTabStackDrawable != null && mToggleTabStackButt on != null 1051 if (mTabSwitcherAnimationTabStackDrawable != null && mToggleTabStackButt on != null
998 && mUrlExpansionPercent != 1f) { 1052 && mUrlExpansionPercent != 1f) {
999 // Draw the tab stack button image. 1053 // Draw the tab stack button image.
1000 canvas.save(); 1054 canvas.save();
1001 translateCanvasToView(mToolbarButtonsContainer, mToggleTabStackButto n, canvas); 1055 translateCanvasToView(mToolbarButtonsContainer, mToggleTabStackButto n, canvas);
1002 1056
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
1074 canvas.translate(to.getLeft(), to.getTop()); 1128 canvas.translate(to.getLeft(), to.getTop());
1075 if (!(to.getParent() instanceof View)) { 1129 if (!(to.getParent() instanceof View)) {
1076 throw new IllegalArgumentException("View 'to' was not a desenden t of 'from'."); 1130 throw new IllegalArgumentException("View 'to' was not a desenden t of 'from'.");
1077 } 1131 }
1078 to = (View) to.getParent(); 1132 to = (View) to.getParent();
1079 } 1133 }
1080 } 1134 }
1081 1135
1082 @Override 1136 @Override
1083 protected boolean drawChild(Canvas canvas, View child, long drawingTime) { 1137 protected boolean drawChild(Canvas canvas, View child, long drawingTime) {
1084 if (child == mPhoneLocationBar) return drawLocationBar(canvas, drawingTi me); 1138 if (child == mLocationBar) return drawLocationBar(canvas, drawingTime);
1085 boolean clipped = false; 1139 boolean clipped = false;
1086 1140
1087 if (mLocationBarBackground != null 1141 if (mLocationBarBackground != null
1088 && ((!mIsInTabSwitcherMode && !mTabSwitcherModeViews.contains(ch ild)) 1142 && ((!mIsInTabSwitcherMode && !mTabSwitcherModeViews.contains(ch ild))
1089 || (mIsInTabSwitcherMode && mBrowsingModeViews.contains( child)))) { 1143 || (mIsInTabSwitcherMode && mBrowsingModeViews.contains( child)))) {
1090 canvas.save(); 1144 canvas.save();
1091 if (mUrlExpansionPercent != 0f && mUrlViewportBounds.top < child.get Bottom()) { 1145
1146 int translationY = (int) mLocationBar.getTranslationY();
1147 int clipTop = mLocationBarBackgroundBounds.top - mLocationBarBackgro undPadding.top
1148 + translationY;
1149 if (mUrlExpansionPercent != 0f && clipTop < child.getBottom()) {
1092 // For other child views, use the inverse clipping of the URL vi ewport. 1150 // For other child views, use the inverse clipping of the URL vi ewport.
1093 // Only necessary during animations. 1151 // Only necessary during animations.
1094 // Hardware mode does not support unioned clip regions, so clip using the 1152 // Hardware mode does not support unioned clip regions, so clip using the
1095 // appropriate bounds based on whether the child is to the left or right of the 1153 // appropriate bounds based on whether the child is to the left or right of the
1096 // location bar. 1154 // location bar.
1097 boolean isLeft = (child == mNewTabButton || child == mReturnButt on 1155 boolean isLeft = (child == mNewTabButton || child == mReturnButt on
1098 || child == mHomeButton) ^ LocalizationUtils.isLayoutRtl (); 1156 || child == mHomeButton) ^ LocalizationUtils.isLayoutRtl ();
1099 1157
1100 int clipTop = mUrlViewportBounds.top; 1158 int clipBottom = mLocationBarBackgroundBounds.bottom
1101 int clipBottom = mUrlViewportBounds.bottom; 1159 + mLocationBarBackgroundPadding.bottom + translationY;
1102 boolean verticalClip = false; 1160 boolean verticalClip = false;
1103 if (mPhoneLocationBar.getTranslationY() > 0f) { 1161 if (translationY > 0f) {
1104 clipTop = child.getTop(); 1162 clipTop = child.getTop();
1105 clipBottom = mUrlViewportBounds.top; 1163 clipBottom = clipTop;
1106 verticalClip = true; 1164 verticalClip = true;
1107 } 1165 }
1108 1166
1109 if (isLeft) { 1167 if (isLeft) {
1110 canvas.clipRect( 1168 int clipRight = verticalClip ? child.getMeasuredWidth()
1111 0, clipTop, 1169 : mLocationBarBackgroundBounds.left
1112 verticalClip ? child.getMeasuredWidth() : mUrlViewpo rtBounds.left, 1170 - mLocationBarBackgroundPadding.left;
1113 clipBottom); 1171 canvas.clipRect(0, clipTop, clipRight, clipBottom);
1114 } else { 1172 } else {
1115 canvas.clipRect( 1173 int clipLeft = verticalClip ? 0 : mLocationBarBackgroundBoun ds.right
1116 verticalClip ? 0 : mUrlViewportBounds.right, 1174 + mLocationBarBackgroundPadding.right;
1117 clipTop, getMeasuredWidth(), clipBottom); 1175 canvas.clipRect(clipLeft, clipTop, getMeasuredWidth(), clipB ottom);
1118 } 1176 }
1119 } 1177 }
1120 clipped = true; 1178 clipped = true;
1121 } 1179 }
1122 boolean retVal = super.drawChild(canvas, child, drawingTime); 1180 boolean retVal = super.drawChild(canvas, child, drawingTime);
1123 if (clipped) canvas.restore(); 1181 if (clipped) canvas.restore();
1124 return retVal; 1182 return retVal;
1125 } 1183 }
1126 1184
1127 private boolean drawLocationBar(Canvas canvas, long drawingTime) { 1185 private boolean drawLocationBar(Canvas canvas, long drawingTime) {
1128 boolean clipped = false; 1186 boolean clipped = false;
1129 1187
1130 if (mLocationBarBackground != null && (!mIsInTabSwitcherMode || mTexture CaptureMode)) { 1188 if (mLocationBarBackground != null && (!mIsInTabSwitcherMode || mTexture CaptureMode)) {
1131 canvas.save(); 1189 canvas.save();
1132 int backgroundAlpha; 1190 int backgroundAlpha;
1133 if (mTabSwitcherModeAnimation != null) { 1191 if (mTabSwitcherModeAnimation != null) {
1134 // Fade out/in the location bar towards the beginning of the ani mations to avoid 1192 // Fade out/in the location bar towards the beginning of the ani mations to avoid
1135 // large jumps of stark white. 1193 // large jumps of stark white.
1136 backgroundAlpha = 1194 backgroundAlpha =
1137 (int) (Math.pow(mPhoneLocationBar.getAlpha(), 3) * mUrlB ackgroundAlpha); 1195 (int) (Math.pow(mLocationBar.getAlpha(), 3) * mLocationB arBackgroundAlpha);
1138 } else if (getToolbarDataProvider().isUsingBrandColor() 1196 } else if (getToolbarDataProvider().isUsingBrandColor()
1139 && !mBrandColorTransitionActive) { 1197 && !mBrandColorTransitionActive) {
1140 backgroundAlpha = mUnfocusedLocationBarUsesTransparentBg 1198 backgroundAlpha = mUnfocusedLocationBarUsesTransparentBg
1141 ? (int) (MathUtils.interpolate(LOCATION_BAR_TRANSPARENT_ BACKGROUND_ALPHA, 1199 ? (int) (MathUtils.interpolate(LOCATION_BAR_TRANSPARENT_ BACKGROUND_ALPHA,
1142 255, mUrlExpansionPercent)) 1200 255, mUrlExpansionPercent))
1143 : 255; 1201 : 255;
1144 } else { 1202 } else {
1145 backgroundAlpha = mUrlBackgroundAlpha; 1203 backgroundAlpha = mLocationBarBackgroundAlpha;
1146 } 1204 }
1147 mLocationBarBackground.setAlpha(backgroundAlpha); 1205 mLocationBarBackground.setAlpha(backgroundAlpha);
1148 1206
1149 if ((mPhoneLocationBar.getAlpha() > 0 || mForceDrawLocationBarBackgr ound) 1207 if ((mLocationBar.getAlpha() > 0 || mForceDrawLocationBarBackground)
1150 && !mTextureCaptureMode) { 1208 && !mTextureCaptureMode) {
1151 mLocationBarBackground.setBounds( 1209 mLocationBarBackground.setBounds(
1152 mUrlViewportBounds.left + mLocationBarBackgroundOffset.l eft, 1210 mLocationBarBackgroundBounds.left + mLocationBarBackgrou ndNtpOffset.left
1153 mUrlViewportBounds.top + mLocationBarBackgroundOffset.to p, 1211 - mLocationBarBackgroundPadding.left,
1154 mUrlViewportBounds.right + mLocationBarBackgroundOffset. right, 1212 mLocationBarBackgroundBounds.top + mLocationBarBackgroun dNtpOffset.top
1155 mUrlViewportBounds.bottom + mLocationBarBackgroundOffset .bottom); 1213 - mLocationBarBackgroundPadding.top,
1214 mLocationBarBackgroundBounds.right + mLocationBarBackgro undNtpOffset.right
1215 + mLocationBarBackgroundPadding.right,
1216 mLocationBarBackgroundBounds.bottom + mLocationBarBackgr oundNtpOffset.bottom
1217 + mLocationBarBackgroundPadding.bottom);
1156 mLocationBarBackground.draw(canvas); 1218 mLocationBarBackground.draw(canvas);
1157 } 1219 }
1158 1220
1159 float locationBarClipLeft = mUrlViewportBounds.left 1221 float locationBarClipLeft =
1160 + mPhoneLocationBar.getPaddingLeft() + mLocationBarBackgroun dOffset.left; 1222 mLocationBarBackgroundBounds.left + mLocationBarBackgroundNt pOffset.left;
1161 float locationBarClipRight = mUrlViewportBounds.right 1223 float locationBarClipRight =
1162 - mPhoneLocationBar.getPaddingRight() + mLocationBarBackgrou ndOffset.right; 1224 mLocationBarBackgroundBounds.right + mLocationBarBackgroundN tpOffset.right;
1163 float locationBarClipTop = mUrlViewportBounds.top + mPhoneLocationBa r.getPaddingTop() 1225 float locationBarClipTop =
1164 + mLocationBarBackgroundOffset.top; 1226 mLocationBarBackgroundBounds.top + mLocationBarBackgroundNtp Offset.top;
1165 float locationBarClipBottom = mUrlViewportBounds.bottom 1227 float locationBarClipBottom =
1166 - mPhoneLocationBar.getPaddingBottom() + mLocationBarBackgro undOffset.bottom; 1228 mLocationBarBackgroundBounds.bottom + mLocationBarBackground NtpOffset.bottom;
1167 1229
1168 // When unexpanded, the location bar's visible content boundaries ar e inset from the 1230 // When unexpanded, the location bar's visible content boundaries ar e inset from the
1169 // viewport used to draw the background. During expansion transitio ns, compensation 1231 // viewport used to draw the background. During expansion transitio ns, compensation
1170 // is applied to increase the clip regions such that when the locati on bar converts 1232 // is applied to increase the clip regions such that when the locati on bar converts
1171 // to the narrower collapsed layout that the visible content is the same. 1233 // to the narrower collapsed layout that the visible content is the same.
1172 if (mUrlExpansionPercent != 1f) { 1234 if (mUrlExpansionPercent != 1f) {
1173 int leftDelta = mUnfocusedLocationBarLayoutLeft 1235 int leftDelta = mUnfocusedLocationBarLayoutLeft
1174 - getViewBoundsLeftOfLocationBar(mVisualState); 1236 - getViewBoundsLeftOfLocationBar(mVisualState);
1175 int rightDelta = getViewBoundsRightOfLocationBar(mVisualState) 1237 int rightDelta = getViewBoundsRightOfLocationBar(mVisualState)
1176 - mUnfocusedLocationBarLayoutLeft 1238 - mUnfocusedLocationBarLayoutLeft
1177 - mUnfocusedLocationBarLayoutWidth; 1239 - mUnfocusedLocationBarLayoutWidth;
1178 float inversePercent = 1f - mUrlExpansionPercent; 1240 float inversePercent = 1f - mUrlExpansionPercent;
1179 locationBarClipLeft += leftDelta * inversePercent; 1241 locationBarClipLeft += leftDelta * inversePercent;
1180 locationBarClipRight -= rightDelta * inversePercent; 1242 locationBarClipRight -= rightDelta * inversePercent;
1181 } 1243 }
1182 1244
1183 // Clip the location bar child to the URL viewport calculated in onD raw. 1245 // Clip the location bar child to the URL viewport calculated in onD raw.
1184 canvas.clipRect( 1246 canvas.clipRect(
1185 locationBarClipLeft, locationBarClipTop, 1247 locationBarClipLeft, locationBarClipTop,
1186 locationBarClipRight, locationBarClipBottom); 1248 locationBarClipRight, locationBarClipBottom);
1187 clipped = true; 1249 clipped = true;
1188 } 1250 }
1189 1251
1190 boolean retVal = super.drawChild(canvas, mPhoneLocationBar, drawingTime) ; 1252 boolean retVal = super.drawChild(canvas, mLocationBar, drawingTime);
1191 1253
1192 if (clipped) canvas.restore(); 1254 if (clipped) canvas.restore();
1193 return retVal; 1255 return retVal;
1194 } 1256 }
1195 1257
1196 @Override 1258 @Override
1197 protected void onSizeChanged(int w, int h, int oldw, int oldh) { 1259 protected void onSizeChanged(int w, int h, int oldw, int oldh) {
1198 mBackgroundOverlayBounds.set(0, 0, w, mToolbarHeightWithoutShadow); 1260 mBackgroundOverlayBounds.set(0, 0, w, mToolbarHeightWithoutShadow);
1199 super.onSizeChanged(w, h, oldw, oldh); 1261 super.onSizeChanged(w, h, oldw, oldh);
1200 } 1262 }
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
1277 mTabSwitcherModeAnimation = null; 1339 mTabSwitcherModeAnimation = null;
1278 } 1340 }
1279 if (mDelayedTabSwitcherModeAnimation != null) { 1341 if (mDelayedTabSwitcherModeAnimation != null) {
1280 mDelayedTabSwitcherModeAnimation.end(); 1342 mDelayedTabSwitcherModeAnimation.end();
1281 mDelayedTabSwitcherModeAnimation = null; 1343 mDelayedTabSwitcherModeAnimation = null;
1282 } 1344 }
1283 1345
1284 // The Android framework calls onAnimationEnd() on listeners before Anim ator#isRunning() 1346 // The Android framework calls onAnimationEnd() on listeners before Anim ator#isRunning()
1285 // returns false. Sometimes this causes the progress bar visibility to b e set incorrectly. 1347 // returns false. Sometimes this causes the progress bar visibility to b e set incorrectly.
1286 // Update the visibility now that animations are set to null. (see crbug .com/606419) 1348 // Update the visibility now that animations are set to null. (see crbug .com/606419)
1287 updateProgressBarVisibility(mIsInTabSwitcherMode); 1349 updateProgressBarVisibility();
1288 } 1350 }
1289 1351
1290 @Override 1352 @Override
1291 public void getLocationBarContentRect(Rect outRect) { 1353 public void getLocationBarContentRect(Rect outRect) {
1292 mLocationBarBackground.getPadding(outRect); 1354 updateLocationBarBackgroundBounds(outRect, VisualState.NORMAL);
1293 int paddingLeft = outRect.left;
1294 int paddingTop = outRect.top;
1295 int paddingRight = outRect.right;
1296 int paddingBottom = outRect.bottom;
1297
1298 updateUrlViewportBounds(outRect, VisualState.NORMAL, true);
1299
1300 outRect.set(outRect.left + paddingLeft,
1301 outRect.top + paddingTop,
1302 outRect.right - paddingRight,
1303 outRect.bottom - paddingBottom);
1304 } 1355 }
1305 1356
1306 @Override 1357 @Override
1307 protected void onHomeButtonUpdate(boolean homeButtonEnabled) { 1358 protected void onHomeButtonUpdate(boolean homeButtonEnabled) {
1308 mIsHomeButtonEnabled = homeButtonEnabled; 1359 mIsHomeButtonEnabled = homeButtonEnabled;
1309 updateButtonVisibility(); 1360 updateButtonVisibility();
1310 } 1361 }
1311 1362
1312 @Override 1363 @Override
1313 public void onWindowVisibilityChanged(int visibility) { 1364 public void onWindowVisibilityChanged(int visibility) {
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1358 final boolean animateNormalToolbar) { 1409 final boolean animateNormalToolbar) {
1359 ObjectAnimator exitAnimation = 1410 ObjectAnimator exitAnimation =
1360 ObjectAnimator.ofFloat(this, mTabSwitcherModePercentProperty, 0. f); 1411 ObjectAnimator.ofFloat(this, mTabSwitcherModePercentProperty, 0. f);
1361 exitAnimation.setDuration(animateNormalToolbar 1412 exitAnimation.setDuration(animateNormalToolbar
1362 ? TAB_SWITCHER_MODE_EXIT_NORMAL_ANIMATION_DURATION_MS 1413 ? TAB_SWITCHER_MODE_EXIT_NORMAL_ANIMATION_DURATION_MS
1363 : TAB_SWITCHER_MODE_EXIT_FADE_ANIMATION_DURATION_MS); 1414 : TAB_SWITCHER_MODE_EXIT_FADE_ANIMATION_DURATION_MS);
1364 exitAnimation.setInterpolator(new LinearInterpolator()); 1415 exitAnimation.setInterpolator(new LinearInterpolator());
1365 exitAnimation.addListener(new AnimatorListenerAdapter() { 1416 exitAnimation.addListener(new AnimatorListenerAdapter() {
1366 @Override 1417 @Override
1367 public void onAnimationEnd(Animator animation) { 1418 public void onAnimationEnd(Animator animation) {
1368 updateViewsForTabSwitcherMode(mIsInTabSwitcherMode); 1419 updateViewsForTabSwitcherMode();
1369 } 1420 }
1370 }); 1421 });
1371 1422
1372 return exitAnimation; 1423 return exitAnimation;
1373 } 1424 }
1374 1425
1375 private ObjectAnimator createPostExitTabSwitcherAnimation() { 1426 private ObjectAnimator createPostExitTabSwitcherAnimation() {
1376 ObjectAnimator exitAnimation = ObjectAnimator.ofFloat( 1427 ObjectAnimator exitAnimation = ObjectAnimator.ofFloat(
1377 this, View.TRANSLATION_Y, -getHeight(), 0.f); 1428 this, View.TRANSLATION_Y, -getHeight(), 0.f);
1378 exitAnimation.setDuration(TAB_SWITCHER_MODE_POST_EXIT_ANIMATION_DURATION _MS); 1429 exitAnimation.setDuration(TAB_SWITCHER_MODE_POST_EXIT_ANIMATION_DURATION _MS);
1379 exitAnimation.setInterpolator(BakedBezierInterpolator.TRANSFORM_CURVE); 1430 exitAnimation.setInterpolator(BakedBezierInterpolator.TRANSFORM_CURVE);
1380 exitAnimation.addListener(new AnimatorListenerAdapter() { 1431 exitAnimation.addListener(new AnimatorListenerAdapter() {
1381 @Override 1432 @Override
1382 public void onAnimationStart(Animator animation) { 1433 public void onAnimationStart(Animator animation) {
1383 updateViewsForTabSwitcherMode(mIsInTabSwitcherMode); 1434 updateViewsForTabSwitcherMode();
1384 // On older builds, force an update to ensure the new visuals ar e used 1435 // On older builds, force an update to ensure the new visuals ar e used
1385 // when bringing in the toolbar. crbug.com/404571 1436 // when bringing in the toolbar. crbug.com/404571
1386 if (Build.VERSION.SDK_INT == Build.VERSION_CODES.JELLY_BEAN) { 1437 if (Build.VERSION.SDK_INT == Build.VERSION_CODES.JELLY_BEAN) {
1387 requestLayout(); 1438 requestLayout();
1388 } 1439 }
1389 } 1440 }
1390 1441
1391 @Override 1442 @Override
1392 public void onAnimationEnd(Animator animation) { 1443 public void onAnimationEnd(Animator animation) {
1393 mDelayedTabSwitcherModeAnimation = null; 1444 mDelayedTabSwitcherModeAnimation = null;
1394 updateShadowVisibility(mIsInTabSwitcherMode); 1445 updateShadowVisibility();
1395 updateViewsForTabSwitcherMode(mIsInTabSwitcherMode); 1446 updateViewsForTabSwitcherMode();
1396 } 1447 }
1397 }); 1448 });
1398 1449
1399 return exitAnimation; 1450 return exitAnimation;
1400 } 1451 }
1401 1452
1402 @Override 1453 @Override
1403 public void setTextureCaptureMode(boolean textureMode) { 1454 public void setTextureCaptureMode(boolean textureMode) {
1404 assert mTextureCaptureMode != textureMode; 1455 assert mTextureCaptureMode != textureMode;
1405 mTextureCaptureMode = textureMode; 1456 mTextureCaptureMode = textureMode;
1406 if (mTextureCaptureMode) { 1457 if (mTextureCaptureMode) {
1407 mToolbarShadow.setVisibility(VISIBLE); 1458 mToolbarShadow.setVisibility(VISIBLE);
1408 mPreTextureCaptureAlpha = getAlpha(); 1459 mPreTextureCaptureAlpha = getAlpha();
1409 setAlpha(1); 1460 setAlpha(1);
1410 } else { 1461 } else {
1411 setAlpha(mPreTextureCaptureAlpha); 1462 setAlpha(mPreTextureCaptureAlpha);
1412 updateShadowVisibility(mIsInTabSwitcherMode); 1463 updateShadowVisibility();
1413 mPreTextureCaptureAlpha = 1f; 1464 mPreTextureCaptureAlpha = 1f;
1414 } 1465 }
1415 } 1466 }
1416 1467
1417 private boolean isTabSwitcherAnimationRunning() { 1468 private boolean isTabSwitcherAnimationRunning() {
1418 return mUIAnimatingTabSwitcherTransition 1469 return mUIAnimatingTabSwitcherTransition
1419 || (mTabSwitcherModeAnimation != null && mTabSwitcherModeAnimati on.isRunning()) 1470 || (mTabSwitcherModeAnimation != null && mTabSwitcherModeAnimati on.isRunning())
1420 || (mDelayedTabSwitcherModeAnimation != null 1471 || (mDelayedTabSwitcherModeAnimation != null
1421 && mDelayedTabSwitcherModeAnimation.isRunning()) ; 1472 && mDelayedTabSwitcherModeAnimation.isRunning()) ;
1422 } 1473 }
1423 1474
1424 private void updateViewsForTabSwitcherMode(boolean isInTabSwitcherMode) { 1475 private void updateViewsForTabSwitcherMode() {
1425 int tabSwitcherViewsVisibility = isInTabSwitcherMode ? VISIBLE : INVISIB LE; 1476 int tabSwitcherViewsVisibility = mIsInTabSwitcherMode ? VISIBLE : INVISI BLE;
1426 int browsingViewsVisibility = isInTabSwitcherMode ? INVISIBLE : VISIBLE; 1477 int browsingViewsVisibility = mIsInTabSwitcherMode ? INVISIBLE : VISIBLE ;
1427 1478
1428 for (View view : mTabSwitcherModeViews) { 1479 for (View view : mTabSwitcherModeViews) {
1429 view.setVisibility(tabSwitcherViewsVisibility); 1480 view.setVisibility(tabSwitcherViewsVisibility);
1430 } 1481 }
1431 for (View view : mBrowsingModeViews) { 1482 for (View view : mBrowsingModeViews) {
1432 view.setVisibility(browsingViewsVisibility); 1483 view.setVisibility(browsingViewsVisibility);
1433 } 1484 }
1434 if (mShowMenuBadge) { 1485 if (mShowMenuBadge) {
1435 setMenuButtonContentDescription(!isInTabSwitcherMode); 1486 setMenuButtonContentDescription(!mIsInTabSwitcherMode);
1436 } 1487 }
1437 1488
1438 updateProgressBarVisibility(isInTabSwitcherMode); 1489 updateProgressBarVisibility();
1439 updateVisualsForToolbarState(isInTabSwitcherMode); 1490 updateVisualsForToolbarState();
1440 } 1491 }
1441 1492
1442 private void updateProgressBarVisibility(boolean isInTabSwitcherMode) { 1493 private void updateProgressBarVisibility() {
1443 getProgressBar().setVisibility( 1494 getProgressBar().setVisibility(
1444 isInTabSwitcherMode || isTabSwitcherAnimationRunning() ? INVISIB LE : VISIBLE); 1495 mIsInTabSwitcherMode || isTabSwitcherAnimationRunning() ? INVISI BLE : VISIBLE);
1445 } 1496 }
1446 1497
1447 @Override 1498 @Override
1448 protected void setContentAttached(boolean attached) { 1499 protected void setContentAttached(boolean attached) {
1449 updateVisualsForToolbarState(mIsInTabSwitcherMode); 1500 updateVisualsForToolbarState();
1450 } 1501 }
1451 1502
1452 @Override 1503 @Override
1453 protected void setTabSwitcherMode( 1504 protected void setTabSwitcherMode(
1454 boolean inTabSwitcherMode, boolean showToolbar, boolean delayAnimati on) { 1505 boolean inTabSwitcherMode, boolean showToolbar, boolean delayAnimati on) {
1455 if (mIsInTabSwitcherMode == inTabSwitcherMode) return; 1506 if (mIsInTabSwitcherMode == inTabSwitcherMode) return;
1507 mIsInTabSwitcherMode = inTabSwitcherMode;
1456 1508
1457 finishAnimations(); 1509 finishAnimations();
1458 1510
1459 mDelayingTabSwitcherAnimation = delayAnimation; 1511 mDelayingTabSwitcherAnimation = delayAnimation;
1460 1512
1461 if (inTabSwitcherMode) { 1513 if (inTabSwitcherMode) {
1462 if (mUrlFocusLayoutAnimator != null && mUrlFocusLayoutAnimator.isRun ning()) { 1514 if (mUrlFocusLayoutAnimator != null && mUrlFocusLayoutAnimator.isRun ning()) {
1463 mUrlFocusLayoutAnimator.end(); 1515 mUrlFocusLayoutAnimator.end();
1464 mUrlFocusLayoutAnimator = null; 1516 mUrlFocusLayoutAnimator = null;
1465 // After finishing the animation, force a re-layout of the locat ion bar, 1517 // After finishing the animation, force a re-layout of the locat ion bar,
1466 // so that the final translation position is correct (since onMe asure updates 1518 // so that the final translation position is correct (since onMe asure updates
1467 // won't happen in tab switcher mode). crbug.com/518795. 1519 // won't happen in tab switcher mode). crbug.com/518795.
1468 layoutLocationBar(getMeasuredWidth()); 1520 layoutLocationBar(getMeasuredWidth());
1469 updateUrlExpansionAnimation(); 1521 updateUrlExpansionAnimation();
1470 } 1522 }
1471 mNewTabButton.setEnabled(true); 1523 mNewTabButton.setEnabled(true);
1472 updateViewsForTabSwitcherMode(true); 1524 updateViewsForTabSwitcherMode();
1473 mTabSwitcherModeAnimation = createEnterTabSwitcherModeAnimation(); 1525 mTabSwitcherModeAnimation = createEnterTabSwitcherModeAnimation();
1474 } else { 1526 } else {
1475 if (!mDelayingTabSwitcherAnimation) { 1527 if (!mDelayingTabSwitcherAnimation) {
1476 mTabSwitcherModeAnimation = createExitTabSwitcherAnimation(showT oolbar); 1528 mTabSwitcherModeAnimation = createExitTabSwitcherAnimation(showT oolbar);
1477 } 1529 }
1478 mUIAnimatingTabSwitcherTransition = true; 1530 mUIAnimatingTabSwitcherTransition = true;
1479 } 1531 }
1480 1532
1481 mAnimateNormalToolbar = showToolbar; 1533 mAnimateNormalToolbar = showToolbar;
1482 mIsInTabSwitcherMode = inTabSwitcherMode;
1483 if (mTabSwitcherModeAnimation != null) mTabSwitcherModeAnimation.start() ; 1534 if (mTabSwitcherModeAnimation != null) mTabSwitcherModeAnimation.start() ;
1484 1535
1485 if (SysUtils.isLowEndDevice()) finishAnimations(); 1536 if (SysUtils.isLowEndDevice()) finishAnimations();
1486 1537
1487 postInvalidateOnAnimation(); 1538 postInvalidateOnAnimation();
1488 } 1539 }
1489 1540
1490 @Override 1541 @Override
1491 protected void onTabSwitcherTransitionFinished() { 1542 protected void onTabSwitcherTransitionFinished() {
1492 setAlpha(1.f); 1543 setAlpha(1.f);
1493 mClipRect = null; 1544 mClipRect = null;
1494 mUIAnimatingTabSwitcherTransition = false; 1545 mUIAnimatingTabSwitcherTransition = false;
1495 mTabSwitcherModePercent = mIsInTabSwitcherMode ? 1.0f : 0.0f; 1546 mTabSwitcherModePercent = mIsInTabSwitcherMode ? 1.0f : 0.0f;
1496 1547
1497 if (!mAnimateNormalToolbar) { 1548 if (!mAnimateNormalToolbar) {
1498 finishAnimations(); 1549 finishAnimations();
1499 updateVisualsForToolbarState(mIsInTabSwitcherMode); 1550 updateVisualsForToolbarState();
1500 } 1551 }
1501 1552
1502 if (mDelayingTabSwitcherAnimation) { 1553 if (mDelayingTabSwitcherAnimation) {
1503 mDelayingTabSwitcherAnimation = false; 1554 mDelayingTabSwitcherAnimation = false;
1504 mDelayedTabSwitcherModeAnimation = createPostExitTabSwitcherAnimatio n(); 1555 mDelayedTabSwitcherModeAnimation = createPostExitTabSwitcherAnimatio n();
1505 mDelayedTabSwitcherModeAnimation.start(); 1556 mDelayedTabSwitcherModeAnimation.start();
1506 } else { 1557 } else {
1507 updateViewsForTabSwitcherMode(mIsInTabSwitcherMode); 1558 updateViewsForTabSwitcherMode();
1508 } 1559 }
1509 } 1560 }
1510 1561
1511 private void updateOverlayDrawables(boolean isInTabSwitcherMode) { 1562 private void updateOverlayDrawables() {
1512 if (!isNativeLibraryReady()) return; 1563 if (!isNativeLibraryReady()) return;
1513 1564
1514 VisualState overlayState = computeVisualState(false); 1565 VisualState overlayState = computeVisualState(false);
1515 boolean visualStateChanged = mOverlayDrawablesVisualState != overlayStat e; 1566 boolean visualStateChanged = mOverlayDrawablesVisualState != overlayStat e;
1516 1567
1517 if (!visualStateChanged && mVisualState == VisualState.BRAND_COLOR 1568 if (!visualStateChanged && mVisualState == VisualState.BRAND_COLOR
1518 && getToolbarDataProvider().getPrimaryColor() 1569 && getToolbarDataProvider().getPrimaryColor()
1519 != mTabSwitcherAnimationBgOverlay.getColor()) { 1570 != mTabSwitcherAnimationBgOverlay.getColor()) {
1520 visualStateChanged = true; 1571 visualStateChanged = true;
1521 } 1572 }
1522 if (!visualStateChanged) return; 1573 if (!visualStateChanged) return;
1523 1574
1524 mOverlayDrawablesVisualState = overlayState; 1575 mOverlayDrawablesVisualState = overlayState;
1525 mTabSwitcherAnimationBgOverlay.setColor(getToolbarColorForVisualState( 1576 mTabSwitcherAnimationBgOverlay.setColor(getToolbarColorForVisualState(
1526 mOverlayDrawablesVisualState)); 1577 mOverlayDrawablesVisualState));
1527 1578
1528 setTabSwitcherAnimationMenuDrawable(); 1579 setTabSwitcherAnimationMenuDrawable();
1529 setUseLightDrawablesForTextureCapture(); 1580 setUseLightDrawablesForTextureCapture();
1530 1581
1531 if (!isInTabSwitcherMode && !mTextureCaptureMode && mLayoutUpdateHost != null) { 1582 if (!mIsInTabSwitcherMode && !mTextureCaptureMode && mLayoutUpdateHost ! = null) {
1532 // Request a layout update to trigger a texture capture if the tint color is changing 1583 // Request a layout update to trigger a texture capture if the tint color is changing
1533 // and we're not already in texture capture mode. This is necessary if the tab switcher 1584 // and we're not already in texture capture mode. This is necessary if the tab switcher
1534 // is entered immediately after a change to the tint color without a ny user interactions 1585 // is entered immediately after a change to the tint color without a ny user interactions
1535 // that would normally trigger a texture capture. 1586 // that would normally trigger a texture capture.
1536 mLayoutUpdateHost.requestUpdate(); 1587 mLayoutUpdateHost.requestUpdate();
1537 } 1588 }
1538 } 1589 }
1539 1590
1540 @Override 1591 @Override
1541 public void destroy() { 1592 public void destroy() {
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1587 } 1638 }
1588 }; 1639 };
1589 } 1640 }
1590 1641
1591 private void populateUrlFocusingAnimatorSet(List<Animator> animators) { 1642 private void populateUrlFocusingAnimatorSet(List<Animator> animators) {
1592 Animator animator = ObjectAnimator.ofFloat(this, mUrlFocusChangePercentP roperty, 1f); 1643 Animator animator = ObjectAnimator.ofFloat(this, mUrlFocusChangePercentP roperty, 1f);
1593 animator.setDuration(URL_FOCUS_CHANGE_ANIMATION_DURATION_MS); 1644 animator.setDuration(URL_FOCUS_CHANGE_ANIMATION_DURATION_MS);
1594 animator.setInterpolator(BakedBezierInterpolator.TRANSFORM_CURVE); 1645 animator.setInterpolator(BakedBezierInterpolator.TRANSFORM_CURVE);
1595 animators.add(animator); 1646 animators.add(animator);
1596 1647
1597 for (int i = 0; i < mPhoneLocationBar.getChildCount(); i++) { 1648 for (int i = 0; i < mLocationBar.getChildCount(); i++) {
1598 View childView = mPhoneLocationBar.getChildAt(i); 1649 View childView = mLocationBar.getChildAt(i);
1599 if (childView == mPhoneLocationBar.getFirstViewVisibleWhenFocused()) break; 1650 if (childView == mLocationBar.getFirstViewVisibleWhenFocused()) brea k;
1600 animator = ObjectAnimator.ofFloat(childView, ALPHA, 0); 1651 animator = ObjectAnimator.ofFloat(childView, ALPHA, 0);
1601 animator.setDuration(URL_FOCUS_CHANGE_ANIMATION_DURATION_MS); 1652 animator.setDuration(URL_FOCUS_CHANGE_ANIMATION_DURATION_MS);
1602 animator.setInterpolator(BakedBezierInterpolator.TRANSFORM_CURVE); 1653 animator.setInterpolator(BakedBezierInterpolator.TRANSFORM_CURVE);
1603 animators.add(animator); 1654 animators.add(animator);
1604 } 1655 }
1605 1656
1606 float density = getContext().getResources().getDisplayMetrics().density; 1657 float density = getContext().getResources().getDisplayMetrics().density;
1607 boolean isRtl = ApiCompatibilityUtils.isLayoutRtl(this); 1658 boolean isRtl = ApiCompatibilityUtils.isLayoutRtl(this);
1608 float toolbarButtonTranslationX = MathUtils.flipSignIf( 1659 float toolbarButtonTranslationX = MathUtils.flipSignIf(
1609 URL_FOCUS_TOOLBAR_BUTTONS_TRANSLATION_X_DP, isRtl) * density; 1660 URL_FOCUS_TOOLBAR_BUTTONS_TRANSLATION_X_DP, isRtl) * density;
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
1658 animator.setInterpolator(BakedBezierInterpolator.TRANSFORM_CURVE); 1709 animator.setInterpolator(BakedBezierInterpolator.TRANSFORM_CURVE);
1659 animators.add(animator); 1710 animators.add(animator);
1660 1711
1661 animator = ObjectAnimator.ofFloat(mToggleTabStackButton, ALPHA, 1); 1712 animator = ObjectAnimator.ofFloat(mToggleTabStackButton, ALPHA, 1);
1662 animator.setDuration(URL_FOCUS_TOOLBAR_BUTTONS_DURATION_MS); 1713 animator.setDuration(URL_FOCUS_TOOLBAR_BUTTONS_DURATION_MS);
1663 animator.setStartDelay(URL_CLEAR_FOCUS_TABSTACK_DELAY_MS); 1714 animator.setStartDelay(URL_CLEAR_FOCUS_TABSTACK_DELAY_MS);
1664 animator.setInterpolator(BakedBezierInterpolator.TRANSFORM_CURVE); 1715 animator.setInterpolator(BakedBezierInterpolator.TRANSFORM_CURVE);
1665 animators.add(animator); 1716 animators.add(animator);
1666 } 1717 }
1667 1718
1668 for (int i = 0; i < mPhoneLocationBar.getChildCount(); i++) { 1719 for (int i = 0; i < mLocationBar.getChildCount(); i++) {
1669 View childView = mPhoneLocationBar.getChildAt(i); 1720 View childView = mLocationBar.getChildAt(i);
1670 if (childView == mPhoneLocationBar.getFirstViewVisibleWhenFocused()) break; 1721 if (childView == mLocationBar.getFirstViewVisibleWhenFocused()) brea k;
1671 animator = ObjectAnimator.ofFloat(childView, ALPHA, 1); 1722 animator = ObjectAnimator.ofFloat(childView, ALPHA, 1);
1672 animator.setStartDelay(URL_FOCUS_TOOLBAR_BUTTONS_DURATION_MS); 1723 animator.setStartDelay(URL_FOCUS_TOOLBAR_BUTTONS_DURATION_MS);
1673 animator.setDuration(URL_CLEAR_FOCUS_MENU_DELAY_MS); 1724 animator.setDuration(URL_CLEAR_FOCUS_MENU_DELAY_MS);
1674 animator.setInterpolator(BakedBezierInterpolator.TRANSFORM_CURVE); 1725 animator.setInterpolator(BakedBezierInterpolator.TRANSFORM_CURVE);
1675 animators.add(animator); 1726 animators.add(animator);
1676 } 1727 }
1677 1728
1678 if (isLocationBarShownInNTP() && mNtpSearchBoxScrollPercent == 0f) retur n; 1729 if (isLocationBarShownInNTP() && mNtpSearchBoxScrollPercent == 0f) retur n;
1679 1730
1680 // The call to getLayout() can return null briefly during text changes, but as it 1731 // The call to getLayout() can return null briefly during text changes, but as it
1681 // is only needed for RTL calculations, we proceed if the location bar i s showing 1732 // is only needed for RTL calculations, we proceed if the location bar i s showing
1682 // LTR content. 1733 // LTR content.
1683 boolean isLocationBarRtl = ApiCompatibilityUtils.isLayoutRtl(mPhoneLocat ionBar); 1734 boolean isLocationBarRtl = ApiCompatibilityUtils.isLayoutRtl(mLocationBa r);
1684 if (!isLocationBarRtl || mUrlBar.getLayout() != null) { 1735 if (!isLocationBarRtl || mUrlBar.getLayout() != null) {
1685 int urlBarStartScrollX = 0; 1736 int urlBarStartScrollX = 0;
1686 if (isLocationBarRtl) { 1737 if (isLocationBarRtl) {
1687 urlBarStartScrollX = (int) mUrlBar.getLayout().getPrimaryHorizon tal(0); 1738 urlBarStartScrollX = (int) mUrlBar.getLayout().getPrimaryHorizon tal(0);
1688 urlBarStartScrollX -= mUrlBar.getWidth(); 1739 urlBarStartScrollX -= mUrlBar.getWidth();
1689 } 1740 }
1690 1741
1691 // If the scroll position matches the current scroll position, do no t trigger 1742 // If the scroll position matches the current scroll position, do no t trigger
1692 // this animation as it will cause visible jumps when going from cle ared text 1743 // this animation as it will cause visible jumps when going from cle ared text
1693 // back to page URLs (despite it continually calling setScrollX with the same 1744 // back to page URLs (despite it continually calling setScrollX with the same
1694 // number). 1745 // number).
1695 if (mUrlBar.getScrollX() != urlBarStartScrollX) { 1746 if (mUrlBar.getScrollX() != urlBarStartScrollX) {
1696 animator = ObjectAnimator.ofInt( 1747 animator = ObjectAnimator.ofInt(mUrlBar,
1697 mUrlBar, 1748 buildUrlScrollProperty(mLocationBar, isLocationBarRtl), urlBarStartScrollX);
1698 buildUrlScrollProperty(mPhoneLocationBar, isLocationBarR tl),
1699 urlBarStartScrollX);
1700 animator.setDuration(URL_FOCUS_CHANGE_ANIMATION_DURATION_MS); 1749 animator.setDuration(URL_FOCUS_CHANGE_ANIMATION_DURATION_MS);
1701 animator.setInterpolator(BakedBezierInterpolator.TRANSFORM_CURVE ); 1750 animator.setInterpolator(BakedBezierInterpolator.TRANSFORM_CURVE );
1702 animators.add(animator); 1751 animators.add(animator);
1703 } 1752 }
1704 } 1753 }
1705 } 1754 }
1706 1755
1707 @Override 1756 @Override
1708 public void onUrlFocusChange(final boolean hasFocus) { 1757 public void onUrlFocusChange(final boolean hasFocus) {
1709 super.onUrlFocusChange(hasFocus); 1758 super.onUrlFocusChange(hasFocus);
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
1765 1814
1766 @Override 1815 @Override
1767 public void onAnimationEnd(Animator animation) { 1816 public void onAnimationEnd(Animator animation) {
1768 if (mCanceled) return; 1817 if (mCanceled) return;
1769 1818
1770 if (!hasFocus) { 1819 if (!hasFocus) {
1771 mDisableLocationBarRelayout = false; 1820 mDisableLocationBarRelayout = false;
1772 mLayoutLocationBarInFocusedMode = false; 1821 mLayoutLocationBarInFocusedMode = false;
1773 requestLayout(); 1822 requestLayout();
1774 } 1823 }
1775 mPhoneLocationBar.finishUrlFocusChange(hasFocus); 1824 mLocationBar.finishUrlFocusChange(hasFocus);
1776 mUrlFocusChangeInProgress = false; 1825 mUrlFocusChangeInProgress = false;
1777 } 1826 }
1778 }); 1827 });
1779 mUrlFocusLayoutAnimator.start(); 1828 mUrlFocusLayoutAnimator.start();
1780 } 1829 }
1781 1830
1782 @Override 1831 @Override
1783 protected boolean shouldShowMenuButton() { 1832 protected boolean shouldShowMenuButton() {
1784 // Even in Document mode, the toolbar menu button will be shown while on the NTP. This 1833 // Even in Document mode, the toolbar menu button will be shown while on the NTP. This
1785 // allows the menu to translate off the screen on scroll to match the ta bbed behavior. 1834 // allows the menu to translate off the screen on scroll to match the ta bbed behavior.
1786 if (mVisualState == VisualState.NEW_TAB_NORMAL) return true; 1835 if (mVisualState == VisualState.NEW_TAB_NORMAL) return true;
1787 1836
1788 return !mPhoneLocationBar.showMenuButtonInOmnibox() && super.shouldShowM enuButton(); 1837 return !mLocationBar.showMenuButtonInOmnibox() && super.shouldShowMenuBu tton();
1789 } 1838 }
1790 1839
1791 @Override 1840 @Override
1792 protected void updateTabCountVisuals(int numberOfTabs) { 1841 protected void updateTabCountVisuals(int numberOfTabs) {
1793 if (mReturnButton != null) mReturnButton.setEnabled(true); 1842 if (mReturnButton != null) mReturnButton.setEnabled(true);
1794 if (mHomeButton != null) mHomeButton.setEnabled(true); 1843 if (mHomeButton != null) mHomeButton.setEnabled(true);
1795 1844
1796 if (mToggleTabStackButton == null) return; 1845 if (mToggleTabStackButton == null) return;
1797 1846
1798 mToggleTabStackButton.setEnabled(numberOfTabs >= 1); 1847 mToggleTabStackButton.setEnabled(numberOfTabs >= 1);
(...skipping 28 matching lines...) Expand all
1827 if (mTabSwitcherAnimationTabStackDrawable != null) { 1876 if (mTabSwitcherAnimationTabStackDrawable != null) {
1828 mTabSwitcherAnimationTabStackDrawable.updateForTabCount( 1877 mTabSwitcherAnimationTabStackDrawable.updateForTabCount(
1829 numberOfTabs, isIncognito()); 1878 numberOfTabs, isIncognito());
1830 } 1879 }
1831 } 1880 }
1832 1881
1833 @Override 1882 @Override
1834 protected void onTabContentViewChanged() { 1883 protected void onTabContentViewChanged() {
1835 super.onTabContentViewChanged(); 1884 super.onTabContentViewChanged();
1836 updateNtpAnimationState(); 1885 updateNtpAnimationState();
1837 updateVisualsForToolbarState(mIsInTabSwitcherMode); 1886 updateVisualsForToolbarState();
1838 } 1887 }
1839 1888
1840 @Override 1889 @Override
1841 protected void onTabOrModelChanged() { 1890 protected void onTabOrModelChanged() {
1842 super.onTabOrModelChanged(); 1891 super.onTabOrModelChanged();
1843 updateNtpAnimationState(); 1892 updateNtpAnimationState();
1844 updateVisualsForToolbarState(mIsInTabSwitcherMode); 1893 updateVisualsForToolbarState();
1845 1894
1846 if (mHasCheckedIfTabSwitcherCalloutIsNecessary) { 1895 if (mHasCheckedIfTabSwitcherCalloutIsNecessary) {
1847 dismissTabSwitcherCallout(); 1896 dismissTabSwitcherCallout();
1848 } else { 1897 } else {
1849 mHasCheckedIfTabSwitcherCalloutIsNecessary = true; 1898 mHasCheckedIfTabSwitcherCalloutIsNecessary = true;
1850 showTabSwitcherCalloutIfNecessary(); 1899 showTabSwitcherCalloutIfNecessary();
1851 } 1900 }
1852 } 1901 }
1853 1902
1854 private static boolean isVisualStateValidForBrandColorTransition(VisualState state) { 1903 private static boolean isVisualStateValidForBrandColorTransition(VisualState state) {
1855 return state == VisualState.NORMAL || state == VisualState.BRAND_COLOR; 1904 return state == VisualState.NORMAL || state == VisualState.BRAND_COLOR;
1856 } 1905 }
1857 1906
1858 @Override 1907 @Override
1859 protected void onPrimaryColorChanged(boolean shouldAnimate) { 1908 protected void onPrimaryColorChanged(boolean shouldAnimate) {
1860 super.onPrimaryColorChanged(shouldAnimate); 1909 super.onPrimaryColorChanged(shouldAnimate);
1861 if (mBrandColorTransitionActive) mBrandColorTransitionAnimation.cancel() ; 1910 if (mBrandColorTransitionActive) mBrandColorTransitionAnimation.cancel() ;
1862 if (!shouldAnimate || !isVisualStateValidForBrandColorTransition(mVisual State)) { 1911 if (!shouldAnimate || !isVisualStateValidForBrandColorTransition(mVisual State)) {
1863 return; 1912 return;
1864 } 1913 }
1865 final int initialColor = mToolbarBackground.getColor(); 1914 final int initialColor = mToolbarBackground.getColor();
1866 final int finalColor = getToolbarDataProvider().getPrimaryColor(); 1915 final int finalColor = getToolbarDataProvider().getPrimaryColor();
1867 if (initialColor == finalColor) return; 1916 if (initialColor == finalColor) return;
1868 1917
1869 boolean shouldUseOpaque = ColorUtils.shouldUseOpaqueTextboxBackground(fi nalColor); 1918 boolean shouldUseOpaque = ColorUtils.shouldUseOpaqueTextboxBackground(fi nalColor);
1870 final int initialAlpha = mUrlBackgroundAlpha; 1919 final int initialAlpha = mLocationBarBackgroundAlpha;
1871 final int finalAlpha = 1920 final int finalAlpha =
1872 shouldUseOpaque ? 255 : LOCATION_BAR_TRANSPARENT_BACKGROUND_ALPH A; 1921 shouldUseOpaque ? 255 : LOCATION_BAR_TRANSPARENT_BACKGROUND_ALPH A;
1873 final boolean shouldAnimateAlpha = initialAlpha != finalAlpha; 1922 final boolean shouldAnimateAlpha = initialAlpha != finalAlpha;
1874 mBrandColorTransitionAnimation = ValueAnimator.ofFloat(0, 1) 1923 mBrandColorTransitionAnimation = ValueAnimator.ofFloat(0, 1)
1875 .setDuration(THEME_COLOR_TRANSITION_DURATION); 1924 .setDuration(THEME_COLOR_TRANSITION_DURATION);
1876 mBrandColorTransitionAnimation.setInterpolator(BakedBezierInterpolator.T RANSFORM_CURVE); 1925 mBrandColorTransitionAnimation.setInterpolator(BakedBezierInterpolator.T RANSFORM_CURVE);
1877 mBrandColorTransitionAnimation.addUpdateListener(new AnimatorUpdateListe ner() { 1926 mBrandColorTransitionAnimation.addUpdateListener(new AnimatorUpdateListe ner() {
1878 @Override 1927 @Override
1879 public void onAnimationUpdate(ValueAnimator animation) { 1928 public void onAnimationUpdate(ValueAnimator animation) {
1880 float fraction = animation.getAnimatedFraction(); 1929 float fraction = animation.getAnimatedFraction();
1881 if (shouldAnimateAlpha) { 1930 if (shouldAnimateAlpha) {
1882 mUrlBackgroundAlpha = 1931 mLocationBarBackgroundAlpha =
1883 (int) (MathUtils.interpolate(initialAlpha, finalAlph a, fraction)); 1932 (int) (MathUtils.interpolate(initialAlpha, finalAlph a, fraction));
1884 } 1933 }
1885 updateToolbarBackground( 1934 updateToolbarBackground(
1886 ColorUtils.getColorWithOverlay(initialColor, finalColor, fraction)); 1935 ColorUtils.getColorWithOverlay(initialColor, finalColor, fraction));
1887 } 1936 }
1888 }); 1937 });
1889 mBrandColorTransitionAnimation.addListener(new AnimatorListenerAdapter() { 1938 mBrandColorTransitionAnimation.addListener(new AnimatorListenerAdapter() {
1890 @Override 1939 @Override
1891 public void onAnimationEnd(Animator animation) { 1940 public void onAnimationEnd(Animator animation) {
1892 mBrandColorTransitionActive = false; 1941 mBrandColorTransitionActive = false;
1893 updateVisualsForToolbarState(mIsInTabSwitcherMode); 1942 updateVisualsForToolbarState();
1894 } 1943 }
1895 }); 1944 });
1896 mBrandColorTransitionAnimation.start(); 1945 mBrandColorTransitionAnimation.start();
1897 mBrandColorTransitionActive = true; 1946 mBrandColorTransitionActive = true;
1898 } 1947 }
1899 1948
1900 private void updateNtpAnimationState() { 1949 private void updateNtpAnimationState() {
1901 // Store previous NTP scroll before calling reset as that clears this va lue. 1950 // Store previous NTP scroll before calling reset as that clears this va lue.
1902 boolean wasShowingNtp = mVisibleNewTabPage != null; 1951 boolean wasShowingNtp = mVisibleNewTabPage != null;
1903 float previousNtpScrollPercent = mNtpSearchBoxScrollPercent; 1952 float previousNtpScrollPercent = mNtpSearchBoxScrollPercent;
(...skipping 25 matching lines...) Expand all
1929 super.onDefaultSearchEngineChanged(); 1978 super.onDefaultSearchEngineChanged();
1930 // Post an update for the toolbar state, which will allow all other list eners 1979 // Post an update for the toolbar state, which will allow all other list eners
1931 // for the search engine change to update before we check on the state o f the 1980 // for the search engine change to update before we check on the state o f the
1932 // world for a UI update. 1981 // world for a UI update.
1933 // TODO(tedchoc): Move away from updating based on the search engine cha nge and instead 1982 // TODO(tedchoc): Move away from updating based on the search engine cha nge and instead
1934 // add the toolbar as a listener to the NewTabPage and ud pate only when 1983 // add the toolbar as a listener to the NewTabPage and ud pate only when
1935 // it notifies the listeners that it has changed its stat e. 1984 // it notifies the listeners that it has changed its stat e.
1936 post(new Runnable() { 1985 post(new Runnable() {
1937 @Override 1986 @Override
1938 public void run() { 1987 public void run() {
1939 updateVisualsForToolbarState(mIsInTabSwitcherMode); 1988 updateVisualsForToolbarState();
1940 updateNtpAnimationState(); 1989 updateNtpAnimationState();
1941 } 1990 }
1942 }); 1991 });
1943 } 1992 }
1944 1993
1945 @Override 1994 @Override
1946 protected void handleFindToolbarStateChange(boolean showing) { 1995 protected void handleFindToolbarStateChange(boolean showing) {
1947 setVisibility(showing ? View.GONE : View.VISIBLE); 1996 setVisibility(showing ? View.GONE : View.VISIBLE);
1948 TransitionDrawable shadowDrawable = (TransitionDrawable) mToolbarShadow. getDrawable(); 1997 TransitionDrawable shadowDrawable = (TransitionDrawable) mToolbarShadow. getDrawable();
1949 if (showing) { 1998 if (showing) {
1950 shadowDrawable.startTransition(URL_FOCUS_CHANGE_ANIMATION_DURATION_M S); 1999 shadowDrawable.startTransition(URL_FOCUS_CHANGE_ANIMATION_DURATION_M S);
1951 } else { 2000 } else {
1952 shadowDrawable.reverseTransition(URL_FOCUS_CHANGE_ANIMATION_DURATION _MS); 2001 shadowDrawable.reverseTransition(URL_FOCUS_CHANGE_ANIMATION_DURATION _MS);
1953 } 2002 }
1954 } 2003 }
1955 2004
1956 private boolean isLocationBarShownInNTP() { 2005 private boolean isLocationBarShownInNTP() {
1957 NewTabPage ntp = getToolbarDataProvider().getNewTabPageForCurrentTab(); 2006 NewTabPage ntp = getToolbarDataProvider().getNewTabPageForCurrentTab();
1958 return ntp != null && ntp.isLocationBarShownInNTP(); 2007 return ntp != null && ntp.isLocationBarShownInNTP();
1959 } 2008 }
1960 2009
1961 private void updateShadowVisibility(boolean isInTabSwitcherMode) { 2010 private void updateShadowVisibility() {
1962 boolean shouldDrawShadow = !isInTabSwitcherMode && !isTabSwitcherAnimati onRunning(); 2011 boolean shouldDrawShadow = !mIsInTabSwitcherMode && !isTabSwitcherAnimat ionRunning();
1963 int shadowVisibility = shouldDrawShadow ? View.VISIBLE : View.INVISIBLE; 2012 int shadowVisibility = shouldDrawShadow ? View.VISIBLE : View.INVISIBLE;
1964 2013
1965 if (mToolbarShadow.getVisibility() != shadowVisibility) { 2014 if (mToolbarShadow.getVisibility() != shadowVisibility) {
1966 mToolbarShadow.setVisibility(shadowVisibility); 2015 mToolbarShadow.setVisibility(shadowVisibility);
1967 } 2016 }
1968 } 2017 }
1969 2018
1970 private VisualState computeVisualState(boolean isInTabSwitcherMode) { 2019 private VisualState computeVisualState(boolean isInTabSwitcherMode) {
1971 if (isInTabSwitcherMode && isIncognito()) return VisualState.TAB_SWITCHE R_INCOGNITO; 2020 if (isInTabSwitcherMode && isIncognito()) return VisualState.TAB_SWITCHE R_INCOGNITO;
1972 if (isInTabSwitcherMode && !isIncognito()) return VisualState.TAB_SWITCH ER_NORMAL; 2021 if (isInTabSwitcherMode && !isIncognito()) return VisualState.TAB_SWITCH ER_NORMAL;
1973 if (isLocationBarShownInNTP()) return VisualState.NEW_TAB_NORMAL; 2022 if (isLocationBarShownInNTP()) return VisualState.NEW_TAB_NORMAL;
1974 if (isIncognito()) return VisualState.INCOGNITO; 2023 if (isIncognito()) return VisualState.INCOGNITO;
1975 if (getToolbarDataProvider().isUsingBrandColor()) return VisualState.BRA ND_COLOR; 2024 if (getToolbarDataProvider().isUsingBrandColor()) return VisualState.BRA ND_COLOR;
1976 return VisualState.NORMAL; 2025 return VisualState.NORMAL;
1977 } 2026 }
1978 2027
1979 private void updateVisualsForToolbarState(boolean isInTabSwitcherMode) { 2028 private void updateVisualsForToolbarState() {
1980 final boolean isIncognito = isIncognito(); 2029 final boolean isIncognito = isIncognito();
1981 2030
1982 VisualState newVisualState = computeVisualState(isInTabSwitcherMode); 2031 VisualState newVisualState = computeVisualState(mIsInTabSwitcherMode);
1983 2032
1984 // If we are navigating to or from a brand color, allow the transition a nimation 2033 // If we are navigating to or from a brand color, allow the transition a nimation
1985 // to run to completion as it will handle the triggering this path again and committing 2034 // to run to completion as it will handle the triggering this path again and committing
1986 // the proper visual state when it finishes. Brand color transitions ar e only valid 2035 // the proper visual state when it finishes. Brand color transitions ar e only valid
1987 // between normal non-incognito pages and brand color pages, so if the v isual states 2036 // between normal non-incognito pages and brand color pages, so if the v isual states
1988 // do not match then cancel the animation below. 2037 // do not match then cancel the animation below.
1989 if (mBrandColorTransitionActive 2038 if (mBrandColorTransitionActive
1990 && isVisualStateValidForBrandColorTransition(mVisualState) 2039 && isVisualStateValidForBrandColorTransition(mVisualState)
1991 && isVisualStateValidForBrandColorTransition(newVisualState)) { 2040 && isVisualStateValidForBrandColorTransition(newVisualState)) {
1992 return; 2041 return;
(...skipping 24 matching lines...) Expand all
2017 != mUnfocusedLocationBarUsesTransparentBg) { 2066 != mUnfocusedLocationBarUsesTransparentBg) {
2018 visualStateChanged = true; 2067 visualStateChanged = true;
2019 } else { 2068 } else {
2020 updateToolbarBackground(VisualState.BRAND_COLOR); 2069 updateToolbarBackground(VisualState.BRAND_COLOR);
2021 getProgressBar().setThemeColor(themeColorForProgressBar, isIncog nito()); 2070 getProgressBar().setThemeColor(themeColorForProgressBar, isIncog nito());
2022 } 2071 }
2023 } 2072 }
2024 2073
2025 mVisualState = newVisualState; 2074 mVisualState = newVisualState;
2026 2075
2027 updateOverlayDrawables(isInTabSwitcherMode); 2076 updateOverlayDrawables();
2028 updateShadowVisibility(isInTabSwitcherMode); 2077 updateShadowVisibility();
2078 updateUrlExpansionAnimation();
2029 if (!visualStateChanged) { 2079 if (!visualStateChanged) {
2030 if (mVisualState == VisualState.NEW_TAB_NORMAL) { 2080 if (mVisualState == VisualState.NEW_TAB_NORMAL) {
2031 updateNtpTransitionAnimation(); 2081 updateNtpTransitionAnimation();
2032 } 2082 }
2033 return; 2083 return;
2034 } 2084 }
2035 2085
2036 mUseLightToolbarDrawables = false; 2086 mUseLightToolbarDrawables = false;
2037 mUnfocusedLocationBarUsesTransparentBg = false; 2087 mUnfocusedLocationBarUsesTransparentBg = false;
2038 mUrlBackgroundAlpha = 255; 2088 mLocationBarBackgroundAlpha = 255;
2039 updateToolbarBackground(mVisualState); 2089 updateToolbarBackground(mVisualState);
2040 getProgressBar().setThemeColor(themeColorForProgressBar, isIncognito()); 2090 getProgressBar().setThemeColor(themeColorForProgressBar, isIncognito());
2041 2091
2042 if (isInTabSwitcherMode) { 2092 if (mIsInTabSwitcherMode) {
2043 mUseLightToolbarDrawables = true; 2093 mUseLightToolbarDrawables = true;
2044 mUrlBackgroundAlpha = LOCATION_BAR_TRANSPARENT_BACKGROUND_ALPHA; 2094 mLocationBarBackgroundAlpha = LOCATION_BAR_TRANSPARENT_BACKGROUND_AL PHA;
2045 getProgressBar().setBackgroundColor(mProgressBackBackgroundColorWhit e); 2095 getProgressBar().setBackgroundColor(mProgressBackBackgroundColorWhit e);
2046 getProgressBar().setForegroundColor(ApiCompatibilityUtils.getColor(g etResources(), 2096 getProgressBar().setForegroundColor(ApiCompatibilityUtils.getColor(g etResources(),
2047 R.color.progress_bar_foreground_white)); 2097 R.color.progress_bar_foreground_white));
2048 } else if (isIncognito()) { 2098 } else if (isIncognito()) {
2049 mUseLightToolbarDrawables = true; 2099 mUseLightToolbarDrawables = true;
2050 mUrlBackgroundAlpha = LOCATION_BAR_TRANSPARENT_BACKGROUND_ALPHA; 2100 mLocationBarBackgroundAlpha = LOCATION_BAR_TRANSPARENT_BACKGROUND_AL PHA;
2051 } else if (mVisualState == VisualState.BRAND_COLOR) { 2101 } else if (mVisualState == VisualState.BRAND_COLOR) {
2052 mUseLightToolbarDrawables = 2102 mUseLightToolbarDrawables =
2053 ColorUtils.shouldUseLightForegroundOnBackground(currentPrima ryColor); 2103 ColorUtils.shouldUseLightForegroundOnBackground(currentPrima ryColor);
2054 mUnfocusedLocationBarUsesTransparentBg = 2104 mUnfocusedLocationBarUsesTransparentBg =
2055 !ColorUtils.shouldUseOpaqueTextboxBackground(currentPrimaryC olor); 2105 !ColorUtils.shouldUseOpaqueTextboxBackground(currentPrimaryC olor);
2056 mUrlBackgroundAlpha = mUnfocusedLocationBarUsesTransparentBg 2106 mLocationBarBackgroundAlpha = mUnfocusedLocationBarUsesTransparentBg
2057 ? LOCATION_BAR_TRANSPARENT_BACKGROUND_ALPHA : 255; 2107 ? LOCATION_BAR_TRANSPARENT_BACKGROUND_ALPHA
2108 : 255;
2058 } 2109 }
2059 2110
2060 if (mToggleTabStackButton != null) { 2111 if (mToggleTabStackButton != null) {
2061 mToggleTabStackButton.setImageDrawable(mUseLightToolbarDrawables 2112 mToggleTabStackButton.setImageDrawable(mUseLightToolbarDrawables
2062 ? mTabSwitcherButtonDrawableLight : mTabSwitcherButtonDrawab le); 2113 ? mTabSwitcherButtonDrawableLight : mTabSwitcherButtonDrawab le);
2063 if (mTabSwitcherAnimationTabStackDrawable != null) { 2114 if (mTabSwitcherAnimationTabStackDrawable != null) {
2064 mTabSwitcherAnimationTabStackDrawable.setTint( 2115 mTabSwitcherAnimationTabStackDrawable.setTint(
2065 mUseLightToolbarDrawables ? mLightModeTint : mDarkModeTi nt); 2116 mUseLightToolbarDrawables ? mLightModeTint : mDarkModeTi nt);
2066 } 2117 }
2067 } 2118 }
2068 2119
2069 if (shouldShowMenuButton()) { 2120 if (shouldShowMenuButton()) {
2070 mMenuButton.setTint(mUseLightToolbarDrawables ? mLightModeTint : mDa rkModeTint); 2121 mMenuButton.setTint(mUseLightToolbarDrawables ? mLightModeTint : mDa rkModeTint);
2071 2122
2072 if (mShowMenuBadge && !isInTabSwitcherMode) { 2123 if (mShowMenuBadge && !mIsInTabSwitcherMode) {
2073 setAppMenuUpdateBadgeDrawable(mUseLightToolbarDrawables); 2124 setAppMenuUpdateBadgeDrawable(mUseLightToolbarDrawables);
2074 } 2125 }
2075 } 2126 }
2076 ColorStateList tint = mUseLightToolbarDrawables ? mLightModeTint : mDark ModeTint; 2127 ColorStateList tint = mUseLightToolbarDrawables ? mLightModeTint : mDark ModeTint;
2077 if (isReturnButtonVisible()) mReturnButton.setTint(tint); 2128 if (isReturnButtonVisible()) mReturnButton.setTint(tint);
2078 if (mIsHomeButtonEnabled) mHomeButton.setTint(tint); 2129 if (mIsHomeButtonEnabled) mHomeButton.setTint(tint);
2079 2130
2080 mPhoneLocationBar.updateVisualsForState(); 2131 mLocationBar.updateVisualsForState();
2081 // Remove the side padding for incognito to ensure the badge icon aligns correctly with the 2132 // Remove the side padding for incognito to ensure the badge icon aligns correctly with the
2082 // background of the location bar. 2133 // background of the location bar.
2083 if (isIncognito) { 2134 if (isIncognito) {
2084 mPhoneLocationBar.setPadding( 2135 mLocationBar.setPadding(
2085 0, mUrlBackgroundPadding.top, 0, mUrlBackgroundPadding.botto m); 2136 0, mLocationBarBackgroundPadding.top, 0, mLocationBarBackgro undPadding.bottom);
2086 } else { 2137 } else {
2087 mPhoneLocationBar.setPadding( 2138 mLocationBar.setPadding(
2088 mUrlBackgroundPadding.left, mUrlBackgroundPadding.top, 2139 mLocationBarBackgroundPadding.left, mLocationBarBackgroundPa dding.top,
2089 mUrlBackgroundPadding.right, mUrlBackgroundPadding.bottom); 2140 mLocationBarBackgroundPadding.right, mLocationBarBackgroundP adding.bottom);
2090 } 2141 }
2091 2142
2092 // We update the alpha before comparing the visual state as we need to c hange 2143 // We update the alpha before comparing the visual state as we need to c hange
2093 // its value when entering and exiting TabSwitcher mode. 2144 // its value when entering and exiting TabSwitcher mode.
2094 if (isLocationBarShownInNTP() && !isInTabSwitcherMode) { 2145 if (isLocationBarShownInNTP() && !mIsInTabSwitcherMode) {
2095 updateNtpTransitionAnimation(); 2146 updateNtpTransitionAnimation();
2096 } 2147 }
2097 2148
2098 if (isInTabSwitcherMode) mNewTabButton.setIsIncognito(isIncognito); 2149 if (mIsInTabSwitcherMode) mNewTabButton.setIsIncognito(isIncognito);
2099 2150
2100 CharSequence newTabContentDescription = getResources().getText( 2151 CharSequence newTabContentDescription = getResources().getText(
2101 isIncognito ? R.string.accessibility_toolbar_btn_new_incognito_t ab : 2152 isIncognito ? R.string.accessibility_toolbar_btn_new_incognito_t ab :
2102 R.string.accessibility_toolbar_btn_new_tab); 2153 R.string.accessibility_toolbar_btn_new_tab);
2103 if (mNewTabButton != null 2154 if (mNewTabButton != null
2104 && !newTabContentDescription.equals(mNewTabButton.getContentDesc ription())) { 2155 && !newTabContentDescription.equals(mNewTabButton.getContentDesc ription())) {
2105 mNewTabButton.setContentDescription(newTabContentDescription); 2156 mNewTabButton.setContentDescription(newTabContentDescription);
2106 } 2157 }
2107 2158
2108 getMenuButtonWrapper().setVisibility(shouldShowMenuButton() ? View.VISIB LE : View.GONE); 2159 getMenuButtonWrapper().setVisibility(shouldShowMenuButton() ? View.VISIB LE : View.GONE);
2109 } 2160 }
2110 2161
2111 @Override 2162 @Override
2112 public LocationBar getLocationBar() { 2163 public LocationBar getLocationBar() {
2113 return mPhoneLocationBar; 2164 return mLocationBar;
2114 } 2165 }
2115 2166
2116 @Override 2167 @Override
2117 public void showAppMenuUpdateBadge() { 2168 public void showAppMenuUpdateBadge() {
2118 super.showAppMenuUpdateBadge(); 2169 super.showAppMenuUpdateBadge();
2119 2170
2120 // Set up variables. 2171 // Set up variables.
2121 if (!mBrowsingModeViews.contains(mMenuBadge)) { 2172 if (!mBrowsingModeViews.contains(mMenuBadge)) {
2122 mBrowsingModeViews.add(mMenuBadge); 2173 mBrowsingModeViews.add(mMenuBadge);
2123 } 2174 }
2124 2175
2125 // Finish any in-progress animations and set the TabSwitcherAnimationMen uBadgeDrawables. 2176 // Finish any in-progress animations and set the TabSwitcherAnimationMen uBadgeDrawables.
2126 finishAnimations(); 2177 finishAnimations();
2127 setTabSwitcherAnimationMenuBadgeDrawable(); 2178 setTabSwitcherAnimationMenuBadgeDrawable();
2128 2179
2129 // Show the badge. 2180 // Show the badge.
2130 if (!mIsInTabSwitcherMode && shouldShowMenuButton()) { 2181 if (!mIsInTabSwitcherMode && shouldShowMenuButton()) {
2131 if (mUseLightToolbarDrawables) { 2182 if (mUseLightToolbarDrawables) {
2132 setAppMenuUpdateBadgeDrawable(mUseLightToolbarDrawables); 2183 setAppMenuUpdateBadgeDrawable(mUseLightToolbarDrawables);
2133 } 2184 }
2134 setAppMenuUpdateBadgeToVisible(true); 2185 setAppMenuUpdateBadgeToVisible(true);
2135 } 2186 }
2136 2187
2137 mPhoneLocationBar.showAppMenuUpdateBadge(true); 2188 mLocationBar.showAppMenuUpdateBadge(true);
2138 } 2189 }
2139 2190
2140 @Override 2191 @Override
2141 public void removeAppMenuUpdateBadge(boolean animate) { 2192 public void removeAppMenuUpdateBadge(boolean animate) {
2142 super.removeAppMenuUpdateBadge(animate); 2193 super.removeAppMenuUpdateBadge(animate);
2143 2194
2144 if (mBrowsingModeViews.contains(mMenuBadge)) { 2195 if (mBrowsingModeViews.contains(mMenuBadge)) {
2145 mBrowsingModeViews.remove(mMenuBadge); 2196 mBrowsingModeViews.remove(mMenuBadge);
2146 mTabSwitcherAnimationMenuBadgeDarkDrawable = null; 2197 mTabSwitcherAnimationMenuBadgeDarkDrawable = null;
2147 mTabSwitcherAnimationMenuBadgeLightDrawable = null; 2198 mTabSwitcherAnimationMenuBadgeLightDrawable = null;
2148 } 2199 }
2149 2200
2150 mPhoneLocationBar.removeAppMenuUpdateBadge(animate); 2201 mLocationBar.removeAppMenuUpdateBadge(animate);
2151 } 2202 }
2152 2203
2153 private void setTabSwitcherAnimationMenuDrawable() { 2204 private void setTabSwitcherAnimationMenuDrawable() {
2154 if (!shouldShowMenuButton()) return; 2205 if (!shouldShowMenuButton()) return;
2155 mTabSwitcherAnimationMenuDrawable = ApiCompatibilityUtils.getDrawable(ge tResources(), 2206 mTabSwitcherAnimationMenuDrawable = ApiCompatibilityUtils.getDrawable(ge tResources(),
2156 R.drawable.btn_menu); 2207 R.drawable.btn_menu);
2157 mTabSwitcherAnimationMenuDrawable.mutate(); 2208 mTabSwitcherAnimationMenuDrawable.mutate();
2158 mTabSwitcherAnimationMenuDrawable.setColorFilter( 2209 mTabSwitcherAnimationMenuDrawable.setColorFilter(
2159 isIncognito() ? mLightModeDefaultColor : mDarkModeDefaultColor, 2210 isIncognito() ? mLightModeDefaultColor : mDarkModeDefaultColor,
2160 PorterDuff.Mode.SRC_IN); 2211 PorterDuff.Mode.SRC_IN);
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
2227 }); 2278 });
2228 2279
2229 if (mFullscreenManager != null) { 2280 if (mFullscreenManager != null) {
2230 mFullscreenCalloutToken = 2281 mFullscreenCalloutToken =
2231 mFullscreenManager.showControlsPersistentAndClearOldToken( 2282 mFullscreenManager.showControlsPersistentAndClearOldToken(
2232 mFullscreenCalloutToken); 2283 mFullscreenCalloutToken);
2233 } 2284 }
2234 } 2285 }
2235 } 2286 }
2236 2287
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698