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(); |
+ } |
+} |