summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
Diffstat (limited to 'services')
-rw-r--r--services/tests/servicestests/src/com/android/server/AccessibilityManagerServiceTest.java84
-rw-r--r--services/tests/servicestests/src/com/android/server/MockAccessibilityService.java26
2 files changed, 87 insertions, 23 deletions
diff --git a/services/tests/servicestests/src/com/android/server/AccessibilityManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/AccessibilityManagerServiceTest.java
index 0410635..f6e3a82 100644
--- a/services/tests/servicestests/src/com/android/server/AccessibilityManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/AccessibilityManagerServiceTest.java
@@ -49,6 +49,12 @@ public class AccessibilityManagerServiceTest extends AndroidTestCase {
private static final long TIMEOUT_BINDER_CALL = 100;
/**
+ * Timeout in which we are waiting for the system to start the mock
+ * accessibility services.
+ */
+ private static final long TIMEOUT_START_MOCK_ACCESSIBILITY_SERVICES = 300;
+
+ /**
* Timeout used for testing that a service is notified only upon a
* notification timeout.
*/
@@ -164,7 +170,7 @@ public class AccessibilityManagerServiceTest extends AndroidTestCase {
ensureAccessibilityEnabled(mContext, true);
// enable the mock accessibility service
- ensureOnlyMockServicesEnabled(mContext, MyFirstMockAccessibilityService.sComponentName);
+ ensureOnlyMockServicesEnabled(mContext, true, false);
// configure the mock service
MockAccessibilityService service = MyFirstMockAccessibilityService.sInstance;
@@ -194,7 +200,7 @@ public class AccessibilityManagerServiceTest extends AndroidTestCase {
ensureAccessibilityEnabled(mContext, true);
// enable the mock accessibility service
- ensureOnlyMockServicesEnabled(mContext, MyFirstMockAccessibilityService.sComponentName);
+ ensureOnlyMockServicesEnabled(mContext, true, false);
// configure the mock service
MockAccessibilityService service = MyFirstMockAccessibilityService.sInstance;
@@ -224,7 +230,7 @@ public class AccessibilityManagerServiceTest extends AndroidTestCase {
ensureAccessibilityEnabled(mContext, true);
// enable the mock accessibility service
- ensureOnlyMockServicesEnabled(mContext, MyFirstMockAccessibilityService.sComponentName);
+ ensureOnlyMockServicesEnabled(mContext, true, false);
// configure the mock service
MockAccessibilityService service = MyFirstMockAccessibilityService.sInstance;
@@ -254,7 +260,7 @@ public class AccessibilityManagerServiceTest extends AndroidTestCase {
ensureAccessibilityEnabled(mContext, true);
// enable the mock accessibility service
- ensureOnlyMockServicesEnabled(mContext, MyFirstMockAccessibilityService.sComponentName);
+ ensureOnlyMockServicesEnabled(mContext, true, false);
// configure the mock service
MockAccessibilityService service = MyFirstMockAccessibilityService.sInstance;
@@ -305,8 +311,7 @@ public class AccessibilityManagerServiceTest extends AndroidTestCase {
ensureAccessibilityEnabled(mContext, true);
// enable the mock accessibility services
- ensureOnlyMockServicesEnabled(mContext, MyFirstMockAccessibilityService.sComponentName,
- MySecondMockAccessibilityService.sComponentName);
+ ensureOnlyMockServicesEnabled(mContext, true, true);
// configure the first mock service
MockAccessibilityService firstService = MyFirstMockAccessibilityService.sInstance;
@@ -350,8 +355,7 @@ public class AccessibilityManagerServiceTest extends AndroidTestCase {
ensureAccessibilityEnabled(mContext, true);
// enable the mock accessibility services
- ensureOnlyMockServicesEnabled(mContext, MyFirstMockAccessibilityService.sComponentName,
- MySecondMockAccessibilityService.sComponentName);
+ ensureOnlyMockServicesEnabled(mContext, true, true);
// configure the first mock service
MockAccessibilityService firstService = MyFirstMockAccessibilityService.sInstance;
@@ -390,8 +394,7 @@ public class AccessibilityManagerServiceTest extends AndroidTestCase {
ensureAccessibilityEnabled(mContext, true);
// enable the mock accessibility services
- ensureOnlyMockServicesEnabled(mContext, MyFirstMockAccessibilityService.sComponentName,
- MySecondMockAccessibilityService.sComponentName);
+ ensureOnlyMockServicesEnabled(mContext, true, true);
// configure the first mock service
MockAccessibilityService firstService = MyFirstMockAccessibilityService.sInstance;
@@ -432,8 +435,7 @@ public class AccessibilityManagerServiceTest extends AndroidTestCase {
ensureAccessibilityEnabled(mContext, true);
// enable the mock accessibility services
- ensureOnlyMockServicesEnabled(mContext, MyFirstMockAccessibilityService.sComponentName,
- MySecondMockAccessibilityService.sComponentName);
+ ensureOnlyMockServicesEnabled(mContext, true, true);
// configure the first mock service
MockAccessibilityService firstService = MyFirstMockAccessibilityService.sInstance;
@@ -475,8 +477,7 @@ public class AccessibilityManagerServiceTest extends AndroidTestCase {
ensureAccessibilityEnabled(mContext, true);
// enable the mock accessibility services
- ensureOnlyMockServicesEnabled(mContext, MyFirstMockAccessibilityService.sComponentName,
- MySecondMockAccessibilityService.sComponentName);
+ ensureOnlyMockServicesEnabled(mContext, true, true);
// configure the first mock service
MockAccessibilityService firstService = MyFirstMockAccessibilityService.sInstance;
@@ -566,21 +567,27 @@ public class AccessibilityManagerServiceTest extends AndroidTestCase {
/**
* Ensures the only {@link MockAccessibilityService}s with given component
* names are enabled by writing to the system settings and waiting until the
- * accessibility manager service picks that up.
+ * accessibility manager service picks that up or the
+ * {@link #TIMEOUT_START_MOCK_ACCESSIBILITY_SERVICES} is exceeded.
*
* @param context A context handle to access the settings.
- * @param componentNames The string representation of the
- * {@link ComponentName}s to enable.
+ * @param firstMockServiceEnabled If the first mock accessibility service is enabled.
+ * @param secondMockServiceEnabled If the second mock accessibility service is enabled.
+ * @throws IllegalStateException If some of the requested for enabling mock services
+ * is not properly started.
* @throws Exception Exception If any error occurs.
*/
- private void ensureOnlyMockServicesEnabled(Context context, String... componentNames)
- throws Exception {
+ private void ensureOnlyMockServicesEnabled(Context context, boolean firstMockServiceEnabled,
+ boolean secondMockServiceEnabled) throws Exception {
String enabledServices = Settings.Secure.getString(context.getContentResolver(),
Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES);
StringBuilder servicesToEnable = new StringBuilder();
- for (String componentName : componentNames) {
- servicesToEnable.append(componentName).append(":");
+ if (firstMockServiceEnabled) {
+ servicesToEnable.append(MyFirstMockAccessibilityService.sComponentName).append(":");
+ }
+ if (secondMockServiceEnabled) {
+ servicesToEnable.append(MySecondMockAccessibilityService.sComponentName).append(":");
}
if (servicesToEnable.equals(enabledServices)) {
@@ -590,8 +597,39 @@ public class AccessibilityManagerServiceTest extends AndroidTestCase {
Settings.Secure.putString(context.getContentResolver(),
Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES, servicesToEnable.toString());
- // wait the system to perform asynchronous processing
- Thread.sleep(TIMEOUT_BINDER_CALL);
+ // we have enabled the services of interest and need to wait until they
+ // are instantiated and started (if needed) and the system binds to them
+ boolean firstMockServiceOK = false;
+ boolean secondMockServiceOK = false;
+ long start = SystemClock.uptimeMillis();
+ long pollingInterval = TIMEOUT_START_MOCK_ACCESSIBILITY_SERVICES / 6;
+
+ while (SystemClock.uptimeMillis() - start < TIMEOUT_START_MOCK_ACCESSIBILITY_SERVICES) {
+ firstMockServiceOK = !firstMockServiceEnabled
+ || (MyFirstMockAccessibilityService.sInstance != null
+ && MyFirstMockAccessibilityService.sInstance.isSystemBoundAsClient());
+
+ secondMockServiceOK = !secondMockServiceEnabled
+ || (MySecondMockAccessibilityService.sInstance != null
+ && MySecondMockAccessibilityService.sInstance.isSystemBoundAsClient());
+
+ if (firstMockServiceOK && secondMockServiceOK) {
+ return;
+ }
+
+ Thread.sleep(pollingInterval);
+ }
+
+ StringBuilder message = new StringBuilder();
+ message.append("Mock accessibility services not started or system not bound as a client: ");
+ if (!firstMockServiceOK) {
+ message.append(MyFirstMockAccessibilityService.sComponentName);
+ message.append(" ");
+ }
+ if (!secondMockServiceOK) {
+ message.append(MySecondMockAccessibilityService.sComponentName);
+ }
+ throw new IllegalStateException(message.toString());
}
/**
diff --git a/services/tests/servicestests/src/com/android/server/MockAccessibilityService.java b/services/tests/servicestests/src/com/android/server/MockAccessibilityService.java
index 663c121..1bc9b86 100644
--- a/services/tests/servicestests/src/com/android/server/MockAccessibilityService.java
+++ b/services/tests/servicestests/src/com/android/server/MockAccessibilityService.java
@@ -18,6 +18,7 @@ package com.android.server;
import android.accessibilityservice.AccessibilityService;
import android.accessibilityservice.AccessibilityServiceInfo;
+import android.content.Intent;
import android.os.Message;
import android.view.accessibility.AccessibilityEvent;
@@ -49,6 +50,11 @@ public abstract class MockAccessibilityService extends AccessibilityService {
private boolean mReplaying;
/**
+ * Flag if the system is bound as a client to this service.
+ */
+ private boolean mIsSystemBoundAsClient;
+
+ /**
* Creates an {@link AccessibilityServiceInfo} populated with default
* values.
*
@@ -145,6 +151,26 @@ public abstract class MockAccessibilityService extends AccessibilityService {
mExpectedInterrupt = false;
}
+ @Override
+ protected void onServiceConnected() {
+ mIsSystemBoundAsClient = true;
+ }
+
+ @Override
+ public boolean onUnbind(Intent intent) {
+ mIsSystemBoundAsClient = false;
+ return false;
+ }
+
+ /**
+ * Returns if the system is bound as client to this service.
+ *
+ * @return True if the system is bound, false otherwise.
+ */
+ public boolean isSystemBoundAsClient() {
+ return mIsSystemBoundAsClient;
+ }
+
/**
* Compares all properties of the <code>expectedEvent</code> and the
* <code>receviedEvent</code> to verify that the received event is the one