Merge "Fix IME flicker to home screen w/ orientation change" into sc-dev am: 76683e1e79 am: 18b1bb27e8

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/14716060

Change-Id: Ieee8d6812a8a1abac1bef3186ed6cdd2ba27209b
This commit is contained in:
Taran Singh
2021-05-28 03:03:57 +00:00
committed by Automerger Merge Worker
2 changed files with 20 additions and 0 deletions

View File

@@ -4012,6 +4012,10 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
// screen. If it's not covering the entire screen the IME might extend beyond the apps
// bounds.
if (allowAttachToApp && shouldImeAttachedToApp()) {
if (mImeLayeringTarget.mActivityRecord != mImeInputTarget.mActivityRecord) {
// Do not change parent if the window hasn't requested IME.
return null;
}
return mImeLayeringTarget.mActivityRecord.getSurfaceControl();
}

View File

@@ -358,6 +358,22 @@ public class DisplayContentTests extends WindowTestsBase {
verify(imeContainer).assignRelativeLayer(any(), eq(imeSurfaceParent), anyInt(), eq(true));
}
@Test
public void testComputeImeTargetReturnsNull_windowDidntRequestIme() {
final WindowState win1 = createWindow(null, TYPE_BASE_APPLICATION,
new ActivityBuilder(mAtm).setCreateTask(true).build(), "app");
final WindowState win2 = createWindow(null, TYPE_BASE_APPLICATION,
new ActivityBuilder(mAtm).setCreateTask(true).build(), "app2");
mDisplayContent.setImeInputTarget(win1);
mDisplayContent.setImeLayeringTarget(win2);
doReturn(true).when(mDisplayContent).shouldImeAttachedToApp();
// Compute IME parent returns nothing if current target and window receiving input
// are different i.e. if current window didn't request IME.
assertNull("computeImeParent() should be null", mDisplayContent.computeImeParent());
}
/**
* This tests root task movement between displays and proper root task's, task's and app token's
* display container references updates.