react / react/react-native

[Android] Set AccessibilityNodeInfo.stateDescription so TalkBack stops reading "checked. on." on switches

Aperta
#58,588 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Needs: Author Feedback Needs: Repro
Lingua principale
C++
Stelle
127k
Fork
25.3k
Merge medio
1g 23h
PR unite (30g)
4

Descrizione

Description

On Android, a view with accessibilityRole="switch" and accessibilityState={{ checked: true }} is read by TalkBack as "checked. on.". TalkBack takes "on" from the Switch class name and "checked" from isChecked. It suppresses the generic word only when stateDescription is set (API 30+).

ReactAccessibilityDelegate.kt on main never calls setStateDescription: for STATE_CHECKED it sets only isCheckable and isChecked. No JS prop reaches stateDescription, so apps can't fix this without native code.

A related request, #34736 ("Custom State Descriptions"), was closed by the stale bot in 2023 without a PR.

Steps to reproduce
  1. Render <Pressable accessibilityRole="switch" accessibilityState={{ checked: true }} accessibilityLabel="Notifications" />.
  2. Turn on TalkBack and focus the element.
  3. Hear "checked. on." in the announcement.
Expected

The state is read once ("on"), not twice.

Suggested fix

In ReactAccessibilityDelegate, when accessibilityState.checked is set, also call ViewCompat.setStateDescription (or AccessibilityNodeInfoCompat.setStateDescription). For role switch it would be "on"/"off", and for role checkbox "checked"/"not checked", using Android's own localized strings. Alternatively, expose accessibilityValue.text as the stateDescription.

Versions
  • React Native 0.85.3 (Expo SDK 56). Also confirmed on main up to v0.88.0-rc.1 by reading the source.
  • TalkBack 17.

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia in ReactAccessibilityDelegate.kt, nella gestione di STATE_CHECKED, e segui il percorso con cui accessibilityRole e accessibilityState arrivano al nodo Android. Confronta il comportamento suggerito di ViewCompat o AccessibilityNodeInfoCompat per stateDescription nei ruoli switch e checkbox, quindi verifica che l’annuncio non ripeta più lo stato mentre il comportamento di accessibilità esistente rimane intatto.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
android, kotlin, react-native
Ambito
accessibility, mobile
Tipo di issue
Bug
Difficoltà
3/5
Tempo stimato
1-2 giorni
Stato di attività
Attiva
Chiarezza
Abbastanza chiara
Idoneità per principianti
68/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.