diff options
author | Jon Miranda <jonmiranda@google.com> | 2018-05-22 23:12:10 -0700 |
---|---|---|
committer | Jon Miranda <jonmiranda@google.com> | 2018-05-23 09:13:07 -0700 |
commit | 1d19e2f152de0ff55a83a54d81311620d70883f1 (patch) | |
tree | d55c923d7e35a9750f035d4b7c828f2287337018 | |
parent | c0928c3ba0786028875e174caf0c5e6a976e6fc4 (diff) | |
download | android_packages_apps_Trebuchet-1d19e2f152de0ff55a83a54d81311620d70883f1.tar.gz android_packages_apps_Trebuchet-1d19e2f152de0ff55a83a54d81311620d70883f1.tar.bz2 android_packages_apps_Trebuchet-1d19e2f152de0ff55a83a54d81311620d70883f1.zip |
Start springs for All Apps when user flings up.
Bug: 77695481
Change-Id: Ifecfbbb89601947118f620f522662aee8a61946e
3 files changed, 48 insertions, 0 deletions
diff --git a/src/com/android/launcher3/allapps/AllAppsContainerView.java b/src/com/android/launcher3/allapps/AllAppsContainerView.java index f8648bba0..68ad6e346 100644 --- a/src/com/android/launcher3/allapps/AllAppsContainerView.java +++ b/src/com/android/launcher3/allapps/AllAppsContainerView.java @@ -15,12 +15,14 @@ */ package com.android.launcher3.allapps; +import android.animation.ValueAnimator; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Point; import android.graphics.Rect; import android.os.Process; +import android.support.animation.DynamicAnimation; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.StringRes; @@ -61,6 +63,10 @@ import com.android.launcher3.views.SpringRelativeLayout; public class AllAppsContainerView extends SpringRelativeLayout implements DragSource, Insettable, OnDeviceProfileChangeListener { + private static final float FLING_VELOCITY_MULTIPLIER = 135f; + // Starts the springs after at least 55% of the animation has passed. + private static final float FLING_ANIMATION_THRESHOLD = 0.55f; + private final Launcher mLauncher; private final AdapterHolder[] mAH; private final ItemInfoMatcher mPersonalMatcher = ItemInfoMatcher.ofUser(Process.myUserHandle()); @@ -455,6 +461,32 @@ public class AllAppsContainerView extends SpringRelativeLayout implements DragSo } } + /** + * Adds an update listener to {@param animator} that adds springs to the animation. + */ + public void addSpringFromFlingUpdateListener(ValueAnimator animator, float velocity) { + animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator valueAnimator) { + if (valueAnimator.getAnimatedFraction() >= FLING_ANIMATION_THRESHOLD) { + int searchViewId = getSearchView().getId(); + addSpringView(searchViewId); + + finishWithShiftAndVelocity(1, velocity * FLING_VELOCITY_MULTIPLIER, + new DynamicAnimation.OnAnimationEndListener() { + @Override + public void onAnimationEnd(DynamicAnimation animation, + boolean canceled, float value, float velocity) { + removeSpringView(searchViewId); + } + }); + + animator.removeUpdateListener(this); + } + } + }); + } + public class AdapterHolder { public static final int MAIN = 0; public static final int WORK = 1; diff --git a/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java b/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java index 24382b7d0..61bd5c88a 100644 --- a/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java +++ b/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java @@ -396,6 +396,9 @@ public abstract class AbstractStateChangeTouchController updateSwipeCompleteAnimation(anim, Math.max(duration, getRemainingAtomicDuration()), targetState, velocity, fling); mCurrentAnimation.dispatchOnStart(); + if (fling && targetState == LauncherState.ALL_APPS) { + mLauncher.getAppsView().addSpringFromFlingUpdateListener(anim, velocity); + } anim.start(); if (mAtomicAnim == null) { startAtomicComponentsAnim(endProgress, anim.getDuration()); diff --git a/src/com/android/launcher3/views/SpringRelativeLayout.java b/src/com/android/launcher3/views/SpringRelativeLayout.java index 598738b9f..5022d65a3 100644 --- a/src/com/android/launcher3/views/SpringRelativeLayout.java +++ b/src/com/android/launcher3/views/SpringRelativeLayout.java @@ -17,6 +17,7 @@ package com.android.launcher3.views; import android.content.Context; import android.graphics.Canvas; +import android.support.animation.DynamicAnimation; import android.support.animation.FloatPropertyCompat; import android.support.animation.SpringAnimation; import android.support.animation.SpringForce; @@ -79,6 +80,11 @@ public class SpringRelativeLayout extends RelativeLayout { mSpringViews.put(id, true); } + public void removeSpringView(int id) { + mSpringViews.delete(id); + invalidate(); + } + @Override protected boolean drawChild(Canvas canvas, View child, long drawingTime) { if (mDampedScrollShift != 0 && mSpringViews.get(child.getId())) { @@ -110,6 +116,13 @@ public class SpringRelativeLayout extends RelativeLayout { mSpring.start(); } + protected void finishWithShiftAndVelocity(float shift, float velocity, + DynamicAnimation.OnAnimationEndListener listener) { + setDampedScrollShift(shift); + mSpring.addEndListener(listener); + finishScrollWithVelocity(velocity); + } + public EdgeEffectFactory createEdgeEffectFactory() { return new SpringEdgeEffectFactory(); } |