fix: break VoiceOver grouping on iOS so task checkbox is independently focusable#91530
fix: break VoiceOver grouping on iOS so task checkbox is independently focusable#91530Krishna2323 wants to merge 9 commits into
Conversation
…y focusable Signed-off-by: krishna2323 <belivethatkg@gmail.com>
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.
|
…sions on other platforms Signed-off-by: krishna2323 <belivethatkg@gmail.com>
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 37a3806a51
ℹ️ 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".
|
Mostly looks good. Just one issue found. After toggle checkbox, old checked state is announced. This happens on both pages.
|
…fter toggle Signed-off-by: krishna2323 <belivethatkg@gmail.com>
|
@mkhutornyi could you please check again? |
| )} | ||
| <PressableWithSecondaryInteraction | ||
| ref={popoverAnchorRef} | ||
| accessible={shouldBreakAccessibilityGrouping() && isCreatedTaskReportAction(action) ? false : undefined} |
There was a problem hiding this comment.
As setting false here, no pressed feedback. I'm afraid QA will mark this as regression
Screen.Recording.2026-05-25.at.3.50.00.AM.mov
production:
Screen.Recording.2026-05-25.at.3.51.11.AM.mov
There was a problem hiding this comment.
Tried to fix that, could you please check?
Signed-off-by: krishna2323 <belivethatkg@gmail.com>
| const [prevIsTaskCompletedFromOnyx, setPrevIsTaskCompletedFromOnyx] = useState(isTaskCompletedFromOnyx); | ||
| const [isTaskCompleted, setIsTaskCompleted] = useState(isTaskCompletedFromOnyx); |
There was a problem hiding this comment.
Double states for the same state variable seems workaround to me
There was a problem hiding this comment.
Now local state is only used when shouldBreakGrouping && isScreenReaderActive (iOS + VoiceOver).
| const [prevIsTaskCompletedFromOnyx, setPrevIsTaskCompletedFromOnyx] = useState(isTaskCompletedFromOnyx); | ||
| const [isTaskCompleted, setIsTaskCompleted] = useState(isTaskCompletedFromOnyx); | ||
|
|
||
| if (prevIsTaskCompletedFromOnyx !== isTaskCompletedFromOnyx) { | ||
| setPrevIsTaskCompletedFromOnyx(isTaskCompletedFromOnyx); | ||
| setIsTaskCompleted(isTaskCompletedFromOnyx); | ||
| } |
There was a problem hiding this comment.
This local state update logic now runs on every platform, not just iOS.
If completeTask/reopenTask ever fails or is queued offline and the underlying Onyx state doesn't flip, the local state might read "checked" briefly until the next re-render syncs back. Please verify this case.
And consider scoping this to shouldBreakGrouping only.
There was a problem hiding this comment.
Scoped. setLocalIsTaskCompleted is only called on iOS + VoiceOver. On all other platforms, isTaskCompleted resolves directly to the Onyx value.
…le click check Signed-off-by: krishna2323 <belivethatkg@gmail.com>
…edback for title area Signed-off-by: krishna2323 <belivethatkg@gmail.com>
|
@mkhutornyi Please copy/paste the Reviewer Checklist from here into a new comment on this PR and complete it. If you have the K2 extension, you can simply click: [this button] |
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 9523a108e8
ℹ️ 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".
Signed-off-by: krishna2323 <belivethatkg@gmail.com>
| <View style={[styles.flexRow, styles.flex1]}> | ||
| <Checkbox | ||
| onPress={callFunctionIfActionIsAllowed(() => { | ||
| // If we're already navigating to these task editing pages, early return not to mark as completed, otherwise we would have not found page. |
There was a problem hiding this comment.
Please restore this comment
| const iconWrapperStyle = StyleUtils.getTaskPreviewIconWrapper(hasAssignee ? avatarSize : undefined); | ||
|
|
||
| const shouldShowGreenDotIndicator = isOpenTaskReport(taskContextReport, action) && isReportManager(taskContextReport); | ||
| const taskAccessibilityLabel = taskTitleWithoutImage ? `${translate('task.task')}: ${taskTitleWithoutImage}` : translate('task.task'); |
|
When double tap "Take a test drive", it opens test drive modal instead of navigating to detail page. |
…comment Signed-off-by: krishna2323 <belivethatkg@gmail.com>
joekaufmanexpensify
left a comment
There was a problem hiding this comment.
Fine for product

Explanation of Change
Fixed Issues
$ #77574
PROPOSAL:
Tests
Here are the test steps:
Prerequisites:
iOS (Primary fix):
Android:
Web:
Offline tests
QA Steps
Same as tests
Verify that no errors appear in the JS console
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
Android: mWeb Chrome
iOS: Native
iOS: mWeb Safari
MacOS: Chrome / Safari