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