1b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette/* 2b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette * Copyright (C) 2013 The Android Open Source Project 3b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette * 4b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette * Licensed under the Apache License, Version 2.0 (the "License"); 5b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette * you may not use this file except in compliance with the License. 6b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette * You may obtain a copy of the License at 7b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette * 8b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette * http://www.apache.org/licenses/LICENSE-2.0 9b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette * 10b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette * Unless required by applicable law or agreed to in writing, software 11b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette * distributed under the License is distributed on an "AS IS" BASIS, 12b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette * See the License for the specific language governing permissions and 14b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette * limitations under the License. 15b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette */ 16b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette 17b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverettepackage android.support.v4.view.accessibility; 18b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette 19b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viveretteimport android.os.Bundle; 20b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viveretteimport android.view.accessibility.AccessibilityNodeInfo; 21b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viveretteimport android.view.accessibility.AccessibilityNodeProvider; 22b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette 23b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viveretteimport java.util.List; 24b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette 25b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette/** 26b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette * KitKat-specific AccessibilityNodeProvider API implementation. 27b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette */ 28b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viveretteclass AccessibilityNodeProviderCompatKitKat { 29b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette interface AccessibilityNodeInfoBridge { 30b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette public Object createAccessibilityNodeInfo(int virtualViewId); 31b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette public boolean performAction(int virtualViewId, int action, Bundle arguments); 32b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette public List<Object> findAccessibilityNodeInfosByText(String text, 33b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette int virtualViewId); 34b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette public Object findFocus(int focus); 35b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette } 36b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette 37b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette public static Object newAccessibilityNodeProviderBridge( 38b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette final AccessibilityNodeInfoBridge bridge) { 39b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette return new AccessibilityNodeProvider() { 40b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette @Override 41b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette public AccessibilityNodeInfo createAccessibilityNodeInfo(int virtualViewId) { 42b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette return (AccessibilityNodeInfo) bridge.createAccessibilityNodeInfo(virtualViewId); 43b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette } 44b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette 45b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette @Override 46b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette @SuppressWarnings("unchecked") 47b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette public List<AccessibilityNodeInfo> findAccessibilityNodeInfosByText( 48b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette String text, int virtualViewId) { 49b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette // Use some voodoo to avoid creating intermediary instances. 50b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette return (List<AccessibilityNodeInfo>) (List<?>) 51b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette bridge.findAccessibilityNodeInfosByText(text, virtualViewId); 52b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette } 53b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette 54b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette @Override 55b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette public boolean performAction(int virtualViewId, int action, Bundle arguments) { 56b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette return bridge.performAction(virtualViewId, action, arguments); 57b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette } 58b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette 59b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette @Override 60b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette public AccessibilityNodeInfo findFocus(int focus) { 61b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette return (AccessibilityNodeInfo) bridge.findFocus(focus); 62b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette } 63b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette }; 64b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette } 65b44045ec70f92d559fe6642e9bdb49ca37cb9f71Alan Viverette} 66