WWDC2004 Session 423
Transcript
Kind: captions Language: en ladies and gentlemen please welcome managers spoken in her engineering Eric see more good morning so before I get started I just want to thank everybody for coming today welcome to day 3 of WWDC I want to extend a special thank you so you had a lot of sessions that you could have attended this morning and you chose this one and the accessibility team at Apple which is quite cross functional covers lots of organizations is very very committed to what we're doing and we realize that it's a commitment for third parties to add accessibility to their applications so just the fact that you're here is a tremendous statement to us about how much you care about what we're all doing here so I appreciate it we all appreciate it and if there's one thing that if if I could impart one thing to anybody about accessibility it's the importance of doing it in your application I can talk about spoken interface I can talk about our other accessibility capabilities Mac os10 but at the end of the day all of us adding accessibility capability into our application is really really important and we should look at it is just another detail of writing software in the 21st century so we localize our applications we nitpick the graphical details of applications we accessorize their applications we make them accessible it's just part of doing business that's the biggest takeaway that I think is important to tell everybody outside of this room so let's get started I'm going to cover for things today I'm going to talk about Apple's News spoke and interface of course then I'm going to go into a few accessibility basics and its really going to scratch the surface of the accessibility API is what you've been shipping in Mac OS 10 for several years then I'm going to talk about a few things that you can do that are new and tiger part of the accessibility API is that will make your application to really great accessibility citizens work really well with the new spoken interface and other accessibility clients that exist and then finally we're going to cover some tools which will help you accomplish that so accessibility on Mac OS 10 pretty good there are several features some of you have probably already use them things like stick keys and zooming the screen and you know flash the screen when there's an audible alert lots of accessibility in Machynlleth 10 with Tiger we're going to be bundling a major new feature and that a features of course spoken interface now I'm intentionally pumping up the font here in this presentation because spoken interface is a major new feature it's a significant undertaking for us and it eclipses several of the features that are already on here in some cases they're going to superset functionality and and we're going to be restructuring some things for its release so what is spoken interface well it's screen access software for Mac OS 10 sometimes screen access software fact more often than not it's referred to as screen reader software and screen reader software is basically software that makes your computer helps your computer talk to you provide information about what's going on on the screen provide information as a result of your user actions it gives you the ability to control your environment just with your keyboard and it basically makes it so you can use use your computer most importantly without a monitor but also without a mouse potentially so one thing it's important to note is spoken interface gotta name this week and that name is voiceover if you go to our website and look at the I think it's the preview button under Mac os10 to see with a preview of tiger you're going to see a whole bunch of features that we're adding for Tiger and very prominently displayed quite proud I am of voiceover six icons down so you can read all about it there's an accessibility website I'll reference it at the end so I beg your forgiveness if we're going to probably a lot this morning say spoken interface or sometimes even screen reader or screen access and sometimes voiceover and so just assume they all equate they're all the same thing so who are our target target users for voiceover well clearly our target users are individual to our blind individuals with low vision and quite frankly individuals with other disabilities a lot of times screen reader software adapts itself well to various other disabilities but this is an interesting piece of software it's interesting for us as authors of of an accessibility solution and sometimes perhaps interesting to you who are creating applications we're typically users of our own applications most of us are you know if in Apple's case we're creating mail we use mail every day for creating ichat we use ichat every day if we create a developer tools same thing we use our application but this is a case for some of us on the engineering team won't use this every day to accomplish our daily work we can't live and breathe it and feel it and so it deserves a closer look who is the customer of this product and so we we thought it wise to take a closer look and when you look closely clearly individuals who have a very tangible need to use this product blind individuals so I have a couple of pictures here some students in school maybe these are adults working in a professional environment too but it's more than just individuals it's individuals and their peers right so for every student in a school who who's blind or has low vision that's student he or she has the 20 or 30 peers who are cited who they want to work with they want to collaborate with and that's part of learning experience and the same thing is true of coworkers how many of us work in a vacuum by ourselves without contacting or talking with anybody and this is also true of parents and teachers or bosses or employees so the bottom line is is our target user for this is everybody and it's it's relationship based people don't just work in a vacuum and this is especially important for screen reader software because feedback that we've gotten and also intuition that we've also derived as we've been solving this problem is screen readers are really hard to figure out if you're cited it's hard to figure out what's happening on somebody who's using a screen reader system it's just difficult and so we're trying to build the concept of collaboration into this product and so I present some design goals to you hear some user design goals first one is collaboration so along the way you're going to notice that we're going to promote and talk about the concept of building a product that all of us can use both sided and non cited so that we can collaborate obviously we want to satisfy all the main criteria of good screen reader software quick orientation unrestricted navigation make a pleasant environment for the user and then for the system smokin interface voiceover fully integrated into Mac OS 10 now this is really important from a technical perspective it's important for all sorts of reasons but what it's the biggest thing that it does is it allows us to make it available to every aspect of the system experience so not just after the users logged in running your applications or our applications but during the install experience during the first time they run their mac and they're going through the experience of setting up their computer it needs to be there at every step of the way and so we that's just a big piece of this so also we're leveraging is the existing accessibility API is I'm going to go into the basics of that in just a second and it has to be really fast so the last thing we want to do is implement a solution that slows down your applications if the user wants to use voiceover with your application your application should be just as snappy as it ever was and that's always been a goal of the acceptability api's if you go into those sessions in past years and that's also a goal of spoken interface to not be intrusive now what this the sum of this is we want to deliver the Mac experience for users of a screen reader we don't just want to make the system talk we don't just want to do the bare the bare essentials we want to make this an incredible experience for everybody who might be using this affected by it making a purchasing decision based on this really really really really important that this is an apple quality product so spoken interface voiceover built-in to Mac os10 if you go to your universal access preferences panel you'll see a way that turn it on you'll be able to adjust settings in there change some of the voices adjust pitch rate pitch of the voice rates of the voice various preferences options we also take advantage of existing keyboard shortcuts so we don't invent things new that are already invented there are keyboard shortcuts that are part of full keyboard navigation in Mac OS 10 that have been around for a couple of releases and we're just going to leverage those now speaking of the keyboard those who view screen reader software know how how important the cable it is I guess that's an understatement and so it deserves a little bit of a discussion when you're using voiceover you're going to spend a lot of time using the keyboard and you're going to spend a lot of time using the ctrl + option keys which are used for activation in other words if you want to issue a command on your computer that voiceover will interpret you'd hold the ctrl + option key down and then do something and then there are keys designated for orientation tell me where I am in my environment what's on the screen how many apps are running right and then there's also navigation I want to move around using using get getting to every possible thing that might be on the screen now a couple of things about this number one is well several things so first is there are lots of keyboard combinations to Bruce commands in a screen reader this one is no exception to help improve the learning experience for somebody who's coming to grips with this product to get to know it we provide two main features we provide a smart menu which is audible you basically using spoke and interface you're moving around you I have no idea what to do at this point what do I do so you hit one memorable key combination control option f5 and you you're presented with an audible menu and it will be context-sensitive it will have only the things in it that you could do at that given point in time so if you're in a text field there are lots of things you can do in a text field because you can select tech and that you can it's a very it's a more complicated element but if you're on top of a button there might be only one or two things you can do you can press it might be able to read its title things like that so the smart menu helps out a lot and then of course there's help always the same same consistent way to get help you also might notice that we're rooting our modifier keys off the same Keys other screen reader products because of perhaps lower integration into the operating system itself route themselves off to several keys around the keyboard so a couple more things to mention first is we realize that the keyboard is overloaded if you design an app that has lots of keyboard combinations to find you know that already even before spoken interface comes along there Kate there are occasions where keyboard combinations which Apple choose is sometimes conflicted that ship in your application spoke an interface again add to that so we're designing some techniques to allow the user to work around that effectively no to specify when am I going to issue a voiceover command what am I going to issue a command that might want to go directly to your application so we're solving that problem and the other big piece of feedback that we've gotten is screen reader software is not terribly well designed typically for notebook keyboards because of the amount of keys that you want to use sometimes they take advantage of the number number pad or some of the keys that are hard to reach on a notebook keyboard so we're also designing this for a notebook keyboard we're using this as the least common denominator so that we don't come up with an environment that once you go mobile is really difficult to use okay so that's the keyboard now to talk about a screen reader we also have to talk about navigation because we need to provide a way to get around the environment that even the mouse and the keyboard can't get to so when we navigate especially sighted users when they navigate all of us take advantage of two main things the keyboard cursor and the mouse cursor and they're both very tangible if we're cited we can see them if we're not relying on our site spoken interface voiceover provides audible feedback as to where those things are if we want it but there's more than that because as sighted users we take advantage of our eyes right we have the ability to glance look around our screen and if you if you're only feedback is sound and all you're listening to is where's the mouth or where's the cursor you don't have the ability to look at the time or to read an ichat that just came in while you happen to be typing an email message and we want to solve that problem so as part of voiceover we're introducing a new cursor which is the voice-over cursor and the voice-over cursor is separate and distinct from the other two and its job is to allow you to get to everything in the screen so here I've got a picture of voiceover cursor moving over a user interface and it's moving from button to button now the voice-over cursor of course isn't just visual or it wouldn't be as much use could you turn on sound for at the presentation machine please try it again okay so when the voice-over cursor moves over things it also tells you where it is comedy colors button see that last two texts now here's a case where the voice-over cursor moved to an item which you can't get to it with any other means using keyboard navigation or mouth because it's just static text it's the blob of pixels sitting on the screen somewhere so they're not unattainable so the voice-over cursors goal is to get to everything so in this case it got to what appears to me based on my boot money audible feedback it appears to be a prompt and Mail that tells me what might be coming next to text and now I'm on top of the text field so before it told me it was text kind of told me it was a static thing I couldn't edit it but it's text and that it told me what the text field which means is editable now what this does is it loves me build a mental picture in my mind of my user interface and navigate to every aspect of my interface not just the things that full keyboard navigation can get me too so it helps me learn and discover so this concept gets a little heady so the best way to talk about this is to introduce Rick's fabric on stage to give you a demonstration of voiceover so Rick thank you Eric good morning everybody as Eric mentioned my name is Rick fabric and I'm an engineer on the spoken interface team the voiceover King and for the next 10 or 15 minutes I will be going over the general usage of the spoken interface so that you can use it as a tool to test a level of accessibility in your applications now before I start there's two things that I want you to know the first is that throughout the demo I will not be using the mouse in fact I'm going to unplug it here's the mouse everything I'm going to be doing will be through the keyboard only the second thing is that i am going to be going i'm going to be using a lot of voiceover command so to save time i'm not going to be telling you what the actual key strokes are but Eric 1 over a couple of them and you can find out what the rest of them are through documentation alright so orientation one of the features Eric mentioned that screen readers need to provide is an easy way for users to get oriented with the state of their system and I'm going to go over some of that right now now you may be able to see the screen and notice that it's blank and that's intentional a great percentage of the spoken interface users are going to be blind so I want to give you a better sense of how they're going to be using your applications with the spoken interface what I'm using here is a test tool that we call the screen curtain and all it does is it dims the screen so that you won't get any more information than your users will that gives you a better chance of finding holes in your accessibility all right so let's try to as an example let's say a user who's blind just sits down in front of the computer they can't see the screen and they need to find out what's going on where they are on the system so it's a few voiceover commands they can get some useful information so let's try that with one command we get this to expect to find running applications so text edit is active and there are five running applications with another command to dwindle accessibility developer the active window is accessibility development and with another command we get this text editor house keys were so impressed a text editor has keyboard focus so a three commands i found out that i'm editing a text edit document called accessibility development all right so I've gotten to the point where it's really difficult to follow along if you're cited so what I'm going to do is I'm going to bring up the screen curtain see if you can see the screen you can see you can tell it'll be easier for you to follow along just sleep on screen version all right now as Eric mentioned before we have the voice-over cursor so I'm going to bring that up and make it easier for you to find out where I am sure you finder all right so if you can see the screen you can tell that i am focused on the first word in this document now i can move the voice-over cursor either character by character line by line where by word sentence by sentence paragraph by paragraph so i'm going to show you here is moving word by word accessibility just fine thank you No okay done speed now character by character counter space ph.d now what I want you to notice is when I move over to the letter M the pitch of the voice will increase and what that does is it lets you know that that letter is capitalized so you don't need to be able to see the character to know that you have a capital letter so control options lock the control option welcome people ignore that control option mugdha freedom please see okay let me do a couple more letters please okay it's just really a feature that you may find useful as you're going along and you're getting used to the voices is to be able to speed up the rate of speech once you get used to it they start to feel like they're too slow so let me with another command you can speed up the rate of speech faster faster faster faster faster better and let me give you an example of what that would sound like basically just like specific locations do something 34 injury okay yeah so that may be unintelligible to most of us but for users who are used to screen readers they typically do have the rate of speech of that high now one of the features that I was showing you here is to be able to read the entire document so if one command you can just have it start reading everything alright so that is let's say the user now wants to add some information of this document so what I'm going to do is move the insertion point to the bottom and I'm going to use the standard arrow keys now there's two things I want you to know here when I'm doing this as the insertion point is moving from line to line voiceover will be speaking out the text on that line now I'm not going to be waiting for it to finish the second I know that I'm not where I want to be I want to be able to just continue on so I'm going to be interrupting voiceover through this and in a couple places in the rest of the demo the second thing is that the voice-over cursor is going to still be at the top of the dock so it's important to make the distinction that that is separate from the insertion point as Eric mentioned before so let me move down I wish you was coming very friendly no well maybe I'll decrease the rate of speech so that we can understand it's saying available to buy an external assistance system that allows you to the protocol ok you use lime so now I'm just going to start entering text ppl space now as you notice as I'm typing hit each key voiceover will tell you what the letter is being displayed now that can be useful but if you're just typing along that can get up too much information so what I'm going to do is turn on a feature that we call word echo and instead of hearing each key each letter you hear each word and you believed were deco mode and let me put some more information in here computer is a seven Francisco period alright so now let's say the user really wants that name San Francisco to stand out so i'm going to say i'm going to make it bold to do that i'm going to go up to the menu bar and i'm going to use the standard full keyboard navigation key command ctrl f to menu bar on 20 good stuff mu what's new here is that you get the audible feedback now I can aro around the menus to extend it with file with submenu and what's new and tiger if I know that there is a menu in this case let's say format I can just start typing format and it will jump me directly to that menu so our mess with submenu ok so let me go into the menu for met Matthew fun with submenu I know this is a submenu so I'm going to go into a fun ma'am you don't come out and be bold command be so I'm going to select that oh I should have selected text first so internet from seven there we go hard oh I just that right so and apparently that isn't standing out quite enough so I'm going to need to add some color to make it more lively so I'm going to bring up this color panel with a standard key combination command shift see true colors I can move keyboard focus to that panel with Santa key combination control f6 window colors onto button voiceover will announce the window that you moved to and the item at you move on to and now i'm going to move the voice-over cursor to the crayon color picker color wheel of color sliders color palettes image pallets coming on button and select it press crowing on button alright and opens a box of crayons now well the color panel is actually in my way I can't see my is my text that I want to change so i can ask voiceover to move the window now keep in mind this is without the mouth moving window step right step right step up step step step right okay and now I can move down and select the color that I want to change the texture stop moving window Murray strawberry combination with strawberry breath strawberry okay I like strawberry alright so there we go that is reading text and editing text so now let's say the user needs to check their email so what I'm going to do is move to the mail application and I'm going to use the doc to do that I'm going to use a standard key combination ctrl f3 finder running application again which new here is the audible feedback I'm going to aro around some mail system preferences Safari terminal after extended male running application and select it with the safe our mail application window draft three graphs alright so voiceover announces the application and the name of the window so I can navigate around hero among the controls whether they're disabled or not reply this results button doing discrete bells button and that's important because even though I can't interact with that button right now I need to know where it is so that when I do need to interact with it I can go to it I can move down to static text like Eric show three messages dicks alright so now the user needs to check their email so what I'm going to do is I need to go into this table select an email move out down and into the the mail the body of the mail now keep in mind for those who can see all that requires as I move the mouse click on the list bland stay on the start reading I want to read the next email I move the mouse a little click Blanche down and read this is what the default voice over behavior would require the user to do control option luck enabled in control option locked disabled people in two people on Row one column status call select selected for custom keyboard on table out of tivo splitter screw all area into squirrel area on to text entry area text entry area and now i can ask both an interface to read that email Eric I'm going to need three months off ok Rick so this is a good example of where making your applications accessible is a lot more than just providing strings for the UI you're going to need to identify areas in your application where it's much more difficult or somebody using the spoken interface to do something very simple like check your email and eric is going to be asking you and telling you somewhat how to do this when you comes back on and basically in this case mail has a situation where they have to UI elements that are linked together in some way and by some meaning that your application defines but it's not you can't get to it directly through voiceover so voiceover and accessibility api's provide you a way to just stipulate you know link these two elements together alright and the last thing that I want to show you is we provide a list of elements so that you can easily go to one place or another on the screen so let's say for instance you know that you have an item on the screen in this case yet male and you want to go directly to it you can bring up a list with a voiceover command building harmless item list memnu 36-item so there are 46 items on this window and all I need to do is start typing some portion of that item so I'm just going to start typing mail and see where that takes me the middle function that takes me the mailboxes so I want to go to get mail go to minimal go to minimal button and the voice-over cursor moves directly to it then I can start interacting with it okay that's pretty much all of the features that I wanted to show you today but there are many more so I urge you please use voiceover to test the level of accessibility in your applications so that it's as easy to use for everybody and not just those who can see and with that I'd like to ask eric schemer to come back on thank you very much okay so of all the things that Ric showed the most important thing that he showed for many of you is the screen curtain and that is turn that screen curtain on and try to figure out if you can use your application that's probably the most effective testing tool you can do because if you can't use your application and you knew you know it your code in it then a user who's not relying on it on the visual display won't be able to use it so screen curtain very important voiceover itself is a testing tool effectively so let's keep going so we've given you an overview of voiceover apple's new spoke and interface now i'm going to talk about accessibility to api basics so to do that I'm going to frame this within the context voiceover so applications are out there running on the system some of those applications are built by Apple many of them hopefully more of them are built by you guys and those applications actually voiceover is this process that's also sitting out there on the system and its job is to listen to your applications and sometimes request things of your application and produce feedback for a user so voiceover does this by sitting on top of a set of spoken widgets so just like carbon and Coco have widgets that are very graphically based and very mal space perhaps sometimes keyboard based these widgets foundation are based on spoken feedback and keyboard input and these widgets are based on top of the accessibility API notably attribute of things in your interface actions excuse me and notifications now what this means is it's really important that your applications give accessibility clients like voiceover the information they need to make the end user successful using your application so that's what we're going to talk about here and then there's a whole nother session tomorrow which goes into much greater detail session for 24 I'll reference I'll plug it several times today don't worry so one of the questions that comes up immediately as well we write our application in cocoa or we write it in carbon and how do you know the difference and how do you make heads or tails of our view hierarchy you know it's there are two completely different programming models for the most part and the beauty of this is the accessibility API is abstract out a way for us and they provide you a way to speak to us or in any other accessibility client in a common language so everything in your application is a UI element and literally when I say everything I mean everything so windows r UI elements things inside windows or UI elements buttons text fields pop-ups what-have-you things within things in your in your window our UI elements so you could have a scroll area which has children and it's children might have children so there is ancestry there's a concept of ancestry to your UI elements in fact your application is a UI element and so what does this really mean for us well let's take a closer look at at the three main pieces of accessibility attributes actions and notifications so attributes this is really the most important thing and attributes are tell an accessibility client how to gain how to figure out the personality of your application how to know how to represent it and so the most important attribute of all is the role attribute every widget has a role so for example this button that I have circled here in mail this is a button and therefore its role is an ax button now you don't have to make that up yourself most of the time most of the time the stuff that I'm talking about here if you're using cocoa cocoa or carbon you're not doing a lot of custom stuff I'll touch on that later you're going to get for free because this stuff is knitted into the framework so you use all the standard widgets you're going to get standard behavior so you're going to the fact that it's a button just happens to echo itself to us automatically but we see that it's a button and then we know which spoken widget to plug into place to represent that thing okay and so it gets its personality from its identification its hierarchy from attributes we ask your application questions through an accessibility API and we say give me the attribute for your role then we load up some code and then that code turns around if there's okay now give me I know this is a button so give me your title and give me your description to provide the user with some more context and give me your coordinates so that I can draw the the voice-over cursor in the right location so this is how we glean information about about a tree or elements in your applications and sometimes we ask for the application application UI element what's your title right so those are attributes now actions are how we request things to occur so occasionally you might have noticed in the demo that Rick moved around that color panel and was pressing buttons in that color panel and Rick was pressing buttons with the voice-over cursor not full keyboard navigation in most cases so the voice-over cursor has the ability to accomplish actions in your application now the key thing is to not think that actions are so complicated actions are not like options and actions an applescript very high level print this document say that move this to hear actions in accessibility are very simple gestures press a button cancel confirm in fact these are they this is it right here there are no more actions than this defined in accessibility so it's a pretty simple set to work with and again you're going to get a lot of this for free if you're using a standard frameworks and then finally there are notifications now notifications are where its this is really important to an accessibility client it's also probably something that you're going to deal with the least but it's really really critical so when I say deal with it the least notifications are again are knitted into the frameworks and critical for operation of excessive an accessibility client but you're going to get some of this behavior for free a lot of the notifications that we depend on our applicant application provided which means even if you're a fairly custom application at the application level we're going to get all the notifications that we need so this is a more advanced topic this is one where I really really want you to go to session 420 for tomorrow at 1045 I think in the same room so that's notifications so the basics of accessibility attributes actor actions notifications standard behavior out of the box typically with carbon and cocoa so now we come to how do you make your application a really great application and of course absent flash to it how do you make the five star application an application that to a user who's not relying on the graph of user interface how do you make that it's something that that user can appreciate and really enjoy and make that user want to use a Macintosh and want to purchase your application so number one is all the basics need to work so all the things that I just talked about and so if you were to build a basic application again using some of our stereo tools the basics are going to work nine times out of ten there might be a few details that you might want to do depending on the way that you've designed your application but in a bare minimum you want to be able to get to everything using voiceover so the voice-over cursor needs to move to all the things that are controllable things in your application or readable things in your application and it needs to support the basic accessibility API attributes then this is where only you can help provide the user with information about your application so there are is a concept of description now the best way to show this is really to go right to an example so let me just just the basics of descriptions are documented ax kax description attribute is a new attribute that's defined and the accessibility frameworks and there are some rules associated with is no punctuation lowercase I'll save that for your future perusal but the example is really where the rubber meets the road so if I'm in finder and I've got a toolbar there might be an item on that toolbar that has no label no title so if I have vision I can look at that and discern that that symbolic left arrow probably means go back go to the previous thing common metaphor on a computer but this is all that can be gleaned by an accessibility clamp voiceover button let me do that one more time okay not very useful close your eyes and listen to that you're like okay which one how do I don't know which one I don't know what do I do next right so what you really need to do back to previous container is add a little context and only you know that context the accessibility api's can't make that up on the fly and so we ask that you add in certain places especially items in your app in your user interface which don't have title representation or which have some sort of symbolic representation we ask that you provide a little bit more context so that voiceover can echo that information here's another example just okay we know that this is a list but that doesn't tell us very much as a user what we really want to hear is missed okay sidebar well that's meaningful to me because I'm a finder user and I know the finder is a sidebar and that's where I put my stuff okay that's how I get the things so it has context now just a note there is a way to create good and bad descriptions when you're labeling some of user interface the way to create a bad description is to go overboard to add too much information so it turns out that the accessibility API is know about every which is in the interface generally speaking especially if you're using standard widgets and those have attributes that are role descriptions which can tell spoke and interface the word button or the word list or the word menu item or what have you we already know that information and so don't add that information to your description it will be redundant only add the piece that identifies our differentiates the actual functionality of that particular widget so here's an example of adding too much information back to previous container you add the word button to the end we're going to a co it twice because we don't know we have to assume that your intention for that description was clean and contained only what i needed to here's another bad ignition I thought I missed it ok so not too much in the description so that's description that for labeling an element that has a symbolic representation and doesn't have a visual title now there's another type of element which is source similar to this and other type of attribute and that's sometimes in your user interface there are things that have labels you label them you drag amount of interface builder you've set up your little static text to be a prompt but the problem is is sometimes that prompt is above sometimes it's below sometimes less sometimes just to the right sometimes it itself is a symbol ok now as a sighted person I could look at that and figure out through the context and layout and all the all the visual cues what that means but if I don't have that information I don't know what I don't know what it's representing and so there's a way to associate two elements so that one element can serve as the title of another and this is done through the title UI element attribute and we'll show you a way to do this later so this is really really important so if you've got things that service prompts it's a nice it's more than nice it's a somewhat of a required feature from a from a user of a voiceover a voiceover to want to know when I land on that text field look at that prompt and tell me what text field that texels name is alright and then finally we get to link UI elements so in the demo that Rick gave he showed male and male if your users of mail on Apple's mail client there's a table and they're a bunch of messages and lots of times if you're like me you've got three or four thousand messages in there and then you've got your text and what do we do every day when we read mail we glanced up and down right we glanced at this election we select it we glanced down we read glance up and so those two things are really tightly coupled but from a UI element perspective there's no way for us to know that they're tightly coupled there's no way for voiceover to figure that out on its own and so you've got to give us that little hint and so there's this concept of a link UI element attribute the ability for you to just in your interface thing I want this thing to link to this thing and then voiceover can make that a one keystroke thing for an end user the user can then move the voice-over cursor to from their mail items from subject line down to their mail message read it linkback select another and they can just move back and forth effectively glancing back and forth using the voice-over cursor this perhaps is this is one of the most important things you could do to your application to make it usable so anytime you think you notice yourself if you're cited you notice yourself glancing between two major pieces of functionality and it's more than just going from one button to another think you might need a link UI element the fifth thing really has nothing to do with the accessibility api's but it's unbelievably important and that's full keyboard navigation so like Rick did for his demonstration unplug your mouth and see if you can drive your application and if you can then you're successful but if you can't that makes it that much harder for a user who has limited you or no use of a mouse to use your application and it requires using the voice-over cursor to get to some of those elements just the best possible environment is if every aspect of your application is it can be accomplished with full keyboard navigation now one one question that always comes up is well I have this drag gesture and that's how I do things it's a drag gesture how do i what do I do about that so the best example that I like to talk about with that is finder so in finder we typically copy files by dragging them from one place to another but in finder you can also cut and paste files effectively using the menu commands and that serves the same purpose it will select a file copy from the menu move to a new location paste accomplishes the same task so that's a perfectly acceptable alternative to accomplish the same goal and it's totally doable by the keyboard so I would encourage you to do that to parts of your application that only have keyboard gestures or excuse me drag gestures so we get to the end of this list we do the basics and then we provide a few things to add context and then we make sure that we've got full keyboard navigation and so we have success right so one of the questions that i get i get internally and a few times that have had exposure externally to folks who are accessorizing their applications is how hard is it's going to be for us to do it looks really easy when you present it like this but how hard it is in reality and so the best way to answer that is real simple answer it depends it depends on what your application is and the real answer is going to come when you go to session 420 for tomorrow but my answer is always if if you have a fairly modern ly written Coco application or an HIV you based carbon application you're going to be in pretty good shape the frameworks are have had several releases of iteration and you're going to be in pretty good shape things are going to happen automatically for you but if you have a lot of custom views in cocoa or you even have your own type of you you've done some very very custom thing or you've got some legacy code either carbon or cocoa and you haven't taken the opportunity yet to bring it up to date to current techniques for accomplishing the same thing now might be the time to do that because that's going to be a bigger challenge so perhaps adding accessibility to your applications and getting into a new market of users might be a catalyst for perhaps bringing some of your older code into some of the new approaches that that are used today okay so talk about smokin interface talked about the basics talked about some things you can do to add context now we're going to talk about some tools this is actually really short so the first tool is accessibility verifier so one of the things you can do is launch your application bring up all the windows that you want to test or all the all the interface elements that you want to you test and then you can point this application accessibility verifier right at your application and have it give you a report on what might be wrong with it it'll give you warnings and errors it'll let you filter them down tell you the critical ones or even a full comprehensive report of even even small nuances that it notice might be wrong so there's this tool there's also accessibility inspector now some of you may notice by looking at the screen that accessibility inspector looks an awful lot like UI elements inspector and that's true so and this is important we for the first time on Tiger are shipping accessibility tools as a portion of the developer tools release so if you look at your tools seed you're going to notice that down in developer applications utilities there's an accessibility tools folder now and to takeaway point here for me this is really important for me and a win for for the accessibility teams at Apple accessibility is just as important as performance tools as graphics tools as everything else that you do in your in your world and so these are now shipping supported products so we've basically rebranded so to speak you I limped inspector to accessibility inspector and we'll improve it over time so that's and for those of you who have not seen this tool in the past this basically lets you look at a particular elements in your application and get every detail about it and even do actions and things on it and you're going to see a demo of that in just a second we've also added interface builder support to interface builder for accessibility so some of the things that I showed you that you can do to make your apps even better that you don't get for free interface builder now for tiger will provide a way to accomplish and then finally like I've already said the most important tool is voiceover and the screen curtain use this to test your application this is where the rubber meets the road if you don't do it first somebody will a school teacher will an employer will a government agency will it's really really important that this new interface that's part of aqua if you will is something somebody's going to look at your application with and you want to make sure that your application behaves and works well using this interface so with that I'd like to invite erin Haney on stage to give you demonstration of some of these tools thanks Eric so what I'm going to go over here is just a quick example what I have is a small hello world style app and I'm going to take a look at it with the accessibility tools just to show you the procedure for checking out your application and seeing where it stands in terms of accessibility so just to start off with list it's build and run the app and you actually saw this in the screenshot when Eric was going to the slides a moment ago all it is is a little hello world application with a place for the user enter their name and a nice ok button to click so the first thing you want to do is take a look at this application using accessibility verifier and as Eric mentioned there's a new folder inside developer applications utilities called accessibility tools and that's where you'll find accessibility verifier when you launch it you get a blank window like this with an application may pop up and from that application possible you want to select I apologize for the small font you want to select your application as it's running this is runtime checking and the first thing is does is give you a tree of all the UI elements you can see here that are currently instantiated in your application now if you've got several dialogues in your application that are not currently open they're not going to show up here this is just what's currently open and there are several tests you can run so you click the cheek you choose test button up here and each one of them has a little explanation you can turn them on and off they're all on by default and we recommend that you run them all and then when you click verify it actually performs the test and now that it's done you can see you get a list of warning it's very comprehensive so you may get a lot of morning so what we have here is a filter to look at just a critical one and you'll notice that some of these are highlighted like links so when you click on it actually jumps to the point in your hierarchy where the error is it I'm going to focus on this one where it says title and we have no x description attribute and what that refers to is when I click on it a button inside the window accessibility demo it says there's no description and no title well now that I know where it is i'd like to go take a look at it in more detail so i'm going to launch accessibility inspector and let's bump up the font just a little bit so that people can see it now this is a lot like pixie it just follows wherever you got the mouse so let's see there's only one button in my window so I know which one it is but you can use this quickly to look at it and you can see in the list of attributes down there that there's no description and no title and this means that an accessibility application is going to not know what to say or how to describe this UI element when it comes to it now just to quickly demo a few other features of accessible in the inspector there is a hot key to lock the view just like in 6c when it turns red like that now I can move the mouse around and it's not following it unfortunately there's a hotkey conflict but if you just click somewhere it goes away and it also adds this extra palette when you've got an in lockview you can take a look in more detail in any of the elements there's also a small menu that lets you go to the window container and let me turn on the highlight now you can see what's currently focused in accessibility inspectors it's highlighted in red and I can navigate down to one of the buttons let me just turn off the lock real quick and go back to that button now you can see it highlighted and if there are any actions or any settable attributes you can actually control them here inside july element inspector or as it's now called accessibility inspector and this gives you a lot of power when it comes to debugging so now I want to fix some of these errors that I found so let's go back to Xcode and open the need of an interface builder and now I'll show you the accessibility features that have been added to interface builder so if you just go to the get info panel you'll see that there's a new item here in the pop-up accessibility and now as Eric mentioned you can link two elements together so that lets say the the first name field obviously it's going to have a title first name now you don't want to enter that same text in two different places what you want to do is link them together so that the edit field gets its name from this static text field so you control click and drag then select tiled UI element and click connect and now from then on accessibility will know that this edit field is getting its name from the static text right next to it that I've linked up lets link the other one up and do the same thing let's get together as a title element if you also wanted to have a link UI elements such as the example in mail where you have items and a listview linking two items in the window below you can also hook that up here and lastly for this button which is an you know a fairly common occurrence where you have an image button it's got no description and no title let's type in a description for it and as Eric mentioned we don't want to include the word button in the description it's just okay we don't want to say ok button because then we'll get ok button button now I have to mention that this support in interface builder unfortunately we found some last-minute problems with it so the version that's on the DVD we do not recommend that you use it it's just to show you the direction that we're moving in we're hoping to have those problems fixed as soon as possible so we apologize for that so if the test that i'm just going to use run interface to the test interface feature in interface builder so for the last part of this i'm going to turn on spoken user interface or voiceover as well now the face is an active risk interface builder application window accessibility tunnel onto first name and it takes a few and now you can see it's picking up the name to the text edit field let me just go down to the next one so you can hear it nice me it takes a few and from now on if i go into interface builder and change the string and the static text field next to it will automatically get picked up okay and now the description that I've added is also ventolin hook it up and that's it it's that easy i accessorize my app and so now I'm going to turn it back over to Eric thank you okay so we've covered all the things I wanted to cover hopefully you have a good grasp of what voiceover is all about and some basics of accessibility and how you can provide context in your application and we've shown you some tools now there's a place you can get more information there's documentation online also on our website if you if you're curious a good place to go is actually dive down into where the header files exist for accessibility because if you're going to accessorize your applications these are things that you know this is the real deal that's where the information is a little bit more information human interface guidelines software design guidelines and then I can't stress enough down here at the bottom tomorrow 1045 in this room developing accessible applications it's going to go in depth into how to develop successful applications so a few people to contact I'm going to invite travis brown on stage tech travis is a technology evangelist for Apple has a lot to do with accessibility some of you may already know as well Mary Beth Jane's assistive technology partnership manager and Mike shamanic who is product marketing manager and for among other things voiceover so with that I'd like to ask Travis to come up on stage I'm going to have Travis moderate some questions