1086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette/* 2086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette * Copyright (C) 2012 The Android Open Source Project 3086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette * 4086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette * Licensed under the Apache License, Version 2.0 (the "License"); 5086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette * you may not use this file except in compliance with the License. 6086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette * You may obtain a copy of the License at 7086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette * 8086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette * http://www.apache.org/licenses/LICENSE-2.0 9086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette * 10086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette * Unless required by applicable law or agreed to in writing, software 11086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette * distributed under the License is distributed on an "AS IS" BASIS, 12086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette * See the License for the specific language governing permissions and 14086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette * limitations under the License. 15086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette */ 16086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette 17086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverettepackage android.support.v4.view.accessibility; 18086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette 198aaf50bd7d713dafc358e6215111e7b0a43ecc82Maxim Bogatovimport android.os.Bundle; 20086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viveretteimport android.view.accessibility.AccessibilityNodeInfo; 21086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette 22086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette/** 23086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette * KitKat-specific AccessibilityNodeInfo API implementation. 24086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette */ 25086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viveretteclass AccessibilityNodeInfoCompatKitKat { 269e1c26a445029b66a6e81194b58452406a38b56cZachary Kuznia private static final byte TRAIT_UNSET = -1; 279e1c26a445029b66a6e81194b58452406a38b56cZachary Kuznia private static final String TRAITS_KEY = 289e1c26a445029b66a6e81194b58452406a38b56cZachary Kuznia "android.view.accessibility.AccessibilityNodeInfo.traits"; 299e1c26a445029b66a6e81194b58452406a38b56cZachary Kuznia private static final long TRAIT_HAS_IMAGE = 0x00000001; 30f0d984600125413628899bfc849bab102bc2228eSteven Dao private static final String ROLE_DESCRIPTION_KEY = 31f0d984600125413628899bfc849bab102bc2228eSteven Dao "AccessibilityNodeInfo.roleDescription"; 32f0d984600125413628899bfc849bab102bc2228eSteven Dao 33fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen static int getLiveRegion(Object info) { 34086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette return ((AccessibilityNodeInfo) info).getLiveRegion(); 35086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette } 36086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette 37fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen static void setLiveRegion(Object info, int mode) { 38086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette ((AccessibilityNodeInfo) info).setLiveRegion(mode); 39086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette } 40fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen 41fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen static Object getCollectionInfo(Object info) { 42fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen return ((AccessibilityNodeInfo) info).getCollectionInfo(); 43fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen } 44fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen 45fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen static Object getCollectionItemInfo(Object info) { 46fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen return ((AccessibilityNodeInfo) info).getCollectionItemInfo(); 47fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen } 48fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen 49a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar public static void setCollectionInfo(Object info, Object collectionInfo) { 50a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar ((AccessibilityNodeInfo) info).setCollectionInfo( 51a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar (AccessibilityNodeInfo.CollectionInfo)collectionInfo); 52a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar } 53a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar 54a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar public static void setCollectionItemInfo(Object info, Object collectionItemInfo) { 55a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar ((AccessibilityNodeInfo) info).setCollectionItemInfo( 56a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar (AccessibilityNodeInfo.CollectionItemInfo) collectionItemInfo); 57a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar } 58a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar 59fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen static Object getRangeInfo(Object info) { 60fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen return ((AccessibilityNodeInfo) info).getRangeInfo(); 61fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen } 62fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen 638aaf50bd7d713dafc358e6215111e7b0a43ecc82Maxim Bogatov public static void setRangeInfo(Object info, Object rangeInfo) { 648aaf50bd7d713dafc358e6215111e7b0a43ecc82Maxim Bogatov ((AccessibilityNodeInfo) info).setRangeInfo((AccessibilityNodeInfo.RangeInfo) rangeInfo); 658aaf50bd7d713dafc358e6215111e7b0a43ecc82Maxim Bogatov } 668aaf50bd7d713dafc358e6215111e7b0a43ecc82Maxim Bogatov 67a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar public static Object obtainCollectionInfo(int rowCount, int columnCount, 68a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar boolean hierarchical, int selectionMode) { 69a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar return AccessibilityNodeInfo.CollectionInfo.obtain(rowCount, columnCount, hierarchical); 70a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar } 71a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar 7277df76ce4466b7a3739fbbe53c2ac99d976b113eAbhinav Baid public static Object obtainCollectionInfo(int rowCount, int columnCount, boolean hierarchical) { 7377df76ce4466b7a3739fbbe53c2ac99d976b113eAbhinav Baid return AccessibilityNodeInfo.CollectionInfo.obtain(rowCount, columnCount, hierarchical); 7477df76ce4466b7a3739fbbe53c2ac99d976b113eAbhinav Baid } 7577df76ce4466b7a3739fbbe53c2ac99d976b113eAbhinav Baid 76a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar public static Object obtainCollectionItemInfo(int rowIndex, int rowSpan, int columnIndex, 77a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar int columnSpan, boolean heading) { 78a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar return AccessibilityNodeInfo.CollectionItemInfo.obtain(rowIndex, rowSpan, columnIndex, 79a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar columnSpan, heading); 80a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar } 81a910619e83d0052e1d81aa5fe532821a2f99d76cYigit Boyar 82c5b63021dfda1dd155775a0b4845c5ca3c70b1b0Chris Banes public static void setContentInvalid(Object info, boolean contentInvalid) { 83c5b63021dfda1dd155775a0b4845c5ca3c70b1b0Chris Banes ((AccessibilityNodeInfo) info).setContentInvalid(contentInvalid); 84c5b63021dfda1dd155775a0b4845c5ca3c70b1b0Chris Banes } 85c5b63021dfda1dd155775a0b4845c5ca3c70b1b0Chris Banes 86c5b63021dfda1dd155775a0b4845c5ca3c70b1b0Chris Banes public static boolean isContentInvalid(Object info) { 87c5b63021dfda1dd155775a0b4845c5ca3c70b1b0Chris Banes return ((AccessibilityNodeInfo) info).isContentInvalid(); 88c5b63021dfda1dd155775a0b4845c5ca3c70b1b0Chris Banes } 89c5b63021dfda1dd155775a0b4845c5ca3c70b1b0Chris Banes 908aaf50bd7d713dafc358e6215111e7b0a43ecc82Maxim Bogatov public static boolean canOpenPopup(Object info) { 918aaf50bd7d713dafc358e6215111e7b0a43ecc82Maxim Bogatov return ((AccessibilityNodeInfo) info).canOpenPopup(); 928aaf50bd7d713dafc358e6215111e7b0a43ecc82Maxim Bogatov } 938aaf50bd7d713dafc358e6215111e7b0a43ecc82Maxim Bogatov 948aaf50bd7d713dafc358e6215111e7b0a43ecc82Maxim Bogatov public static void setCanOpenPopup(Object info, boolean opensPopup) { 958aaf50bd7d713dafc358e6215111e7b0a43ecc82Maxim Bogatov ((AccessibilityNodeInfo) info).setCanOpenPopup(opensPopup); 968aaf50bd7d713dafc358e6215111e7b0a43ecc82Maxim Bogatov } 978aaf50bd7d713dafc358e6215111e7b0a43ecc82Maxim Bogatov 988aaf50bd7d713dafc358e6215111e7b0a43ecc82Maxim Bogatov public static Bundle getExtras(Object info) { 998aaf50bd7d713dafc358e6215111e7b0a43ecc82Maxim Bogatov return ((AccessibilityNodeInfo) info).getExtras(); 1008aaf50bd7d713dafc358e6215111e7b0a43ecc82Maxim Bogatov } 1018aaf50bd7d713dafc358e6215111e7b0a43ecc82Maxim Bogatov 1029e1c26a445029b66a6e81194b58452406a38b56cZachary Kuznia private static long getTraits(Object info) { 1039e1c26a445029b66a6e81194b58452406a38b56cZachary Kuznia return getExtras(info).getLong(TRAITS_KEY, TRAIT_UNSET); 1049e1c26a445029b66a6e81194b58452406a38b56cZachary Kuznia } 1059e1c26a445029b66a6e81194b58452406a38b56cZachary Kuznia 1069e1c26a445029b66a6e81194b58452406a38b56cZachary Kuznia private static void setTrait(Object info, long trait) { 1079e1c26a445029b66a6e81194b58452406a38b56cZachary Kuznia Bundle extras = getExtras(info); 1089e1c26a445029b66a6e81194b58452406a38b56cZachary Kuznia long traits = extras.getLong(TRAITS_KEY, 0); 1099e1c26a445029b66a6e81194b58452406a38b56cZachary Kuznia extras.putLong(TRAITS_KEY, traits | trait); 1109e1c26a445029b66a6e81194b58452406a38b56cZachary Kuznia } 1119e1c26a445029b66a6e81194b58452406a38b56cZachary Kuznia 1128aaf50bd7d713dafc358e6215111e7b0a43ecc82Maxim Bogatov public static int getInputType(Object info) { 1138aaf50bd7d713dafc358e6215111e7b0a43ecc82Maxim Bogatov return ((AccessibilityNodeInfo) info).getInputType(); 1148aaf50bd7d713dafc358e6215111e7b0a43ecc82Maxim Bogatov } 1158aaf50bd7d713dafc358e6215111e7b0a43ecc82Maxim Bogatov 1168aaf50bd7d713dafc358e6215111e7b0a43ecc82Maxim Bogatov public static void setInputType(Object info, int inputType) { 1178aaf50bd7d713dafc358e6215111e7b0a43ecc82Maxim Bogatov ((AccessibilityNodeInfo) info).setInputType(inputType); 1188aaf50bd7d713dafc358e6215111e7b0a43ecc82Maxim Bogatov } 1198aaf50bd7d713dafc358e6215111e7b0a43ecc82Maxim Bogatov 1208aaf50bd7d713dafc358e6215111e7b0a43ecc82Maxim Bogatov public static boolean isDismissable(Object info) { 1218aaf50bd7d713dafc358e6215111e7b0a43ecc82Maxim Bogatov return ((AccessibilityNodeInfo) info).isDismissable(); 1228aaf50bd7d713dafc358e6215111e7b0a43ecc82Maxim Bogatov } 1238aaf50bd7d713dafc358e6215111e7b0a43ecc82Maxim Bogatov 1248aaf50bd7d713dafc358e6215111e7b0a43ecc82Maxim Bogatov public static void setDismissable(Object info, boolean dismissable) { 1258aaf50bd7d713dafc358e6215111e7b0a43ecc82Maxim Bogatov ((AccessibilityNodeInfo) info).setDismissable(dismissable); 1268aaf50bd7d713dafc358e6215111e7b0a43ecc82Maxim Bogatov } 1278aaf50bd7d713dafc358e6215111e7b0a43ecc82Maxim Bogatov 1288aaf50bd7d713dafc358e6215111e7b0a43ecc82Maxim Bogatov public static boolean isMultiLine(Object info) { 1298aaf50bd7d713dafc358e6215111e7b0a43ecc82Maxim Bogatov return ((AccessibilityNodeInfo) info).isMultiLine(); 1308aaf50bd7d713dafc358e6215111e7b0a43ecc82Maxim Bogatov } 1318aaf50bd7d713dafc358e6215111e7b0a43ecc82Maxim Bogatov 1328aaf50bd7d713dafc358e6215111e7b0a43ecc82Maxim Bogatov public static void setMultiLine(Object info, boolean multiLine) { 1338aaf50bd7d713dafc358e6215111e7b0a43ecc82Maxim Bogatov ((AccessibilityNodeInfo) info).setMultiLine(multiLine); 1348aaf50bd7d713dafc358e6215111e7b0a43ecc82Maxim Bogatov } 1358aaf50bd7d713dafc358e6215111e7b0a43ecc82Maxim Bogatov 136f0d984600125413628899bfc849bab102bc2228eSteven Dao public static CharSequence getRoleDescription(Object info) { 137f0d984600125413628899bfc849bab102bc2228eSteven Dao Bundle extras = getExtras(info); 138f0d984600125413628899bfc849bab102bc2228eSteven Dao return extras.getCharSequence(ROLE_DESCRIPTION_KEY); 139f0d984600125413628899bfc849bab102bc2228eSteven Dao } 140f0d984600125413628899bfc849bab102bc2228eSteven Dao 141f0d984600125413628899bfc849bab102bc2228eSteven Dao public static void setRoleDescription(Object info, CharSequence roleDescription) { 142f0d984600125413628899bfc849bab102bc2228eSteven Dao Bundle extras = getExtras(info); 143f0d984600125413628899bfc849bab102bc2228eSteven Dao extras.putCharSequence(ROLE_DESCRIPTION_KEY, roleDescription); 144f0d984600125413628899bfc849bab102bc2228eSteven Dao } 145f0d984600125413628899bfc849bab102bc2228eSteven Dao 14677df76ce4466b7a3739fbbe53c2ac99d976b113eAbhinav Baid public static Object obtainRangeInfo(int type, float min, float max, float current) { 14777df76ce4466b7a3739fbbe53c2ac99d976b113eAbhinav Baid return AccessibilityNodeInfo.RangeInfo.obtain(type, min, max, current); 14877df76ce4466b7a3739fbbe53c2ac99d976b113eAbhinav Baid } 14977df76ce4466b7a3739fbbe53c2ac99d976b113eAbhinav Baid 150fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen static class CollectionInfo { 151fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen static int getColumnCount(Object info) { 152fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen return ((AccessibilityNodeInfo.CollectionInfo) info).getColumnCount(); 153fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen } 154fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen 155fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen static int getRowCount(Object info) { 156fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen return ((AccessibilityNodeInfo.CollectionInfo) info).getRowCount(); 157fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen } 158fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen 159fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen static boolean isHierarchical(Object info) { 160fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen return ((AccessibilityNodeInfo.CollectionInfo) info).isHierarchical(); 161fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen } 162fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen } 163fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen 164fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen static class CollectionItemInfo { 165fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen static int getColumnIndex(Object info) { 166fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen return ((AccessibilityNodeInfo.CollectionItemInfo) info).getColumnIndex(); 167fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen } 168fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen 169fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen static int getColumnSpan(Object info) { 170fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen return ((AccessibilityNodeInfo.CollectionItemInfo) info).getColumnSpan(); 171fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen } 172fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen 173fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen static int getRowIndex(Object info) { 174fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen return ((AccessibilityNodeInfo.CollectionItemInfo) info).getRowIndex(); 175fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen } 176fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen 177fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen static int getRowSpan(Object info) { 178fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen return ((AccessibilityNodeInfo.CollectionItemInfo) info).getRowSpan(); 179fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen } 180fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen 181fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen static boolean isHeading(Object info) { 182fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen return ((AccessibilityNodeInfo.CollectionItemInfo) info).isHeading(); 183fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen } 184fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen } 185fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen 186fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen static class RangeInfo { 187fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen static float getCurrent(Object info) { 188fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen return ((AccessibilityNodeInfo.RangeInfo) info).getCurrent(); 189fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen } 190fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen 191fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen static float getMax(Object info) { 192fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen return ((AccessibilityNodeInfo.RangeInfo) info).getMax(); 193fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen } 194fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen 195fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen static float getMin(Object info) { 196fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen return ((AccessibilityNodeInfo.RangeInfo) info).getMin(); 197fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen } 198fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen 199fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen static int getType(Object info) { 200fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen return ((AccessibilityNodeInfo.RangeInfo) info).getType(); 201fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen } 202fbfefc40581dd94616359c796b4cc03969b22a10Kristian Monsen } 203086e7db1ab6ef49b4b7974c471b70f81b2d13aefAlan Viverette} 204