one WindowContainer has one SurfaceAnimator object.
so one WindowState has one SurfaceAnimator object .
final OnAnimationFinishedCallback mInnerAnimationFinishedCallback;
AnimationAdapter.startAnimation(mLeash, t, type, mInnerAnimationFinishedCallback);
final OnAnimationFinishedCallback mInnerAnimationFinishedCallback;
AnimationAdapter.startAnimation(mLeash, t, type, mInnerAnimationFinishedCallback);
/**
* Requests to start the animation.
*
* @param animationLeash The surface to run the animation on. See {@link SurfaceAnimator} for an
* overview of the mechanism. This surface needs to be released by the
* component running the animation after {@code finishCallback} has been
* invoked, or after the animation was cancelled.
* @param t The Transaction to apply the initial frame of the animation.
* @param type The type of the animation.
* @param finishCallback The callback to be invoked when the animation has finished.
*/
void startAnimation(SurfaceControl animationLeash, Transaction t, @AnimationType int type,
@NonNull OnAnimationFinishedCallback finishCallback);
LocalAnimationAdapter:
@Override
public void startAnimation(SurfaceControl animationLeash, Transaction t,
@AnimationType int type, @NonNull OnAnimationFinishedCallback finishCallback) {
mAnimator.startAnimation(mSpec, animationLeash, t,
() -> finishCallback.onAnimationFinished(type, this));
}
…
SurfaceAnimator mInnerAnimationFinishedCallback will be called by the AnimationAdapter .