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

Commit 1c1fbf2c authored by Alan Viverette's avatar Alan Viverette Committed by android-build-merger
Browse files

Merge "Prevent LayerDrawable bounds updates from being re-entrant" into...

Merge "Prevent LayerDrawable bounds updates from being re-entrant" into nyc-dev am: 5c944421 am: 6b525a26
am: c44c760b

* commit 'c44c760b':
  Prevent LayerDrawable bounds updates from being re-entrant

Change-Id: If51c75c3b9d5d39dfa8d0ed6c8113ed68ed430ee
parents 7c4f19cf c44c760b
Loading
Loading
Loading
Loading
+41 −1
Original line number Diff line number Diff line
@@ -104,6 +104,9 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
    private Rect mHotspotBounds;
    private boolean mMutated;

    private boolean mSuspendChildInvalidation;
    private boolean mChildRequestedInvalidation;

    /**
     * Creates a new layer drawable with the list of specified layers.
     *
@@ -944,10 +947,38 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
      return mLayerState.mPaddingMode;
    }

    /**
     * Temporarily suspends child invalidation.
     *
     * @see #resumeChildInvalidation()
     */
    private void suspendChildInvalidation() {
        mSuspendChildInvalidation = true;
    }

    /**
     * Resumes child invalidation after suspension, immediately performing an
     * invalidation if one was requested by a child during suspension.
     *
     * @see #suspendChildInvalidation()
     */
    private void resumeChildInvalidation() {
        mSuspendChildInvalidation = false;

        if (mChildRequestedInvalidation) {
            mChildRequestedInvalidation = false;
            invalidateSelf();
        }
    }

    @Override
    public void invalidateDrawable(@NonNull Drawable who) {
        if (mSuspendChildInvalidation) {
            mChildRequestedInvalidation = true;
        } else {
            invalidateSelf();
        }
    }

    @Override
    public void scheduleDrawable(@NonNull Drawable who, @NonNull Runnable what, long when) {
@@ -1482,6 +1513,15 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
    }

    private void updateLayerBounds(Rect bounds) {
        try {
            suspendChildInvalidation();
            updateLayerBoundsInternal(bounds);
        } finally {
            resumeChildInvalidation();
        }
    }

    private void updateLayerBoundsInternal(Rect bounds) {
        int paddingL = 0;
        int paddingT = 0;
        int paddingR = 0;