-
Notifications
You must be signed in to change notification settings - Fork 37
Cawbird accessibility #143
Comments
Thanks, I'd seen a couple of comments on Twitter about accessibility, but I'd never managed to get a response from people about what screen reader they were using and what their problem was (what wasn't reading, what parts of the UI were hard to access, or whatever) A list of tasks is now further down the thread |
Hey: I'm one of those people. Apologies, I missed your message asking me about the screen reader thing. Sorry about that. I'm glad you liked my feedback. The only screen reader there is for the GUI on Linux is gnome-Orca. So that's all blind Linux users will be using, unless something changes. |
Just installed Orca and checking some of this now. I think my first step is going to be working out what it is and isn't reading, and why! It appears to read in the order that the GTK Inspector shows the widgets (so RT labels are listed first and read first) but it doesn't appear to be consistent in what it reads. So far I've found:
And a quick guess is that the tweets aren't being read because they're in a potentially scrollable widget, which is necessary to fix wide tweets forcing the app to go too wide (d98f390) If there's any other specific things to fix then please tell me. [Edit] I'm also looking at Accerciser to see what it can help me understand. I like GTK's debug tools 🙂 |
I've been trying to work out what Orca is doing with some of these widgets and why it is or isn't reading things. And it isn't clear. I've tried to add accessible descriptions to some icons (such as the "Retweet" icon) but haven't yet made Orca read one. Everything looks okay in Accerciser, though. Except the order it reads it. Which looked like it was reading it in the order that the GTK Inspector showed. Which is the inverse of how they're added. But then I reordered them and it didn't fix it. And sometimes it was reading one of the early bits (like the author's handle) first. Someone somewhere knows how this works, but it isn't me and I've not yet worked it out! Keeping at it, though. |
Making the ATK object be the child's ATK object for the scroller means we get tweets read properly by screen reader *and* get horizontal scroll per tweet if someone posts long, unbreakeable text. Debugging this was odd and was getting REALLY inconsistent reading behaviour before this change.
It's a tiny thing so far, and there's already several other things that I know needs doing, but that new branch at least makes Cawbird read tweets properly! Sorry it was so badly broken for so long without me realising. Now to get the accessible descriptions working… |
Before they were push-buttons and that reads as "<username> push button". We already use links for RT lines, so we're now consistent and without accessibility noise. The link is still in the tab order, though, so it can still be accessed with keyboard navigation.
"1m" as a short-hand for "1 minutes ago" makes sense when you've got positional context and people recognise it from Twitter but screen readers benefit from the long-form "x minutes ago".
Screen readers will now read "Home timeline list with X items" instead of just "List with X items". This should give better context. Still to do the search list because it's… odd
Quick question on "best" accessibility behaviour: On the search page, when you hit "Enter" to run the search, is it best for the search results to grab focus when the search completes or is it okay to just press "down" to get to the results? I'm just trying to work out how you'd indicate that there are now results available after the search is run! |
* Separated user and tweet results * Added titles to user and tweet result lists Also: * Don't drop users when loading more * Remove "Load More" when we run out of more to load * Only add RT filter to tweet search
And another thought/question: How accessible is the "right-click to display RT/Like/Quote/etc buttons" behaviour? |
We can now use up/down to move through the main tweet to the tweets up and down the thread. Still need to fix "moving up without having scrolled first moves to hidden tweets in MaxSizeContainer".
The max sized container now expands for keyboard events!
And another thought/question: Is it better to have things like people's names as push buttons or links? Having it read "IBBoard push button at ibboard 17 minutes ago blah blah blah… Professor Brian Cox push button at Prof Brian Cox 20 minutes ago…" seems like a lot of unnecessary "push button", but then I've realised that it might be less obvious that it's clickable to go to the profile. Being a link then it's still in the tab order, though. And it's not like "push button" tells you what it actually does. |
Also added a better placeholder text for user search, although it doesn't appear to get read out
Also refactored out and used "get last visible" function for getting to end of lists. Vadjust is still wrong, but could be worse. At least movement works.
Previously the button was in the middle of the row, which is a small target and not in-line with "click row to view user details"
The search page now scrolls properly with the keyboard
When expanding all user searches, the "Load More" is there but hidden. As we didn't set 'i' then the first get got an invisible row and then the loop decremented from 0 to get -1, which is a null object.
And another thought/question: With keyboard navigation, is the expectation that if "down" works then "up" always works? Because currently things like pressing "Down" from the nav bar to the "Lists" view takes you to the list, but "up" gets stuck at the top of the list and won't go back. And as a follow-up: If it is expected, should it take you back to the relevant button above (like going from a page to its tab)? So "up" from the lists goes to the "Lists" button in the nav, and "up" on the followers list on the profile page takes you to the followers button? |
The list page uses its own widget, so needs a different approach. To do that, we also needed to generalise a parameter in a util method. Navigating up from lists still won't break out of the top list and go to the buttons above.
Tasks:
Things I can't get working at the moment or need to investigate more:
And things that can be handled separately from this ticket:
Please add anything I missed. |
We can't grab_focus() with an invisble item, so check a visible item exists instead of counting children
We rely on an icon to show it, but setting a description lets it work for multi-lingual screen reading
* Separated user and tweet results * Added titles to user and tweet result lists Also: * Don't drop users when loading more * Remove "Load More" when we run out of more to load * Only add RT filter to tweet search
We can now use up/down to move through the main tweet to the tweets up and down the thread. Still need to fix "moving up without having scrolled first moves to hidden tweets in MaxSizeContainer".
The max sized container now expands for keyboard events!
Also added a better placeholder text for user search, although it doesn't appear to get read out
Also refactored out and used "get last visible" function for getting to end of lists. Vadjust is still wrong, but could be worse. At least movement works.
Previously the button was in the middle of the row, which is a small target and not in-line with "click row to view user details"
The search page now scrolls properly with the keyboard
When expanding all user searches, the "Load More" is there but hidden. As we didn't set 'i' then the first get got an invisible row and then the loop decremented from 0 to get -1, which is a null object.
The list page uses its own widget, so needs a different approach. To do that, we also needed to generalise a parameter in a util method. Navigating up from lists still won't break out of the top list and go to the buttons above.
We can't grab_focus() with an invisble item, so check a visible item exists instead of counting children
We rely on an icon to show it, but setting a description lets it work for multi-lingual screen reading
We previously made assumptions about visibility. Now we find the first visible child, or have a non-null fallback.
Before the focus stayed where it was so a) right-click was silent about the actions appearing, b) tab might not take you to the first button and c) cancelling out seemed to select just the name, so you had no context.
Also swapped from a toggle button because we're not really toggling anything (unlike RT and Like)
Because we're swapping a stack, we can't rely on the first item being the descriptive one
Previously it only read the bold text, so there was no indication of follower count etc. The English text is written to be more clear and less of a direct retype of what's on the buttons.
These won't get read out in normal reading, but will get read as "Retweet icon" when using "read under mouse" behaviour. Hopefully this is a good compromise of providing information vs speech overload.
This now reads the description, but not clear why it doesn't read the name, screen name and location before or the URL afterwards.
Because we're not reading the name etc in order, some profiles read the location as if it's part of the description. This results in Prof Brian Cox's bio being "Professor of stuff blah the Earth with everyone else"!
Can't make Orca read the the profile by default. And it might be too much reading anyway. Now trying to push focus to the tweets and rely on "read under mouse" for reading other bits of profile.
Includes making user list widget flexible so that we can supply list owner names. (Previously the code assumed it was out lists)
We don't include the "info" icon overlay because a) it won't play nicely with videos and b) the user zoomed to see the entire image so don't interfere.
Okay, I'm going to call it quits on this for now. I think we're in a much better position than we were. If anyone finds anything else that needs improving then please open a ticket and we'll look at it. We also need to keep in mind the future redesign in #177 and how that will affect things. |
I am an orca(gnome-orca) user. Cawbird needs some work in the list of tweets. Right now it only reads the name but if I use object nav(some of the time) I can read the tweet text, click on links etc.
Here are some links that might help you.
https://accessibility.linuxfoundation.org/a11yspecs/atspi/adoc/ADOC_ATSPI.html
https://accessibility.linuxfoundation.org/a11yspecs/atspi/adoc/a11y-dom-apis_20080324.html
The text was updated successfully, but these errors were encountered: