Skip to content

fix(a11y): announce selection state on picker rows - #1627

Merged
bmc08gt merged 2 commits into
code/cashfrom
fix/picker-selection-semantics
Sep 30, 2026
Merged

bmc08gt merged 2 commits into
code/cashfrom
fix/picker-selection-semantics

Conversation

@bmc08gt

@bmc08gt bmc08gt commented Sep 30, 2026 •

Copy link
Copy Markdown
Collaborator

TalkBack read every row in the currency, token, group-currency, and group-invite pickers the same way. The selection was shown only by the ic_checked/ic_unchecked image, which had an empty or null description, and the rows had no selection state.

  • Single-choice rows (ListRowItem, TokenBalanceRow with TokenSelectionStyle.Checkbox, AllCurrenciesCard) use Modifier.selectable with Role.RadioButton, so TalkBack says "selected" or "not selected". A TokenBalanceRow that shows the mark without an onClick sets selected through semantics instead.
  • RecentChatRow in the group invite sheet is multi-select and already declared Role.Checkbox, so it now uses Modifier.toggleable and reads as "checked" or "not checked".
  • The check images, and the currency flags in ListRowItem and TokenBalanceRow, are decorative (contentDescription = null). The flags had "", which left TalkBack an unlabelled image next to the currency name. Visuals are unchanged.

One behaviour change: region currencies with no rate were not clickable before. They are now disabled selectable rows, so TalkBack also reads them as disabled.

The currency, token, group-currency, and group-invite pickers mark the
picked row with the ic_checked/ic_unchecked image, but gave the image an
empty or null description and the row no selection state, so TalkBack
read every row the same.

The single-choice rows (ListRowItem, TokenBalanceRow with the Checkbox
style, AllCurrenciesCard) now use Modifier.selectable with
Role.RadioButton, and TalkBack says "selected" or "not selected". A
TokenBalanceRow that shows the mark without taking taps sets `selected`
through semantics instead. The group invite list is multi-select, so its
rows use Modifier.toggleable with Role.Checkbox and are read as "checked"
or "not checked". The check images stay decorative.

Currencies without a rate were not clickable before; they are now
disabled selectable rows, so TalkBack also reads them as disabled.
@bmc08gt bmc08gt self-assigned this Sep 30, 2026
@github-actions github-actions Bot added the type: fix Bug fix label Sep 30, 2026
The flag sits next to the currency name, so an empty description only
gave TalkBack an extra unlabelled image to land on.
@bmc08gt
bmc08gt merged commit 7eb871b into code/cash Sep 30, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

type: fix Bug fix

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant