Opnamestroken laten een schermlezer elke seconde (en 50× per seconde) iets aankondigen #2757

Open
opened 2026-11-02 23:47:01 +00:00 by brenno · 1 comment
Owner

Gevonden in de kritische review van 03-11-2026 (toegankelijkheid).

Wat er misgaat

De twee opnamestroken zijn als live region gemarkeerd, maar wat erin staat verandert continu. Een live region kondigt elke verandering beleefd aan, ook zonder focus (zie de Flutter-documentatie bij SemanticsProperties.liveRegion). Een schermlezer krijgt zo een aankondiging per seconde, of vaker:

  • RecordingIndicator (lib/widgets/panels/recording_indicator.dart r. 58–60): het label is '$running, $duration', en duration verandert elke seconde. In dezelfde region staan een niveaumeter (LinearProgressIndicator, die als "voortgang, NN%" wordt voorgelezen en per audioblok verandert) en de voorlopige transcriptietekst.
  • CallRecordingSection (lib/widgets/panels/call_recording_controls.dart r. 88–92): tijdens bezig staat de teller "Ontvangen brokken: N" in de region (r. 153–157). Die loopt 50 keer per seconde op (één tik per 20 ms).

Een schermlezergebruiker die tijdens een opname iets anders wil lezen, wordt voortdurend onderbroken. WCAG 2.2.2 en de ARIA-praktijk zeggen hetzelfde: een tikkende klok of meter hoort níét in een live region (role="timer" staat daarom standaard op aria-live="off").

Voorstel

  • Het live-region-label beperkt zich tot wat een melding waard is: dát er een opname loopt en met welke bronnen. Duur, niveaumeter en teller blijven zichtbaar en zijn leesbaar wanneer je ernaartoe navigeert, maar vallen buiten de aankondiging.
  • De niveaumeter krijgt geen "voortgang"-semantiek: het is geen voortgang.

Wat overeind moet blijven

  • De aankondiging bij het begin en de foutmelding (fout) van de callopname.
  • De Stop-knop met zijn label "Opname stoppen".
  • Wat er visueel staat: duur, meter, voorlopige tekst, teller.

Test

Een widgettoets met SemanticsHandle: na een paar seconden opname is het label van de live-region-knoop ongewijzigd, en de knoop bevat geen kind dat per tik verandert. Rood op de huidige code.

Gevonden in de kritische review van 03-11-2026 (toegankelijkheid). ## Wat er misgaat De twee opnamestroken zijn als *live region* gemarkeerd, maar wat erin staat verandert continu. Een live region kondigt elke verandering beleefd aan, ook zonder focus (zie de Flutter-documentatie bij `SemanticsProperties.liveRegion`). Een schermlezer krijgt zo een aankondiging per seconde, of vaker: - **`RecordingIndicator`** (`lib/widgets/panels/recording_indicator.dart` r. 58–60): het label is `'$running, $duration'`, en `duration` verandert elke seconde. In dezelfde region staan een niveaumeter (`LinearProgressIndicator`, die als "voortgang, NN%" wordt voorgelezen en per audioblok verandert) en de voorlopige transcriptietekst. - **`CallRecordingSection`** (`lib/widgets/panels/call_recording_controls.dart` r. 88–92): tijdens `bezig` staat de teller "Ontvangen brokken: N" in de region (r. 153–157). Die loopt 50 keer per seconde op (één tik per 20 ms). Een schermlezergebruiker die tijdens een opname iets anders wil lezen, wordt voortdurend onderbroken. WCAG 2.2.2 en de ARIA-praktijk zeggen hetzelfde: een tikkende klok of meter hoort níét in een live region (`role="timer"` staat daarom standaard op `aria-live="off"`). ## Voorstel - Het live-region-label beperkt zich tot wat een melding waard is: dát er een opname loopt en met welke bronnen. Duur, niveaumeter en teller blijven zichtbaar en zijn leesbaar wanneer je ernaartoe navigeert, maar vallen buiten de aankondiging. - De niveaumeter krijgt geen "voortgang"-semantiek: het is geen voortgang. ## Wat overeind moet blijven - De aankondiging bij het begin en de foutmelding (`fout`) van de callopname. - De Stop-knop met zijn label "Opname stoppen". - Wat er visueel staat: duur, meter, voorlopige tekst, teller. ## Test Een widgettoets met `SemanticsHandle`: na een paar seconden opname is het label van de live-region-knoop ongewijzigd, en de knoop bevat geen kind dat per tik verandert. Rood op de huidige code.
Author
Owner

Opgepakt (kritische review 03-11-2026). Tak: fix/recording-live-region-2757. Verwachte reikwijdte: lib/widgets/panels/recording_indicator.dart, call_recording_controls.dart, test/.

Opgepakt (kritische review 03-11-2026). Tak: fix/recording-live-region-2757. Verwachte reikwijdte: lib/widgets/panels/recording_indicator.dart, call_recording_controls.dart, test/.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
LibreKAT/Ocideck#2757
No description provided.