AccessibilityManagerCompat.java revision d026c0a30989af62bc8eb14d75e68a21f0589c7d
1/* 2 * Copyright (C) 2011 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 17package android.support.v4.view.accessibility; 18 19import android.accessibilityservice.AccessibilityServiceInfo; 20import android.os.Build; 21import android.support.v4.view.accessibility.AccessibilityManagerCompatIcs.AccessibilityStateChangeListenerBridge; 22import android.support.v4.view.accessibility.AccessibilityManagerCompatIcs.AccessibilityStateChangeListenerWrapper; 23import android.view.accessibility.AccessibilityManager; 24 25import java.util.Collections; 26import java.util.List; 27 28/** 29 * Helper for accessing features in {@link AccessibilityManager} 30 * introduced after API level 4 in a backwards compatible fashion. 31 */ 32public final class AccessibilityManagerCompat { 33 34 interface AccessibilityManagerVersionImpl { 35 AccessibilityStateChangeListenerWrapper newAccessiblityStateChangeListener( 36 AccessibilityStateChangeListener listener); 37 boolean addAccessibilityStateChangeListener(AccessibilityManager manager, 38 AccessibilityStateChangeListener listener); 39 boolean removeAccessibilityStateChangeListener(AccessibilityManager manager, 40 AccessibilityStateChangeListener listener); 41 List<AccessibilityServiceInfo> getEnabledAccessibilityServiceList( 42 AccessibilityManager manager,int feedbackTypeFlags); 43 List<AccessibilityServiceInfo> getInstalledAccessibilityServiceList( 44 AccessibilityManager manager); 45 boolean isTouchExplorationEnabled(AccessibilityManager manager); 46 } 47 48 static class AccessibilityManagerStubImpl implements AccessibilityManagerVersionImpl { 49 @Override 50 public AccessibilityStateChangeListenerWrapper newAccessiblityStateChangeListener( 51 AccessibilityStateChangeListener listener) { 52 return null; 53 } 54 55 @Override 56 public boolean addAccessibilityStateChangeListener(AccessibilityManager manager, 57 AccessibilityStateChangeListener listener) { 58 return false; 59 } 60 61 @Override 62 public boolean removeAccessibilityStateChangeListener(AccessibilityManager manager, 63 AccessibilityStateChangeListener listener) { 64 return false; 65 } 66 67 @Override 68 public List<AccessibilityServiceInfo> getEnabledAccessibilityServiceList( 69 AccessibilityManager manager, int feedbackTypeFlags) { 70 return Collections.emptyList(); 71 } 72 73 @Override 74 public List<AccessibilityServiceInfo> getInstalledAccessibilityServiceList( 75 AccessibilityManager manager) { 76 return Collections.emptyList(); 77 } 78 79 @Override 80 public boolean isTouchExplorationEnabled(AccessibilityManager manager) { 81 return false; 82 } 83 } 84 85 static class AccessibilityManagerIcsImpl extends AccessibilityManagerStubImpl { 86 @Override 87 public AccessibilityStateChangeListenerWrapper newAccessiblityStateChangeListener( 88 final AccessibilityStateChangeListener listener) { 89 return new AccessibilityStateChangeListenerWrapper(listener, 90 new AccessibilityStateChangeListenerBridge() { 91 @Override 92 public void onAccessibilityStateChanged(boolean enabled) { 93 listener.onAccessibilityStateChanged(enabled); 94 } 95 }); 96 } 97 98 @Override 99 public boolean addAccessibilityStateChangeListener(AccessibilityManager manager, 100 AccessibilityStateChangeListener listener) { 101 return AccessibilityManagerCompatIcs.addAccessibilityStateChangeListener(manager, 102 newAccessiblityStateChangeListener(listener)); 103 } 104 105 @Override 106 public boolean removeAccessibilityStateChangeListener(AccessibilityManager manager, 107 AccessibilityStateChangeListener listener) { 108 return AccessibilityManagerCompatIcs.removeAccessibilityStateChangeListener(manager, 109 newAccessiblityStateChangeListener(listener)); 110 } 111 112 @Override 113 public List<AccessibilityServiceInfo> getEnabledAccessibilityServiceList( 114 AccessibilityManager manager, int feedbackTypeFlags) { 115 return AccessibilityManagerCompatIcs.getEnabledAccessibilityServiceList(manager, 116 feedbackTypeFlags); 117 } 118 119 @Override 120 public List<AccessibilityServiceInfo> getInstalledAccessibilityServiceList( 121 AccessibilityManager manager) { 122 return AccessibilityManagerCompatIcs.getInstalledAccessibilityServiceList(manager); 123 } 124 125 @Override 126 public boolean isTouchExplorationEnabled(AccessibilityManager manager) { 127 return AccessibilityManagerCompatIcs.isTouchExplorationEnabled(manager); 128 } 129 } 130 131 static { 132 if (Build.VERSION.SDK_INT >= 14) { // ICS 133 IMPL = new AccessibilityManagerIcsImpl(); 134 } else { 135 IMPL = new AccessibilityManagerStubImpl(); 136 } 137 } 138 139 private static final AccessibilityManagerVersionImpl IMPL; 140 141 /** 142 * Registers an {@link AccessibilityManager.AccessibilityStateChangeListener} for changes in 143 * the global accessibility state of the system. 144 * 145 * @param manager The accessibility manager. 146 * @param listener The listener. 147 * @return True if successfully registered. 148 */ 149 public static boolean addAccessibilityStateChangeListener(AccessibilityManager manager, 150 AccessibilityStateChangeListener listener) { 151 return IMPL.addAccessibilityStateChangeListener(manager, listener); 152 } 153 154 /** 155 * Unregisters an {@link AccessibilityManager.AccessibilityStateChangeListener}. 156 * 157 * @param manager The accessibility manager. 158 * @param listener The listener. 159 * @return True if successfully unregistered. 160 */ 161 public static boolean removeAccessibilityStateChangeListener(AccessibilityManager manager, 162 AccessibilityStateChangeListener listener) { 163 return IMPL.removeAccessibilityStateChangeListener(manager, listener); 164 } 165 166 /** 167 * Returns the {@link AccessibilityServiceInfo}s of the installed accessibility services. 168 * 169 * @param manager The accessibility manager. 170 * @return An unmodifiable list with {@link AccessibilityServiceInfo}s. 171 */ 172 public static List<AccessibilityServiceInfo> getInstalledAccessibilityServiceList( 173 AccessibilityManager manager) { 174 return IMPL.getInstalledAccessibilityServiceList(manager); 175 } 176 177 /** 178 * Returns the {@link AccessibilityServiceInfo}s of the enabled accessibility services 179 * for a given feedback type. 180 * 181 * @param manager The accessibility manager. 182 * @param feedbackTypeFlags The feedback type flags. 183 * @return An unmodifiable list with {@link AccessibilityServiceInfo}s. 184 * 185 * @see AccessibilityServiceInfo#FEEDBACK_AUDIBLE 186 * @see AccessibilityServiceInfo#FEEDBACK_GENERIC 187 * @see AccessibilityServiceInfo#FEEDBACK_HAPTIC 188 * @see AccessibilityServiceInfo#FEEDBACK_SPOKEN 189 * @see AccessibilityServiceInfo#FEEDBACK_VISUAL 190 */ 191 public static List<AccessibilityServiceInfo> getEnabledAccessibilityServiceList( 192 AccessibilityManager manager, int feedbackTypeFlags) { 193 return IMPL.getEnabledAccessibilityServiceList(manager, feedbackTypeFlags); 194 } 195 196 /** 197 * Returns if the touch exploration in the system is enabled. 198 * 199 * @param manager The accessibility manager. 200 * @return True if touch exploration is enabled, false otherwise. 201 */ 202 public static boolean isTouchExplorationEnabled(AccessibilityManager manager) { 203 return IMPL.isTouchExplorationEnabled(manager); 204 } 205 206 /** 207 * @deprecated Use {@link AccessibilityStateChangeListener} instead. 208 */ 209 @Deprecated 210 public static abstract class AccessibilityStateChangeListenerCompat 211 implements AccessibilityStateChangeListener { 212 } 213 214 /** 215 * Listener for the accessibility state. 216 */ 217 public interface AccessibilityStateChangeListener { 218 /** 219 * Called back on change in the accessibility state. 220 * 221 * @param enabled Whether accessibility is enabled. 222 */ 223 void onAccessibilityStateChanged(boolean enabled); 224 } 225 226 private AccessibilityManagerCompat() {} 227} 228