Commit 57e864f6 authored by Dominic Mazzoni's avatar Dominic Mazzoni Committed by Commit Bot

Android accessibility: disabled controls must be marked as clickable.

See also: b/135105339

Bug: 1004549
Change-Id: I7ae726e4e162173d63d3805b67b24ad90d1b8233
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1812103Reviewed-by: default avatarAkihiro Ota <akihiroota@chromium.org>
Commit-Queue: Dominic Mazzoni <dmazzoni@chromium.org>
Cr-Commit-Position: refs/heads/master@{#700015}
parent 287de0d7
......@@ -221,10 +221,6 @@ bool BrowserAccessibilityAndroid::IsChecked() const {
}
bool BrowserAccessibilityAndroid::IsClickable() const {
// Explicitly disabled form controls shouldn't be clickable.
if (!IsEnabled())
return false;
// If it has a custom default action verb except for
// ax::mojom::DefaultActionVerb::kClickAncestor, it's definitely clickable.
// ax::mojom::DefaultActionVerb::kClickAncestor is used when an element with a
......@@ -235,9 +231,18 @@ bool BrowserAccessibilityAndroid::IsClickable() const {
return true;
}
// Otherwise return true if it's focusable, but skip web areas and iframes.
if (!IsEnabled()) {
// TalkBack won't announce a control as disabled unless it's also marked
// as clickable. In other words, Talkback wants to know if the control
// might be clickable, if it wasn't disabled.
return ui::IsControl(GetRole());
}
// Skip web areas and iframes, they're focusable but not clickable.
if (IsIframe() || (GetRole() == ax::mojom::Role::kRootWebArea))
return false;
// Otherwise it's clickable if it's focusable.
return IsFocusable();
}
......
android.webkit.WebView focusable focused scrollable
++android.view.View
++++android.widget.EditText clickable editable_text focusable input_type=1
++++android.widget.EditText disabled editable_text focusable input_type=1
++++android.widget.EditText clickable disabled editable_text focusable input_type=1
++++android.widget.EditText clickable editable_text focusable input_type=1
++android.view.View disabled
++++android.widget.EditText disabled editable_text focusable input_type=1
++++android.widget.EditText disabled editable_text focusable input_type=1
++++android.widget.EditText clickable disabled editable_text focusable input_type=1
++++android.widget.EditText clickable disabled editable_text focusable input_type=1
++++android.widget.EditText clickable editable_text focusable input_type=1
++android.view.View
++++android.widget.EditText clickable editable_text focusable input_type=1
++++android.widget.EditText disabled editable_text focusable input_type=1
++++android.widget.EditText clickable disabled editable_text focusable input_type=1
++++android.widget.EditText clickable editable_text focusable input_type=1
\ No newline at end of file
......@@ -2,22 +2,22 @@ android.webkit.WebView focusable focused scrollable
++android.view.View
++++android.widget.EditText clickable editable_text focusable has_non_empty_value name='Readonly-false input' input_type=1 text_change_added_count=20
++android.view.View
++++android.widget.EditText disabled editable_text focusable has_non_empty_value name='Readonly-true input' input_type=1 text_change_added_count=19
++++android.widget.EditText clickable disabled editable_text focusable has_non_empty_value name='Readonly-true input' input_type=1 text_change_added_count=19
++android.view.View clickable focusable name='Readonly-false plain div'
++android.view.View clickable focusable name='Readonly-true plain div'
++android.widget.EditText clickable editable_text focusable multiline hint='Readonly-false contenteditable div'
++android.widget.EditText clickable editable_text focusable multiline hint='Readonly-true contenteditable div'
++android.widget.EditText clickable editable_text focusable hint='Readonly-false role unimplemented textbox'
++android.widget.EditText disabled editable_text focusable hint='Readonly-true role unimplemented textbox'
++android.widget.EditText clickable disabled editable_text focusable hint='Readonly-true role unimplemented textbox'
++android.widget.EditText clickable editable_text focusable hint='Readonly-false contenteditable textbox'
++android.widget.EditText disabled editable_text focusable hint='Readonly-true contenteditable textbox'
++android.widget.CheckBox role_description='checkbox' checkable disabled name='Readonly checkbox'
++android.widget.EditText disabled editable_text focusable hint='Readonly combobox' input_type=1
++android.widget.ListView role_description='list box' collection disabled name='Readonly listbox'
++android.widget.EditText clickable disabled editable_text focusable hint='Readonly-true contenteditable textbox'
++android.widget.CheckBox role_description='checkbox' checkable clickable disabled name='Readonly checkbox'
++android.widget.EditText clickable disabled editable_text focusable hint='Readonly combobox' input_type=1
++android.widget.ListView role_description='list box' clickable collection disabled name='Readonly listbox'
++android.view.View role_description='radio group' disabled name='Readonly radiogroup'
++android.widget.SeekBar role_description='slider' disabled range name='Readonly slider' item_index=50 item_count=100 range_max=100 range_current_value=50
++android.widget.EditText role_description='spin button' disabled name='Readonly spinbutton'
++android.view.MenuItem role_description='checkbox' checkable disabled name='Readonly menuitemcheckbox'
++android.view.MenuItem role_description='radio button' checkable disabled name='Readonly menuitemradio'
++android.widget.EditText role_description='search text field' disabled editable_text hint='Readonly searchbox'
++android.widget.CheckBox role_description='switch' checkable disabled name='Readonly switch'
++android.widget.SeekBar role_description='slider' clickable disabled range name='Readonly slider' item_index=50 item_count=100 range_max=100 range_current_value=50
++android.widget.EditText role_description='spin button' clickable disabled name='Readonly spinbutton'
++android.view.MenuItem role_description='checkbox' checkable clickable disabled name='Readonly menuitemcheckbox'
++android.view.MenuItem role_description='radio button' checkable clickable disabled name='Readonly menuitemradio'
++android.widget.EditText role_description='search text field' clickable disabled editable_text hint='Readonly searchbox'
++android.widget.CheckBox role_description='switch' checkable clickable disabled name='Readonly switch'
\ No newline at end of file
android.webkit.WebView focusable focused scrollable
++android.widget.CheckBox role_description='checkbox' checkable clickable focusable name='Enabled'
++android.widget.CheckBox role_description='checkbox' checkable disabled name='Disabled'
++android.widget.CheckBox role_description='checkbox' checkable clickable disabled name='Disabled'
++android.widget.Button role_description='button' clickable focusable name='Enabled'
++android.widget.Button role_description='button' disabled name='Disabled'
++android.widget.Button role_description='button' clickable disabled name='Disabled'
++android.view.View
++++android.view.View name='Enabled form '
++++android.widget.CheckBox role_description='checkbox' checkable clickable focusable name='Checkbox'
++++android.widget.Button role_description='button' clickable focusable name='Button'
++android.view.View disabled
++++android.view.View name='Disabled form '
++++android.widget.CheckBox role_description='checkbox' checkable disabled focusable name='Checkbox'
++++android.widget.Button role_description='button' disabled focusable name='Button'
++++android.widget.CheckBox role_description='checkbox' checkable clickable disabled focusable name='Checkbox'
++++android.widget.Button role_description='button' clickable disabled focusable name='Button'
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment