Re-compute IME target after the transition finished

This replaces previous approach (440f068) with a simpler condition
at a more explicit place.

The old condition !isPlaying is always satisfied in normal traversal
that causes endless surface placement. And it might be better to
keep checkAppTransitionReady focus on legacy things, to avoid mixing
unnecessary operation while using shell transition.

Bug: 210390668
Test: 1. Enabling shell transition.
      2. Launch Settings and click search bar to show IME.
      3. Swipe from bottom to home.
      4. Click the search bar of app drawer, IME should show.
Change-Id: I89cdbcd19710720383f4488d859a7453a14c8c0f
This commit is contained in:
Riddle Hsu
2021-12-29 17:57:55 +08:00
parent d29ddfd18b
commit 359ba05c26
2 changed files with 6 additions and 7 deletions

View File

@@ -1037,13 +1037,7 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
}
}
final boolean curDisplayInTransitNotAnimate =
// legacy transition
(curDisplay.mAppTransition.isRunning() && !curDisplay.isAppTransitioning())
// shell transition
|| (curDisplay.mTransitionController.isShellTransitionsEnabled()
&& !curDisplay.mTransitionController.isPlaying());
if (curDisplayInTransitNotAnimate) {
if (curDisplay.mAppTransition.isRunning() && !curDisplay.isAppTransitioning()) {
// We have finished the animation of an app transition. To do this, we have
// delayed a lot of operations like showing and hiding apps, moving apps in
// Z-order, etc.

View File

@@ -497,6 +497,11 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe
if (fadeRotationController != null) {
fadeRotationController.onTransitionFinished();
}
// Transient-launch activities cannot be IME target (WindowState#canBeImeTarget),
// so re-compute in case the IME target is changed after transition.
if (mTransientLaunches != null) {
mTargetDisplay.computeImeTarget(true /* updateImeTarget */);
}
}
void abort() {