blob: 7ac05727cb9b92016b74f0ec6a1f1f6c99fc36d8 [file] [log] [blame]
/*
* Copyright (C) 2012 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.view.accessibility.cts;
import android.accessibilityservice.AccessibilityServiceInfo;
import android.app.Service;
import android.content.pm.ServiceInfo;
import android.cts.util.PollingCheck;
import android.provider.Settings;
import android.test.AndroidTestCase;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityManager;
import android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener;
import java.util.List;
/**
* Class for testing {@link AccessibilityManager}.
*/
public class AccessibilityManagerTest extends AndroidTestCase {
private static final String SOME_ACCESSIBLITY_SERVICES_PACKAGE_NAME =
"android.view.accessibility.services";
private static final String SPEAKING_ACCESSIBLITY_SERVICE_NAME =
"android.view.accessibility.services.SpeakingAccessibilityService";
private static final String VIBRATING_ACCESSIBLITY_SERVICE_NAME =
"android.view.accessibility.services.VibratingAccessibilityService";
private AccessibilityManager mAccessibilityManager;
@Override
public void setUp() throws Exception {
mAccessibilityManager = (AccessibilityManager)
getContext().getSystemService(Service.ACCESSIBILITY_SERVICE);
assertEquals("Accessibility should have been enabled by the test runner.",
1, Settings.Secure.getInt(mContext.getContentResolver(),
Settings.Secure.ACCESSIBILITY_ENABLED));
}
public void testAddAndRemoveAccessibilityStateChangeListener() throws Exception {
AccessibilityStateChangeListener listener = new AccessibilityStateChangeListener() {
@Override
public void onAccessibilityStateChanged(boolean enabled) {
/* do nothing */
}
};
assertTrue(mAccessibilityManager.addAccessibilityStateChangeListener(listener));
assertTrue(mAccessibilityManager.removeAccessibilityStateChangeListener(listener));
}
public void testIsTouchExplorationEnabled() throws Exception {
new PollingCheck() {
@Override
protected boolean check() {
return mAccessibilityManager.isTouchExplorationEnabled();
}
}.run();
}
public void testGetInstalledAccessibilityServicesList() throws Exception {
List<AccessibilityServiceInfo> installedServices =
mAccessibilityManager.getInstalledAccessibilityServiceList();
assertFalse("There must be at least one installed service.", installedServices.isEmpty());
boolean speakingServiceInstalled = false;
boolean vibratingServiceInstalled = false;
final int serviceCount = installedServices.size();
for (int i = 0; i < serviceCount; i++) {
AccessibilityServiceInfo installedService = installedServices.get(i);
ServiceInfo serviceInfo = installedService.getResolveInfo().serviceInfo;
if (SOME_ACCESSIBLITY_SERVICES_PACKAGE_NAME.equals(serviceInfo.packageName)
&& SPEAKING_ACCESSIBLITY_SERVICE_NAME.equals(serviceInfo.name)) {
speakingServiceInstalled = true;
}
if (SOME_ACCESSIBLITY_SERVICES_PACKAGE_NAME.equals(serviceInfo.packageName)
&& VIBRATING_ACCESSIBLITY_SERVICE_NAME.equals(serviceInfo.name)) {
vibratingServiceInstalled = true;
}
}
assertTrue("The speaking service should be installed.", speakingServiceInstalled);
assertTrue("The vibrating service should be installed.", vibratingServiceInstalled);
}
public void testGetEnabledAccessibilityServiceList() throws Exception {
List<AccessibilityServiceInfo> enabledServices =
mAccessibilityManager.getEnabledAccessibilityServiceList(
AccessibilityServiceInfo.FEEDBACK_ALL_MASK);
boolean speakingServiceEnabled = false;
boolean vibratingServiceEnabled = false;
final int serviceCount = enabledServices.size();
for (int i = 0; i < serviceCount; i++) {
AccessibilityServiceInfo enabledService = enabledServices.get(i);
ServiceInfo serviceInfo = enabledService.getResolveInfo().serviceInfo;
if (SOME_ACCESSIBLITY_SERVICES_PACKAGE_NAME.equals(serviceInfo.packageName)
&& SPEAKING_ACCESSIBLITY_SERVICE_NAME.equals(serviceInfo.name)) {
speakingServiceEnabled = true;
}
if (SOME_ACCESSIBLITY_SERVICES_PACKAGE_NAME.equals(serviceInfo.packageName)
&& VIBRATING_ACCESSIBLITY_SERVICE_NAME.equals(serviceInfo.name)) {
vibratingServiceEnabled = true;
}
}
assertTrue("The speaking service should be enabled.", speakingServiceEnabled);
assertTrue("The vibrating service should be enabled.", vibratingServiceEnabled);
}
public void testGetEnabledAccessibilityServiceListForType() throws Exception {
List<AccessibilityServiceInfo> enabledServices =
mAccessibilityManager.getEnabledAccessibilityServiceList(
AccessibilityServiceInfo.FEEDBACK_SPOKEN);
assertSame("There should be only one enabled speaking service.", 1, enabledServices.size());
final int serviceCount = enabledServices.size();
for (int i = 0; i < serviceCount; i++) {
AccessibilityServiceInfo enabledService = enabledServices.get(i);
ServiceInfo serviceInfo = enabledService.getResolveInfo().serviceInfo;
if (SOME_ACCESSIBLITY_SERVICES_PACKAGE_NAME.equals(serviceInfo.packageName)
&& SPEAKING_ACCESSIBLITY_SERVICE_NAME.equals(serviceInfo.name)) {
return;
}
}
fail("The speaking service is not enabled.");
}
@SuppressWarnings("deprecation")
public void testGetAccessibilityServiceList() throws Exception {
List<ServiceInfo> services = mAccessibilityManager.getAccessibilityServiceList();
boolean speakingServiceInstalled = false;
boolean vibratingServiceInstalled = false;
final int serviceCount = services.size();
for (int i = 0; i < serviceCount; i++) {
ServiceInfo serviceInfo = services.get(i);
if (SOME_ACCESSIBLITY_SERVICES_PACKAGE_NAME.equals(serviceInfo.packageName)
&& SPEAKING_ACCESSIBLITY_SERVICE_NAME.equals(serviceInfo.name)) {
speakingServiceInstalled = true;
}
if (SOME_ACCESSIBLITY_SERVICES_PACKAGE_NAME.equals(serviceInfo.packageName)
&& VIBRATING_ACCESSIBLITY_SERVICE_NAME.equals(serviceInfo.name)) {
vibratingServiceInstalled = true;
}
}
assertTrue("The speaking service should be installed.", speakingServiceInstalled);
assertTrue("The vibrating service should be installed.", vibratingServiceInstalled);
}
public void testInterrupt() throws Exception {
// The APIs are heavily tested in the android.accessibiliyservice package.
// This just makes sure the call does not throw an exception.
mAccessibilityManager.interrupt();
}
public void testSendAccessibilityEvent() throws Exception {
// The APIs are heavily tested in the android.accessibiliyservice package.
// This just makes sure the call does not throw an exception.
mAccessibilityManager.sendAccessibilityEvent(AccessibilityEvent.obtain(
AccessibilityEvent.TYPE_VIEW_CLICKED));
}
}