Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b176dc99 authored by Tony Wickham's avatar Tony Wickham
Browse files

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
parent c5eedfb3
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -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<T extends RecentsView>
        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<T extends RecentsView>
        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(),
+6 −6
Original line number Diff line number Diff line
@@ -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);
            }
+28 −0
Original line number Diff line number Diff line
@@ -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<OverviewScrim> SCRIM_MULTIPLIER =
            new FloatProperty<OverviewScrim>("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);
    }
}
+5 −1
Original line number Diff line number Diff line
@@ -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) {