Skip to content

Settings editor accessibility improvements prototype feedback #104318

Closed
@roblourens

Description

@roblourens

Update Oct 2, 2020: "Option A" is shipping in 1.50

Over the past couple iterations, we have been listening to feedback and exploring options for making the settings editor easier to use with a screen reader. Here are some of the issues we've heard:

  • The only way to navigate the settings list is by tabbing. Arrow keys, page up/down, or screen reader browse mode don't work.
  • The settings list is effectively an infinitely long tab sink. If you tab into it, it's very difficult to tab out of it.
  • You can move from the category list into the settings list with no obvious way to get back to the category list.
  • When navigating the settings list, you can tab from a setting in one category into a setting in another category with no announcement that you have changed categories.

We investigated two possible solutions to these issues and have produced two prototypes, and now we are looking for as much feedback as possible, from those who use screen readers as well as those who don't.

Option A: "Focusable Rows"

In this mode, navigating the settings editor becomes more like navigating a list. A setting row becomes focused, and the settings list can be navigated with the arrow keys. The user can navigate to a setting then tab into its control to edit it.

Some advantages to this approach:

  • The control in the focused row is the only tabbable element in the setting list. In other words, the setting list no longer will add hundreds of tab targets to the page.
  • Setting category titles will become focused as the user navigates through the list. They will be read by the screen reader so it is obvious that focus has moved from one category to another.
  • This interaction model will work similarly to all other lists in VS Code, so it should be familiar. The same keybindings for navigating other lists will work for this list.

We've made another improvement which is currently only implemented for Option A, although it is not tied to this option and will make it into the settings editor regardless. You can press "escape" when focus is in the settings list to move focus back to the category list, and then press "escape" again to move focus back to the search bar. This solves the issue of having difficulty moving focus out of the settings editor, and emphasizes the hierarchical nature of these 3 main parts.

Updated Sep 2 - This has been removed from the Insiders build for our August release, please try this in the builds below

Updated Aug 17 - This is currently in the Insiders build, and will be until the end of the August iteration. https://code.visualstudio.com/insiders/

Here are the links to builds including option A:

Option B: "Non-Virtualized List"

In this mode, navigating the settings editor becomes more like navigating a typical form, not a "list". We swap out the virtualized setting list for a non-virtualized list - just normal HTML on a page. This means that screen readers will be able to navigate the list using browse mode. We also introduce pagination with a limit of 20 settings on the page at a time. This ensures that the settings list can actually be tabbed through within the length of a typical human lifetime.

Some advantages to this approach:

  • With all settings on the page actually in the DOM, the screen reader will be able to "see" them, so that navigating with browse mode will work.
  • Navigating the settings list will work like a form - like any form on any other webpage, and will be familiar. Tabbing through settings will work the way one expects when one sees a page full of text inputs, dropdowns, and checkboxes.
  • The settings list will be scoped to just the settings for the category selected in the category list. This will make the relationship between the category list and settings list easier to understand, and remove the issue of silently moving from one category to another.

Here are the links to builds including option B:

Previous discussion: #97567

Metadata

Metadata

Assignees

Labels

accessibilityKeyboard, mouse, ARIA, vision, screen readers (non-specific) issuessettings-editorVS Code settings editor issuesunder-discussionIssue is under discussion for relevance, priority, approach

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions