Skip to content

Add accessible labels to message delivery status indicators - #7915

Open
heath-toby wants to merge 1 commit into
signalapp:mainfrom
heath-toby:a11y/message-status-label
Open

Add accessible labels to message delivery status indicators#7915
heath-toby wants to merge 1 commit into
signalapp:mainfrom
heath-toby:a11y/message-status-label

Conversation

@heath-toby

Copy link
Copy Markdown

First time contributor checklist:

Contributor checklist:

  • My contribution is not related to translations. (It adds new source strings in _locales/en/messages.json; it does not submit translated locales.)
  • My commits are in nice logical chunks with good commit messages
  • My changes are rebased on the latest main branch
  • A pnpm run ready run passes successfully (verified: prettier, check:types, oxlint, intl-linter, and icu-types generation all pass; the display-dependent Electron test step was not run locally)
  • My changes are ready to be shipped to users

Description

The outgoing message delivery-status indicator (sending / sent / delivered / read / viewed / paused) is rendered as an icon-only <div> with no text alternative. Sighted users can see at a glance whether a message was delivered or read; screen reader users get nothing — the element is unlabeled, so it is not even surfaced to the accessibility tree.

This change adds role="img" and an aria-label (derived from the existing status value via the message's i18n) to that indicator. Assistive technologies now announce "Sent" / "Delivered" / "Read" / "Viewed" alongside the timestamp, bringing Desktop to parity with how status is already conveyed on Signal mobile. It is an accessibility-only change with zero visual impact, and only applies to your own outgoing messages (the indicator is already outgoing-only).

  • New strings: icu:MessageMetadata__status--{sending,sent,delivered,read,viewed} (the paused state reuses the existing icu:sendPaused).
  • error / partial-sent are intentionally left unlabeled here because they are already surfaced as visible text elsewhere in the metadata.

Transparency: the diff was drafted with AI assistance, then reviewed and manually tested by me on a real device with a screen reader.

Test approach

  • Manual testing: Patched a running Signal Desktop to apply the same role/aria-label to the status indicator, then navigated my own sent messages with the Orca screen reader. Each message row now reads as content → timestamp → status (e.g. "…, 14:32, Read"). Verified the label updates live as a message transitions sent → delivered → read, and that paused reads as "Send paused".
  • Screen reader / OS: Orca on Arch Linux (Wayland). Because aria-label is consumed by Chromium's accessibility engine, the same label is exposed through NSAccessibility (macOS/VoiceOver) and UI Automation (Windows/NVDA, JAWS, Narrator) with no platform-specific code.
  • Automated tests: none added; this is a labeling-only change to an existing element.

The outgoing message status indicator (sending/sent/delivered/read/viewed/
paused) is rendered as an icon-only div with no text alternative, so screen
reader users get no indication of a message's delivery state.

Add role="img" and an aria-label derived from the status, so assistive
technology announces "Sent" / "Delivered" / "Read" / "Viewed" alongside the
timestamp, matching the information sighted users get from the icon. This is
an accessibility-only change with no visual impact.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant