17953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet/* 27953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet * Copyright (C) 2009 The Android Open Source Project 37953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet * 47953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet * Licensed under the Apache License, Version 2.0 (the "License"); 57953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet * you may not use this file except in compliance with the License. 67953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet * You may obtain a copy of the License at 77953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet * 87953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet * http://www.apache.org/licenses/LICENSE-2.0 97953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet * 107953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet * Unless required by applicable law or agreed to in writing, software 117953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet * distributed under the License is distributed on an "AS IS" BASIS, 127953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet * See the License for the specific language governing permissions and 147953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet * limitations under the License. 157953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet */ 167953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet 177953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohetpackage android.view.accessibility; 187953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet 1996131eef3869f2be1300e1620f5c3874b41bb534Xavier Ducrohetimport android.accessibilityservice.AccessibilityServiceInfo; 207953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohetimport android.content.Context; 217953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohetimport android.content.pm.ServiceInfo; 2296131eef3869f2be1300e1620f5c3874b41bb534Xavier Ducrohetimport android.view.IWindow; 2396131eef3869f2be1300e1620f5c3874b41bb534Xavier Ducrohetimport android.view.View; 247953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet 257953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohetimport java.util.Collections; 267953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohetimport java.util.List; 277953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet 287953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet/** 297953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet * System level service that serves as an event dispatch for {@link AccessibilityEvent}s. 307953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet * Such events are generated when something notable happens in the user interface, 317953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet * for example an {@link android.app.Activity} starts, the focus or selection of a 327953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet * {@link android.view.View} changes etc. Parties interested in handling accessibility 337953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet * events implement and register an accessibility service which extends 347953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet * {@link android.accessibilityservice.AccessibilityService}. 357953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet * 367953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet * @see AccessibilityEvent 377953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet * @see android.accessibilityservice.AccessibilityService 387953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet * @see android.content.Context#getSystemService 397953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet */ 407953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohetpublic final class AccessibilityManager { 417953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet private static AccessibilityManager sInstance = new AccessibilityManager(); 427953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet 437953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet /** 4496131eef3869f2be1300e1620f5c3874b41bb534Xavier Ducrohet * Listener for the accessibility state. 4596131eef3869f2be1300e1620f5c3874b41bb534Xavier Ducrohet */ 4696131eef3869f2be1300e1620f5c3874b41bb534Xavier Ducrohet public interface AccessibilityStateChangeListener { 4796131eef3869f2be1300e1620f5c3874b41bb534Xavier Ducrohet 4896131eef3869f2be1300e1620f5c3874b41bb534Xavier Ducrohet /** 4996131eef3869f2be1300e1620f5c3874b41bb534Xavier Ducrohet * Called back on change in the accessibility state. 5096131eef3869f2be1300e1620f5c3874b41bb534Xavier Ducrohet * 5196131eef3869f2be1300e1620f5c3874b41bb534Xavier Ducrohet * @param enabled Whether accessibility is enabled. 5296131eef3869f2be1300e1620f5c3874b41bb534Xavier Ducrohet */ 5396131eef3869f2be1300e1620f5c3874b41bb534Xavier Ducrohet public void onAccessibilityStateChanged(boolean enabled); 5496131eef3869f2be1300e1620f5c3874b41bb534Xavier Ducrohet } 5596131eef3869f2be1300e1620f5c3874b41bb534Xavier Ducrohet 5696131eef3869f2be1300e1620f5c3874b41bb534Xavier Ducrohet /** 577953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet * Get an AccessibilityManager instance (create one if necessary). 587953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet * 597953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet * @hide 607953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet */ 617953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet public static AccessibilityManager getInstance(Context context) { 627953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet return sInstance; 637953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet } 647953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet 657953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet /** 667953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet * Create an instance. 677953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet * 687953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet * @param context A {@link Context}. 697953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet */ 707953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet private AccessibilityManager() { 717953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet } 727953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet 737953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet /** 747953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet * Returns if the {@link AccessibilityManager} is enabled. 757953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet * 767953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet * @return True if this {@link AccessibilityManager} is enabled, false otherwise. 777953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet */ 787953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet public boolean isEnabled() { 797953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet return false; 807953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet } 817953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet 827953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet /** 837953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet * Sends an {@link AccessibilityEvent}. If this {@link AccessibilityManager} is not 847953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet * enabled the call is a NOOP. 857953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet * 867953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet * @param event The {@link AccessibilityEvent}. 877953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet * 887953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet * @throws IllegalStateException if a client tries to send an {@link AccessibilityEvent} 897953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet * while accessibility is not enabled. 907953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet */ 917953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet public void sendAccessibilityEvent(AccessibilityEvent event) { 927953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet } 937953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet 947953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet /** 957953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet * Requests interruption of the accessibility feedback from all accessibility services. 967953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet */ 977953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet public void interrupt() { 987953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet } 997953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet 1007953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet /** 1017953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet * Returns the {@link ServiceInfo}s of the installed accessibility services. 1027953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet * 1037953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet * @return An unmodifiable list with {@link ServiceInfo}s. 1047953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet */ 1057953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet public List<ServiceInfo> getAccessibilityServiceList() { 10608e2a4b56f23ce02f17300438f76ccc1f663f183Xavier Ducrohet // normal implementation does this in some case, so let's do the same 10708e2a4b56f23ce02f17300438f76ccc1f663f183Xavier Ducrohet // (unmodifiableList wrapped around null). 1087953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet List<ServiceInfo> services = null; 1097953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet return Collections.unmodifiableList(services); 1107953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet } 11196131eef3869f2be1300e1620f5c3874b41bb534Xavier Ducrohet 11296131eef3869f2be1300e1620f5c3874b41bb534Xavier Ducrohet public List<AccessibilityServiceInfo> getInstalledAccessibilityServiceList() { 11396131eef3869f2be1300e1620f5c3874b41bb534Xavier Ducrohet // normal implementation does this in some case, so let's do the same 11496131eef3869f2be1300e1620f5c3874b41bb534Xavier Ducrohet // (unmodifiableList wrapped around null). 11596131eef3869f2be1300e1620f5c3874b41bb534Xavier Ducrohet List<AccessibilityServiceInfo> services = null; 11696131eef3869f2be1300e1620f5c3874b41bb534Xavier Ducrohet return Collections.unmodifiableList(services); 11796131eef3869f2be1300e1620f5c3874b41bb534Xavier Ducrohet } 11896131eef3869f2be1300e1620f5c3874b41bb534Xavier Ducrohet 11996131eef3869f2be1300e1620f5c3874b41bb534Xavier Ducrohet public boolean addAccessibilityStateChangeListener( 12096131eef3869f2be1300e1620f5c3874b41bb534Xavier Ducrohet AccessibilityStateChangeListener listener) { 12196131eef3869f2be1300e1620f5c3874b41bb534Xavier Ducrohet return true; 12296131eef3869f2be1300e1620f5c3874b41bb534Xavier Ducrohet } 12396131eef3869f2be1300e1620f5c3874b41bb534Xavier Ducrohet 12496131eef3869f2be1300e1620f5c3874b41bb534Xavier Ducrohet public boolean removeAccessibilityStateChangeListener( 12596131eef3869f2be1300e1620f5c3874b41bb534Xavier Ducrohet AccessibilityStateChangeListener listener) { 12696131eef3869f2be1300e1620f5c3874b41bb534Xavier Ducrohet return true; 12796131eef3869f2be1300e1620f5c3874b41bb534Xavier Ducrohet } 12896131eef3869f2be1300e1620f5c3874b41bb534Xavier Ducrohet 12996131eef3869f2be1300e1620f5c3874b41bb534Xavier Ducrohet public int addAccessibilityInteractionConnection(IWindow windowToken, 13096131eef3869f2be1300e1620f5c3874b41bb534Xavier Ducrohet IAccessibilityInteractionConnection connection) { 13196131eef3869f2be1300e1620f5c3874b41bb534Xavier Ducrohet return View.NO_ID; 13296131eef3869f2be1300e1620f5c3874b41bb534Xavier Ducrohet } 13396131eef3869f2be1300e1620f5c3874b41bb534Xavier Ducrohet 13496131eef3869f2be1300e1620f5c3874b41bb534Xavier Ducrohet public void removeAccessibilityInteractionConnection(IWindow windowToken) { 13596131eef3869f2be1300e1620f5c3874b41bb534Xavier Ducrohet } 13696131eef3869f2be1300e1620f5c3874b41bb534Xavier Ducrohet 1377953e7d89b1d4d7297176fbb6aeea882577df8e6Xavier Ducrohet} 138