0

a11y: Support more roles as Collection and CollectionItem

This allows TalkBack to announce the position and size of current menu
button in Google Doc (e.g. 3 of 9).

Demo: http://go/scrcast/NTExNDI3NTc4OTAxMjk5MnwzM2YwYmRjYi04Mg

Bug: 398276553
Test: Verified locally
Change-Id: I937367cd15c1b4bcb02cc76e67bb330b915a5a0e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6309505
Reviewed-by: Mark Schillaci <mschillaci@google.com>
Commit-Queue: Wenyu Zhang <zhangwenyu@google.com>
Cr-Commit-Position: refs/heads/main@{#1427256}
This commit is contained in:
Wenyu Zhang
2025-03-03 10:59:57 -08:00
committed by Chromium LUCI CQ
parent ec9dcf24eb
commit a5b49ce36b
26 changed files with 115 additions and 107 deletions

@ -211,6 +211,8 @@ bool BrowserAccessibilityAndroid::IsCollection() const {
case ax::mojom::Role::kList:
case ax::mojom::Role::kListBox:
case ax::mojom::Role::kTree:
case ax::mojom::Role::kMenu:
case ax::mojom::Role::kMenuBar:
return true;
default:
return ui::IsTableLike(GetRole());
@ -223,6 +225,9 @@ bool BrowserAccessibilityAndroid::IsCollectionItem() const {
case ax::mojom::Role::kListItem:
case ax::mojom::Role::kTerm:
case ax::mojom::Role::kTreeItem:
case ax::mojom::Role::kMenuItem:
case ax::mojom::Role::kMenuItemCheckBox:
case ax::mojom::Role::kMenuItemRadio:
return true;
default:
return ui::IsCellOrTableHeader(GetRole());
@ -1712,11 +1717,14 @@ int BrowserAccessibilityAndroid::ColumnCount() const {
return 0;
}
// For <ol> and <ul> elements on Android (e.g. role kList), the AX
// code will consider these 0 columns, but on Android they are 1.
// For <ol> and <ul> elements on Android (e.g. role kList, kListBox, kMenu and
// kMenuBar), the AX code will consider these 0 columns, but on Android they
// are 1.
int ax_cols = node()->GetTableColCount().value_or(0);
if (GetRole() == ax::mojom::Role::kList ||
GetRole() == ax::mojom::Role::kListBox) {
GetRole() == ax::mojom::Role::kListBox ||
GetRole() == ax::mojom::Role::kMenu ||
GetRole() == ax::mojom::Role::kMenuBar) {
DCHECK_EQ(ax_cols, 0);
ax_cols = 1;
}

@ -1,7 +1,7 @@
WebView focusable focused actions:[CLEAR_FOCUS, AX_FOCUS] bundle:[chromeRole="rootWebArea"]
++View actions:[AX_FOCUS] bundle:[chromeRole="menuBar", roleDescription="menu bar"]
++++MenuItem text:"File" clickable actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItem", roleDescription="menu item"]
++++MenuItem text:"Edit" clickable actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItem", roleDescription="menu item"]
++View text:"File" viewIdResName:"filemenu" actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menu", roleDescription="menu"]
++++MenuItem text:"New" clickable actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItem", roleDescription="menu item"]
++++MenuItem text:"Open" clickable actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItem", roleDescription="menu item"]
++View CollectionInfo:[rows=2, cols=1] actions:[AX_FOCUS] bundle:[chromeRole="menuBar", roleDescription="menu bar"]
++++MenuItem text:"File" clickable CollectionItemInfo:[rowSpan=0, colSpan=0, rowIndex=0, colIndex=0] actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItem", roleDescription="menu item"]
++++MenuItem text:"Edit" clickable CollectionItemInfo:[rowSpan=0, colSpan=0, rowIndex=1, colIndex=0] actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItem", roleDescription="menu item"]
++View text:"File" viewIdResName:"filemenu" CollectionInfo:[rows=2, cols=1] actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menu", roleDescription="menu"]
++++MenuItem text:"New" clickable CollectionItemInfo:[rowSpan=0, colSpan=0, rowIndex=0, colIndex=0] actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItem", roleDescription="menu item"]
++++MenuItem text:"Open" clickable CollectionItemInfo:[rowSpan=0, colSpan=0, rowIndex=1, colIndex=0] actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItem", roleDescription="menu item"]

@ -1,7 +1,7 @@
android.webkit.WebView focusable focused
++android.view.View role_description='menu bar'
++++android.view.MenuItem role_description='menu item' clickable interesting name='File'
++++android.view.MenuItem role_description='menu item' clickable interesting name='Edit' item_index=1 row_index=1
++android.view.View role_description='menu' name='File'
++++android.view.MenuItem role_description='menu item' clickable interesting name='New'
++++android.view.MenuItem role_description='menu item' clickable interesting name='Open' item_index=1 row_index=1
++android.view.View role_description='menu bar' collection item_count=2 row_count=2 column_count=1
++++android.view.MenuItem role_description='menu item' clickable collection_item interesting name='File'
++++android.view.MenuItem role_description='menu item' clickable collection_item interesting name='Edit' item_index=1 row_index=1
++android.view.View role_description='menu' collection name='File' item_count=2 row_count=2 column_count=1
++++android.view.MenuItem role_description='menu item' clickable collection_item interesting name='New'
++++android.view.MenuItem role_description='menu item' clickable collection_item interesting name='Open' item_index=1 row_index=1

@ -1,9 +1,9 @@
WebView focusable focused actions:[CLEAR_FOCUS, AX_FOCUS] bundle:[chromeRole="rootWebArea"]
++View actions:[AX_FOCUS] bundle:[chromeRole="menu", roleDescription="menu"]
++++MenuItem text:"New" canOpenPopUp clickable actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS, EXPAND] bundle:[chromeRole="menuItem", roleDescription="menu item"]
++++MenuItem text:"Open" canOpenPopUp clickable actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS, COLLAPSE] bundle:[chromeRole="menuItem", roleDescription="menu item"]
++++MenuItem text:"Save" clickable actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS, EXPAND] bundle:[chromeRole="menuItem", roleDescription="menu item"]
++++MenuItem text:"Quit" clickable actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS, COLLAPSE] bundle:[chromeRole="menuItem", roleDescription="menu item"]
++View CollectionInfo:[rows=4, cols=1] actions:[AX_FOCUS] bundle:[chromeRole="menu", roleDescription="menu"]
++++MenuItem text:"New" canOpenPopUp clickable CollectionItemInfo:[rowSpan=0, colSpan=0, rowIndex=0, colIndex=0] actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS, EXPAND] bundle:[chromeRole="menuItem", roleDescription="menu item"]
++++MenuItem text:"Open" canOpenPopUp clickable CollectionItemInfo:[rowSpan=0, colSpan=0, rowIndex=1, colIndex=0] actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS, COLLAPSE] bundle:[chromeRole="menuItem", roleDescription="menu item"]
++++MenuItem text:"Save" clickable CollectionItemInfo:[rowSpan=0, colSpan=0, rowIndex=2, colIndex=0] actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS, EXPAND] bundle:[chromeRole="menuItem", roleDescription="menu item"]
++++MenuItem text:"Quit" clickable CollectionItemInfo:[rowSpan=0, colSpan=0, rowIndex=3, colIndex=0] actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS, COLLAPSE] bundle:[chromeRole="menuItem", roleDescription="menu item"]
++View actions:[AX_FOCUS] bundle:[chromeRole="splitter", roleDescription="splitter"]
++View actions:[AX_FOCUS] bundle:[chromeRole="splitter", roleDescription="splitter"]
++View actions:[AX_FOCUS] bundle:[chromeRole="splitter", roleDescription="splitter"]

@ -1,9 +1,9 @@
android.webkit.WebView focusable focused
++android.view.View role_description='menu'
++++android.view.MenuItem role_description='menu item' clickable collapsed interesting name='New'
++++android.view.MenuItem role_description='menu item' clickable expanded interesting name='Open' item_index=1 row_index=1
++++android.view.MenuItem role_description='menu item' clickable collapsed interesting name='Save' item_index=2 row_index=2
++++android.view.MenuItem role_description='menu item' clickable expanded interesting name='Quit' item_index=3 row_index=3
++android.view.View role_description='menu' collection item_count=4 row_count=4 column_count=1
++++android.view.MenuItem role_description='menu item' clickable collapsed collection_item interesting name='New'
++++android.view.MenuItem role_description='menu item' clickable collection_item expanded interesting name='Open' item_index=1 row_index=1
++++android.view.MenuItem role_description='menu item' clickable collapsed collection_item interesting name='Save' item_index=2 row_index=2
++++android.view.MenuItem role_description='menu item' clickable collection_item expanded interesting name='Quit' item_index=3 row_index=3
++android.view.View role_description='splitter'
++android.view.View role_description='splitter'
++android.view.View role_description='splitter'

@ -1,10 +1,10 @@
WebView focusable focused actions:[CLEAR_FOCUS, AX_FOCUS] bundle:[chromeRole="rootWebArea"]
++View actions:[AX_FOCUS] bundle:[chromeRole="menuBar", roleDescription="menu bar"]
++++MenuItem text:"File" clickable actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItem", roleDescription="menu item"]
++++MenuItem text:"Edit" clickable actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItem", roleDescription="menu item"]
++++MenuItem text:"View" clickable actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItem", roleDescription="menu item"]
++View text:"File" viewIdResName:"filemenu" actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menu", roleDescription="menu"]
++++MenuItem text:"New" clickable actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItem", roleDescription="menu item"]
++++MenuItem text:"Open" clickable actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItem", roleDescription="menu item"]
++++MenuItem text:"Save" clickable actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItem", roleDescription="menu item"]
++++MenuItem text:"Quit" clickable actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItem", roleDescription="menu item"]
++View CollectionInfo:[rows=3, cols=1] actions:[AX_FOCUS] bundle:[chromeRole="menuBar", roleDescription="menu bar"]
++++MenuItem text:"File" clickable CollectionItemInfo:[rowSpan=0, colSpan=0, rowIndex=0, colIndex=0] actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItem", roleDescription="menu item"]
++++MenuItem text:"Edit" clickable CollectionItemInfo:[rowSpan=0, colSpan=0, rowIndex=1, colIndex=0] actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItem", roleDescription="menu item"]
++++MenuItem text:"View" clickable CollectionItemInfo:[rowSpan=0, colSpan=0, rowIndex=2, colIndex=0] actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItem", roleDescription="menu item"]
++View text:"File" viewIdResName:"filemenu" CollectionInfo:[rows=4, cols=1] actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menu", roleDescription="menu"]
++++MenuItem text:"New" clickable CollectionItemInfo:[rowSpan=0, colSpan=0, rowIndex=0, colIndex=0] actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItem", roleDescription="menu item"]
++++MenuItem text:"Open" clickable CollectionItemInfo:[rowSpan=0, colSpan=0, rowIndex=1, colIndex=0] actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItem", roleDescription="menu item"]
++++MenuItem text:"Save" clickable CollectionItemInfo:[rowSpan=0, colSpan=0, rowIndex=2, colIndex=0] actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItem", roleDescription="menu item"]
++++MenuItem text:"Quit" clickable CollectionItemInfo:[rowSpan=0, colSpan=0, rowIndex=3, colIndex=0] actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItem", roleDescription="menu item"]

@ -1,10 +1,10 @@
android.webkit.WebView focusable focused
++android.view.View role_description='menu bar'
++++android.view.MenuItem role_description='menu item' clickable interesting name='File'
++++android.view.MenuItem role_description='menu item' clickable interesting name='Edit' item_index=1 row_index=1
++++android.view.MenuItem role_description='menu item' clickable interesting name='View' item_index=2 row_index=2
++android.view.View role_description='menu' name='File'
++++android.view.MenuItem role_description='menu item' clickable interesting name='New'
++++android.view.MenuItem role_description='menu item' clickable interesting name='Open' item_index=1 row_index=1
++++android.view.MenuItem role_description='menu item' clickable interesting name='Save' item_index=2 row_index=2
++++android.view.MenuItem role_description='menu item' clickable interesting name='Quit' item_index=3 row_index=3
++android.view.View role_description='menu bar' collection item_count=3 row_count=3 column_count=1
++++android.view.MenuItem role_description='menu item' clickable collection_item interesting name='File'
++++android.view.MenuItem role_description='menu item' clickable collection_item interesting name='Edit' item_index=1 row_index=1
++++android.view.MenuItem role_description='menu item' clickable collection_item interesting name='View' item_index=2 row_index=2
++android.view.View role_description='menu' collection name='File' item_count=4 row_count=4 column_count=1
++++android.view.MenuItem role_description='menu item' clickable collection_item interesting name='New'
++++android.view.MenuItem role_description='menu item' clickable collection_item interesting name='Open' item_index=1 row_index=1
++++android.view.MenuItem role_description='menu item' clickable collection_item interesting name='Save' item_index=2 row_index=2
++++android.view.MenuItem role_description='menu item' clickable collection_item interesting name='Quit' item_index=3 row_index=3

@ -1,5 +1,5 @@
WebView focusable focused actions:[CLEAR_FOCUS, AX_FOCUS] bundle:[chromeRole="rootWebArea"]
++View actions:[AX_FOCUS] bundle:[chromeRole="menuBar", roleDescription="menu bar"]
++++MenuItem text:"File" clickable actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItem", roleDescription="menu item"]
++++MenuItem text:"Edit" clickable actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItem", roleDescription="menu item"]
++++MenuItem text:"View" clickable actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItem", roleDescription="menu item"]
++View CollectionInfo:[rows=3, cols=1] actions:[AX_FOCUS] bundle:[chromeRole="menuBar", roleDescription="menu bar"]
++++MenuItem text:"File" clickable CollectionItemInfo:[rowSpan=0, colSpan=0, rowIndex=0, colIndex=0] actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItem", roleDescription="menu item"]
++++MenuItem text:"Edit" clickable CollectionItemInfo:[rowSpan=0, colSpan=0, rowIndex=1, colIndex=0] actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItem", roleDescription="menu item"]
++++MenuItem text:"View" clickable CollectionItemInfo:[rowSpan=0, colSpan=0, rowIndex=2, colIndex=0] actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItem", roleDescription="menu item"]

@ -1,5 +1,5 @@
android.webkit.WebView focusable focused
++android.view.View role_description='menu bar'
++++android.view.MenuItem role_description='menu item' clickable interesting name='File'
++++android.view.MenuItem role_description='menu item' clickable interesting name='Edit' item_index=1 row_index=1
++++android.view.MenuItem role_description='menu item' clickable interesting name='View' item_index=2 row_index=2
++android.view.View role_description='menu bar' collection item_count=3 row_count=3 column_count=1
++++android.view.MenuItem role_description='menu item' clickable collection_item interesting name='File'
++++android.view.MenuItem role_description='menu item' clickable collection_item interesting name='Edit' item_index=1 row_index=1
++++android.view.MenuItem role_description='menu item' clickable collection_item interesting name='View' item_index=2 row_index=2

@ -1,8 +1,8 @@
WebView focusable focused actions:[CLEAR_FOCUS, AX_FOCUS] bundle:[chromeRole="rootWebArea"]
++View actions:[AX_FOCUS] bundle:[chromeRole="menu", roleDescription="menu"]
++++MenuItem text:"File" clickable focusable actions:[FOCUS, CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItem", roleDescription="menu item"]
++++MenuItem text:"Edit" clickable focusable actions:[FOCUS, CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItem", roleDescription="menu item"]
++++MenuItem text:"Complex menuitem" clickable focusable actions:[FOCUS, CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItem", roleDescription="menu item"]
++View CollectionInfo:[rows=3, cols=1] actions:[AX_FOCUS] bundle:[chromeRole="menu", roleDescription="menu"]
++++MenuItem text:"File" clickable focusable CollectionItemInfo:[rowSpan=0, colSpan=0, rowIndex=0, colIndex=0] actions:[FOCUS, CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItem", roleDescription="menu item"]
++++MenuItem text:"Edit" clickable focusable CollectionItemInfo:[rowSpan=0, colSpan=0, rowIndex=1, colIndex=0] actions:[FOCUS, CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItem", roleDescription="menu item"]
++++MenuItem text:"Complex menuitem" clickable focusable CollectionItemInfo:[rowSpan=0, colSpan=0, rowIndex=2, colIndex=0] actions:[FOCUS, CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItem", roleDescription="menu item"]
++++++TextView text:"Complex " actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="staticText"]
++++++EditText clickable editable focusable inputType:1 textSelectionStart:0 textSelectionEnd:0 actions:[FOCUS, CLICK, AX_FOCUS, PASTE, SET_TEXT, IME_ENTER] bundle:[chromeRole="textField", clickableScore="300"]
++++++TextView text:" menuitem" actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="staticText"]

@ -1,8 +1,8 @@
android.webkit.WebView focusable focused
++android.view.View role_description='menu'
++++android.view.MenuItem role_description='menu item' clickable focusable interesting name='File'
++++android.view.MenuItem role_description='menu item' clickable focusable interesting name='Edit' item_index=1 row_index=1
++++android.view.MenuItem role_description='menu item' clickable focusable interesting name='Complex menuitem' item_index=2 row_index=2
++android.view.View role_description='menu' collection item_count=3 row_count=3 column_count=1
++++android.view.MenuItem role_description='menu item' clickable collection_item focusable interesting name='File'
++++android.view.MenuItem role_description='menu item' clickable collection_item focusable interesting name='Edit' item_index=1 row_index=1
++++android.view.MenuItem role_description='menu item' clickable collection_item focusable interesting name='Complex menuitem' item_index=2 row_index=2
++++++android.widget.TextView name='Complex '
++++++android.widget.EditText clickable editable_text focusable interesting input_type=1
++++++android.widget.TextView name=' menuitem'

@ -1,3 +1,3 @@
WebView focusable focused actions:[CLEAR_FOCUS, AX_FOCUS] bundle:[chromeRole="rootWebArea"]
++View actions:[AX_FOCUS] bundle:[chromeRole="group"]
++++MenuItem text:"Menu item" clickable focusable actions:[FOCUS, CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItem", roleDescription="menu item"]
++++MenuItem text:"Menu item" clickable focusable CollectionItemInfo:[rowSpan=0, colSpan=0, rowIndex=0, colIndex=0] actions:[FOCUS, CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItem", roleDescription="menu item"]

@ -1,3 +1,3 @@
android.webkit.WebView focusable focused
++android.view.View
++++android.view.MenuItem role_description='menu item' clickable focusable interesting name='Menu item'
++++android.view.MenuItem role_description='menu item' clickable collection_item focusable interesting name='Menu item'

@ -1,5 +1,5 @@
WebView focusable focused actions:[CLEAR_FOCUS, AX_FOCUS] bundle:[chromeRole="rootWebArea"]
++View actions:[AX_FOCUS] bundle:[chromeRole="menu", roleDescription="menu"]
++++MenuItem text:"Menu item 1" checkable clickable actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItemCheckBox", roleDescription="checkbox"]
++++MenuItem text:"Menu item 2" checkable checked clickable actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItemCheckBox", roleDescription="checkbox"]
++++MenuItem text:"Menu item 3" stateDescription:"Partially Checked" clickable actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItemCheckBox", roleDescription="checkbox"]
++View CollectionInfo:[rows=3, cols=1] actions:[AX_FOCUS] bundle:[chromeRole="menu", roleDescription="menu"]
++++MenuItem text:"Menu item 1" checkable clickable CollectionItemInfo:[rowSpan=0, colSpan=0, rowIndex=0, colIndex=0] actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItemCheckBox", roleDescription="checkbox"]
++++MenuItem text:"Menu item 2" checkable checked clickable CollectionItemInfo:[rowSpan=0, colSpan=0, rowIndex=1, colIndex=0] actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItemCheckBox", roleDescription="checkbox"]
++++MenuItem text:"Menu item 3" stateDescription:"Partially Checked" clickable CollectionItemInfo:[rowSpan=0, colSpan=0, rowIndex=2, colIndex=0] actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItemCheckBox", roleDescription="checkbox"]

@ -1,5 +1,5 @@
android.webkit.WebView focusable focused
++android.view.View role_description='menu'
++++android.view.MenuItem role_description='checkbox' checkable clickable interesting name='Menu item 1'
++++android.view.MenuItem role_description='checkbox' checkable checked clickable interesting name='Menu item 2' item_index=1 row_index=1
++++android.view.MenuItem role_description='checkbox' checkable clickable interesting name='Menu item 3' state_description='Partially Checked' item_index=2 row_index=2
++android.view.View role_description='menu' collection item_count=3 row_count=3 column_count=1
++++android.view.MenuItem role_description='checkbox' checkable clickable collection_item interesting name='Menu item 1'
++++android.view.MenuItem role_description='checkbox' checkable checked clickable collection_item interesting name='Menu item 2' item_index=1 row_index=1
++++android.view.MenuItem role_description='checkbox' checkable clickable collection_item interesting name='Menu item 3' state_description='Partially Checked' item_index=2 row_index=2

@ -1,5 +1,5 @@
WebView focusable focused actions:[CLEAR_FOCUS, AX_FOCUS] bundle:[chromeRole="rootWebArea"]
++View actions:[AX_FOCUS] bundle:[chromeRole="menu", roleDescription="menu"]
++++MenuItem text:"Menu item 1" checkable clickable actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItemRadio", roleDescription="radio button"]
++++MenuItem text:"Menu item 2" checkable checked clickable actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItemRadio", roleDescription="radio button"]
++++MenuItem text:"Menu item 3" checkable clickable actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItemRadio", roleDescription="radio button"]
++View CollectionInfo:[rows=3, cols=1] actions:[AX_FOCUS] bundle:[chromeRole="menu", roleDescription="menu"]
++++MenuItem text:"Menu item 1" checkable clickable CollectionItemInfo:[rowSpan=0, colSpan=0, rowIndex=0, colIndex=0] actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItemRadio", roleDescription="radio button"]
++++MenuItem text:"Menu item 2" checkable checked clickable CollectionItemInfo:[rowSpan=0, colSpan=0, rowIndex=1, colIndex=0] actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItemRadio", roleDescription="radio button"]
++++MenuItem text:"Menu item 3" checkable clickable CollectionItemInfo:[rowSpan=0, colSpan=0, rowIndex=2, colIndex=0] actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItemRadio", roleDescription="radio button"]

@ -1,5 +1,5 @@
android.webkit.WebView focusable focused
++android.view.View role_description='menu'
++++android.view.MenuItem role_description='radio button' checkable clickable interesting name='Menu item 1'
++++android.view.MenuItem role_description='radio button' checkable checked clickable interesting name='Menu item 2' item_index=1 row_index=1
++++android.view.MenuItem role_description='radio button' checkable clickable interesting name='Menu item 3' item_index=2 row_index=2
++android.view.View role_description='menu' collection item_count=3 row_count=3 column_count=1
++++android.view.MenuItem role_description='radio button' checkable clickable collection_item interesting name='Menu item 1'
++++android.view.MenuItem role_description='radio button' checkable checked clickable collection_item interesting name='Menu item 2' item_index=1 row_index=1
++++android.view.MenuItem role_description='radio button' checkable clickable collection_item interesting name='Menu item 3' item_index=2 row_index=2

@ -5,12 +5,12 @@ WebView focusable focused actions:[CLEAR_FOCUS, AX_FOCUS] bundle:[chromeRole="ro
++ListView clickable CollectionInfo:[rows=0, cols=1] actions:[CLICK, AX_FOCUS] bundle:[chromeRole="listBox", roleDescription="list box"]
++ListView clickable CollectionInfo:[rows=0, cols=1] actions:[CLICK, AX_FOCUS] bundle:[chromeRole="listBox", roleDescription="list box"]
++ListView clickable CollectionInfo:[rows=0, cols=1] actions:[CLICK, AX_FOCUS] bundle:[chromeRole="listBox", roleDescription="list box"]
++View actions:[AX_FOCUS] bundle:[chromeRole="menu", roleDescription="menu"]
++View actions:[AX_FOCUS] bundle:[chromeRole="menu", roleDescription="menu"]
++View actions:[AX_FOCUS] bundle:[chromeRole="menu", roleDescription="menu"]
++View actions:[AX_FOCUS] bundle:[chromeRole="menuBar", roleDescription="menu bar"]
++View actions:[AX_FOCUS] bundle:[chromeRole="menuBar", roleDescription="menu bar"]
++View actions:[AX_FOCUS] bundle:[chromeRole="menuBar", roleDescription="menu bar"]
++View CollectionInfo:[rows=0, cols=1] actions:[AX_FOCUS] bundle:[chromeRole="menu", roleDescription="menu"]
++View CollectionInfo:[rows=0, cols=1] actions:[AX_FOCUS] bundle:[chromeRole="menu", roleDescription="menu"]
++View CollectionInfo:[rows=0, cols=1] actions:[AX_FOCUS] bundle:[chromeRole="menu", roleDescription="menu"]
++View CollectionInfo:[rows=0, cols=1] actions:[AX_FOCUS] bundle:[chromeRole="menuBar", roleDescription="menu bar"]
++View CollectionInfo:[rows=0, cols=1] actions:[AX_FOCUS] bundle:[chromeRole="menuBar", roleDescription="menu bar"]
++View CollectionInfo:[rows=0, cols=1] actions:[AX_FOCUS] bundle:[chromeRole="menuBar", roleDescription="menu bar"]
++RadioGroup actions:[AX_FOCUS] bundle:[chromeRole="radioGroup", roleDescription="radio group"]
++RadioGroup actions:[AX_FOCUS] bundle:[chromeRole="radioGroup", roleDescription="radio group"]
++RadioGroup actions:[AX_FOCUS] bundle:[chromeRole="radioGroup", roleDescription="radio group"]

@ -5,12 +5,12 @@ android.webkit.WebView focusable focused
++android.widget.ListView role_description='list box' clickable collection interesting column_count=1
++android.widget.ListView role_description='list box' clickable collection interesting column_count=1
++android.widget.ListView role_description='list box' clickable collection interesting column_count=1
++android.view.View role_description='menu'
++android.view.View role_description='menu'
++android.view.View role_description='menu'
++android.view.View role_description='menu bar'
++android.view.View role_description='menu bar'
++android.view.View role_description='menu bar'
++android.view.View role_description='menu' collection column_count=1
++android.view.View role_description='menu' collection column_count=1
++android.view.View role_description='menu' collection column_count=1
++android.view.View role_description='menu bar' collection column_count=1
++android.view.View role_description='menu bar' collection column_count=1
++android.view.View role_description='menu bar' collection column_count=1
++android.widget.RadioGroup role_description='radio group'
++android.widget.RadioGroup role_description='radio group'
++android.widget.RadioGroup role_description='radio group'

@ -22,7 +22,7 @@ WebView focusable focused actions:[CLEAR_FOCUS, AX_FOCUS] bundle:[chromeRole="ro
++RadioGroup text:"Readonly radiogroup" disabled actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="radioGroup", roleDescription="radio group"]
++SeekBar text:"50, Readonly slider" clickable disabled RangeInfo:[current=50.0, min=0.0, max=100.0] actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS, SET_PROGRESS] bundle:[chromeRole="slider", roleDescription="slider"]
++EditText text:"0, Readonly spinbutton" clickable disabled RangeInfo:[current=0.0, min=0.0, max=0.0] actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS, SET_PROGRESS] bundle:[chromeRole="spinButton", roleDescription="spin button"]
++MenuItem text:"Readonly menuitemcheckbox" checkable clickable disabled actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItemCheckBox", roleDescription="checkbox"]
++MenuItem text:"Readonly menuitemradio" checkable clickable disabled actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItemRadio", roleDescription="radio button"]
++MenuItem text:"Readonly menuitemcheckbox" checkable clickable disabled CollectionItemInfo:[rowSpan=0, colSpan=0, rowIndex=0, colIndex=0] actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItemCheckBox", roleDescription="checkbox"]
++MenuItem text:"Readonly menuitemradio" checkable clickable disabled CollectionItemInfo:[rowSpan=0, colSpan=0, rowIndex=0, colIndex=0] actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItemRadio", roleDescription="radio button"]
++EditText hint:"Readonly searchbox" clickable editable disabled textSelectionStart:0 textSelectionEnd:0 actions:[CLICK, AX_FOCUS] bundle:[chromeRole="searchBox", hint="Readonly searchbox", roleDescription="search text field"]
++ToggleButton text:"Readonly switch" stateDescription:"Off" checkable clickable disabled actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="switch", roleDescription="switch"]

@ -22,7 +22,7 @@ android.webkit.WebView focusable focused
++android.widget.RadioGroup role_description='radio group' disabled interesting name='Readonly radiogroup'
++android.widget.SeekBar role_description='slider' clickable disabled range interesting name='50, Readonly slider' item_index=50 item_count=100 range_max=100 range_current_value=50
++android.widget.EditText role_description='spin button' clickable disabled range interesting name='0, Readonly spinbutton' item_count=100
++android.view.MenuItem role_description='checkbox' checkable clickable disabled interesting name='Readonly menuitemcheckbox'
++android.view.MenuItem role_description='radio button' checkable clickable disabled interesting name='Readonly menuitemradio'
++android.view.MenuItem role_description='checkbox' checkable clickable collection_item disabled interesting name='Readonly menuitemcheckbox'
++android.view.MenuItem role_description='radio button' checkable clickable collection_item disabled interesting name='Readonly menuitemradio'
++android.widget.EditText role_description='search text field' clickable disabled editable_text interesting hint='Readonly searchbox'
++android.widget.ToggleButton role_description='switch' checkable clickable disabled interesting name='Readonly switch' state_description='Off'

@ -18,10 +18,10 @@ WebView text:"Action verbs" focusable focused actions:[CLEAR_FOCUS, AX_FOCUS, NE
++TextView text:"Div with click handler" clickable actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="genericContainer", clickableScore="200"]
++View clickable actions:[CLICK, AX_FOCUS] bundle:[chromeRole="group", clickableScore="200"]
++++TextView text:"Paragraph with click handler on parent" actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="paragraph", clickableScore="100"]
++View actions:[AX_FOCUS] bundle:[chromeRole="menu", roleDescription="menu"]
++++MenuItem text:"Menu item 1" clickable actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItem", clickableScore="300", roleDescription="menu item"]
++++MenuItem text:"Menu item 2" checkable checked clickable actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItemCheckBox", clickableScore="300", roleDescription="checkbox"]
++++MenuItem text:"Menu item 3" checkable clickable actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItemRadio", clickableScore="300", roleDescription="radio button"]
++View CollectionInfo:[rows=3, cols=1] actions:[AX_FOCUS] bundle:[chromeRole="menu", roleDescription="menu"]
++++MenuItem text:"Menu item 1" clickable CollectionItemInfo:[rowSpan=0, colSpan=0, rowIndex=0, colIndex=0] actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItem", clickableScore="300", roleDescription="menu item"]
++++MenuItem text:"Menu item 2" checkable checked clickable CollectionItemInfo:[rowSpan=0, colSpan=0, rowIndex=1, colIndex=0] actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItemCheckBox", clickableScore="300", roleDescription="checkbox"]
++++MenuItem text:"Menu item 3" checkable clickable CollectionItemInfo:[rowSpan=0, colSpan=0, rowIndex=2, colIndex=0] actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="menuItemRadio", clickableScore="300", roleDescription="radio button"]
++Button text:"ARIA Button" clickable actions:[CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="button", clickableScore="300", roleDescription="button"]
++Button text:"ARIA button with tab index" clickable focusable actions:[FOCUS, CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="button", clickableScore="300", roleDescription="button"]
++Button text:"ARIA button with negative tab index" clickable focusable actions:[FOCUS, CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="button", clickableScore="300", roleDescription="button"]

@ -18,10 +18,10 @@ android.webkit.WebView focusable focused interesting name='Action verbs'
++android.widget.TextView clickable interesting name='Div with click handler'
++android.view.View clickable
++++android.widget.TextView interesting name='Paragraph with click handler on parent'
++android.view.View role_description='menu'
++++android.view.MenuItem role_description='menu item' clickable interesting name='Menu item 1'
++++android.view.MenuItem role_description='checkbox' checkable checked clickable interesting name='Menu item 2' item_index=1 row_index=1
++++android.view.MenuItem role_description='radio button' checkable clickable interesting name='Menu item 3' item_index=2 row_index=2
++android.view.View role_description='menu' collection item_count=3 row_count=3 column_count=1
++++android.view.MenuItem role_description='menu item' clickable collection_item interesting name='Menu item 1'
++++android.view.MenuItem role_description='checkbox' checkable checked clickable collection_item interesting name='Menu item 2' item_index=1 row_index=1
++++android.view.MenuItem role_description='radio button' checkable clickable collection_item interesting name='Menu item 3' item_index=2 row_index=2
++android.widget.Button role_description='button' clickable interesting name='ARIA Button'
++android.widget.Button role_description='button' clickable focusable interesting name='ARIA button with tab index'
++android.widget.Button role_description='button' clickable focusable interesting name='ARIA button with negative tab index'

@ -1,7 +1,7 @@
android.webkit.WebView focusable focused
++android.view.View role_description='menu'
++android.view.View role_description='menu' collection column_count=1
++++android.widget.CheckBox role_description='checkbox' checkable clickable focusable interesting name='Checkbox1'
++++android.widget.CheckBox role_description='checkbox' checkable checked clickable focusable interesting name='Checkbox2'
++android.view.View role_description='menu'
++android.view.View role_description='menu' collection column_count=1
++++android.widget.CheckBox role_description='checkbox' checkable checked clickable focusable interesting name='Checkbox3'
++++android.widget.CheckBox role_description='checkbox' checkable clickable focusable interesting name='Checkbox4' state_description='Partially Checked'

@ -1,11 +1,11 @@
WebView focusable focused actions:[CLEAR_FOCUS, AX_FOCUS] bundle:[chromeRole="rootWebArea"]
++View actions:[AX_FOCUS] bundle:[chromeRole="menu", roleDescription="menu"]
++View CollectionInfo:[rows=0, cols=1] actions:[AX_FOCUS] bundle:[chromeRole="menu", roleDescription="menu"]
++++RadioButton stateDescription:"Checked. In group, option 1 of 3" checkable checked clickable focusable actions:[FOCUS, CLICK, AX_FOCUS] bundle:[chromeRole="radioButton", clickableScore="300", roleDescription="radio button"]
++++TextView text:"Radio0 " actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="staticText"]
++++RadioButton stateDescription:"Not checked. In group, option 2 of 3" checkable clickable focusable actions:[FOCUS, CLICK, AX_FOCUS] bundle:[chromeRole="radioButton", clickableScore="300", roleDescription="radio button"]
++++TextView text:"Radio1 " actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="staticText"]
++++RadioButton text:"Radio2" stateDescription:"Not checked. In group, option 3 of 3" checkable clickable focusable actions:[FOCUS, CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="radioButton", clickableScore="300", roleDescription="radio button"]
++View actions:[AX_FOCUS] bundle:[chromeRole="menu", roleDescription="menu"]
++View CollectionInfo:[rows=0, cols=1] actions:[AX_FOCUS] bundle:[chromeRole="menu", roleDescription="menu"]
++++RadioButton text:"Radio3" stateDescription:"Not checked. In group, option 1 of 3" checkable clickable focusable actions:[FOCUS, CLICK, AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="radioButton", clickableScore="300", roleDescription="radio button"]
++++RadioButton stateDescription:"Not checked. In group, option 2 of 3" checkable clickable focusable actions:[FOCUS, CLICK, AX_FOCUS] bundle:[chromeRole="radioButton", clickableScore="300", roleDescription="radio button"]
++++RadioButton stateDescription:"Checked. In group, option 3 of 3" checkable checked clickable focusable actions:[FOCUS, CLICK, AX_FOCUS] bundle:[chromeRole="radioButton", clickableScore="300", roleDescription="radio button"]

@ -1,11 +1,11 @@
android.webkit.WebView focusable focused
++android.view.View role_description='menu'
++android.view.View role_description='menu' collection column_count=1
++++android.widget.RadioButton role_description='radio button' checkable checked clickable focusable interesting state_description='Checked. In group, option 1 of 3'
++++android.widget.TextView interesting name='Radio0 '
++++android.widget.RadioButton role_description='radio button' checkable clickable focusable interesting state_description='Not checked. In group, option 2 of 3' item_index=1 row_index=1
++++android.widget.TextView interesting name='Radio1 '
++++android.widget.RadioButton role_description='radio button' checkable clickable focusable interesting name='Radio2' state_description='Not checked. In group, option 3 of 3' item_index=2 row_index=2
++android.view.View role_description='menu'
++android.view.View role_description='menu' collection column_count=1
++++android.widget.RadioButton role_description='radio button' checkable clickable focusable interesting name='Radio3' state_description='Not checked. In group, option 1 of 3'
++++android.widget.RadioButton role_description='radio button' checkable clickable focusable interesting state_description='Not checked. In group, option 2 of 3' item_index=1 row_index=1
++++android.widget.RadioButton role_description='radio button' checkable checked clickable focusable interesting state_description='Checked. In group, option 3 of 3' item_index=2 row_index=2