19648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov/*
29648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov * Copyright (C) 2011 The Android Open Source Project
39648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov *
49648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov * Licensed under the Apache License, Version 2.0 (the "License");
59648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov * you may not use this file except in compliance with the License.
69648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov * You may obtain a copy of the License at
79648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov *
89648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov *      http://www.apache.org/licenses/LICENSE-2.0
99648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov *
109648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov * Unless required by applicable law or agreed to in writing, software
119648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov * distributed under the License is distributed on an "AS IS" BASIS,
129648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov * See the License for the specific language governing permissions and
149648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov * limitations under the License.
159648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov */
169648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
179648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganovpackage android.support.v4.view.accessibility;
189648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
199648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganovimport android.accessibilityservice.AccessibilityServiceInfo;
209648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganovimport android.os.Build;
219648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganovimport android.support.v4.view.accessibility.AccessibilityManagerCompatIcs.AccessibilityStateChangeListenerBridge;
22d026c0a30989af62bc8eb14d75e68a21f0589c7dAbhinav Baidimport android.support.v4.view.accessibility.AccessibilityManagerCompatIcs.AccessibilityStateChangeListenerWrapper;
231ef22af9051a858183b028cc4f7c02c973653be4Phil Weaverimport android.support.v4.view.accessibility.AccessibilityManagerCompatKitKat.TouchExplorationStateChangeListenerBridge;
241ef22af9051a858183b028cc4f7c02c973653be4Phil Weaverimport android.support.v4.view.accessibility.AccessibilityManagerCompatKitKat.TouchExplorationStateChangeListenerWrapper;
250574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganovimport android.view.accessibility.AccessibilityManager;
269648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
27f9c2277244722eca88c784b9cfdcc78df7f94781Svetoslav Ganovimport java.util.Collections;
289648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganovimport java.util.List;
299648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
309648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov/**
310574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov * Helper for accessing features in {@link AccessibilityManager}
320574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov * introduced after API level 4 in a backwards compatible fashion.
339648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov */
3417f0ca51e84eb8d9f70a64e97de1151739a04406Chris Banespublic final class AccessibilityManagerCompat {
359648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
369648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    interface AccessibilityManagerVersionImpl {
371ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        AccessibilityStateChangeListenerWrapper newAccessibilityStateChangeListener(
38d026c0a30989af62bc8eb14d75e68a21f0589c7dAbhinav Baid                AccessibilityStateChangeListener listener);
39d026c0a30989af62bc8eb14d75e68a21f0589c7dAbhinav Baid        boolean addAccessibilityStateChangeListener(AccessibilityManager manager,
40d026c0a30989af62bc8eb14d75e68a21f0589c7dAbhinav Baid                AccessibilityStateChangeListener listener);
41d026c0a30989af62bc8eb14d75e68a21f0589c7dAbhinav Baid        boolean removeAccessibilityStateChangeListener(AccessibilityManager manager,
42d026c0a30989af62bc8eb14d75e68a21f0589c7dAbhinav Baid                AccessibilityStateChangeListener listener);
43d026c0a30989af62bc8eb14d75e68a21f0589c7dAbhinav Baid        List<AccessibilityServiceInfo> getEnabledAccessibilityServiceList(
449648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov                AccessibilityManager manager,int feedbackTypeFlags);
45d026c0a30989af62bc8eb14d75e68a21f0589c7dAbhinav Baid        List<AccessibilityServiceInfo> getInstalledAccessibilityServiceList(
469648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov                AccessibilityManager manager);
47d026c0a30989af62bc8eb14d75e68a21f0589c7dAbhinav Baid        boolean isTouchExplorationEnabled(AccessibilityManager manager);
481ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        TouchExplorationStateChangeListenerWrapper newTouchExplorationStateChangeListener(
491ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver                TouchExplorationStateChangeListener listener);
501ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        boolean addTouchExplorationStateChangeListener(AccessibilityManager manager,
511ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver                TouchExplorationStateChangeListener listener);
521ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        boolean removeTouchExplorationStateChangeListener(AccessibilityManager manager,
531ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver                TouchExplorationStateChangeListener listener);
549648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
559648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
569648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    static class AccessibilityManagerStubImpl implements AccessibilityManagerVersionImpl {
5715375aa6fd54b036f97f99229aefab2822c8a1c9Aurimas Liutikas        @Override
581ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        public AccessibilityStateChangeListenerWrapper newAccessibilityStateChangeListener(
59d026c0a30989af62bc8eb14d75e68a21f0589c7dAbhinav Baid                AccessibilityStateChangeListener listener) {
609648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            return null;
619648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
629648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
6315375aa6fd54b036f97f99229aefab2822c8a1c9Aurimas Liutikas        @Override
649648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public boolean addAccessibilityStateChangeListener(AccessibilityManager manager,
65d026c0a30989af62bc8eb14d75e68a21f0589c7dAbhinav Baid                AccessibilityStateChangeListener listener) {
669648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            return false;
679648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
689648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
6915375aa6fd54b036f97f99229aefab2822c8a1c9Aurimas Liutikas        @Override
709648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public boolean removeAccessibilityStateChangeListener(AccessibilityManager manager,
71d026c0a30989af62bc8eb14d75e68a21f0589c7dAbhinav Baid                AccessibilityStateChangeListener listener) {
729648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            return false;
739648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
749648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
7515375aa6fd54b036f97f99229aefab2822c8a1c9Aurimas Liutikas        @Override
769648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public List<AccessibilityServiceInfo> getEnabledAccessibilityServiceList(
779648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov                AccessibilityManager manager, int feedbackTypeFlags) {
78f9c2277244722eca88c784b9cfdcc78df7f94781Svetoslav Ganov            return Collections.emptyList();
799648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
809648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
8115375aa6fd54b036f97f99229aefab2822c8a1c9Aurimas Liutikas        @Override
829648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public List<AccessibilityServiceInfo> getInstalledAccessibilityServiceList(
839648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov                AccessibilityManager manager) {
84f9c2277244722eca88c784b9cfdcc78df7f94781Svetoslav Ganov            return Collections.emptyList();
859648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
869648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
8715375aa6fd54b036f97f99229aefab2822c8a1c9Aurimas Liutikas        @Override
889648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public boolean isTouchExplorationEnabled(AccessibilityManager manager) {
899648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            return false;
909648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
911ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver
921ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        @Override
931ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        public TouchExplorationStateChangeListenerWrapper newTouchExplorationStateChangeListener(
941ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver                TouchExplorationStateChangeListener listener) {
951ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver            return null;
961ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        }
971ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver
981ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        @Override
991ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        public boolean addTouchExplorationStateChangeListener(AccessibilityManager manager,
1001ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver                TouchExplorationStateChangeListener listener) {
1011ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver            return false;
1021ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        }
1031ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver
1041ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        @Override
1051ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        public boolean removeTouchExplorationStateChangeListener(AccessibilityManager manager,
1061ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver                TouchExplorationStateChangeListener listener) {
1071ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver            return false;
1081ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        }
1099648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
1109648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
1119648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    static class AccessibilityManagerIcsImpl extends AccessibilityManagerStubImpl {
1129648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        @Override
1131ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        public AccessibilityStateChangeListenerWrapper newAccessibilityStateChangeListener(
114d026c0a30989af62bc8eb14d75e68a21f0589c7dAbhinav Baid                final AccessibilityStateChangeListener listener) {
115d026c0a30989af62bc8eb14d75e68a21f0589c7dAbhinav Baid            return new AccessibilityStateChangeListenerWrapper(listener,
116d026c0a30989af62bc8eb14d75e68a21f0589c7dAbhinav Baid                    new AccessibilityStateChangeListenerBridge() {
117d026c0a30989af62bc8eb14d75e68a21f0589c7dAbhinav Baid                        @Override
118d026c0a30989af62bc8eb14d75e68a21f0589c7dAbhinav Baid                        public void onAccessibilityStateChanged(boolean enabled) {
119d026c0a30989af62bc8eb14d75e68a21f0589c7dAbhinav Baid                            listener.onAccessibilityStateChanged(enabled);
120d026c0a30989af62bc8eb14d75e68a21f0589c7dAbhinav Baid                        }
121d026c0a30989af62bc8eb14d75e68a21f0589c7dAbhinav Baid                    });
1229648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
1239648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
1249648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        @Override
1259648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public boolean addAccessibilityStateChangeListener(AccessibilityManager manager,
126d026c0a30989af62bc8eb14d75e68a21f0589c7dAbhinav Baid                AccessibilityStateChangeListener listener) {
1279648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            return AccessibilityManagerCompatIcs.addAccessibilityStateChangeListener(manager,
1281ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver                    newAccessibilityStateChangeListener(listener));
1299648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
1309648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
1319648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        @Override
1329648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public boolean removeAccessibilityStateChangeListener(AccessibilityManager manager,
133d026c0a30989af62bc8eb14d75e68a21f0589c7dAbhinav Baid                AccessibilityStateChangeListener listener) {
1349648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            return AccessibilityManagerCompatIcs.removeAccessibilityStateChangeListener(manager,
1351ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver                    newAccessibilityStateChangeListener(listener));
1369648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
1379648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
1389648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        @Override
1399648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public List<AccessibilityServiceInfo> getEnabledAccessibilityServiceList(
1409648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov                AccessibilityManager manager, int feedbackTypeFlags) {
1419648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            return AccessibilityManagerCompatIcs.getEnabledAccessibilityServiceList(manager,
1429648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov                    feedbackTypeFlags);
1439648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
1449648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
1459648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        @Override
1469648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public List<AccessibilityServiceInfo> getInstalledAccessibilityServiceList(
1479648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov                AccessibilityManager manager) {
1489648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            return AccessibilityManagerCompatIcs.getInstalledAccessibilityServiceList(manager);
1499648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
1509648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
1519648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        @Override
1529648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        public boolean isTouchExplorationEnabled(AccessibilityManager manager) {
1539648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            return AccessibilityManagerCompatIcs.isTouchExplorationEnabled(manager);
1549648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
1559648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
1569648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
1571ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver    static class AccessibilityManagerKitKatImpl extends AccessibilityManagerIcsImpl {
1581ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        @Override
1591ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        public TouchExplorationStateChangeListenerWrapper newTouchExplorationStateChangeListener(
1601ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver                final TouchExplorationStateChangeListener listener) {
1611ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver            return new TouchExplorationStateChangeListenerWrapper(listener,
1621ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver                    new TouchExplorationStateChangeListenerBridge() {
1631ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver                        @Override
1641ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver                        public void onTouchExplorationStateChanged(boolean enabled) {
1651ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver                            listener.onTouchExplorationStateChanged(enabled);
1661ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver                        }
1671ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver                    });
1681ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        }
1691ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver
1701ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        @Override
1711ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        public boolean addTouchExplorationStateChangeListener(AccessibilityManager manager,
1721ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver                TouchExplorationStateChangeListener listener) {
1731ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver            return AccessibilityManagerCompatKitKat.addTouchExplorationStateChangeListener(
1741ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver                    manager, newTouchExplorationStateChangeListener(listener));
1751ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        }
1761ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver
1771ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        @Override
1781ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        public boolean removeTouchExplorationStateChangeListener(AccessibilityManager manager,
1791ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver                TouchExplorationStateChangeListener listener) {
1801ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver            return AccessibilityManagerCompatKitKat.removeTouchExplorationStateChangeListener(
1811ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver                    manager, newTouchExplorationStateChangeListener(listener));
1821ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        }
1831ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver    }
1841ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver
1859648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    static {
1861ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        if (Build.VERSION.SDK_INT >= 19) { // KitKat
1871ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver            IMPL = new AccessibilityManagerKitKatImpl();
1881ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        } else if (Build.VERSION.SDK_INT >= 14) { // ICS
1899648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            IMPL = new AccessibilityManagerIcsImpl();
1909648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        } else {
1919648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            IMPL = new AccessibilityManagerStubImpl();
1929648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        }
1939648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
1949648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
1959648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    private static final AccessibilityManagerVersionImpl IMPL;
1969648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
1979648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    /**
1989648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * Registers an {@link AccessibilityManager.AccessibilityStateChangeListener} for changes in
1999648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * the global accessibility state of the system.
2009648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     *
2019648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @param manager The accessibility manager.
2029648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @param listener The listener.
2039648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @return True if successfully registered.
2049648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     */
2059648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    public static boolean addAccessibilityStateChangeListener(AccessibilityManager manager,
206d026c0a30989af62bc8eb14d75e68a21f0589c7dAbhinav Baid            AccessibilityStateChangeListener listener) {
2079648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        return IMPL.addAccessibilityStateChangeListener(manager, listener);
2089648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
2099648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
2109648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    /**
2119648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * Unregisters an {@link AccessibilityManager.AccessibilityStateChangeListener}.
2129648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     *
2139648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @param manager The accessibility manager.
2149648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @param listener The listener.
2159648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @return True if successfully unregistered.
2169648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     */
2179648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    public static boolean removeAccessibilityStateChangeListener(AccessibilityManager manager,
218d026c0a30989af62bc8eb14d75e68a21f0589c7dAbhinav Baid            AccessibilityStateChangeListener listener) {
2199648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        return IMPL.removeAccessibilityStateChangeListener(manager, listener);
2209648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
2219648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
2229648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    /**
2239648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * Returns the {@link AccessibilityServiceInfo}s of the installed accessibility services.
2249648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     *
2259648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @param manager The accessibility manager.
2269648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @return An unmodifiable list with {@link AccessibilityServiceInfo}s.
2279648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     */
2289648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    public static List<AccessibilityServiceInfo> getInstalledAccessibilityServiceList(
2299648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            AccessibilityManager manager) {
2309648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        return IMPL.getInstalledAccessibilityServiceList(manager);
2319648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
2329648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
2339648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    /**
2349648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * Returns the {@link AccessibilityServiceInfo}s of the enabled accessibility services
2359648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * for a given feedback type.
2369648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     *
2379648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @param manager The accessibility manager.
2389648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @param feedbackTypeFlags The feedback type flags.
2399648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @return An unmodifiable list with {@link AccessibilityServiceInfo}s.
2409648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     *
2419648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @see AccessibilityServiceInfo#FEEDBACK_AUDIBLE
2429648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @see AccessibilityServiceInfo#FEEDBACK_GENERIC
2439648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @see AccessibilityServiceInfo#FEEDBACK_HAPTIC
2449648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @see AccessibilityServiceInfo#FEEDBACK_SPOKEN
2459648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     * @see AccessibilityServiceInfo#FEEDBACK_VISUAL
2469648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     */
2479648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    public static List<AccessibilityServiceInfo> getEnabledAccessibilityServiceList(
2489648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov            AccessibilityManager manager, int feedbackTypeFlags) {
2499648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        return IMPL.getEnabledAccessibilityServiceList(manager, feedbackTypeFlags);
2509648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
2519648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
2529648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    /**
253e70a95f70708c0168154c6753864cbbfc78c649fSvetoslav Ganov     * Returns if the touch exploration in the system is enabled.
254e70a95f70708c0168154c6753864cbbfc78c649fSvetoslav Ganov     *
255e70a95f70708c0168154c6753864cbbfc78c649fSvetoslav Ganov     * @param manager The accessibility manager.
256e70a95f70708c0168154c6753864cbbfc78c649fSvetoslav Ganov     * @return True if touch exploration is enabled, false otherwise.
257e70a95f70708c0168154c6753864cbbfc78c649fSvetoslav Ganov     */
258dc5487a46b75572fa9120b22e89487c0178ff0a0Svetoslav Ganov    public static boolean isTouchExplorationEnabled(AccessibilityManager manager) {
259e70a95f70708c0168154c6753864cbbfc78c649fSvetoslav Ganov        return IMPL.isTouchExplorationEnabled(manager);
260e70a95f70708c0168154c6753864cbbfc78c649fSvetoslav Ganov    }
261e70a95f70708c0168154c6753864cbbfc78c649fSvetoslav Ganov
262e70a95f70708c0168154c6753864cbbfc78c649fSvetoslav Ganov    /**
2631ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     * Registers a {@link TouchExplorationStateChangeListener} for changes in
2641ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     * the global touch exploration state of the system.
2651ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     *
2661ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     * @param listener The listener.
2671ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     * @return True if successfully registered.
2681ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     */
2691ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver    public static boolean addTouchExplorationStateChangeListener(AccessibilityManager manager,
2701ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver            TouchExplorationStateChangeListener listener) {
2711ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        return IMPL.addTouchExplorationStateChangeListener(manager, listener);
2721ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver    }
2731ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver
2741ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver    /**
2751ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     * Unregisters a {@link TouchExplorationStateChangeListener}.
2761ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     *
2771ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     * @param listener The listener.
2781ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     * @return True if successfully unregistered.
2791ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     */
2801ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver    public static boolean removeTouchExplorationStateChangeListener(AccessibilityManager manager,
2811ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver            TouchExplorationStateChangeListener listener) {
2821ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        return IMPL.removeTouchExplorationStateChangeListener(manager, listener);
2831ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver    }
2841ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver
2851ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver    /**
2861ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     * Listener for the accessibility state.
287d026c0a30989af62bc8eb14d75e68a21f0589c7dAbhinav Baid     * @deprecated Use {@link AccessibilityStateChangeListener} instead.
2889648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov     */
289d026c0a30989af62bc8eb14d75e68a21f0589c7dAbhinav Baid    @Deprecated
290d026c0a30989af62bc8eb14d75e68a21f0589c7dAbhinav Baid    public static abstract class AccessibilityStateChangeListenerCompat
291d026c0a30989af62bc8eb14d75e68a21f0589c7dAbhinav Baid            implements AccessibilityStateChangeListener {
292d026c0a30989af62bc8eb14d75e68a21f0589c7dAbhinav Baid    }
2939648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov
294d026c0a30989af62bc8eb14d75e68a21f0589c7dAbhinav Baid    /**
295d026c0a30989af62bc8eb14d75e68a21f0589c7dAbhinav Baid     * Listener for the accessibility state.
296d026c0a30989af62bc8eb14d75e68a21f0589c7dAbhinav Baid     */
297d026c0a30989af62bc8eb14d75e68a21f0589c7dAbhinav Baid    public interface AccessibilityStateChangeListener {
2989648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov        /**
2999648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov         * Called back on change in the accessibility state.
3009648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov         *
3019648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov         * @param enabled Whether accessibility is enabled.
3029648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov         */
303d026c0a30989af62bc8eb14d75e68a21f0589c7dAbhinav Baid        void onAccessibilityStateChanged(boolean enabled);
3049648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov    }
30517f0ca51e84eb8d9f70a64e97de1151739a04406Chris Banes
3061ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver    /**
3071ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     * Listener for the system touch exploration state. To listen for changes to
3081ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     * the touch exploration state on the device, implement this interface and
3091ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     * register it with the system by calling
3101ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     * {@link #addTouchExplorationStateChangeListener}.
3111ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver     */
3121ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver    public interface TouchExplorationStateChangeListener {
3131ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        /**
3141ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver         * Called when the touch exploration enabled state changes.
3151ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver         *
3161ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver         * @param enabled Whether touch exploration is enabled.
3171ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver         */
3181ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver        void onTouchExplorationStateChanged(boolean enabled);
3191ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver    }
3201ef22af9051a858183b028cc4f7c02c973653be4Phil Weaver
32117f0ca51e84eb8d9f70a64e97de1151739a04406Chris Banes    private AccessibilityManagerCompat() {}
3229648c538bac4f04145c118cc41168d1d7a536312Svetoslav Ganov}
323