[go: nahoru, domu]

blob: e91ee92cc32813191d9a473f6cb9327735594f9b [file] [log] [blame]
Aurimas Liutikasac5fe7c2018-03-06 14:40:53 -08001/*
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 androidx.core.view.accessibility;
18
19import android.accessibilityservice.AccessibilityServiceInfo;
20import android.os.Build;
Aurimas Liutikas9dede512018-03-13 14:08:08 -070021import android.view.accessibility.AccessibilityManager;
22
Alan Viverettee4131dc2021-11-12 10:35:12 -050023import androidx.annotation.DoNotInline;
Aurimas Liutikasac5fe7c2018-03-06 14:40:53 -080024import androidx.annotation.NonNull;
25import androidx.annotation.RequiresApi;
Aurimas Liutikasac5fe7c2018-03-06 14:40:53 -080026
27import java.util.List;
28
29/**
30 * Helper for accessing features in {@link AccessibilityManager}.
31 */
32public final class AccessibilityManagerCompat {
33 /**
34 * Registers an {@link AccessibilityManager.AccessibilityStateChangeListener} for changes in
35 * the global accessibility state of the system.
36 *
37 * @param manager The accessibility manager.
38 * @param listener The listener.
39 * @return True if successfully registered.
40 *
41 * @deprecated Use {@link AccessibilityManager#addAccessibilityStateChangeListener(
42 * AccessibilityManager.AccessibilityStateChangeListener)} directly.
43 */
Alan Viverette170c27a2019-10-18 15:54:50 -040044 @SuppressWarnings("deprecation")
Aurimas Liutikasac5fe7c2018-03-06 14:40:53 -080045 @Deprecated
46 public static boolean addAccessibilityStateChangeListener(AccessibilityManager manager,
47 AccessibilityStateChangeListener listener) {
48 if (listener == null) {
49 return false;
50 }
51 return manager.addAccessibilityStateChangeListener(
52 new AccessibilityStateChangeListenerWrapper(listener));
53 }
54
55 /**
56 * Unregisters an {@link AccessibilityManager.AccessibilityStateChangeListener}.
57 *
58 * @param manager The accessibility manager.
59 * @param listener The listener.
60 * @return True if successfully unregistered.
61 *
62 * @deprecated Use {@link AccessibilityManager#removeAccessibilityStateChangeListener(
63 * AccessibilityManager.AccessibilityStateChangeListener)} directly.
64 */
Alan Viverette170c27a2019-10-18 15:54:50 -040065 @SuppressWarnings("deprecation")
Aurimas Liutikasac5fe7c2018-03-06 14:40:53 -080066 @Deprecated
67 public static boolean removeAccessibilityStateChangeListener(AccessibilityManager manager,
68 AccessibilityStateChangeListener listener) {
69 if (listener == null) {
70 return false;
71 }
72 return manager.removeAccessibilityStateChangeListener(
73 new AccessibilityStateChangeListenerWrapper(listener));
74 }
75
Alan Viverette170c27a2019-10-18 15:54:50 -040076 @SuppressWarnings("deprecation")
Aurimas Liutikasac5fe7c2018-03-06 14:40:53 -080077 private static class AccessibilityStateChangeListenerWrapper
78 implements AccessibilityManager.AccessibilityStateChangeListener {
79 AccessibilityStateChangeListener mListener;
80
81 AccessibilityStateChangeListenerWrapper(
82 @NonNull AccessibilityStateChangeListener listener) {
83 mListener = listener;
84 }
85
86 @Override
87 public int hashCode() {
88 return mListener.hashCode();
89 }
90
91 @Override
92 public boolean equals(Object o) {
93 if (this == o) {
94 return true;
95 }
Aurimas Liutikas16c80102019-10-18 13:45:49 -070096 if (!(o instanceof AccessibilityStateChangeListenerWrapper)) {
Aurimas Liutikasac5fe7c2018-03-06 14:40:53 -080097 return false;
98 }
99 AccessibilityStateChangeListenerWrapper other =
100 (AccessibilityStateChangeListenerWrapper) o;
101 return mListener.equals(other.mListener);
102 }
103
104 @Override
105 public void onAccessibilityStateChanged(boolean enabled) {
106 mListener.onAccessibilityStateChanged(enabled);
107 }
108 }
109
110 /**
111 * Returns the {@link AccessibilityServiceInfo}s of the installed accessibility services.
112 *
113 * @param manager The accessibility manager.
114 * @return An unmodifiable list with {@link AccessibilityServiceInfo}s.
115 *
116 * @deprecated Use {@link AccessibilityManager#getInstalledAccessibilityServiceList()} directly.
117 */
118 @Deprecated
119 public static List<AccessibilityServiceInfo> getInstalledAccessibilityServiceList(
120 AccessibilityManager manager) {
121 return manager.getInstalledAccessibilityServiceList();
122 }
123
124 /**
125 * Returns the {@link AccessibilityServiceInfo}s of the enabled accessibility services
126 * for a given feedback type.
127 *
128 * @param manager The accessibility manager.
129 * @param feedbackTypeFlags The feedback type flags.
130 * @return An unmodifiable list with {@link AccessibilityServiceInfo}s.
131 *
132 * @see AccessibilityServiceInfo#FEEDBACK_AUDIBLE
133 * @see AccessibilityServiceInfo#FEEDBACK_GENERIC
134 * @see AccessibilityServiceInfo#FEEDBACK_HAPTIC
135 * @see AccessibilityServiceInfo#FEEDBACK_SPOKEN
136 * @see AccessibilityServiceInfo#FEEDBACK_VISUAL
137 *
138 * @deprecated Use {@link AccessibilityManager#getEnabledAccessibilityServiceList(int)}
139 * directly.
140 */
141 @Deprecated
142 public static List<AccessibilityServiceInfo> getEnabledAccessibilityServiceList(
143 AccessibilityManager manager, int feedbackTypeFlags) {
144 return manager.getEnabledAccessibilityServiceList(feedbackTypeFlags);
145 }
146
147 /**
148 * Returns if the touch exploration in the system is enabled.
149 *
150 * @param manager The accessibility manager.
151 * @return True if touch exploration is enabled, false otherwise.
152 *
153 * @deprecated Use {@link AccessibilityManager#isTouchExplorationEnabled()} directly.
154 */
155 @Deprecated
156 public static boolean isTouchExplorationEnabled(AccessibilityManager manager) {
157 return manager.isTouchExplorationEnabled();
158 }
159
160 /**
161 * Registers a {@link TouchExplorationStateChangeListener} for changes in
162 * the global touch exploration state of the system.
163 *
164 * @param listener The listener.
165 * @return True if successfully registered.
166 */
Alan Viverettee4131dc2021-11-12 10:35:12 -0500167 public static boolean addTouchExplorationStateChangeListener(
168 @NonNull AccessibilityManager manager,
169 @NonNull TouchExplorationStateChangeListener listener) {
Aurimas Liutikasac5fe7c2018-03-06 14:40:53 -0800170 if (Build.VERSION.SDK_INT >= 19) {
Alan Viverettee4131dc2021-11-12 10:35:12 -0500171 return Api19Impl.addTouchExplorationStateChangeListenerWrapper(manager, listener);
Aurimas Liutikasac5fe7c2018-03-06 14:40:53 -0800172 } else {
173 return false;
174 }
175 }
176
177 /**
178 * Unregisters a {@link TouchExplorationStateChangeListener}.
179 *
180 * @param listener The listener.
181 * @return True if successfully unregistered.
182 */
Alan Viverettee4131dc2021-11-12 10:35:12 -0500183 public static boolean removeTouchExplorationStateChangeListener(
184 @NonNull AccessibilityManager manager,
185 @NonNull TouchExplorationStateChangeListener listener) {
Aurimas Liutikasac5fe7c2018-03-06 14:40:53 -0800186 if (Build.VERSION.SDK_INT >= 19) {
Alan Viverettee4131dc2021-11-12 10:35:12 -0500187 return Api19Impl.removeTouchExplorationStateChangeListenerWrapper(manager, listener);
Aurimas Liutikasac5fe7c2018-03-06 14:40:53 -0800188 } else {
189 return false;
190 }
191 }
192
193 @RequiresApi(19)
Aurimas Liutikas16c80102019-10-18 13:45:49 -0700194 private static final class TouchExplorationStateChangeListenerWrapper
Aurimas Liutikasac5fe7c2018-03-06 14:40:53 -0800195 implements AccessibilityManager.TouchExplorationStateChangeListener {
196 final TouchExplorationStateChangeListener mListener;
197
198 TouchExplorationStateChangeListenerWrapper(
199 @NonNull TouchExplorationStateChangeListener listener) {
200 mListener = listener;
201 }
202
203 @Override
204 public int hashCode() {
205 return mListener.hashCode();
206 }
207
208 @Override
209 public boolean equals(Object o) {
210 if (this == o) {
211 return true;
212 }
Aurimas Liutikas16c80102019-10-18 13:45:49 -0700213 if (!(o instanceof TouchExplorationStateChangeListenerWrapper)) {
Aurimas Liutikasac5fe7c2018-03-06 14:40:53 -0800214 return false;
215 }
216 TouchExplorationStateChangeListenerWrapper other =
217 (TouchExplorationStateChangeListenerWrapper) o;
218 return mListener.equals(other.mListener);
219 }
220
221 @Override
222 public void onTouchExplorationStateChanged(boolean enabled) {
223 mListener.onTouchExplorationStateChanged(enabled);
224 }
225 }
226
227 /**
228 * Listener for the accessibility state.
229 *
230 * @deprecated Use {@link AccessibilityManager.AccessibilityStateChangeListener} directly
231 * instead of this listener.
232 */
Alan Viverette170c27a2019-10-18 15:54:50 -0400233 @SuppressWarnings("deprecation")
Aurimas Liutikasac5fe7c2018-03-06 14:40:53 -0800234 @Deprecated
235 public static abstract class AccessibilityStateChangeListenerCompat
236 implements AccessibilityStateChangeListener {
237 }
238
239 /**
240 * Listener for the accessibility state.
241 *
242 * @deprecated Use {@link AccessibilityManager.AccessibilityStateChangeListener} directly
243 * instead of this listener.
244 */
245 @Deprecated
246 public interface AccessibilityStateChangeListener {
247 /**
248 * Called back on change in the accessibility state.
249 *
250 * @param enabled Whether accessibility is enabled.
251 *
252 * @deprecated Use {@link AccessibilityManager.AccessibilityStateChangeListener} directly.
253 */
254 @Deprecated
255 void onAccessibilityStateChanged(boolean enabled);
256 }
257
258 /**
259 * Listener for the system touch exploration state. To listen for changes to
260 * the touch exploration state on the device, implement this interface and
261 * register it with the system by calling
262 * {@link #addTouchExplorationStateChangeListener}.
263 */
264 public interface TouchExplorationStateChangeListener {
265 /**
266 * Called when the touch exploration enabled state changes.
267 *
268 * @param enabled Whether touch exploration is enabled.
269 */
270 void onTouchExplorationStateChanged(boolean enabled);
271 }
272
Alan Viverettee4131dc2021-11-12 10:35:12 -0500273 private AccessibilityManagerCompat() {
274 }
275
276 @RequiresApi(19)
277 static class Api19Impl {
278 private Api19Impl() {
279 // This class is not instantiable.
280 }
281
282 @DoNotInline
283 static boolean addTouchExplorationStateChangeListenerWrapper(
284 AccessibilityManager accessibilityManager,
285 TouchExplorationStateChangeListener listener) {
286 return accessibilityManager.addTouchExplorationStateChangeListener(
287 new TouchExplorationStateChangeListenerWrapper(listener));
288 }
289
290 @DoNotInline
291 static boolean removeTouchExplorationStateChangeListenerWrapper(
292 AccessibilityManager accessibilityManager,
293 TouchExplorationStateChangeListener listener) {
294 return accessibilityManager.removeTouchExplorationStateChangeListener(
295 new TouchExplorationStateChangeListenerWrapper(listener));
296 }
297 }
Aurimas Liutikasac5fe7c2018-03-06 14:40:53 -0800298}