summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Cosmin Băieș <cosminbaies@google.com> 2025-02-05 17:58:34 +0100
committer Cosmin Băieș <cosminbaies@google.com> 2025-02-05 21:37:26 +0100
commit38633894c85feca89437b00cd7ad9c01c75376da (patch)
tree1418486cfcc525946a0db56853db4b432387aebb
parent5aefade7285b6524106d67ff5d6538371a624d20 (diff)
Wait for activity to be ready for input injection
In InputMethodServiceTest we verify the behaviour of short clicking and long clicking on the IME back button and the IME Switcher button, and we verify that the TestActivity is focused before starting the test. However, in some cases the test still fails with the input_interaction going to the NotificationShade window. This adds an extra assertion that the Activity is ready for input injection, which should detect this case early and provide a more explicit signal. Flag: EXEMPT testfix Bug: 394240124 Test: atest InputMethodServiceTest#testShowHideKeyboard_byUserAction Change-Id: I90704eccde26115c9da746742f3d74ec3a00021e
-rw-r--r--services/tests/InputMethodSystemServerTests/Android.bp21
-rw-r--r--services/tests/InputMethodSystemServerTests/src/com/android/inputmethodservice/InputMethodServiceTest.java26
2 files changed, 37 insertions, 10 deletions
diff --git a/services/tests/InputMethodSystemServerTests/Android.bp b/services/tests/InputMethodSystemServerTests/Android.bp
index da58aa1f6c66..de5f6ac0bf1e 100644
--- a/services/tests/InputMethodSystemServerTests/Android.bp
+++ b/services/tests/InputMethodSystemServerTests/Android.bp
@@ -34,24 +34,24 @@ android_test {
static_libs: [
"androidx.test.core",
- "androidx.test.runner",
- "androidx.test.espresso.core",
"androidx.test.espresso.contrib",
+ "androidx.test.espresso.core",
"androidx.test.ext.truth",
+ "androidx.test.runner",
"frameworks-base-testutils",
"mockito-target-extended-minus-junit4",
"platform-test-annotations",
"ravenwood-junit",
- "services.core",
"service-permission.stubs.system_server",
+ "services.core",
"servicestests-core-utils",
"servicestests-utils-mockito-extended",
"truth",
],
libs: [
- "android.test.mock.stubs.system",
"android.test.base.stubs.system",
+ "android.test.mock.stubs.system",
"android.test.runner.stubs.system",
],
@@ -103,27 +103,28 @@ android_test {
test_config: "src/com/android/inputmethodservice/AndroidTest.xml",
static_libs: [
+ "SimpleImeImsLib",
+ "SimpleImeTestingLib",
"androidx.test.core",
- "androidx.test.runner",
- "androidx.test.espresso.core",
"androidx.test.espresso.contrib",
+ "androidx.test.espresso.core",
"androidx.test.ext.truth",
+ "androidx.test.runner",
+ "cts-wm-util",
"frameworks-base-testutils",
"mockito-target-extended-minus-junit4",
"platform-test-annotations",
"ravenwood-junit",
- "services.core",
"service-permission.stubs.system_server",
+ "services.core",
"servicestests-core-utils",
"servicestests-utils-mockito-extended",
"truth",
- "SimpleImeTestingLib",
- "SimpleImeImsLib",
],
libs: [
- "android.test.mock.stubs.system",
"android.test.base.stubs.system",
+ "android.test.mock.stubs.system",
"android.test.runner.stubs.system",
],
diff --git a/services/tests/InputMethodSystemServerTests/src/com/android/inputmethodservice/InputMethodServiceTest.java b/services/tests/InputMethodSystemServerTests/src/com/android/inputmethodservice/InputMethodServiceTest.java
index 0f4e39511796..8a52d46f9f0a 100644
--- a/services/tests/InputMethodSystemServerTests/src/com/android/inputmethodservice/InputMethodServiceTest.java
+++ b/services/tests/InputMethodSystemServerTests/src/com/android/inputmethodservice/InputMethodServiceTest.java
@@ -38,6 +38,7 @@ import android.platform.test.annotations.RequiresFlagsDisabled;
import android.platform.test.flag.junit.CheckFlagsRule;
import android.platform.test.flag.junit.DeviceFlagsValueProvider;
import android.provider.Settings;
+import android.server.wm.WindowManagerStateHelper;
import android.util.Log;
import android.view.WindowManagerGlobal;
import android.view.WindowManagerPolicyConstants;
@@ -63,6 +64,7 @@ import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
+import org.junit.rules.TestName;
import org.junit.runner.RunWith;
import java.util.Objects;
@@ -86,11 +88,16 @@ public class InputMethodServiceTest {
private static final String DISABLE_SHOW_IME_WITH_HARD_KEYBOARD_CMD =
"settings put secure " + Settings.Secure.SHOW_IME_WITH_HARD_KEYBOARD + " 0";
+ private final WindowManagerStateHelper mWmState = new WindowManagerStateHelper();
+
private final DeviceFlagsValueProvider mFlagsValueProvider = new DeviceFlagsValueProvider();
@Rule
public final CheckFlagsRule mCheckFlagsRule = new CheckFlagsRule(mFlagsValueProvider);
+ @Rule
+ public final TestName mName = new TestName();
+
private Instrumentation mInstrumentation;
private UiDevice mUiDevice;
private Context mContext;
@@ -154,6 +161,8 @@ public class InputMethodServiceTest {
*/
@Test
public void testShowHideKeyboard_byUserAction() {
+ waitUntilActivityReadyForInputInjection(mActivity);
+
setShowImeWithHardKeyboard(true /* enabled */);
// Performs click on EditText to bring up the IME.
@@ -867,6 +876,8 @@ public class InputMethodServiceTest {
assumeTrue("Must have a navigation bar", hasNavigationBar());
assumeTrue("Must be in gesture navigation mode", isGestureNavEnabled());
+ waitUntilActivityReadyForInputInjection(mActivity);
+
setShowImeWithHardKeyboard(true /* enabled */);
verifyInputViewStatusOnMainSync(
@@ -901,6 +912,8 @@ public class InputMethodServiceTest {
assumeTrue("Must have a navigation bar", hasNavigationBar());
assumeTrue("Must be in gesture navigation mode", isGestureNavEnabled());
+ waitUntilActivityReadyForInputInjection(mActivity);
+
setShowImeWithHardKeyboard(true /* enabled */);
verifyInputViewStatusOnMainSync(
@@ -936,6 +949,8 @@ public class InputMethodServiceTest {
assumeTrue("Must have a navigation bar", hasNavigationBar());
assumeTrue("Must be in gesture navigation mode", isGestureNavEnabled());
+ waitUntilActivityReadyForInputInjection(mActivity);
+
setShowImeWithHardKeyboard(true /* enabled */);
verifyInputViewStatusOnMainSync(
@@ -974,6 +989,8 @@ public class InputMethodServiceTest {
assumeTrue("Must have a navigation bar", hasNavigationBar());
assumeTrue("Must be in gesture navigation mode", isGestureNavEnabled());
+ waitUntilActivityReadyForInputInjection(mActivity);
+
setShowImeWithHardKeyboard(true /* enabled */);
verifyInputViewStatusOnMainSync(
@@ -1143,6 +1160,15 @@ public class InputMethodServiceTest {
Log.i(TAG, "Finish preparing activity with editor.");
}
+ private void waitUntilActivityReadyForInputInjection(@NonNull TestActivity activity) {
+ try {
+ mWmState.waitUntilActivityReadyForInputInjection(activity, mInstrumentation, TAG,
+ "test: " + mName.getMethodName());
+ } catch (InterruptedException e) {
+ fail("Interrupted while waiting for activity to be ready: " + e.getMessage());
+ }
+ }
+
@NonNull
private String getInputMethodId() {
return mTargetPackageName + "/" + INPUT_METHOD_SERVICE_NAME;