Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2733)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/snackbar/SnackbarView.java

Issue 2023053002: [Android] Fix several bugs related to Snackbar Refactoring (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: comments Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/android/java/src/org/chromium/chrome/browser/snackbar/SnackbarManager.java ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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();
« no previous file with comments | « chrome/android/java/src/org/chromium/chrome/browser/snackbar/SnackbarManager.java ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698