fix: [Accessibility][Tracking] Focus Management#81436
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 1300f40cba
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
src/pages/workspace/duplicate/WorkspaceDuplicateSelectFeaturesForm.tsx
Outdated
Show resolved
Hide resolved
Codecov Report✅ Changes either increased or maintained existing code coverage, great job!
|
…bility-Tracking-Focus-Management
Reviewer Checklist
Screenshots/VideosAndroid: HybridAppAndroid: mWeb ChromeiOS: HybridAppScreenRecording_02-16-2026.11-14-19_1.MP4iOS: mWeb SafariMacOS: Chrome / SafariScreen.Recording.2026-02-16.at.10.56.09.mp4 |
|
@codex review |
|
@TaduJR Could you share a video showing the behavior on native? |
|
@TaduJR Could you check why lint failed? |
|
@TaduJR gentle bump |
JmillsExpensify
left a comment
There was a problem hiding this comment.
PR aligns with product behavior and sepc
…bility-Tracking-Focus-Management
|
That is expected for Native WCAG Reference: SC 4.1.2 Name, Role, Value SC 4.1.2 only applies to "user interface components" — defined as "a part of the content perceived by users as a single control for a distinct function." Static text is not a UI component. Per ARIA4: roles must describe actual component functionality —
Native note: VoiceOver/TalkBack reading text via swipe is expected per W3C Mobile Guidance. Hiding text entirely would prevent blind users from reading the content. |
|
@huult can this be merged if that was the only concern? |
|
@TaduJR would you please fix conflicts? |
…bility-Tracking-Focus-Management
…bility-Tracking-Focus-Management
|
@TaduJR Please resolve the conflict. |
|
@MelvinBot resolve conflicts please |
Co-authored-by: Rushat Gabhane <rushatgabhane@users.noreply.github.com>
|
Merge conflicts have been resolved! ✅ What was conflicting:
|
|
@grgia all yours! |
|
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
|
🚧 @grgia has triggered a test Expensify/App build. You can view the workflow run here. |
|
🧪🧪 Use the links below to test this adhoc build on Android, iOS, and Web. Happy testing! 🧪🧪
|
|
🚀 Deployed to staging by https://github.com/grgia in version: 9.3.26-0 🚀
|
Hi @izarutskaya Per W3 guidelines, this is expected and the correct result for touch devices. |
|
You can check this comment #81436 (comment) |
|
🚀 Deployed to production by https://github.com/puneetlath in version: 9.3.26-8 🚀
|
Explanation of Change
Issue #76955 - Adjacent checkbox and button
The "Select all" control had both a
Checkboxand aPressableWithFeedbackwith the same action, causing screen readers to announce them separately.Fix: Replaced
PressableWithFeedbackwith plainTextand addedshouldSelectOnPressEnterto theCheckbox.Issue #76937 - Non-interactive MenuItem focusable
MenuItempassedrole="menuitem"andtabIndex={0}even wheninteractive={false}, making static text focusable and announced as interactive.Fix: Only apply
roleandtabIndexwheninteractiveis true.Fixed Issues
$ #79232
PROPOSAL: #79232 (comment)
Tests
Issue #76955 - Adjacent checkbox and button
Issue #76937 - Non-interactive MenuItem focusable
Offline tests
Same as tests
QA Steps
// TODO: These must be filled out, or the issue title must include "[No QA]."
Same as tests
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectioncanBeMissingparam foruseOnyxtoggleReportand notonIconClick)src/languages/*files and using the translation methodSTYLE.md) were followedAvatar, I verified the components usingAvatarare working as expected)StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))npm run compress-svg)Avataris modified, I verified thatAvataris working as expected in all cases)Designlabel and/or tagged@Expensify/designso the design team can review the changes.ScrollViewcomponent to make it scrollable when more elements are added to the page.mainbranch was merged into this PR after a review, I tested again and verified the outcome was still expected according to theTeststeps.Screenshots/Videos
Android: Native
Screen_Recording_20260215_145023_New.Expensify.Dev.mp4
Android: mWeb Chrome
iOS: Native
iOS-Native.mp4
iOS: mWeb Safari
MacOS: Chrome / Safari
Mac-Chrome.mp4