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
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitDecorManager.java b/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitDecorManager.java
index de30dbb..484294a 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitDecorManager.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitDecorManager.java
@@ -160,6 +160,15 @@
             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 @@
                 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;
         }