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

Commit 67680524 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Ripple position of slider is incorrect" into sc-dev am: 13c7ee17

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/13987359

Change-Id: I8f9d4230cea63094cb2f3de19e4d23b39b21d5db
parents 9a2a81df 13c7ee17
Loading
Loading
Loading
Loading
+36 −14
Original line number Diff line number Diff line
@@ -319,7 +319,6 @@ public class RippleDrawable extends LayerDrawable {
                hovered = true;
            }
        }

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

@@ -819,18 +818,22 @@ public class RippleDrawable extends LayerDrawable {
        if (isBounded()) {
            canvas.clipRect(bounds);
        }
        float x, y, w, h;
        final float x, y, cx, cy, w, h;
        if (changedHotspotBounds) {
            x = mHotspotBounds.exactCenterX();
            y = mHotspotBounds.exactCenterY();
            w = mHotspotBounds.width();
            cx = x;
            cy = y;
            h = mHotspotBounds.height();
            w = mHotspotBounds.width();
            useCanvasProps = false;
        } else {
            x = mPendingX;
            y = mPendingY;
            w = bounds.width();
            cx = bounds.centerX();
            cy = bounds.centerY();
            h = bounds.height();
            w = bounds.width();
        }
        boolean shouldAnimate = mRippleActive;
        boolean shouldExit = mExitingAnimation;
@@ -838,10 +841,10 @@ public class RippleDrawable extends LayerDrawable {
        mExitingAnimation = false;
        getRipplePaint();
        drawContent(canvas);
        drawPatternedBackground(canvas);
        drawPatternedBackground(canvas, cx, cy);
        if (shouldAnimate && mRunningAnimations.size() <= MAX_RIPPLES) {
            RippleAnimationSession.AnimationProperties<Float, Paint> properties =
                    createAnimationProperties(x, y, w, h);
                    createAnimationProperties(x, y, cx, cy, w, h);
            mRunningAnimations.add(new RippleAnimationSession(properties, !useCanvasProps)
                    .setOnAnimationUpdated(() -> invalidateSelf(false))
                    .setOnSessionEnd(session -> {
@@ -863,19 +866,39 @@ public class RippleDrawable extends LayerDrawable {
                        CanvasProperty<Paint>>
                        p = s.getCanvasProperties();
                RecordingCanvas can = (RecordingCanvas) canvas;
                can.drawRipple(p.getX(), p.getY(), p.getMaxRadius(), p.getPaint(),
                CanvasProperty<Float> xProp, yProp;
                if (changedHotspotBounds) {
                    xProp = CanvasProperty.createFloat(x);
                    yProp = CanvasProperty.createFloat(y);
                    p.getShader().setTouch(x, y);
                    p.getShader().setOrigin(x, y);
                } else {
                    xProp = p.getX();
                    yProp = p.getY();
                }
                can.drawRipple(xProp, yProp, p.getMaxRadius(), p.getPaint(),
                        p.getProgress(), p.getShader());
            } else {
                RippleAnimationSession.AnimationProperties<Float, Paint> p =
                        s.getProperties();
                float xProp, yProp;
                if (changedHotspotBounds) {
                    xProp = x;
                    yProp = y;
                    p.getShader().setTouch(x, y);
                    p.getShader().setOrigin(x, y);
                } else {
                    xProp = p.getX();
                    yProp = p.getY();
                }
                float radius = p.getMaxRadius();
                canvas.drawCircle(p.getX(), p.getY(), radius, p.getPaint());
                canvas.drawCircle(xProp, yProp, radius, p.getPaint());
            }
        }
        canvas.restoreToCount(saveCount);
    }

    private void drawPatternedBackground(Canvas c) {
    private void drawPatternedBackground(Canvas c, float cx, float cy) {
        if (mRunBackgroundAnimation) {
            startBackgroundAnimation();
        }
@@ -888,8 +911,7 @@ public class RippleDrawable extends LayerDrawable {
            ColorFilter origFilter = p.getColorFilter();
            p.setColorFilter(mMaskColorFilter);
            p.setAlpha(alpha);
            Rect b = mHotspotBounds;
            c.drawCircle(b.centerX(), b.centerY(), mState.mMaxRadius, p);
            c.drawCircle(cx, cy, mState.mMaxRadius, p);
            p.setAlpha(origAlpha);
            p.setColorFilter(origFilter);
        }
@@ -903,7 +925,7 @@ public class RippleDrawable extends LayerDrawable {

    @NonNull
    private RippleAnimationSession.AnimationProperties<Float, Paint> createAnimationProperties(
            float x, float y, float w, float h) {
            float x, float y, float cx, float cy, float w, float h) {
        Paint p = new Paint(mRipplePaint);
        float radius = mState.mMaxRadius;
        RippleAnimationSession.AnimationProperties<Float, Paint> properties;
@@ -912,14 +934,14 @@ public class RippleDrawable extends LayerDrawable {
                ? mState.mColor.getColorForState(getState(), Color.BLACK)
                : mMaskColorFilter.getColor();
        shader.setColor(color);
        shader.setOrigin(w / 2, y / 2);
        shader.setOrigin(cx, cy);
        shader.setTouch(x, y);
        shader.setResolution(w, h, mState.mDensity);
        shader.setNoisePhase(0);
        shader.setRadius(radius);
        shader.setProgress(.0f);
        properties = new RippleAnimationSession.AnimationProperties<>(
                w / 2, h / 2, radius, p, 0f, shader);
                cx, cy, radius, p, 0f, shader);
        if (mMaskShader == null) {
            shader.setShader(null);
        } else {