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

Commit 99866c56 authored by Tony Huang's avatar Tony Huang
Browse files

Fix NPE if draging again while animating

The animator cancel calling might cause surfaces released by our
implementation. Moving the cancel call before we make sure surface
is not null.

Fix: 230686609
Test: Open animation scale setting and try drop then drag again
      divider quickly
Test: pass exising tests
Change-Id: I2e94f3ece3f211ceb15f380e4ee9322b8c27f8ac
parent aff48311
Loading
Loading
Loading
Loading
+10 −5
Original line number Diff line number Diff line
@@ -160,6 +160,15 @@ public class SplitDecorManager extends WindowlessWindowManager {
            mBounds.set(newBounds);
        }

        final boolean show =
                newBounds.width() > mBounds.width() || newBounds.height() > mBounds.height();
        final boolean animate = show != mShown;
        if (animate && mFadeAnimator != null && mFadeAnimator.isRunning()) {
            // If we need to animate and animator still running, cancel it before we ensure both
            // background and icon surfaces are non null for next animation.
            mFadeAnimator.cancel();
        }

        if (mBackgroundLeash == null) {
            mBackgroundLeash = SurfaceUtils.makeColorLayer(mHostLeash,
                    RESIZING_BACKGROUND_SURFACE_NAME, mSurfaceSession);
@@ -183,11 +192,7 @@ public class SplitDecorManager extends WindowlessWindowManager {
                newBounds.width() / 2 - mIconSize / 2,
                newBounds.height() / 2 - mIconSize / 2);

        boolean show = newBounds.width() > mBounds.width() || newBounds.height() > mBounds.height();
        if (show != mShown) {
            if (mFadeAnimator != null && mFadeAnimator.isRunning()) {
                mFadeAnimator.cancel();
            }
        if (animate) {
            startFadeAnimation(show, false /* isResized */);
            mShown = show;
        }