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,120 @@
1
+ A journey is an XML-specified test of an Android app's behavior. It consists of
2
+ a list of `<action>` elements. For example:
3
+ `xml
4
+ <journey name="My Journey">
5
+ <description>
6
+ A sample journey to illustrate the format
7
+ </description>
8
+ <actions>
9
+ <action>
10
+ Tap the "Home" icon
11
+ </action>
12
+ <action>
13
+ Verify that the app is on its Home screen
14
+ </action>
15
+ </actions>
16
+ </journey>`
17
+
18
+ Evaluate a journey by proceeding through the `<actions>` list in sequential
19
+ order. Evaluate each `<action>` block individually.
20
+ A journey succeeds if all elements in the `<actions>` list succeed.
21
+
22
+ A journey is a test case for an app. The journey XML is the source of truth; if
23
+ the app disagrees with the journey, the app has failed.
24
+ Additionally, if the app exits, crashes, or freezes, journey evaluation stops
25
+ and the journey fails.
26
+
27
+ **IMPORTANT** - Execute each step EXACTLY as written, and independently of other
28
+ steps! If an action says to `"tap the first search result"`,
29
+ you MUST find the search results and tap the first one. Do this even if you
30
+ believe you know the intent behind the action.
31
+
32
+ ## Taking Actions
33
+
34
+ Some `<action>` elements specify UI interactions to perform on the running
35
+ Android app. Perform the interaction and verify that the app does
36
+ not crash or behave in an unexpected manner. This is the *only* verification
37
+ you should perform for an `<action>`.
38
+
39
+ If the interaction cannot be performed as specified, the journey fails.
40
+ Example:
41
+ `<action>Click the red button</action>`
42
+ If you determine a red button is not present in the UI, the journey fails.
43
+
44
+ If the text of an `<action>` specifies a list of actions, break it into
45
+ sub-actions and evaluate them individually:
46
+ Example:
47
+ `<action>Search for soda and add the first result to the cart</action>`
48
+ This should be evaluated as:
49
+ `<action>Search for soda</action>
50
+ <action>Add the first result to the cart</action>`
51
+
52
+ If an `<action>` contains something that is not a specification for a UI
53
+ interaction, alert the user that the journey is malformed and exit
54
+ early, specifying the error in question.
55
+
56
+ ## Verifying Expectations
57
+
58
+ `<action>` elements that begin with "check" or "verify" specify expectations
59
+ for the current state of the Android app. Determine the current
60
+ state of the app and check if the expectations are met.
61
+
62
+ Determine the current state of the app by inspecting the current screen of the
63
+ device without interacting with it.
64
+ Example:
65
+ `<action>Check if "Switch 2" is visible on the screen</action>`
66
+ This requires only inspecting the current screen, not scrolling or interacting.
67
+ If "Switch 2" is not currently visible, the action fails.
68
+
69
+ If the expectations are not met, mark the `<action>` as a failure and the
70
+ journey evaluation ends. A single `<action>` may contain
71
+ multiple expectations.
72
+ Example:
73
+ `<action>Verify that the app is on the Home screen, the Home icon is blue, and the temperature is displayed</action>`
74
+ This `<action>` fails if ANY of the following are false:
75
+
76
+ - The app is on the Home screen
77
+ - There is a Home icon, and it is blue
78
+ - A temperature is displayed
79
+
80
+ ## Handling failure
81
+
82
+ When running a journey, evaluate it as a test. Failure is acceptable, and often
83
+ expected. Proper reporting of failures is the priority.
84
+
85
+ Keep debugging and troubleshooting to a minimum; assume that tools are showing
86
+ you the correct output every time. The goal is to determine
87
+ if the *current* Android app can correctly handle the *current* steps outlined
88
+ in the journey. Suggestions for bug fixes, clarification, or
89
+ other improvements should be kept to journey evaluation summary at the end.
90
+
91
+ ## Summarizing
92
+
93
+ After evaluating the whole journey, output a markdown (.md) file describing the
94
+ results.
95
+
96
+ The file should have the following format:
97
+
98
+ # Journey: <Name of the journey>
99
+
100
+ ## Results
101
+
102
+ <!-- Append "✅" to the action header if the instruction was evaluated or "❌" if the instruction could not be evaluated -->
103
+ ### Action: Click the blue button ✅
104
+ - **Commands**:
105
+ <!-- A list of the ADB commands executed while evaluating the instruction -->
106
+ - `adb shell input swipe 490 200 500 500 500`
107
+ - `adb shell input tap 45 920`
108
+
109
+ <!-- Failure reasons, feedback, or other useful information -->
110
+ - **Comment**: The journey step doesn't specify that the button requires scrolling to see
111
+
112
+ ### Action: Check if "Switch 2" is visible on the screen ✅
113
+ - **Screenshot**: [switch_2_screenshot.png](path/to/screenshot)
114
+ - **Comment**: Confirmed both in layout and visually
115
+
116
+ ### Action: The home screen is shown ❌
117
+ - **Comment**: The settings page was shown
118
+
119
+ <!-- Append nothing to the action header if the action was not evaluated because the journey execution ended early -->
120
+ ### Action: Swipe down to view active notifications
@@ -0,0 +1,58 @@
1
+ ---
2
+ name: android-code-review
3
+ description: Reviews native Android code in Kotlin and Java for the bugs that reach production — lifecycle and Context leaks, coroutine scope, dispatcher and cancellation mistakes, Flow collection outside the lifecycle, Jetpack Compose state, recomposition and side effects, state lost on configuration change or process death, main-thread I/O, WorkManager and permission handling, and exported components. Use when reviewing Kotlin or Java files in an Android app or module, Activities, Fragments, ViewModels, Composables, repositories or Gradle modules, or when the user asks for an Android code review or PR review.
4
+ intents: [review, performance]
5
+ stacks: [android, kotlin-multiplatform]
6
+ ---
7
+
8
+ # Android Code Review
9
+
10
+ Apply to Kotlin and Java sources under `src/main` (and `androidMain` in KMP). Items are ordered by impact: the first sections cause crashes, leaks or lost user data. Before flagging an API as missing or deprecated, check the library versions in the version catalog or build files.
11
+
12
+ ## 1. Lifecycle and leaks (crash / leak)
13
+
14
+ - [ ] **Activity or View held beyond its lifecycle.** An `Activity`, `Fragment`, `View` or Activity `Context` stored in a singleton, companion object, `ViewModel`, static field or long-lived callback. `ViewModel`s must not reference Views or Activity contexts; use `applicationContext` only where a Context is truly needed.
15
+ - [ ] **Fragment view binding not cleared.** A binding stored in a property must be set to `null` in `onDestroyView`, since the Fragment outlives its view.
16
+ - [ ] **Flow collected without lifecycle awareness.** `lifecycleScope.launch { flow.collect {} }` keeps collecting in the background. Use `repeatOnLifecycle(Lifecycle.State.STARTED)`, and in Fragments use `viewLifecycleOwner.lifecycleScope`. In Compose, `collectAsStateWithLifecycle()` (from `lifecycle-runtime-compose`) instead of `collectAsState()`.
17
+ - [ ] **Listeners and receivers not unregistered.** `registerReceiver`, location or sensor listeners, and callbacks added in `onStart`/`onResume` without the matching removal.
18
+
19
+ ## 2. Coroutines
20
+
21
+ - [ ] **`GlobalScope` or a hand-made `CoroutineScope` never cancelled.** Work should live in `viewModelScope`, `lifecycleScope` or an injected application scope.
22
+ - [ ] **Blocking work on the main thread.** File or database I/O, JSON parsing of large payloads or `runBlocking` on the main thread. Room throws on main-thread queries unless explicitly allowed; network libraries may not. Blocking calls belong in `withContext(Dispatchers.IO)` (or `Default` for CPU work).
23
+ - [ ] **Swallowed cancellation.** `catch (e: Exception)` around suspending calls also catches `CancellationException`; rethrow it, or catch narrower exceptions.
24
+ - [ ] **Unhandled exceptions in `launch`.** An exception in `launch` crashes the app unless handled; errors should become UI state, not silent failures.
25
+ - [ ] **Hardcoded dispatchers** in classes that need tests: inject them.
26
+
27
+ ## 3. State
28
+
29
+ - [ ] **State lost on configuration change or process death.** UI state kept in Activity fields, or user input not saved. Use a `ViewModel`, and `SavedStateHandle` (or `rememberSaveable` in Compose) for what must survive process death.
30
+ - [ ] **Impossible states representable.** Separate `isLoading`, `error` and `data` fields that can contradict each other; prefer a sealed UI state.
31
+ - [ ] **Mutable state exposed.** `MutableStateFlow`/`MutableLiveData` public from a `ViewModel` instead of a read-only `StateFlow`/`LiveData`.
32
+ - [ ] **One-off events as state** (navigation, snackbars) replayed after rotation.
33
+
34
+ ## 4. Jetpack Compose
35
+
36
+ - [ ] **Side effects in composition.** Network calls, analytics, navigation or `viewModel.load()` called directly in a composable body run on every recomposition. Use `LaunchedEffect` with the right keys, or trigger from the `ViewModel`.
37
+ - [ ] **`remember` without keys** for values derived from parameters, so they go stale when the parameter changes.
38
+ - [ ] **Unstable parameters** (plain `List`, lambdas recreated each time, classes from modules without Compose compiler stability) causing avoidable recompositions in frequently updated screens. Only report where it shows up in a hot path.
39
+ - [ ] **`LazyColumn`/`LazyRow` items without `key`** when items can move or be removed.
40
+ - [ ] **State read too high.** Reading a fast-changing state (scroll offset, animation) at the top of a screen recomposes all of it; read it in a lambda or lower in the tree.
41
+
42
+ ## 5. Platform
43
+
44
+ - [ ] **Exported components.** `android:exported="true"` on activities, services, receivers or providers without a permission, that act on the incoming `Intent` without validating it. Details in `mobile-security-audit`.
45
+ - [ ] **Runtime permissions.** Features used without checking the permission, or denial ("don't ask again") not handled.
46
+ - [ ] **Background work.** Long work started from an Activity or a plain `Service` that the system will stop; persistent or deferrable work belongs in `WorkManager`. Starting foreground services and exact alarms have restrictions that depend on `targetSdk`; check it before reviewing.
47
+ - [ ] **`PendingIntent` mutability.** Flags must include `FLAG_IMMUTABLE` or `FLAG_MUTABLE` explicitly on apps targeting Android 12 or higher.
48
+
49
+ ## 6. Maintainability and UI quality
50
+
51
+ - [ ] Hardcoded user-visible strings instead of `strings.xml`.
52
+ - [ ] Missing `contentDescription` on meaningful images and icon buttons; touch targets smaller than 48dp.
53
+ - [ ] Business logic in Activities, Fragments or Composables instead of the `ViewModel` or domain layer.
54
+ - [ ] New logic without tests when the module already has a test suite.
55
+
56
+ ## Output
57
+
58
+ Report in the matching section of the `mobile-code-reviewer` report (Bugs for sections 1–3, Performance for Compose recomposition, Security for exported components), always with `file:line` and the corrected snippet when the fix is short.
@@ -0,0 +1,340 @@
1
+ ---
2
+ name: android-display-glasses-with-jetpack-compose-glimmer
3
+ description: Provides guidelines for developing projected Android XR apps for display
4
+ glasses using the Jetpack Compose Glimmer UI toolkit. This skill covers foundational
5
+ Glimmer design principles, workflows for implementing Jetpack Compose Glimmer, and
6
+ interaction models for the glasses form factor. Use this skill to build an Android
7
+ XR Augmented Experience app with Jetpack Compose Glimmer that adheres to the Glimmer
8
+ design system for optimized glasses styling.
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-09-08'
16
+ keywords:
17
+ - Jetpack Compose Glimmer
18
+ - audio glasses
19
+ - display glasses
20
+ - Projected Activity
21
+ - GlimmerTheme
22
+ - Additive Display
23
+ - Android XR - Augmented Experiences
24
+ ---
25
+
26
+ ## Glossary
27
+
28
+ | Term | Definition |
29
+ |---|---|
30
+ | **Intelligent Eyewear** | All-day wear, hands-free devices that provide access to information. Equipped with speakers, a camera, and a microphone. Some are audio-only (audio glasses), and some also have a display (display glasses). |
31
+ | **Display glasses** | Audio glasses with the addition of a private display in lenses for glanceable visuals that harmonize with audio output. |
32
+ | **Jetpack Compose Glimmer** | A Compose UI toolkit for building augmented Android XR experiences, optimized for display glasses. It provides components, theming, and behaviors for transparent displays. |
33
+ | **Projected Activity (Glasses Activity)** | An Android `Activity` that runs on a host device (phone) but its UI and interactions are projected to a connected, intelligent eyewear device (audio or display glasses). |
34
+ | **Projected Device** | An XR device connected to an Android-powered device (host). Host projects the application content to the Projected device and let users interact with it. |
35
+ | **GlimmerTheme** | The root provider for styling tokens, including GlimmerColors, GlimmerTypography, and GlimmerShapes. |
36
+ | **Additive Display** | A display technology where black (#000000) is rendered as 100% transparent. UI is built by adding light to the environment. Display glasses have an additive display. |
37
+ | **Augmented Experiences** | Android XR experiences that enhance a user's focus and presence in the real world. They are lightweight and additive, helping users while they are on-the-go |
38
+ | **Visual Angle** | A unit of measurement for perceived size in XR. The minimum readable text size is 0.6 degrees (approx. 18sp at 1 m). |
39
+
40
+ ## Prerequisites
41
+
42
+ - Mobile project must target `compileSdk` 37 or higher. If the `compileSdk` is lower than 37, increase the `compileSdk` to 37.
43
+ - Ensure you are using the latest library dependencies from [Create your first
44
+ activity for intelligent eyewear](https://developer.android.com/develop/xr/jetpack-xr-sdk/ai-glasses/first-activity).
45
+
46
+ ## Core Constraints
47
+
48
+ - **Don't:** Use `MaterialTheme` or Material Components.
49
+ - **Do:** Use `GlimmerTheme` and Jetpack Compose Glimmer Components.
50
+ - **Do:** Use `createGoogleSansFlexTypography()` from `androidx.xr.glimmer:glimmer-google-fonts` as the `Typography` value for `GlimmerTheme` to ensure that consistent typography is applied throughout the components.
51
+
52
+ ## Limitations
53
+
54
+ - Specific hardware device models or their unique capabilities are not detailed.
55
+ - **Elevation:** Standard Material 3 shadow or elevation modifiers are not supported. You must use `ShadowScope` or `Depth` tokens from Jetpack Compose Glimmer.
56
+ - **Minimum Size:** The absolute minimum size for readable text is 18sp (0.6°). Anything smaller will fail legibility checks.
57
+ - **Text Weight:** Avoid "Thin" or "Hairline" weights; they cause shimmering and aliasing on additive AR lenses.
58
+
59
+ ## 1. Set up dependencies
60
+
61
+ - **Setup Projected Activity:** First, you need to create a new projected activity for your app. If the project doesn't already have one, see [Create
62
+ your first activity for intelligent eyewear](https://developer.android.com/develop/xr/jetpack-xr-sdk/ai-glasses/first-activity). Use [references/projectedcontext-source.md](references/projectedcontext-source.md) to launch the Glasses Projected activity on the Projected Device. Ensure that you specify `xr_projected` for the `android:requiredDisplayCategory` attribute in app manifest to tell the system that this activity will use a projected context to access hardware from a connected device.
63
+ - **Mobile App Integration:** If the project contains an existing mobile app, you must create a new Glasses Activity dedicated to rendering Glimmer UI. For detailed configuration, heavily reference [Create your first activity
64
+ for intelligent eyewear](https://developer.android.com/develop/xr/jetpack-xr-sdk/ai-glasses/first-activity). If there isn't already a method to launch the Glasses Activity, add a button to the existing mobile app UI labeled "Launch on Glasses" that uses `ProjectedContext` to launch the Glasses Activity on the glasses. Place the 'Launch on Glasses' button as a screen-level FloatingActionButton, in the TopAppBar, or in the top navigation bar to ensure users discover the projection capability. If the glasses aren't connected, disable the button. Don't launch the Glasses Activity on the phone, only on the display glasses. If it makes sense to automatically launch the Glasses Activity without an explicit launch button, then do so.
65
+ - **UI Library:** Identify if the project has the `androidx.xr.glimmer:glimmer` library, if not it must be added to the project. See [Declaring Jetpack Compose Glimmer Dependencies](https://developer.android.com/jetpack/androidx/releases/xr-glimmer#declaring_dependencies) to fetch the latest dependency version.
66
+ - **Theming:** All Glimmer components must be wrapped within the `GlimmerTheme` composable to ensure correct token resolution.
67
+ - **Mandatory black background:** Display glasses use additive displays. Any non-black color in the background blocks the real world. **You must always** set a pure black background (`Modifier.background(Color.Black)`) on the root container of your Projected Activity.
68
+ - **Font:** The default font is Google Sans Flex. Use `androidx.xr.glimmer.googlefonts` library with the default type styles unless otherwise specified. Use `createGoogleSansFlexTypography` to create a `Typography` instance with the Google Sans Flex configuration. Provide this `Typography` instance as normal through `GlimmerTheme`. Use [references/glimmersansflextypography-source.md](references/glimmersansflextypography-source.md) for configuration.
69
+ - **Hardware Capabilities:** Different types of intelligent eyewear devices have different capabilities. To check for these at runtime, see the [Check
70
+ device capabilities at runtime for intelligent eyewear](https://developer.android.com/develop/xr/jetpack-xr-sdk/ai-glasses/check-capabilities).
71
+ - **Hardware Permissions:** To request hardware permissions like the microphone and camera, see the [Request hardware permissions for
72
+ intelligent eyewear](references/android/develop/xr/jetpack-xr-sdk/request-hardware-permissions.md).
73
+ - **Hardware Access:** To use the glasses camera, sensors, or access the phone's hardware, see the [Use a projected context to access hardware on
74
+ intelligent eyewear](references/android/develop/xr/jetpack-xr-sdk/access-hardware-projected-context.md).
75
+
76
+ ## 2. Minimize and translate the UI
77
+
78
+ - For display glasses, build UI using components from the Jetpack Compose Glimmer framework.
79
+ - Use depth to communicate element priority and hierarchy.
80
+ - Design from the bottom up, trying to minimize how much of the real world you cover. Always bottom align UI to the glasses display.
81
+ - **One Thing at a Time:** Prioritize the user's awareness of the real world. Show only one primary piece of information at a time (for example, using a `Stack`) to minimize obstruction of the user's field of view. Avoid multiple simultaneous cards.
82
+ - **Color Contrast:** Ensure at least a 70% tone difference between foreground and background using the HCT color space. For calculation metrics, use [references/material-hct-source.md](references/material-hct-source.md).
83
+
84
+ ## 3. Map input controls
85
+
86
+ - Map app interactions, such as tap and swipe, to the available hardware controls on the glasses, such as the touchpad.
87
+ - Inputs are one-dimensional; users must make one control input at a time.
88
+ - Avoid nesting scrolling controls.
89
+ - Jetpack Compose Glimmer components are designed to work with standard input methods, such as a tap or swipe on the glasses' touchpad.
90
+ - Use System Back to dismiss temporary states or detailed views.
91
+ - To add input, focus, tap, swipe to your Glasses UI, follow [Focus in Jetpack
92
+ Compose Glimmer](references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/focus.md).
93
+ - For a detailed breakdown of hardware inputs, see [Hardware Controls for
94
+ display glasses](references/android/design/ui/ai-glasses/guides/interaction/inputs.md)
95
+
96
+ ## 4. Build with Jetpack Compose Glimmer
97
+
98
+ Jetpack Compose Glimmer is the UI toolkit for building augmented experiences on
99
+ display glasses.
100
+
101
+ ### Key Features
102
+
103
+ - **Glimmer Theming:** A simplified glasses-specific theme for optimal visibility.
104
+ - **Pre-compatible Input:** Supports tap and swipe by default.
105
+ - **Pre-built Components:** Provides optimized composables like `Card`, `ListItem`, `Button`, etc.
106
+
107
+ ### Focus Management in Glimmer
108
+
109
+ - Jetpack Compose Glimmer uses a one-dimensional focus search.
110
+ - Focus movement is continuous for scrollable containers and discrete for elements like a row of buttons.
111
+ - To enable the system to automatically set initial focus, you must set the `isInitialFocusOnFocusableAvailable` flag to `true` in your activity's `onCreate` method. For more information on how to implement, see [Focus in
112
+ Jetpack Compose Glimmer](references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/focus.md).
113
+
114
+ ### Implementing Glimmer Styles
115
+
116
+ Glimmer styles are accessed through the `GlimmerTheme` object. Use
117
+ [references/glimmertheme-source.md](references/glimmertheme-source.md) for reference.
118
+
119
+ | Category | Token | Value / Role |
120
+ |---|---|---|
121
+ | **Color** | primary | #9BBFFF (Focal color) |
122
+ | **Color** | secondary | #4C88E9 (Focal color) |
123
+ | **Color** | surface | #262626 (Transparent base - renders as transparent) |
124
+ | **Color** | outline | #606460 (3.dp border color) |
125
+ | **Shape** | Standard | `RoundedCornerShape(36.dp)` |
126
+ | **Shape** | Small | `RoundedCornerShape(12.dp)` |
127
+
128
+ #### Typography Scale (Google Sans Flex)
129
+
130
+ **Strict default:** When creating Glimmer UI you must use Google Sans Flex
131
+ unless a custom brand typeface is explicitly specified.
132
+ **Variable Font Settings:** As Google Sans Flex is a variable font, you must
133
+ configure the following axes:
134
+
135
+ - **Roundness (`ROND`):** Always set to `100f` for the signature rounded appearance.
136
+ - **Width (`wdth`):** Set to `100f`.
137
+ - **Optical Size (`opsz`):** Set to `9f`.
138
+ - **Weight (`wght`):** Use specific values for different roles (Title: `725f`, Body: `520f`, Caption: `650f`).
139
+
140
+ | Style Name | Size / Line-Height | Weight Axis | Width | Roundness | Optical size |
141
+ |---|---|---|---|---|---|
142
+ | **Title Large** | 30.sp / 36.sp | 725 | 100 | 100 | 9 |
143
+ | **Title Medium** | 24.sp / 32.sp | 725 | 100 | 100 | 9 |
144
+ | **Title Small** | 20.sp / 28.sp | 725 | 100 | 100 | 9 |
145
+ | **Body Large** | 30.sp / 36.sp | 520 | 100 | 100 | 9 |
146
+ | **Body Medium** | 24.sp / 32.sp | 520 | 100 | 100 | 9 |
147
+ | **Body Small** | 20.sp / 28.sp | 520 | 100 | 100 | 9 |
148
+ | **Caption** | 18.sp / 28.sp | 650 | 100 | 100 | 9 |
149
+
150
+ #### Depth Levels
151
+
152
+ Simulate depth on display glasses using shadows to establish a sense of
153
+ hierarchy through varying levels of emphasis. The Jetpack Compose Glimmer
154
+ controls use `DepthEffect` with 5 preset `DepthEffectLevels`. Use
155
+ [references/deptheffect-source.md](references/deptheffect-source.md) and
156
+ [references/deptheffectlevels-source.md](references/deptheffectlevels-source.md) for reference.
157
+
158
+ Some examples:
159
+
160
+ | Level | Usage |
161
+ |---|---|
162
+ | **level1** | Standard rest state for cards and persistent background UI. |
163
+ | **level2** | Standard focus/pressed state for buttons and interactive cards. |
164
+ | **ExtraSmall** | 4.dp |
165
+
166
+ ### Implementing Jetpack Compose Glimmer Components
167
+
168
+ #### Cards
169
+
170
+ Cards are a fundamental surface-based container in Glimmer used to group related
171
+ content, such as text, images, icons and actions into a single focal point. They
172
+ establish a clear depth plane (Z-axis) in the Glasses environment, providing a
173
+ stable background for text, images, and icons. Never embed a card within a List
174
+ Item.
175
+
176
+ ##### Core Implementation Logic
177
+
178
+ - **Surface Hierarchy:** Cards are designed to sit on a base surface or within a list. They provide an automatic visual feedback when focused if an `onClick` lambda is provided.
179
+ - **Interactivity:**
180
+ - **IF** the entire Card serves as a single trigger (e.g., a media item or a setting): **THEN** provide an `onClick` lambda to enable focus effects.
181
+ - **ELSE:** Leave `onClick` as `null` if the Card contains multiple internal interactive elements (like separate buttons or switches) to avoid focus contention.
182
+
183
+ ##### Technical Documentation Links
184
+
185
+ If you are creating a Glimmer Card component, read the:
186
+
187
+ - **Developer Guidance:** [Jetpack Compose Glimmer: Cards](references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/cards.md)
188
+ - **API Source Code:** Use [references/card-source.md](references/card-source.md).
189
+ - **Implementation Samples:** Use [references/card-samples-source.md](references/card-samples-source.md). (Basic and Interactive Card usage)
190
+
191
+ #### Buttons
192
+
193
+ Buttons are the primary triggers for discrete actions in Glimmer. They are
194
+ specifically optimized for the display glasses focus model, where a focus
195
+ highlight is added when focus is moved to the button using the touchpad or other
196
+ methods.
197
+
198
+ ##### Core Implementation Logic
199
+
200
+ - There are two types of buttons to choose from in Glimmer:
201
+ - **Standard buttons** (Required text label with optional leading or trailing icons). Use this when there is more space in the UI, or when the meaning of the button isn't clear without text.
202
+ - **Icon buttons** (icon only). Only use icon buttons when the icon is clearly understandable.
203
+ - Both icon and standard buttons have default and toggle variants:
204
+ - Default (use for single actions like "buy" or "navigate")
205
+ - Toggle (use for things with selected states like mute buttons)
206
+
207
+ ##### Technical Documentation Links
208
+
209
+ If you are creating a Glimmer Button component, read the:
210
+
211
+ - **Developer Guidance:** [Jetpack Compose Glimmer: Buttons](references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/buttons.md)
212
+ - **API Source Code:** Use [references/button-source.md](references/button-source.md).
213
+ - **Implementation Samples:** Use [references/button-samples-source.md](references/button-samples-source.md).
214
+
215
+ #### Title Chips
216
+
217
+ Chips are a pill-shaped, specialized labeling component designed to sit above a
218
+ `Card` or a group of content to provide a title. Use title chips to display
219
+ concise information like a short title, a name, or a status.
220
+
221
+ ##### Guidelines and usage
222
+
223
+ - **Spatial Spacing** : When using a standalone `TitleChip` preceding content, you must use `TitleChipDefaults.AssociatedContentSpacing` (8.dp) to maintain the visual hierarchy.
224
+ - **Interactivity:** Title chips are purely for informational purposes, they cannot be targeted or activated for navigation.
225
+ - **Layout** Always center text in a title chip. Never let the title chip go to two lines, and truncate extra words. Keep the label to three words or less.
226
+
227
+ ##### Technical Documentation Links
228
+
229
+ If you are creating a Glimmer Title Chip component, read the:
230
+
231
+ - **Developer Guidance:** [Jetpack Compose Glimmer: Title Chips](references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/title-chips.md)
232
+ - **API Source Code:** Use [references/titlechip-source.md](references/titlechip-source.md).
233
+ - **Implementation Samples:** Use [references/titlechip-samples-source.md](references/titlechip-samples-source.md). (Title Chips above group content)
234
+
235
+ #### Icons
236
+
237
+ Icons are visual symbols used to represent concepts, actions, or status in a
238
+ concise way. In Glimmer, icons and icon buttons are optimized for the XR
239
+ environment, providing clear visibility on additive displays and gaze-responsive
240
+ feedback for interactive elements.
241
+
242
+ ##### Guidelines and usage
243
+
244
+ - **Sizing:** Use predefined `IconSizes` (e.g., Standard, Large) to ensure icons remain legible and meet the minimum touch target requirements for the XR environment.
245
+ - **Interactivity:**
246
+ - **If** an icon serves as a trigger: **Then** you must use an `IconButton` to provide the automatic visual feedback and required tap-target padding.
247
+ - **ELSE:** Use a standalone `Icon` for non-interactive indicators or status symbols.
248
+ - **Contrast:** **NEVER** use pure black (#000000) for icon tints; always use themed colors or standard Glimmer content colors to ensure the icon is visible against dark or real-world backgrounds.
249
+ - **Icon Library** The default icon library is [Material Symbols](https://fonts.google.com/icons?icon.style=Rounded) with 600 weight, Rounded, Unfilled, unless otherwise specified.
250
+
251
+ ##### Technical Documentation Links
252
+
253
+ If you are creating a Glimmer Icon component, read the:
254
+
255
+ - **Developer Guidance:** [Jetpack Compose Glimmer: Icons](references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/icons.md)
256
+ - **API Source Code (Icon):** Use [references/icon-source.md](references/icon-source.md).
257
+ - **API Source Code (IconButton):** Use [references/iconbutton-source.md](references/iconbutton-source.md).
258
+ - **API Source Code (IconSizes):** Use [references/iconsizes-source.md](references/iconsizes-source.md).
259
+
260
+ #### Lists
261
+
262
+ Lists are containers that allow you to navigate between and see multiple items
263
+ on glasses. If your use case works with only seeing one item in the list at a
264
+ time, use a Glimmer Stack. Use lists with a Title Chip when the list
265
+ items are similar in type. Also use a Glimmer Stack if the items are of
266
+ different types.
267
+
268
+ ##### Guidelines and usage
269
+
270
+ - **ListItem Slots:** Use the `ListItem` composable for rows. It provides predefined slots. Use [references/listitem-source.md](references/listitem-source.md) for reference.
271
+ - **Visual Consistency:** When building lists of similar items, always use a consistent background color (typically `GlimmerTheme.colors.surface`) and corner radius (standard 36.dp) for every item. Don't vary these unless you are visually grouping different *types* of content.
272
+ - **Integrated Title Chips:** Glimmer Lists support integrated title chips. **IF** you need a section header within a list: **THEN** enable the integrated title chip rather than adding a standalone `TitleChip` to maintain spatial consistency.
273
+ - **Vertical Arrangement:** ALWAYS use `verticalArrangement =
274
+ Arrangement.spacedBy(20.dp)` for `GlimmerLazyColumn` to ensure visual separation between items on the glasses display.
275
+ - Be sure to use the default 20 dp spacing between list items unless otherwise specified.
276
+
277
+ ##### Technical Documentation Links
278
+
279
+ If you are creating a Glimmer List component, read the:
280
+
281
+ - **API Source Code (List):** Use [references/list-source.md](references/list-source.md).
282
+ - **API Source Code (ListItem):** Use [references/listitem-source.md](references/listitem-source.md).
283
+ - **API Source Code (GlimmerLazyListState):** Use [references/liststate-source.md](references/liststate-source.md).
284
+
285
+ #### Stacks
286
+
287
+ A stack is a collapsed list that only displays one piece of content at a time,
288
+ in a stacked visual, such as a card. If it is useful to show more than one item
289
+ at a time, use the Glimmer List control. Don't use a title chip with a stack.
290
+ If the items are of different types use a stack to show them. If the items are
291
+ of the same type, use a list.
292
+
293
+ ##### Guidelines and usage
294
+
295
+ **Layout tips**
296
+
297
+ - Stacks accept variable height items.
298
+ - Align your stack control with the bottom of the display.
299
+ - The stack control must be 66 dp taller than the tallest item in the stack, allowing room for the scrim and minimizing movement when navigating between items.
300
+ - **Clipping and Layering:** To ensure that items behind the top item are correctly clipped and hidden, you **must** apply the `.itemDecoration(CardDefaults.shape)` modifier to the `Card` (or relevant container) inside every `item` block.
301
+ - **Depth Shadows:** To maintain spatial separation and element priority, utilize Glimmer's `ShadowScope`, `DepthEffect`, or prescribed `DepthEffectLevels` for depth plane scaling.
302
+
303
+ ##### Technical Documentation Links
304
+
305
+ If you are creating a Glimmer Stack component, read the:
306
+
307
+ - **API Source Code (Stack):** Use [references/stack-source.md](references/stack-source.md).
308
+ - **API Source Code (StackState):** Use [references/stackstate-source.md](references/stackstate-source.md).
309
+ - **API Source Code (StackItemScope):** Use [references/stackitemscope-source.md](references/stackitemscope-source.md).
310
+
311
+ #### Text
312
+
313
+ In Jetpack Compose Glimmer, the [`Text`](references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/text.md) component builds off the Compose
314
+ text component, and lets you set various text properties. Be sure to choose a
315
+ style from the `GlimmerTheme` for your text. Modify the theme for your
316
+ application if you want custom typography.
317
+
318
+ ##### Essential Constraint: Glimmer Text versus Material Text
319
+
320
+ On transparent Display Glasses (additive displays), standard Material `Text`
321
+ resolves to dark foreground tokens which render as transparent and invisible.
322
+ Glimmer `Text` intelligently manages theme color matching. When no manual color
323
+ override is specified, Glimmer `Text` automatically defaults to the content
324
+ color provided by the nearest Glimmer surface.
325
+
326
+ - **Don't:** Use Material Text
327
+ - **Do:** Use Glimmer Text
328
+
329
+ #### Surface
330
+
331
+ `Surface` is a fundamental building block in Glimmer. Use
332
+ [references/surface-source.md](references/surface-source.md) for reference.
333
+
334
+ A surface represents a distinct visual area or 'physical' boundary for
335
+ components such as buttons and cards. Use it if you need to build a custom
336
+ component.
337
+
338
+ ## 5. Integrate with system UI
339
+
340
+ - For a detailed breakdown of notifications on intelligent eyewear, see [Understand notification behavior for intelligent eyewear](https://developer.android.com/develop/xr/jetpack-xr-sdk/ai-glasses/notifications/behavior) and learn how to [Start a glasses activity on display glasses from a notification](https://developer.android.com/develop/xr/jetpack-xr-sdk/ai-glasses/notifications/start-activity).
@@ -0,0 +1,67 @@
1
+ Glasses have multiple sources and types of interaction inputs, including
2
+ hardware and touch, physical gesture, and voice.
3
+
4
+ ## Hardware controls
5
+
6
+ Glasses controls can vary depending on device model, but most will include a
7
+ camera button, touchpad, display button, and power switch or button. Hardware
8
+ controls have default interactions, and some can be remapped for your app.
9
+ Consider that inputs for glasses are more 1-dimensional, where users can make
10
+ one control input at a time, compared to touchscreen inputs. The glasses
11
+ hardware controls have default interaction mapping, some of which are handled by
12
+ the app, and others that are handled by the system.
13
+
14
+ **The system will handle the following inputs:**
15
+
16
+ - Camera button single press to take photos and camera button hold to take videos
17
+ - Swiping with two fingers on the touchpad for volume
18
+ - Touch \& hold on the touchpad and the wake word on the microphone will launch Gemini
19
+ - System interprets swipe down on display glasses as system back.
20
+
21
+ **Your app has access to the glasses:**
22
+
23
+ - Microphone
24
+ - Point-of-View (POV) camera
25
+ - Inertial Measurement Unit (IMU)
26
+ - Camera button double-press
27
+
28
+ ![Design elements should be anchored to the bottom of the
29
+ frame.](https://developer.android.com/static/images/design/ui/glasses/guides/glasses_ixd_inputs_hardware.png)
30
+
31
+ ### AI Glasses
32
+
33
+
34
+ | Input | Gesture | Interaction affect |
35
+ |---|---|---|
36
+ | Touchpad (1) | Tap | Play / Pause / Confirm |
37
+ | | Swipe | Next/Previous/Dismiss |
38
+ | | Swipe down | N/A |
39
+ | | Touch \& hold | Invoke AI |
40
+ | | 2-finger swipe | Volume |
41
+ | Display button (2) | Press | N/A |
42
+ | Camera button (3) | Press | Photo / Video end |
43
+ | | Touch \& hold | Video start |
44
+ | | Double press | Camera |
45
+
46
+ <br />
47
+
48
+ ### AI Glasses with Display
49
+
50
+
51
+ | Input | Gesture | Interaction affect |
52
+ |---|---|---|
53
+ | Touchpad (1) | Tap | Play / Pause / Confirm |
54
+ | | Swipe | UI Navigation |
55
+ | | Swipe down | Back |
56
+ | | Touch \& hold | Invoke AI |
57
+ | | 2-finger swipe | Volume |
58
+ | Display button (2) | Press | Wake/Sleep |
59
+ | Camera button (3) | Press | Photo / Video end |
60
+ | | Touch \& hold | Video start |
61
+ | | Double press | Camera |
62
+
63
+ <br />
64
+
65
+ ![Design elements should be anchored to the bottom of the
66
+ frame.](https://developer.android.com/static/images/design/ui/glasses/guides/glasses_ixd_inputs_focus.png) On
67
+ display focus states have a visual affordances.