zulip / zulip-mobile

Zulip mobile apps for Android and iOS.
https://zulip.com/apps/
Apache License 2.0
1.29k stars 651 forks source link

Make the app more accessible with a screen-reader #4394

Open gnprice opened 3 years ago

gnprice commented 3 years ago

We've just completed #4232 with #4355, by adding captions to two particularly critical bits of the UI. But there are still more things we should do to make using the app a good experience with a screen reader.

The essential thing for working on this issue is to take some time using the app this way -- and before that, to take some time learning how to use one of these systems, if you're not already a regular user of them. Here's the upstream guides for doing so with either Android or iOS: https://developer.android.com/guide/topics/ui/accessibility/testing https://developer.apple.com/documentation/uikit/accessibility_for_ios_and_tvos/supporting_voiceover_in_your_app

In particular, the following steps are highly educational, and essential for working in this area:

When I did that for the first time, on Android, I spent about a half-hour and learned quite a lot. As you continue working in this area, you'll keep doing more of it.

One general principle in choosing how a given widget should work is that we want things to feel natural and as-expected for people who regularly use one of these systems. So the labels we choose, and other aspects like what's selectable, what order things come in, etc., should match what other apps do, especially apps from the platform maker (Google or Apple) and other major apps.

Here's a list of some of the things we should improve or investigate (in the order I found them, not necessarily priority):

gnprice commented 3 years ago

For anyone who regularly uses a screenreader, I'd be especially interested in your feedback on what's most annoying for you in using Zulip, or thoughts on how a specific part of the UI should work, or any other aspect of this that you have something to say about :slightly_smiling_face:

gnprice commented 3 years ago

Another note: the old PR #2753 contains fixes for some of the items above. In particular:

A good place to start would be to revive the changes from that PR.

Gautam-Arora24 commented 3 years ago

Since I have already worked on this type of issue earlier where I added accessibility labels to the send and back button. I would like to work on this issue as well.

gnprice commented 3 years ago

@Gautam-Arora24 Sounds great -- please do!

chrisbobbe commented 3 years ago
  • [ ] In the nav bar on a stream or topic narrow, the # is selectable. It shouldn't be.

Hmm, could we revisit this a bit? I think that icon usefully conveys some important information, and it might make sense to keep it as a selectable item (but give it an accessibilityLabel with that information if we do). If we don't make it selectable, I'd still like to convey the information, but we'd need to find another way to do it. (Perhaps by making a single selectable item out of the parent View of the StreamIcon and the Text with stream.name, and give that an accessibilityLabel that includes the information plus the stream name.)

That information is:

chrisbobbe commented 3 years ago

Also, I notice that the subscribe/unsubscribe switches in the "All streams" tab are impossible to interact with, at least with VoiceOver on iOS.

Gautam-Arora24 commented 3 years ago

Also, I notice that the subscribe/unsubscribe switches in the "All streams" tab are impossible to interact with, at least with VoiceOver on iOS.

@chrisbobbe The subscribe/unsubscribe switches are impossible to interact with just because the Touchable component in StreamItem groups its children into one accessible component. Therefore, when we use VoiceOver for a list item in the "All Streams" tab, it doesn't individually select a Switch. What are your views on this?

chrisbobbe commented 3 years ago

On iOS, I notice that in the compose box, the order of selection goes like this: "expand menu" button, "send message" button, then after that, the message-content input field. It should go from left to right: "expand menu", message-content input field, "send message" button.

Probably the misuse of FloatingActionButton for the "send message" button is at least partly to blame. The button isn't (and shouldn't be) "floating".