fix: a11y continuous improvements#3632
Open
isekovanic wants to merge 9 commits into
Open
Conversation
Contributor
SDK Size
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
🎯 Goal
Cross platform a11y fixes across the message surface (message row, footer, reactions, replies) and the channel preview list. VoiceOver / TalkBack now read each surface with proper labels, no misleading affordances, and correct focus behavior.
🛠 Implementation details
VoiceOverfocus on the navigation back button. Reply now focuses the composer's text input when a screen reader is active, and announces "Replying to {user}" + "Editing message" viauseAnnounceOnShowso the user knows the composer entered reply/edit mode.announced.
accessible+accessibilityRole='text'(cross-platform compose), withMessageStatusrendering a HiddenA11yText for the localized status string. Footer announces as one stop: "Read, 11:05 AM".
Pressable's auto compose (emoji names + "you reacted" tag for own + "and N more reactions" suffix), with hint "Double tap to view reactions". Segmented reactions stay as per-itemPressables with the same "you reacted" tagging.accessible={false}to cover any interactive children (attachments,quoted_message,poll,shared_location). Plain text messages keep their single focus stop behavior; rich messages drill in.New shared components
CompositeAccessibilityProbe(package/src/components/Accessibility/) - wraps nonTextvisual content (avatars, icons, badges) so it announces as one focus stop with a curated label. Internally renders a hiddenTextsibling + a decorative markedViewaround children. Used byChannelAvatar,ChannelPreviewMutedStatus,ChannelMessagePreviewDeliveryStatus. Solves the iOS vs Android composition asymmetry where Android'simportantForAccessibility='no-hide-descendants'leaks through nestedaccessible={true}descendants.HiddenA11yText(package/src/components/Accessibility/) - visually invisibleTextwhose only job is to splice extra info into a parent's compose loop (e.g. "you reacted", "and N more reactions", localized delivery status). Different concern from the probe - this is for adding text to a composition chain, not for collapsing a subtree into one stop.Both are exported from the SDK so consumers building their own custom message / preview UIs can reuse the patterns.
🎨 UI Changes
iOS
Android
🧪 Testing
☑️ Checklist
developbranch