Accessibility sweep: label remaining unlabeled controls (#231)#634
Conversation
Issue #231 ("Accessibility issues") was left open for "further investigation" beyond the single app-list icon it originally named. This addresses the rest of the unlabeled/inaccessible controls found in a full pass, following the same pattern (static contentDescription for controls whose role already announces state, dynamic descriptions where a control refers to a specific item, importantForAccessibility=no for decorative images). Critical — primary controls that had no accessible name: - actionmain.xml: master tracker-blocking switch (swEnabled) - item_vpn_status.xml: VPN on/off switch (vpnEnabledSwitch) - item_blocklist.xml + ActivityBlocklists: per-row enable switch (named after the blocklist) and delete button (also given a 48dp touch target) Moderate — information previously conveyed only visually: - AdapterLog: access-log status icons now announce connection allowed/blocked, network type, screen-on state, and app name - Decorative illustrations across 12 screens marked importantForAccessibility=no to stop "unlabeled image" noise Minor: - item_insights_header.xml: share button raised to a 48dp target - item_timeline_entry.xml: decorative app icon silenced - fragment_actions.xml / list_item_trackers.xml: accessibilityHeading on section titles for heading navigation New accessibility strings added to the base English strings.xml only; translations follow via the usual localization process. No behavior or blocking-logic changes. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
Good accessibility direction, but this is not merge-ready yet. Please remove the unrelated |
|
Implemented the requested review fixes in |
Why
PR #625 fixed the specific app-list Internet toggle from #231, but issue #231 ("Accessibility issues") was deliberately left open by the maintainer for "further investigation" — its title is plural and it functioned as a tracking bucket. A full TalkBack/screen-reader pass turned up a number of other controls with the same class of problem (unlabeled toggles/buttons, info conveyed only visually). This PR addresses those. It's complementary to #625 and touches a disjoint set of controls.
The app already established the right patterns (
importantForAccessibility="no"on decorative images initem_insights_header.xml, labeled delete button initem_wg_profile.xml) — they were just applied inconsistently. This makes them consistent.What changed
🔴 Critical — primary controls with no accessible name
A
MaterialSwitchwith notext/contentDescriptionis announced only as "on, switch" with no name.actionmain.xml— the master tracker-blocking switch in the main header (swEnabled), the app's single most important control.item_vpn_status.xml— the VPN on/off switch (vpnEnabledSwitch).item_blocklist.xml+ActivityBlocklists.java— the per-row enable switch now gets a dynamic description naming the specific blocklist; the delete button gets a label and a 48dp touch target.🟠 Moderate — information previously conveyed only visually
AdapterLog.java— access-log status icons now announce connection allowed/blocked, network type (Wi-Fi/other), screen-on state, and the app name (previously color/icon only).about,android,vpn,xposed,troubleshooting,sure,forwardadd,forwardapproval,datasaving,doze,enable,fragment_actions) — decorative illustrations markedimportantForAccessibility="no"to stop TalkBack announcing "unlabeled image". Each was confirmed to sit beside a text label.🟡 Minor — polish
item_insights_header.xml— share button raised from 36dp to a 48dp touch target (icon size preserved via padding).item_timeline_entry.xml— decorative app icon silenced (app name is adjacent).fragment_actions.xml/list_item_trackers.xml—accessibilityHeading="true"on section titles so screen-reader users can navigate by heading.Strings
10 new accessibility strings added to the base English
values/strings.xmlonly — translations follow via the usual localization process.No behavior or blocking-logic changes — purely accessibility labeling.
Verification
./gradlew compileGithubDebugJavaWithJavac— BUILD SUCCESSFUL.Note on #231
Suggest keeping #231 open (or filing a fresh "a11y sweep" issue) rather than fully closing it — this and #625 together are what the "further investigation" note meant, but on-device TalkBack verification is still pending.
🤖 Generated with Claude Code