What works today and how to scale this further:
Currently FX Accessibility works for following controls on Windows and Mac platform:
Button, RadioButton, CheckBox, Slider and ListView
To scale it further:
Extending to newer controls
- To add accessibility for control check if one or more provider matches the control to expose its accessibility information. If not add the provider in com.sun.javafx.accessible.providers.
- Implement AccessibleControlxxx extending the AccessibleControl and implement specific behavior implementing the provider
- If no matching provider existed , add the native corresponding provider.
- Add the provider to glass platform factory
Notes:
AccessibleButton - before getPropertyValue returns button.getText(), should try getting accessible name from the properties map
PropertyIds should become public API
Need to make Node.impl_getAccessible() public, or to consider the API in the future
Accessible controls (like AccessibleButton) can implement multiple provider interfaces
com.sun.glass.ui.accessible is the glass layer for a11y, which implements the provider interfaces to the underlying OS
In the future we will need to develop more providers (in com.sun.javafx.accessible.providers package)
WinPlatformFactory calls createAccessibleProvider to map the accessible providers to the native implementations
Four options for high-level implementation:
* Don't expose custom controls a11y option
* Expose the providers interface and utils interface (com.sun.utils.accessible and com.sun.utils.accessible.providers)
* Expose AccessibleNode and Providers only
* Expose AccessibleNode, AccessibleControl and Providers
Quantum holds on to StagePeerListener, which holds on to the AccessibleStage
Accessible scenegraph hierarchy is fully maintained in the AccessibleStage
AccessibleStage is initialised only at init time - it is not synced up to the scenegraph - which needs to still be done
AccessibleStage should maybe be merged back into Stage so that we don't maintain two separate graphs
AccessibleStage should be initialised only when the scenegraph is done (at present it is done too early)