diff options
| author | 2021-04-26 10:29:24 +0000 | |
|---|---|---|
| committer | 2021-04-26 10:29:24 +0000 | |
| commit | 2f8d1baa63712fc7361152f31b92e590f9c04a6c (patch) | |
| tree | ea99270feba9af5b0bcc9808154f3d8acfdc6a5a | |
| parent | 6704441255206d2909d0ab86473ee62bb1b290a6 (diff) | |
| parent | 467ebb60696675e47fa4bdf13db95d4667ccb615 (diff) | |
Merge "Verify IME switch dialog on DualDisplayContent" into sc-dev
3 files changed, 32 insertions, 6 deletions
diff --git a/services/core/java/com/android/server/inputmethod/InputMethodMenuController.java b/services/core/java/com/android/server/inputmethod/InputMethodMenuController.java index e25b03481934..403187bb53ff 100644 --- a/services/core/java/com/android/server/inputmethod/InputMethodMenuController.java +++ b/services/core/java/com/android/server/inputmethod/InputMethodMenuController.java @@ -221,7 +221,6 @@ public class InputMethodMenuController { */ @VisibleForTesting public Context getSettingsContext(int displayId) { - // TODO(b/178462039): Cover the case when IME is moved to another ImeContainer. if (mSettingsContext == null || mSettingsContext.getDisplayId() != displayId) { final Context systemUiContext = ActivityThread.currentActivityThread() .createSystemUiContext(displayId); diff --git a/services/tests/wmtests/src/com/android/server/wm/DualDisplayAreaGroupPolicyTest.java b/services/tests/wmtests/src/com/android/server/wm/DualDisplayAreaGroupPolicyTest.java index bdc4b4eae630..2c3f52e05add 100644 --- a/services/tests/wmtests/src/com/android/server/wm/DualDisplayAreaGroupPolicyTest.java +++ b/services/tests/wmtests/src/com/android/server/wm/DualDisplayAreaGroupPolicyTest.java @@ -91,7 +91,7 @@ public class DualDisplayAreaGroupPolicyTest extends WindowTestsBase { doReturn(policyProvider).when(mWm).getDisplayAreaPolicyProvider(); // Display: 1920x1200 (landscape). First and second display are both 860x1200 (portrait). - mDisplay = (DualDisplayContent) new DualDisplayContent.Builder(mAtm, 1920, 1200).build(); + mDisplay = new DualDisplayContent.Builder(mAtm, 1920, 1200).build(); mFirstRoot = mDisplay.mFirstRoot; mSecondRoot = mDisplay.mSecondRoot; mFirstTda = mDisplay.getTaskDisplayArea(FEATURE_FIRST_TASK_CONTAINER); @@ -395,7 +395,7 @@ public class DualDisplayAreaGroupPolicyTest extends WindowTestsBase { } /** Display with two {@link DisplayAreaGroup}. Each of them take half of the screen. */ - private static class DualDisplayContent extends TestDisplayContent { + static class DualDisplayContent extends TestDisplayContent { final DisplayAreaGroup mFirstRoot; final DisplayAreaGroup mSecondRoot; final Rect mLastDisplayBounds; @@ -476,11 +476,15 @@ public class DualDisplayAreaGroupPolicyTest extends WindowTestsBase { TestDisplayContent createInternal(Display display) { return new DualDisplayContent(mService.mRootWindowContainer, display); } + + DualDisplayContent build() { + return (DualDisplayContent) super.build(); + } } } /** Policy to create a dual {@link DisplayAreaGroup} policy in test. */ - private static class DualDisplayTestPolicyProvider implements DisplayAreaPolicy.Provider { + static class DualDisplayTestPolicyProvider implements DisplayAreaPolicy.Provider { @Override public DisplayAreaPolicy instantiate(WindowManagerService wmService, DisplayContent content, diff --git a/services/tests/wmtests/src/com/android/server/wm/InputMethodMenuControllerTest.java b/services/tests/wmtests/src/com/android/server/wm/InputMethodMenuControllerTest.java index 1b9308d32c8c..f2418c68358d 100644 --- a/services/tests/wmtests/src/com/android/server/wm/InputMethodMenuControllerTest.java +++ b/services/tests/wmtests/src/com/android/server/wm/InputMethodMenuControllerTest.java @@ -47,6 +47,7 @@ import com.android.server.inputmethod.InputMethodMenuController; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.Mockito; // TODO(b/157888351): Move the test to inputmethod package once we find the way to test the // scenario there. @@ -59,10 +60,15 @@ import org.junit.runner.RunWith; public class InputMethodMenuControllerTest extends WindowTestsBase { private InputMethodMenuController mController; - private TestDisplayContent mSecondaryDisplay; + private DualDisplayAreaGroupPolicyTest.DualDisplayContent mSecondaryDisplay; @Before public void setUp() throws Exception { + // Let the Display to be created with the DualDisplay policy. + final DisplayAreaPolicy.Provider policyProvider = + new DualDisplayAreaGroupPolicyTest.DualDisplayTestPolicyProvider(); + Mockito.doReturn(policyProvider).when(mWm).getDisplayAreaPolicyProvider(); + mController = new InputMethodMenuController(mock(InputMethodManagerService.class)); // Mock addWindowTokenWithOptions to create a test window token. @@ -80,7 +86,8 @@ public class InputMethodMenuControllerTest extends WindowTestsBase { }).when(wms).attachWindowContextToDisplayArea(any(), eq(TYPE_INPUT_METHOD_DIALOG), anyInt(), any()); - mSecondaryDisplay = new TestDisplayContent.Builder(mAtm, 1000, 1000).build(); + mSecondaryDisplay = new DualDisplayAreaGroupPolicyTest.DualDisplayContent + .Builder(mAtm, 1000, 1000).build(); // Mock DisplayManagerGlobal to return test display when obtaining Display instance. final int displayId = mSecondaryDisplay.getDisplayId(); @@ -105,6 +112,22 @@ public class InputMethodMenuControllerTest extends WindowTestsBase { assertImeSwitchContextMetricsValidity(contextOnSecondaryDisplay, mSecondaryDisplay); } + @Test + public void testGetSettingsContextOnDualDisplayContent() { + final Context context = mController.getSettingsContext(mSecondaryDisplay.getDisplayId()); + + final DisplayArea.Tokens imeContainer = mSecondaryDisplay.getImeContainer(); + assertThat(imeContainer.getRootDisplayArea()).isEqualTo(mSecondaryDisplay); + + mSecondaryDisplay.mFirstRoot.placeImeContainer(imeContainer); + assertThat(imeContainer.getRootDisplayArea()).isEqualTo(mSecondaryDisplay.mFirstRoot); + assertImeSwitchContextMetricsValidity(context, mSecondaryDisplay); + + mSecondaryDisplay.mSecondRoot.placeImeContainer(imeContainer); + assertThat(imeContainer.getRootDisplayArea()).isEqualTo(mSecondaryDisplay.mSecondRoot); + assertImeSwitchContextMetricsValidity(context, mSecondaryDisplay); + } + private void assertImeSwitchContextMetricsValidity(Context context, DisplayContent dc) { assertThat(context.getDisplayId()).isEqualTo(dc.getDisplayId()); |