xml-to-compose — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited xml-to-compose (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Convert Android XML layouts to idiomatic Jetpack Compose code.
| XML | Compose |
|---|---|
LinearLayout (vertical) | Column |
LinearLayout (horizontal) | Row |
FrameLayout | Box |
ConstraintLayout | Column/Row or ConstraintLayout (dependency) |
ScrollView | Column + Modifier.verticalScroll() |
RecyclerView | LazyColumn / LazyRow |
ViewPager2 | HorizontalPager |
| XML | Compose |
|---|---|
TextView | Text |
EditText | TextField / OutlinedTextField |
Button | Button |
ImageView | Image / AsyncImage (Coil) |
CheckBox | Checkbox |
Switch | Switch |
ProgressBar | CircularProgressIndicator / LinearProgressIndicator |
CardView | Card |
Order matters! Follow this sequence:
clickable / toggleablepadding (outer)size / fillMaxWidth / weightbackground / clipborderpadding (inner)See reference files for complete mappings:
references/layouts.md — Layout containersreferences/widgets.md — UI componentsreferences/attributes.md — XML attributes to Modifiersandroidx.compose.material3dimensionResource() or define in theme@Preview function for each composableInput:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/welcome"
android:textSize="24sp"
android:textStyle="bold"/>
<Button
android:id="@+id/action_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="@string/get_started"/>
</LinearLayout>Output:
@Composable
fun WelcomeSection(
onGetStartedClick: () -> Unit,
modifier: Modifier = Modifier
) {
Column(
modifier = modifier
.fillMaxWidth()
.padding(16.dp)
) {
Text(
text = stringResource(R.string.welcome),
fontSize = 24.sp,
fontWeight = FontWeight.Bold
)
Spacer(modifier = Modifier.height(8.dp))
Button(
onClick = onGetStartedClick,
modifier = Modifier.fillMaxWidth()
) {
Text(text = stringResource(R.string.get_started))
}
}
}
@Preview(showBackground = true)
@Composable
private fun WelcomeSectionPreview() {
WelcomeSection(onGetStartedClick = {})
}Key conversions:
match_parent → fillMaxWidth() / fillMaxHeight()wrap_content → default (no modifier needed)layout_marginTop → Spacer between elements~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.