19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2011 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.support.v4.view.accessibility;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1958945975b256739fdfe78435d7846d1e2fd29da1Chris Craikimport android.accessibilityservice.AccessibilityServiceInfo;
20b3c56086d802ae28888dd97ba1f49bd6cee0b673Alan Viveretteimport android.os.Build;
21c2974809373697147cbe5754835cc871fb93aef1Dianne Hackbornimport android.support.v4.view.accessibility.AccessibilityManagerCompatIcs.AccessibilityStateChangeListenerBridge;
2252b999f0721b53e9c6e18a4bd664e89aeb65b2d5Alan Viveretteimport android.view.accessibility.AccessibilityManager;
23dad7d84c04c5954b63ea8bb58c52b2291f44b4dfJohn Reck
2478aaa97b77d56e35e994611406deb398eb9005dbGilles Debunneimport java.util.Collections;
2578aaa97b77d56e35e994611406deb398eb9005dbGilles Debunneimport java.util.List;
26bbd51f1e360b22eece1d74bd65c7e6a0b59dee59Philip Milne
2758945975b256739fdfe78435d7846d1e2fd29da1Chris Craik/**
2878aaa97b77d56e35e994611406deb398eb9005dbGilles Debunne * Helper for accessing features in {@link AccessibilityManager}
2978aaa97b77d56e35e994611406deb398eb9005dbGilles Debunne * introduced after API level 4 in a backwards compatible fashion.
30b3c56086d802ae28888dd97ba1f49bd6cee0b673Alan Viverette */
31079e23575024e103358c982152afb7a720ae1a8aDianne Hackbornpublic class AccessibilityManagerCompat {
32600d7dd1c6d9d1ff81b71085eff2a6be50d6f36cFabrice Di Meglio
33f390f770ee570f1f4def41b165cb9492e381be40Alan Viverette    interface AccessibilityManagerVersionImpl {
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public Object newAccessiblityStateChangeListener(
35dad7d84c04c5954b63ea8bb58c52b2291f44b4dfJohn Reck                AccessibilityStateChangeListenerCompat listener);
36dad7d84c04c5954b63ea8bb58c52b2291f44b4dfJohn Reck        public boolean addAccessibilityStateChangeListener(AccessibilityManager manager,
3778aaa97b77d56e35e994611406deb398eb9005dbGilles Debunne                AccessibilityStateChangeListenerCompat listener);
3878aaa97b77d56e35e994611406deb398eb9005dbGilles Debunne        public boolean removeAccessibilityStateChangeListener(AccessibilityManager manager,
3978aaa97b77d56e35e994611406deb398eb9005dbGilles Debunne                AccessibilityStateChangeListenerCompat listener);
4078aaa97b77d56e35e994611406deb398eb9005dbGilles Debunne        public List<AccessibilityServiceInfo> getEnabledAccessibilityServiceList(
4178aaa97b77d56e35e994611406deb398eb9005dbGilles Debunne                AccessibilityManager manager,int feedbackTypeFlags);
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public List<AccessibilityServiceInfo> getInstalledAccessibilityServiceList(
43079e23575024e103358c982152afb7a720ae1a8aDianne Hackborn                AccessibilityManager manager);
44079e23575024e103358c982152afb7a720ae1a8aDianne Hackborn        public boolean isTouchExplorationEnabled(AccessibilityManager manager);
45211db4a2874f1a2d0e7a8cb8d33e81fa08801763Mike Reed    }
46211db4a2874f1a2d0e7a8cb8d33e81fa08801763Mike Reed
47211db4a2874f1a2d0e7a8cb8d33e81fa08801763Mike Reed    static class AccessibilityManagerStubImpl implements AccessibilityManagerVersionImpl {
48211db4a2874f1a2d0e7a8cb8d33e81fa08801763Mike Reed        public Object newAccessiblityStateChangeListener(
49211db4a2874f1a2d0e7a8cb8d33e81fa08801763Mike Reed                AccessibilityStateChangeListenerCompat listener) {
50211db4a2874f1a2d0e7a8cb8d33e81fa08801763Mike Reed            return null;
51211db4a2874f1a2d0e7a8cb8d33e81fa08801763Mike Reed        }
52211db4a2874f1a2d0e7a8cb8d33e81fa08801763Mike Reed
53211db4a2874f1a2d0e7a8cb8d33e81fa08801763Mike Reed        public boolean addAccessibilityStateChangeListener(AccessibilityManager manager,
54211db4a2874f1a2d0e7a8cb8d33e81fa08801763Mike Reed                AccessibilityStateChangeListenerCompat listener) {
55211db4a2874f1a2d0e7a8cb8d33e81fa08801763Mike Reed            return false;
56211db4a2874f1a2d0e7a8cb8d33e81fa08801763Mike Reed        }
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
587068c39526459c18a020e29c1ebfa6aed54e2d0fAlan Viverette        public boolean removeAccessibilityStateChangeListener(AccessibilityManager manager,
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                AccessibilityStateChangeListenerCompat listener) {
60ebc9f2e773c3ebb4d4af3025fc6770844cc8fdefAlan Viverette            return false;
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
63729427d451bc4d4d268335b8dc1ff6404bc1c91eAlan Viverette        public List<AccessibilityServiceInfo> getEnabledAccessibilityServiceList(
64729427d451bc4d4d268335b8dc1ff6404bc1c91eAlan Viverette                AccessibilityManager manager, int feedbackTypeFlags) {
65729427d451bc4d4d268335b8dc1ff6404bc1c91eAlan Viverette            return Collections.emptyList();
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
67ebc9f2e773c3ebb4d4af3025fc6770844cc8fdefAlan Viverette
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public List<AccessibilityServiceInfo> getInstalledAccessibilityServiceList(
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                AccessibilityManager manager) {
70079e23575024e103358c982152afb7a720ae1a8aDianne Hackborn            return Collections.emptyList();
71079e23575024e103358c982152afb7a720ae1a8aDianne Hackborn        }
72079e23575024e103358c982152afb7a720ae1a8aDianne Hackborn
73079e23575024e103358c982152afb7a720ae1a8aDianne Hackborn        public boolean isTouchExplorationEnabled(AccessibilityManager manager) {
74079e23575024e103358c982152afb7a720ae1a8aDianne Hackborn            return false;
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static class AccessibilityManagerIcsImpl extends AccessibilityManagerStubImpl {
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        @Override
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public Object newAccessiblityStateChangeListener(
82079e23575024e103358c982152afb7a720ae1a8aDianne Hackborn                final AccessibilityStateChangeListenerCompat listener) {
83079e23575024e103358c982152afb7a720ae1a8aDianne Hackborn            return AccessibilityManagerCompatIcs.newAccessibilityStateChangeListener(
84079e23575024e103358c982152afb7a720ae1a8aDianne Hackborn                new AccessibilityStateChangeListenerBridge() {
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    public void onAccessibilityStateChanged(boolean enabled) {
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        listener.onAccessibilityStateChanged(enabled);
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    }
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                });
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        @Override
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public boolean addAccessibilityStateChangeListener(AccessibilityManager manager,
93f390f770ee570f1f4def41b165cb9492e381be40Alan Viverette                AccessibilityStateChangeListenerCompat listener) {
94600d7dd1c6d9d1ff81b71085eff2a6be50d6f36cFabrice Di Meglio            return AccessibilityManagerCompatIcs.addAccessibilityStateChangeListener(manager,
95600d7dd1c6d9d1ff81b71085eff2a6be50d6f36cFabrice Di Meglio                    listener.mListener);
96600d7dd1c6d9d1ff81b71085eff2a6be50d6f36cFabrice Di Meglio        }
97600d7dd1c6d9d1ff81b71085eff2a6be50d6f36cFabrice Di Meglio
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        @Override
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public boolean removeAccessibilityStateChangeListener(AccessibilityManager manager,
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                final AccessibilityStateChangeListenerCompat listener) {
101f7a93ef3847258157d144dfefaa5757128cc807dFabrice Di Meglio            return AccessibilityManagerCompatIcs.removeAccessibilityStateChangeListener(manager,
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    listener.mListener);
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
104f7a93ef3847258157d144dfefaa5757128cc807dFabrice Di Meglio
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        @Override
106600d7dd1c6d9d1ff81b71085eff2a6be50d6f36cFabrice Di Meglio        public List<AccessibilityServiceInfo> getEnabledAccessibilityServiceList(
107600d7dd1c6d9d1ff81b71085eff2a6be50d6f36cFabrice Di Meglio                AccessibilityManager manager, int feedbackTypeFlags) {
108600d7dd1c6d9d1ff81b71085eff2a6be50d6f36cFabrice Di Meglio            return AccessibilityManagerCompatIcs.getEnabledAccessibilityServiceList(manager,
109600d7dd1c6d9d1ff81b71085eff2a6be50d6f36cFabrice Di Meglio                    feedbackTypeFlags);
110600d7dd1c6d9d1ff81b71085eff2a6be50d6f36cFabrice Di Meglio        }
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
112600d7dd1c6d9d1ff81b71085eff2a6be50d6f36cFabrice Di Meglio        @Override
113600d7dd1c6d9d1ff81b71085eff2a6be50d6f36cFabrice Di Meglio        public List<AccessibilityServiceInfo> getInstalledAccessibilityServiceList(
114600d7dd1c6d9d1ff81b71085eff2a6be50d6f36cFabrice Di Meglio                AccessibilityManager manager) {
115600d7dd1c6d9d1ff81b71085eff2a6be50d6f36cFabrice Di Meglio            return AccessibilityManagerCompatIcs.getInstalledAccessibilityServiceList(manager);
116600d7dd1c6d9d1ff81b71085eff2a6be50d6f36cFabrice Di Meglio        }
117600d7dd1c6d9d1ff81b71085eff2a6be50d6f36cFabrice Di Meglio
118600d7dd1c6d9d1ff81b71085eff2a6be50d6f36cFabrice Di Meglio        @Override
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public boolean isTouchExplorationEnabled(AccessibilityManager manager) {
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return AccessibilityManagerCompatIcs.isTouchExplorationEnabled(manager);
1211557fd7809078e421f751efc7d2539b3efdc54b2Philip Milne        }
1221557fd7809078e421f751efc7d2539b3efdc54b2Philip Milne    }
1231557fd7809078e421f751efc7d2539b3efdc54b2Philip Milne
1241557fd7809078e421f751efc7d2539b3efdc54b2Philip Milne    static {
1257b7578184567f4e4f0740ce935cc192765410ccaPhilip Milne        if (Build.VERSION.SDK_INT >= 14) { // ICS
1268de1494557cf1d00c1c3fce439138a28de7fbd61Alan Viverette            IMPL = new AccessibilityManagerIcsImpl();
1278de1494557cf1d00c1c3fce439138a28de7fbd61Alan Viverette        } else {
1288de1494557cf1d00c1c3fce439138a28de7fbd61Alan Viverette            IMPL = new AccessibilityManagerStubImpl();
1298de1494557cf1d00c1c3fce439138a28de7fbd61Alan Viverette        }
1301557fd7809078e421f751efc7d2539b3efdc54b2Philip Milne    }
1311557fd7809078e421f751efc7d2539b3efdc54b2Philip Milne
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static final AccessibilityManagerVersionImpl IMPL;
13331ba192dd201df2cad96a8c503f730130ab0d80fChris Craik
13458945975b256739fdfe78435d7846d1e2fd29da1Chris Craik    /**
13531ba192dd201df2cad96a8c503f730130ab0d80fChris Craik     * Registers an {@link AccessibilityManager.AccessibilityStateChangeListener} for changes in
13658945975b256739fdfe78435d7846d1e2fd29da1Chris Craik     * the global accessibility state of the system.
13758945975b256739fdfe78435d7846d1e2fd29da1Chris Craik     *
13858945975b256739fdfe78435d7846d1e2fd29da1Chris Craik     * @param manager The accessibility manager.
13958945975b256739fdfe78435d7846d1e2fd29da1Chris Craik     * @param listener The listener.
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return True if successfully registered.
14134bd56b546bce47422a430d9d7806dc3cb4254bfAlan Viverette     */
14234bd56b546bce47422a430d9d7806dc3cb4254bfAlan Viverette    public static boolean addAccessibilityStateChangeListener(AccessibilityManager manager,
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            AccessibilityStateChangeListenerCompat listener) {
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return IMPL.addAccessibilityStateChangeListener(manager, listener);
145079e23575024e103358c982152afb7a720ae1a8aDianne Hackborn    }
1465f49c3023a512efbef8bc9515d310c7a72be4af2Romain Guy
147079e23575024e103358c982152afb7a720ae1a8aDianne Hackborn    /**
148079e23575024e103358c982152afb7a720ae1a8aDianne Hackborn     * Unregisters an {@link AccessibilityManager.AccessibilityStateChangeListener}.
149079e23575024e103358c982152afb7a720ae1a8aDianne Hackborn     *
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param manager The accessibility manager.
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param listener The listener.
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return True if successfully unregistered.
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static boolean removeAccessibilityStateChangeListener(AccessibilityManager manager,
155b1af7f3d4be6cd6bc6e1e805f22c209e19bf928fChet Haase            AccessibilityStateChangeListenerCompat listener) {
156b1af7f3d4be6cd6bc6e1e805f22c209e19bf928fChet Haase        return IMPL.removeAccessibilityStateChangeListener(manager, listener);
157b1af7f3d4be6cd6bc6e1e805f22c209e19bf928fChet Haase    }
158b1af7f3d4be6cd6bc6e1e805f22c209e19bf928fChet Haase
159b1af7f3d4be6cd6bc6e1e805f22c209e19bf928fChet Haase    /**
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the {@link AccessibilityServiceInfo}s of the installed accessibility services.
161a41581ed4033004c73115113f45b9844e9b0210fRomain Guy     *
162a41581ed4033004c73115113f45b9844e9b0210fRomain Guy     * @param manager The accessibility manager.
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return An unmodifiable list with {@link AccessibilityServiceInfo}s.
1645f49c3023a512efbef8bc9515d310c7a72be4af2Romain Guy     */
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static List<AccessibilityServiceInfo> getInstalledAccessibilityServiceList(
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            AccessibilityManager manager) {
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return IMPL.getInstalledAccessibilityServiceList(manager);
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
171b3c56086d802ae28888dd97ba1f49bd6cee0b673Alan Viverette     * Returns the {@link AccessibilityServiceInfo}s of the enabled accessibility services
172729427d451bc4d4d268335b8dc1ff6404bc1c91eAlan Viverette     * for a given feedback type.
173d9e788c4f0528e46db4a035cfac043736becb0d1Alan Viverette     *
174d9e788c4f0528e46db4a035cfac043736becb0d1Alan Viverette     * @param manager The accessibility manager.
175729427d451bc4d4d268335b8dc1ff6404bc1c91eAlan Viverette     * @param feedbackTypeFlags The feedback type flags.
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return An unmodifiable list with {@link AccessibilityServiceInfo}s.
1775f49c3023a512efbef8bc9515d310c7a72be4af2Romain Guy     *
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see AccessibilityServiceInfo#FEEDBACK_AUDIBLE
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see AccessibilityServiceInfo#FEEDBACK_GENERIC
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see AccessibilityServiceInfo#FEEDBACK_HAPTIC
181f390f770ee570f1f4def41b165cb9492e381be40Alan Viverette     * @see AccessibilityServiceInfo#FEEDBACK_SPOKEN
182b3c56086d802ae28888dd97ba1f49bd6cee0b673Alan Viverette     * @see AccessibilityServiceInfo#FEEDBACK_VISUAL
183a426445dfdab43886dd894f2ba8a1d55bfcbb278Alan Viverette     */
184bddb843e793a279db99888dd78b4f74a362cbb8bAlan Viverette    public static List<AccessibilityServiceInfo> getEnabledAccessibilityServiceList(
185b3c56086d802ae28888dd97ba1f49bd6cee0b673Alan Viverette            AccessibilityManager manager, int feedbackTypeFlags) {
186bddb843e793a279db99888dd78b4f74a362cbb8bAlan Viverette        return IMPL.getEnabledAccessibilityServiceList(manager, feedbackTypeFlags);
187bddb843e793a279db99888dd78b4f74a362cbb8bAlan Viverette    }
188a426445dfdab43886dd894f2ba8a1d55bfcbb278Alan Viverette
189a426445dfdab43886dd894f2ba8a1d55bfcbb278Alan Viverette    /**
190a426445dfdab43886dd894f2ba8a1d55bfcbb278Alan Viverette     * Returns if the touch exploration in the system is enabled.
191a426445dfdab43886dd894f2ba8a1d55bfcbb278Alan Viverette     *
192a426445dfdab43886dd894f2ba8a1d55bfcbb278Alan Viverette     * @param manager The accessibility manager.
193a426445dfdab43886dd894f2ba8a1d55bfcbb278Alan Viverette     * @return True if touch exploration is enabled, false otherwise.
194a426445dfdab43886dd894f2ba8a1d55bfcbb278Alan Viverette     */
195a426445dfdab43886dd894f2ba8a1d55bfcbb278Alan Viverette    public static boolean isTouchExplorationEnabled(AccessibilityManager manager) {
196a426445dfdab43886dd894f2ba8a1d55bfcbb278Alan Viverette        return IMPL.isTouchExplorationEnabled(manager);
197bddb843e793a279db99888dd78b4f74a362cbb8bAlan Viverette    }
198a426445dfdab43886dd894f2ba8a1d55bfcbb278Alan Viverette
199a426445dfdab43886dd894f2ba8a1d55bfcbb278Alan Viverette    /**
200b3c56086d802ae28888dd97ba1f49bd6cee0b673Alan Viverette     * Listener for the accessibility state.
201b3c56086d802ae28888dd97ba1f49bd6cee0b673Alan Viverette     */
202b3c56086d802ae28888dd97ba1f49bd6cee0b673Alan Viverette    public static abstract class AccessibilityStateChangeListenerCompat {
203a426445dfdab43886dd894f2ba8a1d55bfcbb278Alan Viverette        final Object mListener;
204b3c56086d802ae28888dd97ba1f49bd6cee0b673Alan Viverette
205b3c56086d802ae28888dd97ba1f49bd6cee0b673Alan Viverette        public AccessibilityStateChangeListenerCompat() {
206b3c56086d802ae28888dd97ba1f49bd6cee0b673Alan Viverette            mListener = IMPL.newAccessiblityStateChangeListener(this);
207b3c56086d802ae28888dd97ba1f49bd6cee0b673Alan Viverette        }
208079e23575024e103358c982152afb7a720ae1a8aDianne Hackborn
209079e23575024e103358c982152afb7a720ae1a8aDianne Hackborn        /**
210079e23575024e103358c982152afb7a720ae1a8aDianne Hackborn         * Called back on change in the accessibility state.
211079e23575024e103358c982152afb7a720ae1a8aDianne Hackborn         *
212079e23575024e103358c982152afb7a720ae1a8aDianne Hackborn         * @param enabled Whether accessibility is enabled.
213079e23575024e103358c982152afb7a720ae1a8aDianne Hackborn         */
214079e23575024e103358c982152afb7a720ae1a8aDianne Hackborn        public abstract void onAccessibilityStateChanged(boolean enabled);
215079e23575024e103358c982152afb7a720ae1a8aDianne Hackborn    }
216f390f770ee570f1f4def41b165cb9492e381be40Alan Viverette}
217079e23575024e103358c982152afb7a720ae1a8aDianne Hackborn