From 9745f97572f247520c230ba91457fcfd9c56000d Mon Sep 17 00:00:00 2001 From: Vadim Caen Date: Tue, 17 Sep 2019 19:16:14 +0200 Subject: Check nullity of finished callback Test: atest SurfaceAnimator (added regression test) Change-Id: Ib4658dd8cc2d9a503ea24555e47a9013ec19d7fc --- .../core/java/com/android/server/wm/SurfaceAnimator.java | 3 ++- .../src/com/android/server/wm/SurfaceAnimatorTest.java | 13 +++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/wm/SurfaceAnimator.java b/services/core/java/com/android/server/wm/SurfaceAnimator.java index cd211a28a908..ba728ba18d57 100644 --- a/services/core/java/com/android/server/wm/SurfaceAnimator.java +++ b/services/core/java/com/android/server/wm/SurfaceAnimator.java @@ -54,6 +54,7 @@ class SurfaceAnimator { final Animatable mAnimatable; private final OnAnimationFinishedCallback mInnerAnimationFinishedCallback; @VisibleForTesting + @Nullable final Runnable mAnimationFinishedCallback; private boolean mAnimationStartDelayed; @@ -262,7 +263,7 @@ class SurfaceAnimator { if (!mAnimationStartDelayed && forwardCancel) { animation.onAnimationCancelled(leash); } - if (!restarting) { + if (!restarting && mAnimationFinishedCallback != null) { mAnimationFinishedCallback.run(); } } diff --git a/services/tests/wmtests/src/com/android/server/wm/SurfaceAnimatorTest.java b/services/tests/wmtests/src/com/android/server/wm/SurfaceAnimatorTest.java index 340e7411d21e..2b1c4fff5861 100644 --- a/services/tests/wmtests/src/com/android/server/wm/SurfaceAnimatorTest.java +++ b/services/tests/wmtests/src/com/android/server/wm/SurfaceAnimatorTest.java @@ -137,6 +137,19 @@ public class SurfaceAnimatorTest extends WindowTestsBase { verify(mTransaction).remove(eq(mAnimatable.mLeash)); } + @Test + public void testCancelWithNullFinishCallbackAnimation() { + SurfaceAnimator animator = new SurfaceAnimator(mAnimatable, null, mWm); + animator.startAnimation(mTransaction, mSpec, true /* hidden */); + assertTrue(animator.isAnimating()); + assertNotNull(animator.getAnimation()); + animator.cancelAnimation(); + assertFalse(animator.isAnimating()); + assertNull(animator.getAnimation()); + verify(mSpec).onAnimationCancelled(any()); + verify(mTransaction).remove(eq(mAnimatable.mLeash)); + } + @Test public void testDelayingAnimationStart() { mAnimatable.mSurfaceAnimator.startDelayingAnimationStart(); -- cgit v1.2.3-59-g8ed1b