Mac:Accessibility/UniversalAccess: Difference between revisions

add info about older APIs that ATs need to use (hidden in an apple release note)
No edit summary
(add info about older APIs that ATs need to use (hidden in an apple release note))
 
(7 intermediate revisions by 2 users not shown)
Line 1: Line 1:
= Quick Reference for Universal Access =
= Introduction to Universal Access =


This is a quick reference for Apple's accessibility APIs. Most of this info is gathered from [http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/ObjC_classic/Protocols/NSAccessibility.html Apple's page about the NSAccessibility protocol].
This page previously hosted a quick reference to Apple's accessibility framework. Since then, Apple has updated it to be much more useful. See Apple's [http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Protocols/NSAccessibility_Protocol/index.html definition of the NSAccessibility protocol] for a good quick reference.


In the following sections, we will use a few commonly used acronyms for convenience:
In the following sections, we will use a few commonly used acronyms for convenience:
Line 7: Line 7:
* '''UA''' refers to ''Universal Access'' - Apple's name for all of their accessibility APIs.
* '''UA''' refers to ''Universal Access'' - Apple's name for all of their accessibility APIs.


== About attributes ==
== Everything is an Attribute ==
Developers used to MSAA or ATK will find that UA is very easy to use. Everything is basically done just by querying elements for attributes, and setting them.


Every widget that is made accessible supports a range of attributes.  
In this way, one could think of UA kind of like a hash table. You ask for an attribute and get an array, a string, a number, or any other value describing the data you asked for.


An AT can query the widget for the attributes it supports, and then get to know more information about each individual attribute.  
Users of the UA APIs can easily extend UA just by supporting a new attribute. Whenever someone asks for the value of it.


An attribute might be a widget's role, its value, or what actions it supports.
The first thing an AT typically does is to ask the [http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Protocols/NSAccessibility_Protocol/Reference/Reference.html#//apple_ref/doc/uid/20000945-BCIIHIGG query widgets about the attributes they support]. It can then go on to see which of those that are "settable", i.e. changable by the user. For example, the value attribute of a textfield is settable.


See the [[Mac:Accessibility/UniversalAccess:Attributes|full list of attributes]].
=== Roles ===
An AT can know the "role" of a widget just by asking for the value of the [http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Protocols/NSAccessibility_Protocol/Reference/Reference.html#//apple_ref/doc/c_ref/NSAccessibilityRoleAttribute role attribute]. The role tells the AT a lot about the widget behaves (button? listbox? etc.)


== About notifications ==
=== Actions ===
An action is a way for the user to interact with the interface, e.g. through a screen reader. For example clicking a button, deleting, or incrementing a value. To know [http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Protocols/NSAccessibility_Protocol/Reference/Reference.html#//apple_ref/doc/uid/20000945-DontLinkElementID_20 which actions] a widget supports is as easy as [http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Protocols/NSAccessibility_Protocol/index.html asking for an array of them].


UA sends out a notification to any obsering AT when some events occur. This is [http://developer.apple.com/documentation/Cocoa/Conceptual/CocoaFundamentals/CommunicatingWithObjects/chapter_6_section_6.html regular notifications], that are used throughout Cocoa.
=== Notifications ===
[http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Protocols/NSAccessibility_Protocol/Reference/Reference.html#//apple_ref/doc/uid/20000945-DontLinkElementID_21 Notifications] are sent out to the ATs when something significant in the UI has changed (for example, a new window was opened or new rows were added to a table).


See the [[Mac:Accessibility/UniversalAccess:Notifications|list of all accessibility-specific notifications]].
A notification in Cocoa is an object with:
* a name (of the event fired),
* an object (usually the "emitter" of the event, for example a widget),
* a userInfo dictionary (hash table).  


== About actions ==
The dictionary (hash table) can be filled with any custom information that the poster of the event wants all receivers to have. [http://developer.apple.com/documentation/Cocoa/Conceptual/Notifications/index.html Go here for more information about notifications in Cocoa].


Actions are those that let the user interact with the software, e.g., via a Screen Reader or any other AT device.
== AT APIs, and client APIs ==
Client applications that want to be made accessible, can do this simply by implementing the NSAccessibility protocol, all in Objective C.


[[Mac:Accessibility/UniversalAccess:Actions|Full list of actions]]
ATs will typically need to use some C APIs in conjunction with those defined in NSAccessibility. The C APIs let the AT get the root accessibility objet from a given pid, among other things. [http://developer.apple.com/releasenotes/Accessibility/AssistiveAPI.html See this older release note for more information.]
 
== What UA is Missing ==
Universal Access is great in a lot of ways, but for a web browser there are still things missing.
 
* The major thing missing for us is a way to notify a user of dynamically updated content (think AJAX and DHTML). VoiceOver isn't currently verbose enough to account for those things, and no such notifications can be found.
* We have found that trees/listboxes don't seem to provide enough info about changes to their contents. No details yet.


== WebKit additions ==
== WebKit additions ==
WebKit has implement some custom extensions to UA to make it work better in a web context. We've gathered them here as well.
Because UA is easily extendable with new attributes, roles, and notifications, WebKit has implemented some custom extensions to UA to make it work better in a web context. We've gathered them here as well.


[[Mac:Accessibility/UniversalAccess:Webkit|WebKit UA extensions]]
[[Mac:Accessibility/UniversalAccess:Webkit|WebKit UA extensions]]


= Comments, suggestions, etc =
= Comments, suggestions, etc =
Feel free to add and improve this introduction, or even copy it to another wiki.


Feel free to add and improve this reference, or even copy it to another wiki. At the moment, there is no good resource about these APIs except for Apple's pages, which in some cases have been found to be outdated and incorrect.
--[[User:Hwaara|HakanW]]
 
--[[User:Hwaara|HakanW]] 09:36, 8 May 2006 (PDT)
107

edits