Handle IME when target moves between splits

Handle split-screen IME when target window is launched in secondary
from primary split.
By comparing actual InputMethod's input target to the window requesting
IME window, we can allow showInsets(ime()).

Fix: 159576146
Test: atest ImeInsetsSourceProviderTest
Change-Id: Ife4137cc84eba99cf4f6e2f3957f13dcb95818c9
This commit is contained in:
Taran Singh
2020-08-31 14:50:16 -07:00
parent 71f959be7e
commit c16e6dfd4b
2 changed files with 10 additions and 1 deletions

View File

@@ -138,8 +138,9 @@ class ImeInsetsSourceProvider extends InsetsSourceProvider {
&& dcTarget.getParentWindow() == mImeTargetFromIme
&& dcTarget.mSubLayer > mImeTargetFromIme.getWindow().mSubLayer)
|| mImeTargetFromIme == mDisplayContent.getImeFallback()
|| mImeTargetFromIme == mDisplayContent.mInputMethodInputTarget
|| controlTarget == mImeTargetFromIme
&& (mImeTargetFromIme.getWindow() == null
&& (mImeTargetFromIme.getWindow() == null
|| !mImeTargetFromIme.getWindow().isClosing());
}

View File

@@ -56,4 +56,12 @@ public class ImeInsetsSourceProviderTest extends WindowTestsBase {
mImeProvider.scheduleShowImePostLayout(appWin);
assertTrue(mImeProvider.isImeTargetFromDisplayContentAndImeSame());
}
@Test
public void testInputMethodInputTargetCanShowIme() {
WindowState target = createWindow(null, TYPE_APPLICATION, "app");
mDisplayContent.mInputMethodTarget = target;
mImeProvider.scheduleShowImePostLayout(target);
assertTrue(mImeProvider.isImeTargetFromDisplayContentAndImeSame());
}
}