diff options
| author | 2019-05-07 00:45:21 +0000 | |
|---|---|---|
| committer | 2019-05-07 00:45:21 +0000 | |
| commit | 4f4df1d7555621fe0e89daa1a4dc97f7ee0f7bea (patch) | |
| tree | 3bf50753b6d7cd3503614a6f141bc13a020afb7d | |
| parent | 274a7b2975b88ca88547f5860252b9ac992d11b9 (diff) | |
| parent | 51bc29ecf204da9553537bf188a16e8820a81dcb (diff) | |
Merge "Fix IME window can't show on Simulated display" into qt-dev
3 files changed, 29 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 0fbf956fcfa1..6b899fd79685 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -7432,8 +7432,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public boolean shouldShowIme(int displayId) { synchronized (mGlobalLock) { - final DisplayContent displayContent = mRoot.getDisplayContent(displayId); - return mDisplayWindowSettings.shouldShowImeLocked(displayContent); + return WindowManagerService.this.shouldShowIme(displayId); } } } diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayWindowSettingsTests.java b/services/tests/wmtests/src/com/android/server/wm/DisplayWindowSettingsTests.java index 652ea7d32953..336fa041dea8 100644 --- a/services/tests/wmtests/src/com/android/server/wm/DisplayWindowSettingsTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/DisplayWindowSettingsTests.java @@ -51,6 +51,7 @@ import android.view.Surface; import androidx.test.filters.SmallTest; import com.android.dx.mockito.inline.extended.ExtendedMockito; +import com.android.server.LocalServices; import com.android.server.policy.WindowManagerPolicy; import org.junit.After; @@ -588,6 +589,23 @@ public class DisplayWindowSettingsTests extends WindowTestsBase { getStoredDisplayAttributeValue("shouldShowIme")); } + @Test + public void testShouldShowImeWithinForceDesktopMode() { + try { + // Presume display enabled force desktop mode from developer options. + final DisplayContent dc = createMockSimulatedDisplay(); + mWm.setForceDesktopModeOnExternalDisplays(true); + final WindowManagerInternal wmInternal = LocalServices.getService( + WindowManagerInternal.class); + // Make sure WindowManagerInter#shouldShowIme as true is due to + // mForceDesktopModeOnExternalDisplays as true. + assertFalse(mWm.mDisplayWindowSettings.shouldShowImeLocked(dc)); + assertTrue(wmInternal.shouldShowIme(dc.getDisplayId())); + } finally { + mWm.setForceDesktopModeOnExternalDisplays(false); + } + } + /** * Prepares display settings and stores in {@link #mStorage}. Uses provided display identifier * and stores windowingMode=WINDOWING_MODE_PINNED. diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java b/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java index 8c37ca5e309e..3a702cb9521c 100644 --- a/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java +++ b/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java @@ -19,6 +19,7 @@ package com.android.server.wm; import static android.app.AppOpsManager.OP_NONE; import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD; import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; +import static android.os.Process.SYSTEM_UID; import static android.view.Display.DEFAULT_DISPLAY; import static android.view.DisplayAdjustments.DEFAULT_DISPLAY_ADJUSTMENTS; import static android.view.View.VISIBLE; @@ -445,4 +446,13 @@ class WindowTestsBase { return new WindowTestUtils.TestWindowState(mWm, mMockSession, mIWindow, attrs, token); } } + + /** Creates a {@link DisplayContent} as parts of simulate display info for test. */ + DisplayContent createMockSimulatedDisplay() { + DisplayInfo displayInfo = new DisplayInfo(); + displayInfo.copyFrom(mDisplayInfo); + displayInfo.type = Display.TYPE_VIRTUAL; + displayInfo.ownerUid = SYSTEM_UID; + return createNewDisplay(displayInfo); + } } |