Skip to content

[Due for payment 2026-06-29] [$250] Screen Reader: New Chat: Checkbox announced as variable, without role or state #77574

Closed

Description

@olenamihno

Action Performed:

Prerequisites:

  • the user is signed in
  1. Using iOS VoiceOver or Android TalkBack, open the app
  2. Navigate to the New Chat screen
  3. Swipe to focus the “Take a test drive” title with the checkbox.
  4. Note how the checkbox is announced.

Expected Result:

The screen reader should announce:

  • The role (e.g., “checkbox”),
  • The label (“Take a test drive”),
  • The state (“checked” or “not checked”).

Actual Result:

  1. The screen reader announces the element as a variable instead of a checkbox.
  2. No clear role or state information is provided.
  3. Users cannot understand that this is a checkbox or whether it is selected, which makes the form inaccessible for non-visual users.

Area issue was found in:

New Chat

Failed WCAG checkpoints

EN 9.4.1.2 Name, Role, Value https://www.etsi.org/deliver/etsi_en/301500_301599/301549/03.02.01_60/en_301549v030201p.pdf#nameddest=9.4.1.2+Name,+Role,+Value

User impact:

Providing role, state, and value information on all user interface components enables compatibility with assistive technology, such as screen readers, screen magnifiers, and speech recognition software, used by people with disabilities.

Suggested resolution:

Use the accessibilityLabel to announce the name, e.g.:

Add a checkbox role.
https://reactnative.dev/docs/accessibility#accessibilityrole

Use the checked state.
https://reactnative.dev/docs/accessibility#accessibilitystate

Environment:

Apple iPhone 12 - iOS 18.2.1, Wi-Fi - Native (No mobile browser)
Xiaomi Redmi note 14 - Android 14, Vodafone (D2) - Native (No mobile browser)

Screenshots/Videos

Image

Bug7006341_1763383037347.checkbox-take-a-test-drive-no-role-state.mp4

Version Number: Production
Reproducible in staging?: NA
Reproducible in production?: Yes
Email or phone of affected tester (no customers): No
Logs: https://stackoverflow.com/c/expensify/questions/4856 NA
Notes/Photos/Videos: Any additional supporting documentation Yes
Expensify/Expensify Issue URL: https://platform.applause.com/company/12102/products/36628/community-issues/7006341
Issue reported by: NA
Slack conversation: NA

Issue OwnerCurrent Issue Owner: @mallenexpensify
Upwork Automation - Do Not Edit
  • Upwork Job URL: https://www.upwork.com/jobs/~022056342700430204896
  • Upwork Job ID: 2056342700430204896
  • Last Price Increase: 2026-05-18

Activity

  1. melvin-bot commented on Dec 12, 2025

    @melvin-bot

    📣 @olenamihno! 📣
    Please report bugs or suggest features in the #expensify-open-source Slack channel, don't directly open issues in this repo!
    Instructions here to join the channel 📖

  2. added a commit that references this issue on Jan 8, 2026
    8add825
  3. rushatgabhane commented on May 5, 2026

    @rushatgabhane
    Member

    This issue was retested in BFV cycle 544085 (Native Apps) on 2026-04-28 and is Not Fixed.

    Screenshots / Videos

    Retest notes

    The issue is not fixed

    Description: When the focus is on the 'Take a test drive' checkbox, the screen reader incorrectly announces it as a variable instead of a checkbox. Additionally, no clear role or state information is provided, leaving users unable to determine whether the element is a checkbox or if it is selected. This lack of clarity makes the form inaccessible for non-visual users.

    Issue verified on Apple iPhone 16 - iOS 26.2.1, Wi-Fi - Native
    App Version: Version 9.3.63 and App Name: Expensify
    Screen Reader: VoiceOver
    Please see the attached video

  4. rushatgabhane commented on May 6, 2026

    @rushatgabhane
    Member

    @MelvinBot suggest a fix

  5. 57 remaining items

  6. Krishna2323 commented on Jun 25, 2026

    @Krishna2323
    Contributor

    Hey @cristipaval @rushatgabhane,

    Requesting a compensation increase for the implementation on this issue.

    • Proposed amount: $625

    • Additional fixes: Beyond the original label fix — iOS VoiceOver grouping break, stale/cut-off toggle announcements, web Enter navigating to task instead of toggling checkbox, task-title link parity with production, shared-component updates (SelectionButton, BaseAnchorForCommentsOnly)

    • Scope expansion: Started as a simple accessibilityLabel change; grew into a multi-week a11y refactor (48 commits, critical priority, multiple review rounds)

    • Core flow changes: Task checkbox toggle and navigation in chat + task details; changes touch shared checkbox/link components used app-wide

    Open to whatever the team thinks is fair. Thanks!

  7. cristipaval commented on Jun 26, 2026

    @cristipaval
    Contributor

    Hey @Krishna2323, thanks for the detailed breakdown.

    I agree the scope grew a lot here. It started as a small label fix and turned into a real accessibility change that touches shared components, so some increase is fair.

    One thing — I wouldn't weight the commit count or number of review rounds much, since some of that was iteration. The complexity and the shared-component risk are the better reasons.

    Based on that, I'd suggest $500. @mallenexpensify what do you think?

  8. melvin-bot commented on Jun 28, 2026

    @melvin-bot

    Triggered auto assignment to @mallenexpensify (Awaiting Payment)

  9. melvin-bot commented on Jun 28, 2026

    @melvin-bot

    Payment Summary

    Upwork Job

    BugZero Checklist (@mallenexpensify)

    • I have verified the correct assignees and roles are listed above and updated the necessary manual offers
    • I have verified that there are no duplicate or incorrect contracts on Upwork for this job (https://www.upwork.com/ab/applicants/2056342700430204896/hired)
    • I have verified the PR was not reverted
    • I have applied any discounts due to bugs/regressions introduced by this PR
    • I have paid out the Upwork contracts or cancelled the ones that are incorrect
    • I have verified the payment summary above is correct
  10. Krishna2323 commented on Jun 30, 2026

    @Krishna2323
    Contributor

    @mallenexpensify, friendly bump on this. Could you please take a look at the comments above when you get a chance? 🙇🏻

    #77574 (comment)

  11. mallenexpensify commented on Jul 2, 2026

    @mallenexpensify
    Contributor

    Payment Summary

    Contributor: @Krishna2323 due $500 via NewDot
    Contributor+: @mkhutornyi due $500 via NewDot

    @mkhutornyi plz complete the BZ checklist and tag me in a post once you have. Thx. (I know this is Accessibility, we need to start creating test cases for all issues soon so the BZ checklist will be helpful).

  12. mkhutornyi commented on Jul 2, 2026

    @mkhutornyi
    Contributor

    BugZero Checklist:

    • [Contributor] The offending PR has been commented on, pointing out the bug it caused and why, so the author and reviewers can learn from the mistake.

      Link to comment:

    • [Contributor] If the regression was CRITICAL (e.g. interrupts a core flow) A discussion in #expensify-open-source has been started about whether any other steps should be taken (e.g. updating the PR review checklist) in order to catch this type of bug sooner.

      Link to discussion:

    • [Contributor] If it was decided to create a regression test for the bug, please propose the regression test steps using the template below to ensure the same bug will not reach production again.

    • [BugZero Assignee] Create a GH issue for creating/updating the regression test once above steps have been agreed upon.

      Link to issue: https://github.com/Expensify/Expensify/issues/655431

    Regression Test Proposal

    Prerequisites:

    • Have a task created in a chat (e.g., "Take a test drive")
    • Enable VoiceOver on iOS, TalkBack in Android

    Test:

    iOS:

    1. Open a chat containing a task
    2. Swipe to navigate to the task action
    3. Verify the checkbox is independently focusable and announced as "Not checked, Task: <title>, checkbox, double tap to toggle"
    4. Swipe again to the title area
    5. Verify it's announced as "Task: <title>, button, double tap to activate"
    6. Double tap the checkbox to toggle completion
    7. Verify the state updates correctly

    Android:

    1. Open a chat containing a task
    2. Navigate to the task action
    3. Verify the checkbox and title are still individually focusable (no regression)
    4. Verify the accessibility label reads "Task: <title>" instead of raw HTML

    Web:

    1. Open a chat containing a task
    2. Tab through the chat messages
    3. Verify the task row is still focusable as a single element (no change from before)
    4. Verify long press / right-click context menu still works on the task row

    Do we agree 👍 or 👎

    Zapier Logs Run ID: 00040eee-0bb8-aa16-ca10-7e89567f13b4
  13. laurenreidexpensify commented on Jul 6, 2026

    @laurenreidexpensify
    Contributor

    $500 approved for @Krishna2323

  14. trjExpensify commented on Jul 9, 2026

    @trjExpensify
    Contributor

    approved $500 for @mkhutornyi

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

AccessibilityIssues affecting WACG accessibility on any platform.Awaiting PaymentAuto-added when associated PR is deployed to productionDailyKSv2ExternalAdded to denote the issue can be worked on by a contributor

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions