reis-mobile 0.3.5 → 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 (465) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/CHANGELOG.md +33 -0
  4. package/README.md +186 -172
  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 +83 -33
  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/install/codex-plugin.mjs +66 -0
  24. package/core/install/init.mjs +46 -0
  25. package/core/registry/frontmatter.mjs +15 -4
  26. package/core/registry/registry.mjs +21 -1
  27. package/core/router/intents.mjs +2 -0
  28. package/core/router/router.mjs +10 -5
  29. package/package.json +1 -1
  30. package/skills/android-adaptive/SKILL.md +304 -0
  31. package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/container-behavior.md +112 -0
  32. package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/get-started.md +69 -0
  33. package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/index.md +81 -0
  34. package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/item-behavior.md +170 -0
  35. package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/container-properties.md +415 -0
  36. package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/get-started.md +51 -0
  37. package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/index.md +73 -0
  38. package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/item-properties.md +170 -0
  39. package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/mediaquery/index.md +333 -0
  40. package/skills/android-adaptive/references/android/develop/ui/compose/tooling/debug.md +114 -0
  41. package/skills/android-adaptive/references/android/guide/navigation/navigation-3/recipes/material-listdetail.md +141 -0
  42. package/skills/android-agp-9-upgrade/SKILL.md +106 -0
  43. package/skills/android-agp-9-upgrade/references/android/build/migrate-to-built-in-kotlin.md +416 -0
  44. package/skills/android-agp-9-upgrade/references/android/build/releases/agp-9-0-0-release-notes.md +554 -0
  45. package/skills/android-agp-9-upgrade/references/buildconfig.md +54 -0
  46. package/skills/android-agp-9-upgrade/references/ksp-kapt.md +39 -0
  47. package/skills/android-agp-9-upgrade/references/paparazzi-gradle-9.md +30 -0
  48. package/skills/android-agp-9-upgrade/references/recipes.md +62 -0
  49. package/skills/android-appfunctions/SKILL.md +74 -0
  50. package/skills/android-appfunctions/references/adb-interaction-testing.md +95 -0
  51. package/skills/android-appfunctions/references/context.md +26 -0
  52. package/skills/android-appfunctions/references/feature-discovery-analysis.md +71 -0
  53. package/skills/android-appfunctions/references/implementation-configuration.md +282 -0
  54. package/skills/android-appfunctions/references/kdoc-refinement-optimization.md +75 -0
  55. package/skills/android-appfunctions/references/migrate-to-service-entry-point.md +226 -0
  56. package/skills/android-camerax/SKILL.md +135 -0
  57. package/skills/android-camerax/references/camera1-to-camerax.md +198 -0
  58. package/skills/android-camerax/references/camera2-to-camerax.md +193 -0
  59. package/skills/android-camerax/references/expert-blueprints.md +58 -0
  60. package/skills/android-camerax/references/foldables.md +83 -0
  61. package/skills/android-camerax/references/immutability.md +60 -0
  62. package/skills/android-camerax/references/low-light.md +124 -0
  63. package/skills/android-camerax/references/mlkit-spatial.md +75 -0
  64. package/skills/android-camerax/references/modern-apis.md +42 -0
  65. package/skills/android-camerax/references/testing.md +69 -0
  66. package/skills/android-camerax/references/thermals.md +85 -0
  67. package/skills/android-camerax/references/wear-os.md +76 -0
  68. package/skills/android-camerax/references/xr.md +54 -0
  69. package/skills/android-cli/SKILL.md +474 -0
  70. package/skills/android-cli/references/interact.md +113 -0
  71. package/skills/android-cli/references/journeys.md +120 -0
  72. package/skills/android-code-review/SKILL.md +58 -0
  73. package/skills/android-display-glasses-with-jetpack-compose-glimmer/SKILL.md +340 -0
  74. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/design/ui/ai-glasses/guides/interaction/inputs.md +67 -0
  75. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/access-hardware-projected-context.md +388 -0
  76. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/buttons.md +139 -0
  77. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/cards.md +148 -0
  78. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/focus.md +107 -0
  79. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/icons.md +90 -0
  80. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/text.md +69 -0
  81. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/title-chips.md +82 -0
  82. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/request-hardware-permissions.md +213 -0
  83. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/button-samples-source.md +176 -0
  84. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/button-source.md +203 -0
  85. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/card-samples-source.md +296 -0
  86. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/card-source.md +515 -0
  87. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/deptheffect-source.md +224 -0
  88. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/deptheffectlevels-source.md +105 -0
  89. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/glimmersansflextypography-source.md +270 -0
  90. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/glimmertheme-source.md +182 -0
  91. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/icon-source.md +388 -0
  92. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/iconbutton-source.md +126 -0
  93. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/iconsizes-source.md +78 -0
  94. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/list-source.md +27 -0
  95. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/listitem-source.md +272 -0
  96. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/liststate-source.md +427 -0
  97. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/material-hct-source.md +217 -0
  98. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/projectedcontext-source.md +265 -0
  99. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/stack-source.md +368 -0
  100. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/stackitemscope-source.md +440 -0
  101. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/stackstate-source.md +325 -0
  102. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/surface-source.md +1211 -0
  103. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/titlechip-samples-source.md +101 -0
  104. package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/titlechip-source.md +131 -0
  105. package/skills/android-edge-to-edge/SKILL.md +429 -0
  106. package/skills/android-engage-sdk-integration/SKILL.md +130 -0
  107. package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/faq.md +439 -0
  108. package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/food.md +1149 -0
  109. package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/healthandfitness.md +1055 -0
  110. package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/listen.md +1050 -0
  111. package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/otherverticals.md +1301 -0
  112. package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/read.md +910 -0
  113. package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/shopping.md +1224 -0
  114. package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/social.md +719 -0
  115. package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/travel.md +1413 -0
  116. package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/tv/continue-watching/index.md +19 -0
  117. package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/tv/entitlements.md +353 -0
  118. package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/tv/getting-started.md +202 -0
  119. package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/tv/recommendations.md +471 -0
  120. package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/watch.md +1081 -0
  121. package/skills/android-engage-sdk-integration/references/clusters.md +154 -0
  122. package/skills/android-engage-sdk-integration/references/common.md +519 -0
  123. package/skills/android-engage-sdk-integration/references/patterns.md +527 -0
  124. package/skills/android-engage-sdk-integration/references/requests.md +260 -0
  125. package/skills/android-engage-sdk-integration/references/schemas/food.md +509 -0
  126. package/skills/android-engage-sdk-integration/references/schemas/listen.md +842 -0
  127. package/skills/android-engage-sdk-integration/references/schemas/other.md +220 -0
  128. package/skills/android-engage-sdk-integration/references/schemas/read.md +412 -0
  129. package/skills/android-engage-sdk-integration/references/schemas/shopping.md +357 -0
  130. package/skills/android-engage-sdk-integration/references/schemas/social.md +228 -0
  131. package/skills/android-engage-sdk-integration/references/schemas/travel.md +923 -0
  132. package/skills/android-engage-sdk-integration/references/schemas/tv.md +1226 -0
  133. package/skills/android-engage-sdk-integration/references/schemas/watch.md +1137 -0
  134. package/skills/android-engage-sdk-integration/references/troubleshooting.md +39 -0
  135. package/skills/android-gradle-build-debug/SKILL.md +71 -0
  136. package/skills/android-intent-security/SKILL.md +550 -0
  137. package/skills/android-leanback-to-compose-tv-migration/SKILL.md +743 -0
  138. package/skills/android-leanback-to-compose-tv-migration/references/android/training/tv/get-started/navigation.md +372 -0
  139. package/skills/android-leanback-to-compose-tv-migration/references/android/training/tv/playback/compose/browse.md +243 -0
  140. package/skills/android-leanback-to-compose-tv-migration/references/android/training/tv/playback/compose/index.md +153 -0
  141. package/skills/android-media3-cast-integration/SKILL.md +236 -0
  142. package/skills/android-media3-cast-integration/references/android/media/media3/cast/create-castplayer.md +390 -0
  143. package/skills/android-media3-cast-integration/references/android/media/media3/cast/customize-castoptions.md +93 -0
  144. package/skills/android-media3-cast-integration/references/android/media/media3/cast/index.md +21 -0
  145. package/skills/android-migrate-xml-views-to-jetpack-compose/SKILL.md +127 -0
  146. package/skills/android-migrate-xml-views-to-jetpack-compose/references/analysis-of-the-project-and-layout.md +42 -0
  147. package/skills/android-migrate-xml-views-to-jetpack-compose/references/android/develop/ui/compose/designsystems/migrate-xml-theme-to-compose.md +171 -0
  148. package/skills/android-migrate-xml-views-to-jetpack-compose/references/android/develop/ui/compose/migrate/interoperability-apis/compose-in-views.md +299 -0
  149. package/skills/android-migrate-xml-views-to-jetpack-compose/references/android/develop/ui/compose/migrate/interoperability-apis/views-in-compose.md +286 -0
  150. package/skills/android-migrate-xml-views-to-jetpack-compose/references/android/develop/ui/compose/setup-compose-dependencies-and-compiler.md +197 -0
  151. package/skills/android-migrate-xml-views-to-jetpack-compose/references/identify-optimal-xml-candidate.md +31 -0
  152. package/skills/android-migrate-xml-views-to-jetpack-compose/references/xml-layout-migration.md +86 -0
  153. package/skills/android-ml-kit-genai-prompt-api/SKILL.md +124 -0
  154. package/skills/android-ml-kit-genai-prompt-api/references/get-started.md +272 -0
  155. package/skills/android-ml-kit-genai-prompt-api/references/prefix-caching.md +146 -0
  156. package/skills/android-ml-kit-genai-prompt-api/references/prompt-design.md +55 -0
  157. package/skills/android-ml-kit-genai-prompt-api/references/prompt-optimization.md +74 -0
  158. package/skills/android-ml-kit-genai-prompt-api/references/structured-output.md +219 -0
  159. package/skills/android-ml-kit-genai-prompt-api/references/system-instructions.md +71 -0
  160. package/skills/android-navigation-3/SKILL.md +122 -0
  161. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/index.md +51 -0
  162. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/migration-guide.md +670 -0
  163. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/animations.md +147 -0
  164. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/basic.md +89 -0
  165. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/basicdsl.md +85 -0
  166. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/basicsaveable.md +90 -0
  167. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/bottomsheet.md +195 -0
  168. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/common-ui.md +200 -0
  169. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/conditional-transitions.md +182 -0
  170. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/conditional.md +230 -0
  171. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/deeplinks-custommatcher.md +176 -0
  172. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/deeplinks-staticuri.md +140 -0
  173. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/deeplinks-syntheticbackstack.md +184 -0
  174. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/dialog.md +107 -0
  175. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/lifecycle-owner.md +185 -0
  176. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/material-listdetail.md +141 -0
  177. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/material-supportingpane.md +145 -0
  178. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/modular-hilt.md +283 -0
  179. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/modular-koin.md +287 -0
  180. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/multiple-backstacks.md +468 -0
  181. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/passingarguments.md +371 -0
  182. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/results-event.md +273 -0
  183. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/results-state.md +266 -0
  184. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/scenes-listdetail.md +435 -0
  185. package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/scenes-twopane.md +244 -0
  186. package/skills/android-navigation-3/references/android/guide/navigation/type-safe-destinations.md +129 -0
  187. package/skills/android-navigation-event/SKILL.md +312 -0
  188. package/skills/android-navigation-event/references/android/guide/navigation/navigation-event/dispatcher.md +134 -0
  189. package/skills/android-navigation-event/references/android/guide/navigation/navigation-event/handle-back.md +217 -0
  190. package/skills/android-navigation-event/references/android/guide/navigation/navigation-event/index.md +83 -0
  191. package/skills/android-navigation-event/references/android/guide/navigation/navigation-event/setup.md +32 -0
  192. package/skills/android-play-billing-library-version-upgrade/SKILL.md +96 -0
  193. package/skills/android-play-billing-library-version-upgrade/references/android/google/play/billing/release-notes.md +1240 -0
  194. package/skills/android-play-billing-library-version-upgrade/references/migration-logic.md +78 -0
  195. package/skills/android-play-billing-library-version-upgrade/references/version-checklist.md +54 -0
  196. package/skills/android-play-policy-insights/SKILL.md +172 -0
  197. package/skills/android-play-policy-insights/resources/common_mandates.md +100 -0
  198. package/skills/android-play-policy-insights/resources/compliance_report_template.md +59 -0
  199. package/skills/android-play-policy-insights/resources/critic.md +86 -0
  200. package/skills/android-play-policy-insights/resources/goal_data_safety.md +212 -0
  201. package/skills/android-play-policy-insights/resources/goal_permissions_and_apis.md +459 -0
  202. package/skills/android-play-policy-insights/resources/goal_user_account.md +106 -0
  203. package/skills/android-play-policy-insights/resources/policies.json +321 -0
  204. package/skills/android-play-policy-insights/resources/scanner_config.json +843 -0
  205. package/skills/android-play-policy-insights/scripts/generate_report.py +860 -0
  206. package/skills/android-play-policy-insights/scripts/orchestrator.py +1313 -0
  207. package/skills/android-play-policy-insights/scripts/play_store_scraper.py +410 -0
  208. package/skills/android-play-policy-insights/scripts/scanner.py +261 -0
  209. package/skills/android-play-policy-insights/scripts/template_engine.py +243 -0
  210. package/skills/android-profiler/SKILL.md +60 -0
  211. package/skills/android-profiler/analysis/analysis_orchestrator.md +32 -0
  212. package/skills/android-profiler/analysis/workflows/perfetto-sql/perfetto_sql.md +28 -0
  213. package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/perfetto_trace_analysis.md +121 -0
  214. package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/guiding_principles.md +51 -0
  215. package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/domain_hints_template.md +7 -0
  216. package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_cpu.md +56 -0
  217. package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_graphics.md +51 -0
  218. package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_io.md +46 -0
  219. package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_ipc.md +41 -0
  220. package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_memory.md +55 -0
  221. package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_power.md +33 -0
  222. package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/per_candidate_analysis.md +172 -0
  223. package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/triage.md +94 -0
  224. package/skills/android-profiler/recording/recording_orchestrator.md +36 -0
  225. package/skills/android-profiler/recording/workflows/perfetto-trace-recording/perfetto_trace_recording.md +148 -0
  226. package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/app_jank.pftxt +43 -0
  227. package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/cpu_profile.pftxt +35 -0
  228. package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/java_heap_dump.pftxt +21 -0
  229. package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/long_background.pftxt +37 -0
  230. package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/memory_counters.pftxt +45 -0
  231. package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/native_heap.pftxt +21 -0
  232. package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/sched_cpu.pftxt +33 -0
  233. package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/trace_config_reference.md +102 -0
  234. package/skills/android-profiler/references/env_setup.md +15 -0
  235. package/skills/android-profiler/references/perfetto/setup.md +29 -0
  236. package/skills/android-profiler/references/perfetto/sql.md +327 -0
  237. package/skills/android-r8-analyzer/SKILL.md +72 -0
  238. package/skills/android-r8-analyzer/references/CONFIGURATION-ANALYZER.md +287 -0
  239. package/skills/android-r8-analyzer/references/CONFIGURATION.md +44 -0
  240. package/skills/android-r8-analyzer/references/KEEP-RULES-IMPACT-HIERARCHY.md +83 -0
  241. package/skills/android-r8-analyzer/references/REDUNDANT-RULES.md +222 -0
  242. package/skills/android-r8-analyzer/references/REFLECTION-GUIDE.md +139 -0
  243. package/skills/android-r8-analyzer/references/REPORT_FORMAT.md +51 -0
  244. package/skills/android-r8-analyzer/references/android/topic/performance/app-optimization/enable-app-optimization.md +252 -0
  245. package/skills/android-r8-analyzer/references/android/training/testing/other-components/ui-automator.md +312 -0
  246. package/skills/android-restore-credentials/SKILL.md +359 -0
  247. package/skills/android-restore-credentials/references/android/guide/topics/manifest/application-element.md +832 -0
  248. package/skills/android-restore-credentials/references/android/identity/passkeys/create-passkeys.md +327 -0
  249. package/skills/android-restore-credentials/references/android/identity/passkeys/sign-in-with-passkeys.md +219 -0
  250. package/skills/android-styles/SKILL.md +229 -0
  251. package/skills/android-styles/references/android/develop/ui/compose/designsystems/custom.md +459 -0
  252. package/skills/android-styles/references/android/develop/ui/compose/styles/fundamentals.md +421 -0
  253. package/skills/android-styles/references/android/develop/ui/compose/styles/state-animations.md +461 -0
  254. package/skills/android-styles/references/android/develop/ui/compose/styles/styles-vs-modifiers.md +48 -0
  255. package/skills/android-styles/references/android/develop/ui/compose/styles/theming.md +269 -0
  256. package/skills/android-verified-email/SKILL.md +432 -0
  257. package/skills/android-verified-email/references/android/identity/credential-manager/index.md +67 -0
  258. package/skills/android-verified-email/references/android/identity/digital-credentials/credential-verifier.md +166 -0
  259. package/skills/android-verified-email/references/android/identity/digital-credentials/email-verification-implementation.md +313 -0
  260. package/skills/android-verified-email/references/android/identity/digital-credentials/email-verification.md +158 -0
  261. package/skills/android-verified-email/references/android/identity/digital-credentials/index.md +112 -0
  262. package/skills/android-verified-email/references/android/identity/passkeys/create-passkeys.md +327 -0
  263. package/skills/android-verified-email/references/android/identity/sign-in/credential-manager-webview.md +84 -0
  264. package/skills/android-wear-compose-m3/SKILL.md +365 -0
  265. package/skills/android-wear-compose-m3/references/android/training/wearables/compose/migrate-to-material3.md +677 -0
  266. package/skills/android-wear-compose-m3/references/foundation/AmbientModeSample.kt.md +123 -0
  267. package/skills/android-wear-compose-m3/references/foundation/AmbientModeSample.kt.md.txt +123 -0
  268. package/skills/android-wear-compose-m3/references/foundation/CurvedWorldSample.kt.md +430 -0
  269. package/skills/android-wear-compose-m3/references/foundation/CurvedWorldSample.kt.md.txt +430 -0
  270. package/skills/android-wear-compose-m3/references/foundation/ExpandableSample.kt.md +99 -0
  271. package/skills/android-wear-compose-m3/references/foundation/ExpandableSample.kt.md.txt +99 -0
  272. package/skills/android-wear-compose-m3/references/foundation/HierarchicalFocusSample.kt.md +141 -0
  273. package/skills/android-wear-compose-m3/references/foundation/HierarchicalFocusSample.kt.md.txt +141 -0
  274. package/skills/android-wear-compose-m3/references/foundation/PagerSamples.kt.md +56 -0
  275. package/skills/android-wear-compose-m3/references/foundation/PagerSamples.kt.md.txt +56 -0
  276. package/skills/android-wear-compose-m3/references/foundation/RotarySamples.kt.md +153 -0
  277. package/skills/android-wear-compose-m3/references/foundation/RotarySamples.kt.md.txt +153 -0
  278. package/skills/android-wear-compose-m3/references/foundation/ScalingLazyColumnSample.kt.md +131 -0
  279. package/skills/android-wear-compose-m3/references/foundation/ScalingLazyColumnSample.kt.md.txt +131 -0
  280. package/skills/android-wear-compose-m3/references/foundation/SwipeToDismissBoxSample.kt.md +169 -0
  281. package/skills/android-wear-compose-m3/references/foundation/SwipeToDismissBoxSample.kt.md.txt +169 -0
  282. package/skills/android-wear-compose-m3/references/foundation/SwipeToRevealSample.kt.md +282 -0
  283. package/skills/android-wear-compose-m3/references/foundation/SwipeToRevealSample.kt.md.txt +282 -0
  284. package/skills/android-wear-compose-m3/references/foundation/TransformingLazyColumnSample.kt.md +335 -0
  285. package/skills/android-wear-compose-m3/references/foundation/TransformingLazyColumnSample.kt.md.txt +335 -0
  286. package/skills/android-wear-compose-m3/references/material3/AlertDialogSample.kt.md +377 -0
  287. package/skills/android-wear-compose-m3/references/material3/AlertDialogSample.kt.md.txt +377 -0
  288. package/skills/android-wear-compose-m3/references/material3/AnimatedTextSample.kt.md +165 -0
  289. package/skills/android-wear-compose-m3/references/material3/AnimatedTextSample.kt.md.txt +165 -0
  290. package/skills/android-wear-compose-m3/references/material3/ButtonGroupSample.kt.md +91 -0
  291. package/skills/android-wear-compose-m3/references/material3/ButtonGroupSample.kt.md.txt +91 -0
  292. package/skills/android-wear-compose-m3/references/material3/ButtonSample.kt.md +496 -0
  293. package/skills/android-wear-compose-m3/references/material3/ButtonSample.kt.md.txt +496 -0
  294. package/skills/android-wear-compose-m3/references/material3/CardSample.kt.md +470 -0
  295. package/skills/android-wear-compose-m3/references/material3/CardSample.kt.md.txt +470 -0
  296. package/skills/android-wear-compose-m3/references/material3/CheckboxButtonSample.kt.md +67 -0
  297. package/skills/android-wear-compose-m3/references/material3/CheckboxButtonSample.kt.md.txt +67 -0
  298. package/skills/android-wear-compose-m3/references/material3/ConfirmationDialogSample.kt.md +162 -0
  299. package/skills/android-wear-compose-m3/references/material3/ConfirmationDialogSample.kt.md.txt +162 -0
  300. package/skills/android-wear-compose-m3/references/material3/CurvedTextSamples.kt.md +78 -0
  301. package/skills/android-wear-compose-m3/references/material3/CurvedTextSamples.kt.md.txt +78 -0
  302. package/skills/android-wear-compose-m3/references/material3/DatePickerSample.kt.md +131 -0
  303. package/skills/android-wear-compose-m3/references/material3/DatePickerSample.kt.md.txt +131 -0
  304. package/skills/android-wear-compose-m3/references/material3/DynamicColorSchemeSample.kt.md +74 -0
  305. package/skills/android-wear-compose-m3/references/material3/DynamicColorSchemeSample.kt.md.txt +74 -0
  306. package/skills/android-wear-compose-m3/references/material3/EdgeButtonSample.kt.md +63 -0
  307. package/skills/android-wear-compose-m3/references/material3/EdgeButtonSample.kt.md.txt +63 -0
  308. package/skills/android-wear-compose-m3/references/material3/FadingExpandingLabelSample.kt.md +60 -0
  309. package/skills/android-wear-compose-m3/references/material3/FadingExpandingLabelSample.kt.md.txt +60 -0
  310. package/skills/android-wear-compose-m3/references/material3/IconButtonSample.kt.md +125 -0
  311. package/skills/android-wear-compose-m3/references/material3/IconButtonSample.kt.md.txt +125 -0
  312. package/skills/android-wear-compose-m3/references/material3/IconToggleButtonSample.kt.md +116 -0
  313. package/skills/android-wear-compose-m3/references/material3/IconToggleButtonSample.kt.md.txt +116 -0
  314. package/skills/android-wear-compose-m3/references/material3/LevelIndicatorSample.kt.md +68 -0
  315. package/skills/android-wear-compose-m3/references/material3/LevelIndicatorSample.kt.md.txt +68 -0
  316. package/skills/android-wear-compose-m3/references/material3/LinearProgressIndicatorSample.kt.md +50 -0
  317. package/skills/android-wear-compose-m3/references/material3/LinearProgressIndicatorSample.kt.md.txt +50 -0
  318. package/skills/android-wear-compose-m3/references/material3/ListHeaderSample.kt.md +177 -0
  319. package/skills/android-wear-compose-m3/references/material3/ListHeaderSample.kt.md.txt +177 -0
  320. package/skills/android-wear-compose-m3/references/material3/OneHandedGestureSamples.kt.md +651 -0
  321. package/skills/android-wear-compose-m3/references/material3/OneHandedGestureSamples.kt.md.txt +651 -0
  322. package/skills/android-wear-compose-m3/references/material3/OpenOnPhoneDialogSample.kt.md +57 -0
  323. package/skills/android-wear-compose-m3/references/material3/OpenOnPhoneDialogSample.kt.md.txt +57 -0
  324. package/skills/android-wear-compose-m3/references/material3/PageIndicatorSample.kt.md +110 -0
  325. package/skills/android-wear-compose-m3/references/material3/PageIndicatorSample.kt.md.txt +110 -0
  326. package/skills/android-wear-compose-m3/references/material3/PagerScaffoldSample.kt.md +204 -0
  327. package/skills/android-wear-compose-m3/references/material3/PagerScaffoldSample.kt.md.txt +204 -0
  328. package/skills/android-wear-compose-m3/references/material3/PickerGroupSample.kt.md +139 -0
  329. package/skills/android-wear-compose-m3/references/material3/PickerGroupSample.kt.md.txt +139 -0
  330. package/skills/android-wear-compose-m3/references/material3/PickerSample.kt.md +111 -0
  331. package/skills/android-wear-compose-m3/references/material3/PickerSample.kt.md.txt +111 -0
  332. package/skills/android-wear-compose-m3/references/material3/PlaceholderSample.kt.md +184 -0
  333. package/skills/android-wear-compose-m3/references/material3/PlaceholderSample.kt.md.txt +184 -0
  334. package/skills/android-wear-compose-m3/references/material3/ProgressIndicatorSample.kt.md +263 -0
  335. package/skills/android-wear-compose-m3/references/material3/ProgressIndicatorSample.kt.md.txt +263 -0
  336. package/skills/android-wear-compose-m3/references/material3/RadioButtonSample.kt.md +105 -0
  337. package/skills/android-wear-compose-m3/references/material3/RadioButtonSample.kt.md.txt +105 -0
  338. package/skills/android-wear-compose-m3/references/material3/ScaffoldSample.kt.md +146 -0
  339. package/skills/android-wear-compose-m3/references/material3/ScaffoldSample.kt.md.txt +146 -0
  340. package/skills/android-wear-compose-m3/references/material3/ScrollAwaySample.kt.md +97 -0
  341. package/skills/android-wear-compose-m3/references/material3/ScrollAwaySample.kt.md.txt +97 -0
  342. package/skills/android-wear-compose-m3/references/material3/ScrollIndicatorSample.kt.md +66 -0
  343. package/skills/android-wear-compose-m3/references/material3/ScrollIndicatorSample.kt.md.txt +66 -0
  344. package/skills/android-wear-compose-m3/references/material3/SliderSample.kt.md +86 -0
  345. package/skills/android-wear-compose-m3/references/material3/SliderSample.kt.md.txt +86 -0
  346. package/skills/android-wear-compose-m3/references/material3/StepperSample.kt.md +148 -0
  347. package/skills/android-wear-compose-m3/references/material3/StepperSample.kt.md.txt +148 -0
  348. package/skills/android-wear-compose-m3/references/material3/SurfaceTransformationSample.kt.md +166 -0
  349. package/skills/android-wear-compose-m3/references/material3/SurfaceTransformationSample.kt.md.txt +166 -0
  350. package/skills/android-wear-compose-m3/references/material3/SwipeToDismissBoxSample.kt.md +172 -0
  351. package/skills/android-wear-compose-m3/references/material3/SwipeToDismissBoxSample.kt.md.txt +172 -0
  352. package/skills/android-wear-compose-m3/references/material3/SwipeToRevealSample.kt.md +367 -0
  353. package/skills/android-wear-compose-m3/references/material3/SwipeToRevealSample.kt.md.txt +367 -0
  354. package/skills/android-wear-compose-m3/references/material3/SwitchButtonSample.kt.md +66 -0
  355. package/skills/android-wear-compose-m3/references/material3/SwitchButtonSample.kt.md.txt +66 -0
  356. package/skills/android-wear-compose-m3/references/material3/TextButtonSample.kt.md +115 -0
  357. package/skills/android-wear-compose-m3/references/material3/TextButtonSample.kt.md.txt +115 -0
  358. package/skills/android-wear-compose-m3/references/material3/TextToggleButtonSample.kt.md +71 -0
  359. package/skills/android-wear-compose-m3/references/material3/TextToggleButtonSample.kt.md.txt +71 -0
  360. package/skills/android-wear-compose-m3/references/material3/TimePickerSample.kt.md +151 -0
  361. package/skills/android-wear-compose-m3/references/material3/TimePickerSample.kt.md.txt +151 -0
  362. package/skills/android-wear-compose-m3/references/material3/TimeTextSample.kt.md +65 -0
  363. package/skills/android-wear-compose-m3/references/material3/TimeTextSample.kt.md.txt +65 -0
  364. package/skills/android-wear-compose-m3/references/material3/TransformationSpecSample.kt.md +246 -0
  365. package/skills/android-wear-compose-m3/references/material3/TransformationSpecSample.kt.md.txt +246 -0
  366. package/skills/android-wear-compose-m3/references/material3/TransformingLazyColumnNotificationsSample.kt.md +89 -0
  367. package/skills/android-wear-compose-m3/references/material3/TransformingLazyColumnNotificationsSample.kt.md.txt +89 -0
  368. package/skills/android-wear-compose-m3/references/material3/TransformingLazyColumnSample.kt.md +309 -0
  369. package/skills/android-wear-compose-m3/references/material3/TransformingLazyColumnSample.kt.md.txt +309 -0
  370. package/skills/android-wear-compose-m3/references/navigation3/SwipeDismissableSceneStrategySample.kt.md +205 -0
  371. package/skills/android-wear-compose-m3/references/navigation3/SwipeDismissableSceneStrategySample.kt.md.txt +205 -0
  372. package/skills/{architecture-feature-first → flutter-architecture-feature-first}/SKILL.md +1 -1
  373. package/skills/{bloc → flutter-bloc}/SKILL.md +1 -1
  374. package/skills/flutter-build-debug/SKILL.md +66 -0
  375. package/skills/{code-review → flutter-code-review}/SKILL.md +1 -1
  376. package/skills/{dart-3-updates → flutter-dart-3-updates}/SKILL.md +1 -1
  377. package/skills/{dart-fix-runtime-errors → flutter-dart-fix-runtime-errors}/SKILL.md +1 -1
  378. package/skills/{dart-resolve-package-conflicts → flutter-dart-resolve-package-conflicts}/SKILL.md +1 -1
  379. package/skills/{dart-run-static-analysis → flutter-dart-run-static-analysis}/SKILL.md +1 -1
  380. package/skills/{dart-use-pattern-matching → flutter-dart-use-pattern-matching}/SKILL.md +1 -1
  381. package/skills/{effective-dart → flutter-effective-dart}/SKILL.md +1 -1
  382. package/skills/{provider → flutter-provider}/SKILL.md +1 -1
  383. package/skills/{riverpod → flutter-riverpod}/SKILL.md +1 -1
  384. package/skills/ios-cocoapods-debug/SKILL.md +65 -0
  385. package/skills/ios-code-review/SKILL.md +56 -0
  386. package/skills/ios-xcode-build-debug/SKILL.md +66 -0
  387. package/skills/{detect-mobile-stack → mobile-detect-stack}/SKILL.md +1 -1
  388. package/skills/mobile-firebase/SKILL.md +54 -0
  389. package/skills/mobile-firebase/references/android/ai-logic.md +31 -0
  390. package/skills/mobile-firebase/references/android/analytics.md +33 -0
  391. package/skills/mobile-firebase/references/android/app-check.md +36 -0
  392. package/skills/mobile-firebase/references/android/auth.md +44 -0
  393. package/skills/mobile-firebase/references/android/crashlytics.md +31 -0
  394. package/skills/mobile-firebase/references/android/firestore.md +44 -0
  395. package/skills/mobile-firebase/references/android/functions.md +33 -0
  396. package/skills/mobile-firebase/references/android/in-app-messaging.md +28 -0
  397. package/skills/mobile-firebase/references/android/messaging.md +41 -0
  398. package/skills/mobile-firebase/references/android/realtime-database.md +50 -0
  399. package/skills/mobile-firebase/references/android/remote-config.md +43 -0
  400. package/skills/mobile-firebase/references/android/sql-connect.md +31 -0
  401. package/skills/mobile-firebase/references/android/storage.md +39 -0
  402. package/skills/mobile-firebase/references/android.md +30 -0
  403. package/skills/{firebase-ai/SKILL.md → mobile-firebase/references/flutter/ai-logic.md} +2 -8
  404. package/skills/{firebase-analytics/SKILL.md → mobile-firebase/references/flutter/analytics.md} +2 -8
  405. package/skills/{firebase-app-check/SKILL.md → mobile-firebase/references/flutter/app-check.md} +2 -8
  406. package/skills/{firebase-auth/SKILL.md → mobile-firebase/references/flutter/auth.md} +2 -8
  407. package/skills/{firebase-crashlytics/SKILL.md → mobile-firebase/references/flutter/crashlytics.md} +2 -8
  408. package/skills/{firebase-cloud-firestore/SKILL.md → mobile-firebase/references/flutter/firestore.md} +2 -8
  409. package/skills/{firebase-cloud-functions/SKILL.md → mobile-firebase/references/flutter/functions.md} +2 -8
  410. package/skills/{firebase-in-app-messaging/SKILL.md → mobile-firebase/references/flutter/in-app-messaging.md} +2 -8
  411. package/skills/{firebase-messaging/SKILL.md → mobile-firebase/references/flutter/messaging.md} +2 -8
  412. package/skills/{firebase-database/SKILL.md → mobile-firebase/references/flutter/realtime-database.md} +2 -8
  413. package/skills/{firebase-remote-config/SKILL.md → mobile-firebase/references/flutter/remote-config.md} +2 -8
  414. package/skills/{flutterfire-configure/SKILL.md → mobile-firebase/references/flutter/setup-flutterfire.md} +1 -8
  415. package/skills/{firebase-data-connect/SKILL.md → mobile-firebase/references/flutter/sql-connect.md} +2 -8
  416. package/skills/{firebase-storage/SKILL.md → mobile-firebase/references/flutter/storage.md} +2 -8
  417. package/skills/mobile-firebase/references/flutter.md +36 -0
  418. package/skills/mobile-firebase/references/ios/ai-logic.md +30 -0
  419. package/skills/mobile-firebase/references/ios/analytics.md +33 -0
  420. package/skills/mobile-firebase/references/ios/app-check.md +36 -0
  421. package/skills/mobile-firebase/references/ios/auth.md +48 -0
  422. package/skills/mobile-firebase/references/ios/crashlytics.md +34 -0
  423. package/skills/mobile-firebase/references/ios/firestore.md +53 -0
  424. package/skills/mobile-firebase/references/ios/functions.md +35 -0
  425. package/skills/mobile-firebase/references/ios/in-app-messaging.md +26 -0
  426. package/skills/mobile-firebase/references/ios/messaging.md +45 -0
  427. package/skills/mobile-firebase/references/ios/realtime-database.md +49 -0
  428. package/skills/mobile-firebase/references/ios/remote-config.md +44 -0
  429. package/skills/mobile-firebase/references/ios/sql-connect.md +33 -0
  430. package/skills/mobile-firebase/references/ios/storage.md +36 -0
  431. package/skills/mobile-firebase/references/ios.md +28 -0
  432. package/skills/mobile-firebase/references/react-native/ai-logic.md +32 -0
  433. package/skills/mobile-firebase/references/react-native/analytics.md +43 -0
  434. package/skills/mobile-firebase/references/react-native/app-check.md +35 -0
  435. package/skills/mobile-firebase/references/react-native/auth.md +50 -0
  436. package/skills/mobile-firebase/references/react-native/crashlytics.md +36 -0
  437. package/skills/mobile-firebase/references/react-native/firestore.md +45 -0
  438. package/skills/mobile-firebase/references/react-native/functions.md +28 -0
  439. package/skills/mobile-firebase/references/react-native/in-app-messaging.md +27 -0
  440. package/skills/mobile-firebase/references/react-native/messaging.md +46 -0
  441. package/skills/mobile-firebase/references/react-native/realtime-database.md +46 -0
  442. package/skills/mobile-firebase/references/react-native/remote-config.md +32 -0
  443. package/skills/mobile-firebase/references/react-native/sql-connect.md +11 -0
  444. package/skills/mobile-firebase/references/react-native/storage.md +30 -0
  445. package/skills/mobile-firebase/references/react-native.md +29 -0
  446. package/skills/mobile-test/SKILL.md +63 -0
  447. package/skills/mobile-test/references/android/setup/GUIDE.md +183 -0
  448. package/skills/mobile-test/references/android/setup/references/android/develop/ui/compose/testing/common-patterns.md +181 -0
  449. package/skills/mobile-test/references/android/setup/references/android/studio/preview/compose-screenshot-testing.md +255 -0
  450. package/skills/mobile-test/references/android/setup/references/android/training/dependency-injection/hilt-testing.md +447 -0
  451. package/skills/mobile-test/references/android.md +83 -0
  452. package/skills/{dart-collect-coverage/SKILL.md → mobile-test/references/flutter/coverage.md} +2 -11
  453. package/skills/{dart-generate-test-mocks/SKILL.md → mobile-test/references/flutter/generate-mocks.md} +2 -11
  454. package/skills/{flutter-add-integration-test/SKILL.md → mobile-test/references/flutter/integration-tests.md} +2 -11
  455. package/skills/{dart-migrate-to-checks-package/SKILL.md → mobile-test/references/flutter/migrate-to-checks.md} +2 -13
  456. package/skills/{mockito/SKILL.md → mobile-test/references/flutter/mockito.md} +1 -8
  457. package/skills/{mocktail/SKILL.md → mobile-test/references/flutter/mocktail.md} +1 -8
  458. package/skills/{patrol-e2e-testing/SKILL.md → mobile-test/references/flutter/patrol.md} +1 -8
  459. package/skills/{testing/SKILL.md → mobile-test/references/flutter/testing-guidelines.md} +1 -8
  460. package/skills/{dart-add-unit-test/SKILL.md → mobile-test/references/flutter/unit-tests.md} +2 -11
  461. package/skills/{flutter-add-widget-test/SKILL.md → mobile-test/references/flutter/widget-tests.md} +2 -11
  462. package/skills/mobile-test/references/flutter.md +44 -0
  463. package/skills/mobile-test/references/ios.md +79 -0
  464. package/skills/mobile-test/references/react-native.md +62 -0
  465. /package/skills/{dart-use-pattern-matching → flutter-dart-use-pattern-matching}/examples/json_patterns.dart +0 -0
@@ -0,0 +1,212 @@
1
+ {{#IF_ANY data_sources, disclosure}}
2
+ {{ACTIVATE_GOAL}}
3
+ {{/IF_ANY}}
4
+ ## Data Safety and Privacy Audit
5
+
6
+ ### Policies to Verify
7
+
8
+ - **The Policy Spirit**: Users deserve complete transparency regarding what
9
+ personal or sensitive information leaves their devices. Under Play Store
10
+ rules, any off-device transmission of user data must be explicitly declared in
11
+ the Play Store Data Safety form, and sensitive or non-obvious data collection
12
+ requires prior prominent in-app disclosure and affirmative user consent.
13
+
14
+ - **Common Evaluation Matrix**:
15
+ | Case | Technical Observation | `user_initiated` | `is_third_party` | Disclosure Status | Severity | Issue Summary |
16
+ | :--- | :--- | :--- | :--- | :--- | :--- | :--- |
17
+ | **1** | **Not Transferred** (Local only) | N/A | N/A | `EXEMPT` | `SUGGESTION` | "Data Safety Compliant (Local-Only)" |
18
+ | **2A** | **Transferred** + **Background** + **No Disclosure** | `false` | (Any) | `MISSING` | `CRITICAL` | "**Silent Background Transfer**": Policy violation. Data is sent without prior disclosure. |
19
+ | **2B** | **Transferred** + **Background** + **Disclosure Found** | `false` | (Any) | `DISCLOSED` | `IMPORTANT` | "**Background Transfer (Disclosure Claimed)**": Evidence found; requires Critic verification. |
20
+ | **3** | **Transferred** + **User-Initiated** + **First Party** | `true` | `false` | `EXEMPT` | `IMPORTANT` | "**User-Initiated Collection**": Disclosure exempt, but **must be declared** in Play Store form. |
21
+ | **4** | **Transferred** + **User-Initiated** + **Third Party** | `true` | `true` | `EXEMPT` | `SUGGESTION` | "**Manual Sharing**": **Policy Exempt**. User triggers transfer to 3P; no disclosure or declaration needed. |
22
+
23
+ - **Exemptions Reference**:
24
+ - **Anonymous Data**: Fully anonymized data not linked to a user is exempt.
25
+ - **End-to-End Encryption (E2EE)**: Data E2EE where the developer cannot read
26
+ it is exempt.
27
+ - **Open Web WebView**: Data entered into a WebView navigating the open web is
28
+ exempt.
29
+ - *If any of these apply, downgrade severity to `SUGGESTION` and mark
30
+ `EXEMPT`.*
31
+
32
+ ---
33
+
34
+ ### The Audit Protocol
35
+
36
+ #### Step 0: Facts orientation
37
+
38
+ - **Identify Third-Party SDKs**: If you observe network, crash-reporting, or
39
+ tracking telemetry, check the project's build files (e.g., build.gradle,
40
+ build.gradle.kts, libs.versions.toml) on-demand using your file-reading tools
41
+ to verify which SDKs (Analytics, Ads, etc.) are integrated.
42
+ - **Understand Off-Device Sinks**: Use your native knowledge of standard Android
43
+ framework components to identify transmission destinations. Focus on active
44
+ egress vectors such as standard HTTP/REST libraries (e.g., OkHttp, Retrofit,
45
+ Ktor, HttpURLConnection), WebViews passing data off-device, background syncing
46
+ tasks, or analytic/telemetry frameworks (e.g., Firebase, Mixpanel, Adjust,
47
+ AppsFlyer).
48
+ - **Identify Disclosures**: Review `disclosure` below. Use these as starting
49
+ points for Step 2.
50
+
51
+ #### Step 1: Verify behavioral transmission (Forward Trace)
52
+
53
+ For each source in `data_sources` listed below, trace the technical signal from
54
+ the exact location provided to its transmission endpoint.
55
+ - **Mandatory Starting Point**: Navigate to the file and line number specified
56
+ in the `data_sources` list.
57
+ - **Loop Discipline**: You must analyze the transmission path for *every* piece
58
+ of evidence listed to verify if it reaches an off-device sink.
59
+ - **Evidence**: Provide the file/line where the data is passed to the sink and a
60
+ brief justification of the sink's known transmission behavior (e.g., network
61
+ upload, telemetry payload).
62
+ - **Semantic Grounding**: Use the provided `*Description*` to verify that the
63
+ code evidence actually matches the semantic scope of the data type. If the
64
+ variable or logic refers to unrelated data (e.g., a `fileName` that does not
65
+ identify a user `NAME`), treat it as a false positive and follow the
66
+ **Evidentiary Standard** to downgrade or prune the finding.
67
+ - **Sink Categorization**: Determine the destination:
68
+ 1. **First Party / Service Provider (`is_third_party: false`)**:
69
+ Developer-controlled servers, Firebase, custom APIs, etc.
70
+ 2. **Third Party (`is_third_party: true`)**: Social SDKs, ad networks, or
71
+ user-selected apps via Android Share Sheet (`Intent.ACTION_SEND`).
72
+ - **Ambiguity Mandate**: If the destination is ambiguous (e.g., generic URL or
73
+ obfuscated SDK), you MUST default to `is_third_party: false` (erring on the
74
+ side of Collection).
75
+ - **On-Device Transfer**: Treat silent data sharing to another app via
76
+ Intents/ContentProviders as a transfer (`is_transferred: true`), even if it
77
+ doesn't use the network.
78
+
79
+ #### Step 2: Semantic Search for Protection (UI Disclosure)
80
+
81
+ **Conditional Execution**: Execute this step **ONLY IF** `is_transferred` is
82
+ `true` AND `user_initiated` is `false`.
83
+ - **Rationale**: User-initiated actions (Case 3 and 4) are exempt from Prominent
84
+ Disclosure. Do not search for disclosures if `user_initiated` is true.
85
+ - **Semantic Search**: Review the `disclosure` list below.
86
+ - **Gatekeeper Check**: Check if the Activity/Fragment displaying that consent
87
+ acts as a gatekeeper (i.e., gates the initialization of the data-collection
88
+ logic). Do not attempt to trace backwards from a low-level repository up to
89
+ the UI.
90
+ - **Content Check**: The UI must state *what* is collected and *how* it is used.
91
+ - **Evidence**: Provide the file/layout name and the specific text found.
92
+
93
+ #### Step 3: Synthesis
94
+
95
+ - **`findings` (CRITICAL)**: You must construct and output exactly **one**
96
+ object inside the `"findings"` array for **every** data type found in the
97
+ `data_sources` list below, regardless of whether it is compliant or a
98
+ violation.
99
+ - **Evaluating Keys**: For each data type object in `"findings"`, evaluate and
100
+ populate:
101
+ 1. **psl_constant**: Set this exactly to the uppercase **PSL Constant** of
102
+ the data type (listed as the **Data Type** heading in the **Data Sources to
103
+ Trace** section below, e.g., `"PRECISE_LOCATION"`, `"CONTACTS"`). This is
104
+ critical for downstream matching.
105
+ 2. **policy_id**: Set this exactly to either `"prominent_disclosure_policy"`
106
+ or `"data_safety_section"` depending on the check being performed.
107
+ 3. **is_transferred**: `true` (JSON Boolean) if the data is transferred
108
+ off-device or on-device to a third party. `false` (JSON Boolean) if local
109
+ only.
110
+ 4. **user_initiated**: `true` (JSON Boolean) if the user explicitly triggers
111
+ the transfer.
112
+ 5. **is_third_party**: `true` (JSON Boolean) if the destination is a Third
113
+ Party (e.g., Share Sheet, Social SDK). `false` (JSON Boolean) if it's a
114
+ First Party/Service Provider (e.g., your own backend).
115
+ 6. **prominent_disclosure_status**: Set strictly to one of these three
116
+ uppercase enums: `"DISCLOSED"` (visible disclosure and user consent found),
117
+ `"MISSING"` (no disclosure found, or is not an affirmative gatekeeper), or
118
+ `"EXEMPT"` (exempt from prominent disclosure under policies).
119
+ 7. **purpose**: Categorize why the data is being collected (e.g., "App
120
+ functionality", "Analytics", "Local functionality only").
121
+ 8. **linked_to_user**: `true` (JSON Boolean) if the data is tied to an
122
+ identity, email, or device ID, otherwise `false` (JSON Boolean).
123
+
124
+ - **Map findings strictly to the 5 Cases:** Use the Case matrix in "Policies to
125
+ Verify" to set the appropriate `severity` and `issue_summary` based on the
126
+ combination of `is_transferred`, `user_initiated`, `is_third_party`, and
127
+ `prominent_disclosure_status`.
128
+
129
+ ---
130
+
131
+ ### Domain-Specific Heuristics
132
+
133
+ Apply the following heuristics while strictly adhering to the Heuristics &
134
+ Extrapolation Boundaries defined in your Execution Mandates:
135
+ 1. **Implicit Data Leaks (The Logger Loop)**: Inspect if any custom logging
136
+ frameworks (e.g., Crashlytics, custom error loggers, or telemetry SDKs)
137
+ receive sensitive variables as part of diagnostic payloads. If a user
138
+ identifier (e.g., email, account ID) or precise location is passed to a
139
+ logger that uploads payloads off-device, this counts as **transferred**
140
+ (`is_transferred`: true).
141
+ 2. **Third-Party SDK Siphoning**: Look at the project's build files on-demand
142
+ (e.g., build.gradle or libs.versions.toml). If SDKs like Google Ads, or
143
+ Firebase are initialized and have access to the context, evaluate if
144
+ they are siphoning advertiser IDs or device identifiers automatically. If
145
+ those libraries are loaded and the manifest requests broad network
146
+ permissions, treat those device identifiers as **transferred**
147
+ (`is_transferred`: true) for analytics/marketing purposes.
148
+ 3. **Indirect Consent**: If you find an `AlertDialog` or disclosure, verify if
149
+ it is an actual gatekeeper. If the app begins tracking user data *prior* to
150
+ the user tapping "Accept", or if the user can close the dialog and continue
151
+ using the app while data tracking remains active, flag this as a `CRITICAL`
152
+ violation under `prominent_disclosure_policy`.
153
+
154
+ ---
155
+
156
+ ### Codebase Context & Evidence
157
+
158
+ {{#IF semantic_files.LEGAL}}
159
+ **Semantic Triage Starting Points (Files of Interest)**:
160
+ The following files likely contain privacy or consent logic:
161
+ - **LEGAL** related:
162
+ {{#EACH semantic_files.LEGAL}}
163
+ - `{{ITEM}}`
164
+ {{/EACH}}
165
+ {{/IF}}
166
+
167
+ {{#IF data_sources}}
168
+ **Data Sources to Trace**:
169
+ {{#EACH data_sources}}
170
+ - **Data Type**: {{KEY}}
171
+ *Description: {{VALUE.description}}*
172
+ {{#EACH VALUE.findings}}
173
+ - `{{ITEM}}`
174
+ {{/EACH}}
175
+ {{/EACH}}
176
+ {{/IF}}
177
+
178
+ {{#IF disclosure}}
179
+ **UI Disclosure Starting Points**:
180
+ {{#EACH disclosure}}
181
+ - `{{ITEM}}`
182
+ {{/EACH}}
183
+ {{/IF}}
184
+
185
+ ## Output schema
186
+
187
+ Save final JSON output to `{{TEMP_DIR}}/worker_{{GOAL_NAME}}.json`.
188
+
189
+ ```json
190
+ {
191
+ "domain": "Data Safety and Privacy",
192
+ "findings": [
193
+ {
194
+ "psl_constant": "STRING_VALUE (The exact PSL Constant, e.g., USER_ACCOUNT)",
195
+ "policy_id": "prominent_disclosure_policy | data_safety_section",
196
+ "issue_summary": "STRING_VALUE",
197
+ "severity": "CRITICAL | IMPORTANT | SUGGESTION",
198
+ "files_involved": ["STRING_VALUE"],
199
+ "evidence": "STRING_VALUE",
200
+ "recommendation": "STRING_VALUE",
201
+
202
+ # UNIFIED DATA SAFETY METADATA LOOKUP KEYS:
203
+ "is_transferred": true | false,
204
+ "user_initiated": true | false,
205
+ "is_third_party": true | false,
206
+ "prominent_disclosure_status": "DISCLOSED | MISSING | EXEMPT",
207
+ "purpose": "STRING_VALUE",
208
+ "linked_to_user": true | false
209
+ }
210
+ ]
211
+ }
212
+ ```
@@ -0,0 +1,459 @@
1
+ {{#IF_ALL requested_permissions.exact_alarm, exact_alarm}}{{ACTIVATE_GOAL}}{{/IF_ALL}}
2
+ {{#IF_ALL requested_permissions.foreground_service, foreground_service}}{{ACTIVATE_GOAL}}{{/IF_ALL}}
3
+ {{#IF_ALL requested_permissions.accessibility, accessibility}}{{ACTIVATE_GOAL}}{{/IF_ALL}}
4
+ {{#IF_ALL requested_permissions.APPS_ON_DEVICE, data_sources.APPS_ON_DEVICE}}{{ACTIVATE_GOAL}}{{/IF_ALL}}
5
+ {{#IF_ALL requested_permissions.SMS_CALL_LOG, data_sources.SMS_CALL_LOG}}{{ACTIVATE_GOAL}}{{/IF_ALL}}
6
+ {{#IF_ALL requested_permissions.MEDIA, data_sources.MEDIA}}{{ACTIVATE_GOAL}}{{/IF_ALL}}
7
+ {{#IF_ALL requested_permissions.AUDIO, data_sources.AUDIO}}{{ACTIVATE_GOAL}}{{/IF_ALL}}
8
+ {{#IF_ALL requested_permissions.ALL_FILES, data_sources.FILES_AND_DOCS}}{{ACTIVATE_GOAL}}{{/IF_ALL}}
9
+ {{#IF_ALL requested_permissions.LOCATION, data_sources.PRECISE_LOCATION}}{{ACTIVATE_GOAL}}{{/IF_ALL}}
10
+ {{#IF_ALL requested_permissions.LOCATION, data_sources.APPROX_LOCATION}}{{ACTIVATE_GOAL}}{{/IF_ALL}}
11
+ {{#IF_ALL requested_permissions.CONTACTS, data_sources.CONTACTS}}{{ACTIVATE_GOAL}}{{/IF_ALL}}
12
+
13
+ ## Permissions and APIs Audit
14
+
15
+ ### Hint: Deducing Core Functionality
16
+
17
+ Since you must determine if certain permissions are justified by the app's "core
18
+ purpose", use these fast heuristics:
19
+ 1. **The "Broken" Test**: Is the feature essential to the app's primary purpose?
20
+ If the app would still be functional and useful without the feature, it is
21
+ NOT core functionality.
22
+ 2. **Manifest Intent**: Review `AndroidManifest.xml`. The name of the `LAUNCHER`
23
+ Activity and specialized `<intent-filter>` declarations (like default SMS
24
+ handlers) strongly indicate the app's main purpose.
25
+ 3. **Naming**: The package name (`{{PACKAGE_NAME}}`) and app label
26
+ (`{{APP_NAME}}`) often describe the app's purpose explicitly.
27
+ 4. **Execution Context**: Usage in classes like `BackupManager` suggest core
28
+ functionality, whereas usage in `AdHelper`, `CrashReporter`, or
29
+ `AnalyticsManager` indicates secondary features.
30
+ 5. **Mandatory Rule**: Secondary features like **advertising, analytics, or
31
+ social sharing never justify** restricted permissions like Background
32
+ Location, All Files Access, or Broad Media Access.
33
+
34
+ ---
35
+
36
+ ### Policies to Verify
37
+
38
+ {{#IF_ALL requested_permissions.MEDIA, data_sources.MEDIA}}
39
+ #### Photo and Video Access Policy (Policy ID: photo_video_access_policy)
40
+
41
+ - **Goal**: Evaluate if the app's core functionality justifies broad access to
42
+ photos or if it should migrate to the Android Photo Picker.
43
+ - **The Policy Spirit**: User privacy is paramount. Apps should only request
44
+ broad media storage permissions if they are dedicated media managers (like
45
+ Gallery or Backup apps). For standard tasks like profile picture uploads,
46
+ custom sharing, or attaching media, developers must use scoped APIs to prevent
47
+ security risks.
48
+ - **Evidence**:
49
+ {{#EACH data_sources.MEDIA}}
50
+ - `{{ITEM}}`
51
+ {{/EACH}}
52
+ **Relevant Permissions Requested**:
53
+ {{#EACH requested_permissions.MEDIA}}
54
+ - `{{ITEM}}`
55
+ {{/EACH}}
56
+ {{#IF TARGET_SDK}}
57
+ **Target SDK**: `{{TARGET_SDK}}`
58
+ {{/IF}}
59
+ - **Common Evaluation Matrix**:
60
+ | Target SDK | Broad Media Permission Requested? | Condition / Context Checked | Severity | Direct Actionable Recommendation |
61
+ | :--- | :--- | :--- | :--- | :--- |
62
+ | **33 or higher** | Yes | App requests broad media access (e.g. `READ_MEDIA_IMAGES`), but features only require user-selected media. | `IMPORTANT` | Migrate to the **Android Photo Picker** (`MediaStore.ACTION_PICK_IMAGES`) which does not require any permission prompt. |
63
+ | **Any** | Yes | App requests broad storage/media permissions but is not a dedicated media manager (e.g., a social or utility app). | `IMPORTANT` | Migrate to the **Android Photo Picker** for single-item or multi-item media selection. |
64
+
65
+ - **Domain-Specific Heuristics (Strictly Bounded)**:
66
+ Look beyond standard native file pickers. Extrapolate using this heuristic:
67
+ 1. **User-Selected Media Heuristic**: Analyze where the code handles selected
68
+ files. If images or videos are loaded strictly via a user-facing button
69
+ click (e.g., "Upload Avatar", "Share Photo", "Attach File") and processed
70
+ one-at-a-time, broad filesystem media permissions are structurally
71
+ unnecessary. Flag an `IMPORTANT` violation and recommend Photo Picker
72
+ migration.
73
+ {{/IF_ALL}}
74
+
75
+ {{#IF_ALL requested_permissions.ALL_FILES, data_sources.FILES_AND_DOCS}}
76
+ #### All Files Access Policy (Policy ID: all_files_access_policy)
77
+
78
+ - **Goal**: Evaluate if the app's core purpose justifies the high-risk
79
+ `MANAGE_EXTERNAL_STORAGE` permission.
80
+ - **The Policy Spirit**: Full filesystem access is a restricted privilege. The
81
+ Play Store strictly limits `MANAGE_EXTERNAL_STORAGE` to apps where full disk
82
+ reads/writes are critical to the core purpose (e.g., file managers, antivirus
83
+ scanner, backup tools). Non-compliant apps must utilize Scoped Storage or
84
+ Storage Access Framework (SAF).
85
+ - **Evidence**:
86
+ {{#EACH data_sources.FILES_AND_DOCS}}
87
+ - `{{ITEM}}`
88
+ {{/EACH}}
89
+ **Relevant Permissions Requested**:
90
+ {{#EACH requested_permissions.ALL_FILES}}
91
+ - `{{ITEM}}`
92
+ {{/EACH}}
93
+ - **Common Evaluation Matrix**:
94
+ | Core App Purpose | Is Permission Justified? | Severity | Direct Actionable Recommendation |
95
+ | :--- | :--- | :--- | :--- |
96
+ | **File Manager, Antivirus, Backup/Restore, or Document Manager** | Yes (Compliant) | None | No action needed; core purpose justifies the restricted permission. |
97
+ | **Standard Utility, Social Media, Game, or Productivity App** | No (Violation) | `CRITICAL` | Remove `MANAGE_EXTERNAL_STORAGE` from the Manifest. For document picking or local file saving, migrate to the **Storage Access Framework (SAF)**. |
98
+
99
+ - **Domain-Specific Heuristics (Strictly Bounded)**:
100
+ Surgically audit how the filesystem is queried:
101
+ 1. **Scoped Storage Sufficiency**: Check the files using the storage APIs. If
102
+ the app is using filesystem pathways solely to log diagnostics, store
103
+ custom caches, or save simple download artifacts, broad access is not
104
+ justified. Recommend using app-specific directories
105
+ (`Context.getExternalFilesDir()`) which require zero permissions.
106
+ {{/IF_ALL}}
107
+
108
+ {{#IF requested_permissions.LOCATION}}
109
+ {{#IF_ANY data_sources.PRECISE_LOCATION, data_sources.APPROX_LOCATION}}
110
+ #### Location Access Policy (Policy ID: location_access_policy)
111
+
112
+ - **Goal**: Verify that location access is essential, uses minimum scope, and is
113
+ properly disclosed.
114
+ - **The Policy Spirit**: User tracking is extremely sensitive. Apps must collect
115
+ the minimum scope of location required (approximate vs precise), provide clear
116
+ prominent disclosures, and must never utilize background tracking unless it is
117
+ essential for safety, navigation, or physical fitness features.
118
+ - **Evidence**:
119
+ {{#IF data_sources.PRECISE_LOCATION}}
120
+ - **Precise Location usage**:
121
+ {{#EACH data_sources.PRECISE_LOCATION}}
122
+ - `{{ITEM}}`
123
+ {{/EACH}}
124
+ {{/IF}}
125
+ {{#IF data_sources.APPROX_LOCATION}}
126
+ - **Approximate Location usage**:
127
+ {{#EACH data_sources.APPROX_LOCATION}}
128
+ - `{{ITEM}}`
129
+ {{/EACH}}
130
+ {{/IF}}
131
+ **Relevant Permissions Requested**:
132
+ {{#EACH requested_permissions.LOCATION}}
133
+ - `{{ITEM}}`
134
+ {{/EACH}}
135
+ {{#IF TARGET_SDK}}
136
+ **Target SDK**: `{{TARGET_SDK}}`
137
+ {{/IF}}
138
+ - **Common Evaluation Matrix**:
139
+ | Scope | Target SDK | Finding / Condition Checked | Severity | Direct Actionable Recommendation |
140
+ | :--- | :--- | :--- | :--- | :--- |
141
+ | **Foreground** | Any | Requests `ACCESS_FINE_LOCATION` but features only require city-level or approximate weather/search features. | `IMPORTANT` | Downgrade Manifest to `ACCESS_COARSE_LOCATION` to respect the minimum scope mandate. |
142
+ | **Foreground** | Any | App purpose (`{{APP_NAME}}`) does not imply location, yet foreground tracking is used, and prominent disclosure alert code is missing. | `IMPORTANT` | Implement a **Prominent In-App Disclosure** dialog explaining what location data is collected *before* requesting foreground permission. |
143
+ | **Background** | Any | Requests `ACCESS_BACKGROUND_LOCATION` solely for advertising, marketing, or general analytics. | `CRITICAL` | **High-Risk Violation**: Completely remove background location collection from the codebase. |
144
+ | **Background** | Any | Requests background location, but features could operate with foreground location access. | `IMPORTANT` | Downgrade the feature to foreground-only location tracking and remove background permission. |
145
+ | **Background** | Any | Background location is legitimate, but prominent disclosure does not mention "location" and "when the app is closed or not in use." | `IMPORTANT` | Update the Prominent Disclosure text to explicitly state "location" and "when closed or not in use". |
146
+ | **Foreground** | **37 or higher** | Precise location is requested on Android 17+. | `SUGGESTION` | Migrate to the **Location Button** API as the minimum scope mechanism for precise foreground location. |
147
+
148
+ - **Domain-Specific Heuristics (Strictly Bounded)**:
149
+ Actively trace custom background workers and disclosures:
150
+ 1. **The Foreground Sufficiency Test**: Analyze background threads,
151
+ `WorkManager` tasks, or background services triggering location updates. If
152
+ the background process performs syncing or location calculations that could
153
+ be deferred to when the user is actively viewing the app, flag an
154
+ `IMPORTANT` violation.
155
+ 2. **The Reasonable Expectation Test**: If the app label (`{{APP_NAME}}`) or
156
+ packages suggest a utility that shouldn't logically track location,
157
+ evaluate any indirect geo-tracking (such as geo-lookup of network IP
158
+ addresses, or sending local Wi-Fi SSID logs off-device). If found, flag an
159
+ `IMPORTANT` missing prominent disclosure.
160
+ {{/IF_ANY}}
161
+ {{/IF}}
162
+
163
+ {{#IF_ALL requested_permissions.CONTACTS, data_sources.CONTACTS}}
164
+ #### Contacts Access Policy (Policy ID: contacts_access_policy)
165
+
166
+ - **Goal**: Evaluate if broad contacts access (`READ_CONTACTS`) is justified or
167
+ if the Android Contact Picker should be used.
168
+ - **The Policy Spirit**: Address books contain sensitive personal details. The
169
+ Play Store mandates that apps use scoped contact access unless broad,
170
+ continuous contacts synchronization is critical (such as in social network
171
+ friend-matching or full contact managers).
172
+ - **Evidence**:
173
+ {{#EACH data_sources.CONTACTS}}
174
+ - `{{ITEM}}`
175
+ {{/EACH}}
176
+ **Relevant Permissions Requested**:
177
+ {{#EACH requested_permissions.CONTACTS}}
178
+ - `{{ITEM}}`
179
+ {{/EACH}}
180
+ {{#IF TARGET_SDK}}
181
+ **Target SDK**: `{{TARGET_SDK}}`
182
+ {{/IF}}
183
+ - **Common Evaluation Matrix**:
184
+ | Target SDK | Access Model | Condition / Finding Checked | Severity | Direct Actionable Recommendation |
185
+ | :--- | :--- | :--- | :--- | :--- |
186
+ | **Any** | Broad (`READ_CONTACTS`) | Broad access is requested for one-time transactions, file sharing, referrals, or simple forms. | `IMPORTANT` | Migrate to the **Android Contact Picker** (`Intent.ACTION_PICK_CONTACTS`) to query contacts securely. |
187
+ | **37 or higher** | Broad (`READ_CONTACTS`) | Target SDK is 37+ (effective Oct 2026), and broad access is used for secondary or standard tasks. | `IMPORTANT` | Migrate to the **Android Contact Picker** as broad contacts access is restricted. |
188
+
189
+ - **Domain-Specific Heuristics (Strictly Bounded)**:
190
+ Evaluate the depth of contact queries:
191
+ 1. **Single-Item Verification**: Search for database cursors reading contact
192
+ tables (`ContactsContract.CommonDataKinds`). If the cursors are used solely
193
+ to let a user select a single friend, mobile phone number, or email
194
+ address, broad contacts access is a violation. Recommend Contact Picker.
195
+ {{/IF_ALL}}
196
+
197
+ {{#IF_ALL requested_permissions.exact_alarm, exact_alarm}}
198
+ #### Exact Alarm Policy (Policy ID: exact_alarm_policy)
199
+
200
+ - **Goal**: Evaluate if the app's core functionality justifies the
201
+ `USE_EXACT_ALARM` permission.
202
+ - **The Policy Spirit**: Exact alarms degrade system performance and battery
203
+ life. The Play Store strictly limits the high-risk `USE_EXACT_ALARM`
204
+ permission to alarm clocks, timers, and calendar apps where precise,
205
+ down-to-the-second timing is critical.
206
+ - **Evidence**:
207
+ {{#EACH exact_alarm}}
208
+ - `{{ITEM}}`
209
+ {{/EACH}}
210
+ **Relevant Permissions Requested**:
211
+ {{#EACH requested_permissions.exact_alarm}}
212
+ - `{{ITEM}}`
213
+ {{/EACH}}
214
+ - **Common Evaluation Matrix**:
215
+ | Core App Purpose | Permission Requested | Justified? | Severity | Direct Actionable Recommendation |
216
+ | :--- | :--- | :--- | :--- | :--- |
217
+ | **Alarm Clock, Timer, or Calendar App** | `USE_EXACT_ALARM` | Yes (Compliant) | None | No action needed. |
218
+ | **Standard Utility, Game, Sync, or Productivity App** | `USE_EXACT_ALARM` | No (Violation) | `IMPORTANT` | Switch to `SCHEDULE_EXACT_ALARM` which respects system battery constraints, or use standard `AlarmManager` inexact scheduling. |
219
+
220
+ - **Domain-Specific Heuristics (Strictly Bounded)**:
221
+ Examine alarm trigger targets:
222
+ 1. **Time-Insensitive Syncing**: Verify the files scheduling alarms. If alarms
223
+ are used to fetch network updates, clean cache files, trigger analytics
224
+ uploads, or post local daily notifications, exact timing is not justified.
225
+ Recommend using `WorkManager` for background tasks instead of
226
+ `AlarmManager`.
227
+ {{/IF_ALL}}
228
+
229
+ {{#IF_ALL requested_permissions.foreground_service, foreground_service}}
230
+ #### Foreground Services (Policy ID: foreground_services_policy)
231
+
232
+ - **Goal**: Verify the declaration and justification of foreground services.
233
+ - **The Policy Spirit**: Foreground services keep processes alive in the
234
+ background and must be highly visible to users. Every declared service must
235
+ have an appropriate `foregroundServiceType` defined in the Manifest, and
236
+ special types like `specialUse` require specific tag property justifications.
237
+ - **Evidence**:
238
+ {{#EACH foreground_service}}
239
+ - `{{ITEM}}`
240
+ {{/EACH}}
241
+ **Relevant Permissions Requested**:
242
+ {{#EACH requested_permissions.foreground_service}}
243
+ - `{{ITEM}}`
244
+ {{/EACH}}
245
+ {{#IF TARGET_SDK}}
246
+ **Target SDK**: `{{TARGET_SDK}}`
247
+ {{/IF}}
248
+ - **Common Evaluation Matrix**:
249
+ | Service Configuration | Justification Check | Severity | Direct Actionable Recommendation |
250
+ | :--- | :--- | :--- | :--- |
251
+ | **Missing type tag** | Foreground service is declared but lacks a `foregroundServiceType` attribute. | `CRITICAL` | Add the appropriate `android:foregroundServiceType` attribute to the service declaration in the Manifest. |
252
+ | **Lacks specialUse property** | Service type is `specialUse`, but Manifest lacks the required `<property android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE" ...>` tag. | `CRITICAL` | Add the `<property>` tag inside the service block with a valid subtype string. |
253
+ | **Type Misalignment** | Declared FGS type does not logically align with the app's core purpose. | `IMPORTANT` | Re-align FGS type to match app features, or migrate background operations to **WorkManager** if user-visible foreground presence is not justified. |
254
+ | **Declaration Reminder** | Foreground service is declared (even if type is correct). | `SUGGESTION` | **Play Console Declaration Required**: For apps targeting Android 14+, you must complete a Foreground Service declaration in the Play Console (App content section) for each type used, providing a functional description, user impact video, and a specific use case selection. |
255
+
256
+ - **Domain-Specific Heuristics (Strictly Bounded)**:
257
+ Critique specialUse justifications and service behavior:
258
+ 1. **Justification String Audit**: Read the text of the `<property>` tag for
259
+ `specialUse`. If the text contains weak, boilerplate, or placeholder
260
+ justifications (e.g., "requires background process for app to run"), flag
261
+ an `IMPORTANT` violation warning the developer that Google Play reviewers
262
+ will reject this service.
263
+ 2. **Notification Integrity**: Verify if the FGS implementation creates a
264
+ valid user-facing notification. If no `startForeground()` or notification
265
+ builder logic is associated with the service initiation, flag an
266
+ `IMPORTANT` violation.
267
+ 3. **Play Console Declaration Confirmation**: If any foreground service is
268
+ used, flag a `SUGGESTION` to remind the developer that a specialized
269
+ declaration form in the Play Console is mandatory, requiring a video
270
+ demonstration of the feature.
271
+ {{/IF_ALL}}
272
+
273
+ {{#IF_ALL requested_permissions.accessibility, accessibility}}
274
+ #### Accessibility API Policy (Policy ID: accessibility_api_policy)
275
+
276
+ - **Goal**: Verify the configuration and justification of Accessibility
277
+ Services.
278
+ - **The Policy Spirit**: Accessibility APIs provide deep system access to assist
279
+ users with disabilities. Using these APIs for non-accessibility tasks (like UI
280
+ automation, screen scraping, background monitoring, or ad blocking) is
281
+ strictly prohibited by Google Play and causes immediate app rejection.
282
+ - **Evidence**:
283
+ {{#EACH accessibility}}
284
+ - `{{ITEM}}`
285
+ {{/EACH}}
286
+ **Relevant Permissions Requested**:
287
+ {{#EACH requested_permissions.accessibility}}
288
+ - `{{ITEM}}`
289
+ {{/EACH}}
290
+ - **Common Evaluation Matrix**:
291
+ | Service Configuration | Real Code Usage | Justified? | Severity | Direct Actionable Recommendation |
292
+ | :--- | :--- | :--- | :--- | :--- |
293
+ | **`isAccessibilityTool="true"`** | Code performs screen scraping, ad blocking, or automated click routines for standard users. | No (Violation) | `CRITICAL` | **High Risk of Play Store Rejection**: Remove accessibility helper configs. Migrate UI automation to standard Android testing libraries. |
294
+ | **`isAccessibilityTool` false/missing** | Code implements an accessibility listener but is not a dedicated helper app. | No prominent disclosure | `CRITICAL` | **High Risk of Play Store Rejection**: Because you request accessibility permission for a standard utility, you MUST implement an in-app **Prominent Disclosure and Affirmative Consent screen** before asking the user to enable the service, otherwise your app will be rejected. |
295
+
296
+ - **Domain-Specific Heuristics (Strictly Bounded)**:
297
+ Trace the ingestion of accessibility events:
298
+ 1. **Telemetry Siphoning**: Scan the Accessibility Service methods
299
+ (`onAccessibilityEvent`). If the service captures on-screen text,
300
+ notifications, or keystrokes and routes them to local caches, shared
301
+ preferences, or off-device network logging endpoints, flag a `CRITICAL`
302
+ violation under the Accessibility API policy.
303
+ {{/IF_ALL}}
304
+
305
+ {{#IF_ALL requested_permissions.APPS_ON_DEVICE, data_sources.APPS_ON_DEVICE}}
306
+ #### Package Visibility (Policy ID: package_visibility_policy)
307
+
308
+ - **Goal**: Evaluate if the app's core functionality justifies broad visibility
309
+ into installed apps (`QUERY_ALL_PACKAGES` or related package APIs).
310
+ - **The Policy Spirit**: The list of installed apps reveals sensitive user
311
+ habits. The Play Store strictly restricts the `QUERY_ALL_PACKAGES` permission
312
+ to apps that directly manage device safety (Antivirus, File Managers, Device
313
+ Search).
314
+ - **Evidence**:
315
+ {{#EACH data_sources.APPS_ON_DEVICE}}
316
+ - `{{ITEM}}`
317
+ {{/EACH}}
318
+ **Relevant Permissions Requested**:
319
+ {{#EACH requested_permissions.APPS_ON_DEVICE}}
320
+ - `{{ITEM}}`
321
+ {{/EACH}}
322
+ - **Common Evaluation Matrix**:
323
+ | Core App Purpose | Permission Requested | Justified? | Severity | Direct Actionable Recommendation |
324
+ | :--- | :--- | :--- | :--- | :--- |
325
+ | **Antivirus, File Manager, or Device Search** | `QUERY_ALL_PACKAGES` | Yes (Compliant) | None | No action needed. |
326
+ | **Any App** | `QUERY_ALL_PACKAGES` | No, used for ads, analytics, or secondary marketing. | `IMPORTANT` | **High-Risk Violation**: Remove the permission from the Manifest. Use specific `<queries>` intent declarations if package checks are strictly required for sharing/integration. |
327
+
328
+ - **Domain-Specific Heuristics (Strictly Bounded)**:
329
+ Examine indirect queries:
330
+ 1. **Indirect Package Searching**: Check if the code queries package details
331
+ dynamically using `PackageManager.getInstalledPackages()` or checks intents
332
+ in loops. If the intent lists are used to deduce if competitor apps or
333
+ advertising profiles exist, flag an `IMPORTANT` violation of package
334
+ visibility guidelines.
335
+ {{/IF_ALL}}
336
+
337
+ {{#IF_ALL requested_permissions.SMS_CALL_LOG, data_sources.SMS_CALL_LOG}}
338
+ #### SMS and Call Log Permissions (Policy ID: sms_call_log_policy)
339
+
340
+ - **Goal**: Evaluate if the app's core functionality justifies access to
341
+ sensitive SMS or Call Log data.
342
+ - **The Policy Spirit**: SMS and Call details are high-risk. Google Play
343
+ restricts access to default phone handlers and default SMS handlers. Standard
344
+ utility or shopping apps must use non-privileged APIs for SMS-based
345
+ verification.
346
+ - **Evidence**:
347
+ {{#EACH data_sources.SMS_CALL_LOG}}
348
+ - `{{ITEM}}`
349
+ {{/EACH}}
350
+ **Relevant Permissions Requested**:
351
+ {{#EACH requested_permissions.SMS_CALL_LOG}}
352
+ - `{{ITEM}}`
353
+ {{/EACH}}
354
+ - **Common Evaluation Matrix**:
355
+ | Code Context | Finding / Trigger Checked | Severity | Direct Actionable Recommendation |
356
+ | :--- | :--- | :--- | :--- |
357
+ | **OTP/Account Verification** | App requests SMS permissions to automatically read login verification codes (OTPs). | `IMPORTANT` | Migrate to the **SMS Retriever API** or **SMS User Consent API** which require zero permissions. |
358
+ | **Utility or Secondary Feature** | App requests SMS/Call log access for non-core dashboard or notification features. | `CRITICAL` | **High-Risk Violation**: Completely remove SMS and Call Log permissions from the Manifest. |
359
+ | **Default SMS Handler** | App appears to be a legitimate handler (e.g. implements required intent filters). | `SUGGESTION` | **Play Console Declaration**: You must submit a **Permissions Declaration Form** in the Play Console and may be required to provide a video demonstration of this core functionality. |
360
+
361
+ - **Domain-Specific Heuristics (Strictly Bounded)**:
362
+ Audit background receivers:
363
+ 1. **Background Incoming SMS Listeners**: Check if a `BroadcastReceiver`
364
+ listens to `android.provider.Telephony.SMS_RECEIVED`. If this receiver
365
+ parses text in the background without being a designated default SMS
366
+ handler, flag a `CRITICAL` violation.
367
+ 2. **Default Handler Confirmation**: If the app requests SMS/Call Log
368
+ permissions and correctly implements the system-mandated intent filters for
369
+ a Default Handler, flag a `SUGGESTION` to remind the developer about the
370
+ mandatory Play Console declaration form.
371
+ {{/IF_ALL}}
372
+
373
+ {{#IF_ALL requested_permissions.AUDIO, data_sources.AUDIO}}
374
+ #### Audio Recording Policy (Policy ID: audio_recording_policy)
375
+
376
+ - **Goal**: Evaluate if the app's core functionality justifies broad access to
377
+ audio recording.
378
+ - **The Policy Spirit**: Unprompted audio recording is a severe privacy breach.
379
+ Apps should request microphone access strictly for user-visible, time-bounded
380
+ actions. Target SDK 34+ encourages using the system-managed Microphone Button
381
+ for temporary needs.
382
+ - **Evidence**:
383
+ {{#EACH data_sources.AUDIO}}
384
+ - `{{ITEM}}`
385
+ {{/EACH}}
386
+ **Relevant Permissions Requested**:
387
+ {{#EACH requested_permissions.AUDIO}}
388
+ - `{{ITEM}}`
389
+ {{/EACH}}
390
+ {{#IF TARGET_SDK}}
391
+ **Target SDK**: `{{TARGET_SDK}}`
392
+ {{/IF}}
393
+ - **Common Evaluation Matrix**:
394
+ | Target SDK | Audio Recording Trigger Context | Severity | Direct Actionable Recommendation |
395
+ | :--- | :--- | :--- | :--- |
396
+ | **34 or higher** | App requests broad `RECORD_AUDIO` permission for occasional, user-initiated vocal input or short recording. | `IMPORTANT` | Migrate to the **Android Microphone Button** API to process temporary audio securely. |
397
+ | **Any** | App captures audio for secondary features (analytics, user-agent details, etc.) without explicit user control. | `IMPORTANT` | Remove microphone permissions. For general searches, integrate standard Android Speech Recognizer intents. |
398
+
399
+ - **Domain-Specific Heuristics (Strictly Bounded)**:
400
+ Verify recording indicators and threads:
401
+ 1. **Continuous Capture**: Scan for active recorder threads (`AudioRecord` or
402
+ `MediaRecorder`). If recording loops can be active when the app is
403
+ minimized or without a visible user-facing indicator, flag this as a
404
+ `CRITICAL` violation.
405
+ {{/IF_ALL}}
406
+
407
+ {{#IF_ALL requested_permissions.FILES_AND_DOCS, data_sources.FILES_AND_DOCS}}
408
+ #### Files and Docs Access Policy (Policy ID: files_and_docs_policy)
409
+
410
+ - **Goal**: Evaluate if broad file access (non-media) is justified or if the
411
+ Storage Access Framework should be used.
412
+ - **The Policy Spirit**: Storage isolation (Scoped Storage) is mandatory on
413
+ modern Android versions. Broad access to shared files is heavily restricted.
414
+ Standard files, documents, and download folders should be navigated using
415
+ scoped contracts to prevent global filesystem snooping.
416
+ - **Evidence**:
417
+ {{#EACH data_sources.FILES_AND_DOCS}}
418
+ - `{{ITEM}}`
419
+ {{/EACH}}
420
+ **Relevant Permissions Requested**:
421
+ {{#EACH requested_permissions.FILES_AND_DOCS}}
422
+ - `{{ITEM}}`
423
+ {{/EACH}}
424
+ {{#IF TARGET_SDK}}
425
+ **Target SDK**: `{{TARGET_SDK}}`
426
+ {{/IF}}
427
+ - **Common Evaluation Matrix**:
428
+ | Target SDK | Storage Configuration | Justified? | Severity | Direct Actionable Recommendation |
429
+ | :--- | :--- | :--- | :--- | :--- |
430
+ | **30 or higher** | App requests broad `READ_EXTERNAL_STORAGE` or `WRITE_EXTERNAL_STORAGE` for simple document selection. | No (Violation) | `IMPORTANT` | **Scoped Storage Mandate**: Migrate your document/file selections to the **Storage Access Framework (SAF)** (`Intent.ACTION_OPEN_DOCUMENT`). |
431
+
432
+ - **Domain-Specific Heuristics (Strictly Bounded)**:
433
+ Critique external directory creation:
434
+ 1. **Manual File Sync Heuristic**: Check if the code creates custom root-level
435
+ folders on external storage (e.g.
436
+ `Environment.getExternalStorageDirectory() + "/my_folder"`). If directories
437
+ are created for standard document outputs or logging, flag an `IMPORTANT`
438
+ violation. Direct the developer to utilize scoped storage paths.
439
+ {{/IF_ALL}}
440
+
441
+ ## Output schema
442
+
443
+ Save final JSON output to `{{TEMP_DIR}}/worker_{{GOAL_NAME}}.json`.
444
+
445
+ ```json
446
+ {
447
+ "domain": "Permissions and APIs",
448
+ "findings": [
449
+ {
450
+ "policy_id": "STRING_VALUE (The exact Policy ID, e.g., photo_video_access_policy)",
451
+ "issue_summary": "STRING_VALUE",
452
+ "severity": "CRITICAL | IMPORTANT | SUGGESTION",
453
+ "files_involved": ["STRING_VALUE"],
454
+ "evidence": "STRING_VALUE",
455
+ "recommendation": "STRING_VALUE"
456
+ }
457
+ ]
458
+ }
459
+ ```