$npx -y skills add hanamizuki/solopreneur --skill accessibilityExpert checklist and prompts for auditing and fixing Android accessibility issues, especially in Jetpack Compose.
| 1 | # Android Accessibility Checklist |
| 2 | |
| 3 | ## Instructions |
| 4 | |
| 5 | Analyze the provided component or screen for the following accessibility aspects. |
| 6 | |
| 7 | ### 1. Content Descriptions |
| 8 | * **Check**: Do `Image` and `Icon` composables have a meaningful `contentDescription`? |
| 9 | * **Decorative**: If an image is purely decorative, use `contentDescription = null`. |
| 10 | * **Actionable**: If an element is clickable, the description should describe the *action* (e.g., "Play music"), not the icon (e.g., "Triangle"). |
| 11 | |
| 12 | ### 2. Touch Target Size |
| 13 | * **Standard**: Minimum **48x48dp** for all interactive elements. |
| 14 | * **Fix**: Use `MinTouchTargetSize` or wrap in `Box` with appropriate padding if the visual icon is smaller. |
| 15 | |
| 16 | ### 3. Color Contrast |
| 17 | * **Standard**: WCAG AA requires **4.5:1** for normal text and **3.0:1** for large text/icons. |
| 18 | * **Tool**: Verify colors against backgrounds using contrast logic. |
| 19 | |
| 20 | ### 4. Focus & Semantics |
| 21 | * **Focus Order**: Ensure keyboard/screen-reader focus moves logically (e.g., Top-Start to Bottom-End). |
| 22 | * **Grouping**: Use `Modifier.semantics(mergeDescendants = true)` for complex items (like a row with text and icon) so they are announced as a single item. |
| 23 | * **State descriptions**: Use `stateDescription` to describe custom states (e.g., "Selected", "Checked") if standard semantics aren't enough. |
| 24 | |
| 25 | ### 5. Headings |
| 26 | * **Traversal**: Mark title texts with `Modifier.semantics { heading() }` to allow screen reader users to jump between sections. |
| 27 | |
| 28 | ## Example Prompts for Agent Usage |
| 29 | * "Analyze the content description of this Image. Is it appropriate?" |
| 30 | * "Check if the touch target size of this button is at least 48dp." |
| 31 | * "Does this custom toggle button report its 'Checked' state to TalkBack?" |