summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhil Weaver <pweaver@google.com>2016-10-25 20:41:45 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2016-10-25 20:41:46 +0000
commite3024dd7b1d83d385fd644dfff82d76b05dcdda7 (patch)
treef8420152af78e6acd15cc1fed58cd874ecbab250
parent2f1d061ab5b94cef162bf3ff05d411ee02741909 (diff)
parentbf1605d391ba80e4a942e779b604fd0177724e83 (diff)
downloadcts-e3024dd7b1d83d385fd644dfff82d76b05dcdda7.tar.gz
Merge "A11y CTS: Check keyboard presence explicitly" into nyc-mr1-dev
-rw-r--r--tests/accessibilityservice/AndroidManifest.xml3
-rw-r--r--tests/accessibilityservice/src/android/accessibilityservice/cts/AccessibilitySoftKeyboardModesTest.java97
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);
+ });
}
/**