Skip to content

Make the rich message editor accessible to screen readers - #2168

Open
mehranlatifi83 wants to merge 1 commit into
DrKLO:masterfrom
mehranlatifi83:fix/talkback-rich-editor-blocks-unreachable
Open

mehranlatifi83 wants to merge 1 commit into
DrKLO:masterfrom
mehranlatifi83:fix/talkback-rich-editor-blocks-unreachable

Conversation

@mehranlatifi83

@mehranlatifi83 mehranlatifi83 commented Oct 1, 2026 •

Copy link
Copy Markdown

Problem

In the rich message editor (ui/iv):

  • Blocks are reordered by long press and drag, and deleted by dragging to a trash bin.
  • All text blocks read the same, so headings, quotes, code and list items cannot be told apart.
  • Checklist checkboxes are unlabeled buttons with no state; the toggle arrow of collapsible blocks is unlabeled.
  • Dividers, formulas, files, music, and photos/videos of a block are drawn only, so they cannot be found, moved or deleted, and their tap actions (play music, open or download a file, edit a formula, pick media or cancel upload) are touch-only. Slideshow pages change only by swiping, and the slideshow/collage toggle was labeled "More options".
  • In tables, the row and column handles are drawn and touch-only, so rows and columns cannot be added, removed or merged, cells do not say their position, and the six alignment buttons in the table menu are unlabeled.

Fix

  • RichEditorListView: each block has "Move up", "Move down" and, for non-text blocks, "Delete" actions, using the same code as drag and the trash bin (including moving into quotes and undo history).
  • RichEditText: text blocks report their type (heading level, quote, code, footer, list) as state description; table cells report "Row X, column Y" and have actions to open the row, column or cell options menu.
  • Checklist checkboxes are checkboxes with state; the toggle arrow says Expand or Collapse.
  • Divider, formula, file and map blocks are labeled; files and formulas work on double tap. Music (RichAudioCell) is a virtual node that plays, pauses and seeks. Photos of a block (RichMediaCell) are virtual nodes with their upload state; double tap picks media or cancels the upload, and slideshows change pages with scroll actions. The slideshow toggle says "Show as slideshow" or "Show as collage".
  • The six alignment buttons are labeled.

Testing

With TalkBack on, write a rich message with a heading, a quote, a divider, a photo, a table and a toggle.

Before: blocks could not be moved or deleted, and many parts were unreachable or unlabeled. After: each block has Move up, Move down and Delete, text blocks say their type, and table cells open their options.

A rich message is written as a column of blocks: paragraphs, headings,
quotes, code, lists and checklists, toggles, tables, formulas, dividers,
photos and videos, music, files and maps. Much of it was closed to a
screen reader.

The blocks are put in order by holding one and dragging it, and thrown
away by dragging it onto a bin, by a finger alone. A list in order by
dragging was given moves for a screen reader elsewhere, but here they
would have skipped what the editor does after a drop, such as taking a
block into a quote it was dropped in.

Every text read the same, so a heading, a quote, a line of code and a
list item could not be told apart. A checklist box was a button with no
name and no state, and the arrow that opens and closes a toggle was a
button with no name.

A divider, a formula, a file, a piece of music, and the photos and
videos of a block are drawn by hand, so they were nothing at all: they
could not be found, let alone moved or thrown away. The button that
plays the music, the one that opens or downloads a file, the formula
that opens its editor when pressed, and a photo that opens the picker
when it is empty or stops its upload while it goes up, all answered a
finger alone. The pages of a slideshow turn by a swipe alone, and the
button that turns a group of photos into a slideshow and back was
called More options.

In a table, the handles along the edges that open the options of a row
or a column are drawn and pressed by a finger alone, so rows and
columns could not be added, removed or merged, and a cell did not say
where in the table it stood.

Now each block carries actions that move it up or down and, for the
ones that are not text, throw it away, through the very calls a drag
and a drop on the bin make, with the editor's own care after them.
A text says the kind of block it is in, a checklist box is a checkbox
that says if it is checked, and the toggle arrow says what it does and
whether it is open. The blocks drawn by hand are read with what they
are and what they hold, and press as a finger does. The music can be
played, paused and moved through. The photos of a block are read one
by one with their state, and a slideshow turns by the scroll gestures.
The slideshow button says what it will do. A table cell says its row
and column, and has actions that open the options of its row, its
column or itself, as the handles do. The six alignment buttons of that
menu, icons alone, say the way each one aligns.
@mehranlatifi83
mehranlatifi83 force-pushed the fix/talkback-rich-editor-blocks-unreachable branch from d8b6446 to 980df77 Compare October 1, 2026 23:22
@mehranlatifi83 mehranlatifi83 changed the title Let a screen reader build a rich message block by block Make the rich message editor accessible to screen readers Oct 1, 2026
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