Skip to content

[Android] TalkBack revisits rendered markdown as fragmented children after the whole block #182

@malopezr7

Description

@malopezr7

Bug summary

On Android with TalkBack enabled, rendered markdown can first be announced as a whole block and then be revisited again through fragmented child stops derived from visual text wrapping.

In practice this creates repetitive navigation such as:

  • whole block announcement
  • then the same content again, split into smaller fragments
  • inline links exposed as surrounding text + link + trailing punctuation

This is especially noticeable with headings, numbered lists, and inline links.

Library version

0.4.0

Environment info

System:
  OS: macOS 26.3.1
  CPU: (11) arm64 Apple M3 Pro
Binaries:
  Node:
    version: 22.16.0
Managers:
  CocoaPods:
    version: 1.16.2
SDKs:
  Android SDK API Levels:
    - 34
    - 35
    - 36
IDEs:
  Android Studio: 2025.3 AI-253.30387.90.2532.14935130
npmPackages:
  react:
    installed: 19.2.3
  react-native:
    installed: 0.84.1
Android:
  hermesEnabled: true
  newArchEnabled: true

Steps to reproduce

  1. Render markdown like the following in the example app:
# Incident tracking

1. Review open roles in our [jobs portal](https://example.com).
2. Prepare your CV as PDF or a clear image.
3. If you already opened a case, reply with `REF-123`.
  1. Enable TalkBack.
  2. Navigate through the markdown using swipe gestures.
  3. Observe that TalkBack may announce the whole block first and then revisit the same content as fragmented children instead of semantic items.

Reproducible example repository

https://github.com/software-mansion-labs/react-native-enriched-markdown/tree/main/example

Expected behavior

TalkBack navigation should follow semantic markdown units instead of rendered line fragments:

  • heading as one stop
  • paragraph as one stop
  • list item as one stop
  • link as a separate interactive stop
  • no duplicated “whole block first, then fragmented children” pattern

Additional context

This issue is about Android TalkBack navigation behavior specifically. The core problem is semantic fragmentation driven by visual layout rather than markdown structure.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions