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

Commit bbf42404 authored by Adrian Roos's avatar Adrian Roos
Browse files

IME: Dispatch onProgress directly during app-driven onReady

Fixes and issue where the initial frame of an app-driven transition would flicker
because onProgress would only be called after the first frame had been rendered.

Bug: 111084606
Test: atest WmTests
Change-Id: I312ba27d95aaeb69c94bbdba39ee423ed38ffdac
parent 08b29115
Loading
Loading
Loading
Loading
+4 −16
Original line number Diff line number Diff line
@@ -190,9 +190,7 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation
                    onAnimationFinish();
                }
            });
            setStartingAnimation(true);
            mAnimator.start();
            setStartingAnimation(false);
        }

        @Override
@@ -203,9 +201,6 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation
            }
        }

        protected void setStartingAnimation(boolean startingAnimation) {
        }

        protected void onAnimationFinish() {
            mController.finish(mShow);
        }
@@ -239,16 +234,6 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation
        final @AnimationType int type;
    }

    private class DefaultAnimationControlListener extends InternalAnimationControlListener {
        DefaultAnimationControlListener(boolean show) {
            super(show);
        }
        
        @Override
        protected void setStartingAnimation(boolean startingAnimation) {
            mStartingAnimation = startingAnimation;
        }
    }
    /**
     * Represents a control request that we had to defer because we are waiting for the IME to
     * process our show request.
@@ -822,7 +807,8 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation
            return;
        }

        final DefaultAnimationControlListener listener = new DefaultAnimationControlListener(show);
        final InternalAnimationControlListener listener =
                new InternalAnimationControlListener(show);
        // Show/hide animations always need to be relative to the display frame, in order that shown
        // and hidden state insets are correct.
        controlAnimationUnchecked(
@@ -878,7 +864,9 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation
                    return true;
                }
                mViewRoot.mView.dispatchWindowInsetsAnimationStart(animation, bounds);
                mStartingAnimation = true;
                listener.onReady(controller, types);
                mStartingAnimation = false;
                return true;
            }
        });