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

Commit 99ca2a84 authored by Alan Viverette's avatar Alan Viverette
Browse files

Account for hotspot bounds in RippleDrawable projection check

Bug: 21502154
Change-Id: Iedf4bd07f10ec13070a68870304ab651c1f15c68
parent b5766468
Loading
Loading
Loading
Loading
+19 −7
Original line number Diff line number Diff line
@@ -333,17 +333,29 @@ public class RippleDrawable extends LayerDrawable {
     */
    @Override
    public boolean isProjected() {
        // If the maximum radius is contained entirely within the bounds, we
        // don't need to project this ripple.
        // If the layer is bounded, then we don't need to project.
        if (isBounded()) {
            return false;
        }

        // Otherwise, if the maximum radius is contained entirely within the
        // bounds then we don't need to project. This is sort of a hack to
        // prevent check box ripples from being projected across the edges of
        // scroll views. It does not impact rendering performance, and it can
        // be removed once we have better handling of projection in scrollable
        // views.
        final int radius = mState.mMaxRadius;
        final Rect bounds = getBounds();
        if (radius != RADIUS_AUTO && radius <= bounds.width() / 2
                && radius <= bounds.height() / 2) {
        final Rect drawableBounds = getBounds();
        final Rect hotspotBounds = mHotspotBounds;
        if (radius != RADIUS_AUTO
                && radius <= hotspotBounds.width() / 2
                && radius <= hotspotBounds.height() / 2
                && (drawableBounds.equals(hotspotBounds)
                        || drawableBounds.contains(hotspotBounds))) {
            return false;
        }

        // Otherwise, if the layer is bounded then we don't need to project.
        return !isBounded();
        return true;
    }

    private boolean isBounded() {