Merge "Fix keyboard is attached to wrong task in split" into tm-dev am: 969d1b8eed
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17821943 Change-Id: I6b9b2ff7bd84ade39b2ec3eb7f161c54a6624329 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -4272,7 +4272,15 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
|
|||||||
setImeInputTarget(target);
|
setImeInputTarget(target);
|
||||||
mInsetsStateController.updateAboveInsetsState(mInsetsStateController
|
mInsetsStateController.updateAboveInsetsState(mInsetsStateController
|
||||||
.getRawInsetsState().getSourceOrDefaultVisibility(ITYPE_IME));
|
.getRawInsetsState().getSourceOrDefaultVisibility(ITYPE_IME));
|
||||||
updateImeControlTarget();
|
// Force updating the IME parent when the IME control target has been updated to the
|
||||||
|
// remote target but updateImeParent not happen because ImeLayeringTarget and
|
||||||
|
// ImeInputTarget are different. Then later updateImeParent would be ignored when there
|
||||||
|
// is no new IME control target to change the IME parent.
|
||||||
|
final boolean forceUpdateImeParent = mImeControlTarget == mRemoteInsetsControlTarget
|
||||||
|
&& (mInputMethodSurfaceParent != null
|
||||||
|
&& !mInputMethodSurfaceParent.isSameSurface(
|
||||||
|
mImeWindowsContainer.getParent().mSurfaceControl));
|
||||||
|
updateImeControlTarget(forceUpdateImeParent);
|
||||||
}
|
}
|
||||||
// Unfreeze IME insets after the new target updated, in case updateAboveInsetsState may
|
// Unfreeze IME insets after the new target updated, in case updateAboveInsetsState may
|
||||||
// deliver unrelated IME insets change to the non-IME requester.
|
// deliver unrelated IME insets change to the non-IME requester.
|
||||||
|
|||||||
@@ -1183,6 +1183,31 @@ public class DisplayContentTests extends WindowTestsBase {
|
|||||||
mDisplayContent.computeImeParent());
|
mDisplayContent.computeImeParent());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testComputeImeParent_remoteControlTarget() throws Exception {
|
||||||
|
final DisplayContent dc = mDisplayContent;
|
||||||
|
WindowState app1 = createWindow(null, TYPE_BASE_APPLICATION, "app1");
|
||||||
|
WindowState app2 = createWindow(null, TYPE_BASE_APPLICATION, "app2");
|
||||||
|
|
||||||
|
dc.setImeLayeringTarget(app1);
|
||||||
|
dc.setImeInputTarget(app2);
|
||||||
|
dc.setRemoteInsetsController(createDisplayWindowInsetsController());
|
||||||
|
dc.getImeTarget(IME_TARGET_LAYERING).getWindow().setWindowingMode(
|
||||||
|
WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW);
|
||||||
|
dc.getImeInputTarget().getWindowState().setWindowingMode(
|
||||||
|
WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW);
|
||||||
|
|
||||||
|
// Expect ImeParent is null since ImeLayeringTarget and ImeInputTarget are different.
|
||||||
|
assertNull(dc.computeImeParent());
|
||||||
|
|
||||||
|
// ImeLayeringTarget and ImeInputTarget are updated to the same.
|
||||||
|
dc.setImeInputTarget(app1);
|
||||||
|
assertEquals(dc.getImeTarget(IME_TARGET_LAYERING), dc.getImeInputTarget());
|
||||||
|
|
||||||
|
// The ImeParent should be the display.
|
||||||
|
assertEquals(dc.getImeContainer().getParent().getSurfaceControl(), dc.computeImeParent());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testInputMethodInputTarget_isClearedWhenWindowStateIsRemoved() throws Exception {
|
public void testInputMethodInputTarget_isClearedWhenWindowStateIsRemoved() throws Exception {
|
||||||
final DisplayContent dc = createNewDisplay();
|
final DisplayContent dc = createNewDisplay();
|
||||||
|
|||||||
Reference in New Issue
Block a user