Fix test failures(bug 268231685) on TV targets
Fix bug in both InputMethodManagerServiceWindowGainedFocusTest and AutoShowTest by taking screen size into consideration, because IMMS would do auto-show in ImeVisibilityStateComputer#computeState() on large screen devices.
Bug: 275666243
Bug: 268231685
Test: atest com.android.server.inputmethod.InputMethodManagerServiceWindowGainedFocusTest
Change-Id: Ib8cc36f65386591740c571bba8d6edd41d2373f2
(cherry picked from commit 552a71909856af9e5e7a9668c052b692b5927fec)
Merged-In: Ib8cc36f65386591740c571bba8d6edd41d2373f2
diff --git a/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/InputMethodManagerServiceTestBase.java b/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/InputMethodManagerServiceTestBase.java
index 9829e57..3d29ed5 100644
--- a/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/InputMethodManagerServiceTestBase.java
+++ b/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/InputMethodManagerServiceTestBase.java
@@ -34,6 +34,7 @@
import android.app.ActivityManagerInternal;
import android.content.Context;
import android.content.pm.PackageManagerInternal;
+import android.content.res.Configuration;
import android.hardware.display.DisplayManagerInternal;
import android.hardware.input.IInputManager;
import android.hardware.input.InputManager;
@@ -121,6 +122,7 @@
protected IInputMethodInvoker mMockInputMethodInvoker;
protected InputMethodManagerService mInputMethodManagerService;
protected ServiceThread mServiceThread;
+ protected boolean mIsLargeScreen;
@BeforeClass
public static void setupClass() {
@@ -145,6 +147,8 @@
spyOn(mContext);
mTargetSdkVersion = mContext.getApplicationInfo().targetSdkVersion;
+ mIsLargeScreen = mContext.getResources().getConfiguration()
+ .isLayoutSizeAtLeast(Configuration.SCREENLAYOUT_SIZE_LARGE);
mCallingUserId = UserHandle.getCallingUserId();
mEditorInfo = new EditorInfo();
mEditorInfo.packageName = TEST_EDITOR_PKG_NAME;
diff --git a/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/InputMethodManagerServiceWindowGainedFocusTest.java b/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/InputMethodManagerServiceWindowGainedFocusTest.java
index c6b355c..cea65b5 100644
--- a/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/InputMethodManagerServiceWindowGainedFocusTest.java
+++ b/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/InputMethodManagerServiceWindowGainedFocusTest.java
@@ -124,7 +124,8 @@
switch (mSoftInputState) {
case SOFT_INPUT_STATE_UNSPECIFIED:
- boolean showSoftInput = mSoftInputAdjustment == SOFT_INPUT_ADJUST_RESIZE;
+ boolean showSoftInput =
+ (mSoftInputAdjustment == SOFT_INPUT_ADJUST_RESIZE) || mIsLargeScreen;
verifyShowSoftInput(
showSoftInput /* setVisible */, showSoftInput /* showSoftInput */);
// Soft input was hidden by default, so it doesn't need to call
@@ -165,7 +166,8 @@
switch (mSoftInputState) {
case SOFT_INPUT_STATE_UNSPECIFIED:
- boolean hideSoftInput = mSoftInputAdjustment != SOFT_INPUT_ADJUST_RESIZE;
+ boolean hideSoftInput =
+ (mSoftInputAdjustment != SOFT_INPUT_ADJUST_RESIZE) && !mIsLargeScreen;
verifyShowSoftInput(false /* setVisible */, false /* showSoftInput */);
// Soft input was hidden by default, so it doesn't need to call
// {@code IMS#hideSoftInput()}.
diff --git a/tests/InputMethodStressTest/src/com/android/inputmethod/stresstest/AutoShowTest.java b/tests/InputMethodStressTest/src/com/android/inputmethod/stresstest/AutoShowTest.java
index 0c7e452..9c70e6e 100644
--- a/tests/InputMethodStressTest/src/com/android/inputmethod/stresstest/AutoShowTest.java
+++ b/tests/InputMethodStressTest/src/com/android/inputmethod/stresstest/AutoShowTest.java
@@ -32,6 +32,7 @@
import android.app.Instrumentation;
import android.content.Intent;
+import android.content.res.Configuration;
import android.os.SystemClock;
import android.platform.test.annotations.RootPermissionTest;
import android.platform.test.rule.UnlockScreenRule;
@@ -69,8 +70,6 @@
new PressHomeBeforeTestRule();
@Rule(order = 4) public ScreenCaptureRule mScreenCaptureRule =
new ScreenCaptureRule("/sdcard/InputMethodStressTest");
-
- // TODO(b/240359838): add test case {@code Configuration.SCREENLAYOUT_SIZE_LARGE}.
@Parameterized.Parameters(
name = "windowFocusFlags={0}, softInputVisibility={1}, softInputAdjustment={2}")
public static List<Object[]> windowAndSoftInputFlagParameters() {
@@ -80,11 +79,14 @@
private final int mSoftInputFlags;
private final int mWindowFocusFlags;
private final Instrumentation mInstrumentation;
+ private final boolean mIsLargeScreen;
public AutoShowTest(int windowFocusFlags, int softInputVisibility, int softInputAdjustment) {
mSoftInputFlags = softInputVisibility | softInputAdjustment;
mWindowFocusFlags = windowFocusFlags;
mInstrumentation = InstrumentationRegistry.getInstrumentation();
+ mIsLargeScreen = mInstrumentation.getContext().getResources()
+ .getConfiguration().isLayoutSizeAtLeast(Configuration.SCREENLAYOUT_SIZE_LARGE);
}
/**
@@ -322,8 +324,7 @@
verifyClickBehavior(activity);
}
- public static void verifyAutoShowBehavior_forwardWithKeyboardOff(TestActivity activity) {
- // public: also used by ImeOpenCloseStressTest
+ private void verifyAutoShowBehavior_forwardWithKeyboardOff(TestActivity activity) {
if (hasUnfocusableWindowFlags(activity)) {
verifyImeAlwaysHiddenWithWindowFlagSet(activity);
return;
@@ -353,12 +354,12 @@
break;
}
case WindowManager.LayoutParams.SOFT_INPUT_STATE_UNSPECIFIED: {
- if (softInputAdjustment
- == WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE) {
+ if ((softInputAdjustment
+ == WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE) || mIsLargeScreen) {
// The current system behavior will choose to show IME automatically when
// navigating forward to an app that has no visibility state specified
// (i.e. SOFT_INPUT_STATE_UNSPECIFIED) with set SOFT_INPUT_ADJUST_RESIZE
- // flag.
+ // flag or running on a large screen device.
waitOnMainUntilImeIsShown(editText);
} else {
verifyImeIsAlwaysHidden(editText);
@@ -370,7 +371,7 @@
}
}
- private static void verifyAutoShowBehavior_forwardWithKeyboardOn(TestActivity activity) {
+ private void verifyAutoShowBehavior_forwardWithKeyboardOn(TestActivity activity) {
int windowFlags = activity.getWindow().getAttributes().flags;
int softInputMode = activity.getWindow().getAttributes().softInputMode;
int softInputVisibility = softInputMode & WindowManager.LayoutParams.SOFT_INPUT_MASK_STATE;
@@ -414,12 +415,12 @@
break;
}
case WindowManager.LayoutParams.SOFT_INPUT_STATE_UNSPECIFIED: {
- if (softInputAdjustment
- == WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE) {
+ if ((softInputAdjustment
+ == WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE) || mIsLargeScreen) {
// The current system behavior will choose to show IME automatically when
- // navigating
- // forward to an app that has no visibility state specified (i.e.
- // SOFT_INPUT_STATE_UNSPECIFIED) with set SOFT_INPUT_ADJUST_RESIZE flag.
+ // navigating forward to an app that has no visibility state specified (i.e.
+ // SOFT_INPUT_STATE_UNSPECIFIED) with set SOFT_INPUT_ADJUST_RESIZE flag or
+ // running on a large screen device.
waitOnMainUntilImeIsShown(editText);
} else {
verifyImeIsAlwaysHidden(editText);