Background A Voluntary Product Accessibility Template (VPAT) is a document that outlines how well a product aligns with accessibility (a11y) standards. Its primary purpose is to inform customers about a product’s a11y features, enabling them to make informed decisions before purchasing software. At Slack, we conducted a VPAT by a third party a11y vendor in…
Overview
This article details Slack's journey through a Voluntary Product Accessibility Template (VPAT) assessment for their Android app, conducted by a third-party vendor in 2024 following their IA4 UI redesign. It covers the major recurring accessibility themes identified, including inaccessible error messages, missing headings, label issues, and drag-and-drop accessibility, along with detailed resolution strategies and lessons learned for each issue mapped to specific WCAG standards.
What You'll Learn
How to make error messages accessible to TalkBack screen reader users on Android
How to implement accessible drag-and-drop alternatives using TalkBack custom actions
Why decorative elements like dividers should be excluded from accessibility list item counts
When to deviate from WCAG web standards for Android-native accessibility patterns
How to conduct a VPAT triage process and prioritize accessibility issues by severity
Prerequisites & Requirements
- Basic understanding of Android development and UI components
- Familiarity with accessibility concepts and screen readers (TalkBack)
- Understanding of WCAG (Web Content Accessibility Guidelines) standards(optional)
- Android TalkBack screen reader for testing accessibility changes(optional)
Key Questions Answered
What is a VPAT and why is it important for software products?
How do you make Android error messages accessible to TalkBack users?
How do you fix incorrect list item counts announced by TalkBack on Android?
How do you make drag-and-drop accessible on Android for users with motor impairments?
Should strikethrough text formatting be announced by screen readers?
How do you indicate errors without relying on color alone on Android?
Do WCAG web standards fully apply to Android native apps?
Should Android app bar titles be marked as headings for accessibility?
Technologies & Tools
Key Actionable Insights
1Always ensure error messages are immediately announced to screen reader users when they occur, rather than requiring users to navigate to discover them. For Android, this means updating both inline error displays (OutlinedTextField) and banner-style errors (like SKBanner) to trigger TalkBack announcements automatically.This was classified as a P1 issue in Slack's VPAT because it directly prevents screen reader users from understanding the outcome of their actions, creating a fundamentally broken user experience.
2Exclude purely decorative elements like dividers from accessibility list item counts by implementing custom accessibility delegates. When TalkBack announces list item counts, decorative separators should not inflate the number, as this creates confusion about the actual number of interactive items available.Slack's SK Bottom sheet dividers were being counted as list items, causing TalkBack to announce incorrect totals. The fix involved creating an SKListAccessibilityDelegate that overwrites CollectionInfo with accurate counts.
3For any gesture-based interaction like drag-and-drop, always provide an accessible alternative through TalkBack custom actions. Add visible affordances like drag handles in an Edit mode, and implement custom actions such as 'Move before' and 'Move after' in the TalkBack context menu.Users with motor impairments may not be able to perform drag gestures. Slack added both visual drag handles and TalkBack custom actions accessible via three-finger tap or L/r drawing gestures to their workspace switcher.
4Never rely on color alone to communicate information like error states. Always pair color indicators with additional visual cues such as icons. Conduct an audit across your app to ensure consistent implementation of multi-signal error indication.This maps to WCAG 1.4.1 Use of Color (Level A). Slack found inconsistent implementation across screens and had to audit and update multiple edit field error displays to include error icons alongside red text.
5Test your accessibility decisions against native platform conventions rather than applying WCAG web standards directly to mobile native apps. Verify patterns by testing native Google apps and consulting platform-specific guidelines before implementing vendor recommendations.Slack's vendor suggested app bar titles should be headings, but this didn't match Android native patterns. The industry still lacks comprehensive platform-specific mobile accessibility guidelines, so teams must do their own research.
6Collaborate with design teams and members of the disability community when making accessibility decisions, especially for ambiguous cases. Small UI changes like adding a search icon to an edit field can significantly improve the experience for users with cognitive difficulties who may forget the purpose of unlabeled fields.Slack worked with their design team and blind community members to resolve issues like the strikethrough formatting question, which led to a pragmatic decision that most screen readers intentionally don't announce this format.