Update IME parent onConfigurationChanged

When an app is moving between fold and unfold state, screenWidth will
change in DisplayContent#onConfigurationChanged() and depending on if
InputTarget is not-resizeable window, IME should no longer be attached
to the app to use full width.
We should update IME parent by calling updateImeParent() and it shall
take care of handling all such cases.

Fix: 183484673
Test: atest DisplayContentTests
Change-Id: I9e892c4c320c61d4a9ceefaf309e76b816c73388
This commit is contained in:
Taran Singh
2021-04-26 19:17:29 +00:00
parent 1d0ef86d51
commit 5fcf28e8bd
2 changed files with 7 additions and 2 deletions

View File

@@ -2409,6 +2409,8 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
mDisplayPolicy.onConfigurationChanged();
mPinnedTaskController.onPostDisplayConfigurationChanged();
}
// Update IME parent if needed.
updateImeParent();
if (lastOrientation != getConfiguration().orientation) {
getMetricsLogger().write(
@@ -3947,7 +3949,8 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
}
// Otherwise, we just attach it to where the display area policy put it.
return mImeWindowsContainer.getParent().getSurfaceControl();
return mImeWindowsContainer.getParent() != null
? mImeWindowsContainer.getParent().getSurfaceControl() : null;
}
void setLayoutNeeded() {

View File

@@ -349,7 +349,9 @@ public class DisplayContentTests extends WindowTestsBase {
doReturn(imeSurfaceParent).when(mDisplayContent).computeImeParent();
spyOn(imeContainer);
mDisplayContent.updateImeParent();
mDisplayContent.setImeInputTarget(startingWin);
mDisplayContent.onConfigurationChanged(new Configuration());
verify(mDisplayContent).updateImeParent();
// Force reassign the relative layer when the IME surface parent is changed.
verify(imeContainer).assignRelativeLayer(any(), eq(imeSurfaceParent), anyInt(), eq(true));