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
This commit is contained in:
Adrian Roos
2020-01-28 18:23:39 +01:00
parent 08b29115c8
commit bbf42404b7

View File

@@ -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;
}
});