reis-mobile 0.3.6 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +24 -0
- package/README.md +175 -168
- package/THIRD_PARTY_NOTICES.md +224 -4
- package/agents/android-architect.md +89 -0
- package/agents/android-performance-engineer.md +92 -0
- package/agents/android-test-engineer.md +97 -0
- package/agents/flutter-test-engineer.md +2 -0
- package/agents/ios-architect.md +93 -0
- package/agents/ios-performance-engineer.md +92 -0
- package/agents/ios-test-engineer.md +95 -0
- package/agents/lead-mobile.md +10 -1
- package/agents/mobile-staff-engineer.md +1 -1
- package/agents/rn-architect.md +94 -0
- package/agents/rn-performance-engineer.md +92 -0
- package/agents/rn-test-engineer.md +98 -0
- package/bin/reis-mobile.mjs +59 -17
- package/commands/debate.md +10 -1
- package/commands/debug.md +60 -0
- package/commands/reis-mobile.md +7 -2
- package/core/config/project.mjs +59 -0
- package/core/registry/frontmatter.mjs +15 -4
- package/core/registry/registry.mjs +21 -1
- package/core/router/intents.mjs +2 -0
- package/core/router/router.mjs +10 -5
- package/package.json +1 -1
- package/skills/android-adaptive/SKILL.md +304 -0
- package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/container-behavior.md +112 -0
- package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/get-started.md +69 -0
- package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/index.md +81 -0
- package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/item-behavior.md +170 -0
- package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/container-properties.md +415 -0
- package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/get-started.md +51 -0
- package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/index.md +73 -0
- package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/item-properties.md +170 -0
- package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/mediaquery/index.md +333 -0
- package/skills/android-adaptive/references/android/develop/ui/compose/tooling/debug.md +114 -0
- package/skills/android-adaptive/references/android/guide/navigation/navigation-3/recipes/material-listdetail.md +141 -0
- package/skills/android-agp-9-upgrade/SKILL.md +106 -0
- package/skills/android-agp-9-upgrade/references/android/build/migrate-to-built-in-kotlin.md +416 -0
- package/skills/android-agp-9-upgrade/references/android/build/releases/agp-9-0-0-release-notes.md +554 -0
- package/skills/android-agp-9-upgrade/references/buildconfig.md +54 -0
- package/skills/android-agp-9-upgrade/references/ksp-kapt.md +39 -0
- package/skills/android-agp-9-upgrade/references/paparazzi-gradle-9.md +30 -0
- package/skills/android-agp-9-upgrade/references/recipes.md +62 -0
- package/skills/android-appfunctions/SKILL.md +74 -0
- package/skills/android-appfunctions/references/adb-interaction-testing.md +95 -0
- package/skills/android-appfunctions/references/context.md +26 -0
- package/skills/android-appfunctions/references/feature-discovery-analysis.md +71 -0
- package/skills/android-appfunctions/references/implementation-configuration.md +282 -0
- package/skills/android-appfunctions/references/kdoc-refinement-optimization.md +75 -0
- package/skills/android-appfunctions/references/migrate-to-service-entry-point.md +226 -0
- package/skills/android-camerax/SKILL.md +135 -0
- package/skills/android-camerax/references/camera1-to-camerax.md +198 -0
- package/skills/android-camerax/references/camera2-to-camerax.md +193 -0
- package/skills/android-camerax/references/expert-blueprints.md +58 -0
- package/skills/android-camerax/references/foldables.md +83 -0
- package/skills/android-camerax/references/immutability.md +60 -0
- package/skills/android-camerax/references/low-light.md +124 -0
- package/skills/android-camerax/references/mlkit-spatial.md +75 -0
- package/skills/android-camerax/references/modern-apis.md +42 -0
- package/skills/android-camerax/references/testing.md +69 -0
- package/skills/android-camerax/references/thermals.md +85 -0
- package/skills/android-camerax/references/wear-os.md +76 -0
- package/skills/android-camerax/references/xr.md +54 -0
- package/skills/android-cli/SKILL.md +474 -0
- package/skills/android-cli/references/interact.md +113 -0
- package/skills/android-cli/references/journeys.md +120 -0
- package/skills/android-code-review/SKILL.md +58 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/SKILL.md +340 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/design/ui/ai-glasses/guides/interaction/inputs.md +67 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/access-hardware-projected-context.md +388 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/buttons.md +139 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/cards.md +148 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/focus.md +107 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/icons.md +90 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/text.md +69 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/title-chips.md +82 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/request-hardware-permissions.md +213 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/button-samples-source.md +176 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/button-source.md +203 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/card-samples-source.md +296 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/card-source.md +515 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/deptheffect-source.md +224 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/deptheffectlevels-source.md +105 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/glimmersansflextypography-source.md +270 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/glimmertheme-source.md +182 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/icon-source.md +388 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/iconbutton-source.md +126 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/iconsizes-source.md +78 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/list-source.md +27 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/listitem-source.md +272 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/liststate-source.md +427 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/material-hct-source.md +217 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/projectedcontext-source.md +265 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/stack-source.md +368 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/stackitemscope-source.md +440 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/stackstate-source.md +325 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/surface-source.md +1211 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/titlechip-samples-source.md +101 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/titlechip-source.md +131 -0
- package/skills/android-edge-to-edge/SKILL.md +429 -0
- package/skills/android-engage-sdk-integration/SKILL.md +130 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/faq.md +439 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/food.md +1149 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/healthandfitness.md +1055 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/listen.md +1050 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/otherverticals.md +1301 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/read.md +910 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/shopping.md +1224 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/social.md +719 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/travel.md +1413 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/tv/continue-watching/index.md +19 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/tv/entitlements.md +353 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/tv/getting-started.md +202 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/tv/recommendations.md +471 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/watch.md +1081 -0
- package/skills/android-engage-sdk-integration/references/clusters.md +154 -0
- package/skills/android-engage-sdk-integration/references/common.md +519 -0
- package/skills/android-engage-sdk-integration/references/patterns.md +527 -0
- package/skills/android-engage-sdk-integration/references/requests.md +260 -0
- package/skills/android-engage-sdk-integration/references/schemas/food.md +509 -0
- package/skills/android-engage-sdk-integration/references/schemas/listen.md +842 -0
- package/skills/android-engage-sdk-integration/references/schemas/other.md +220 -0
- package/skills/android-engage-sdk-integration/references/schemas/read.md +412 -0
- package/skills/android-engage-sdk-integration/references/schemas/shopping.md +357 -0
- package/skills/android-engage-sdk-integration/references/schemas/social.md +228 -0
- package/skills/android-engage-sdk-integration/references/schemas/travel.md +923 -0
- package/skills/android-engage-sdk-integration/references/schemas/tv.md +1226 -0
- package/skills/android-engage-sdk-integration/references/schemas/watch.md +1137 -0
- package/skills/android-engage-sdk-integration/references/troubleshooting.md +39 -0
- package/skills/android-gradle-build-debug/SKILL.md +71 -0
- package/skills/android-intent-security/SKILL.md +550 -0
- package/skills/android-leanback-to-compose-tv-migration/SKILL.md +743 -0
- package/skills/android-leanback-to-compose-tv-migration/references/android/training/tv/get-started/navigation.md +372 -0
- package/skills/android-leanback-to-compose-tv-migration/references/android/training/tv/playback/compose/browse.md +243 -0
- package/skills/android-leanback-to-compose-tv-migration/references/android/training/tv/playback/compose/index.md +153 -0
- package/skills/android-media3-cast-integration/SKILL.md +236 -0
- package/skills/android-media3-cast-integration/references/android/media/media3/cast/create-castplayer.md +390 -0
- package/skills/android-media3-cast-integration/references/android/media/media3/cast/customize-castoptions.md +93 -0
- package/skills/android-media3-cast-integration/references/android/media/media3/cast/index.md +21 -0
- package/skills/android-migrate-xml-views-to-jetpack-compose/SKILL.md +127 -0
- package/skills/android-migrate-xml-views-to-jetpack-compose/references/analysis-of-the-project-and-layout.md +42 -0
- package/skills/android-migrate-xml-views-to-jetpack-compose/references/android/develop/ui/compose/designsystems/migrate-xml-theme-to-compose.md +171 -0
- package/skills/android-migrate-xml-views-to-jetpack-compose/references/android/develop/ui/compose/migrate/interoperability-apis/compose-in-views.md +299 -0
- package/skills/android-migrate-xml-views-to-jetpack-compose/references/android/develop/ui/compose/migrate/interoperability-apis/views-in-compose.md +286 -0
- package/skills/android-migrate-xml-views-to-jetpack-compose/references/android/develop/ui/compose/setup-compose-dependencies-and-compiler.md +197 -0
- package/skills/android-migrate-xml-views-to-jetpack-compose/references/identify-optimal-xml-candidate.md +31 -0
- package/skills/android-migrate-xml-views-to-jetpack-compose/references/xml-layout-migration.md +86 -0
- package/skills/android-ml-kit-genai-prompt-api/SKILL.md +124 -0
- package/skills/android-ml-kit-genai-prompt-api/references/get-started.md +272 -0
- package/skills/android-ml-kit-genai-prompt-api/references/prefix-caching.md +146 -0
- package/skills/android-ml-kit-genai-prompt-api/references/prompt-design.md +55 -0
- package/skills/android-ml-kit-genai-prompt-api/references/prompt-optimization.md +74 -0
- package/skills/android-ml-kit-genai-prompt-api/references/structured-output.md +219 -0
- package/skills/android-ml-kit-genai-prompt-api/references/system-instructions.md +71 -0
- package/skills/android-navigation-3/SKILL.md +122 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/index.md +51 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/migration-guide.md +670 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/animations.md +147 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/basic.md +89 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/basicdsl.md +85 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/basicsaveable.md +90 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/bottomsheet.md +195 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/common-ui.md +200 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/conditional-transitions.md +182 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/conditional.md +230 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/deeplinks-custommatcher.md +176 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/deeplinks-staticuri.md +140 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/deeplinks-syntheticbackstack.md +184 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/dialog.md +107 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/lifecycle-owner.md +185 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/material-listdetail.md +141 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/material-supportingpane.md +145 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/modular-hilt.md +283 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/modular-koin.md +287 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/multiple-backstacks.md +468 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/passingarguments.md +371 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/results-event.md +273 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/results-state.md +266 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/scenes-listdetail.md +435 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/scenes-twopane.md +244 -0
- package/skills/android-navigation-3/references/android/guide/navigation/type-safe-destinations.md +129 -0
- package/skills/android-navigation-event/SKILL.md +312 -0
- package/skills/android-navigation-event/references/android/guide/navigation/navigation-event/dispatcher.md +134 -0
- package/skills/android-navigation-event/references/android/guide/navigation/navigation-event/handle-back.md +217 -0
- package/skills/android-navigation-event/references/android/guide/navigation/navigation-event/index.md +83 -0
- package/skills/android-navigation-event/references/android/guide/navigation/navigation-event/setup.md +32 -0
- package/skills/android-play-billing-library-version-upgrade/SKILL.md +96 -0
- package/skills/android-play-billing-library-version-upgrade/references/android/google/play/billing/release-notes.md +1240 -0
- package/skills/android-play-billing-library-version-upgrade/references/migration-logic.md +78 -0
- package/skills/android-play-billing-library-version-upgrade/references/version-checklist.md +54 -0
- package/skills/android-play-policy-insights/SKILL.md +172 -0
- package/skills/android-play-policy-insights/resources/common_mandates.md +100 -0
- package/skills/android-play-policy-insights/resources/compliance_report_template.md +59 -0
- package/skills/android-play-policy-insights/resources/critic.md +86 -0
- package/skills/android-play-policy-insights/resources/goal_data_safety.md +212 -0
- package/skills/android-play-policy-insights/resources/goal_permissions_and_apis.md +459 -0
- package/skills/android-play-policy-insights/resources/goal_user_account.md +106 -0
- package/skills/android-play-policy-insights/resources/policies.json +321 -0
- package/skills/android-play-policy-insights/resources/scanner_config.json +843 -0
- package/skills/android-play-policy-insights/scripts/generate_report.py +860 -0
- package/skills/android-play-policy-insights/scripts/orchestrator.py +1313 -0
- package/skills/android-play-policy-insights/scripts/play_store_scraper.py +410 -0
- package/skills/android-play-policy-insights/scripts/scanner.py +261 -0
- package/skills/android-play-policy-insights/scripts/template_engine.py +243 -0
- package/skills/android-profiler/SKILL.md +60 -0
- package/skills/android-profiler/analysis/analysis_orchestrator.md +32 -0
- package/skills/android-profiler/analysis/workflows/perfetto-sql/perfetto_sql.md +28 -0
- package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/perfetto_trace_analysis.md +121 -0
- package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/guiding_principles.md +51 -0
- package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/domain_hints_template.md +7 -0
- package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_cpu.md +56 -0
- package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_graphics.md +51 -0
- package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_io.md +46 -0
- package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_ipc.md +41 -0
- package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_memory.md +55 -0
- package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_power.md +33 -0
- package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/per_candidate_analysis.md +172 -0
- package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/triage.md +94 -0
- package/skills/android-profiler/recording/recording_orchestrator.md +36 -0
- package/skills/android-profiler/recording/workflows/perfetto-trace-recording/perfetto_trace_recording.md +148 -0
- package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/app_jank.pftxt +43 -0
- package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/cpu_profile.pftxt +35 -0
- package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/java_heap_dump.pftxt +21 -0
- package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/long_background.pftxt +37 -0
- package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/memory_counters.pftxt +45 -0
- package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/native_heap.pftxt +21 -0
- package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/sched_cpu.pftxt +33 -0
- package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/trace_config_reference.md +102 -0
- package/skills/android-profiler/references/env_setup.md +15 -0
- package/skills/android-profiler/references/perfetto/setup.md +29 -0
- package/skills/android-profiler/references/perfetto/sql.md +327 -0
- package/skills/android-r8-analyzer/SKILL.md +72 -0
- package/skills/android-r8-analyzer/references/CONFIGURATION-ANALYZER.md +287 -0
- package/skills/android-r8-analyzer/references/CONFIGURATION.md +44 -0
- package/skills/android-r8-analyzer/references/KEEP-RULES-IMPACT-HIERARCHY.md +83 -0
- package/skills/android-r8-analyzer/references/REDUNDANT-RULES.md +222 -0
- package/skills/android-r8-analyzer/references/REFLECTION-GUIDE.md +139 -0
- package/skills/android-r8-analyzer/references/REPORT_FORMAT.md +51 -0
- package/skills/android-r8-analyzer/references/android/topic/performance/app-optimization/enable-app-optimization.md +252 -0
- package/skills/android-r8-analyzer/references/android/training/testing/other-components/ui-automator.md +312 -0
- package/skills/android-restore-credentials/SKILL.md +359 -0
- package/skills/android-restore-credentials/references/android/guide/topics/manifest/application-element.md +832 -0
- package/skills/android-restore-credentials/references/android/identity/passkeys/create-passkeys.md +327 -0
- package/skills/android-restore-credentials/references/android/identity/passkeys/sign-in-with-passkeys.md +219 -0
- package/skills/android-styles/SKILL.md +229 -0
- package/skills/android-styles/references/android/develop/ui/compose/designsystems/custom.md +459 -0
- package/skills/android-styles/references/android/develop/ui/compose/styles/fundamentals.md +421 -0
- package/skills/android-styles/references/android/develop/ui/compose/styles/state-animations.md +461 -0
- package/skills/android-styles/references/android/develop/ui/compose/styles/styles-vs-modifiers.md +48 -0
- package/skills/android-styles/references/android/develop/ui/compose/styles/theming.md +269 -0
- package/skills/android-verified-email/SKILL.md +432 -0
- package/skills/android-verified-email/references/android/identity/credential-manager/index.md +67 -0
- package/skills/android-verified-email/references/android/identity/digital-credentials/credential-verifier.md +166 -0
- package/skills/android-verified-email/references/android/identity/digital-credentials/email-verification-implementation.md +313 -0
- package/skills/android-verified-email/references/android/identity/digital-credentials/email-verification.md +158 -0
- package/skills/android-verified-email/references/android/identity/digital-credentials/index.md +112 -0
- package/skills/android-verified-email/references/android/identity/passkeys/create-passkeys.md +327 -0
- package/skills/android-verified-email/references/android/identity/sign-in/credential-manager-webview.md +84 -0
- package/skills/android-wear-compose-m3/SKILL.md +365 -0
- package/skills/android-wear-compose-m3/references/android/training/wearables/compose/migrate-to-material3.md +677 -0
- package/skills/android-wear-compose-m3/references/foundation/AmbientModeSample.kt.md +123 -0
- package/skills/android-wear-compose-m3/references/foundation/AmbientModeSample.kt.md.txt +123 -0
- package/skills/android-wear-compose-m3/references/foundation/CurvedWorldSample.kt.md +430 -0
- package/skills/android-wear-compose-m3/references/foundation/CurvedWorldSample.kt.md.txt +430 -0
- package/skills/android-wear-compose-m3/references/foundation/ExpandableSample.kt.md +99 -0
- package/skills/android-wear-compose-m3/references/foundation/ExpandableSample.kt.md.txt +99 -0
- package/skills/android-wear-compose-m3/references/foundation/HierarchicalFocusSample.kt.md +141 -0
- package/skills/android-wear-compose-m3/references/foundation/HierarchicalFocusSample.kt.md.txt +141 -0
- package/skills/android-wear-compose-m3/references/foundation/PagerSamples.kt.md +56 -0
- package/skills/android-wear-compose-m3/references/foundation/PagerSamples.kt.md.txt +56 -0
- package/skills/android-wear-compose-m3/references/foundation/RotarySamples.kt.md +153 -0
- package/skills/android-wear-compose-m3/references/foundation/RotarySamples.kt.md.txt +153 -0
- package/skills/android-wear-compose-m3/references/foundation/ScalingLazyColumnSample.kt.md +131 -0
- package/skills/android-wear-compose-m3/references/foundation/ScalingLazyColumnSample.kt.md.txt +131 -0
- package/skills/android-wear-compose-m3/references/foundation/SwipeToDismissBoxSample.kt.md +169 -0
- package/skills/android-wear-compose-m3/references/foundation/SwipeToDismissBoxSample.kt.md.txt +169 -0
- package/skills/android-wear-compose-m3/references/foundation/SwipeToRevealSample.kt.md +282 -0
- package/skills/android-wear-compose-m3/references/foundation/SwipeToRevealSample.kt.md.txt +282 -0
- package/skills/android-wear-compose-m3/references/foundation/TransformingLazyColumnSample.kt.md +335 -0
- package/skills/android-wear-compose-m3/references/foundation/TransformingLazyColumnSample.kt.md.txt +335 -0
- package/skills/android-wear-compose-m3/references/material3/AlertDialogSample.kt.md +377 -0
- package/skills/android-wear-compose-m3/references/material3/AlertDialogSample.kt.md.txt +377 -0
- package/skills/android-wear-compose-m3/references/material3/AnimatedTextSample.kt.md +165 -0
- package/skills/android-wear-compose-m3/references/material3/AnimatedTextSample.kt.md.txt +165 -0
- package/skills/android-wear-compose-m3/references/material3/ButtonGroupSample.kt.md +91 -0
- package/skills/android-wear-compose-m3/references/material3/ButtonGroupSample.kt.md.txt +91 -0
- package/skills/android-wear-compose-m3/references/material3/ButtonSample.kt.md +496 -0
- package/skills/android-wear-compose-m3/references/material3/ButtonSample.kt.md.txt +496 -0
- package/skills/android-wear-compose-m3/references/material3/CardSample.kt.md +470 -0
- package/skills/android-wear-compose-m3/references/material3/CardSample.kt.md.txt +470 -0
- package/skills/android-wear-compose-m3/references/material3/CheckboxButtonSample.kt.md +67 -0
- package/skills/android-wear-compose-m3/references/material3/CheckboxButtonSample.kt.md.txt +67 -0
- package/skills/android-wear-compose-m3/references/material3/ConfirmationDialogSample.kt.md +162 -0
- package/skills/android-wear-compose-m3/references/material3/ConfirmationDialogSample.kt.md.txt +162 -0
- package/skills/android-wear-compose-m3/references/material3/CurvedTextSamples.kt.md +78 -0
- package/skills/android-wear-compose-m3/references/material3/CurvedTextSamples.kt.md.txt +78 -0
- package/skills/android-wear-compose-m3/references/material3/DatePickerSample.kt.md +131 -0
- package/skills/android-wear-compose-m3/references/material3/DatePickerSample.kt.md.txt +131 -0
- package/skills/android-wear-compose-m3/references/material3/DynamicColorSchemeSample.kt.md +74 -0
- package/skills/android-wear-compose-m3/references/material3/DynamicColorSchemeSample.kt.md.txt +74 -0
- package/skills/android-wear-compose-m3/references/material3/EdgeButtonSample.kt.md +63 -0
- package/skills/android-wear-compose-m3/references/material3/EdgeButtonSample.kt.md.txt +63 -0
- package/skills/android-wear-compose-m3/references/material3/FadingExpandingLabelSample.kt.md +60 -0
- package/skills/android-wear-compose-m3/references/material3/FadingExpandingLabelSample.kt.md.txt +60 -0
- package/skills/android-wear-compose-m3/references/material3/IconButtonSample.kt.md +125 -0
- package/skills/android-wear-compose-m3/references/material3/IconButtonSample.kt.md.txt +125 -0
- package/skills/android-wear-compose-m3/references/material3/IconToggleButtonSample.kt.md +116 -0
- package/skills/android-wear-compose-m3/references/material3/IconToggleButtonSample.kt.md.txt +116 -0
- package/skills/android-wear-compose-m3/references/material3/LevelIndicatorSample.kt.md +68 -0
- package/skills/android-wear-compose-m3/references/material3/LevelIndicatorSample.kt.md.txt +68 -0
- package/skills/android-wear-compose-m3/references/material3/LinearProgressIndicatorSample.kt.md +50 -0
- package/skills/android-wear-compose-m3/references/material3/LinearProgressIndicatorSample.kt.md.txt +50 -0
- package/skills/android-wear-compose-m3/references/material3/ListHeaderSample.kt.md +177 -0
- package/skills/android-wear-compose-m3/references/material3/ListHeaderSample.kt.md.txt +177 -0
- package/skills/android-wear-compose-m3/references/material3/OneHandedGestureSamples.kt.md +651 -0
- package/skills/android-wear-compose-m3/references/material3/OneHandedGestureSamples.kt.md.txt +651 -0
- package/skills/android-wear-compose-m3/references/material3/OpenOnPhoneDialogSample.kt.md +57 -0
- package/skills/android-wear-compose-m3/references/material3/OpenOnPhoneDialogSample.kt.md.txt +57 -0
- package/skills/android-wear-compose-m3/references/material3/PageIndicatorSample.kt.md +110 -0
- package/skills/android-wear-compose-m3/references/material3/PageIndicatorSample.kt.md.txt +110 -0
- package/skills/android-wear-compose-m3/references/material3/PagerScaffoldSample.kt.md +204 -0
- package/skills/android-wear-compose-m3/references/material3/PagerScaffoldSample.kt.md.txt +204 -0
- package/skills/android-wear-compose-m3/references/material3/PickerGroupSample.kt.md +139 -0
- package/skills/android-wear-compose-m3/references/material3/PickerGroupSample.kt.md.txt +139 -0
- package/skills/android-wear-compose-m3/references/material3/PickerSample.kt.md +111 -0
- package/skills/android-wear-compose-m3/references/material3/PickerSample.kt.md.txt +111 -0
- package/skills/android-wear-compose-m3/references/material3/PlaceholderSample.kt.md +184 -0
- package/skills/android-wear-compose-m3/references/material3/PlaceholderSample.kt.md.txt +184 -0
- package/skills/android-wear-compose-m3/references/material3/ProgressIndicatorSample.kt.md +263 -0
- package/skills/android-wear-compose-m3/references/material3/ProgressIndicatorSample.kt.md.txt +263 -0
- package/skills/android-wear-compose-m3/references/material3/RadioButtonSample.kt.md +105 -0
- package/skills/android-wear-compose-m3/references/material3/RadioButtonSample.kt.md.txt +105 -0
- package/skills/android-wear-compose-m3/references/material3/ScaffoldSample.kt.md +146 -0
- package/skills/android-wear-compose-m3/references/material3/ScaffoldSample.kt.md.txt +146 -0
- package/skills/android-wear-compose-m3/references/material3/ScrollAwaySample.kt.md +97 -0
- package/skills/android-wear-compose-m3/references/material3/ScrollAwaySample.kt.md.txt +97 -0
- package/skills/android-wear-compose-m3/references/material3/ScrollIndicatorSample.kt.md +66 -0
- package/skills/android-wear-compose-m3/references/material3/ScrollIndicatorSample.kt.md.txt +66 -0
- package/skills/android-wear-compose-m3/references/material3/SliderSample.kt.md +86 -0
- package/skills/android-wear-compose-m3/references/material3/SliderSample.kt.md.txt +86 -0
- package/skills/android-wear-compose-m3/references/material3/StepperSample.kt.md +148 -0
- package/skills/android-wear-compose-m3/references/material3/StepperSample.kt.md.txt +148 -0
- package/skills/android-wear-compose-m3/references/material3/SurfaceTransformationSample.kt.md +166 -0
- package/skills/android-wear-compose-m3/references/material3/SurfaceTransformationSample.kt.md.txt +166 -0
- package/skills/android-wear-compose-m3/references/material3/SwipeToDismissBoxSample.kt.md +172 -0
- package/skills/android-wear-compose-m3/references/material3/SwipeToDismissBoxSample.kt.md.txt +172 -0
- package/skills/android-wear-compose-m3/references/material3/SwipeToRevealSample.kt.md +367 -0
- package/skills/android-wear-compose-m3/references/material3/SwipeToRevealSample.kt.md.txt +367 -0
- package/skills/android-wear-compose-m3/references/material3/SwitchButtonSample.kt.md +66 -0
- package/skills/android-wear-compose-m3/references/material3/SwitchButtonSample.kt.md.txt +66 -0
- package/skills/android-wear-compose-m3/references/material3/TextButtonSample.kt.md +115 -0
- package/skills/android-wear-compose-m3/references/material3/TextButtonSample.kt.md.txt +115 -0
- package/skills/android-wear-compose-m3/references/material3/TextToggleButtonSample.kt.md +71 -0
- package/skills/android-wear-compose-m3/references/material3/TextToggleButtonSample.kt.md.txt +71 -0
- package/skills/android-wear-compose-m3/references/material3/TimePickerSample.kt.md +151 -0
- package/skills/android-wear-compose-m3/references/material3/TimePickerSample.kt.md.txt +151 -0
- package/skills/android-wear-compose-m3/references/material3/TimeTextSample.kt.md +65 -0
- package/skills/android-wear-compose-m3/references/material3/TimeTextSample.kt.md.txt +65 -0
- package/skills/android-wear-compose-m3/references/material3/TransformationSpecSample.kt.md +246 -0
- package/skills/android-wear-compose-m3/references/material3/TransformationSpecSample.kt.md.txt +246 -0
- package/skills/android-wear-compose-m3/references/material3/TransformingLazyColumnNotificationsSample.kt.md +89 -0
- package/skills/android-wear-compose-m3/references/material3/TransformingLazyColumnNotificationsSample.kt.md.txt +89 -0
- package/skills/android-wear-compose-m3/references/material3/TransformingLazyColumnSample.kt.md +309 -0
- package/skills/android-wear-compose-m3/references/material3/TransformingLazyColumnSample.kt.md.txt +309 -0
- package/skills/android-wear-compose-m3/references/navigation3/SwipeDismissableSceneStrategySample.kt.md +205 -0
- package/skills/android-wear-compose-m3/references/navigation3/SwipeDismissableSceneStrategySample.kt.md.txt +205 -0
- package/skills/{architecture-feature-first → flutter-architecture-feature-first}/SKILL.md +1 -1
- package/skills/{bloc → flutter-bloc}/SKILL.md +1 -1
- package/skills/flutter-build-debug/SKILL.md +66 -0
- package/skills/{code-review → flutter-code-review}/SKILL.md +1 -1
- package/skills/{dart-3-updates → flutter-dart-3-updates}/SKILL.md +1 -1
- package/skills/{dart-fix-runtime-errors → flutter-dart-fix-runtime-errors}/SKILL.md +1 -1
- package/skills/{dart-resolve-package-conflicts → flutter-dart-resolve-package-conflicts}/SKILL.md +1 -1
- package/skills/{dart-run-static-analysis → flutter-dart-run-static-analysis}/SKILL.md +1 -1
- package/skills/{dart-use-pattern-matching → flutter-dart-use-pattern-matching}/SKILL.md +1 -1
- package/skills/{effective-dart → flutter-effective-dart}/SKILL.md +1 -1
- package/skills/{provider → flutter-provider}/SKILL.md +1 -1
- package/skills/{riverpod → flutter-riverpod}/SKILL.md +1 -1
- package/skills/ios-cocoapods-debug/SKILL.md +65 -0
- package/skills/ios-code-review/SKILL.md +56 -0
- package/skills/ios-xcode-build-debug/SKILL.md +66 -0
- package/skills/{detect-mobile-stack → mobile-detect-stack}/SKILL.md +1 -1
- package/skills/mobile-firebase/SKILL.md +54 -0
- package/skills/mobile-firebase/references/android/ai-logic.md +31 -0
- package/skills/mobile-firebase/references/android/analytics.md +33 -0
- package/skills/mobile-firebase/references/android/app-check.md +36 -0
- package/skills/mobile-firebase/references/android/auth.md +44 -0
- package/skills/mobile-firebase/references/android/crashlytics.md +31 -0
- package/skills/mobile-firebase/references/android/firestore.md +44 -0
- package/skills/mobile-firebase/references/android/functions.md +33 -0
- package/skills/mobile-firebase/references/android/in-app-messaging.md +28 -0
- package/skills/mobile-firebase/references/android/messaging.md +41 -0
- package/skills/mobile-firebase/references/android/realtime-database.md +50 -0
- package/skills/mobile-firebase/references/android/remote-config.md +43 -0
- package/skills/mobile-firebase/references/android/sql-connect.md +31 -0
- package/skills/mobile-firebase/references/android/storage.md +39 -0
- package/skills/mobile-firebase/references/android.md +30 -0
- package/skills/{firebase-ai/SKILL.md → mobile-firebase/references/flutter/ai-logic.md} +2 -8
- package/skills/{firebase-analytics/SKILL.md → mobile-firebase/references/flutter/analytics.md} +2 -8
- package/skills/{firebase-app-check/SKILL.md → mobile-firebase/references/flutter/app-check.md} +2 -8
- package/skills/{firebase-auth/SKILL.md → mobile-firebase/references/flutter/auth.md} +2 -8
- package/skills/{firebase-crashlytics/SKILL.md → mobile-firebase/references/flutter/crashlytics.md} +2 -8
- package/skills/{firebase-cloud-firestore/SKILL.md → mobile-firebase/references/flutter/firestore.md} +2 -8
- package/skills/{firebase-cloud-functions/SKILL.md → mobile-firebase/references/flutter/functions.md} +2 -8
- package/skills/{firebase-in-app-messaging/SKILL.md → mobile-firebase/references/flutter/in-app-messaging.md} +2 -8
- package/skills/{firebase-messaging/SKILL.md → mobile-firebase/references/flutter/messaging.md} +2 -8
- package/skills/{firebase-database/SKILL.md → mobile-firebase/references/flutter/realtime-database.md} +2 -8
- package/skills/{firebase-remote-config/SKILL.md → mobile-firebase/references/flutter/remote-config.md} +2 -8
- package/skills/{flutterfire-configure/SKILL.md → mobile-firebase/references/flutter/setup-flutterfire.md} +1 -8
- package/skills/{firebase-data-connect/SKILL.md → mobile-firebase/references/flutter/sql-connect.md} +2 -8
- package/skills/{firebase-storage/SKILL.md → mobile-firebase/references/flutter/storage.md} +2 -8
- package/skills/mobile-firebase/references/flutter.md +36 -0
- package/skills/mobile-firebase/references/ios/ai-logic.md +30 -0
- package/skills/mobile-firebase/references/ios/analytics.md +33 -0
- package/skills/mobile-firebase/references/ios/app-check.md +36 -0
- package/skills/mobile-firebase/references/ios/auth.md +48 -0
- package/skills/mobile-firebase/references/ios/crashlytics.md +34 -0
- package/skills/mobile-firebase/references/ios/firestore.md +53 -0
- package/skills/mobile-firebase/references/ios/functions.md +35 -0
- package/skills/mobile-firebase/references/ios/in-app-messaging.md +26 -0
- package/skills/mobile-firebase/references/ios/messaging.md +45 -0
- package/skills/mobile-firebase/references/ios/realtime-database.md +49 -0
- package/skills/mobile-firebase/references/ios/remote-config.md +44 -0
- package/skills/mobile-firebase/references/ios/sql-connect.md +33 -0
- package/skills/mobile-firebase/references/ios/storage.md +36 -0
- package/skills/mobile-firebase/references/ios.md +28 -0
- package/skills/mobile-firebase/references/react-native/ai-logic.md +32 -0
- package/skills/mobile-firebase/references/react-native/analytics.md +43 -0
- package/skills/mobile-firebase/references/react-native/app-check.md +35 -0
- package/skills/mobile-firebase/references/react-native/auth.md +50 -0
- package/skills/mobile-firebase/references/react-native/crashlytics.md +36 -0
- package/skills/mobile-firebase/references/react-native/firestore.md +45 -0
- package/skills/mobile-firebase/references/react-native/functions.md +28 -0
- package/skills/mobile-firebase/references/react-native/in-app-messaging.md +27 -0
- package/skills/mobile-firebase/references/react-native/messaging.md +46 -0
- package/skills/mobile-firebase/references/react-native/realtime-database.md +46 -0
- package/skills/mobile-firebase/references/react-native/remote-config.md +32 -0
- package/skills/mobile-firebase/references/react-native/sql-connect.md +11 -0
- package/skills/mobile-firebase/references/react-native/storage.md +30 -0
- package/skills/mobile-firebase/references/react-native.md +29 -0
- package/skills/mobile-test/SKILL.md +63 -0
- package/skills/mobile-test/references/android/setup/GUIDE.md +183 -0
- package/skills/mobile-test/references/android/setup/references/android/develop/ui/compose/testing/common-patterns.md +181 -0
- package/skills/mobile-test/references/android/setup/references/android/studio/preview/compose-screenshot-testing.md +255 -0
- package/skills/mobile-test/references/android/setup/references/android/training/dependency-injection/hilt-testing.md +447 -0
- package/skills/mobile-test/references/android.md +83 -0
- package/skills/{dart-collect-coverage/SKILL.md → mobile-test/references/flutter/coverage.md} +2 -11
- package/skills/{dart-generate-test-mocks/SKILL.md → mobile-test/references/flutter/generate-mocks.md} +2 -11
- package/skills/{flutter-add-integration-test/SKILL.md → mobile-test/references/flutter/integration-tests.md} +2 -11
- package/skills/{dart-migrate-to-checks-package/SKILL.md → mobile-test/references/flutter/migrate-to-checks.md} +2 -13
- package/skills/{mockito/SKILL.md → mobile-test/references/flutter/mockito.md} +1 -8
- package/skills/{mocktail/SKILL.md → mobile-test/references/flutter/mocktail.md} +1 -8
- package/skills/{patrol-e2e-testing/SKILL.md → mobile-test/references/flutter/patrol.md} +1 -8
- package/skills/{testing/SKILL.md → mobile-test/references/flutter/testing-guidelines.md} +1 -8
- package/skills/{dart-add-unit-test/SKILL.md → mobile-test/references/flutter/unit-tests.md} +2 -11
- package/skills/{flutter-add-widget-test/SKILL.md → mobile-test/references/flutter/widget-tests.md} +2 -11
- package/skills/mobile-test/references/flutter.md +44 -0
- package/skills/mobile-test/references/ios.md +79 -0
- package/skills/mobile-test/references/react-native.md +62 -0
- /package/skills/{dart-use-pattern-matching → flutter-dart-use-pattern-matching}/examples/json_patterns.dart +0 -0
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
You can include an Android View hierarchy in a Compose UI. This approach is
|
|
2
|
+
particularly useful if you want to use UI elements that are not yet available in
|
|
3
|
+
Compose, like
|
|
4
|
+
[`AdView`](https://developers.google.com/android/reference/com/google/android/gms/ads/AdView).
|
|
5
|
+
This approach also lets you reuse custom views you may have designed.
|
|
6
|
+
|
|
7
|
+
> [!NOTE]
|
|
8
|
+
> **Note:** Use `AndroidView` as a wrapper only for missing SDK components without Compose support. Rewrite your custom Views in Compose wherever possible, starting the migration with the simplest custom Views and scaling to more complex ones.
|
|
9
|
+
|
|
10
|
+
<br />
|
|
11
|
+
|
|
12
|
+
To include a view element or hierarchy, use the [`AndroidView`](https://developer.android.com/reference/kotlin/androidx/compose/ui/viewinterop/AndroidView.composable#AndroidView(kotlin.Function1,androidx.compose.ui.Modifier,kotlin.Function1))
|
|
13
|
+
composable. `AndroidView` is passed a lambda that returns a
|
|
14
|
+
[`View`](https://developer.android.com/reference/android/view/View). `AndroidView` also provides an `update`
|
|
15
|
+
callback that is called when the view is inflated. The `AndroidView` recomposes
|
|
16
|
+
whenever a `State` read within the callback changes. `AndroidView`, like many
|
|
17
|
+
other built-in composables, takes a `Modifier` parameter that can be used, for
|
|
18
|
+
example, to set its position in the parent composable.
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
```kotlin
|
|
22
|
+
@Composable
|
|
23
|
+
fun CustomView() {
|
|
24
|
+
var selectedItem by remember { mutableIntStateOf(0) }
|
|
25
|
+
|
|
26
|
+
// Adds view to Compose
|
|
27
|
+
AndroidView(
|
|
28
|
+
modifier = Modifier.fillMaxSize(), // Occupy the max size in the Compose UI tree
|
|
29
|
+
factory = { context ->
|
|
30
|
+
// Creates view
|
|
31
|
+
MyView(context).apply {
|
|
32
|
+
// Sets up listeners for View -> Compose communication
|
|
33
|
+
setOnClickListener {
|
|
34
|
+
selectedItem = 1
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
update = { view ->
|
|
39
|
+
// View's been inflated or state read in this block has been updated
|
|
40
|
+
// Add logic here if necessary
|
|
41
|
+
|
|
42
|
+
// As selectedItem is read here, AndroidView will recompose
|
|
43
|
+
// whenever the state changes
|
|
44
|
+
// Example of Compose -> View communication
|
|
45
|
+
view.selectedItem = selectedItem
|
|
46
|
+
}
|
|
47
|
+
)
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
@Composable
|
|
51
|
+
fun ContentExample() {
|
|
52
|
+
Column(Modifier.fillMaxSize()) {
|
|
53
|
+
Text("Look at this CustomView!")
|
|
54
|
+
CustomView()
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
<br />
|
|
60
|
+
|
|
61
|
+
> [!NOTE]
|
|
62
|
+
> **Note:** Prefer to construct a View in the `AndroidView` `factory` lambda instead of using `remember` to hold a View reference outside of `AndroidView`.
|
|
63
|
+
|
|
64
|
+
## `AndroidView` with view binding
|
|
65
|
+
|
|
66
|
+
To embed an XML layout, use the
|
|
67
|
+
[`AndroidViewBinding`](https://developer.android.com/reference/kotlin/androidx/compose/ui/viewinterop/package-summary#AndroidViewBinding(kotlin.Function3,%20androidx.compose.ui.Modifier,%20kotlin.Function1))
|
|
68
|
+
API, which is provided by the `androidx.compose.ui:ui-viewbinding` library. To
|
|
69
|
+
do this, your project must enable [view binding](https://developer.android.com/topic/libraries/view-binding#setup).
|
|
70
|
+
|
|
71
|
+
> [!NOTE]
|
|
72
|
+
> **Note:** For Compose-only apps, don't use `AndroidViewBinding` to inflate full screen-level XML layouts, and instead use it only for smaller, legacy XML layouts during the incremental migration process.
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
```kotlin
|
|
76
|
+
@Composable
|
|
77
|
+
fun AndroidViewBindingExample() {
|
|
78
|
+
AndroidViewBinding(ExampleLayoutBinding::inflate) {
|
|
79
|
+
exampleView.setBackgroundColor(Color.GRAY)
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
<br />
|
|
85
|
+
|
|
86
|
+
## `AndroidView` in Lazy lists
|
|
87
|
+
|
|
88
|
+
If you are using an `AndroidView` in a Lazy list (`LazyColumn`, `LazyRow`,
|
|
89
|
+
`Pager`, etc.), consider using the [`AndroidView`](https://developer.android.com/reference/kotlin/androidx/compose/ui/viewinterop/package-summary#AndroidView(kotlin.Function1,kotlin.Function1,androidx.compose.ui.Modifier,kotlin.Function1,kotlin.Function1))
|
|
90
|
+
overload introduced in version 1.4.0-rc01. This overload allows Compose to reuse
|
|
91
|
+
the underlying `View` instance when the containing composition is reused as is
|
|
92
|
+
the case for Lazy lists.
|
|
93
|
+
|
|
94
|
+
This overload of `AndroidView` adds 2 additional parameters:
|
|
95
|
+
|
|
96
|
+
- `onReset` - A callback invoked to signal that the `View` is about to be reused. This must be non-null to enable View reuse.
|
|
97
|
+
- `onRelease` (optional) - A callback invoked to signal that the `View` has exited the composition and will not be reused again.
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
```kotlin
|
|
101
|
+
@Composable
|
|
102
|
+
fun AndroidViewInLazyList() {
|
|
103
|
+
LazyColumn {
|
|
104
|
+
items(100) { index ->
|
|
105
|
+
AndroidView(
|
|
106
|
+
modifier = Modifier.fillMaxSize(), // Occupy the max size in the Compose UI tree
|
|
107
|
+
factory = { context ->
|
|
108
|
+
MyView(context)
|
|
109
|
+
},
|
|
110
|
+
update = { view ->
|
|
111
|
+
view.selectedItem = index
|
|
112
|
+
},
|
|
113
|
+
onReset = { view ->
|
|
114
|
+
view.clear()
|
|
115
|
+
}
|
|
116
|
+
)
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
<br />
|
|
123
|
+
|
|
124
|
+
## Fragments in Compose (Transitionary Step)
|
|
125
|
+
|
|
126
|
+
Use the `AndroidFragment` composable to add a `Fragment` in Compose.
|
|
127
|
+
`AndroidFragment` has fragment-specific handling such as removing the
|
|
128
|
+
fragment when the composable leaves the composition.
|
|
129
|
+
|
|
130
|
+
> [!NOTE]
|
|
131
|
+
> **Note:** Wrap existing Fragments in Compose only during incremental migration. For Compose-only apps, do not use Fragments and instead use the recommended Compose-only architecture with a single Activity and latest navigation libraries, like Navigation 3.
|
|
132
|
+
|
|
133
|
+
To include a fragment, use the [`AndroidFragment`](https://developer.android.com/reference/kotlin/androidx/fragment/compose/package-summary#AndroidFragment)
|
|
134
|
+
composable. You pass a `Fragment` class to `AndroidFragment`, which then adds
|
|
135
|
+
an instance of that class directly into the composition. `AndroidFragment` also
|
|
136
|
+
provides a `fragmentState` object to create the `AndroidFragment` with a given
|
|
137
|
+
state, `arguments` to pass into the new fragment, and an `onUpdate` callback
|
|
138
|
+
that provides the fragment from the composition. Like many
|
|
139
|
+
other built-in composables, `AndroidFragment` accepts a `Modifier` parameter
|
|
140
|
+
that you can use, for
|
|
141
|
+
example, to set its position in the parent composable.
|
|
142
|
+
|
|
143
|
+
Call `AndroidFragment` in Compose as follows:
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
```kotlin
|
|
147
|
+
@Composable
|
|
148
|
+
fun FragmentInComposeExample() {
|
|
149
|
+
AndroidFragment<MyFragment>()
|
|
150
|
+
}
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
<br />
|
|
154
|
+
|
|
155
|
+
## Calling the Android framework from Compose
|
|
156
|
+
|
|
157
|
+
Compose operates within the Android framework classes. For example, it's hosted
|
|
158
|
+
on Android View classes, like `Activity` or `Fragment`, and might use Android
|
|
159
|
+
framework classes like the `Context`, system resources,
|
|
160
|
+
`Service`, or `BroadcastReceiver`.
|
|
161
|
+
|
|
162
|
+
To learn more about system resources, see [Resources in Compose](https://developer.android.com/develop/ui/compose/resources).
|
|
163
|
+
|
|
164
|
+
### Composition Locals
|
|
165
|
+
|
|
166
|
+
[`CompositionLocal`](https://developer.android.com/reference/kotlin/androidx/compose/runtime/CompositionLocal)
|
|
167
|
+
classes allow passing data implicitly through composable functions. They're
|
|
168
|
+
usually provided with a value in a certain node of the UI tree. That value can
|
|
169
|
+
be used by its composable descendants without declaring the `CompositionLocal`
|
|
170
|
+
as a parameter in the composable function.
|
|
171
|
+
|
|
172
|
+
`CompositionLocal` is used to propagate values for Android framework types in
|
|
173
|
+
Compose such as `Context`, `Configuration` or the `View` in which the Compose
|
|
174
|
+
code is hosted with the corresponding
|
|
175
|
+
[`LocalContext`](https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/package-summary#LocalContext()),
|
|
176
|
+
[`LocalConfiguration`](https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/package-summary#LocalConfiguration()),
|
|
177
|
+
or
|
|
178
|
+
[`LocalView`](https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/package-summary#LocalView()).
|
|
179
|
+
Note that `CompositionLocal` classes are prefixed with `Local` for better
|
|
180
|
+
discoverability with auto-complete in the IDE.
|
|
181
|
+
|
|
182
|
+
Access the current value of a `CompositionLocal` by using its `current`
|
|
183
|
+
property. For example, the code below shows a toast message by providing
|
|
184
|
+
`LocalContext.current` into the `Toast.makeToast` method.
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
```kotlin
|
|
188
|
+
@Composable
|
|
189
|
+
fun ToastGreetingButton(greeting: String) {
|
|
190
|
+
val context = LocalContext.current
|
|
191
|
+
Button(onClick = {
|
|
192
|
+
Toast.makeText(context, greeting, Toast.LENGTH_SHORT).show()
|
|
193
|
+
}) {
|
|
194
|
+
Text("Greet")
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
<br />
|
|
200
|
+
|
|
201
|
+
### Broadcast receivers
|
|
202
|
+
|
|
203
|
+
To showcase `CompositionLocal` and [side
|
|
204
|
+
effects](https://developer.android.com/develop/ui/compose/side-effects), if a
|
|
205
|
+
[`BroadcastReceiver`](https://developer.android.com/guide/components/broadcasts) needs to be registered from
|
|
206
|
+
a composable function, use of `LocalContext` to use the current context, and
|
|
207
|
+
`rememberUpdatedState` and `DisposableEffect` side effects.
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
```kotlin
|
|
211
|
+
@Composable
|
|
212
|
+
fun SystemBroadcastReceiver(
|
|
213
|
+
systemAction: String,
|
|
214
|
+
onSystemEvent: (intent: Intent?) -> Unit
|
|
215
|
+
) {
|
|
216
|
+
// Grab the current context in this part of the UI tree
|
|
217
|
+
val context = LocalContext.current
|
|
218
|
+
|
|
219
|
+
// Safely use the latest onSystemEvent lambda passed to the function
|
|
220
|
+
val currentOnSystemEvent by rememberUpdatedState(onSystemEvent)
|
|
221
|
+
|
|
222
|
+
// If either context or systemAction changes, unregister and register again
|
|
223
|
+
DisposableEffect(context, systemAction) {
|
|
224
|
+
val intentFilter = IntentFilter(systemAction)
|
|
225
|
+
val broadcast = object : BroadcastReceiver() {
|
|
226
|
+
override fun onReceive(context: Context?, intent: Intent?) {
|
|
227
|
+
currentOnSystemEvent(intent)
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
context.registerReceiver(broadcast, intentFilter)
|
|
232
|
+
|
|
233
|
+
// When the effect leaves the Composition, remove the callback
|
|
234
|
+
onDispose {
|
|
235
|
+
context.unregisterReceiver(broadcast)
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
@Composable
|
|
241
|
+
fun HomeScreen() {
|
|
242
|
+
|
|
243
|
+
SystemBroadcastReceiver(Intent.ACTION_BATTERY_CHANGED) { batteryStatus ->
|
|
244
|
+
val isCharging = /* Get from batteryStatus ... */ true
|
|
245
|
+
/* Do something if the device is charging */
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
/* Rest of the HomeScreen */
|
|
249
|
+
}
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
<br />
|
|
253
|
+
|
|
254
|
+
## Other interactions
|
|
255
|
+
|
|
256
|
+
If there isn't a utility defined for the interaction you need, the best practice
|
|
257
|
+
is to follow the general Compose guideline,
|
|
258
|
+
*data flows down, events flow up* (discussed at more length in [Thinking
|
|
259
|
+
in Compose](https://developer.android.com/develop/ui/compose/mental-model)). For example, this composable
|
|
260
|
+
launches a different activity:
|
|
261
|
+
|
|
262
|
+
|
|
263
|
+
```kotlin
|
|
264
|
+
class OtherInteractionsActivity : ComponentActivity() {
|
|
265
|
+
override fun onCreate(savedInstanceState: Bundle?) {
|
|
266
|
+
super.onCreate(savedInstanceState)
|
|
267
|
+
// get data from savedInstanceState
|
|
268
|
+
setContent {
|
|
269
|
+
MaterialTheme {
|
|
270
|
+
ExampleComposable(data, onButtonClick = {
|
|
271
|
+
startActivity(Intent(this, MyActivity::class.java))
|
|
272
|
+
})
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
@Composable
|
|
279
|
+
fun ExampleComposable(data: DataExample, onButtonClick: () -> Unit) {
|
|
280
|
+
Button(onClick = onButtonClick) {
|
|
281
|
+
Text(data.title)
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
<br />
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
For Gradle, use the Compose Compiler Gradle plugin to set up and configure
|
|
2
|
+
Compose.
|
|
3
|
+
|
|
4
|
+
> [!NOTE]
|
|
5
|
+
> **Note:** The Compose Compiler Gradle Plugin is only available from Kotlin 2.0+. For migration instructions, see ["Jetpack Compose compiler moving to the Kotlin
|
|
6
|
+
> repository"](https://android-developers.googleblog.com/2024/04/jetpack-compose-compiler-moving-to-kotlin-repository.html).
|
|
7
|
+
|
|
8
|
+
### Set up with Gradle version catalogs
|
|
9
|
+
|
|
10
|
+
Set up the Compose Compiler Gradle plugin:
|
|
11
|
+
|
|
12
|
+
1. In the `libs.versions.toml` file, remove any reference to the Compose Compiler.
|
|
13
|
+
2. In the `versions` and `plugins` sections, add the new dependency:
|
|
14
|
+
|
|
15
|
+
[versions]
|
|
16
|
+
kotlin = "2.3.21"
|
|
17
|
+
|
|
18
|
+
[plugins]
|
|
19
|
+
org-jetbrains-kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
|
|
20
|
+
|
|
21
|
+
// Add this line
|
|
22
|
+
compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
|
|
23
|
+
|
|
24
|
+
3. In the project's root `build.gradle.kts` file, add the following to the
|
|
25
|
+
`plugins` section.
|
|
26
|
+
|
|
27
|
+
plugins {
|
|
28
|
+
// Existing plugins
|
|
29
|
+
alias(libs.plugins.compose.compiler) apply false
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
4. In each module that uses Compose, apply the plugin:
|
|
33
|
+
|
|
34
|
+
plugins {
|
|
35
|
+
// Existing plugins
|
|
36
|
+
alias(libs.plugins.compose.compiler)
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
The project should now build and compile if it was using the default set up. If
|
|
40
|
+
it had configured custom options on the Compose compiler, follow the next
|
|
41
|
+
section.
|
|
42
|
+
|
|
43
|
+
### Set up the Compose Compiler without Gradle version catalogs
|
|
44
|
+
|
|
45
|
+
Add the plugin to `build.gradle.kts` files associated with modules where Compose
|
|
46
|
+
is used:
|
|
47
|
+
|
|
48
|
+
plugins {
|
|
49
|
+
id("org.jetbrains.kotlin.plugin.compose") version "2.3.21" // this version matches your Kotlin version
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
Add the classpath to your top-level project `build.gradle.kts` file:
|
|
53
|
+
|
|
54
|
+
buildscript {
|
|
55
|
+
dependencies {
|
|
56
|
+
classpath("org.jetbrains.kotlin.plugin.compose:org.jetbrains.kotlin.plugin.compose.gradle.plugin:2.3.21")
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
### Configuration options with the Compose Compiler Gradle Plugin
|
|
61
|
+
|
|
62
|
+
To configure the Compose compiler using the Gradle plugin, add the
|
|
63
|
+
`composeCompiler` block to the module's `build.gradle.kts` file at the top
|
|
64
|
+
level:
|
|
65
|
+
|
|
66
|
+
android { ... }
|
|
67
|
+
|
|
68
|
+
composeCompiler {
|
|
69
|
+
reportsDestination = layout.buildDirectory.dir("compose_compiler")
|
|
70
|
+
stabilityConfigurationFile = rootProject.layout.projectDirectory.file("stability_config.conf")
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
For the full list of available options, see the [documentation](https://www.jetbrains.com/help/kotlin-multiplatform-dev/compose-compiler.html#compose-compiler-options-dsl).
|
|
74
|
+
|
|
75
|
+
## Set up Compose dependencies
|
|
76
|
+
|
|
77
|
+
Always use the latest Compose BOM version: `2026.08.00`.
|
|
78
|
+
|
|
79
|
+
Set the `compose` flag to `true` inside the Android [`BuildFeatures`](https://developer.android.com/reference/tools/gradle-api/7.0/com/android/build/api/dsl/BuildFeatures) to
|
|
80
|
+
enable [Compose functionality](https://developer.android.com/develop/ui/compose/tooling) in Android Studio.
|
|
81
|
+
|
|
82
|
+
Add the following definition to your app's `build.gradle` file:
|
|
83
|
+
|
|
84
|
+
### Groovy
|
|
85
|
+
|
|
86
|
+
android {
|
|
87
|
+
buildFeatures {
|
|
88
|
+
compose true
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
### Kotlin
|
|
93
|
+
|
|
94
|
+
android {
|
|
95
|
+
buildFeatures {
|
|
96
|
+
compose = true
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
Add the Compose BOM and the subset of Compose library dependencies:
|
|
101
|
+
|
|
102
|
+
### Groovy
|
|
103
|
+
|
|
104
|
+
dependencies {
|
|
105
|
+
|
|
106
|
+
def composeBom = platform('androidx.compose:compose-bom:2026.08.00')
|
|
107
|
+
implementation composeBom
|
|
108
|
+
androidTestImplementation composeBom
|
|
109
|
+
|
|
110
|
+
// Choose one of the following:
|
|
111
|
+
// Material Design 3
|
|
112
|
+
implementation 'androidx.compose.material3:material3'
|
|
113
|
+
// or skip Material Design and build directly on top of foundational components
|
|
114
|
+
implementation 'androidx.compose.foundation:foundation'
|
|
115
|
+
// or only import the main APIs for the underlying toolkit systems,
|
|
116
|
+
// such as input and measurement/layout
|
|
117
|
+
implementation 'androidx.compose.ui:ui'
|
|
118
|
+
|
|
119
|
+
// Android Studio Preview support
|
|
120
|
+
implementation 'androidx.compose.ui:ui-tooling-preview'
|
|
121
|
+
debugImplementation 'androidx.compose.ui:ui-tooling'
|
|
122
|
+
|
|
123
|
+
// UI Tests
|
|
124
|
+
androidTestImplementation 'androidx.compose.ui:ui-test-junit4'
|
|
125
|
+
debugImplementation 'androidx.compose.ui:ui-test-manifest'
|
|
126
|
+
|
|
127
|
+
// Optional - Add window size utils
|
|
128
|
+
implementation 'androidx.compose.material3.adaptive:adaptive'
|
|
129
|
+
|
|
130
|
+
// Optional - Integration with activities
|
|
131
|
+
implementation 'androidx.activity:activity-compose:1.13.0'
|
|
132
|
+
// Optional - Integration with ViewModels
|
|
133
|
+
implementation 'androidx.lifecycle:lifecycle-viewmodel-compose:2.10.0'
|
|
134
|
+
// Optional - Integration with LiveData
|
|
135
|
+
implementation 'androidx.compose.runtime:runtime-livedata'
|
|
136
|
+
// Optional - Integration with RxJava
|
|
137
|
+
implementation 'androidx.compose.runtime:runtime-rxjava2'
|
|
138
|
+
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
### Kotlin
|
|
142
|
+
|
|
143
|
+
dependencies {
|
|
144
|
+
|
|
145
|
+
val composeBom = platform("androidx.compose:compose-bom:2026.08.00")
|
|
146
|
+
implementation(composeBom)
|
|
147
|
+
androidTestImplementation(composeBom)
|
|
148
|
+
|
|
149
|
+
// Choose one of the following:
|
|
150
|
+
// Material Design 3
|
|
151
|
+
implementation("androidx.compose.material3:material3")
|
|
152
|
+
// or skip Material Design and build directly on top of foundational components
|
|
153
|
+
implementation("androidx.compose.foundation:foundation")
|
|
154
|
+
// or only import the main APIs for the underlying toolkit systems,
|
|
155
|
+
// such as input and measurement/layout
|
|
156
|
+
implementation("androidx.compose.ui:ui")
|
|
157
|
+
|
|
158
|
+
// Android Studio Preview support
|
|
159
|
+
implementation("androidx.compose.ui:ui-tooling-preview")
|
|
160
|
+
debugImplementation("androidx.compose.ui:ui-tooling")
|
|
161
|
+
|
|
162
|
+
// UI Tests
|
|
163
|
+
androidTestImplementation("androidx.compose.ui:ui-test-junit4")
|
|
164
|
+
debugImplementation("androidx.compose.ui:ui-test-manifest")
|
|
165
|
+
|
|
166
|
+
// Optional - Add window size utils
|
|
167
|
+
implementation("androidx.compose.material3.adaptive:adaptive")
|
|
168
|
+
|
|
169
|
+
// Optional - Integration with activities
|
|
170
|
+
implementation("androidx.activity:activity-compose:1.13.0")
|
|
171
|
+
// Optional - Integration with ViewModels
|
|
172
|
+
implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.10.0")
|
|
173
|
+
// Optional - Integration with LiveData
|
|
174
|
+
implementation("androidx.compose.runtime:runtime-livedata")
|
|
175
|
+
// Optional - Integration with RxJava
|
|
176
|
+
implementation("androidx.compose.runtime:runtime-rxjava2")
|
|
177
|
+
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
> [!NOTE]
|
|
181
|
+
> **Note:** Jetpack Compose is shipped using a Bill of Materials (BOM), to keep the versions of all library groups in sync. Read more about it in the [Bill of
|
|
182
|
+
> Materials page](https://developer.android.com/develop/ui/compose/bom/bom).
|
|
183
|
+
|
|
184
|
+
## `compileSdk` and Android Gradle Plugin compatibility
|
|
185
|
+
|
|
186
|
+
Compose library releases continually adopt the latest `compileSdk` versions to
|
|
187
|
+
provide access to the latest Android features. Newer `compileSdk` versions
|
|
188
|
+
require newer versions of Android Gradle Plugin, so adopting new Compose
|
|
189
|
+
releases also requires projects to adopt new versions of the Android Gradle
|
|
190
|
+
Plugin. We recommend keeping your project's `compileSdk` up to date with the
|
|
191
|
+
latest released versions. `compileSdk` is unrelated from `targetSdk`.
|
|
192
|
+
|
|
193
|
+
For example, starting with Compose 1.12.0, projects are required to use
|
|
194
|
+
`compileSdk 37` and Android Gradle Plugin (AGP) 9.
|
|
195
|
+
|
|
196
|
+
To check which version of AGP is supported for different API levels, see the
|
|
197
|
+
[Android Gradle plugin API level support](https://developer.android.com/build/releases/about-agp#api-level-support) documentation.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
### 1. Analysis scope
|
|
2
|
+
|
|
3
|
+
**Action:** Use find files and examine all XML layout files within the project (typically located in `res`directories). For each file, parse the view hierarchy and metadata.
|
|
4
|
+
|
|
5
|
+
### 2. Selection criteria
|
|
6
|
+
|
|
7
|
+
Prioritize layouts that meet the following criteria:
|
|
8
|
+
|
|
9
|
+
- **Hierarchy depth:** Target **leaf nodes** or components at the bottom of the UI tree.
|
|
10
|
+
- **Complexity:** Select layouts with the **smallest number of nested children** and minimal logic.
|
|
11
|
+
- **State management:** Prioritize **stateless** components or those with the fewest UI state variables.
|
|
12
|
+
- **Dependency footprint:** Identify layouts with **zero to minimal external UI dependencies**.
|
|
13
|
+
- **Isolation:** Focus on **self-contained** components that do not rely heavily on parent context or complex data binding.
|
|
14
|
+
|
|
15
|
+
### 3. Risk assessment
|
|
16
|
+
|
|
17
|
+
Evaluate the migration risk based on:
|
|
18
|
+
\* **Reusability:** Find layouts with **minimum reuse** across the project to limit regression impact.
|
|
19
|
+
\* **Accessibility:** Ensure the layout has an **easily accessible entry point** (e.g., used in a simple Activity, Fragment, or as a standalone include).
|
|
20
|
+
|
|
21
|
+
*** ** * ** ***
|
|
22
|
+
|
|
23
|
+
## Output requirements
|
|
24
|
+
|
|
25
|
+
Provide a ranked list of the top 3-5 candidates. For each candidate, include:
|
|
26
|
+
1. **File path:** (e.g., `res/layout/item_user_profile.xml`)
|
|
27
|
+
2. **Rationale:** Why this is a good candidate based on the provided criteria.
|
|
28
|
+
3. **Complexity score:** A rating from 1-5 (1 being simplest).
|
|
29
|
+
4. **Dependency count:** List of custom/external views found within.
|
|
30
|
+
|
|
31
|
+
**Action:** If you support user interaction, ask the user to choose which XML to proceed with. Else proceed with the best option, based on the previous criteria.
|
package/skills/android-migrate-xml-views-to-jetpack-compose/references/xml-layout-migration.md
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
## 1. Structural analysis \& mapping
|
|
2
|
+
|
|
3
|
+
**Identify the precise mapping** between XML elements and Compose equivalents.
|
|
4
|
+
You must determine:
|
|
5
|
+
|
|
6
|
+
- The exact `@Composable` functions (e.g., `ConstraintLayout`, `Column`, `LazyColumn`) that replace the XML tag hierarchy.
|
|
7
|
+
- The specific parameters and `Modifier` extensions required to replicate XML attributes (e.g., `layout_width`, `padding`, `elevation`).
|
|
8
|
+
- The appropriate state management strategy for interactive elements.
|
|
9
|
+
|
|
10
|
+
## 2. Migration execution
|
|
11
|
+
|
|
12
|
+
**Convert the XML layout code to Jetpack Compose**, ensuring the visual
|
|
13
|
+
hierarchy and layout logic are preserved while leveraging Compose's declarative
|
|
14
|
+
nature.
|
|
15
|
+
|
|
16
|
+
## 3. Theming \& design system integrity
|
|
17
|
+
|
|
18
|
+
**Do not use hard-coded values.** Follow these rules for styling:
|
|
19
|
+
|
|
20
|
+
- **Token Alignment:** Cross-reference XML dimensions, colors, and style attributes with the existing Compose `Theme` (e.g., `MaterialTheme.colorScheme` or custom design system tokens).
|
|
21
|
+
- **Reuse over Creation:** If matching values exist in the current Compose theme, reuse them. If a value is missing but required for the design, define it within the theme structure rather than hard-coding it in the Composable.
|
|
22
|
+
- **Project Consistency:** You **MUST** strictly adhere to existing code conventions, naming standards, and implementation patterns found in the project. **Prioritize** project-specific reusable components over generic Material defaults.
|
|
23
|
+
|
|
24
|
+
## 4. Component layering \& reusability
|
|
25
|
+
|
|
26
|
+
Evaluate if the XML layout serves as a foundation-level design system component
|
|
27
|
+
(reused across the app with a distinct role). If it is:
|
|
28
|
+
|
|
29
|
+
- **Create a reusable composable:** Do not just inline the code. Define a new standalone `@Composable`.
|
|
30
|
+
- **Parameterization:** Expose specific parameters for variable data (text, colors, styles) and use `Modifier` for layout-specific customizations.
|
|
31
|
+
- **Feature parity \& restriction:** Ensure the new composable enforces the same UI constraints as the original XML component, preventing unauthorized style overrides while maintaining the intended flexibility.
|
|
32
|
+
|
|
33
|
+
Example before migration:
|
|
34
|
+
|
|
35
|
+
<style
|
|
36
|
+
name="Widget.Rounded.Button"
|
|
37
|
+
parent="Widget.Button.Borderless">
|
|
38
|
+
<item name="android:fontFamily">sans-serif-medium</item>
|
|
39
|
+
<item name="android:minWidth">@dimen/min_width</item>
|
|
40
|
+
<item name="android:paddingStart">@dimen/padding_2</item>
|
|
41
|
+
<item name="android:paddingEnd">@dimen/padding_2</item>
|
|
42
|
+
<item name="cornerRadius">8dp</item>
|
|
43
|
+
</style>
|
|
44
|
+
|
|
45
|
+
Example after migration:
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
```kotlin
|
|
49
|
+
@Composable
|
|
50
|
+
fun RoundedBorderlessButton(
|
|
51
|
+
text: String,
|
|
52
|
+
onClick: () -> Unit,
|
|
53
|
+
modifier: Modifier = Modifier,
|
|
54
|
+
enabled: Boolean = true
|
|
55
|
+
) {
|
|
56
|
+
TextButton(
|
|
57
|
+
onClick, modifier
|
|
58
|
+
.defaultMinSize(minWidth = dimensionResource(R.dimen.min_width))
|
|
59
|
+
.padding(
|
|
60
|
+
start = dimensionResource(R.dimen.padding_2),
|
|
61
|
+
end = dimensionResource(R.dimen.padding_2)
|
|
62
|
+
), enabled, shape = RoundedCornerShape(8.dp),
|
|
63
|
+
colors = ButtonDefaults.textButtonColors(
|
|
64
|
+
contentColor = MaterialTheme.colorScheme.primary
|
|
65
|
+
)
|
|
66
|
+
) {
|
|
67
|
+
Text(
|
|
68
|
+
text = text,
|
|
69
|
+
style = MaterialTheme.typography.bodyMedium.copy(
|
|
70
|
+
fontFamily = FontFamily.SansSerif,
|
|
71
|
+
fontWeight = FontWeight.Medium
|
|
72
|
+
)
|
|
73
|
+
)
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
<br />
|
|
79
|
+
|
|
80
|
+
*** ** * ** ***
|
|
81
|
+
|
|
82
|
+
## 5. Output requirements
|
|
83
|
+
|
|
84
|
+
- Provide the full Kotlin file content.
|
|
85
|
+
- Include necessary imports.
|
|
86
|
+
- Add documentation comments (`/** ... */`) explaining the mapping logic for complex transformations.
|