arc-a11y: Improve focusability computation

This CL tries to make linear navigation order of ChromeVox on ARC++
similar to TalkBack.

For example, imagine a11y tree in Android is like this:
++ nodeA container (focusable clickable) (name is empty)
++++ nodeB static text (not focusable, not clickable) (name X)
++++ nodeC button (focusable clickable) (name Y)

TalkBack's navigation order is as below:
1. nodeA, announce a name of nodeB.
2. nodeC, announce a name of nodeC.

Currently ChromeVox skips nodeA. With this CL, ChromeVox firstly focus
on nodeA and nodeB is skipped because it's ignored.

This CL introcues 'screen reader mode' in ARC accessibility, which is
enabled when SwitchAccess or ChromeVox is enabled. The focusability
change added in this CL is applied only when the screen reader mode is
enabled so that we don't break text location API for Select-to-Speak.

Note that this change adds a few TODOs, which will be resolved in follow
up CLs.

AX-Relnotes: n/a.
Bug: b:157441336
Bug: b:150344900
Bug: b:150344310
Test: unit_tests --gtest_filter="AXTreeSourceArcTest.*"
Test: manually confirmed with PlayStore and Android Settings.
Change-Id: I700cbbd348c9eb7bf71a7995994c926b1c839979
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2222068
Commit-Queue: Hiroki Sato <hirokisato@chromium.org>
Reviewed-by: David Tseng <dtseng@chromium.org>
Reviewed-by: Sara Kato <sarakato@chromium.org>
Cr-Commit-Position: refs/heads/master@{#778595}
10 files changed
tree: e69f12480daca74d15e6ed096c3c61999626057b
  1. android_webview/
  2. apps/
  3. ash/
  4. base/
  5. build/
  6. build_overrides/
  7. buildtools/
  8. cc/
  9. chrome/
  10. chromecast/
  11. chromeos/
  12. cloud_print/
  13. components/
  14. content/
  15. courgette/
  16. crypto/
  17. dbus/
  18. device/
  19. docs/
  20. extensions/
  21. fuchsia/
  22. gin/
  23. google_apis/
  24. google_update/
  25. gpu/
  26. headless/
  27. infra/
  28. ios/
  29. ipc/
  30. jingle/
  31. media/
  32. mojo/
  33. native_client_sdk/
  34. net/
  35. pdf/
  36. ppapi/
  37. printing/
  38. remoting/
  39. rlz/
  40. sandbox/
  41. services/
  42. skia/
  43. sql/
  44. storage/
  45. styleguide/
  46. testing/
  47. third_party/
  48. tools/
  49. ui/
  50. url/
  51. weblayer/
  52. .clang-format
  53. .clang-tidy
  54. .eslintrc.js
  55. .git-blame-ignore-revs
  56. .gitattributes
  57. .gitignore
  58. .gn
  59. .vpython
  60. .vpython3
  61. .yapfignore
  62. AUTHORS
  63. BUILD.gn
  64. CODE_OF_CONDUCT.md
  65. codereview.settings
  66. DEPS
  67. ENG_REVIEW_OWNERS
  68. LICENSE
  69. LICENSE.chromium_os
  70. OWNERS
  71. PRESUBMIT.py
  72. PRESUBMIT_test.py
  73. PRESUBMIT_test_mocks.py
  74. README.md
  75. WATCHLISTS
README.md

Logo Chromium

Chromium is an open-source browser project that aims to build a safer, faster, and more stable way for all users to experience the web.

The project's web site is https://www.chromium.org.

Documentation in the source is rooted in docs/README.md.

Learn how to Get Around the Chromium Source Code Directory Structure .

For historical reasons, there are some small top level directories. Now the guidance is that new top level directories are for product (e.g. Chrome, Android WebView, Ash). Even if these products have multiple executables, the code should be in subdirectories of the product.