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
17package android.view.accessibility;
18
19import android.accessibilityservice.AccessibilityServiceInfo;
20import android.content.Context;
21import android.content.pm.ServiceInfo;
22import android.view.IWindow;
23import android.view.View;
24
25import java.util.Collections;
26import java.util.List;
27
28/**
29 * System level service that serves as an event dispatch for {@link AccessibilityEvent}s.
30 * Such events are generated when something notable happens in the user interface,
31 * for example an {@link android.app.Activity} starts, the focus or selection of a
32 * {@link android.view.View} changes etc. Parties interested in handling accessibility
33 * events implement and register an accessibility service which extends
34 * {@link android.accessibilityservice.AccessibilityService}.
35 *
36 * @see AccessibilityEvent
37 * @see android.accessibilityservice.AccessibilityService
38 * @see android.content.Context#getSystemService
39 */
40public final class AccessibilityManager {
41    private static AccessibilityManager sInstance = new AccessibilityManager();
42
43    /**
44     * Listener for the accessibility state.
45     */
46    public interface AccessibilityStateChangeListener {
47
48        /**
49         * Called back on change in the accessibility state.
50         *
51         * @param enabled Whether accessibility is enabled.
52         */
53        public void onAccessibilityStateChanged(boolean enabled);
54    }
55
56    /**
57     * Get an AccessibilityManager instance (create one if necessary).
58     *
59     * @hide
60     */
61    public static AccessibilityManager getInstance(Context context) {
62        return sInstance;
63    }
64
65    /**
66     * Create an instance.
67     *
68     * @param context A {@link Context}.
69     */
70    private AccessibilityManager() {
71    }
72
73    /**
74     * Returns if the {@link AccessibilityManager} is enabled.
75     *
76     * @return True if this {@link AccessibilityManager} is enabled, false otherwise.
77     */
78    public boolean isEnabled() {
79        return false;
80    }
81
82    /**
83     * Sends an {@link AccessibilityEvent}. If this {@link AccessibilityManager} is not
84     * enabled the call is a NOOP.
85     *
86     * @param event The {@link AccessibilityEvent}.
87     *
88     * @throws IllegalStateException if a client tries to send an {@link AccessibilityEvent}
89     *         while accessibility is not enabled.
90     */
91    public void sendAccessibilityEvent(AccessibilityEvent event) {
92    }
93
94    /**
95     * Requests interruption of the accessibility feedback from all accessibility services.
96     */
97    public void interrupt() {
98    }
99
100    /**
101     * Returns the {@link ServiceInfo}s of the installed accessibility services.
102     *
103     * @return An unmodifiable list with {@link ServiceInfo}s.
104     */
105    public List<ServiceInfo> getAccessibilityServiceList() {
106        // normal implementation does this in some case, so let's do the same
107        // (unmodifiableList wrapped around null).
108        List<ServiceInfo> services = null;
109        return Collections.unmodifiableList(services);
110    }
111
112    public List<AccessibilityServiceInfo> getInstalledAccessibilityServiceList() {
113        // normal implementation does this in some case, so let's do the same
114        // (unmodifiableList wrapped around null).
115        List<AccessibilityServiceInfo> services = null;
116        return Collections.unmodifiableList(services);
117    }
118
119    public boolean addAccessibilityStateChangeListener(
120            AccessibilityStateChangeListener listener) {
121        return true;
122    }
123
124    public boolean removeAccessibilityStateChangeListener(
125            AccessibilityStateChangeListener listener) {
126        return true;
127    }
128
129    public int addAccessibilityInteractionConnection(IWindow windowToken,
130            IAccessibilityInteractionConnection connection) {
131        return View.NO_ID;
132    }
133
134    public void removeAccessibilityInteractionConnection(IWindow windowToken) {
135    }
136
137}
138