Use when you need to review Android interfaces against Material conventions, navigation, accessibility, and device behavior.
How this skill is triggered — by the user, by Claude, or both
Slash command
/skillry-mobile-desktop:27-android-material-reviewThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Audit an Android interface (Jetpack Compose or View-based XML) against Material Design 3: edge-to-edge layout, predictive back gesture, dynamic color theming, touch ripple, density-independent sizing, adaptive icons, and TalkBack accessibility. The output is a set of findings with Material 3 spec references and a concrete fix for each, ranked by Play Store submission risk and device-behavior im...
Audit an Android interface (Jetpack Compose or View-based XML) against Material Design 3: edge-to-edge layout, predictive back gesture, dynamic color theming, touch ripple, density-independent sizing, adaptive icons, and TalkBack accessibility. The output is a set of findings with Material 3 spec references and a concrete fix for each, ranked by Play Store submission risk and device-behavior impact. The review reads source only and never triggers Gradle builds, signing, or Play Console uploads.
ios-hig-review.mobile-app-review first to pick the right audit path.compileSdk, targetSdk, and minSdk. Confirm Jetpack Compose, XML Views, or both. Check the androidx.compose.material3 dependency version.enableEdgeToEdge() (or WindowCompat.setDecorFitsSystemWindows(window, false)) in onCreate. Confirm WindowInsets padding is applied to scrolling containers and FABs so content is not clipped behind the gesture bar.android:enableOnBackInvokedCallback="true" in the manifest for Android 13 and later targets. Verify OnBackPressedCallback or Compose BackHandler is used instead of overriding the deprecated onBackPressed().primary, surface, onSurface, error) must come from the theme, not hardcoded hex. Offer dynamicColorScheme on Android 12 and later.MaterialTheme.typography.* tokens (bodyLarge, titleMedium) or TextAppearance.Material3.* in XML. Font sizes must be in sp; layout dimensions in dp, never raw px.Modifier.clickable {} (which supplies a ripple) or an explicit indication = ripple(). XML clickable views need ?attr/selectableItemBackground.ic_launcher.xml splits foreground and background layers, is not letter-boxed on circular launchers, and includes a <monochrome> layer for Android 13 and later themed icons.ModalBottomSheet and BottomSheetScaffold from material3, not the deprecated material2 BottomSheetDialog. Dialogs must support dismissal (tap-outside and back gesture).Modifier.minimumInteractiveComponentSize() in Compose; minWidth/minHeight 48dp in XML.contentDescription on image-only buttons; set contentDescription = null on decorative images; verify reading order with semantics { traversalIndex } where needed.NavController drives navigation instead of manual back-stack manipulation, and that deep links are declared in the navigation graph, not only the manifest.Layout and back gesture:
OnBackInvokedCallback is registered; the deprecated onBackPressed override is removed.Theming and density:
material3 dependency is present; color roles come from the theme with no hardcoded hex.dynamicColorScheme is offered on Android 12 and later.MaterialTheme.typography.*; text is in sp, dimensions in dp.Feedback and icons:
selectableItemBackground is present on all interactive elements.Touch and accessibility:
minimumInteractiveComponentSize().contentDescription on icon buttons; decorative images are null.NavController drives navigation; deep links are in the nav graph.# --- SDK / version ---
# SDK levels and material3 version
rg -n 'compileSdk|targetSdk|minSdk|material3' . 2>/dev/null | head
# --- edge-to-edge / back ---
# edge-to-edge enabled?
rg -n 'enableEdgeToEdge|setDecorFitsSystemWindows' .
# deprecated back handling
rg -n 'override fun onBackPressed' .
# window insets consumed on bottom content?
rg -n 'windowInsetsPadding|WindowInsets.navigationBars|systemBarsPadding' . | head
# --- theming / density ---
# material2 imports mixed into a material3 app
rg -n 'androidx\.compose\.material\.(Button|Scaffold|TopAppBar|AlertDialog)\b' .
# hardcoded hex colors and px dimensions (theming/density smells)
rg -n '#[0-9a-fA-F]{6}|[0-9]+px' . | head -40
# hardcoded status-bar color (breaks dynamic color)
rg -n 'statusBarColor|navigationBarColor' .
# --- touch / feedback ---
# touch-target enforcement in Compose
rg -n 'minimumInteractiveComponentSize|sizeIn\(minWidth' .
# ripple / selectable background on clickable views
rg -n 'selectableItemBackground|Modifier.clickable|indication' . | head
# --- accessibility / nav ---
# TalkBack content descriptions on icon buttons
rg -n 'contentDescription' . | head
# NavController usage and nav-graph deep links
rg -n 'NavController|navController|deepLink|navDeepLink' . | head
# --- ANR risk ---
# main-thread I/O (ANR on low-end devices)
rg -n 'getSharedPreferences|\.query\(|readText\(\)' . | head
# --- bottom sheet / dialog ---
# material2 bottom sheet / dialog still in use
rg -n 'BottomSheetDialog|android\.app\.AlertDialog' . | head
# --- adaptive icon ---
# adaptive icon layers including a monochrome layer
rg -n 'monochrome|<foreground|<background' . app/src/main/res 2>/dev/null | head
# --- orientation ---
# locked orientation declared intentionally?
rg -n 'screenOrientation' .
Modifier.windowInsetsPadding(WindowInsets.navigationBars) on bottom content hides it behind the gesture bar on gesture-nav devices.window.statusBarColor directly breaks dynamic color and dark mode on Android 12 and later. Let the system manage bar color via WindowCompat.androidx.compose.material.Button in a Material 3 app breaks theming — all components must come from androidx.compose.material3.AlertDialog: android.app.AlertDialog bypasses Material 3 shape and color. Use androidx.compose.material3.AlertDialog.screenOrientation="portrait" is fine for some games but should be a deliberate, declared choice for general apps.Dispatchers.IO.<monochrome> drawable, so the app icon falls back to a generic look under Android 13 themed icons.Modifier.clickable without an indication, or an XML view with no selectableItemBackground, so taps give no visual feedback.Return a structured report with:
AndroidManifest.xml permissions without listing every change explicitly for user review.gradle.properties or resource files.Done means SDK levels and the UI system are identified; edge-to-edge, predictive back, Material 3 theming, typography and density, ripple, the adaptive icon, touch targets, TalkBack, and navigation were each checked; every finding cites a Material 3 area and a concrete fix; and the top three submission blockers are called out with a TalkBack and edge-to-edge pass/fail summary.
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub fluxonlab/skillry --plugin skillry-mobile-desktop