agentsclimarketplace

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

Install
npx -y skills add Desquared/agents-rules-skills --skill android-accessibility-validator

Assembled 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 contentDescription via 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) via semantics { role = Role.Button }
  • Provide stateDescription for toggles/switches (e.g., "On", "Checked")
  • Mark headings with semantics { heading() }
  • Use onClickLabel for custom action descriptions
  • Control traversal order with isTraversalGroup and traversalIndex when default order is insufficient
  • Override defaults with clearAndSetSemantics { ... } for complex custom components

Dynamic Text

  • Use sp for text sizes, not dp
  • Use MaterialTheme.typography scales
  • 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

IssueFix
No contentDescriptionModifier.semantics { contentDescription = "desc" }
DecorativeModifier.semantics { invisibleToUser() }
GroupModifier.semantics(mergeDescendants = true)
Small targetModifier.size(48.dp)
Fixed fontUse MaterialTheme.typography.bodyLarge
Missing role or stateModifier.semantics { role = Role.Switch; stateDescription = "On" }
Wrong traversal orderModifier.semantics { isTraversalGroup = true; traversalIndex = 1 }

Severity

  • 🔴 Critical: Blocks accessibility
  • 🟡 Moderate: Reduces usability
  • 🟢 Minor: Enhancement

Keep looking

Skills are one crate of 627,801. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.