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