fix(mWeb): Move focus to opened menu layout for screen readers#83822
fix(mWeb): Move focus to opened menu layout for screen readers#83822madmax330 merged 6 commits intoExpensify:mainfrom
Conversation
Codecov Report❌ Looks like you've decreased code coverage for some files. Please write tests to increase, or at least maintain, the existing level of code coverage. See our documentation here for how to interpret this table.
|
|
1. On Settings - About - Keyboard Shortcuts 1.mov2. On Settings - Save the world - I know a teacher 2.mov3. On Settings - Save the world - I am a teacher 3.mov5. On Settings - Preferences - Language 5.mov6. On Settings - Preferences - Priority mode 6.mov7. On Settings - Security 7.mov9. On Settings - Security - Close account 9.mov10. On Settings - Security - Two-factor authentication 10.mov11. On Settings - Profile - Display name 11.mov12. On Settings - Profile - Contact methods 12.mov13. On Settings - Profile - Pronouns 13.mov14. On Settings - Profile - Share Code 14.mov15. On Settings - Profile - Legal Name 15.mov16. On Settings - Profile - DOB 16.mov17. On Settings - Profile - Phone number 17.mov18. On Settings - Profile - Address 18.mov20. On Workspaces - Duplicate Workspaces 20.mov21. On Workspaces - Delete Workspace 21.mov22. On Workspaces - Overview - Workspace Name 22.mov24. On Workspace - Categories - Add Category 24.mov25. On Workspace - Categories - Settings 25.mov26. On Workspace - Workflows - Edit Approval Workflow 26.mov28: On Workspace - Workflows - Approver 28.mov28. On Workspace - Rules - Cash Expense Default d28.mov29. On Workspaces - Distance Rates - Rate Details 29.mov30. On Workspaces - Expensify Card - Add bank account 30.mov31. On Workspaces - Expensify Card - Bank info 31.mov32. On Workspaces - Expensify Card - Confirm currency and country 32.mov33. On Workspace - Company Card - Add Cards 33.mov34. On Workspace - Create Workspace - Confirm Workspace 34.mov35. On Workspace - Create Workspace - Invite new members 35.mov36. On Workspace - Create Workspace - Default Currency 36.mov40. On Track Distance 40.mov41. On Track Distance - Choose Recipient 41.mov42. On Send Invoice 42.mov43. On Wallet - Add bank account 43.mov44. On Create Expense flow 44.mov45. On Paid Expense details flow 45.mov46. On Reports flow 46.mov47. On Chat flow 47.mov |
|
Fixed #83313 Screen.Recording.2026-03-02.at.3.15.01.PM.mov |
joekaufmanexpensify
left a comment
There was a problem hiding this comment.
Fine for product 👍
|
@suneox all yours! gentle bump ^^ |
I should be able to finish the review today. |
|
@marufsharifi Issue #83313 can not resolve in current PR screen-20260306-004117.1.mp4 |
| // This context allows us to disable the safe area padding offsetting the offline indicator in scrollable components like 'ScrollView', 'SelectionList' or 'FormProvider'. | ||
| // This is useful e.g. for the RightModalNavigator, where we want to avoid the safe area padding offsetting the offline indicator because we only show the offline indicator on small screens. | ||
| const {isInNarrowPane} = useContext(NarrowPaneContext); | ||
| const shouldMoveAccessibilityFocus = getPlatform() === CONST.PLATFORM.WEB && isMobile() && shouldUseNarrowLayout && isInNarrowPane; |
There was a problem hiding this comment.
Could you please explain the new update shouldUseNarrowLayout && isInNarrowPane from previous PR?
There was a problem hiding this comment.
I added isInNarrowPane because shouldUseNarrowLayout alone is true for all narrow mobile screens, including normal app pages. We only want to move accessibility focus for the RHP/narrow-pane flow in this issue, so isInNarrowPane keeps the fix scoped to that context and avoids affecting other narrow-layout screens.
@suneox, thanks for the review. Let me check, it was fixed on my end based on this comment |
It happens on real devices, not on simulators. |
|
@suneox Thanks for checking. I couldn’t reproduce this on either a real device or an emulator. Real device record in current branch: no-blue-line-on-real-device.mp4 |
|
@suneox I re-verified the regression on real devices and I was not able to reproduce it on Samsung A50 (Android 11), Redmi Note 13 (Android 15), or on an emulator. I also kept the previous fix scope limited to the narrow-pane/RHP flow to avoid impacting regular narrow-layout screens. The latest updates are applied, and this PR should be ready for review. Please do a recheck on your device again please, thanks. regression-not-repro-on-note-13.mp4 |
Reviewer Checklist
Screenshots/VideosAndroid: HybridAppscreen-20260212-000015.mp4screen-20260211-232034.mp4Android: mWeb Chromescreen-20260212-000618.mp4screen-20260212-000427.mp4iOS: HybridAppScreenRecording_02-11-2026.18-24-29_1.mp4iOS: mWeb SafariScreenRecording_02-11-2026.18-59-12_1.mp4MacOS: Chrome / SafariNot available modal overlay navigation bar |
@marufsharifi I'd like to confirm the remaining issue has been fixed on pixel 8 (Android 16) screen-20260308-231612-1772986390343.1.mp4 |
|
@suneox I addressed the latest comment. The PR should now be ready for your final review. |
|
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
|
🚧 @madmax330 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/madmax330 in version: 9.3.34-0 🚀
|
|
🚀 Deployed to production by https://github.com/luacmartins in version: 9.3.34-2 🚀
|
Explanation of Change
Ensure screen reader focus shifts correctly when menus open across pages.
Fixed Issues
$ #74858
PROPOSAL: #74858 (comment)
Tests
settings > aboutOffline tests
Same as Tests.
QA Steps
Same as Tests.
// TODO: These must be filled out, or the issue title must include "[No QA]."
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectiontoggleReportand 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
android-native-bottom-tabs-not-announce.mp4
Android: mWeb Chrome
android-mweb-bottom-tabs-not-announce.mp4
iOS: Native
Screen.Recording.2026-02-08.at.3.16.57.PM.mov
iOS: mWeb Safari
Screen.Recording.1404-11-19.at.5.38.54.PM.mov
MacOS: Chrome / Safari
Screen.Recording.2026-02-08.at.1.15.24.PM.mov