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

Commit 92b0b1d0 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add spring to workspace scale when going from Hint state to Normal...

Merge "Add spring to workspace scale when going from Hint state to Normal state." into ub-launcher3-rvc-dev
parents a529cd0f 27163857
Loading
Loading
Loading
Loading
+13 −0
Original line number Original line Diff line number Diff line
@@ -24,6 +24,7 @@ import static com.android.launcher3.LauncherState.HOTSEAT_ICONS;
import static com.android.launcher3.LauncherState.NORMAL;
import static com.android.launcher3.LauncherState.NORMAL;
import static com.android.launcher3.LauncherState.OVERVIEW;
import static com.android.launcher3.LauncherState.OVERVIEW;
import static com.android.launcher3.LauncherState.OVERVIEW_PEEK;
import static com.android.launcher3.LauncherState.OVERVIEW_PEEK;
import static com.android.launcher3.WorkspaceStateTransitionAnimation.getSpringScaleAnimator;
import static com.android.launcher3.anim.Interpolators.ACCEL;
import static com.android.launcher3.anim.Interpolators.ACCEL;
import static com.android.launcher3.anim.Interpolators.DEACCEL;
import static com.android.launcher3.anim.Interpolators.DEACCEL;
import static com.android.launcher3.anim.Interpolators.DEACCEL_1_7;
import static com.android.launcher3.anim.Interpolators.DEACCEL_1_7;
@@ -90,6 +91,10 @@ public class QuickstepAtomicAnimationFactory extends
    protected static final int NEXT_INDEX = RecentsAtomicAnimationFactory.NEXT_INDEX
    protected static final int NEXT_INDEX = RecentsAtomicAnimationFactory.NEXT_INDEX
            + MY_ANIM_COUNT;
            + MY_ANIM_COUNT;


    // Due to use of physics, duration may differ between devices so we need to calculate and
    // cache the value.
    private int mHintToNormalDuration = -1;

    public static final long ATOMIC_DURATION_FROM_PAUSED_TO_OVERVIEW = 300;
    public static final long ATOMIC_DURATION_FROM_PAUSED_TO_OVERVIEW = 300;


    public QuickstepAtomicAnimationFactory(QuickstepLauncher activity) {
    public QuickstepAtomicAnimationFactory(QuickstepLauncher activity) {
@@ -221,6 +226,14 @@ public class QuickstepAtomicAnimationFactory extends
            config.setInterpolator(ANIM_OVERVIEW_TRANSLATE_X, translationInterpolator);
            config.setInterpolator(ANIM_OVERVIEW_TRANSLATE_X, translationInterpolator);
            config.setInterpolator(ANIM_OVERVIEW_TRANSLATE_Y, translationInterpolator);
            config.setInterpolator(ANIM_OVERVIEW_TRANSLATE_Y, translationInterpolator);
            config.setInterpolator(ANIM_OVERVIEW_FADE, OVERSHOOT_1_2);
            config.setInterpolator(ANIM_OVERVIEW_FADE, OVERSHOOT_1_2);
        } else if (fromState == HINT_STATE && toState == NORMAL) {
            config.setInterpolator(ANIM_DEPTH, DEACCEL_3);
            if (mHintToNormalDuration == -1) {
                ValueAnimator va = getSpringScaleAnimator(mActivity, mActivity.getWorkspace(),
                        toState.getWorkspaceScaleAndTranslation(mActivity).scale);
                mHintToNormalDuration = (int) va.getDuration();
            }
            config.duration = Math.max(config.duration, mHintToNormalDuration);
        }
        }
    }
    }
}
}
+27 −1
Original line number Original line Diff line number Diff line
@@ -26,6 +26,7 @@ import static com.android.launcher3.util.VibratorWrapper.OVERVIEW_HAPTIC;


import android.animation.Animator;
import android.animation.Animator;
import android.animation.AnimatorSet;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.animation.ValueAnimator;
import android.graphics.PointF;
import android.graphics.PointF;
import android.util.Log;
import android.util.Log;
@@ -35,6 +36,7 @@ import com.android.launcher3.Launcher;
import com.android.launcher3.LauncherState;
import com.android.launcher3.LauncherState;
import com.android.launcher3.Utilities;
import com.android.launcher3.Utilities;
import com.android.launcher3.anim.AnimationSuccessListener;
import com.android.launcher3.anim.AnimationSuccessListener;
import com.android.launcher3.graphics.OverviewScrim;
import com.android.launcher3.statemanager.StateManager;
import com.android.launcher3.statemanager.StateManager;
import com.android.launcher3.states.StateAnimationConfig;
import com.android.launcher3.states.StateAnimationConfig;
import com.android.launcher3.testing.TestProtocol;
import com.android.launcher3.testing.TestProtocol;
@@ -65,6 +67,9 @@ public class NoButtonNavbarToOverviewTouchController extends FlingAndHoldTouchCo
    // The last recorded displacement before we reached overview.
    // The last recorded displacement before we reached overview.
    private PointF mStartDisplacement = new PointF();
    private PointF mStartDisplacement = new PointF();


    // Normal to Hint animation has flag SKIP_OVERVIEW, so we update this scrim with this animator.
    private ObjectAnimator mNormalToHintOverviewScrimAnimator;

    public NoButtonNavbarToOverviewTouchController(Launcher l) {
    public NoButtonNavbarToOverviewTouchController(Launcher l) {
        super(l);
        super(l);
        mRecentsView = l.getOverviewPanel();
        mRecentsView = l.getOverviewPanel();
@@ -110,10 +115,30 @@ public class NoButtonNavbarToOverviewTouchController extends FlingAndHoldTouchCo
    @Override
    @Override
    public void onDragStart(boolean start, float startDisplacement) {
    public void onDragStart(boolean start, float startDisplacement) {
        super.onDragStart(start, startDisplacement);
        super.onDragStart(start, startDisplacement);

        if (mFromState == NORMAL && mToState == HINT_STATE) {
            mNormalToHintOverviewScrimAnimator = ObjectAnimator.ofFloat(
                    mLauncher.getDragLayer().getOverviewScrim(),
                    OverviewScrim.SCRIM_PROGRESS,
                    mFromState.getOverviewScrimAlpha(mLauncher),
                    mToState.getOverviewScrimAlpha(mLauncher));
        }
        mReachedOverview = false;
        mReachedOverview = false;
    }
    }


    @Override
    protected void updateProgress(float fraction) {
        super.updateProgress(fraction);
        if (mNormalToHintOverviewScrimAnimator != null) {
            mNormalToHintOverviewScrimAnimator.setCurrentFraction(fraction);
        }
    }

    @Override
    public void onDragEnd(float velocity) {
        super.onDragEnd(velocity);
        mNormalToHintOverviewScrimAnimator = null;
    }

    @Override
    @Override
    protected void updateSwipeCompleteAnimation(ValueAnimator animator, long expectedDuration,
    protected void updateSwipeCompleteAnimation(ValueAnimator animator, long expectedDuration,
            LauncherState targetState, float velocity, boolean isFling) {
            LauncherState targetState, float velocity, boolean isFling) {
@@ -132,6 +157,7 @@ public class NoButtonNavbarToOverviewTouchController extends FlingAndHoldTouchCo
        if (mCurrentAnimation == null) {
        if (mCurrentAnimation == null) {
            return;
            return;
        }
        }
        mNormalToHintOverviewScrimAnimator = null;
        mCurrentAnimation.dispatchOnCancelWithoutCancelRunnable(() -> {
        mCurrentAnimation.dispatchOnCancelWithoutCancelRunnable(() -> {
            mLauncher.getStateManager().goToState(OVERVIEW, true, () -> {
            mLauncher.getStateManager().goToState(OVERVIEW, true, () -> {
                mReachedOverview = true;
                mReachedOverview = true;
+8 −0
Original line number Original line Diff line number Diff line
@@ -144,6 +144,10 @@
    <item name="staggered_stiffness" type="dimen" format="float">150</item>
    <item name="staggered_stiffness" type="dimen" format="float">150</item>
    <dimen name="unlock_staggered_velocity_dp_per_s">3dp</dimen>
    <dimen name="unlock_staggered_velocity_dp_per_s">3dp</dimen>


    <item name="hint_scale_damping_ratio" type="dimen" format="float">0.7</item>
    <item name="hint_scale_stiffness" type="dimen" format="float">200</item>
    <dimen name="hint_scale_velocity_dp_per_s">0.3dp</dimen>

    <!-- Swipe up to home related -->
    <!-- Swipe up to home related -->
    <dimen name="swipe_up_fling_min_visible_change">18dp</dimen>
    <dimen name="swipe_up_fling_min_visible_change">18dp</dimen>
    <dimen name="swipe_up_y_overshoot">10dp</dimen>
    <dimen name="swipe_up_y_overshoot">10dp</dimen>
@@ -175,6 +179,10 @@


        <item>@dimen/swipe_up_fling_min_visible_change</item>
        <item>@dimen/swipe_up_fling_min_visible_change</item>
        <item>@dimen/swipe_up_y_overshoot</item>
        <item>@dimen/swipe_up_y_overshoot</item>

        <item>@dimen/hint_scale_damping_ratio</item>
        <item>@dimen/hint_scale_stiffness</item>
        <item>@dimen/hint_scale_velocity_dp_per_s</item>
    </array>
    </array>


    <string-array name="live_wallpapers_remove_sysui_scrims">
    <string-array name="live_wallpapers_remove_sysui_scrims">
+51 −8
Original line number Original line Diff line number Diff line
@@ -16,6 +16,8 @@


package com.android.launcher3;
package com.android.launcher3;


import static androidx.dynamicanimation.animation.DynamicAnimation.MIN_VISIBLE_CHANGE_SCALE;

import static com.android.launcher3.LauncherAnimUtils.DRAWABLE_ALPHA;
import static com.android.launcher3.LauncherAnimUtils.DRAWABLE_ALPHA;
import static com.android.launcher3.LauncherAnimUtils.SCALE_PROPERTY;
import static com.android.launcher3.LauncherAnimUtils.SCALE_PROPERTY;
import static com.android.launcher3.LauncherAnimUtils.VIEW_ALPHA;
import static com.android.launcher3.LauncherAnimUtils.VIEW_ALPHA;
@@ -23,11 +25,13 @@ import static com.android.launcher3.LauncherAnimUtils.VIEW_TRANSLATE_X;
import static com.android.launcher3.LauncherAnimUtils.VIEW_TRANSLATE_Y;
import static com.android.launcher3.LauncherAnimUtils.VIEW_TRANSLATE_Y;
import static com.android.launcher3.LauncherState.FLAG_HAS_SYS_UI_SCRIM;
import static com.android.launcher3.LauncherState.FLAG_HAS_SYS_UI_SCRIM;
import static com.android.launcher3.LauncherState.FLAG_WORKSPACE_HAS_BACKGROUNDS;
import static com.android.launcher3.LauncherState.FLAG_WORKSPACE_HAS_BACKGROUNDS;
import static com.android.launcher3.LauncherState.HINT_STATE;
import static com.android.launcher3.LauncherState.HOTSEAT_ICONS;
import static com.android.launcher3.LauncherState.HOTSEAT_ICONS;
import static com.android.launcher3.LauncherState.NORMAL;
import static com.android.launcher3.anim.Interpolators.LINEAR;
import static com.android.launcher3.anim.Interpolators.LINEAR;
import static com.android.launcher3.anim.Interpolators.ZOOM_OUT;
import static com.android.launcher3.anim.Interpolators.ZOOM_OUT;
import static com.android.launcher3.anim.PropertySetter.NO_ANIM_PROPERTY_SETTER;
import static com.android.launcher3.anim.PropertySetter.NO_ANIM_PROPERTY_SETTER;
import static com.android.launcher3.graphics.WorkspaceAndHotseatScrim.SCRIM_PROGRESS;
import static com.android.launcher3.graphics.Scrim.SCRIM_PROGRESS;
import static com.android.launcher3.graphics.WorkspaceAndHotseatScrim.SYSUI_PROGRESS;
import static com.android.launcher3.graphics.WorkspaceAndHotseatScrim.SYSUI_PROGRESS;
import static com.android.launcher3.states.StateAnimationConfig.ANIM_HOTSEAT_SCALE;
import static com.android.launcher3.states.StateAnimationConfig.ANIM_HOTSEAT_SCALE;
import static com.android.launcher3.states.StateAnimationConfig.ANIM_HOTSEAT_TRANSLATE;
import static com.android.launcher3.states.StateAnimationConfig.ANIM_HOTSEAT_TRANSLATE;
@@ -35,6 +39,7 @@ import static com.android.launcher3.states.StateAnimationConfig.ANIM_WORKSPACE_F
import static com.android.launcher3.states.StateAnimationConfig.ANIM_WORKSPACE_SCALE;
import static com.android.launcher3.states.StateAnimationConfig.ANIM_WORKSPACE_SCALE;
import static com.android.launcher3.states.StateAnimationConfig.ANIM_WORKSPACE_TRANSLATE;
import static com.android.launcher3.states.StateAnimationConfig.ANIM_WORKSPACE_TRANSLATE;


import android.animation.ValueAnimator;
import android.view.View;
import android.view.View;
import android.view.animation.Interpolator;
import android.view.animation.Interpolator;


@@ -43,8 +48,11 @@ import com.android.launcher3.LauncherState.ScaleAndTranslation;
import com.android.launcher3.allapps.AllAppsContainerView;
import com.android.launcher3.allapps.AllAppsContainerView;
import com.android.launcher3.anim.PendingAnimation;
import com.android.launcher3.anim.PendingAnimation;
import com.android.launcher3.anim.PropertySetter;
import com.android.launcher3.anim.PropertySetter;
import com.android.launcher3.anim.SpringAnimationBuilder;
import com.android.launcher3.graphics.WorkspaceAndHotseatScrim;
import com.android.launcher3.graphics.WorkspaceAndHotseatScrim;
import com.android.launcher3.states.StateAnimationConfig;
import com.android.launcher3.states.StateAnimationConfig;
import com.android.launcher3.util.DynamicResource;
import com.android.systemui.plugins.ResourceProvider;


/**
/**
 * Manages the animations between each of the workspace states.
 * Manages the animations between each of the workspace states.
@@ -104,17 +112,32 @@ public class WorkspaceStateTransitionAnimation {
        View qsbView = qsbScaleView.getSearchView();
        View qsbView = qsbScaleView.getSearchView();
        if (playAtomicComponent) {
        if (playAtomicComponent) {
            Interpolator scaleInterpolator = config.getInterpolator(ANIM_WORKSPACE_SCALE, ZOOM_OUT);
            Interpolator scaleInterpolator = config.getInterpolator(ANIM_WORKSPACE_SCALE, ZOOM_OUT);
            LauncherState fromState = mLauncher.getStateManager().getState();
            boolean shouldSpring = propertySetter instanceof PendingAnimation
                    && fromState == HINT_STATE && state == NORMAL;
            if (shouldSpring) {
                ((PendingAnimation) propertySetter).add(getSpringScaleAnimator(mLauncher,
                        mWorkspace, mNewScale));
            } else {
                propertySetter.setFloat(mWorkspace, SCALE_PROPERTY, mNewScale, scaleInterpolator);
                propertySetter.setFloat(mWorkspace, SCALE_PROPERTY, mNewScale, scaleInterpolator);
            }


            setPivotToScaleWithWorkspace(hotseat);
            setPivotToScaleWithWorkspace(hotseat);
            setPivotToScaleWithWorkspace(qsbScaleView);
            setPivotToScaleWithWorkspace(qsbScaleView);
            float hotseatScale = hotseatScaleAndTranslation.scale;
            float hotseatScale = hotseatScaleAndTranslation.scale;
            if (shouldSpring) {
                PendingAnimation pa = (PendingAnimation) propertySetter;
                pa.add(getSpringScaleAnimator(mLauncher, hotseat, hotseatScale));
                pa.add(getSpringScaleAnimator(mLauncher, qsbScaleView,
                        qsbScaleAndTranslation.scale));
            } else {
                Interpolator hotseatScaleInterpolator = config.getInterpolator(ANIM_HOTSEAT_SCALE,
                Interpolator hotseatScaleInterpolator = config.getInterpolator(ANIM_HOTSEAT_SCALE,
                        scaleInterpolator);
                        scaleInterpolator);
                propertySetter.setFloat(hotseat, SCALE_PROPERTY, hotseatScale,
                propertySetter.setFloat(hotseat, SCALE_PROPERTY, hotseatScale,
                        hotseatScaleInterpolator);
                        hotseatScaleInterpolator);
                propertySetter.setFloat(qsbScaleView, SCALE_PROPERTY, qsbScaleAndTranslation.scale,
                propertySetter.setFloat(qsbScaleView, SCALE_PROPERTY, qsbScaleAndTranslation.scale,
                        hotseatScaleInterpolator);
                        hotseatScaleInterpolator);
            }


            float hotseatIconsAlpha = (elements & HOTSEAT_ICONS) != 0 ? 1 : 0;
            float hotseatIconsAlpha = (elements & HOTSEAT_ICONS) != 0 ? 1 : 0;
            propertySetter.setViewAlpha(hotseat, hotseatIconsAlpha, fadeInterpolator);
            propertySetter.setViewAlpha(hotseat, hotseatIconsAlpha, fadeInterpolator);
@@ -191,4 +214,24 @@ public class WorkspaceStateTransitionAnimation {
                    pageAlpha, fadeInterpolator);
                    pageAlpha, fadeInterpolator);
        }
        }
    }
    }

    /**
     * Returns a spring based animator for the scale property of {@param v}.
     */
    public static ValueAnimator getSpringScaleAnimator(Launcher launcher, View v, float scale) {
        ResourceProvider rp = DynamicResource.provider(launcher);
        float damping = rp.getFloat(R.dimen.hint_scale_damping_ratio);
        float stiffness = rp.getFloat(R.dimen.hint_scale_stiffness);
        float velocityPxPerS = rp.getDimension(R.dimen.hint_scale_velocity_dp_per_s);

        return new SpringAnimationBuilder(v.getContext())
                .setStiffness(stiffness)
                .setDampingRatio(damping)
                .setMinimumVisibleChange(MIN_VISIBLE_CHANGE_SCALE)
                .setEndValue(scale)
                .setStartValue(SCALE_PROPERTY.get(v))
                .setStartVelocity(velocityPxPerS)
                .build(v, SCALE_PROPERTY);

    }
}
}
 No newline at end of file
+11 −1
Original line number Original line Diff line number Diff line
@@ -38,9 +38,19 @@ public class HintState extends LauncherState {
        return 80;
        return 80;
    }
    }


    @Override
    protected float getDepthUnchecked(Context context) {
        return 0.15f;
    }

    @Override
    public float getOverviewScrimAlpha(Launcher launcher) {
        return 0.4f;
    }

    @Override
    @Override
    public ScaleAndTranslation getWorkspaceScaleAndTranslation(Launcher launcher) {
    public ScaleAndTranslation getWorkspaceScaleAndTranslation(Launcher launcher) {
        return new ScaleAndTranslation(0.9f, 0, 0);
        return new ScaleAndTranslation(0.92f, 0, 0);
    }
    }


    @Override
    @Override