Loading services/tests/servicestests/src/com/android/server/AccessibilityManagerServiceTest.java +61 −23 Original line number Diff line number Diff line Loading @@ -48,6 +48,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. Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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)) { Loading @@ -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()); } /** Loading services/tests/servicestests/src/com/android/server/MockAccessibilityService.java +26 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -48,6 +49,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. Loading Loading @@ -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 Loading Loading
services/tests/servicestests/src/com/android/server/AccessibilityManagerServiceTest.java +61 −23 Original line number Diff line number Diff line Loading @@ -48,6 +48,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. Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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)) { Loading @@ -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()); } /** Loading
services/tests/servicestests/src/com/android/server/MockAccessibilityService.java +26 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -48,6 +49,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. Loading Loading @@ -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 Loading