Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0b698a39 authored by Charles Chen's avatar Charles Chen Committed by Automerger Merge Worker
Browse files

Merge "Verify IME switch dialog on DualDisplayContent" into sc-dev am: 2f8d1baa

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

Change-Id: I0a7241291c2bf0a1cb7f89059db8b87a9699abdd
parents b65a5bf6 2f8d1baa
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -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);
+7 −3
Original line number Diff line number Diff line
@@ -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,
+25 −2
Original line number Diff line number Diff line
@@ -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());