Commit cdf050f6 authored by Christian Dullweber's avatar Christian Dullweber Committed by Commit Bot

Animate PageInfo height changes

Create a transition to animate changes in height when switching between
PageInfo subpages.

Video: https://crbug.com/1077766#c92
Bug: 1077766
Change-Id: I5fb7392db017951e80cce162d11e17240b3eacd0
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2517454
Commit-Queue: Christian Dullweber <dullweber@chromium.org>
Reviewed-by: default avatarEhimare Okoyomon <eokoyomon@chromium.org>
Cr-Commit-Position: refs/heads/master@{#825285}
parent 0206e5d5
......@@ -42,6 +42,7 @@ public class PageInfoContainer extends FrameLayout {
public Runnable urlTitleClickCallback;
public Runnable urlTitleLongClickCallback;
public Runnable backButtonClickCallback;
public Runnable beginHeightChangeAnimationCallback;
}
private PageInfoView.ElidedUrlTextView mExpandedUrlTitle;
private TextView mTruncatedUrlTitle;
......@@ -54,6 +55,8 @@ public class PageInfoContainer extends FrameLayout {
private final View mSubpageHeader;
private final TextView mSubpageTitle;
private Runnable mBeginHeightChangeAnimationCallback;
public PageInfoContainer(Context context) {
super(context);
LayoutInflater.from(context).inflate(R.layout.page_info_container, this, true);
......@@ -88,6 +91,8 @@ public class PageInfoContainer extends FrameLayout {
ChromeImageButton backButton = findViewById(R.id.subpage_back_button);
backButton.setOnClickListener(v -> params.backButtonClickCallback.run());
mBeginHeightChangeAnimationCallback = params.beginHeightChangeAnimationCallback;
}
private void initializeUrlView(View view, Params params) {
......@@ -121,13 +126,16 @@ public class PageInfoContainer extends FrameLayout {
replaceContentView(view, subPageTitle);
return;
}
// Create "fade-through" animation.
// TODO(crbug.com/1077766): Animate height change and set correct interpolator.
mWrapper.animate()
.setDuration(sOutDuration)
.alpha(0)
.setInterpolator(new AccelerateInterpolator())
.withEndAction(() -> {
if (mBeginHeightChangeAnimationCallback != null) {
mBeginHeightChangeAnimationCallback.run();
}
replaceContentView(view, subPageTitle);
mWrapper.setScaleX(sScale);
mWrapper.setScaleY(sScale);
......
......@@ -265,6 +265,8 @@ public class PageInfoController implements PageInfoMainController, ModalDialogPr
containerParams.urlTitleShown = viewParams.urlTitleShown;
containerParams.previewUIShown = viewParams.previewUIShown;
containerParams.previewUIIcon = mDelegate.getPreviewUiIcon();
containerParams.beginHeightChangeAnimationCallback =
() -> mDialog.beginHeightChangeTransition();
mContainer.setParams(containerParams);
mDelegate.getFavicon(mFullUrl, favicon -> {
if (favicon != null) {
......
......@@ -13,10 +13,15 @@ import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.transition.ChangeBounds;
import android.transition.Transition;
import android.transition.TransitionManager;
import android.transition.TransitionSet;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.animation.DecelerateInterpolator;
import android.widget.LinearLayout;
import androidx.annotation.NonNull;
......@@ -265,4 +270,34 @@ public class PageInfoDialog {
mCurrentAnimation = allAnimations;
return allAnimations;
}
public void beginHeightChangeTransition() {
// Set minimum height for scrollView parent to avoid scrollView getting clipped.
((ViewGroup) mScrollView.getParent()).setMinimumHeight(mScrollView.getHeight());
Transition transition = new ChangeBounds()
.setDuration(PageInfoContainer.sInDuration)
.addTarget(mScrollView)
.setInterpolator(new DecelerateInterpolator());
TransitionManager.beginDelayedTransition(mScrollView,
new TransitionSet()
.addTransition(transition)
.addListener(new Transition.TransitionListener() {
@Override
public void onTransitionStart(Transition transition) {}
@Override
public void onTransitionEnd(Transition transition) {
((ViewGroup) mScrollView.getParent()).setMinimumHeight(0);
}
@Override
public void onTransitionCancel(Transition transition) {}
@Override
public void onTransitionPause(Transition transition) {}
@Override
public void onTransitionResume(Transition transition) {}
}));
}
}
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