Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit da44ac7f authored by Tiger's avatar Tiger
Browse files

Use mAnimationType to decide if the insets of the first frame is visible

Previously, we used the visibility of the source from
mInitialInsetsState to decide if the insets of the first frame is
visible. However, the visibilities of sources in mInitialInsetsState
might have already been overridden by the control target, which might be
the state after the animation, not before.

This CL uses mAnimationType to decide if the insets of the first frame
is visible.

Fix: 307488639
Test: atest WindowInsetsAnimationTests WindowInsetsAnimationImeTests
Change-Id: I707259d977af1d4430e007bf73a4b3c1b148a4a7
parent fb34923b
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import static android.view.InsetsAnimationControlImplProto.PENDING_FRACTION;
import static android.view.InsetsAnimationControlImplProto.PENDING_INSETS;
import static android.view.InsetsAnimationControlImplProto.SHOWN_ON_FINISH;
import static android.view.InsetsAnimationControlImplProto.TMP_MATRIX;
import static android.view.InsetsController.ANIMATION_TYPE_SHOW;
import static android.view.InsetsController.AnimationType;
import static android.view.InsetsController.DEBUG;
import static android.view.InsetsController.LAYOUT_INSETS_DURING_ANIMATION_SHOWN;
@@ -469,8 +470,10 @@ public class InsetsAnimationControlImpl implements InternalInsetsAnimationContro
            }
            addTranslationToMatrix(side, offset, mTmpMatrix, mTmpFrame);

            final boolean visible = mPendingFraction == 0 && source != null
                    ? source.isVisible()
            // The first frame of ANIMATION_TYPE_SHOW should be invisible since it is animated from
            // the hidden state.
            final boolean visible = mPendingFraction == 0
                    ? mAnimationType != ANIMATION_TYPE_SHOW
                    : !mFinished || mShownOnFinish;

            if (outState != null && source != null) {