Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

a11y - A cumulative merge request #5984

Merged
merged 28 commits into from
Apr 4, 2024
Merged

Conversation

Hartmnt
Copy link
Member

@Hartmnt Hartmnt commented Nov 29, 2022

This post contains a very long ToDo list. To jump directly to my post containing links to binaries, follow this link.

The current version is from February 2024.

Greetings everybody,

As stated before, I am going to try to improve the accessibility of Mumble. This is rather hard for me, because I am limited to the accessibility options provided for Linux - specifically Ubuntu 22.04 LTS with Gnome Desktop Environment. Furthermore, I am not using any accessibility tools myself, so I might miss or misinterpret a thing or two. Nonetheless, I am going to try to improve what I can and Qt lets me.

This merge request is supposed to contain all the changes I make as separate commits. It also contains a ToDo List further down, which I will also try to keep accessible for screen readers. Please feel free to add comments for additions to the ToDo list, or other general feedback. Please note that parts of the ToDo list might be impossible to solve due to how the Qt Framework works, or might be specific to my screen reader configuration.

Note: These commits are currently not part of any official Mumble release. They probably will not make it into Mumble before the 1.5 series is released. If you want to try out the changes in this branch, you will have to either compile the branch yourself, or go through the cumbersome GitHub user interface to navigate to the build pipeline artifacts of this merge request.

For the following ToDo list I went through Mumble with a screen reader using only the keys TAB, Shift-TAB, Arrow Keys, Space, and Enter. It is clear that Mumble is very inaccessible in certain places.

I have since updated and adapted the ToDo list with respect to feedback I have gotten here on GitHub.

Start of the ToDo list.


In the "Audio Tuning Wizard":
General:

  • The "Next" and "Back" buttons read out the ">" (greater than) and "<" (less than) symbols, which is confusing.
  • Header texts are not read when flipping pages in the wizard using "next" and "back" buttons.

First page of the "Audio Tuning Wizard":

  • There is a missing word in the sentence "The settings are only once this wizard has been completed". (Fixed by 3e4fa7d)

Device Selection page:

  • The first combo box is automatically selected. None of the info text is read.

Volume Tuning page:

  • The screen reader repeats the raw slider value when it is changed, which has absolutely no informative value.

Voice Activity Detection page:

  • The slider is focused first, with no indication that there are radio boxes above.
  • The general fact that there are radio buttons, which switch between the activation modes, is not very well explained.
  • The screen reader repeats the raw slider value when it is changed, which has absolutely no informative value.
  • The ":" symbol is read on the first radio button.
  • The button to assign a shortcut for Push to Talk does not inform the user that it can be used to reassign the Push to Talk Key when using a screen reader. It says "PTT-Shortcut Push Button", but the label says "No buttons assigned."
  • When selecting "high contrast graphics" in the previous page, the "Signal-To-Noise ratio" slider is pretty much unusable even for seeing users.

Quality & Notifications page:

  • The quality setting radio buttons are read, but their extensive descriptions are not read.

Edit Shortcut Dialog:

  • There is no indication whether the dialog is listening for input

In the Main Mumble Window:

In the Mumble Server Connect Dialog:

  • The button "Add New..." is selected first. There is no indication that there is a public server list loading.
  • Screen readers should state how this dialog is supposed to work. There are two methods: Searching the public server list and adding custom servers using their IP address. (Issue Mumble inaccessible to blind users #1337)
  • The selected item in the server list is not read when TABBED into.
  • Favorites are not read.
  • The "Connect" button is not reachable with forward-TAB.
  • The optional password dialog is completely inaccessible for screen reader users. (Issue Poor accessibility for screen reader users #5811) (Note: I can not reproduce this issue with the current branch)

Certificate Alert:

  • The fingerprint of the cert is very long and read first before any instruction on what the ramifications of the situation are.

In the Server Information Dialog:

  • Only the TCP Control statistics are read, with no indication that there is more text above. (Note: This will require a creation of a brand new custom QWidget, because Qt has no way of making simple QLabel lists accessible)

In the Client Information Dialog:

  • Nothing is accessible at all. (Note: This will require a creation of a brand new custom QWidget, because Qt has no way of making simple QLabel lists accessible)

In the Access Token Dialog:

  • The screen reader tells us that there is a list with N entries, but the items are never read.

In the Recorder:

  • The "target directory" text box reads all the options listed in its tool tip. This is not very understandable by just hearing the special characters.
  • When starting the recording, the stop button should be selected automatically for an easy way to stop the recording. Currently, a disabled control element is selected automatically.
  • The labels in "Output" are somehow not correctly used to describe the fields.

In the Certificate Wizard:
General:

  • The "Next" and "Back" buttons read out the ">" (greater than) and "<" (less than) symbols, which is confusing.

Certificate Authentication page:

  • The current certificate should be read.
  • The radio buttons should be selected first, otherwise there is no indication that there are radio buttons at all.

New Certificate page:

  • Email is selected first. The info text is not being read.
  • The tool tips contain "(e.g. John Doe)" but it should rather be read as "for example John Doe".

Replace Certificate page:

  • No text is read.

Export Certificate page:

  • None of the text is read. The certificate details should be read, before the "Export to" is selected.

In the Mumble Settings:
General:

  • TAB does not correctly cycle between buttons and content page.
  • Sliders should read the semantic value with suffix instead of plain slider values.
  • Selection order of elements is all over the place.

Audio Input page:

  • The "Noise Suppression" subsection is being read as "Audio Processing"
  • "Misc" selects the "nothing" combo box, which is confusing.

Shortcuts page:

Messages page:

Plugins page:

  • All the checkboxes in the plugin list are completely inaccessible without a mouse.

Overall

  • Remove code based accessibilityName assignments
  • Fix all Label buddies
  • For all buttons, check if they need a ...

End of the ToDo list.

@Hartmnt Hartmnt changed the title a11y - A commulative merge request WIP: a11y - A commulative merge request Nov 29, 2022
@Krzmbrzl Krzmbrzl added client a11y accessibility Everything related to accessibility-features (like screen-readers) labels Nov 29, 2022
@Hartmnt Hartmnt force-pushed the feat_a11y branch 7 times, most recently from f4b06de to 0962bc5 Compare November 29, 2022 19:51
@Hartmnt Hartmnt changed the title WIP: a11y - A commulative merge request WIP: a11y - A cumulative merge request Nov 29, 2022
@Hartmnt Hartmnt force-pushed the feat_a11y branch 15 times, most recently from e82b9ad to 29dffd7 Compare November 30, 2022 14:59
@cwendling
Copy link

Hello, wonderful you're giving all this a shot! 🥇 I don't have much time right now for looking into things here, but just a couple of points:

Checkboxes say "checked" and "not checked" when switched, but do not repeat the checkbox label again.

As far as I know this is intended behavior of Orca, and at least is not specific to Mumble (or Qt). One thing you need to consider is that screen reader users really don't like too much verbosity, as it kills productivity and creates noise. In many places, only things that actually changed should be re-announced.

The screen reader repeats the slider value when it is changed which has absolutely no informative value.

Indeed the raw value isn't very useful; however visually you have a slider, so a concept of percentage might be interesting to report. If the value was in the 0-100 range that would mostly do it I guess (?)


PS: I'm not actually a real screen reader user, but most of my job is a11y under Linux. Yet, actual user feedback would be more valuable -- and somebody posted a link pointing here on the Orca mailing list so you might hope for some feedback indeed :)

@Hartmnt
Copy link
Member Author

Hartmnt commented Nov 30, 2022

As far as I know this is intended behavior of Orca, and at least is not specific to Mumble (or Qt).

Yeah, that is what I kinda figured. That confused me at first, but I think it is actually beneficial for the reasons you stated.

Indeed the raw value isn't very useful; however visually you have a slider, so a concept of percentage might be interesting to report. If the value was in the 0-100 range that would mostly do it I guess (?)

Sadly the range of these sliders are mostly 0-32767, which is absolutely useless. But giving a percent readout by dividing by 32767 would work. For the volume at least. The whole voice-activity-detection configuration is pretty much unusable as a blind person right now, as there is no other than a visual indicator when the voice is inside the threshold. I just hope Qt lets me somehow overwrite the slider value in any way dynamically at all.

and somebody posted a link pointing here on the Orca mailing list so you might hope for some feedback indeed :)

That is pretty cool. I hope I can live up to any expectation there might be. For the time being I am working on this in my limited free time.
For anyone reading this and considering to try Mumble binaries produced by the build pipeline from this merge request: My workflow consists of constantly pushing changes to my forked Mumble branch. As the Mumble pipelines trigger automatically when I push to my forked branch, it might very well be the case that these builds do not work properly.

Hartmnt added 12 commits April 4, 2024 13:23
Qt offers a feature called buddy labels. With that certain
UI elements can have a label, which represents the UI element
in a textual way. This is very important for screen readers
as they otherwise might not read the correct for any given UI element.
Adding buddies is as simple as using the "Edit buddy" dialog
in the Qt editor.

This commit sweeps through (almost) all UI elements and
applies the correct buddies where applicable.
…able

In c73f967 accessibility names and descriptions were added to Mumble
but they were placed in code.

This commit moves all those texts into the respective .ui file where
applicable. If the accessible name is changed or calculated at runtime,
it obviously needs to still be defined in the source code.
A lot of accessible names or descriptions were either missing,
wrong or misleading.

This commit tries to unify and improve all accessible names
and descriptions

Fixes mumble-voip#1337
Previously, the accessibility of the inline slider was very
limited due to the cumbersome and lacking system Qt provides.

This commit gently tricks Qt into behaving like a nice
framework in regards to accessibility.

Fixes mumble-voip#6109
This commit switches the plugin config tree to a new
MultiColumnTreeWidget and makes it keyboard navigatable.
It also makes screen readers read actual column values.
This commit switches the message notification type tree to a new
MultiColumnTreeWidget and makes it keyboard navigatable.
It also makes screen readers read actual column values.

Fixes mumble-voip#2972
This commit switches the search result tree to a new
MultiColumnTreeWidget and makes it keyboard navigatable.
It also makes screen readers read actual column values.
This commit switches the global shortcut tree to a new
MultiColumnTreeWidget and makes it keyboard navigatable.
It also makes screen readers read actual column values.

Fixes mumble-voip#2293
This commit changes the menu items and some buttons to
conform to universal [1] standards. This means that:

* Labels are using title case (e.g. "Listen to channel" -> "Listen To Channel")
* Menu items are generally not including the menu title in
the action label (e.g. "Join Channel" -> "Join")
* ALL menu items have non-overlapping access keys (ALT + <access key>, denoted by underline)
* Ellipses ("...") are only used for actions that require further user input,
simply opening another window is not a reason for using an ellipsis.

[1] State of the art as documented by major vendors in the consumer
software industry. For example:
https://learn.microsoft.com/en-us/windows/win32/uxguide/cmd-menus
https://developer.apple.com/design/human-interface-guidelines/menus
https://develop.kde.org/hig/components/navigation/menubar/
Previously, there was no way to move users from channel to channel
using only the keyboard. For accessibility reasons, that was not ideal.

This commit adds a new action to the user context menu allowing
to move the selected user to your own channel (given enough
permissions).

While this is a decent workaround, the end goal will be to remove
this action and replace it with a dedicated dialog to choose
the channel a user will be moved to.

See mumble-voip#4642
@Krzmbrzl
Copy link
Member

Krzmbrzl commented Apr 4, 2024

💚 All backports created successfully

Status Branch Result
1.5.x

Questions ?

Please refer to the Backport tool documentation and see the Github Action logs for details

Hartmnt added a commit that referenced this pull request Apr 4, 2024
Backport "Merge pull request #5984 from Hartmnt/feat_a11y" to 1.5.x
@squeaktoy
Copy link

squeaktoy commented May 20, 2024

So I just tried out 1.5.634 and I can now freely tab around, but the chat log is still not very nice to read. I can only use Orca's flat review bindings, and it also reads out other screen elements alongside the chat log. Ideally, the chat log should have a cursor you can move around with the arrow keys. Pressing tab does change focus to links in the chat, but Orca doesn't read out the links at all.

The settings are now accessible, which is great. The sidebar works great with Orca now. Sliders read out their percentages when changing them, however, when I press KP_Begin to read the current selected item, every slider reads out "Slider 0%", even though they're not 0%.

@Hartmnt
Copy link
Member Author

Hartmnt commented May 21, 2024

So I just tried out 1.5.634 and I can now freely tab around, but the chat log is still not very nice to read. I can only use Orca's flat review bindings, and it also reads out other screen elements alongside the chat log. Ideally, the chat log should have a cursor you can move around with the arrow keys. Pressing tab does change focus to links in the chat, but Orca doesn't read out the links at all.

The settings are now accessible, which is great. The sidebar works great with Orca now. Sliders read out their percentages when changing them, however, when I press KP_Begin to read the current selected item, every slider reads out "Slider 0%", even though they're not 0%.

Thanks for the feedback!

The chat log was not touched by the accessibility overhaul as it needs to be completely written from scratch to make it work with keyboard navigation and screen readers (which is planned). To try to explain why: Visually there are distinct messages in the chat log, however programmatically it is more like one giant wall of text with no clear separation. To fix this we need to create new/other UI elements for each message, which is possible but would have exceeded the scope of the first iteration of accessibility fixes.

Also, I will look into the slider situation, thanks.

@squeaktoy
Copy link

The chat log was not touched by the accessibility overhaul as it needs to be completely written from scratch to make it work with keyboard navigation and screen readers (which is planned). To try to explain why: Visually there are distinct messages in the chat log, however programmatically it is more like one giant wall of text with no clear separation. To fix this we need to create new/other UI elements for each message, which is possible but would have exceeded the scope of the first iteration of accessibility fixes.

Well, TeamTalk also uses a big multi-line textbox for the chat log, but it allows the user to use a text cursor inside this textbox (like carret browsing), so users can read each message like a line of text. It wouldn't be that hard to make that work for Mumble in the meantime, would it? Although clickable links might be a bit of problem in the way.

Also, I will look into the slider situation, thanks.

I just noticed that when using the arrow keys in the channel and user list makes Mumble send useful details to the screen reader. But unfortunately pressing KP_Begin only reads out "server" to the screen reader.

@Hartmnt
Copy link
Member Author

Hartmnt commented May 22, 2024

I just noticed that when using the arrow keys in the channel and user list makes Mumble send useful details to the screen reader. But unfortunately pressing KP_Begin only reads out "server" to the screen reader.

In all my testing I have never tried to use KP_Begin and KP_End, so I guess I have to go through all UI elements again and test the behavior. I would not be surprised, if you manage to find other quirks with KP_Begin and KP_End

@albertotirla
Copy link

There are some obvious improvements here, thanks for that, we're getting there! In the meantime, for the chat logs issue, you can do what transmission did, where they basically made the label have the role of textbox. Good for navigating line by line, less so about character by character for whatever reason, but at least it works now. Maybe that's a good stopgap solution? for links, you could make a menu item, button, keyboard shortcut, whatever, which pops up a dialog with a list of all the links in the focused message, then when we activate one of the items, the link should open as usual.

In the meantime, here's the issue for transmission:

transmission/transmission#6512

and here is an initial pr which fixes that particular issue, for some definition of fixes. It's also mentioned in the issue, but putting the link here makes it easier to find:

transmission/transmission#6520

Hope that's of some help!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
accessibility Everything related to accessibility-features (like screen-readers) auto-backport-to-1.5.x backport-needed client
Projects
None yet
Development

Successfully merging this pull request may close these issues.

8 participants