| Index: chrome/android/java/src/org/chromium/chrome/browser/snackbar/SnackbarView.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/snackbar/SnackbarView.java b/chrome/android/java/src/org/chromium/chrome/browser/snackbar/SnackbarView.java
|
| index 008f269a6f5970a15d8c310513015c67c892da00..d79fdf00b96aab6ae70a07e04fb8303e9642a89b 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/snackbar/SnackbarView.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/snackbar/SnackbarView.java
|
| @@ -6,6 +6,7 @@ package org.chromium.chrome.browser.snackbar;
|
|
|
| import android.animation.Animator;
|
| import android.animation.AnimatorListenerAdapter;
|
| +import android.animation.AnimatorSet;
|
| import android.animation.ObjectAnimator;
|
| import android.app.Activity;
|
| import android.graphics.Bitmap;
|
| @@ -31,6 +32,7 @@ import org.chromium.base.ApiCompatibilityUtils;
|
| import org.chromium.chrome.R;
|
| import org.chromium.chrome.browser.ChromeActivity;
|
| import org.chromium.ui.base.DeviceFormFactor;
|
| +import org.chromium.ui.interpolators.BakedBezierInterpolator;
|
|
|
| /**
|
| * Visual representation of a snackbar. On phone it matches the width of the activity; on tablet it
|
| @@ -69,16 +71,20 @@ class SnackbarView {
|
| private final Behavior<View> mBehavior = new Behavior<View>() {
|
| @Override
|
| public boolean onInterceptTouchEvent(CoordinatorLayout parent, View child, MotionEvent ev) {
|
| - return ev.getX() - child.getX() < child.getWidth()
|
| - && ev.getY() - child.getY() < child.getHeight();
|
| + return isInBounds(ev, child);
|
| }
|
|
|
| @Override
|
| public boolean onTouchEvent(CoordinatorLayout parent, View child, MotionEvent ev) {
|
| + if (!isInBounds(ev, child)) return false;
|
| ev.offsetLocation(-child.getX(), -child.getY());
|
| - boolean consumed = child.dispatchTouchEvent(ev);
|
| - ev.offsetLocation(child.getX(), child.getY());
|
| - return consumed;
|
| + child.dispatchTouchEvent(ev);
|
| + return true;
|
| + }
|
| +
|
| + private boolean isInBounds(MotionEvent ev, View view) {
|
| + return ev.getX() > view.getX() && ev.getX() - view.getX() < view.getWidth()
|
| + && ev.getY() > view.getY() && ev.getY() - view.getY() < view.getHeight();
|
| }
|
| };
|
|
|
| @@ -121,7 +127,7 @@ class SnackbarView {
|
| public void onLayoutChange(View v, int left, int top, int right, int bottom,
|
| int oldLeft, int oldTop, int oldRight, int oldBottom) {
|
| mView.removeOnLayoutChangeListener(this);
|
| - mView.setTranslationY(mView.getHeight());
|
| + mView.setTranslationY(mView.getHeight() + getLayoutParams().bottomMargin);
|
| Animator animator = ObjectAnimator.ofFloat(mView, View.TRANSLATION_Y, 0);
|
| animator.setInterpolator(new DecelerateInterpolator());
|
| animator.setDuration(mAnimationDuration);
|
| @@ -135,16 +141,22 @@ class SnackbarView {
|
| mActionButtonView.setEnabled(false);
|
| mView.getViewTreeObserver().removeOnGlobalLayoutListener(mLayoutListener);
|
|
|
| - Animator animator = ObjectAnimator.ofFloat(mView, View.TRANSLATION_Y, mView.getHeight());
|
| - animator.setInterpolator(new DecelerateInterpolator());
|
| - animator.setDuration(mAnimationDuration);
|
| - animator.addListener(new AnimatorListenerAdapter() {
|
| + AnimatorSet animatorSet = new AnimatorSet();
|
| + animatorSet.setDuration(mAnimationDuration);
|
| + animatorSet.addListener(new AnimatorListenerAdapter() {
|
| @Override
|
| public void onAnimationEnd(Animator animation) {
|
| mParent.removeView(mView);
|
| }
|
| });
|
| - startAnimatorOnSurfaceView(animator);
|
| + Animator moveDown = ObjectAnimator.ofFloat(mView, View.TRANSLATION_Y,
|
| + mView.getHeight() + getLayoutParams().bottomMargin);
|
| + moveDown.setInterpolator(new DecelerateInterpolator());
|
| + Animator fadeOut = ObjectAnimator.ofFloat(mView, View.ALPHA, 0f);
|
| + fadeOut.setInterpolator(BakedBezierInterpolator.FADE_OUT_CURVE);
|
| +
|
| + animatorSet.playTogether(fadeOut, moveDown);
|
| + startAnimatorOnSurfaceView(animatorSet);
|
| }
|
|
|
| void adjustViewPosition() {
|
| @@ -158,7 +170,7 @@ class SnackbarView {
|
| int visibleHeight = Math.min(mCurrentVisibleRect.bottom, activityHeight);
|
| int keyboardHeight = activityHeight - visibleHeight;
|
|
|
| - MarginLayoutParams lp = (MarginLayoutParams) mView.getLayoutParams();
|
| + MarginLayoutParams lp = getLayoutParams();
|
| lp.bottomMargin = keyboardHeight;
|
| if (mIsTablet) {
|
| int margin = mParent.getResources()
|
| @@ -259,6 +271,10 @@ class SnackbarView {
|
| }
|
| }
|
|
|
| + private MarginLayoutParams getLayoutParams() {
|
| + return (MarginLayoutParams) mView.getLayoutParams();
|
| + }
|
| +
|
| private void setViewText(TextView view, CharSequence text, boolean animate) {
|
| if (view.getText().toString().equals(text)) return;
|
| view.animate().cancel();
|
|
|