diff options
author | Phil Weaver <pweaver@google.com> | 2016-10-25 20:41:45 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2016-10-25 20:41:46 +0000 |
commit | e3024dd7b1d83d385fd644dfff82d76b05dcdda7 (patch) | |
tree | f8420152af78e6acd15cc1fed58cd874ecbab250 | |
parent | 2f1d061ab5b94cef162bf3ff05d411ee02741909 (diff) | |
parent | bf1605d391ba80e4a942e779b604fd0177724e83 (diff) | |
download | cts-e3024dd7b1d83d385fd644dfff82d76b05dcdda7.tar.gz |
Merge "A11y CTS: Check keyboard presence explicitly" into nyc-mr1-dev
-rw-r--r-- | tests/accessibilityservice/AndroidManifest.xml | 3 | ||||
-rw-r--r-- | tests/accessibilityservice/src/android/accessibilityservice/cts/AccessibilitySoftKeyboardModesTest.java | 97 |
2 files changed, 41 insertions, 59 deletions
diff --git a/tests/accessibilityservice/AndroidManifest.xml b/tests/accessibilityservice/AndroidManifest.xml index 3381f487ca4..e13cdeeef4d 100644 --- a/tests/accessibilityservice/AndroidManifest.xml +++ b/tests/accessibilityservice/AndroidManifest.xml @@ -67,8 +67,7 @@ <activity android:label="@string/accessibility_soft_keyboard_modes_activity" - android:name=".AccessibilitySoftKeyboardModesTest$SoftKeyboardModesActivity" - android:windowSoftInputMode="stateAlwaysVisible" /> + android:name=".AccessibilitySoftKeyboardModesTest$SoftKeyboardModesActivity" /> <service android:name=".InstrumentedAccessibilityService" diff --git a/tests/accessibilityservice/src/android/accessibilityservice/cts/AccessibilitySoftKeyboardModesTest.java b/tests/accessibilityservice/src/android/accessibilityservice/cts/AccessibilitySoftKeyboardModesTest.java index 263c4020d9c..3c1db3b5de0 100644 --- a/tests/accessibilityservice/src/android/accessibilityservice/cts/AccessibilitySoftKeyboardModesTest.java +++ b/tests/accessibilityservice/src/android/accessibilityservice/cts/AccessibilitySoftKeyboardModesTest.java @@ -16,24 +16,18 @@ package android.accessibilityservice.cts; import android.accessibilityservice.AccessibilityServiceInfo; import android.accessibilityservice.AccessibilityService.SoftKeyboardController; +import android.app.Activity; import android.app.UiAutomation; -import android.content.ContentResolver; -import android.content.Context; import android.os.Bundle; -import android.os.ParcelFileDescriptor; import android.os.SystemClock; -import android.provider.Settings; import android.test.ActivityInstrumentationTestCase2; +import android.view.View; import android.view.accessibility.AccessibilityEvent; -import android.view.accessibility.AccessibilityManager; import android.accessibilityservice.cts.R; +import android.view.accessibility.AccessibilityWindowInfo; +import android.view.inputmethod.InputMethodManager; -import java.io.BufferedReader; -import java.io.FileInputStream; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.nio.charset.StandardCharsets; import java.util.List; import java.util.concurrent.TimeoutException; @@ -91,7 +85,11 @@ public class AccessibilitySoftKeyboardModesTest extends ActivityInstrumentationT @Override public void tearDown() throws Exception { + mKeyboardController.setShowMode(SHOW_MODE_AUTO); mService.runOnServiceSync(() -> mService.disableSelf()); + Activity activity = getActivity(); + activity.getSystemService(InputMethodManager.class) + .hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0); } public void testApiReturnValues_shouldChangeValueOnRequestAndSendCallback() throws Exception { @@ -109,7 +107,7 @@ public class AccessibilitySoftKeyboardModesTest extends ActivityInstrumentationT }; mKeyboardController.addOnShowModeChangedListener(listener); - // The soft keyboard should be in its' default mode. + // The soft keyboard should be in its default mode. assertEquals(SHOW_MODE_AUTO, mKeyboardController.getShowMode()); // Set the show mode to SHOW_MODE_HIDDEN. @@ -130,56 +128,18 @@ public class AccessibilitySoftKeyboardModesTest extends ActivityInstrumentationT assertTrue(mKeyboardController.removeOnShowModeChangedListener(listener)); } - public void testHideSoftKeyboard_shouldHideAndShowKeyboardOnRequest() throws Exception { - // The soft keyboard should be in its' default mode. + public void testHideSoftKeyboard_shouldHideKeyboardOnRequest() throws Exception { + // The soft keyboard should be in its default mode. assertEquals(SHOW_MODE_AUTO, mKeyboardController.getShowMode()); - // Note: This Activity always has a visible keyboard (due to windowSoftInputMode being set - // to stateAlwaysVisible). - waitForIdle(); - int numWindowsWithIme = mUiAutomation.getWindows().size(); - + forceImeToBeShown(); + waitForImePresentToBe(true); // Request the keyboard be hidden. assertTrue(mKeyboardController.setShowMode(SHOW_MODE_HIDDEN)); - waitForWindowStateChanged(); - waitForIdle(); - // Make sure the keyboard is hidden. - assertEquals(numWindowsWithIme - 1, mUiAutomation.getWindows().size()); + waitForImePresentToBe(false); - // Request the default keyboard mode. assertTrue(mKeyboardController.setShowMode(SHOW_MODE_AUTO)); - waitForWindowStateChanged(); - waitForIdle(); - - // Make sure the keyboard is visible. - assertEquals(numWindowsWithIme, mUiAutomation.getWindows().size()); - } - - public void testHideSoftKeyboard_shouldHideKeyboardUntilServiceIsDisabled() throws Exception { - // The soft keyboard should be in its' default mode. - assertEquals(SHOW_MODE_AUTO, mKeyboardController.getShowMode()); - - // Note: This Activity always has a visible keyboard (due to windowSoftInputMode being set - // to stateAlwaysVisible). - waitForIdle(); - int numWindowsWithIme = mUiAutomation.getWindows().size(); - - // Set the show mode to SHOW_MODE_HIDDEN. - assertTrue(mKeyboardController.setShowMode(SHOW_MODE_HIDDEN)); - waitForWindowStateChanged(); - waitForIdle(); - - // Make sure the keyboard is hidden. - assertEquals(numWindowsWithIme - 1, mUiAutomation.getWindows().size()); - - // Make sure we can see the soft keyboard once all Accessibility Services are disabled. - mService.disableSelf(); - waitForWindowStateChanged(); - waitForIdle(); - - // See how many windows are present. - assertEquals(numWindowsWithIme, mUiAutomation.getWindows().size()); } private void waitForCallbackValueWithLock(int expectedValue) throws Exception { @@ -202,7 +162,7 @@ public class AccessibilitySoftKeyboardModesTest extends ActivityInstrumentationT + "> does not match expected value < " + expectedValue + ">"); } - private void waitForWindowStateChanged() throws Exception { + private void waitForWindowChanges() { try { mUiAutomation.executeAndWaitForEvent(new Runnable() { @Override @@ -223,8 +183,31 @@ public class AccessibilitySoftKeyboardModesTest extends ActivityInstrumentationT } } - private void waitForIdle() throws TimeoutException { - mUiAutomation.waitForIdle(TIMEOUT_ACCESSIBILITY_STATE_IDLE, TIMEOUT_ASYNC_PROCESSING); + private boolean isImeWindowPresent() { + List<AccessibilityWindowInfo> windows = mUiAutomation.getWindows(); + for (int i = 0; i < windows.size(); i++) { + if (windows.get(i).getType() == AccessibilityWindowInfo.TYPE_INPUT_METHOD) { + return true; + } + } + return false; + } + + private void waitForImePresentToBe(boolean imeShown) { + long timeOutTime = System.currentTimeMillis() + TIMEOUT_ASYNC_PROCESSING; + while (isImeWindowPresent() != imeShown) { + assertTrue(System.currentTimeMillis() < timeOutTime); + waitForWindowChanges(); + } + } + + private void forceImeToBeShown() { + getInstrumentation().runOnMainSync(() -> { + Activity activity = getActivity(); + View editText = activity.findViewById(R.id.edit_text); + activity.getSystemService(InputMethodManager.class) + .showSoftInput(editText, InputMethodManager.SHOW_FORCED); + }); } /** |