Merge "Fix IME snapshot missing to remove by 2 consecutive creation calls" into tm-dev
This commit is contained in:
@@ -4140,6 +4140,10 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
|
||||
final SurfaceControl.Transaction t = getPendingTransaction();
|
||||
// Prepare IME screenshot for the target if it allows to attach into.
|
||||
if (mInputMethodWindow != null && mInputMethodWindow.isVisible()) {
|
||||
// Remove the obsoleted IME snapshot first in case the new snapshot happens to
|
||||
// override the current one before the transition finish and the surface never be
|
||||
// removed on the task.
|
||||
removeImeSurfaceImmediately();
|
||||
mImeScreenshot = new ImeScreenshot(
|
||||
mWmService.mSurfaceControlFactory.apply(null), mImeLayeringTarget);
|
||||
mImeScreenshot.attachAndShow(t);
|
||||
|
||||
@@ -2050,6 +2050,32 @@ public class DisplayContentTests extends WindowTestsBase {
|
||||
verify(mDisplayContent, never()).showImeScreenshot();
|
||||
}
|
||||
|
||||
@UseTestDisplay(addWindows = {W_INPUT_METHOD})
|
||||
@Test
|
||||
public void testShowImeScreenshot_removeCurSnapshotBeforeCreateNext() {
|
||||
final Task rootTask = createTask(mDisplayContent);
|
||||
final Task task = createTaskInRootTask(rootTask, 0 /* userId */);
|
||||
final ActivityRecord activity = createActivityRecord(mDisplayContent, task);
|
||||
final WindowState win = createWindow(null, TYPE_BASE_APPLICATION, activity, "win");
|
||||
|
||||
mDisplayContent.setImeLayeringTarget(win);
|
||||
mDisplayContent.setImeInputTarget(win);
|
||||
spyOn(mDisplayContent);
|
||||
spyOn(mDisplayContent.mInputMethodWindow);
|
||||
doReturn(true).when(mDisplayContent.mInputMethodWindow).isVisible();
|
||||
mDisplayContent.getInsetsStateController().getImeSourceProvider().setImeShowing(true);
|
||||
|
||||
// Verify when the timing of 2 showImeScreenshot invocations are very close, will first
|
||||
// detach the current snapshot then create the next one.
|
||||
mDisplayContent.showImeScreenshot();
|
||||
DisplayContent.ImeScreenshot curSnapshot = mDisplayContent.mImeScreenshot;
|
||||
spyOn(curSnapshot);
|
||||
mDisplayContent.showImeScreenshot();
|
||||
verify(curSnapshot).detach(any());
|
||||
assertNotNull(mDisplayContent.mImeScreenshot);
|
||||
assertNotEquals(curSnapshot, mDisplayContent.mImeScreenshot);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRotateBounds_keepSamePhysicalPosition() {
|
||||
final DisplayContent dc =
|
||||
|
||||
Reference in New Issue
Block a user