[PR #2779] fix: add accessible labels to core controls #2944

Open
opened 2026-10-14 21:06:24 +00:00 by bsakaguchi · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/amnezia-vpn/amnezia-client/pull/2779
Author: @web3blind
Created: 6/27/2026
Status: 🔄 Open

Base: dev ← Head: fix/accessibility-core-controls


📝 Commits (2)

  • 017b95c fix: add accessible labels to core controls
  • 0b152b4 fix: cover remaining reported accessibility gaps

📊 Changes

24 files changed (+121 additions, -3 deletions)

View changed files

📝 client/ui/qml/Components/AddSitePanel.qml (+3 -0)
📝 client/ui/qml/Components/InstalledAppsDrawer.qml (+2 -0)
📝 client/ui/qml/Components/ServersListView.qml (+1 -0)
📝 client/ui/qml/Controls2/BackButtonType.qml (+1 -0)
📝 client/ui/qml/Controls2/BasicButtonType.qml (+14 -0)
📝 client/ui/qml/Controls2/CheckBoxType.qml (+5 -1)
📝 client/ui/qml/Controls2/DropDownType.qml (+5 -0)
📝 client/ui/qml/Controls2/Header2Type.qml (+2 -0)
📝 client/ui/qml/Controls2/HeaderTypeWithButton.qml (+2 -0)
📝 client/ui/qml/Controls2/HeaderTypeWithSwitcher.qml (+1 -0)
📝 client/ui/qml/Controls2/ImageButtonType.qml (+20 -0)
📝 client/ui/qml/Controls2/LabelWithButtonType.qml (+6 -0)
📝 client/ui/qml/Controls2/ListViewWithRadioButtonType.qml (+8 -0)
📝 client/ui/qml/Controls2/SwitcherType.qml (+6 -0)
📝 client/ui/qml/Controls2/TabButtonType.qml (+4 -0)
📝 client/ui/qml/Controls2/TabImageButtonType.qml (+6 -0)
📝 client/ui/qml/Controls2/TextFieldWithHeaderType.qml (+16 -2)
📝 client/ui/qml/Controls2/VerticalRadioButton.qml (+4 -0)
📝 client/ui/qml/Pages2/PageHome.qml (+1 -0)
📝 client/ui/qml/Pages2/PageSettingsAppSplitTunneling.qml (+3 -0)

...and 4 more files

📄 Description

Summary

Expands the accessibility fix to cover the known NVDA/TalkBack issues reported in #2778 as far as they can be addressed statically in QML.

Changes:

  • Add Accessible.name / Accessible.role to shared button, image button, tab, radio button, checkbox, switcher, dropdown, label-button, and text-field controls.
  • Add fallback accessible names for common icon-only buttons (Close, Copy, Show QR code, Delete, Refresh, More options, Settings, Add, Expand, Open, Download).
  • Add explicit labels for the bottom navigation icon tabs: Home, Share, Settings, Add server.
  • Add labels for the main server selector and per-server settings button.
  • Keep server radio buttons readable and add metadata for shared radio-list items.
  • Add explicit accessible labels for adjacent action buttons in the reported server/split-tunneling flows.
  • Make custom CheckBoxType focusable with Qt.StrongFocus so keyboard/screen-reader users can reach and toggle it normally.
  • Make the embedded action button inside TextFieldWithHeaderType focusable and labelled. This covers plus/add buttons and show/hide/refresh style actions.
  • Stop marking every TextFieldWithHeaderType as sensitive data by default and give text fields an accessible name; this helps normal search fields behave like text inputs instead of password-like fields.
  • Label Android app split-tunneling search as Application / Search applications.
  • Add explicit labels for split-tunneling remove/delete actions, additional-options buttons, import actions, and installed-app checkboxes.
  • Add accessible state descriptions for switchers/dropdowns/checkboxes/radio buttons where useful.

Addresses #2778
Related to #1176

Verification

  • Checked that the touched QML files keep balanced braces/parentheses/brackets with a lightweight static script.
  • Checked that changed files do not contain obvious credential/token patterns.
  • Verified Qt docs list the used Accessible roles (Button, CheckBox, RadioButton, PageTab, EditableText, ComboBox).
  • Verified the PR branch on GitHub now contains both commits and the expanded changed-file set.

Limitations and follow-up testing:

  • I could not run the full app build or runtime NVDA/TalkBack test in this environment.
  • After this is accepted and available in an updated build, I can test the real app with NVDA on desktop and TalkBack on Android and report confirmations or follow-up problems.
  • git diff --check reports CRLF line endings as trailing whitespace on several pre-existing CRLF QML files after adding lines; the actual diff is small and preserves existing file line endings.

🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/amnezia-vpn/amnezia-client/pull/2779 **Author:** [@web3blind](https://github.com/web3blind) **Created:** 6/27/2026 **Status:** 🔄 Open **Base:** `dev` ← **Head:** `fix/accessibility-core-controls` --- ### 📝 Commits (2) - [`017b95c`](https://github.com/amnezia-vpn/amnezia-client/commit/017b95cdea105978cf47a0ceba6e67504e3cd250) fix: add accessible labels to core controls - [`0b152b4`](https://github.com/amnezia-vpn/amnezia-client/commit/0b152b49295b85287fe1d87b7de7ddad2bb7d1ac) fix: cover remaining reported accessibility gaps ### 📊 Changes **24 files changed** (+121 additions, -3 deletions) <details> <summary>View changed files</summary> 📝 `client/ui/qml/Components/AddSitePanel.qml` (+3 -0) 📝 `client/ui/qml/Components/InstalledAppsDrawer.qml` (+2 -0) 📝 `client/ui/qml/Components/ServersListView.qml` (+1 -0) 📝 `client/ui/qml/Controls2/BackButtonType.qml` (+1 -0) 📝 `client/ui/qml/Controls2/BasicButtonType.qml` (+14 -0) 📝 `client/ui/qml/Controls2/CheckBoxType.qml` (+5 -1) 📝 `client/ui/qml/Controls2/DropDownType.qml` (+5 -0) 📝 `client/ui/qml/Controls2/Header2Type.qml` (+2 -0) 📝 `client/ui/qml/Controls2/HeaderTypeWithButton.qml` (+2 -0) 📝 `client/ui/qml/Controls2/HeaderTypeWithSwitcher.qml` (+1 -0) 📝 `client/ui/qml/Controls2/ImageButtonType.qml` (+20 -0) 📝 `client/ui/qml/Controls2/LabelWithButtonType.qml` (+6 -0) 📝 `client/ui/qml/Controls2/ListViewWithRadioButtonType.qml` (+8 -0) 📝 `client/ui/qml/Controls2/SwitcherType.qml` (+6 -0) 📝 `client/ui/qml/Controls2/TabButtonType.qml` (+4 -0) 📝 `client/ui/qml/Controls2/TabImageButtonType.qml` (+6 -0) 📝 `client/ui/qml/Controls2/TextFieldWithHeaderType.qml` (+16 -2) 📝 `client/ui/qml/Controls2/VerticalRadioButton.qml` (+4 -0) 📝 `client/ui/qml/Pages2/PageHome.qml` (+1 -0) 📝 `client/ui/qml/Pages2/PageSettingsAppSplitTunneling.qml` (+3 -0) _...and 4 more files_ </details> ### 📄 Description ## Summary Expands the accessibility fix to cover the known NVDA/TalkBack issues reported in #2778 as far as they can be addressed statically in QML. Changes: - Add `Accessible.name` / `Accessible.role` to shared button, image button, tab, radio button, checkbox, switcher, dropdown, label-button, and text-field controls. - Add fallback accessible names for common icon-only buttons (`Close`, `Copy`, `Show QR code`, `Delete`, `Refresh`, `More options`, `Settings`, `Add`, `Expand`, `Open`, `Download`). - Add explicit labels for the bottom navigation icon tabs: Home, Share, Settings, Add server. - Add labels for the main server selector and per-server settings button. - Keep server radio buttons readable and add metadata for shared radio-list items. - Add explicit accessible labels for adjacent action buttons in the reported server/split-tunneling flows. - Make custom `CheckBoxType` focusable with `Qt.StrongFocus` so keyboard/screen-reader users can reach and toggle it normally. - Make the embedded action button inside `TextFieldWithHeaderType` focusable and labelled. This covers plus/add buttons and show/hide/refresh style actions. - Stop marking every `TextFieldWithHeaderType` as sensitive data by default and give text fields an accessible name; this helps normal search fields behave like text inputs instead of password-like fields. - Label Android app split-tunneling search as `Application` / `Search applications`. - Add explicit labels for split-tunneling remove/delete actions, additional-options buttons, import actions, and installed-app checkboxes. - Add accessible state descriptions for switchers/dropdowns/checkboxes/radio buttons where useful. Addresses #2778 Related to #1176 ## Verification - Checked that the touched QML files keep balanced braces/parentheses/brackets with a lightweight static script. - Checked that changed files do not contain obvious credential/token patterns. - Verified Qt docs list the used `Accessible` roles (`Button`, `CheckBox`, `RadioButton`, `PageTab`, `EditableText`, `ComboBox`). - Verified the PR branch on GitHub now contains both commits and the expanded changed-file set. Limitations and follow-up testing: - I could not run the full app build or runtime NVDA/TalkBack test in this environment. - After this is accepted and available in an updated build, I can test the real app with NVDA on desktop and TalkBack on Android and report confirmations or follow-up problems. - `git diff --check` reports CRLF line endings as trailing whitespace on several pre-existing CRLF QML files after adding lines; the actual diff is small and preserves existing file line endings. --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
Sign in to join this conversation.
No labels
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
amnezia-vpn/amnezia-client#2944
No description provided.