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

Commit f92f26fe authored by Alan Viverette's avatar Alan Viverette
Browse files

Slow down ripple background fade in from press

BUG: 17433613
Change-Id: Ie9c4046532d61ad8ef8e044d14557db5d52e0d0b
parent b7af00f2
Loading
Loading
Loading
Loading
+10 −9
Original line number Diff line number Diff line
@@ -43,10 +43,12 @@ class RippleBackground {
    private static final float WAVE_OPACITY_DECAY_VELOCITY = 3.0f / GLOBAL_SPEED;
    private static final float WAVE_OUTER_OPACITY_EXIT_VELOCITY_MAX = 4.5f * GLOBAL_SPEED;
    private static final float WAVE_OUTER_OPACITY_EXIT_VELOCITY_MIN = 1.5f * GLOBAL_SPEED;
    private static final float WAVE_OUTER_OPACITY_ENTER_VELOCITY = 10.0f * GLOBAL_SPEED;
    private static final float WAVE_OUTER_SIZE_INFLUENCE_MAX = 200f;
    private static final float WAVE_OUTER_SIZE_INFLUENCE_MIN = 40f;

    private static final int ENTER_DURATION = 667;
    private static final int ENTER_DURATION_FAST = 100;

    // Hardware animators.
    private final ArrayList<RenderNodeAnimator> mRunningAnimations =
            new ArrayList<RenderNodeAnimator>();
@@ -224,21 +226,20 @@ class RippleBackground {
    /**
     * Starts the enter animation.
     */
    public void enter() {
    public void enter(boolean fast) {
        cancel();

        final int outerDuration = (int) (1000 * 1.0f / WAVE_OUTER_OPACITY_ENTER_VELOCITY);
        final ObjectAnimator outer = ObjectAnimator.ofFloat(this, "outerOpacity", 0, 1);
        outer.setAutoCancel(true);
        outer.setDuration(outerDuration);
        outer.setInterpolator(LINEAR_INTERPOLATOR);
        final ObjectAnimator opacity = ObjectAnimator.ofFloat(this, "outerOpacity", 0, 1);
        opacity.setAutoCancel(true);
        opacity.setDuration(fast ? ENTER_DURATION_FAST : ENTER_DURATION);
        opacity.setInterpolator(LINEAR_INTERPOLATOR);

        mAnimOuterOpacity = outer;
        mAnimOuterOpacity = opacity;

        // Enter animations always run on the UI thread, since it's unlikely
        // that anything interesting is happening until the user lifts their
        // finger.
        outer.start();
        opacity.start();
    }

    /**
+9 −6
Original line number Diff line number Diff line
@@ -280,7 +280,7 @@ public class RippleDrawable extends LayerDrawable {
        }

        setRippleActive(enabled && pressed);
        setBackgroundActive(focused || (enabled && pressed));
        setBackgroundActive(focused || (enabled && pressed), focused);

        return changed;
    }
@@ -296,11 +296,11 @@ public class RippleDrawable extends LayerDrawable {
        }
    }

    private void setBackgroundActive(boolean active) {
    private void setBackgroundActive(boolean active, boolean focused) {
        if (mBackgroundActive != active) {
            mBackgroundActive = active;
            if (active) {
                tryBackgroundEnter();
                tryBackgroundEnter(focused);
            } else {
                tryBackgroundExit();
            }
@@ -333,8 +333,11 @@ public class RippleDrawable extends LayerDrawable {
            }

            if (mBackgroundActive) {
                tryBackgroundEnter();
                tryBackgroundEnter(false);
            }

            // Skip animations, just show the correct final states.
            jumpToCurrentState();
        }

        return changed;
@@ -489,14 +492,14 @@ public class RippleDrawable extends LayerDrawable {
    /**
     * Creates an active hotspot at the specified location.
     */
    private void tryBackgroundEnter() {
    private void tryBackgroundEnter(boolean focused) {
        if (mBackground == null) {
            mBackground = new RippleBackground(this, mHotspotBounds);
        }

        final int color = mState.mColor.getColorForState(getState(), Color.TRANSPARENT);
        mBackground.setup(mState.mMaxRadius, color, mDensity);
        mBackground.enter();
        mBackground.enter(focused);
    }

    private void tryBackgroundExit() {