Merge "Insets Animations: Always dispatch onEnd when cancelled" into sc-dev

This commit is contained in:
Adrian Roos
2021-06-22 10:29:08 +00:00
committed by Android (Google) Code Review
3 changed files with 12 additions and 1 deletions

View File

@@ -1265,7 +1265,7 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation
}
stateChanged |= getSourceConsumer(types.valueAt(j)).notifyAnimationFinished();
}
if (invokeCallback && runningAnimation.startDispatched) {
if (invokeCallback) {
dispatchAnimationEnd(runningAnimation.runner.getAnimation());
}
break;

View File

@@ -110,6 +110,10 @@ public class ViewRootInsetsControllerHost implements InsetsController.Host {
@Override
public void dispatchWindowInsetsAnimationEnd(@NonNull WindowInsetsAnimation animation) {
if (DEBUG) Log.d(TAG, "windowInsetsAnimation ended");
if (mViewRoot.mView == null) {
// The view has already detached from window.
return;
}
mViewRoot.mView.dispatchWindowInsetsAnimationEnd(animation);
}

View File

@@ -360,6 +360,13 @@ public final class WindowInsetsAnimation {
* finished, and then revert to the starting state of the animation in the first
* {@link #onProgress} callback by using post-layout view properties like {@link View#setX}
* and related methods.
*
* <p>Note that the animation might be cancelled before {@link #onStart} is dispatched. On
* {@link android.os.Build.VERSION_CODES#S S} and later, {@link #onEnd} is immediately
* dispatched without an {@link #onStart} in that case.
* On {@link android.os.Build.VERSION_CODES#R R}, no callbacks are dispatched after
* {@code #onPrepare} for such an animation.
*
* <p>
* Note: If the animation is application controlled by using
* {@link WindowInsetsController#controlWindowInsetsAnimation}, the end state of the