1 /* 2 * Copyright (C) 2009 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.view.accessibility; 18 19 import android.accessibilityservice.AccessibilityServiceInfo; 20 import android.annotation.NonNull; 21 import android.content.Context; 22 import android.content.pm.ServiceInfo; 23 import android.view.IWindow; 24 import android.view.View; 25 26 import java.util.Collections; 27 import java.util.List; 28 29 /** 30 * System level service that serves as an event dispatch for {@link AccessibilityEvent}s. 31 * Such events are generated when something notable happens in the user interface, 32 * for example an {@link android.app.Activity} starts, the focus or selection of a 33 * {@link android.view.View} changes etc. Parties interested in handling accessibility 34 * events implement and register an accessibility service which extends 35 * {@code android.accessibilityservice.AccessibilityService}. 36 * 37 * @see AccessibilityEvent 38 * @see android.content.Context#getSystemService 39 */ 40 @SuppressWarnings("UnusedDeclaration") 41 public final class AccessibilityManager { 42 43 private static AccessibilityManager sInstance = new AccessibilityManager(null, null, 0); 44 45 46 /** 47 * Listener for the accessibility state. 48 */ 49 public interface AccessibilityStateChangeListener { 50 51 /** 52 * Called back on change in the accessibility state. 53 * 54 * @param enabled Whether accessibility is enabled. 55 */ onAccessibilityStateChanged(boolean enabled)56 public void onAccessibilityStateChanged(boolean enabled); 57 } 58 59 /** 60 * Listener for the system touch exploration state. To listen for changes to 61 * the touch exploration state on the device, implement this interface and 62 * register it with the system by calling 63 * {@link #addTouchExplorationStateChangeListener}. 64 */ 65 public interface TouchExplorationStateChangeListener { 66 67 /** 68 * Called when the touch exploration enabled state changes. 69 * 70 * @param enabled Whether touch exploration is enabled. 71 */ onTouchExplorationStateChanged(boolean enabled)72 public void onTouchExplorationStateChanged(boolean enabled); 73 } 74 75 /** 76 * Listener for the system high text contrast state. To listen for changes to 77 * the high text contrast state on the device, implement this interface and 78 * register it with the system by calling 79 * {@link #addHighTextContrastStateChangeListener}. 80 */ 81 public interface HighTextContrastChangeListener { 82 83 /** 84 * Called when the high text contrast enabled state changes. 85 * 86 * @param enabled Whether high text contrast is enabled. 87 */ onHighTextContrastStateChanged(boolean enabled)88 public void onHighTextContrastStateChanged(boolean enabled); 89 } 90 91 private final IAccessibilityManagerClient.Stub mClient = 92 new IAccessibilityManagerClient.Stub() { 93 public void setState(int state) { 94 } 95 96 public void notifyServicesStateChanged() { 97 } 98 99 public void setRelevantEventTypes(int eventTypes) { 100 } 101 }; 102 103 /** 104 * Get an AccessibilityManager instance (create one if necessary). 105 * 106 */ getInstance(Context context)107 public static AccessibilityManager getInstance(Context context) { 108 return sInstance; 109 } 110 111 /** 112 * Create an instance. 113 * 114 * @param context A {@link Context}. 115 */ AccessibilityManager(Context context, IAccessibilityManager service, int userId)116 public AccessibilityManager(Context context, IAccessibilityManager service, int userId) { 117 } 118 getClient()119 public IAccessibilityManagerClient getClient() { 120 return mClient; 121 } 122 123 /** 124 * Returns if the {@link AccessibilityManager} is enabled. 125 * 126 * @return True if this {@link AccessibilityManager} is enabled, false otherwise. 127 */ isEnabled()128 public boolean isEnabled() { 129 return false; 130 } 131 132 /** 133 * Returns if the touch exploration in the system is enabled. 134 * 135 * @return True if touch exploration is enabled, false otherwise. 136 */ isTouchExplorationEnabled()137 public boolean isTouchExplorationEnabled() { 138 return true; 139 } 140 141 /** 142 * Returns if the high text contrast in the system is enabled. 143 * <p> 144 * <strong>Note:</strong> You need to query this only if you application is 145 * doing its own rendering and does not rely on the platform rendering pipeline. 146 * </p> 147 * 148 */ isHighTextContrastEnabled()149 public boolean isHighTextContrastEnabled() { 150 return false; 151 } 152 153 /** 154 * Sends an {@link AccessibilityEvent}. 155 */ sendAccessibilityEvent(AccessibilityEvent event)156 public void sendAccessibilityEvent(AccessibilityEvent event) { 157 } 158 159 /** 160 * Requests interruption of the accessibility feedback from all accessibility services. 161 */ interrupt()162 public void interrupt() { 163 } 164 165 /** 166 * Returns the {@link ServiceInfo}s of the installed accessibility services. 167 * 168 * @return An unmodifiable list with {@link ServiceInfo}s. 169 */ 170 @Deprecated getAccessibilityServiceList()171 public List<ServiceInfo> getAccessibilityServiceList() { 172 return Collections.emptyList(); 173 } 174 getInstalledAccessibilityServiceList()175 public List<AccessibilityServiceInfo> getInstalledAccessibilityServiceList() { 176 return Collections.emptyList(); 177 } 178 179 /** 180 * Returns the {@link AccessibilityServiceInfo}s of the enabled accessibility services 181 * for a given feedback type. 182 * 183 * @param feedbackTypeFlags The feedback type flags. 184 * @return An unmodifiable list with {@link AccessibilityServiceInfo}s. 185 * 186 * @see AccessibilityServiceInfo#FEEDBACK_AUDIBLE 187 * @see AccessibilityServiceInfo#FEEDBACK_GENERIC 188 * @see AccessibilityServiceInfo#FEEDBACK_HAPTIC 189 * @see AccessibilityServiceInfo#FEEDBACK_SPOKEN 190 * @see AccessibilityServiceInfo#FEEDBACK_VISUAL 191 */ getEnabledAccessibilityServiceList( int feedbackTypeFlags)192 public List<AccessibilityServiceInfo> getEnabledAccessibilityServiceList( 193 int feedbackTypeFlags) { 194 return Collections.emptyList(); 195 } 196 197 /** 198 * Registers an {@link AccessibilityStateChangeListener} for changes in 199 * the global accessibility state of the system. 200 * 201 * @param listener The listener. 202 * @return True if successfully registered. 203 */ addAccessibilityStateChangeListener( AccessibilityStateChangeListener listener)204 public boolean addAccessibilityStateChangeListener( 205 AccessibilityStateChangeListener listener) { 206 return true; 207 } 208 removeAccessibilityStateChangeListener( AccessibilityStateChangeListener listener)209 public boolean removeAccessibilityStateChangeListener( 210 AccessibilityStateChangeListener listener) { 211 return true; 212 } 213 214 /** 215 * Registers a {@link TouchExplorationStateChangeListener} for changes in 216 * the global touch exploration state of the system. 217 * 218 * @param listener The listener. 219 * @return True if successfully registered. 220 */ addTouchExplorationStateChangeListener( @onNull TouchExplorationStateChangeListener listener)221 public boolean addTouchExplorationStateChangeListener( 222 @NonNull TouchExplorationStateChangeListener listener) { 223 return true; 224 } 225 226 /** 227 * Unregisters a {@link TouchExplorationStateChangeListener}. 228 * 229 * @param listener The listener. 230 * @return True if successfully unregistered. 231 */ removeTouchExplorationStateChangeListener( @onNull TouchExplorationStateChangeListener listener)232 public boolean removeTouchExplorationStateChangeListener( 233 @NonNull TouchExplorationStateChangeListener listener) { 234 return true; 235 } 236 237 /** 238 * Registers a {@link HighTextContrastChangeListener} for changes in 239 * the global high text contrast state of the system. 240 * 241 * @param listener The listener. 242 * @return True if successfully registered. 243 * 244 */ addHighTextContrastStateChangeListener( @onNull HighTextContrastChangeListener listener)245 public boolean addHighTextContrastStateChangeListener( 246 @NonNull HighTextContrastChangeListener listener) { 247 return true; 248 } 249 250 /** 251 * Unregisters a {@link HighTextContrastChangeListener}. 252 * 253 * @param listener The listener. 254 * @return True if successfully unregistered. 255 * 256 */ removeHighTextContrastStateChangeListener( @onNull HighTextContrastChangeListener listener)257 public boolean removeHighTextContrastStateChangeListener( 258 @NonNull HighTextContrastChangeListener listener) { 259 return true; 260 } 261 262 /** 263 * Sets the current state and notifies listeners, if necessary. 264 * 265 * @param stateFlags The state flags. 266 */ setStateLocked(int stateFlags)267 private void setStateLocked(int stateFlags) { 268 } 269 addAccessibilityInteractionConnection(IWindow windowToken, IAccessibilityInteractionConnection connection)270 public int addAccessibilityInteractionConnection(IWindow windowToken, 271 IAccessibilityInteractionConnection connection) { 272 return View.NO_ID; 273 } 274 removeAccessibilityInteractionConnection(IWindow windowToken)275 public void removeAccessibilityInteractionConnection(IWindow windowToken) { 276 } 277 278 } 279