From 7edcd7803fc3ce452ff1c4cb06fcc56fe9176f41 Mon Sep 17 00:00:00 2001 From: Jon Miranda Date: Mon, 2 Mar 2020 13:18:55 -0800 Subject: [PATCH] Makes spring variable dynamic resources so that they can be changed via plugin Bug: 147302669 Change-Id: Ia4e74ff46a4d8338a56ea75ed826b69102c42d93 --- .../quickstep/FallbackSwipeHandler.java | 2 +- .../quickstep/LauncherSwipeHandler.java | 3 +- .../quickstep/util/RectFSpringAnim.java | 18 +++++++-- .../util/StaggeredWorkspaceAnim.java | 12 +++--- .../android/quickstep/views/RecentsView.java | 22 +++++++---- res/values/config.xml | 38 ++++++++++++++++++- .../allapps/AllAppsTransitionController.java | 11 ++++-- .../launcher3/util/DynamicResource.java | 5 +++ .../android/launcher3/util/OverScroller.java | 13 +++++-- .../systemui/plugins/ResourceProvider.java | 5 +++ 10 files changed, 103 insertions(+), 26 deletions(-) diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/FallbackSwipeHandler.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/FallbackSwipeHandler.java index 41790803ef..65fba08831 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/FallbackSwipeHandler.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/FallbackSwipeHandler.java @@ -420,7 +420,7 @@ public class FallbackSwipeHandler extends BaseSwipeUpHandler } }); getOrientationHandler().adjustFloatingIconStartVelocity(velocityPxPerMs); - windowAnim.start(velocityPxPerMs); + windowAnim.start(mContext, velocityPxPerMs); homeAnimFactory.playAtomicAnimation(velocityPxPerMs.y); mRunningWindowAnim = RunningWindowAnim.wrap(windowAnim); mLauncherTransitionController = null; diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/util/RectFSpringAnim.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/util/RectFSpringAnim.java index a59c99cf2a..682c92c26d 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/util/RectFSpringAnim.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/util/RectFSpringAnim.java @@ -16,6 +16,7 @@ package com.android.quickstep.util; import android.animation.Animator; +import android.content.Context; import android.content.res.Resources; import android.graphics.PointF; import android.graphics.RectF; @@ -28,6 +29,8 @@ import androidx.dynamicanimation.animation.SpringForce; import com.android.launcher3.R; import com.android.launcher3.Utilities; import com.android.launcher3.anim.FlingSpringAnim; +import com.android.launcher3.util.DynamicResource; +import com.android.systemui.plugins.ResourceProvider; import java.util.ArrayList; import java.util.List; @@ -137,7 +140,12 @@ public class RectFSpringAnim { mAnimatorListeners.add(animatorListener); } - public void start(PointF velocityPxPerMs) { + /** + * Starts the fling/spring animation. + * @param context The activity context. + * @param velocityPxPerMs Velocity of swipe in px/ms. + */ + public void start(Context context, PointF velocityPxPerMs) { // Only tell caller that we ended if both x and y animations have ended. OnAnimationEndListener onXEndListener = ((animation, canceled, centerX, velocityX) -> { mRectXAnimEnded = true; @@ -166,10 +174,14 @@ public class RectFSpringAnim { mMinVisChange, minYValue, maxYValue, springVelocityFactor, onYEndListener); float minVisibleChange = Math.abs(1f / mStartRect.height()); + ResourceProvider rp = DynamicResource.provider(context); + float damping = rp.getFloat(R.dimen.swipe_up_rect_damping_ratio); + float stiffness = rp.getFloat(R.dimen.swipe_up_rect_stiffness); + mRectScaleAnim = new SpringAnimation(this, RECT_SCALE_PROGRESS) .setSpring(new SpringForce(1f) - .setDampingRatio(SpringForce.DAMPING_RATIO_LOW_BOUNCY) - .setStiffness(SpringForce.STIFFNESS_LOW)) + .setDampingRatio(damping) + .setStiffness(stiffness)) .setStartVelocity(velocityPxPerMs.y * minVisibleChange) .setMaxValue(1f) .setMinimumVisibleChange(minVisibleChange) diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/util/StaggeredWorkspaceAnim.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/util/StaggeredWorkspaceAnim.java index babf13e88d..d2805ed431 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/util/StaggeredWorkspaceAnim.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/util/StaggeredWorkspaceAnim.java @@ -41,7 +41,9 @@ import com.android.launcher3.anim.AnimatorSetBuilder; import com.android.launcher3.anim.PropertySetter; import com.android.launcher3.anim.SpringAnimationBuilder; import com.android.launcher3.graphics.OverviewScrim; +import com.android.launcher3.util.DynamicResource; import com.android.quickstep.views.RecentsView; +import com.android.systemui.plugins.ResourceProvider; /** * Creates an animation where all the workspace items are moved into their final location, @@ -55,9 +57,6 @@ public class StaggeredWorkspaceAnim { private static final float MAX_VELOCITY_PX_PER_S = 22f; - private static final float DAMPING_RATIO = 0.7f; - private static final float STIFFNESS = 150f; - private final float mVelocity; private final float mSpringTransY; @@ -177,9 +176,12 @@ public class StaggeredWorkspaceAnim { v.setTranslationY(mSpringTransY); + ResourceProvider rp = DynamicResource.provider(v.getContext()); + float stiffness = rp.getFloat(R.dimen.staggered_stiffness); + float damping = rp.getFloat(R.dimen.staggered_damping_ratio); ObjectAnimator springTransY = new SpringAnimationBuilder<>(v, VIEW_TRANSLATE_Y) - .setStiffness(STIFFNESS) - .setDampingRatio(DAMPING_RATIO) + .setStiffness(stiffness) + .setDampingRatio(damping) .setMinimumVisibleChange(1f) .setEndValue(0) .setStartVelocity(mVelocity) diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java index 4bd1215710..55b095f770 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java @@ -80,7 +80,6 @@ import android.view.animation.Interpolator; import android.widget.ListView; import androidx.annotation.Nullable; -import androidx.dynamicanimation.animation.SpringForce; import com.android.launcher3.BaseActivity; import com.android.launcher3.DeviceProfile; @@ -103,6 +102,7 @@ import com.android.launcher3.userevent.nano.LauncherLogProto; import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Direction; import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Touch; import com.android.launcher3.util.ComponentKey; +import com.android.launcher3.util.DynamicResource; import com.android.launcher3.util.OverScroller; import com.android.launcher3.util.PendingAnimation; import com.android.launcher3.util.Themes; @@ -117,6 +117,7 @@ import com.android.quickstep.TaskUtils; import com.android.quickstep.ViewUtils; import com.android.quickstep.util.AppWindowAnimationHelper; import com.android.quickstep.util.LayoutUtils; +import com.android.systemui.plugins.ResourceProvider; import com.android.systemui.shared.recents.IPinnedStackAnimationListener; import com.android.systemui.shared.recents.model.Task; import com.android.systemui.shared.recents.model.ThumbnailData; @@ -1199,10 +1200,14 @@ public abstract class RecentsView extends PagedView impl int secondaryTaskDimension = mOrientationHandler.getSecondaryDimension(taskView); int verticalFactor = mOrientationHandler.getTaskDismissDirectionFactor(); if (UNSTABLE_SPRINGS.get() && taskView instanceof TaskView) { + ResourceProvider rp = DynamicResource.provider(mActivity); + float dampingRatio = rp.getFloat(R.dimen.dismiss_task_trans_y_damping_ratio); + float stiffness = rp.getFloat(R.dimen.dismiss_task_trans_y_stiffness); + addAnim(new SpringObjectAnimator<>(taskView, secondaryViewTranslate, - MIN_VISIBLE_CHANGE_PIXELS, SpringForce.DAMPING_RATIO_MEDIUM_BOUNCY, - SpringForce.STIFFNESS_MEDIUM, 0, verticalFactor * secondaryTaskDimension), - duration, LINEAR, anim); + MIN_VISIBLE_CHANGE_PIXELS, dampingRatio, + stiffness, 0, verticalFactor * secondaryTaskDimension), + duration, LINEAR, anim); } else { addAnim(ObjectAnimator.ofFloat(taskView, secondaryViewTranslate, verticalFactor * secondaryTaskDimension), duration, LINEAR, anim); @@ -1276,10 +1281,13 @@ public abstract class RecentsView extends PagedView impl int scrollDiff = newScroll[i] - oldScroll[i] + offset; if (scrollDiff != 0) { if (UNSTABLE_SPRINGS.get() && child instanceof TaskView) { + ResourceProvider rp = DynamicResource.provider(mActivity); + float damping = rp.getFloat(R.dimen.dismiss_task_trans_x_damping_ratio); + float stiffness = rp.getFloat(R.dimen.dismiss_task_trans_x_stiffness); + addAnim(new SpringObjectAnimator<>(child, VIEW_TRANSLATE_X, - MIN_VISIBLE_CHANGE_PIXELS, SpringForce.DAMPING_RATIO_MEDIUM_BOUNCY, - SpringForce.STIFFNESS_MEDIUM, - 0, scrollDiff), duration, ACCEL, anim); + MIN_VISIBLE_CHANGE_PIXELS, damping, + stiffness, 0, scrollDiff), duration, ACCEL, anim); } else { Property translationProperty = mOrientationHandler.getPrimaryViewTranslate(); addAnim(ObjectAnimator.ofFloat(child, translationProperty, scrollDiff), diff --git a/res/values/config.xml b/res/values/config.xml index 8aff6da7dc..35e5e6dc63 100644 --- a/res/values/config.xml +++ b/res/values/config.xml @@ -121,5 +121,41 @@ true - + 0.75 + 600 + + 0.5 + 1500 + + 0.5 + 1500 + + 0.75 + 200 + + 0.75 + 200 + + 0.7 + 150 + + + @dimen/all_apps_spring_damping_ratio + @dimen/all_apps_spring_stiffness + + @dimen/dismiss_task_trans_y_damping_ratio + @dimen/dismiss_task_trans_y_stiffness + + @dimen/dismiss_task_trans_x_damping_ratio + @dimen/dismiss_task_trans_x_stiffness + + @dimen/horizontal_spring_damping_ratio + @dimen/horizontal_spring_stiffness + + @dimen/swipe_up_rect_damping_ratio + @dimen/swipe_up_rect_stiffness + + @dimen/staggered_damping_ratio + @dimen/staggered_stiffness + diff --git a/src/com/android/launcher3/allapps/AllAppsTransitionController.java b/src/com/android/launcher3/allapps/AllAppsTransitionController.java index e49ff30f20..217916205d 100644 --- a/src/com/android/launcher3/allapps/AllAppsTransitionController.java +++ b/src/com/android/launcher3/allapps/AllAppsTransitionController.java @@ -32,8 +32,10 @@ import com.android.launcher3.anim.AnimationSuccessListener; import com.android.launcher3.anim.AnimatorSetBuilder; import com.android.launcher3.anim.PropertySetter; import com.android.launcher3.anim.SpringObjectAnimator; +import com.android.launcher3.util.DynamicResource; import com.android.launcher3.util.Themes; import com.android.launcher3.views.ScrimView; +import com.android.systemui.plugins.ResourceProvider; /** * Handles AllApps view transition. @@ -47,9 +49,6 @@ import com.android.launcher3.views.ScrimView; */ public class AllAppsTransitionController implements StateHandler, OnDeviceProfileChangeListener { - private static final float SPRING_DAMPING_RATIO = 0.75f; - private static final float SPRING_STIFFNESS = 600f; - public static final FloatProperty ALL_APPS_PROGRESS = new FloatProperty("allAppsProgress") { @@ -187,8 +186,12 @@ public class AllAppsTransitionController implements StateHandler, OnDeviceProfil public Animator createSpringAnimation(float... progressValues) { if (UNSTABLE_SPRINGS.get()) { + ResourceProvider rp = DynamicResource.provider(mLauncher); + float damping = rp.getFloat(R.dimen.all_apps_spring_damping_ratio); + float stiffness = rp.getFloat(R.dimen.all_apps_spring_stiffness); + return new SpringObjectAnimator<>(this, ALL_APPS_PROGRESS, 1f / mShiftRange, - SPRING_DAMPING_RATIO, SPRING_STIFFNESS, progressValues); + damping, stiffness, progressValues); } return ObjectAnimator.ofFloat(this, ALL_APPS_PROGRESS, progressValues); } diff --git a/src/com/android/launcher3/util/DynamicResource.java b/src/com/android/launcher3/util/DynamicResource.java index 8a75767f42..e6ee1864dc 100644 --- a/src/com/android/launcher3/util/DynamicResource.java +++ b/src/com/android/launcher3/util/DynamicResource.java @@ -68,6 +68,11 @@ public class DynamicResource implements ResourceProvider, PluginListener { diff --git a/src_plugins/com/android/systemui/plugins/ResourceProvider.java b/src_plugins/com/android/systemui/plugins/ResourceProvider.java index eaed9e7f1c..d1767a0931 100644 --- a/src_plugins/com/android/systemui/plugins/ResourceProvider.java +++ b/src_plugins/com/android/systemui/plugins/ResourceProvider.java @@ -44,4 +44,9 @@ public interface ResourceProvider extends Plugin { * @see android.content.res.Resources#getColor(int) */ int getColor(int resId); + + /** + * @see android.content.res.Resources#getFloat(int) + */ + float getFloat(int resId); }