Merge "Fix Keyboard covered input box after leaving split screen" into sc-dev

This commit is contained in:
Ming-Shin Lu
2021-05-11 12:23:16 +00:00
committed by Android (Google) Code Review
2 changed files with 10 additions and 1 deletions

View File

@@ -2449,6 +2449,10 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
setWindowingMode(windowingMode);
}
/**
* See {@code WindowState#applyImeWindowsIfNeeded} for the details that we won't traverse the
* IME window in some cases.
*/
boolean forAllImeWindows(ToBooleanFunction<WindowState> callback, boolean traverseTopToBottom) {
return mImeWindowsContainer.forAllWindowForce(callback, traverseTopToBottom);
}
@@ -4566,6 +4570,8 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
private boolean skipImeWindowsDuringTraversal(DisplayContent dc) {
// We skip IME windows so they're processed just above their target, except
// in split-screen mode where we process the IME containers above the docked divider.
// Note that this method check should align with {@link
// WindowState#applyImeWindowsIfNeeded} in case of any state mismatch.
return dc.getImeTarget(IME_TARGET_LAYERING) != null
&& !dc.getDefaultTaskDisplayArea().isSplitScreenModeActivated();
}

View File

@@ -4842,7 +4842,10 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
// directly above it. The exception is if we are in split screen
// in which case we process the IME at the DisplayContent level to
// ensure it is above the docked divider.
if (isImeLayeringTarget() && !inSplitScreenWindowingMode()) {
// (i.e. Like {@link DisplayContent.ImeContainer#skipImeWindowsDuringTraversal}, the IME
// window will be ignored to traverse when the IME target is still in split-screen mode).
if (isImeLayeringTarget()
&& !getDisplayContent().getDefaultTaskDisplayArea().isSplitScreenModeActivated()) {
if (getDisplayContent().forAllImeWindows(callback, traverseTopToBottom)) {
return true;
}