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.
Files changed (463) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/CHANGELOG.md +24 -0
  4. package/README.md +175 -168
  5. package/THIRD_PARTY_NOTICES.md +224 -4
  6. package/agents/android-architect.md +89 -0
  7. package/agents/android-performance-engineer.md +92 -0
  8. package/agents/android-test-engineer.md +97 -0
  9. package/agents/flutter-test-engineer.md +2 -0
  10. package/agents/ios-architect.md +93 -0
  11. package/agents/ios-performance-engineer.md +92 -0
  12. package/agents/ios-test-engineer.md +95 -0
  13. package/agents/lead-mobile.md +10 -1
  14. package/agents/mobile-staff-engineer.md +1 -1
  15. package/agents/rn-architect.md +94 -0
  16. package/agents/rn-performance-engineer.md +92 -0
  17. package/agents/rn-test-engineer.md +98 -0
  18. package/bin/reis-mobile.mjs +59 -17
  19. package/commands/debate.md +10 -1
  20. package/commands/debug.md +60 -0
  21. package/commands/reis-mobile.md +7 -2
  22. package/core/config/project.mjs +59 -0
  23. package/core/registry/frontmatter.mjs +15 -4
  24. package/core/registry/registry.mjs +21 -1
  25. package/core/router/intents.mjs +2 -0
  26. package/core/router/router.mjs +10 -5
  27. package/package.json +1 -1
  28. package/skills/android-adaptive/SKILL.md +304 -0
  29. package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/container-behavior.md +112 -0
  30. package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/get-started.md +69 -0
  31. package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/index.md +81 -0
  32. package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/item-behavior.md +170 -0
  33. package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/container-properties.md +415 -0
  34. package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/get-started.md +51 -0
  35. package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/index.md +73 -0
  36. package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/item-properties.md +170 -0
  37. package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/mediaquery/index.md +333 -0
  38. package/skills/android-adaptive/references/android/develop/ui/compose/tooling/debug.md +114 -0
  39. package/skills/android-adaptive/references/android/guide/navigation/navigation-3/recipes/material-listdetail.md +141 -0
  40. package/skills/android-agp-9-upgrade/SKILL.md +106 -0
  41. package/skills/android-agp-9-upgrade/references/android/build/migrate-to-built-in-kotlin.md +416 -0
  42. package/skills/android-agp-9-upgrade/references/android/build/releases/agp-9-0-0-release-notes.md +554 -0
  43. package/skills/android-agp-9-upgrade/references/buildconfig.md +54 -0
  44. package/skills/android-agp-9-upgrade/references/ksp-kapt.md +39 -0
  45. package/skills/android-agp-9-upgrade/references/paparazzi-gradle-9.md +30 -0
  46. package/skills/android-agp-9-upgrade/references/recipes.md +62 -0
  47. package/skills/android-appfunctions/SKILL.md +74 -0
  48. package/skills/android-appfunctions/references/adb-interaction-testing.md +95 -0
  49. package/skills/android-appfunctions/references/context.md +26 -0
  50. package/skills/android-appfunctions/references/feature-discovery-analysis.md +71 -0
  51. package/skills/android-appfunctions/references/implementation-configuration.md +282 -0
  52. package/skills/android-appfunctions/references/kdoc-refinement-optimization.md +75 -0
  53. package/skills/android-appfunctions/references/migrate-to-service-entry-point.md +226 -0
  54. package/skills/android-camerax/SKILL.md +135 -0
  55. package/skills/android-camerax/references/camera1-to-camerax.md +198 -0
  56. package/skills/android-camerax/references/camera2-to-camerax.md +193 -0
  57. package/skills/android-camerax/references/expert-blueprints.md +58 -0
  58. package/skills/android-camerax/references/foldables.md +83 -0
  59. package/skills/android-camerax/references/immutability.md +60 -0
  60. package/skills/android-camerax/references/low-light.md +124 -0
  61. package/skills/android-camerax/references/mlkit-spatial.md +75 -0
  62. package/skills/android-camerax/references/modern-apis.md +42 -0
  63. package/skills/android-camerax/references/testing.md +69 -0
  64. package/skills/android-camerax/references/thermals.md +85 -0
  65. package/skills/android-camerax/references/wear-os.md +76 -0
  66. package/skills/android-camerax/references/xr.md +54 -0
  67. package/skills/android-cli/SKILL.md +474 -0
  68. package/skills/android-cli/references/interact.md +113 -0
  69. package/skills/android-cli/references/journeys.md +120 -0
  70. package/skills/android-code-review/SKILL.md +58 -0
  71. package/skills/android-display-glasses-with-jetpack-compose-glimmer/SKILL.md +340 -0
  72. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/design/ui/ai-glasses/guides/interaction/inputs.md +67 -0
  73. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/access-hardware-projected-context.md +388 -0
  74. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/buttons.md +139 -0
  75. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/cards.md +148 -0
  76. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/focus.md +107 -0
  77. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/icons.md +90 -0
  78. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/text.md +69 -0
  79. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/title-chips.md +82 -0
  80. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/request-hardware-permissions.md +213 -0
  81. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/button-samples-source.md +176 -0
  82. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/button-source.md +203 -0
  83. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/card-samples-source.md +296 -0
  84. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/card-source.md +515 -0
  85. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/deptheffect-source.md +224 -0
  86. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/deptheffectlevels-source.md +105 -0
  87. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/glimmersansflextypography-source.md +270 -0
  88. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/glimmertheme-source.md +182 -0
  89. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/icon-source.md +388 -0
  90. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/iconbutton-source.md +126 -0
  91. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/iconsizes-source.md +78 -0
  92. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/list-source.md +27 -0
  93. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/listitem-source.md +272 -0
  94. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/liststate-source.md +427 -0
  95. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/material-hct-source.md +217 -0
  96. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/projectedcontext-source.md +265 -0
  97. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/stack-source.md +368 -0
  98. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/stackitemscope-source.md +440 -0
  99. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/stackstate-source.md +325 -0
  100. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/surface-source.md +1211 -0
  101. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/titlechip-samples-source.md +101 -0
  102. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/titlechip-source.md +131 -0
  103. package/skills/android-edge-to-edge/SKILL.md +429 -0
  104. package/skills/android-engage-sdk-integration/SKILL.md +130 -0
  105. package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/faq.md +439 -0
  106. package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/food.md +1149 -0
  107. package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/healthandfitness.md +1055 -0
  108. package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/listen.md +1050 -0
  109. package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/otherverticals.md +1301 -0
  110. package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/read.md +910 -0
  111. package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/shopping.md +1224 -0
  112. package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/social.md +719 -0
  113. package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/travel.md +1413 -0
  114. package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/tv/continue-watching/index.md +19 -0
  115. package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/tv/entitlements.md +353 -0
  116. package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/tv/getting-started.md +202 -0
  117. package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/tv/recommendations.md +471 -0
  118. package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/watch.md +1081 -0
  119. package/skills/android-engage-sdk-integration/references/clusters.md +154 -0
  120. package/skills/android-engage-sdk-integration/references/common.md +519 -0
  121. package/skills/android-engage-sdk-integration/references/patterns.md +527 -0
  122. package/skills/android-engage-sdk-integration/references/requests.md +260 -0
  123. package/skills/android-engage-sdk-integration/references/schemas/food.md +509 -0
  124. package/skills/android-engage-sdk-integration/references/schemas/listen.md +842 -0
  125. package/skills/android-engage-sdk-integration/references/schemas/other.md +220 -0
  126. package/skills/android-engage-sdk-integration/references/schemas/read.md +412 -0
  127. package/skills/android-engage-sdk-integration/references/schemas/shopping.md +357 -0
  128. package/skills/android-engage-sdk-integration/references/schemas/social.md +228 -0
  129. package/skills/android-engage-sdk-integration/references/schemas/travel.md +923 -0
  130. package/skills/android-engage-sdk-integration/references/schemas/tv.md +1226 -0
  131. package/skills/android-engage-sdk-integration/references/schemas/watch.md +1137 -0
  132. package/skills/android-engage-sdk-integration/references/troubleshooting.md +39 -0
  133. package/skills/android-gradle-build-debug/SKILL.md +71 -0
  134. package/skills/android-intent-security/SKILL.md +550 -0
  135. package/skills/android-leanback-to-compose-tv-migration/SKILL.md +743 -0
  136. package/skills/android-leanback-to-compose-tv-migration/references/android/training/tv/get-started/navigation.md +372 -0
  137. package/skills/android-leanback-to-compose-tv-migration/references/android/training/tv/playback/compose/browse.md +243 -0
  138. package/skills/android-leanback-to-compose-tv-migration/references/android/training/tv/playback/compose/index.md +153 -0
  139. package/skills/android-media3-cast-integration/SKILL.md +236 -0
  140. package/skills/android-media3-cast-integration/references/android/media/media3/cast/create-castplayer.md +390 -0
  141. package/skills/android-media3-cast-integration/references/android/media/media3/cast/customize-castoptions.md +93 -0
  142. package/skills/android-media3-cast-integration/references/android/media/media3/cast/index.md +21 -0
  143. package/skills/android-migrate-xml-views-to-jetpack-compose/SKILL.md +127 -0
  144. package/skills/android-migrate-xml-views-to-jetpack-compose/references/analysis-of-the-project-and-layout.md +42 -0
  145. package/skills/android-migrate-xml-views-to-jetpack-compose/references/android/develop/ui/compose/designsystems/migrate-xml-theme-to-compose.md +171 -0
  146. package/skills/android-migrate-xml-views-to-jetpack-compose/references/android/develop/ui/compose/migrate/interoperability-apis/compose-in-views.md +299 -0
  147. package/skills/android-migrate-xml-views-to-jetpack-compose/references/android/develop/ui/compose/migrate/interoperability-apis/views-in-compose.md +286 -0
  148. package/skills/android-migrate-xml-views-to-jetpack-compose/references/android/develop/ui/compose/setup-compose-dependencies-and-compiler.md +197 -0
  149. package/skills/android-migrate-xml-views-to-jetpack-compose/references/identify-optimal-xml-candidate.md +31 -0
  150. package/skills/android-migrate-xml-views-to-jetpack-compose/references/xml-layout-migration.md +86 -0
  151. package/skills/android-ml-kit-genai-prompt-api/SKILL.md +124 -0
  152. package/skills/android-ml-kit-genai-prompt-api/references/get-started.md +272 -0
  153. package/skills/android-ml-kit-genai-prompt-api/references/prefix-caching.md +146 -0
  154. package/skills/android-ml-kit-genai-prompt-api/references/prompt-design.md +55 -0
  155. package/skills/android-ml-kit-genai-prompt-api/references/prompt-optimization.md +74 -0
  156. package/skills/android-ml-kit-genai-prompt-api/references/structured-output.md +219 -0
  157. package/skills/android-ml-kit-genai-prompt-api/references/system-instructions.md +71 -0
  158. package/skills/android-navigation-3/SKILL.md +122 -0
  159. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/index.md +51 -0
  160. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/migration-guide.md +670 -0
  161. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/animations.md +147 -0
  162. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/basic.md +89 -0
  163. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/basicdsl.md +85 -0
  164. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/basicsaveable.md +90 -0
  165. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/bottomsheet.md +195 -0
  166. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/common-ui.md +200 -0
  167. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/conditional-transitions.md +182 -0
  168. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/conditional.md +230 -0
  169. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/deeplinks-custommatcher.md +176 -0
  170. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/deeplinks-staticuri.md +140 -0
  171. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/deeplinks-syntheticbackstack.md +184 -0
  172. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/dialog.md +107 -0
  173. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/lifecycle-owner.md +185 -0
  174. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/material-listdetail.md +141 -0
  175. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/material-supportingpane.md +145 -0
  176. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/modular-hilt.md +283 -0
  177. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/modular-koin.md +287 -0
  178. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/multiple-backstacks.md +468 -0
  179. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/passingarguments.md +371 -0
  180. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/results-event.md +273 -0
  181. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/results-state.md +266 -0
  182. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/scenes-listdetail.md +435 -0
  183. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/scenes-twopane.md +244 -0
  184. package/skills/android-navigation-3/references/android/guide/navigation/type-safe-destinations.md +129 -0
  185. package/skills/android-navigation-event/SKILL.md +312 -0
  186. package/skills/android-navigation-event/references/android/guide/navigation/navigation-event/dispatcher.md +134 -0
  187. package/skills/android-navigation-event/references/android/guide/navigation/navigation-event/handle-back.md +217 -0
  188. package/skills/android-navigation-event/references/android/guide/navigation/navigation-event/index.md +83 -0
  189. package/skills/android-navigation-event/references/android/guide/navigation/navigation-event/setup.md +32 -0
  190. package/skills/android-play-billing-library-version-upgrade/SKILL.md +96 -0
  191. package/skills/android-play-billing-library-version-upgrade/references/android/google/play/billing/release-notes.md +1240 -0
  192. package/skills/android-play-billing-library-version-upgrade/references/migration-logic.md +78 -0
  193. package/skills/android-play-billing-library-version-upgrade/references/version-checklist.md +54 -0
  194. package/skills/android-play-policy-insights/SKILL.md +172 -0
  195. package/skills/android-play-policy-insights/resources/common_mandates.md +100 -0
  196. package/skills/android-play-policy-insights/resources/compliance_report_template.md +59 -0
  197. package/skills/android-play-policy-insights/resources/critic.md +86 -0
  198. package/skills/android-play-policy-insights/resources/goal_data_safety.md +212 -0
  199. package/skills/android-play-policy-insights/resources/goal_permissions_and_apis.md +459 -0
  200. package/skills/android-play-policy-insights/resources/goal_user_account.md +106 -0
  201. package/skills/android-play-policy-insights/resources/policies.json +321 -0
  202. package/skills/android-play-policy-insights/resources/scanner_config.json +843 -0
  203. package/skills/android-play-policy-insights/scripts/generate_report.py +860 -0
  204. package/skills/android-play-policy-insights/scripts/orchestrator.py +1313 -0
  205. package/skills/android-play-policy-insights/scripts/play_store_scraper.py +410 -0
  206. package/skills/android-play-policy-insights/scripts/scanner.py +261 -0
  207. package/skills/android-play-policy-insights/scripts/template_engine.py +243 -0
  208. package/skills/android-profiler/SKILL.md +60 -0
  209. package/skills/android-profiler/analysis/analysis_orchestrator.md +32 -0
  210. package/skills/android-profiler/analysis/workflows/perfetto-sql/perfetto_sql.md +28 -0
  211. package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/perfetto_trace_analysis.md +121 -0
  212. package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/guiding_principles.md +51 -0
  213. package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/domain_hints_template.md +7 -0
  214. package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_cpu.md +56 -0
  215. package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_graphics.md +51 -0
  216. package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_io.md +46 -0
  217. package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_ipc.md +41 -0
  218. package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_memory.md +55 -0
  219. package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_power.md +33 -0
  220. package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/per_candidate_analysis.md +172 -0
  221. package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/triage.md +94 -0
  222. package/skills/android-profiler/recording/recording_orchestrator.md +36 -0
  223. package/skills/android-profiler/recording/workflows/perfetto-trace-recording/perfetto_trace_recording.md +148 -0
  224. package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/app_jank.pftxt +43 -0
  225. package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/cpu_profile.pftxt +35 -0
  226. package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/java_heap_dump.pftxt +21 -0
  227. package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/long_background.pftxt +37 -0
  228. package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/memory_counters.pftxt +45 -0
  229. package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/native_heap.pftxt +21 -0
  230. package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/sched_cpu.pftxt +33 -0
  231. package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/trace_config_reference.md +102 -0
  232. package/skills/android-profiler/references/env_setup.md +15 -0
  233. package/skills/android-profiler/references/perfetto/setup.md +29 -0
  234. package/skills/android-profiler/references/perfetto/sql.md +327 -0
  235. package/skills/android-r8-analyzer/SKILL.md +72 -0
  236. package/skills/android-r8-analyzer/references/CONFIGURATION-ANALYZER.md +287 -0
  237. package/skills/android-r8-analyzer/references/CONFIGURATION.md +44 -0
  238. package/skills/android-r8-analyzer/references/KEEP-RULES-IMPACT-HIERARCHY.md +83 -0
  239. package/skills/android-r8-analyzer/references/REDUNDANT-RULES.md +222 -0
  240. package/skills/android-r8-analyzer/references/REFLECTION-GUIDE.md +139 -0
  241. package/skills/android-r8-analyzer/references/REPORT_FORMAT.md +51 -0
  242. package/skills/android-r8-analyzer/references/android/topic/performance/app-optimization/enable-app-optimization.md +252 -0
  243. package/skills/android-r8-analyzer/references/android/training/testing/other-components/ui-automator.md +312 -0
  244. package/skills/android-restore-credentials/SKILL.md +359 -0
  245. package/skills/android-restore-credentials/references/android/guide/topics/manifest/application-element.md +832 -0
  246. package/skills/android-restore-credentials/references/android/identity/passkeys/create-passkeys.md +327 -0
  247. package/skills/android-restore-credentials/references/android/identity/passkeys/sign-in-with-passkeys.md +219 -0
  248. package/skills/android-styles/SKILL.md +229 -0
  249. package/skills/android-styles/references/android/develop/ui/compose/designsystems/custom.md +459 -0
  250. package/skills/android-styles/references/android/develop/ui/compose/styles/fundamentals.md +421 -0
  251. package/skills/android-styles/references/android/develop/ui/compose/styles/state-animations.md +461 -0
  252. package/skills/android-styles/references/android/develop/ui/compose/styles/styles-vs-modifiers.md +48 -0
  253. package/skills/android-styles/references/android/develop/ui/compose/styles/theming.md +269 -0
  254. package/skills/android-verified-email/SKILL.md +432 -0
  255. package/skills/android-verified-email/references/android/identity/credential-manager/index.md +67 -0
  256. package/skills/android-verified-email/references/android/identity/digital-credentials/credential-verifier.md +166 -0
  257. package/skills/android-verified-email/references/android/identity/digital-credentials/email-verification-implementation.md +313 -0
  258. package/skills/android-verified-email/references/android/identity/digital-credentials/email-verification.md +158 -0
  259. package/skills/android-verified-email/references/android/identity/digital-credentials/index.md +112 -0
  260. package/skills/android-verified-email/references/android/identity/passkeys/create-passkeys.md +327 -0
  261. package/skills/android-verified-email/references/android/identity/sign-in/credential-manager-webview.md +84 -0
  262. package/skills/android-wear-compose-m3/SKILL.md +365 -0
  263. package/skills/android-wear-compose-m3/references/android/training/wearables/compose/migrate-to-material3.md +677 -0
  264. package/skills/android-wear-compose-m3/references/foundation/AmbientModeSample.kt.md +123 -0
  265. package/skills/android-wear-compose-m3/references/foundation/AmbientModeSample.kt.md.txt +123 -0
  266. package/skills/android-wear-compose-m3/references/foundation/CurvedWorldSample.kt.md +430 -0
  267. package/skills/android-wear-compose-m3/references/foundation/CurvedWorldSample.kt.md.txt +430 -0
  268. package/skills/android-wear-compose-m3/references/foundation/ExpandableSample.kt.md +99 -0
  269. package/skills/android-wear-compose-m3/references/foundation/ExpandableSample.kt.md.txt +99 -0
  270. package/skills/android-wear-compose-m3/references/foundation/HierarchicalFocusSample.kt.md +141 -0
  271. package/skills/android-wear-compose-m3/references/foundation/HierarchicalFocusSample.kt.md.txt +141 -0
  272. package/skills/android-wear-compose-m3/references/foundation/PagerSamples.kt.md +56 -0
  273. package/skills/android-wear-compose-m3/references/foundation/PagerSamples.kt.md.txt +56 -0
  274. package/skills/android-wear-compose-m3/references/foundation/RotarySamples.kt.md +153 -0
  275. package/skills/android-wear-compose-m3/references/foundation/RotarySamples.kt.md.txt +153 -0
  276. package/skills/android-wear-compose-m3/references/foundation/ScalingLazyColumnSample.kt.md +131 -0
  277. package/skills/android-wear-compose-m3/references/foundation/ScalingLazyColumnSample.kt.md.txt +131 -0
  278. package/skills/android-wear-compose-m3/references/foundation/SwipeToDismissBoxSample.kt.md +169 -0
  279. package/skills/android-wear-compose-m3/references/foundation/SwipeToDismissBoxSample.kt.md.txt +169 -0
  280. package/skills/android-wear-compose-m3/references/foundation/SwipeToRevealSample.kt.md +282 -0
  281. package/skills/android-wear-compose-m3/references/foundation/SwipeToRevealSample.kt.md.txt +282 -0
  282. package/skills/android-wear-compose-m3/references/foundation/TransformingLazyColumnSample.kt.md +335 -0
  283. package/skills/android-wear-compose-m3/references/foundation/TransformingLazyColumnSample.kt.md.txt +335 -0
  284. package/skills/android-wear-compose-m3/references/material3/AlertDialogSample.kt.md +377 -0
  285. package/skills/android-wear-compose-m3/references/material3/AlertDialogSample.kt.md.txt +377 -0
  286. package/skills/android-wear-compose-m3/references/material3/AnimatedTextSample.kt.md +165 -0
  287. package/skills/android-wear-compose-m3/references/material3/AnimatedTextSample.kt.md.txt +165 -0
  288. package/skills/android-wear-compose-m3/references/material3/ButtonGroupSample.kt.md +91 -0
  289. package/skills/android-wear-compose-m3/references/material3/ButtonGroupSample.kt.md.txt +91 -0
  290. package/skills/android-wear-compose-m3/references/material3/ButtonSample.kt.md +496 -0
  291. package/skills/android-wear-compose-m3/references/material3/ButtonSample.kt.md.txt +496 -0
  292. package/skills/android-wear-compose-m3/references/material3/CardSample.kt.md +470 -0
  293. package/skills/android-wear-compose-m3/references/material3/CardSample.kt.md.txt +470 -0
  294. package/skills/android-wear-compose-m3/references/material3/CheckboxButtonSample.kt.md +67 -0
  295. package/skills/android-wear-compose-m3/references/material3/CheckboxButtonSample.kt.md.txt +67 -0
  296. package/skills/android-wear-compose-m3/references/material3/ConfirmationDialogSample.kt.md +162 -0
  297. package/skills/android-wear-compose-m3/references/material3/ConfirmationDialogSample.kt.md.txt +162 -0
  298. package/skills/android-wear-compose-m3/references/material3/CurvedTextSamples.kt.md +78 -0
  299. package/skills/android-wear-compose-m3/references/material3/CurvedTextSamples.kt.md.txt +78 -0
  300. package/skills/android-wear-compose-m3/references/material3/DatePickerSample.kt.md +131 -0
  301. package/skills/android-wear-compose-m3/references/material3/DatePickerSample.kt.md.txt +131 -0
  302. package/skills/android-wear-compose-m3/references/material3/DynamicColorSchemeSample.kt.md +74 -0
  303. package/skills/android-wear-compose-m3/references/material3/DynamicColorSchemeSample.kt.md.txt +74 -0
  304. package/skills/android-wear-compose-m3/references/material3/EdgeButtonSample.kt.md +63 -0
  305. package/skills/android-wear-compose-m3/references/material3/EdgeButtonSample.kt.md.txt +63 -0
  306. package/skills/android-wear-compose-m3/references/material3/FadingExpandingLabelSample.kt.md +60 -0
  307. package/skills/android-wear-compose-m3/references/material3/FadingExpandingLabelSample.kt.md.txt +60 -0
  308. package/skills/android-wear-compose-m3/references/material3/IconButtonSample.kt.md +125 -0
  309. package/skills/android-wear-compose-m3/references/material3/IconButtonSample.kt.md.txt +125 -0
  310. package/skills/android-wear-compose-m3/references/material3/IconToggleButtonSample.kt.md +116 -0
  311. package/skills/android-wear-compose-m3/references/material3/IconToggleButtonSample.kt.md.txt +116 -0
  312. package/skills/android-wear-compose-m3/references/material3/LevelIndicatorSample.kt.md +68 -0
  313. package/skills/android-wear-compose-m3/references/material3/LevelIndicatorSample.kt.md.txt +68 -0
  314. package/skills/android-wear-compose-m3/references/material3/LinearProgressIndicatorSample.kt.md +50 -0
  315. package/skills/android-wear-compose-m3/references/material3/LinearProgressIndicatorSample.kt.md.txt +50 -0
  316. package/skills/android-wear-compose-m3/references/material3/ListHeaderSample.kt.md +177 -0
  317. package/skills/android-wear-compose-m3/references/material3/ListHeaderSample.kt.md.txt +177 -0
  318. package/skills/android-wear-compose-m3/references/material3/OneHandedGestureSamples.kt.md +651 -0
  319. package/skills/android-wear-compose-m3/references/material3/OneHandedGestureSamples.kt.md.txt +651 -0
  320. package/skills/android-wear-compose-m3/references/material3/OpenOnPhoneDialogSample.kt.md +57 -0
  321. package/skills/android-wear-compose-m3/references/material3/OpenOnPhoneDialogSample.kt.md.txt +57 -0
  322. package/skills/android-wear-compose-m3/references/material3/PageIndicatorSample.kt.md +110 -0
  323. package/skills/android-wear-compose-m3/references/material3/PageIndicatorSample.kt.md.txt +110 -0
  324. package/skills/android-wear-compose-m3/references/material3/PagerScaffoldSample.kt.md +204 -0
  325. package/skills/android-wear-compose-m3/references/material3/PagerScaffoldSample.kt.md.txt +204 -0
  326. package/skills/android-wear-compose-m3/references/material3/PickerGroupSample.kt.md +139 -0
  327. package/skills/android-wear-compose-m3/references/material3/PickerGroupSample.kt.md.txt +139 -0
  328. package/skills/android-wear-compose-m3/references/material3/PickerSample.kt.md +111 -0
  329. package/skills/android-wear-compose-m3/references/material3/PickerSample.kt.md.txt +111 -0
  330. package/skills/android-wear-compose-m3/references/material3/PlaceholderSample.kt.md +184 -0
  331. package/skills/android-wear-compose-m3/references/material3/PlaceholderSample.kt.md.txt +184 -0
  332. package/skills/android-wear-compose-m3/references/material3/ProgressIndicatorSample.kt.md +263 -0
  333. package/skills/android-wear-compose-m3/references/material3/ProgressIndicatorSample.kt.md.txt +263 -0
  334. package/skills/android-wear-compose-m3/references/material3/RadioButtonSample.kt.md +105 -0
  335. package/skills/android-wear-compose-m3/references/material3/RadioButtonSample.kt.md.txt +105 -0
  336. package/skills/android-wear-compose-m3/references/material3/ScaffoldSample.kt.md +146 -0
  337. package/skills/android-wear-compose-m3/references/material3/ScaffoldSample.kt.md.txt +146 -0
  338. package/skills/android-wear-compose-m3/references/material3/ScrollAwaySample.kt.md +97 -0
  339. package/skills/android-wear-compose-m3/references/material3/ScrollAwaySample.kt.md.txt +97 -0
  340. package/skills/android-wear-compose-m3/references/material3/ScrollIndicatorSample.kt.md +66 -0
  341. package/skills/android-wear-compose-m3/references/material3/ScrollIndicatorSample.kt.md.txt +66 -0
  342. package/skills/android-wear-compose-m3/references/material3/SliderSample.kt.md +86 -0
  343. package/skills/android-wear-compose-m3/references/material3/SliderSample.kt.md.txt +86 -0
  344. package/skills/android-wear-compose-m3/references/material3/StepperSample.kt.md +148 -0
  345. package/skills/android-wear-compose-m3/references/material3/StepperSample.kt.md.txt +148 -0
  346. package/skills/android-wear-compose-m3/references/material3/SurfaceTransformationSample.kt.md +166 -0
  347. package/skills/android-wear-compose-m3/references/material3/SurfaceTransformationSample.kt.md.txt +166 -0
  348. package/skills/android-wear-compose-m3/references/material3/SwipeToDismissBoxSample.kt.md +172 -0
  349. package/skills/android-wear-compose-m3/references/material3/SwipeToDismissBoxSample.kt.md.txt +172 -0
  350. package/skills/android-wear-compose-m3/references/material3/SwipeToRevealSample.kt.md +367 -0
  351. package/skills/android-wear-compose-m3/references/material3/SwipeToRevealSample.kt.md.txt +367 -0
  352. package/skills/android-wear-compose-m3/references/material3/SwitchButtonSample.kt.md +66 -0
  353. package/skills/android-wear-compose-m3/references/material3/SwitchButtonSample.kt.md.txt +66 -0
  354. package/skills/android-wear-compose-m3/references/material3/TextButtonSample.kt.md +115 -0
  355. package/skills/android-wear-compose-m3/references/material3/TextButtonSample.kt.md.txt +115 -0
  356. package/skills/android-wear-compose-m3/references/material3/TextToggleButtonSample.kt.md +71 -0
  357. package/skills/android-wear-compose-m3/references/material3/TextToggleButtonSample.kt.md.txt +71 -0
  358. package/skills/android-wear-compose-m3/references/material3/TimePickerSample.kt.md +151 -0
  359. package/skills/android-wear-compose-m3/references/material3/TimePickerSample.kt.md.txt +151 -0
  360. package/skills/android-wear-compose-m3/references/material3/TimeTextSample.kt.md +65 -0
  361. package/skills/android-wear-compose-m3/references/material3/TimeTextSample.kt.md.txt +65 -0
  362. package/skills/android-wear-compose-m3/references/material3/TransformationSpecSample.kt.md +246 -0
  363. package/skills/android-wear-compose-m3/references/material3/TransformationSpecSample.kt.md.txt +246 -0
  364. package/skills/android-wear-compose-m3/references/material3/TransformingLazyColumnNotificationsSample.kt.md +89 -0
  365. package/skills/android-wear-compose-m3/references/material3/TransformingLazyColumnNotificationsSample.kt.md.txt +89 -0
  366. package/skills/android-wear-compose-m3/references/material3/TransformingLazyColumnSample.kt.md +309 -0
  367. package/skills/android-wear-compose-m3/references/material3/TransformingLazyColumnSample.kt.md.txt +309 -0
  368. package/skills/android-wear-compose-m3/references/navigation3/SwipeDismissableSceneStrategySample.kt.md +205 -0
  369. package/skills/android-wear-compose-m3/references/navigation3/SwipeDismissableSceneStrategySample.kt.md.txt +205 -0
  370. package/skills/{architecture-feature-first → flutter-architecture-feature-first}/SKILL.md +1 -1
  371. package/skills/{bloc → flutter-bloc}/SKILL.md +1 -1
  372. package/skills/flutter-build-debug/SKILL.md +66 -0
  373. package/skills/{code-review → flutter-code-review}/SKILL.md +1 -1
  374. package/skills/{dart-3-updates → flutter-dart-3-updates}/SKILL.md +1 -1
  375. package/skills/{dart-fix-runtime-errors → flutter-dart-fix-runtime-errors}/SKILL.md +1 -1
  376. package/skills/{dart-resolve-package-conflicts → flutter-dart-resolve-package-conflicts}/SKILL.md +1 -1
  377. package/skills/{dart-run-static-analysis → flutter-dart-run-static-analysis}/SKILL.md +1 -1
  378. package/skills/{dart-use-pattern-matching → flutter-dart-use-pattern-matching}/SKILL.md +1 -1
  379. package/skills/{effective-dart → flutter-effective-dart}/SKILL.md +1 -1
  380. package/skills/{provider → flutter-provider}/SKILL.md +1 -1
  381. package/skills/{riverpod → flutter-riverpod}/SKILL.md +1 -1
  382. package/skills/ios-cocoapods-debug/SKILL.md +65 -0
  383. package/skills/ios-code-review/SKILL.md +56 -0
  384. package/skills/ios-xcode-build-debug/SKILL.md +66 -0
  385. package/skills/{detect-mobile-stack → mobile-detect-stack}/SKILL.md +1 -1
  386. package/skills/mobile-firebase/SKILL.md +54 -0
  387. package/skills/mobile-firebase/references/android/ai-logic.md +31 -0
  388. package/skills/mobile-firebase/references/android/analytics.md +33 -0
  389. package/skills/mobile-firebase/references/android/app-check.md +36 -0
  390. package/skills/mobile-firebase/references/android/auth.md +44 -0
  391. package/skills/mobile-firebase/references/android/crashlytics.md +31 -0
  392. package/skills/mobile-firebase/references/android/firestore.md +44 -0
  393. package/skills/mobile-firebase/references/android/functions.md +33 -0
  394. package/skills/mobile-firebase/references/android/in-app-messaging.md +28 -0
  395. package/skills/mobile-firebase/references/android/messaging.md +41 -0
  396. package/skills/mobile-firebase/references/android/realtime-database.md +50 -0
  397. package/skills/mobile-firebase/references/android/remote-config.md +43 -0
  398. package/skills/mobile-firebase/references/android/sql-connect.md +31 -0
  399. package/skills/mobile-firebase/references/android/storage.md +39 -0
  400. package/skills/mobile-firebase/references/android.md +30 -0
  401. package/skills/{firebase-ai/SKILL.md → mobile-firebase/references/flutter/ai-logic.md} +2 -8
  402. package/skills/{firebase-analytics/SKILL.md → mobile-firebase/references/flutter/analytics.md} +2 -8
  403. package/skills/{firebase-app-check/SKILL.md → mobile-firebase/references/flutter/app-check.md} +2 -8
  404. package/skills/{firebase-auth/SKILL.md → mobile-firebase/references/flutter/auth.md} +2 -8
  405. package/skills/{firebase-crashlytics/SKILL.md → mobile-firebase/references/flutter/crashlytics.md} +2 -8
  406. package/skills/{firebase-cloud-firestore/SKILL.md → mobile-firebase/references/flutter/firestore.md} +2 -8
  407. package/skills/{firebase-cloud-functions/SKILL.md → mobile-firebase/references/flutter/functions.md} +2 -8
  408. package/skills/{firebase-in-app-messaging/SKILL.md → mobile-firebase/references/flutter/in-app-messaging.md} +2 -8
  409. package/skills/{firebase-messaging/SKILL.md → mobile-firebase/references/flutter/messaging.md} +2 -8
  410. package/skills/{firebase-database/SKILL.md → mobile-firebase/references/flutter/realtime-database.md} +2 -8
  411. package/skills/{firebase-remote-config/SKILL.md → mobile-firebase/references/flutter/remote-config.md} +2 -8
  412. package/skills/{flutterfire-configure/SKILL.md → mobile-firebase/references/flutter/setup-flutterfire.md} +1 -8
  413. package/skills/{firebase-data-connect/SKILL.md → mobile-firebase/references/flutter/sql-connect.md} +2 -8
  414. package/skills/{firebase-storage/SKILL.md → mobile-firebase/references/flutter/storage.md} +2 -8
  415. package/skills/mobile-firebase/references/flutter.md +36 -0
  416. package/skills/mobile-firebase/references/ios/ai-logic.md +30 -0
  417. package/skills/mobile-firebase/references/ios/analytics.md +33 -0
  418. package/skills/mobile-firebase/references/ios/app-check.md +36 -0
  419. package/skills/mobile-firebase/references/ios/auth.md +48 -0
  420. package/skills/mobile-firebase/references/ios/crashlytics.md +34 -0
  421. package/skills/mobile-firebase/references/ios/firestore.md +53 -0
  422. package/skills/mobile-firebase/references/ios/functions.md +35 -0
  423. package/skills/mobile-firebase/references/ios/in-app-messaging.md +26 -0
  424. package/skills/mobile-firebase/references/ios/messaging.md +45 -0
  425. package/skills/mobile-firebase/references/ios/realtime-database.md +49 -0
  426. package/skills/mobile-firebase/references/ios/remote-config.md +44 -0
  427. package/skills/mobile-firebase/references/ios/sql-connect.md +33 -0
  428. package/skills/mobile-firebase/references/ios/storage.md +36 -0
  429. package/skills/mobile-firebase/references/ios.md +28 -0
  430. package/skills/mobile-firebase/references/react-native/ai-logic.md +32 -0
  431. package/skills/mobile-firebase/references/react-native/analytics.md +43 -0
  432. package/skills/mobile-firebase/references/react-native/app-check.md +35 -0
  433. package/skills/mobile-firebase/references/react-native/auth.md +50 -0
  434. package/skills/mobile-firebase/references/react-native/crashlytics.md +36 -0
  435. package/skills/mobile-firebase/references/react-native/firestore.md +45 -0
  436. package/skills/mobile-firebase/references/react-native/functions.md +28 -0
  437. package/skills/mobile-firebase/references/react-native/in-app-messaging.md +27 -0
  438. package/skills/mobile-firebase/references/react-native/messaging.md +46 -0
  439. package/skills/mobile-firebase/references/react-native/realtime-database.md +46 -0
  440. package/skills/mobile-firebase/references/react-native/remote-config.md +32 -0
  441. package/skills/mobile-firebase/references/react-native/sql-connect.md +11 -0
  442. package/skills/mobile-firebase/references/react-native/storage.md +30 -0
  443. package/skills/mobile-firebase/references/react-native.md +29 -0
  444. package/skills/mobile-test/SKILL.md +63 -0
  445. package/skills/mobile-test/references/android/setup/GUIDE.md +183 -0
  446. package/skills/mobile-test/references/android/setup/references/android/develop/ui/compose/testing/common-patterns.md +181 -0
  447. package/skills/mobile-test/references/android/setup/references/android/studio/preview/compose-screenshot-testing.md +255 -0
  448. package/skills/mobile-test/references/android/setup/references/android/training/dependency-injection/hilt-testing.md +447 -0
  449. package/skills/mobile-test/references/android.md +83 -0
  450. package/skills/{dart-collect-coverage/SKILL.md → mobile-test/references/flutter/coverage.md} +2 -11
  451. package/skills/{dart-generate-test-mocks/SKILL.md → mobile-test/references/flutter/generate-mocks.md} +2 -11
  452. package/skills/{flutter-add-integration-test/SKILL.md → mobile-test/references/flutter/integration-tests.md} +2 -11
  453. package/skills/{dart-migrate-to-checks-package/SKILL.md → mobile-test/references/flutter/migrate-to-checks.md} +2 -13
  454. package/skills/{mockito/SKILL.md → mobile-test/references/flutter/mockito.md} +1 -8
  455. package/skills/{mocktail/SKILL.md → mobile-test/references/flutter/mocktail.md} +1 -8
  456. package/skills/{patrol-e2e-testing/SKILL.md → mobile-test/references/flutter/patrol.md} +1 -8
  457. package/skills/{testing/SKILL.md → mobile-test/references/flutter/testing-guidelines.md} +1 -8
  458. package/skills/{dart-add-unit-test/SKILL.md → mobile-test/references/flutter/unit-tests.md} +2 -11
  459. package/skills/{flutter-add-widget-test/SKILL.md → mobile-test/references/flutter/widget-tests.md} +2 -11
  460. package/skills/mobile-test/references/flutter.md +44 -0
  461. package/skills/mobile-test/references/ios.md +79 -0
  462. package/skills/mobile-test/references/react-native.md +62 -0
  463. /package/skills/{dart-use-pattern-matching → flutter-dart-use-pattern-matching}/examples/json_patterns.dart +0 -0
@@ -0,0 +1,390 @@
1
+ The [`CastPlayer`](https://developer.android.com/reference/androidx/media3/cast/CastPlayer) is a Jetpack Media3 [Player](https://developer.android.com/reference/kotlin/androidx/media3/common/Player) implementation that supports
2
+ both local playback and casting to a remote Cast-enabled device. [`CastPlayer`](https://developer.android.com/reference/androidx/media3/cast/CastPlayer)
3
+ simplifies adding cast functionality to your app and provides rich features to
4
+ seamlessly switch between local and remote playback. This guide shows you how to
5
+ integrate [`CastPlayer`](https://developer.android.com/reference/androidx/media3/cast/CastPlayer) into your media app.
6
+
7
+ To integrate Cast with other platforms, see the [Cast SDK](https://developers.google.com/cast/docs/developers).
8
+
9
+ ## Get a Cast-enabled device
10
+
11
+ To test `CastPlayer`, you need a [Cast-enabled device](https://store.google.com/gb/category/connected_home?hl=en-GB). Choices include Android
12
+ TV, Chromecast, smart speakers, and smart displays. Verify that your device is
13
+ set up and connected to the same Wi-Fi network as your development mobile for
14
+ discovery.
15
+
16
+ ## Add build dependencies
17
+
18
+ To start using `CastPlayer`, add the AndroidX Media3 and `CastPlayer`
19
+ dependencies to the `build.gradle` file of your app module.
20
+
21
+ ### Kotlin
22
+
23
+ implementation("androidx.media3:media3-exoplayer:1.11.0")
24
+ implementation("androidx.media3:media3-ui:1.11.0")
25
+ implementation("androidx.media3:media3-session:1.11.0")
26
+ implementation("androidx.media3:media3-cast:1.11.0")
27
+
28
+ ### Groovy
29
+
30
+ implementation "androidx.media3:media3-exoplayer:1.11.0"
31
+ implementation "androidx.media3:media3-ui:1.11.0"
32
+ implementation "androidx.media3:media3-session:1.11.0"
33
+ implementation "androidx.media3:media3-cast:1.11.0"
34
+
35
+ ## Configure your CastPlayer
36
+
37
+ To configure the [`CastPlayer`](https://developer.android.com/reference/androidx/media3/cast/CastPlayer), update your `AndroidManifest.xml` file with an
38
+ options provider.
39
+
40
+ ### Options provider
41
+
42
+ The [`CastPlayer`](https://developer.android.com/reference/androidx/media3/cast/CastPlayer) requires an options provider to configure its behavior. For a
43
+ basic setup, you can use the [`DefaultCastOptionsProvider`](https://developer.android.com/reference/androidx/media3/cast/DefaultCastOptionsProvider) by adding it to your
44
+ `AndroidManifest.xml` file. This uses default settings, including the default
45
+ receiver application.
46
+
47
+ <application>
48
+ ...
49
+ <meta-data
50
+ android:name="com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME"
51
+ android:value="androidx.media3.cast.DefaultCastOptionsProvider" />
52
+ ...
53
+ </application>
54
+
55
+ To customize the configuration, implement your own custom `OptionsProvider`. See
56
+ the [CastOptions](https://developer.android.com/media/media3/cast/customize-castoptions) guide to learn how.
57
+
58
+ ### Add a receiver for media transfers
59
+
60
+ Adding a `MediaTransferReceiver` to your manifest enables the System UI to
61
+ discover Cast-enabled devices on the network and reroute media without opening
62
+ the app activity. For example, a user can change the device playing your app's
63
+ media from the [media notification](https://developer.android.com/media/implement/surfaces/mobile).
64
+
65
+ <application>
66
+ ...
67
+ <receiver android:name="androidx.mediarouter.media.MediaTransferReceiver" />
68
+ ...
69
+ </application>
70
+
71
+ ## Build a CastPlayer
72
+
73
+ For remote playback with Cast, your app should be able to manage playback even
74
+ when the user isn't interacting with an Activity from your app, such as through
75
+ the system media notification. For this reason, you should create your
76
+ `ExoPlayer` (for local playback) and `CastPlayer` (for remote playback)
77
+ instances in a service, such as [MediaSessionService](https://developer.android.com/media/media3/session/background-playback#service-lifecycle) or [MediaLibraryService](https://developer.android.com/guide/topics/media/session/medialibraryservice).
78
+ First, create your `ExoPlayer` instance and then when building your
79
+ [`CastPlayer`](https://developer.android.com/reference/androidx/media3/cast/CastPlayer) instance, set `ExoPlayer` as the local player instance. You can
80
+ then switch media playback between your mobile and the Cast-enabled device from
81
+ the media notification or the lock screen notification. Media3 uses the **Output
82
+ Switcher** feature to handle player transfers when the output route changes from
83
+ local to remote or from remote to local.
84
+ ![Screenshot showing the Output Switcher UI in notifications.](https://developer.android.com/static/media/media3/cast/images/output_switcher.jpeg) Figure 1: (a) Device chip on Media notification (b) Cast-enabled devices shown on tapping the device chip (c) Device chip on Lock screen notification
85
+
86
+
87
+ ### Kotlin
88
+
89
+ ```kotlin
90
+ override fun onCreate() {
91
+ super.onCreate()
92
+
93
+ val exoPlayer = ExoPlayer.Builder(context).build()
94
+ val castPlayer = CastPlayer.Builder(context).setLocalPlayer(exoPlayer).build()
95
+
96
+ mediaSession = MediaSession.Builder(context, castPlayer).build()
97
+ }
98
+ ```
99
+
100
+ ### Java
101
+
102
+ ```java
103
+ @Override
104
+ public void onCreate() {
105
+ super.onCreate();
106
+
107
+ ExoPlayer exoPlayer = new ExoPlayer.Builder(context).build();
108
+ CastPlayer castPlayer = new CastPlayer.Builder(context).setLocalPlayer(exoPlayer).build();
109
+
110
+ mediaSession =
111
+ new MediaSession.Builder(/* context= */ context, /* player= */ castPlayer).build();
112
+ }
113
+ ```
114
+
115
+ <br />
116
+
117
+ > [!IMPORTANT]
118
+ > **Important:** The preceding code snippet shows the `onCreate` method of a `MediaSessionService`. In an `Activity`, players should be created in `onStart` or `onResume`.
119
+
120
+ ## Add UI elements
121
+
122
+ Add a [`MediaRouteButton`](https://developer.android.com/reference/androidx/mediarouter/app/MediaRouteButton) to your app's UI. Tapping the [`MediaRouteButton`](https://developer.android.com/reference/androidx/mediarouter/app/MediaRouteButton)
123
+ opens a dialog displaying a list of available Cast-enabled devices on the
124
+ network. When the user selects a device, the media playback is transferred from
125
+ the mobile to the selected receiver device. This section shows you how to add
126
+ the button and listen for events to update your UI when playback switches
127
+ between local and remote devices.
128
+
129
+ ### Set the MediaRouteButton
130
+
131
+ There are four ways to add the [`MediaRouteButton`](https://developer.android.com/reference/androidx/mediarouter/app/MediaRouteButton) to your activity's UI. The
132
+ best choice depends on your app's design and requirements.
133
+
134
+ - **Compose UI**: Add a button composable.
135
+ - **Views UI** :
136
+ - Add the button to the app bar menu.
137
+ - Add the button inside `PlayerView`.
138
+ - Add the button as a standard `View`.
139
+
140
+ ![Screenshot showing the MediaRouteButton in the UI.](https://developer.android.com/static/media/media3/cast/images/cast.jpeg) Figure 2: (a) MediaRouteButton in menu bar, (b) as a View, (c) in PlayerView, and (d) Dialog of Cast-enabled devices.
141
+
142
+ > [!IMPORTANT]
143
+ > **Important:** To use the [`MediaRouteButton`](https://developer.android.com/reference/androidx/mediarouter/app/MediaRouteButton) in Views UI, the containing activity must be a subclass of `FragmentActivity`.
144
+
145
+ > [!TIP]
146
+ > **Tip:** These screenshots are from the [demo-session](https://github.com/androidx/media/tree/release/demos/session) apps in Media3. You can checkout the app to see an example of `CastPlayer` implementation.
147
+
148
+ #### Add a Composable `MediaRouteButton` to the Player
149
+
150
+ You can add the [`MediaRouteButton`](https://developer.android.com/reference/androidx/mediarouter/app/MediaRouteButton) Composable to your player's UI. For more
151
+ information, see the [Compose](https://developer.android.com/media/media3/ui/compose) guide.
152
+
153
+
154
+ ```kotlin
155
+ @Composable
156
+ fun PlayerComposeView(player: Player, modifier: Modifier = Modifier) {
157
+ var controlsVisible by remember { mutableStateOf(false) }
158
+
159
+ Box(
160
+ modifier = modifier.clickable { controlsVisible = true },
161
+ contentAlignment = Alignment.Center,
162
+ ) {
163
+ PlayerSurface(player = player, modifier = modifier)
164
+ AnimatedVisibility(visible = controlsVisible, enter = fadeIn(), exit = fadeOut()) {
165
+ Box(modifier = Modifier.fillMaxSize()) {
166
+ MediaRouteButton(modifier = Modifier.align(Alignment.TopEnd))
167
+ PrimaryControls(player = player, modifier = Modifier.align(Alignment.Center))
168
+ }
169
+ }
170
+ }
171
+ }
172
+
173
+ @Composable
174
+ fun PrimaryControls(player: Player, modifier: Modifier = Modifier) {
175
+ // ...
176
+ }
177
+ ```
178
+
179
+ <br />
180
+
181
+ #### Add the `MediaRouteButton` to the PlayerView
182
+
183
+ You can add the [`MediaRouteButton`](https://developer.android.com/reference/androidx/mediarouter/app/MediaRouteButton) directly within the [PlayerView](https://developer.android.com/guide/topics/media/ui/playerview)'s UI
184
+ controls. After setting the [MediaController](https://developer.android.com/guide/topics/media/session/mediacontroller) as the player for your
185
+ `PlayerView`, provide a `MediaRouteButtonViewProvider` to display the Cast
186
+ button on the Player.
187
+
188
+
189
+ ### Kotlin
190
+
191
+ ```kotlin
192
+ override fun onStart() {
193
+ super.onStart()
194
+
195
+ playerView.player = mediaController
196
+ playerView.setMediaRouteButtonViewProvider(MediaRouteButtonViewProvider())
197
+ }
198
+ ```
199
+
200
+ ### Java
201
+
202
+ ```java
203
+ @Override
204
+ public void onStart() {
205
+ super.onStart();
206
+
207
+ playerView.setPlayer(mediaController);
208
+ playerView.setMediaRouteButtonViewProvider(new MediaRouteButtonViewProvider());
209
+ }
210
+ ```
211
+
212
+ <br />
213
+
214
+ #### Add the `MediaRouteButton` to the app bar menu
215
+
216
+ To set up a [`MediaRouteButton`](https://developer.android.com/reference/androidx/mediarouter/app/MediaRouteButton) in the app bar menu, create an XML menu and
217
+ override `onCreateOptionsMenu` in your `Activity`.
218
+
219
+ <menu xmlns:android="http://schemas.android.com/apk/res/android"
220
+ xmlns:app="http://schemas.android.com/apk/res-auto">
221
+ <item android:id="@+id/media_route_menu_item"
222
+ android:title="@string/media_route_menu_title"
223
+ app:showAsAction="always"
224
+ app:actionProviderClass="androidx.mediarouter.app.MediaRouteActionProvider"/>
225
+ </menu>
226
+
227
+
228
+ ### Kotlin
229
+
230
+ ```kotlin
231
+ override fun onCreateOptionsMenu(menu: Menu): Boolean {
232
+ // ...
233
+ menuInflater.inflate(R.menu.sample_media_route_button_menu, menu)
234
+ val menuItemFuture: ListenableFuture<MenuItem> =
235
+ MediaRouteButtonFactory.setUpMediaRouteButton(context, menu, R.id.media_route_menu_item)
236
+ Futures.addCallback(
237
+ menuItemFuture,
238
+ object : FutureCallback<MenuItem> {
239
+ override fun onSuccess(menuItem: MenuItem?) {
240
+ // Do something with the menu item.
241
+ }
242
+
243
+ override fun onFailure(t: Throwable) {
244
+ // Handle the failure.
245
+ }
246
+ },
247
+ executor,
248
+ )
249
+ // ...
250
+ return true
251
+ }
252
+ ```
253
+
254
+ ### Java
255
+
256
+ ```java
257
+ @Override
258
+ public boolean onCreateOptionsMenu(Menu menu) {
259
+ // ...
260
+ getMenuInflater().inflate(R.menu.sample_media_route_button_menu, menu);
261
+ ListenableFuture<MenuItem> menuItemFuture =
262
+ MediaRouteButtonFactory.setUpMediaRouteButton(context, menu, R.id.media_route_menu_item);
263
+ Futures.addCallback(
264
+ menuItemFuture,
265
+ new FutureCallback<MenuItem>() {
266
+ @Override
267
+ public void onSuccess(MenuItem menuItem) {
268
+ // Do something with the menu item.
269
+ }
270
+
271
+ @Override
272
+ public void onFailure(Throwable t) {
273
+ // Handle the failure.
274
+ }
275
+ },
276
+ executor);
277
+ // ...
278
+ return true;
279
+ }
280
+ ```
281
+
282
+ <br />
283
+
284
+ #### Add the `MediaRouteButton` as a View
285
+
286
+ You can set up a [`MediaRouteButton`](https://developer.android.com/reference/androidx/mediarouter/app/MediaRouteButton) in your activity layout.xml.
287
+
288
+ <androidx.mediarouter.app.MediaRouteButton
289
+ android:id="@+id/media_route_button"
290
+ android:layout_width="wrap_content"
291
+ android:layout_height="wrap_content"
292
+ app:mediaRouteButtonTint="@android:color/white" />
293
+
294
+ To complete the setup for the [`MediaRouteButton`](https://developer.android.com/reference/androidx/mediarouter/app/MediaRouteButton), use the Media3 Cast
295
+ `MediaRouteButtonFactory` in your `Activity` code.
296
+
297
+
298
+ ### Kotlin
299
+
300
+ ```kotlin
301
+ override fun onCreate(savedInstanceState: Bundle?) {
302
+ super.onCreate(savedInstanceState)
303
+
304
+ findViewById<MediaRouteButton>(R.id.media_route_button)?.also {
305
+ val unused = MediaRouteButtonFactory.setUpMediaRouteButton(context, it)
306
+ }
307
+ }
308
+ ```
309
+
310
+ ### Java
311
+
312
+ ```java
313
+ @Override
314
+ public void onCreate(Bundle savedInstanceState) {
315
+ super.onCreate(savedInstanceState);
316
+ // ...
317
+ MediaRouteButton button = findViewById(R.id.media_route_button);
318
+ ListenableFuture<Void> setUpFuture =
319
+ MediaRouteButtonFactory.setUpMediaRouteButton(context, button);
320
+ }
321
+ ```
322
+
323
+ <br />
324
+
325
+ ### Activity Listener
326
+
327
+ Create a `Player.Listener` in your `Activity` to listen for changes to media
328
+ playback location. When the `playbackType` changes between `PLAYBACK_TYPE_LOCAL`
329
+ and `PLAYBACK_TYPE_REMOTE`, you can adjust your UI as needed. To prevent memory
330
+ leaks and to confine listener activity to only when your app is visible,
331
+ register the listener in `onStart` and unregister it in `onStop`:
332
+
333
+
334
+ ### Kotlin
335
+
336
+ ```kotlin
337
+ private val playerListener: Player.Listener =
338
+ object : Player.Listener {
339
+ override fun onDeviceInfoChanged(deviceInfo: DeviceInfo) {
340
+ if (deviceInfo.playbackType == DeviceInfo.PLAYBACK_TYPE_LOCAL) {
341
+ // Add UI changes for local playback.
342
+ } else if (deviceInfo.playbackType == DeviceInfo.PLAYBACK_TYPE_REMOTE) {
343
+ // Add UI changes for remote playback.
344
+ }
345
+ }
346
+ }
347
+
348
+ override fun onStart() {
349
+ super.onStart()
350
+ mediaController.addListener(playerListener)
351
+ }
352
+
353
+ override fun onStop() {
354
+ super.onStop()
355
+ mediaController.removeListener(playerListener)
356
+ }
357
+ ```
358
+
359
+ ### Java
360
+
361
+ ```java
362
+ private final Player.Listener playerListener =
363
+ new Player.Listener() {
364
+ @Override
365
+ public void onDeviceInfoChanged(DeviceInfo deviceInfo) {
366
+ if (deviceInfo.playbackType == DeviceInfo.PLAYBACK_TYPE_LOCAL) {
367
+ // Add UI changes for local playback.
368
+ } else if (deviceInfo.playbackType == DeviceInfo.PLAYBACK_TYPE_REMOTE) {
369
+ // Add UI changes for remote playback.
370
+ }
371
+ }
372
+ };
373
+
374
+ @Override
375
+ protected void onStart() {
376
+ super.onStart();
377
+ mediaController.addListener(playerListener);
378
+ }
379
+
380
+ @Override
381
+ protected void onStop() {
382
+ super.onStop();
383
+ mediaController.removeListener(playerListener);
384
+ }
385
+ ```
386
+
387
+ <br />
388
+
389
+ For more information about listening and responding to playback events, see the
390
+ [player events](https://developer.android.com/media/media3/exoplayer/listening-to-player-events) guide.
@@ -0,0 +1,93 @@
1
+ To configure your app's Cast session, provide an [`OptionsProvider`](https://developers.google.com/android/reference/com/google/android/gms/cast/framework/OptionsProvider). Use the
2
+ [`CastOptions`](https://developers.google.com/android/reference/com/google/android/gms/cast/framework/CastOptions) object built by the provider to set the receiver application ID,
3
+ manage session lifecycles, and customize media playback behavior.
4
+
5
+ ## Use the default options provider
6
+
7
+ For a basic setup that uses the default Cast receiver application, add the
8
+ `DefaultCastOptionsProvider` to your app's `AndroidManifest.xml` file:
9
+
10
+ <application>
11
+ ...
12
+ <meta-data
13
+ android:name="com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME"
14
+ android:value="androidx.media3.cast.DefaultCastOptionsProvider" />
15
+ ...
16
+ </application>
17
+
18
+ ## Create a custom options provider
19
+
20
+ For more advanced configurations, such as setting a custom receiver application
21
+ ID, you need to create your own `OptionsProvider`.
22
+
23
+ ### 1. Declare the provider in your manifest
24
+
25
+ First, declare your custom provider in `AndroidManifest.xml`. Make sure to use
26
+ the fully qualified class name.
27
+
28
+ <application>
29
+ ...
30
+ <meta-data
31
+ android:name="com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME"
32
+ android:value="path.to.your.class.MyCustomCastOptionsProvider" />
33
+ ...
34
+ </application>
35
+
36
+ ### 2. Implement the OptionsProvider interface
37
+
38
+ Next, create a class that implements the `OptionsProvider` interface. In this
39
+ class, you must override `getCastOptions()` to return a `CastOptions` instance.
40
+ The custom `OptionsProvider` class is where you configure your Cast session, for
41
+ example, by setting your custom receiver application ID.
42
+
43
+ For more information, see [CastOptions.Builder](https://developers.google.com/android/reference/com/google/android/gms/cast/framework/CastOptions.Builder).
44
+
45
+
46
+ ### Kotlin
47
+
48
+ ```kotlin
49
+ class MyCustomCastOptionsProvider : OptionsProvider {
50
+
51
+ override fun getCastOptions(context: Context): CastOptions {
52
+ return CastOptions.Builder()
53
+ .setReceiverApplicationId(APP_ID)
54
+ .setRemoteToLocalEnabled(true)
55
+ .build()
56
+ }
57
+
58
+ override fun getAdditionalSessionProviders(context: Context): List<SessionProvider>? {
59
+ return null
60
+ }
61
+
62
+ companion object {
63
+ // Add your receiver app ID in <APP_ID>.
64
+ private const val APP_ID = "<APP_ID>"
65
+ }
66
+ }
67
+ ```
68
+
69
+ ### Java
70
+
71
+ ```java
72
+ public static final class MyCustomCastOptionsProvider implements OptionsProvider {
73
+
74
+ // Add your receiver app ID in <APP_ID>.
75
+ public static final String APP_ID = "<APP_ID>";
76
+
77
+ @Override
78
+ public CastOptions getCastOptions(Context context) {
79
+ return new CastOptions.Builder()
80
+ .setReceiverApplicationId(APP_ID)
81
+ .setRemoteToLocalEnabled(true)
82
+ .build();
83
+ }
84
+
85
+ @Override
86
+ @Nullable
87
+ public List<SessionProvider> getAdditionalSessionProviders(Context context) {
88
+ return null;
89
+ }
90
+ }
91
+ ```
92
+
93
+ <br />
@@ -0,0 +1,21 @@
1
+ The Media3 [`cast`](https://developer.android.com/reference/androidx/media3/cast/package-summary) module extends your media playback experience to
2
+ Cast devices. It lets your app cast content to [compatible devices](https://developer.android.com/media/media3/cast/create-castplayer#get-device),
3
+ such as TVs and speakers. The [sender](https://developers.google.com/cast/glossary#sender) app acts as a remote controller for media
4
+ playback on the [receiver](https://developers.google.com/cast/glossary#receiver) device. This module integrates with the [Jetpack
5
+ Media3](https://developer.android.com/guide/topics/media/media3) library, so you can use the same `Player` interface and UI
6
+ components for both local and remote playback.
7
+
8
+ ## Media3 CastPlayer
9
+
10
+ The `CastPlayer` is a media player API included in Media3 that supports both
11
+ local and remote media playback. It implements the `Player` interface to manage
12
+ playback, simplifying the integration of casting into your media experience.
13
+
14
+ [Go to Media3 CastPlayer](https://developer.android.com/media/media3/cast/create-castplayer)
15
+
16
+ ## Other Cast integrations
17
+
18
+ The Cast SDK overview explains how to integrate Cast with other platforms, such
19
+ as building a receiver app or integrating with the web sender SDK.
20
+
21
+ [Explore Cast SDK](https://developers.google.com/cast/docs/developers)
@@ -0,0 +1,127 @@
1
+ ---
2
+ name: android-migrate-xml-views-to-jetpack-compose
3
+ description: Provides a structured workflow for migrating an Android XML View to Jetpack
4
+ Compose. This skill details the step-by-step process, from planning and dependency
5
+ setup, to theming and layout migration, validation and XML cleanup. Use this skill
6
+ when you need to migrate an XML View to Jetpack Compose in an Android project. It
7
+ solves the problem of converting the UI of a legacy XML View into modern, declarative
8
+ Compose components while maintaining interoperability.
9
+ license: Apache-2.0
10
+ source: https://github.com/android/skills
11
+ routing: manual
12
+ stacks: [android]
13
+ metadata:
14
+ author: Google LLC
15
+ last-updated: '2026-08-14'
16
+ keywords:
17
+ - Jetpack Compose
18
+ - migration
19
+ - XML
20
+ - Views
21
+ - interoperability
22
+ - incremental adoption
23
+ - UI development
24
+ ---
25
+
26
+ This skill guides through the process of migrating an existing Android XML View
27
+ to Jetpack Compose. It performs a stable, safe and visually consistent
28
+ transition by following a structured, 10-step methodology. This skill migrates
29
+ UI (XML to Jetpack Compose) only.
30
+
31
+ ## Objective
32
+
33
+ To systematically convert a single legacy XML layout into modern, declarative
34
+ Jetpack Compose UI while maintaining pixel-perfect visual parity and functional
35
+ integrity.
36
+
37
+ ## Summary of the 10-step migration process
38
+
39
+ 1. **Identify the optimal XML candidate for migration**
40
+ 2. **Analyze the project and layout**
41
+ 3. **Create a plan**
42
+ 4. **Capture the XML View UI**
43
+ 5. **Set up Compose dependencies and compiler**
44
+ 6. **Set up Compose theming**
45
+ 7. **Migrate the XML layout to Compose**
46
+ 8. **Validate the migration**
47
+ 9. **Replace usages**
48
+ 10. **XML code removal**
49
+
50
+ ## Detailed steps
51
+
52
+ ### Step 1: Identify the optimal XML candidate for migration
53
+
54
+ If the user has explicitly specified a target XML layout, proceed to Step 2.
55
+ Otherwise, analyze the codebase to identify the best candidate for migration by
56
+ following the logic in [references/identify-optimal-xml-candidate.md](references/identify-optimal-xml-candidate.md).
57
+
58
+ ### Step 2: Analyze the project and layout
59
+
60
+ Analyze the identified XML View's structure, hierarchy, and implementation
61
+ details.
62
+ Use [references/analysis-of-the-project-and-layout.md](references/analysis-of-the-project-and-layout.md) to
63
+ guide your technical audit of the layout and surrounding project context.
64
+
65
+ ### Step 3: Create a plan
66
+
67
+ Using the outputs and analysis done in the Step 1 and 2, generate a
68
+ step-by-step plan for the migration. If you support user interaction, present
69
+ to the user and ask for approval before proceeding. If user interaction is not
70
+ supported, proceed to Step 4 following the generated plan.
71
+
72
+ ### Step 4: Capture the XML View UI
73
+
74
+ **IF** you support user interaction, ask the user to upload a screenshot of the
75
+ XML View UI or provide an absolute path to a file. Use this image as a visual
76
+ reference for the layout migration in Step 7.
77
+ **ELSE IF** you are able to run an Android emulator, locate an existing
78
+ screenshot test for the XML candidate. If none exists, create one using the
79
+ existing project testing framework. If no framework exists,
80
+ use **UI Automator** or **Espresso** to create a screenshot test with minimum
81
+ required setup. Run the test and take a baseline screenshot of the XML UI.
82
+ **ELSE** proceed to Step 5.
83
+
84
+ ### Step 5: Set up Compose dependencies and compiler
85
+
86
+ Check `build.gradle` or `libs.versions.toml` for Compose dependencies and
87
+ compiler setup. If missing, use
88
+ [Setup Compose Dependencies and Compiler](references/android/develop/ui/compose/setup-compose-dependencies-and-compiler.md).
89
+ Run a sync to ensure dependencies resolve without errors.
90
+
91
+ ### Step 6: Set up Compose theming
92
+
93
+ If the project already has Compose theming set up, proceed to Step 7. If Compose
94
+ theming is missing, initialize it. For Material-based projects, follow
95
+ [Material 3 migration guidelines](references/android/develop/ui/compose/designsystems/migrate-xml-theme-to-compose.md).
96
+ For custom design systems, apply expert judgment to migrate XML theming and
97
+ match existing styles.
98
+ **Constraints:** Do not migrate the entire theme. Implement only the minimum
99
+ theming required for the specific XML candidate. Maintain original XML themes
100
+ for interoperability. Maintain existing project code conventions, patterns,
101
+ names and values.
102
+
103
+ ### Step 7: Migrate the XML View to Compose
104
+
105
+ Convert the XML candidate to Jetpack Compose code, referencing
106
+ [references/xml-layout-migration.md](references/xml-layout-migration.md) and the image from Step 4.
107
+ You must include a **Compose Preview** for the newly created composable to
108
+ facilitate visual verification.
109
+
110
+ ### Step 8: Replace usages
111
+
112
+ Replace the usages of the migrated XML layout to use the new Compose component.
113
+
114
+ - To add Compose in Views, use [Compose in Views](references/android/develop/ui/compose/migrate/interoperability-apis/compose-in-views.md).
115
+ - To add Views in Compose, use [Views in Compose](references/android/develop/ui/compose/migrate/interoperability-apis/views-in-compose.md).
116
+
117
+ ### Step 9: Validate the migration
118
+
119
+ Compare the baseline screenshot image from Step 4 with the rendered Compose
120
+ Preview of the new composable. Ignore string content; focus on layout and
121
+ styling. Iterate on the Compose code until visual parity is achieved. Once
122
+ verified, write a Compose UI test for the new composable.
123
+
124
+ ### Step 10: XML code removal
125
+
126
+ Delete the migrated XML file and its associated legacy tests. **Caution:** Only
127
+ remove code and resources that are not referenced by other parts of the project.
@@ -0,0 +1,42 @@
1
+ ## 1. Project health \& build validation
2
+
3
+ Before performing any analysis, you must confirm the project is in a functional state.
4
+ \* **Integrity check:** Verify the project syncs (Gradle) and builds successfully.
5
+ \* **Error resolution:** If there are pre-existing build errors or sync failures, you must report these immediately and attempt to fix. **Do not proceed** with migration until a stable baseline is established.
6
+
7
+ ## 2. Compose pattern \& consistency analysis
8
+
9
+ If Jetpack Compose is already present, you must align with the established implementation style.
10
+ \* **Pattern identification:** Scan the codebase for `@Composable` functions. Identify the project's "Best Practices" regarding state hoisting, composable construction and naming conventions, and file organization.
11
+ \* **Theming review:** Determine how `MaterialTheme` or custom theme systems are implemented.
12
+ \* Identify if the project uses a custom design system theme.
13
+ \* Map how attributes, styles, and other theme components are accessed in Compose.
14
+
15
+ ## 3. Design system \& infrastructure audit
16
+
17
+ Understand the design system classification (e.g. Material 2, Material 3, or custom design system).
18
+ \* **Resource mapping:** Locate central XML definitions:
19
+ \* `colors.xml` (Light/Dark variants)
20
+ \* `dimens.xml`
21
+ \* `styles.xml` / `themes.xml`
22
+ \* **Hybrid analysis:** Determine if the project is **XML-only** , **Compose-only** , or **Hybrid** .
23
+ \* **Reuse constraint:** If a Compose theming layer (e.g., `AppTheme.kt`) already exists, **DO NOT** generate a new one. You must reuse the existing infrastructure and contribute to it by following its existing implementation pattern.
24
+
25
+ ## 4. Candidate layout decomposition
26
+
27
+ Analyze the specific XML layout targeted for migration. You must extract and document the following requirements for the new composable:
28
+ \* **Inputs:** UI State objects, primitive parameters, and click listeners.
29
+ \* **Styling:** Specific color constants, typography styles, and shape definitions referenced in the XML.
30
+ \* **Resources:** Identifying string resources, drawables, and dimensions.
31
+ \* **Layout logic:** Modifiers required to replicate the XML constraints (padding, alignment, weight).
32
+
33
+ ## 5. Architectural \& non-UI analysis
34
+
35
+ Understand the environment in which the UI resides to ensure proper integration.
36
+ \* **State management:** Identify the usage of `ViewModel`, `Flow`, or `LiveData`.
37
+ \* **Dependency Injection:** Check for Hilt, Koin, or manual DI to understand how dependencies are provided to the UI layer.
38
+ \* **Testing \& architecture:** Note the architectural pattern (MVI, MVVM, or custom architecture setup.) and existing UI testing frameworks to ensure the migrated code remains testable. Unless the user explicitly requests, **DO NOT** make any changes to any non-UI code that aren't strictly required for the migration of the XML View.
39
+
40
+ *** ** * ** ***
41
+
42
+ > **Pro-tip:** Always prioritize the "Existing infrastructure" over "Default templates." If the project has a custom way of handling spacing or colors, composable code, or any other project layer, your generated Compose code must reflect that specific implementation.