Commit 5c8797c2 authored by Theresa's avatar Theresa Committed by Commit Bot

[Modern] Update open new tab animation

BUG=835398

Change-Id: I7c34d074403767b45d2f26398ec97e37f0edacb9
Reviewed-on: https://chromium-review.googlesource.com/1114177
Commit-Queue: Theresa <twellington@chromium.org>
Reviewed-by: default avatarMatthew Jones <mdjones@chromium.org>
Reviewed-by: default avatarDavid Trainor <dtrainor@chromium.org>
Cr-Commit-Position: refs/heads/master@{#570261}
parent 6a744660
...@@ -532,6 +532,7 @@ ...@@ -532,6 +532,7 @@
<dimen name="sync_promo_view_padding">16dp</dimen> <dimen name="sync_promo_view_padding">16dp</dimen>
<dimen name="sad_tab_bullet_gap">12dp</dimen> <dimen name="sad_tab_bullet_gap">12dp</dimen>
<dimen name="sad_tab_bullet_leading_offset">1dp</dimen> <dimen name="sad_tab_bullet_leading_offset">1dp</dimen>
<dimen name="open_new_tab_animation_y_translation">-20dp</dimen>
<!-- Context Menu Dimensions --> <!-- Context Menu Dimensions -->
<dimen name="context_menu_header_image_width_padding">15dp</dimen> <dimen name="context_menu_header_image_width_padding">15dp</dimen>
......
...@@ -1932,8 +1932,7 @@ public abstract class Stack implements ChromeAnimation.Animatable<Stack.Property ...@@ -1932,8 +1932,7 @@ public abstract class Stack implements ChromeAnimation.Animatable<Stack.Property
mAnimationFactory = StackAnimation.createAnimationFactory(this, mLayout.getWidth(), mAnimationFactory = StackAnimation.createAnimationFactory(this, mLayout.getWidth(),
mLayout.getHeight(), mLayout.getTopBrowserControlsHeight(), mBorderTopPadding, mLayout.getHeight(), mLayout.getTopBrowserControlsHeight(), mBorderTopPadding,
opaqueTopPadding, mBorderLeftPadding, mCurrentMode); opaqueTopPadding, mBorderLeftPadding, mCurrentMode);
float dpToPx = mLayout.getContext().getResources().getDisplayMetrics().density; mViewAnimationFactory = new StackViewAnimation(mLayout.getContext().getResources());
mViewAnimationFactory = new StackViewAnimation(dpToPx, mLayout.getWidth());
if (mStackTabs == null) return; if (mStackTabs == null) return;
float width = mLayout.getWidth(); float width = mLayout.getWidth();
for (int i = 0; i < mStackTabs.length; i++) { for (int i = 0; i < mStackTabs.length; i++) {
......
...@@ -5,39 +5,38 @@ ...@@ -5,39 +5,38 @@
package org.chromium.chrome.browser.compositor.layouts.phone.stack; package org.chromium.chrome.browser.compositor.layouts.phone.stack;
import android.animation.Animator; import android.animation.Animator;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator; import android.animation.ObjectAnimator;
import android.animation.PropertyValuesHolder; import android.animation.PropertyValuesHolder;
import android.content.res.Resources;
import android.support.v4.view.animation.FastOutSlowInInterpolator;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams; import android.view.ViewGroup.LayoutParams;
import android.widget.FrameLayout; import android.widget.FrameLayout;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation.OverviewAnimationType; import org.chromium.chrome.browser.compositor.layouts.phone.stack.StackAnimation.OverviewAnimationType;
import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tabmodel.TabList; import org.chromium.chrome.browser.tabmodel.TabList;
import org.chromium.ui.base.LocalizationUtils;
import org.chromium.ui.interpolators.BakedBezierInterpolator;
/** /**
* A factory that builds Android view animations for the tab stack. * A factory that builds Android view animations for the tab stack.
*/ */
public class StackViewAnimation { public class StackViewAnimation {
private static final int TAB_OPENED_ANIMATION_DURATION = 300; private static final int TAB_OPENED_BG_ANIMATION_DURATION = 150;
private static final float TAB_OPENED_PIVOT_INSET_DP = 24.f; private static final int TAB_OPENED_VIEW_ANIMATION_DURATION = 350;
private final float mDpToPx; private final int mTranslationYStart;
private final float mWidthDp;
/** /**
* Constructor. * Constructor.
* NOTE: Pass in height and heightMinusBrowserControls if they're ever needed.
* *
* @param dpToPx The density of the device. * @param resources Android {@link Resources} used to retrieve dimensions.
* @param widthDp The width of the layout in dp.
*/ */
public StackViewAnimation(float dpToPx, float widthDp) { public StackViewAnimation(Resources resources) {
mDpToPx = dpToPx; mTranslationYStart =
mWidthDp = widthDp; resources.getDimensionPixelSize(R.dimen.open_new_tab_animation_y_translation);
} }
/** /**
...@@ -90,19 +89,26 @@ public class StackViewAnimation { ...@@ -90,19 +89,26 @@ public class StackViewAnimation {
} }
// Build the view animations // Build the view animations
PropertyValuesHolder xScale = PropertyValuesHolder.ofFloat(View.SCALE_X, 0.f, 1.f); PropertyValuesHolder viewAlpha = PropertyValuesHolder.ofFloat(View.ALPHA, 0.f, 1.f);
PropertyValuesHolder yScale = PropertyValuesHolder.ofFloat(View.SCALE_Y, 0.f, 1.f); ObjectAnimator viewAlphaAnimator = ObjectAnimator.ofPropertyValuesHolder(view, viewAlpha);
PropertyValuesHolder alpha = PropertyValuesHolder.ofFloat(View.ALPHA, 0.f, 1.f); viewAlphaAnimator.setDuration(TAB_OPENED_VIEW_ANIMATION_DURATION);
ObjectAnimator animator = ObjectAnimator.ofPropertyValuesHolder( viewAlphaAnimator.setInterpolator(new FastOutSlowInInterpolator());
bgView, xScale, yScale, alpha);
PropertyValuesHolder yTranslation =
animator.setDuration(TAB_OPENED_ANIMATION_DURATION); PropertyValuesHolder.ofFloat(View.TRANSLATION_Y, mTranslationYStart, 0.f);
animator.setInterpolator(BakedBezierInterpolator.TRANSFORM_FOLLOW_THROUGH_CURVE); ObjectAnimator viewYTranslationAnimator =
ObjectAnimator.ofPropertyValuesHolder(view, yTranslation);
float insetPx = TAB_OPENED_PIVOT_INSET_DP * mDpToPx; viewYTranslationAnimator.setDuration(TAB_OPENED_VIEW_ANIMATION_DURATION);
viewYTranslationAnimator.setInterpolator(new FastOutSlowInInterpolator());
bgView.setPivotY(TAB_OPENED_PIVOT_INSET_DP);
bgView.setPivotX(LocalizationUtils.isLayoutRtl() ? mWidthDp * mDpToPx - insetPx : insetPx); PropertyValuesHolder bgAlpha = PropertyValuesHolder.ofFloat(View.ALPHA, 0.f, 1.f);
return animator; ObjectAnimator bgAlphaAnimator = ObjectAnimator.ofPropertyValuesHolder(bgView, bgAlpha);
bgAlphaAnimator.setDuration(TAB_OPENED_BG_ANIMATION_DURATION);
bgAlphaAnimator.setInterpolator(new FastOutSlowInInterpolator());
AnimatorSet set = new AnimatorSet();
set.playTogether(viewAlphaAnimator, viewYTranslationAnimator, bgAlphaAnimator);
return set;
} }
} }
...@@ -61,6 +61,7 @@ public class MockResourcesForLayout extends MockResources { ...@@ -61,6 +61,7 @@ public class MockResourcesForLayout extends MockResources {
mFloats.put(R.dimen.tabswitcher_border_frame_padding_top, 50.f); mFloats.put(R.dimen.tabswitcher_border_frame_padding_top, 50.f);
mFloats.put(R.dimen.tabswitcher_border_frame_transparent_top, 3.f); mFloats.put(R.dimen.tabswitcher_border_frame_transparent_top, 3.f);
mFloats.put(R.dimen.tabswitcher_border_frame_transparent_side, 2.f); mFloats.put(R.dimen.tabswitcher_border_frame_transparent_side, 2.f);
mFloats.put(R.dimen.open_new_tab_animation_y_translation, -20.f);
mBooleans.put(org.chromium.chrome.R.bool.compositor_tab_title_fake_bold_text, true); mBooleans.put(org.chromium.chrome.R.bool.compositor_tab_title_fake_bold_text, true);
mStrings.put(R.string.tab_loading_default_title, "Loading..."); mStrings.put(R.string.tab_loading_default_title, "Loading...");
mFloats.put(org.chromium.chrome.R.dimen.overlay_panel_bar_height, 56.f); mFloats.put(org.chromium.chrome.R.dimen.overlay_panel_bar_height, 56.f);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment