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