Skip to content
This repository has been archived by the owner on Jan 23, 2023. It is now read-only.

Cawbird accessibility #143

Closed
serrebi opened this issue Apr 26, 2020 · 15 comments
Closed

Cawbird accessibility #143

serrebi opened this issue Apr 26, 2020 · 15 comments
Labels
accessibility enhancement New feature or request

Comments

@serrebi
Copy link

serrebi commented Apr 26, 2020

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

@IBBoard
Copy link
Owner

IBBoard commented Apr 26, 2020

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

@IBBoard IBBoard added accessibility enhancement New feature or request labels Apr 26, 2020
@serrebi
Copy link
Author

serrebi commented Apr 26, 2020

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.

@IBBoard
Copy link
Owner

IBBoard commented Jun 20, 2020

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:

  • Most RTs read the retweeter's name, the replying to line (if it exists), the time and the retweeted accounts handle (but not the name)
  • One RT reads the the retweeted account's name as well
  • One RT just reads the retweeter's name and nothing else!

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 🙂

@IBBoard
Copy link
Owner

IBBoard commented Jun 25, 2020

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.

IBBoard added a commit that referenced this issue Jun 27, 2020
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.
@IBBoard
Copy link
Owner

IBBoard commented Jun 27, 2020

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…

IBBoard added a commit that referenced this issue Jun 27, 2020
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.
IBBoard added a commit that referenced this issue Jun 27, 2020
"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".
IBBoard added a commit that referenced this issue Jun 27, 2020
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
IBBoard added a commit that referenced this issue Jun 27, 2020
@IBBoard
Copy link
Owner

IBBoard commented Jul 8, 2020

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!

IBBoard added a commit that referenced this issue Jul 8, 2020
* 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
@IBBoard
Copy link
Owner

IBBoard commented Jul 9, 2020

And another thought/question: How accessible is the "right-click to display RT/Like/Quote/etc buttons" behaviour?

IBBoard added a commit that referenced this issue Jul 12, 2020
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".
IBBoard added a commit that referenced this issue Jul 12, 2020
The max sized container now expands for keyboard events!
@IBBoard
Copy link
Owner

IBBoard commented Jul 15, 2020

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.

IBBoard added a commit that referenced this issue Jul 15, 2020
Also added a better placeholder text for user search, although it
doesn't appear to get read out
IBBoard added a commit that referenced this issue Jul 15, 2020
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.
IBBoard added a commit that referenced this issue Jul 15, 2020
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"
IBBoard added a commit that referenced this issue Jul 20, 2020
The search page now scrolls properly with the keyboard
IBBoard added a commit that referenced this issue Jul 20, 2020
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.
@IBBoard
Copy link
Owner

IBBoard commented Jul 20, 2020

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?

IBBoard added a commit that referenced this issue Jul 20, 2020
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.
@IBBoard
Copy link
Owner

IBBoard commented Jul 21, 2020

Tasks:

  • Keyboard nav throughout app (I think it's working)
  • Fix reading of tweets
  • Read "Retweeted by" (currently shown as the "two arrows in a circle" symbol, and Orca just reads the name and handle)
  • Read the profile when first loading it (there's currently no way to read location and bio)
  • Edit "Follow" button so that it reads the current state, not just "Follow button" every time
  • Grab focus on right-click of a tweet so it's obvious that something changed when you go to do the actions (and because tab will tab from the last place clicked, not from where you just right-clicked)
  • Name "more actions" buttons (e.g. on tweet interaction)
  • Read "tweet in thread" or "reply" (little speech bubble next to the time to show it is a reply in a thread)
  • Read "rewteeted" (arrows by the time to show you retweeted it)
  • Read "liked" (heart by the time to show you liked it)

Things I can't get working at the moment or need to investigate more:

  • Fix "critical" log messages about accessible objects not being the right type
  • Moving up out of lists of Twitter lists (but Shift+Tab works)
  • Load new tweets behaviour - I think I just had it stop mid-tweet and read the new tweet as soon as it appeared. This might be because it stole focus
  • Placeholder text (e.g. when no search results are found) needs to be made accessible
  • Do we need a better way of doing the Like/RT instead of the hidden right-click interface?
  • How can we show how many characters are left when composing a tweet without getting annoying as you type - "read on mouse over" may be the best compromise
  • Orca occasionally gets confused and reads things out of order. So some tweets (normally notification timeline and profile) have been read correctly every time, but sometimes the home timeline reads the time before the names, or reads the quoted tweet before the tweet that quotes it. Clicking to other views and clicking back often (but not always) fixes it.
  • Say "quoted tweet" before reading quoted tweet (if possible/sensible)

And things that can be handled separately from this ticket:

Please add anything I missed.

IBBoard added a commit that referenced this issue Jul 21, 2020
We can't grab_focus() with an invisble item, so check a visible
item exists instead of counting children
IBBoard added a commit that referenced this issue Jul 22, 2020
We rely on an icon to show it, but setting a description
lets it work for multi-lingual screen reading
IBBoard added a commit that referenced this issue Aug 22, 2020
* 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
IBBoard added a commit that referenced this issue Aug 22, 2020
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".
IBBoard added a commit that referenced this issue Aug 22, 2020
The max sized container now expands for keyboard events!
IBBoard added a commit that referenced this issue Aug 22, 2020
Also added a better placeholder text for user search, although it
doesn't appear to get read out
IBBoard added a commit that referenced this issue Aug 22, 2020
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.
IBBoard added a commit that referenced this issue Aug 22, 2020
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"
IBBoard added a commit that referenced this issue Aug 22, 2020
The search page now scrolls properly with the keyboard
IBBoard added a commit that referenced this issue Aug 22, 2020
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.
IBBoard added a commit that referenced this issue Aug 22, 2020
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.
IBBoard added a commit that referenced this issue Aug 22, 2020
We can't grab_focus() with an invisble item, so check a visible
item exists instead of counting children
IBBoard added a commit that referenced this issue Aug 22, 2020
We rely on an icon to show it, but setting a description
lets it work for multi-lingual screen reading
IBBoard added a commit that referenced this issue Aug 22, 2020
We previously made assumptions about visibility. Now we find
the first visible child, or have a non-null fallback.
IBBoard added a commit that referenced this issue Aug 22, 2020
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.
IBBoard added a commit that referenced this issue Aug 22, 2020
Also swapped from a toggle button because we're not really
toggling anything (unlike RT and Like)
IBBoard added a commit that referenced this issue Aug 22, 2020
Because we're swapping a stack, we can't rely on the first item
being the descriptive one
IBBoard added a commit that referenced this issue Aug 22, 2020
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.
IBBoard added a commit that referenced this issue Aug 22, 2020
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.
IBBoard added a commit that referenced this issue Aug 22, 2020
This now reads the description, but not clear why it doesn't
read the name, screen name and location before or the URL afterwards.
IBBoard added a commit that referenced this issue Aug 22, 2020
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"!
IBBoard added a commit that referenced this issue Aug 22, 2020
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.
IBBoard added a commit that referenced this issue Aug 22, 2020
Includes making user list widget flexible so that we
can supply list owner names.
(Previously the code assumed it was out lists)
IBBoard added a commit that referenced this issue Aug 22, 2020
IBBoard added a commit that referenced this issue Aug 22, 2020
IBBoard added a commit that referenced this issue Aug 28, 2020
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.
@IBBoard
Copy link
Owner

IBBoard commented Sep 5, 2020

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.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
accessibility enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants