Edge-to-Edge Migration
SkillAI & modelsMigrate a Jetpack Compose app to edge-to-edge display and fix system bar inset issues. Use when UI components are obscured by navigation/status bars, fixing IME insets, or enabling edge-to-edge for SDK 35+.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Edge-to-Edge Migration skill
What this skill tells your AI
The instructions your AI receives, as published by hoangnguyen0403/agent-skills-standard in skills/android/android-edge-to-edge/SKILL.md and read by ahel’s review.
Priority: P1 (HIGH)
Structured workflow for migrating a Compose app to edge-to-edge display.
Prerequisites
- Project MUST use Jetpack Compose.
- Project MUST target SDK 35+. If lower, increase
compileSdkto 35.
Step 1: Plan
- Locate all Activity classes. For each without
enableEdgeToEdge(), plan to add it. - In each Activity, find all lists, FABs, and text fields that need inset handling.
- If
TextField/OutlinedTextFieldis present, plan IME inset handling.
Step 2: Enable edge-to-edge
- Add
enableEdgeToEdge()beforesetContentin everyActivity.onCreate. - Add
android:windowSoftInputMode="adjustResize"in AndroidManifest for Activities with soft keyboard.
Step 3: Apply insets
Choose ONE method per component to avoid double padding:
- PREFERRED — Scaffold: Pass
PaddingValuesto content lambda. - Material 3 components: Use built-in inset handling (
TopAppBar,NavigationBar, etc.). - Outside Scaffold: Use
Modifier.safeDrawingPadding()orwindowInsetsPadding.
See inset patterns for RIGHT/WRONG code examples.
Step 4: Handle IME
For Activities with soft keyboard:
- Set
adjustResizein manifest (NOT deprecatedSOFT_INPUT_ADJUST_RESIZE). - Add
imePadding()orfitInside(WindowInsetsRulers.Ime.current)to content container. - Place
imePaddingBEFOREverticalScroll().
See inset patterns for IME-specific RIGHT/WRONG patterns.
Step 5: Lists and FABs
- Apply inset padding to
contentPaddingofLazyColumn/LazyRow, NOT asModifier.padding()on parent. - FABs inside Scaffold are handled automatically. Outside Scaffold, use
safeDrawingPadding().
Verification
- Every
ActivitycallsenableEdgeToEdge(). -
adjustResizeset in AndroidManifest for keyboard Activities. - Text fields have IME inset handling.
- List items scroll behind system bars via
contentPadding. -
./gradlew buildsucceeds.
Anti-Patterns
- No double inset padding: Never combine
contentWindowInsets = WindowInsets.safeDrawingwithimePadding()on the same content — causes double padding when IME opens. - No parent padding on lists: Apply insets to
contentPadding, not parentModifier.padding()— parent padding clips scrolling content. - No
SOFT_INPUT_ADJUST_RESIZE: Deprecated. Use manifestadjustResizeattribute.
References
Signals
- GitHub stars
- 565
- Forks
- 163
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
android-edge-to-edge- Source
- github.com/hoangnguyen0403/agent-skills-standard