Merge "Block animation transfer after surface animation finishes."

This commit is contained in:
Chris Li
2022-01-27 03:17:35 +00:00
committed by Gerrit Code Review

View File

@@ -85,6 +85,8 @@ class SurfaceAnimator {
private boolean mAnimationStartDelayed; private boolean mAnimationStartDelayed;
private boolean mAnimationFinished;
/** /**
* @param animatable The object to animate. * @param animatable The object to animate.
* @param staticAnimationFinishedCallback Callback to invoke when an animation has finished * @param staticAnimationFinishedCallback Callback to invoke when an animation has finished
@@ -134,6 +136,7 @@ class SurfaceAnimator {
|| anim.shouldDeferAnimationFinish(resetAndInvokeFinish))) { || anim.shouldDeferAnimationFinish(resetAndInvokeFinish))) {
resetAndInvokeFinish.run(); resetAndInvokeFinish.run();
} }
mAnimationFinished = true;
} }
}; };
} }
@@ -289,6 +292,9 @@ class SurfaceAnimator {
Slog.w(TAG, "Unable to transfer animation, surface or parent is null"); Slog.w(TAG, "Unable to transfer animation, surface or parent is null");
cancelAnimation(); cancelAnimation();
return; return;
} else if (from.mAnimationFinished) {
Slog.w(TAG, "Unable to transfer animation, because " + from + " animation is finished");
return;
} }
endDelayingAnimationStart(); endDelayingAnimationStart();
final Transaction t = mAnimatable.getPendingTransaction(); final Transaction t = mAnimatable.getPendingTransaction();
@@ -367,6 +373,7 @@ class SurfaceAnimator {
SurfaceControl leash = mLeash; SurfaceControl leash = mLeash;
mLeash = null; mLeash = null;
final boolean scheduleAnim = removeLeash(t, mAnimatable, leash, destroyLeash); final boolean scheduleAnim = removeLeash(t, mAnimatable, leash, destroyLeash);
mAnimationFinished = false;
if (scheduleAnim) { if (scheduleAnim) {
mService.scheduleAnimationLocked(); mService.scheduleAnimationLocked();
} }