| Index: chrome/android/java/src/org/chromium/chrome/browser/toolbar/CustomTabToolbarAnimationDelegate.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/CustomTabToolbarAnimationDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/CustomTabToolbarAnimationDelegate.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..31a8b33ca9f5ea1facc8ac87319da5733688342e
|
| --- /dev/null
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/CustomTabToolbarAnimationDelegate.java
|
| @@ -0,0 +1,92 @@
|
| +// Copyright 2015 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +package org.chromium.chrome.browser.toolbar;
|
| +
|
| +import android.animation.Animator;
|
| +import android.animation.AnimatorListenerAdapter;
|
| +import android.animation.AnimatorSet;
|
| +import android.animation.ObjectAnimator;
|
| +import android.view.View;
|
| +
|
| +import org.chromium.chrome.R;
|
| +import org.chromium.ui.interpolators.BakedBezierInterpolator;
|
| +
|
| +/**
|
| + * A delegate class to handle animations in {@link CustomTabToolbar}.
|
| + */
|
| +class CustomTabToolbarAnimationDelegate {
|
| + private static final int CUSTOM_TAB_TOOLBAR_SLIDE_DURATION_MS = 200;
|
| + private static final int CUSTOM_TAB_TOOLBAR_FADE_DURATION_MS = 150;
|
| +
|
| + private final View mSecurityButton;
|
| + private final AnimatorSet mSecurityButtonShowAnimator;
|
| + private final AnimatorSet mSecurityButtonHideAnimator;
|
| +
|
| + /**
|
| + * Constructs an instance of {@link CustomTabToolbarAnimationDelegate}.
|
| + */
|
| + CustomTabToolbarAnimationDelegate(View securityButton, final View titleUrlContainer) {
|
| + mSecurityButton = securityButton;
|
| +
|
| + mSecurityButtonShowAnimator = new AnimatorSet();
|
| + int securityButtonWidth = securityButton.getResources()
|
| + .getDimensionPixelSize(R.dimen.location_bar_icon_width);
|
| + Animator translateRight = ObjectAnimator.ofFloat(titleUrlContainer,
|
| + View.TRANSLATION_X, securityButtonWidth);
|
| + translateRight.setInterpolator(BakedBezierInterpolator.TRANSFORM_CURVE);
|
| + translateRight.setDuration(CUSTOM_TAB_TOOLBAR_SLIDE_DURATION_MS);
|
| +
|
| + Animator fadeIn = ObjectAnimator.ofFloat(mSecurityButton, View.ALPHA, 1);
|
| + fadeIn.addListener(new AnimatorListenerAdapter() {
|
| + @Override
|
| + public void onAnimationStart(Animator animation) {
|
| + mSecurityButton.setVisibility(View.VISIBLE);
|
| + mSecurityButton.setAlpha(0f);
|
| + titleUrlContainer.setTranslationX(0);
|
| + }
|
| + });
|
| + fadeIn.setInterpolator(BakedBezierInterpolator.FADE_IN_CURVE);
|
| + fadeIn.setDuration(CUSTOM_TAB_TOOLBAR_FADE_DURATION_MS);
|
| + mSecurityButtonShowAnimator.playSequentially(translateRight, fadeIn);
|
| +
|
| + mSecurityButtonHideAnimator = new AnimatorSet();
|
| + Animator fadeOut = ObjectAnimator.ofFloat(mSecurityButton, View.ALPHA, 0);
|
| + fadeOut.setInterpolator(BakedBezierInterpolator.FADE_OUT_CURVE);
|
| + fadeOut.setDuration(CUSTOM_TAB_TOOLBAR_FADE_DURATION_MS);
|
| +
|
| + Animator translateLeft = ObjectAnimator.ofFloat(titleUrlContainer,
|
| + View.TRANSLATION_X, -securityButtonWidth);
|
| + translateLeft.setInterpolator(BakedBezierInterpolator.TRANSFORM_CURVE);
|
| + translateLeft.setDuration(CUSTOM_TAB_TOOLBAR_SLIDE_DURATION_MS);
|
| + translateLeft.addListener(new AnimatorListenerAdapter() {
|
| + @Override
|
| + public void onAnimationEnd(Animator animation) {
|
| + mSecurityButton.setVisibility(View.GONE);
|
| + titleUrlContainer.setTranslationX(0);
|
| + }
|
| + });
|
| + mSecurityButtonHideAnimator.playSequentially(fadeOut, translateLeft);
|
| + }
|
| +
|
| + /**
|
| + * Starts the animation to show the security button. Will do nothing if the button is already
|
| + * visible.
|
| + */
|
| + void showSecurityButton() {
|
| + if (mSecurityButton.getVisibility() == View.VISIBLE) return;
|
| + if (mSecurityButtonShowAnimator.isRunning()) mSecurityButtonShowAnimator.cancel();
|
| + mSecurityButtonShowAnimator.start();
|
| + }
|
| +
|
| + /**
|
| + * Starts the animation to hide the security button. Will do nothing if the button is not
|
| + * visible.
|
| + */
|
| + void hideSecurityButton() {
|
| + if (mSecurityButton.getVisibility() == View.GONE) return;
|
| + if (mSecurityButtonHideAnimator.isRunning()) return;
|
| + mSecurityButtonHideAnimator.start();
|
| + }
|
| +}
|
|
|