Android accessibility validator
Skill Desquared/agents-rules-skills/skills/android-accessibility-validator
Checks and suggests accessibility improvements for Jetpack Compose and Android Views including TalkBack labels, dynamic text support, and color contrast. Use when creating or modifying UI components, screens, or when the user asks about accessibility.From its SKILL.md
npx -y skills add Desquared/agents-rules-skills --skill android-accessibility-validatorAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 4 stars4 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
2.5 KB, as published. Nobody here has run it
Accessibility Validator (Android)
Checklist
TalkBack
- Interactive elements have
contentDescriptionvia semantics - Decorative elements:
Modifier.semantics { invisibleToUser() } - Related elements:
Modifier.semantics(mergeDescendants = true) - contentDescription is localized
- Use
Role(e.g.,Role.Button,Role.Switch,Role.Checkbox) viasemantics { role = Role.Button } - Provide
stateDescriptionfor toggles/switches (e.g., "On", "Checked") - Mark headings with
semantics { heading() } - Use
onClickLabelfor custom action descriptions - Control traversal order with
isTraversalGroupandtraversalIndexwhen default order is insufficient - Override defaults with
clearAndSetSemantics { ... }for complex custom components
Dynamic Text
- Use
spfor text sizes, notdp - Use
MaterialTheme.typographyscales - Layout adapts to large text sizes
- Support pinch-to-zoom scalable content with
Modifier.transformable+ state updates where appropriate
Color Contrast
- Text: 4.5:1 (normal), 3:1 (large 18sp+)
- Use Material Theme semantic colors
- Color not sole indicator
Touch Targets
- Minimum 48dp
- Use
Modifier.minimumInteractiveComponentSize()
Testing
- Manual testing with TalkBack enabled
- Automated checks via
enableAccessibilityChecks()in Compose tests
Quick Fixes
| Issue | Fix |
|---|---|
| No contentDescription | Modifier.semantics { contentDescription = "desc" } |
| Decorative | Modifier.semantics { invisibleToUser() } |
| Group | Modifier.semantics(mergeDescendants = true) |
| Small target | Modifier.size(48.dp) |
| Fixed font | Use MaterialTheme.typography.bodyLarge |
| Missing role or state | Modifier.semantics { role = Role.Switch; stateDescription = "On" } |
| Wrong traversal order | Modifier.semantics { isTraversalGroup = true; traversalIndex = 1 } |
Severity
- 🔴 Critical: Blocks accessibility
- 🟡 Moderate: Reduces usability
- 🟢 Minor: Enhancement