0

a11y: Export search role from Clank

This CL should have no effect on its own, but it allows TalkBack
and other ATs to distinguish search elements.

Bug: 414666411
Change-Id: Ib57ed98cdb258d9c4a23617123ef0256bba280a3
AX-Relnotes: n/a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6505784
Commit-Queue: Camden Bickel <cambickel@google.com>
Reviewed-by: David Tseng <dtseng@chromium.org>
Reviewed-by: Mark Schillaci <mschillaci@google.com>
Cr-Commit-Position: refs/heads/main@{#1455071}
This commit is contained in:
Cam Bickel
2025-05-02 10:52:11 -07:00
committed by Chromium LUCI CQ
parent c7c02544a3
commit e21795dfa2
9 changed files with 10 additions and 6 deletions

@ -1,2 +1,2 @@
WebView focusable focused actions:[CLEAR_FOCUS, AX_FOCUS] bundle:[chromeRole="rootWebArea"]
++View text:"ARIA role search." actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="search", roleDescription="search"]
++SearchView text:"ARIA role search." actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="search", roleDescription="search"]

@ -1,2 +1,2 @@
android.webkit.WebView focusable focused
++android.view.View role_description='search' interesting name='ARIA role search.'
++android.widget.SearchView role_description='search' interesting name='ARIA role search.'

@ -13,7 +13,7 @@ WebView focusable focused actions:[CLEAR_FOCUS, AX_FOCUS] bundle:[chromeRole="ro
++View text:"This is an ARIA form landmark." containerTitle:"Named form" actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="form"]
++View text:"This is an ARIA main landmark." actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="main", roleDescription="main"]
++NavigationView text:"This is an ARIA navigation landmark." actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="navigation", roleDescription="navigation"]
++View text:"This is an ARIA search landmark." actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="search", roleDescription="search"]
++SearchView text:"This is an ARIA search landmark." actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="search", roleDescription="search"]
++View actions:[AX_FOCUS] bundle:[chromeRole="article", roleDescription="article"]
++++View text:"This should NOT banner role." actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="sectionHeader"]
++View actions:[AX_FOCUS] bundle:[chromeRole="complementary", roleDescription="complementary"]

@ -13,7 +13,7 @@ android.webkit.WebView focusable focused
++android.view.View interesting name='This is an ARIA form landmark.' container_title='Named form'
++android.view.View role_description='main' interesting name='This is an ARIA main landmark.'
++com.google.android.material.navigation.NavigationView role_description='navigation' interesting name='This is an ARIA navigation landmark.'
++android.view.View role_description='search' interesting name='This is an ARIA search landmark.'
++android.widget.SearchView role_description='search' interesting name='This is an ARIA search landmark.'
++android.view.View role_description='article'
++++android.view.View interesting name='This should NOT banner role.'
++android.view.View role_description='complementary'

@ -1,4 +1,4 @@
WebView focusable focused actions:[CLEAR_FOCUS, AX_FOCUS] bundle:[chromeRole="rootWebArea"]
++View actions:[AX_FOCUS] bundle:[chromeRole="search", roleDescription="search"]
++SearchView actions:[AX_FOCUS] bundle:[chromeRole="search", roleDescription="search"]
++++View text:"Search element." actions:[AX_FOCUS, NEXT, PREVIOUS] bundle:[chromeRole="labelText"]
++++EditText clickable editable focusable inputType:1 textSelectionStart:0 textSelectionEnd:0 actions:[FOCUS, CLICK, AX_FOCUS, PASTE, SET_TEXT, IME_ENTER] bundle:[chromeRole="searchBox", clickableScore="300", roleDescription="search text field"]

@ -1,4 +1,4 @@
android.webkit.WebView focusable focused
++android.view.View role_description='search'
++android.widget.SearchView role_description='search'
++++android.view.View interesting name='Search element.'
++++android.widget.EditText role_description='search text field' clickable editable_text focusable interesting input_type=1

@ -448,6 +448,8 @@ const char* AXRoleToAndroidClassName(ax::mojom::Role role, bool has_parent) {
case ax::mojom::Role::kDirectoryDeprecated:
case ax::mojom::Role::kPreDeprecated:
NOTREACHED();
case ax::mojom::Role::kSearch:
return kAXSearchViewClassname;
default:
return kAXViewClassname;
}

@ -33,6 +33,7 @@ const char kAXProgressBarClassname[] = "android.widget.ProgressBar";
const char kAXRadioButtonClassname[] = "android.widget.RadioButton";
const char kAXRadioGroupClassname[] = "android.widget.RadioGroup";
const char kAXScrollViewClassname[] = "android.widget.ScrollView";
const char kAXSearchViewClassname[] = "android.widget.SearchView";
const char kAXSeekBarClassname[] = "android.widget.SeekBar";
const char kAXSpinnerClassname[] = "android.widget.Spinner";
const char kAXSwitchClassname[] = "android.widget.Switch";

@ -37,6 +37,7 @@ COMPONENT_EXPORT(AX_PLATFORM) extern const char kAXProgressBarClassname[];
COMPONENT_EXPORT(AX_PLATFORM) extern const char kAXRadioButtonClassname[];
COMPONENT_EXPORT(AX_PLATFORM) extern const char kAXRadioGroupClassname[];
COMPONENT_EXPORT(AX_PLATFORM) extern const char kAXScrollViewClassname[];
COMPONENT_EXPORT(AX_PLATFORM) extern const char kAXSearchViewClassname[];
COMPONENT_EXPORT(AX_PLATFORM) extern const char kAXSeekBarClassname[];
COMPONENT_EXPORT(AX_PLATFORM) extern const char kAXSwitchClassname[];
COMPONENT_EXPORT(AX_PLATFORM) extern const char kAXSpinnerClassname[];