summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2019-05-07 00:45:21 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2019-05-07 00:45:21 +0000
commit4f4df1d7555621fe0e89daa1a4dc97f7ee0f7bea (patch)
tree3bf50753b6d7cd3503614a6f141bc13a020afb7d
parent274a7b2975b88ca88547f5860252b9ac992d11b9 (diff)
parent51bc29ecf204da9553537bf188a16e8820a81dcb (diff)
Merge "Fix IME window can't show on Simulated display" into qt-dev
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerService.java3
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/DisplayWindowSettingsTests.java18
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java10
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);
+ }
}