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
Fix: 233159027
Test: Open animation scale setting and try drop then drag again
      divider quickly
Test: pass exising tests
Change-Id: I2e94f3ece3f211ceb15f380e4ee9322b8c27f8ac
Merged-In: I2e94f3ece3f211ceb15f380e4ee9322b8c27f8ac
(cherry picked from commit 99866c56ad)
This commit is contained in:
Tony Huang
2022-05-18 17:09:24 +08:00
parent c45a6dd61c
commit 2641f715ce

View File

@@ -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;
}