From b176dc99b225e8562c04d69b9cea99d1553f0bc3 Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Wed, 12 Aug 2020 13:28:24 -0700 Subject: [PATCH] Set new scrimMultiplier instead of scrimProgress for overview -> home Animating this new property allows us to adjust the scrim without competing with other state animations that could be setting the scrim progress. Also reset scrimMultipler = 1 for state transitions. Test: Swipe from home to overview, then during that transition swipe from overview to home; when the former transition ends while the second is still in progress, ensure scrim value doesn't jump Bug: 144170434 Change-Id: I44b57ced1c6902e558fe1818bcbf11ceb4ff2f6f --- .../BaseRecentsViewStateController.java | 4 +++ .../NavBarToHomeTouchController.java | 12 ++++---- .../launcher3/graphics/OverviewScrim.java | 28 +++++++++++++++++++ src/com/android/launcher3/graphics/Scrim.java | 6 +++- 4 files changed, 43 insertions(+), 7 deletions(-) diff --git a/quickstep/src/com/android/launcher3/uioverrides/BaseRecentsViewStateController.java b/quickstep/src/com/android/launcher3/uioverrides/BaseRecentsViewStateController.java index 1b8e244ac1..aad7e17df0 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/BaseRecentsViewStateController.java +++ b/quickstep/src/com/android/launcher3/uioverrides/BaseRecentsViewStateController.java @@ -18,6 +18,7 @@ package com.android.launcher3.uioverrides; import static com.android.launcher3.anim.Interpolators.AGGRESSIVE_EASE_IN_OUT; import static com.android.launcher3.anim.Interpolators.LINEAR; +import static com.android.launcher3.graphics.OverviewScrim.SCRIM_MULTIPLIER; import static com.android.launcher3.graphics.Scrim.SCRIM_PROGRESS; import static com.android.launcher3.states.StateAnimationConfig.ANIM_OVERVIEW_FADE; import static com.android.launcher3.states.StateAnimationConfig.ANIM_OVERVIEW_MODAL; @@ -70,6 +71,7 @@ public abstract class BaseRecentsViewStateController getContentAlphaProperty().set(mRecentsView, state.overviewUi ? 1f : 0); OverviewScrim scrim = mLauncher.getDragLayer().getOverviewScrim(); SCRIM_PROGRESS.set(scrim, state.getOverviewScrimAlpha(mLauncher)); + SCRIM_MULTIPLIER.set(scrim, 1f); getTaskModalnessProperty().set(mRecentsView, state.getOverviewModalness()); } @@ -108,6 +110,8 @@ public abstract class BaseRecentsViewStateController OverviewScrim scrim = mLauncher.getDragLayer().getOverviewScrim(); setter.setFloat(scrim, SCRIM_PROGRESS, toState.getOverviewScrimAlpha(mLauncher), config.getInterpolator(ANIM_OVERVIEW_SCRIM_FADE, LINEAR)); + setter.setFloat(scrim, SCRIM_MULTIPLIER, 1f, + config.getInterpolator(ANIM_OVERVIEW_SCRIM_FADE, LINEAR)); setter.setFloat( mRecentsView, getTaskModalnessProperty(), diff --git a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NavBarToHomeTouchController.java b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NavBarToHomeTouchController.java index 57fd11a174..da3c4858a8 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NavBarToHomeTouchController.java +++ b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NavBarToHomeTouchController.java @@ -66,8 +66,8 @@ public class NavBarToHomeTouchController implements TouchController, SingleAxisSwipeDetector.Listener { private static final Interpolator PULLBACK_INTERPOLATOR = DEACCEL_3; - // How much of the overview scrim we can remove during the transition. - private static final float OVERVIEW_TO_HOME_SCRIM_PROGRESS = 0.5f; + // The min amount of overview scrim we keep during the transition. + private static final float OVERVIEW_TO_HOME_SCRIM_MULTIPLIER = 0.5f; private final Launcher mLauncher; private final SingleAxisSwipeDetector mSwipeDetector; @@ -163,11 +163,11 @@ public class NavBarToHomeTouchController implements TouchController, RecentsView recentsView = mLauncher.getOverviewPanel(); AnimatorControllerWithResistance.createRecentsResistanceFromOverviewAnim(mLauncher, builder); - float endScrimAlpha = Utilities.mapRange(OVERVIEW_TO_HOME_SCRIM_PROGRESS, - mStartState.getOverviewScrimAlpha(mLauncher), - mEndState.getOverviewScrimAlpha(mLauncher)); + builder.setFloat(mLauncher.getDragLayer().getOverviewScrim(), - OverviewScrim.SCRIM_PROGRESS, endScrimAlpha, PULLBACK_INTERPOLATOR); + OverviewScrim.SCRIM_MULTIPLIER, OVERVIEW_TO_HOME_SCRIM_MULTIPLIER, + PULLBACK_INTERPOLATOR); + if (ENABLE_QUICKSTEP_LIVE_TILE.get()) { builder.addOnFrameCallback(recentsView::redrawLiveTile); } diff --git a/src/com/android/launcher3/graphics/OverviewScrim.java b/src/com/android/launcher3/graphics/OverviewScrim.java index 94acbfdcca..c0c3e5e9c2 100644 --- a/src/com/android/launcher3/graphics/OverviewScrim.java +++ b/src/com/android/launcher3/graphics/OverviewScrim.java @@ -22,6 +22,7 @@ import static com.android.launcher3.LauncherState.HOTSEAT_ICONS; import static com.android.launcher3.LauncherState.OVERVIEW; import android.graphics.Rect; +import android.util.FloatProperty; import android.view.View; import android.view.ViewGroup; @@ -33,10 +34,25 @@ import androidx.annotation.Nullable; */ public class OverviewScrim extends Scrim { + public static final FloatProperty SCRIM_MULTIPLIER = + new FloatProperty("scrimMultiplier") { + @Override + public Float get(OverviewScrim scrim) { + return scrim.mScrimMultiplier; + } + + @Override + public void setValue(OverviewScrim scrim, float v) { + scrim.setScrimMultiplier(v); + } + }; + private @NonNull View mStableScrimmedView; // Might be higher up if mStableScrimmedView is invisible. private @Nullable View mCurrentScrimmedView; + private float mScrimMultiplier = 1f; + public OverviewScrim(View view) { super(view); mStableScrimmedView = mCurrentScrimmedView = mLauncher.getOverviewPanel(); @@ -68,4 +84,16 @@ public class OverviewScrim extends Scrim { public @Nullable View getScrimmedView() { return mCurrentScrimmedView; } + + private void setScrimMultiplier(float scrimMultiplier) { + if (Float.compare(mScrimMultiplier, scrimMultiplier) != 0) { + mScrimMultiplier = scrimMultiplier; + invalidate(); + } + } + + @Override + protected int getScrimAlpha() { + return Math.round(super.getScrimAlpha() * mScrimMultiplier); + } } diff --git a/src/com/android/launcher3/graphics/Scrim.java b/src/com/android/launcher3/graphics/Scrim.java index f90962d5d1..a151cba47d 100644 --- a/src/com/android/launcher3/graphics/Scrim.java +++ b/src/com/android/launcher3/graphics/Scrim.java @@ -61,7 +61,11 @@ public class Scrim implements View.OnAttachStateChangeListener, } public void draw(Canvas canvas) { - canvas.drawColor(setColorAlphaBound(mScrimColor, mScrimAlpha)); + canvas.drawColor(setColorAlphaBound(mScrimColor, getScrimAlpha())); + } + + protected int getScrimAlpha() { + return mScrimAlpha; } private void setScrimProgress(float progress) {