From 75de76f917370e814f53500e0e4f2b4c640e69e1 Mon Sep 17 00:00:00 2001 From: Jon Miranda Date: Wed, 7 Jun 2017 13:17:19 -0700 Subject: [PATCH] Fix bug where physics appears not to run in all apps. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ie. When scrolling up from the bottom, the animation will immediately start since the last visible item condition is true — and by the time it reaches the top the spring is done moving. Bug: 38349031 Change-Id: I344deef47c50b33405345dd3a137ccdb12aeae02 --- .../launcher3/allapps/AllAppsContainerView.java | 10 ++++++---- .../android/launcher3/anim/SpringAnimationHandler.java | 5 +++++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/com/android/launcher3/allapps/AllAppsContainerView.java b/src/com/android/launcher3/allapps/AllAppsContainerView.java index a399d748a9..f1616fc09f 100644 --- a/src/com/android/launcher3/allapps/AllAppsContainerView.java +++ b/src/com/android/launcher3/allapps/AllAppsContainerView.java @@ -20,7 +20,6 @@ import android.graphics.Color; import android.graphics.Rect; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.InsetDrawable; -import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.text.Selection; @@ -426,8 +425,11 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { - if (mScrollState == RecyclerView.SCROLL_STATE_DRAGGING) { - mSpringAnimationHandler.skipToEnd(); + if (mScrollState == RecyclerView.SCROLL_STATE_DRAGGING + || (dx == 0 && dy == 0)) { + if (mSpringAnimationHandler.isRunning()){ + mSpringAnimationHandler.skipToEnd(); + } return; } @@ -436,7 +438,7 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc // We only show the spring animation when at the top or bottom, so we wait until the // first or last row is visible to ensure that all animations run in sync. - if (first == 0 || last >= mAdapter.getItemCount() - mAdapter.getNumAppsPerRow()) { + if ((first == 0 && dy < 0) || (last == mAdapter.getItemCount() - 1 && dy > 0)) { mSpringAnimationHandler.animateToFinalPosition(0); } } diff --git a/src/com/android/launcher3/anim/SpringAnimationHandler.java b/src/com/android/launcher3/anim/SpringAnimationHandler.java index 488657c36d..6a5e3514a1 100644 --- a/src/com/android/launcher3/anim/SpringAnimationHandler.java +++ b/src/com/android/launcher3/anim/SpringAnimationHandler.java @@ -138,6 +138,11 @@ public class SpringAnimationHandler { reset(); } + public boolean isRunning() { + // All the animations run at the same time so we can just check the first one. + return !mAnimations.isEmpty() && mAnimations.get(0).isRunning(); + } + public void skipToEnd() { if (DEBUG) Log.d(TAG, "setStartVelocity#skipToEnd"); if (DEBUG) Log.v(TAG, "setStartVelocity#skipToEnd", new Exception());