Android accessibility checklist for the EAA

A working checklist for View-based and Jetpack Compose apps. Each item says what to do, which WCAG 2.2 criterion it maps to, and how to check it.

How to use this checklist

Every item below has three parts: what to do (with the Views and Compose APIs), the WCAG 2.2 success criterion it maps to, and how to verify it. Items marked Auto can be caught by automated tooling. Items marked Manual need a person, usually with TalkBack on. Most real audits expect both.

Why WCAG 2.2: the EAA itself does not contain a technical checklist. In practice, EN 301 549 is the standard teams test against, and it covers apps through its software clauses. The version cited for legal use today (V3.2.1) maps to WCAG 2.1 AA. The September 2026 update (V4.1.1) moves to WCAG 2.2 and becomes the legal reference once the European Commission cites it in the Official Journal. Testing to WCAG 2.2 AA now covers you either way.

If you are still working out whether the EAA applies to your service, start with the EAA scope guide. For a shorter generic list without the legal mapping, see the WCAG checklist for Android.

Content labels and semantics

  • Every informative image and icon button has a description. Views: android:contentDescription. Compose: the contentDescription parameter on Image/Icon, or Modifier.semantics { contentDescription = "..." }. WCAG 1.1.1. Auto: scanners flag clickable images with no label.
  • Decorative images are hidden from accessibility services. Views: android:importantForAccessibility="no". Compose: Modifier.hideFromAccessibility() (renamed from invisibleToUser()). WCAG 1.1.1: decoration should be ignored, not read out. Manual with TalkBack.
  • Section titles are marked as headings so TalkBack users can jump between sections. Views: android:accessibilityHeading="true". Compose: Modifier.semantics { heading() }. WCAG 1.3.1. Manual: navigate by headings in TalkBack.
  • Custom controls expose a role and state. A custom toggle should announce itself as a switch, on or off. Compose: set role and stateDescription in semantics. Views: prefer standard widgets; for custom views set the node info class name and state. WCAG 4.1.2. Manual with TalkBack.
  • Related elements are grouped so they read as one unit. A list row with a title, subtitle and icon should be one announcement, not three. Compose: Modifier.semantics(mergeDescendants = true). Views: make the container focusable with one description. WCAG 1.3.1. Manual with TalkBack.

Focus order and screen reader navigation

  • Reading order matches the visual order. Compose draws in composition order, which is usually right; when it is not, use traversalIndex and isTraversalGroup. Views: android:accessibilityTraversalBefore/After. WCAG 1.3.2. Manual: swipe through the screen with TalkBack and listen for jumps.
  • Focus moves into dialogs and bottom sheets, and back afterwards. Opening a dialog should move accessibility focus to it; closing it should return focus to the element that opened it. WCAG 2.4.3. Manual with TalkBack.
  • Status changes announce themselves. Toasts, snackbars, inline success messages and loading states. Views: android:accessibilityLiveRegion="polite". Compose: Modifier.semantics { liveRegion = LiveRegionMode.Polite }. WCAG 4.1.3. Manual with TalkBack.
  • Focused elements are not hidden behind sticky bars. A focused field or button must stay visible, not sit under a sticky header or banner. WCAG 2.4.11 (new in 2.2). Manual with a keyboard or switch device.
  • Focus is visible for keyboard and D-pad users. Chromebooks, tablets with keyboards and Android TV all navigate by focus. WCAG 2.4.7. Manual with a keyboard.

Touch targets and gestures

  • Touch targets are at least 48dp x 48dp. Compose Material components (Checkbox, Switch, Slider and similar) enforce this minimum internally when they can receive actions, and Compose expands the touch area of smaller clickable composables; neighbours can still overlap, so set sizeIn(minWidth = 48.dp, minHeight = 48.dp) on small custom controls. Views: minWidth/minHeight or a TouchDelegate. WCAG 2.5.8 (new in 2.2) sets a 24 x 24 CSS pixel minimum, so the 48dp Android guidance covers it with room to spare. Auto: Accessibility Scanner flags small targets.
  • Dragging has a tap alternative. Sliders move with taps or arrow keys; drag-to-reorder has a menu or button alternative. WCAG 2.5.7 (new in 2.2). Manual.
  • Multi-finger and path gestures have a single-pointer alternative. Pinch to zoom also works with plus and minus buttons. WCAG 2.5.1. Manual.

Colour, contrast and text

  • Text contrast is at least 4.5:1, or 3:1 for large text. WCAG 1.4.3. Auto: scanners catch many cases on solid backgrounds; check text over images and gradients yourself.
  • Icons and control boundaries have 3:1 contrast against adjacent colours, when they are the only way to identify the control. WCAG 1.4.11. Manual in most cases.
  • Colour is never the only signal. Errors show an icon and text, not just a red outline; charts have labels or patterns. WCAG 1.4.1. Manual.
  • Text scales without breaking the layout. Use sp for text, avoid fixed-height containers, then set the system font size to its largest value and walk your key screens looking for clipped or overlapping text. WCAG 1.4.4 (200% resize). Manual.
  • Re-check contrast in dark theme and with dynamic colour. Material You palettes derived from wallpapers can push brand colours below contrast ratios. Manual.

Forms, errors and authentication

  • Fields have visible labels, not placeholder text alone. A placeholder disappears once the user types. Views: TextInputLayout with a hint. Compose: the label slot on text fields. WCAG 3.3.2 and 1.3.1. Auto catches some cases.
  • Errors are identified in text and announced. Say which field failed and why, in text next to the field, and make sure the screen reader announces it (error semantics or a live region). WCAG 3.3.1. Manual with TalkBack.
  • Users never re-enter information you already have. Prefill across steps, and wire up autofill (android:autofillHints in Views, autofill support in Compose). WCAG 3.3.7 (new in 2.2). Manual.
  • Login does not depend on a cognitive test. Do not block paste in password fields; offer passkeys, biometrics or device autofill instead of puzzle-style CAPTCHAs as the only option. WCAG 3.3.8 (new in 2.2). Manual.

Media, timing and motion

  • Prerecorded video with audio has captions. Media3/ExoPlayer supports subtitle tracks; ship them. WCAG 1.2.2. Manual.
  • Auto-playing or moving content can be paused. Auto-advancing carousels and banners need a pause control, or do not auto-advance. WCAG 2.2.2. Manual.
  • Users are warned before a session times out. Common in banking and payment flows, which sit squarely in EAA scope. WCAG 2.2.1. Manual.
  • Non-essential motion respects the system setting. Honour the animator duration scale ("Remove animations") for decorative animation. WCAG 2.3.3. Manual.

A testing setup that produces evidence

  • Run Google's Accessibility Scanner on your key screens on a real device. Fast, free, catches labels, small targets and some contrast issues. Auto.
  • Add the Accessibility Test Framework to your tests. Espresso: AccessibilityChecks.enable(). It also runs under Robolectric, and Compose UI tests can assert on the semantics tree directly. Auto.
  • Do a TalkBack pass with your eyes off the screen through your core flows: sign up, search, buy, settings. This is where order, grouping and announcements break. Manual.
  • Run the automated checks in CI so a regression fails the build instead of shipping. Auto.
  • Keep dated records: what you tested, what you found, what you fixed, what is still open. Dated evidence is what auditors and market-surveillance requests actually ask for.
The automated part of this list can run in every build. AccessStamp's Gradle plugin runs static accessibility checks on Views and Compose code in CI and writes a dated evidence report (JSON, HTML, PDF) you can hand to a PM or auditor. Try the free web scan to see the report format, or request pilot access for your Android project. Details in the plugin docs.

What this checklist cannot tell you

  • Automation catches a subset of issues: labels, some contrast, some touch targets. Screen reader behaviour, meaningful order and real usability need a person.
  • Passing every item here is not a legal determination of EAA conformity. Conformity is judged against national laws transposing the EAA, which differ in detail; for your specific case, talk to counsel.
  • The legally cited EN 301 549 version today maps to WCAG 2.1. This list tests to WCAG 2.2 AA, the baseline of the September 2026 standard update, so items new in 2.2 put you ahead of the change rather than behind it.

General information, not legal advice. AccessStamp records testing evidence; it does not certify compliance.

Sources