Skip to content

feat(a11y): comprehensive VoiceOver accessibility audit fixes#293

Merged
cassio-rossi merged 1 commit into
release/v5from
feature/voiceover-accessibility-audit
Apr 30, 2026
Merged

feat(a11y): comprehensive VoiceOver accessibility audit fixes#293
cassio-rossi merged 1 commit into
release/v5from
feature/voiceover-accessibility-audit

Conversation

@cassio-rossi
Copy link
Copy Markdown
Collaborator

Summary

  • P0 – Core functionality: Label all MiniPlayer transport buttons, expose tap gestures as accessibility actions, add search state announcements, apply cardAccessibility to news cards in search results, fix carousel cards, and add .isSelected trait to MenuView category buttons
  • P1 – High impact: Create iOS Widget accessibility extension (mirroring WatchWidget gold standard), label all xmark dismiss buttons "Fechar", label WebView loading indicator, fix MetadataDuration to use human-readable time, label PaginatedForEach loading indicator
  • P2 – Polish: Mark card thumbnails accessibilityHidden(true), remove Dynamic Type lock in podcast player speed controls, fix empty Picker label in SocialView, add .isHeader trait to recent searches section header, label the news detail back button "Voltar"

Test plan

  • Enable VoiceOver on iPhone 17 Pro simulator and navigate each modified screen
  • MiniPlayer: swipe to all buttons and verify labels; check Actions rotor for "Abrir player completo" and "Fechar mini player"
  • Search: type a query and verify VoiceOver announces "Buscando...", then "X resultados encontrados" (or "Nenhum resultado encontrado")
  • News search results: verify each card reads as a single element with title, date, favorite and share actions
  • Highlights carousel: verify each card reads post title + "Duplo toque para abrir a notícia."
  • Category filter (MenuView): verify active category is announced with "selecionado" trait
  • iOS Widget: verify small, inline and rectangular families read "MacMagazine — Última notícia: [title]"
  • All xmark buttons across Settings, WebView, DisqusSheet, and DeepLink read "Fechar"
  • Duration badges (podcast/video cards) read naturally (e.g., "1 hora, 23 minutos e 45 segundos")
  • Full podcast player: verify speed controls respond to Dynamic Type size changes
  • Build passes: xcodebuild build ✅ | swiftlint lint --strict

🤖 Generated with Claude Code

Addresses 18 accessibility gaps found across P0–P2 priority levels:

P0 – Critical (VoiceOver users blocked):
- MiniPlayerView: label skip/play buttons, expose open/dismiss as accessibility actions
- Ticker: add accessibilityLabel with podcast title
- SearchResultsList: apply cardAccessibility to news cards; podcast cards already self-apply
- SearchView: announce searching/done/empty/error states via UIAccessibility
- FeedHighlightsCarouselView: add accessibilityLabel + hint to each carousel button
- CardAccessibilityModifier (NewsLibrary): make CardLabel, CardButton, cardAccessibility public
- MenuView: add .isSelected trait to active category button

P1 – High (degraded experience):
- iOS Widget: create WidgetAccessibility+View.swift mirroring WatchWidget gold standard
- MMWebView, DisqusWebView, SettingsView, DeepLinkNewsDetailView: label all xmark dismiss buttons "Fechar"
- WebViewStatus: label ProgressView "Carregando conteúdo"
- MetadataDuration: use accessibilityTime for human-readable time labels
- PaginatedForEach: label loading indicator "Carregando mais conteúdo"

P2 – Medium (polish):
- GlassCardView, LeadingImageCard: mark decorative thumbnails accessibilityHidden(true)
- FullPlayerView, ScrollStylePicker: remove .dynamicTypeSize(.medium) lock so Dynamic Type works
- SocialView: replace empty Picker label with "Seção social"
- RecentSearchesView: add .isHeader trait to "Recentes", clarify "Limpar" button label
- NewsView: label chevron.backward back button "Voltar"

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@cassio-rossi cassio-rossi merged commit da5ce52 into release/v5 Apr 30, 2026
2 checks passed
@cassio-rossi cassio-rossi deleted the feature/voiceover-accessibility-audit branch April 30, 2026 22:19
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.

2 participants