reis-mobile 0.3.6 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +24 -0
- package/README.md +175 -168
- package/THIRD_PARTY_NOTICES.md +224 -4
- package/agents/android-architect.md +89 -0
- package/agents/android-performance-engineer.md +92 -0
- package/agents/android-test-engineer.md +97 -0
- package/agents/flutter-test-engineer.md +2 -0
- package/agents/ios-architect.md +93 -0
- package/agents/ios-performance-engineer.md +92 -0
- package/agents/ios-test-engineer.md +95 -0
- package/agents/lead-mobile.md +10 -1
- package/agents/mobile-staff-engineer.md +1 -1
- package/agents/rn-architect.md +94 -0
- package/agents/rn-performance-engineer.md +92 -0
- package/agents/rn-test-engineer.md +98 -0
- package/bin/reis-mobile.mjs +59 -17
- package/commands/debate.md +10 -1
- package/commands/debug.md +60 -0
- package/commands/reis-mobile.md +7 -2
- package/core/config/project.mjs +59 -0
- package/core/registry/frontmatter.mjs +15 -4
- package/core/registry/registry.mjs +21 -1
- package/core/router/intents.mjs +2 -0
- package/core/router/router.mjs +10 -5
- package/package.json +1 -1
- package/skills/android-adaptive/SKILL.md +304 -0
- package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/container-behavior.md +112 -0
- package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/get-started.md +69 -0
- package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/index.md +81 -0
- package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/item-behavior.md +170 -0
- package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/container-properties.md +415 -0
- package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/get-started.md +51 -0
- package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/index.md +73 -0
- package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/item-properties.md +170 -0
- package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/mediaquery/index.md +333 -0
- package/skills/android-adaptive/references/android/develop/ui/compose/tooling/debug.md +114 -0
- package/skills/android-adaptive/references/android/guide/navigation/navigation-3/recipes/material-listdetail.md +141 -0
- package/skills/android-agp-9-upgrade/SKILL.md +106 -0
- package/skills/android-agp-9-upgrade/references/android/build/migrate-to-built-in-kotlin.md +416 -0
- package/skills/android-agp-9-upgrade/references/android/build/releases/agp-9-0-0-release-notes.md +554 -0
- package/skills/android-agp-9-upgrade/references/buildconfig.md +54 -0
- package/skills/android-agp-9-upgrade/references/ksp-kapt.md +39 -0
- package/skills/android-agp-9-upgrade/references/paparazzi-gradle-9.md +30 -0
- package/skills/android-agp-9-upgrade/references/recipes.md +62 -0
- package/skills/android-appfunctions/SKILL.md +74 -0
- package/skills/android-appfunctions/references/adb-interaction-testing.md +95 -0
- package/skills/android-appfunctions/references/context.md +26 -0
- package/skills/android-appfunctions/references/feature-discovery-analysis.md +71 -0
- package/skills/android-appfunctions/references/implementation-configuration.md +282 -0
- package/skills/android-appfunctions/references/kdoc-refinement-optimization.md +75 -0
- package/skills/android-appfunctions/references/migrate-to-service-entry-point.md +226 -0
- package/skills/android-camerax/SKILL.md +135 -0
- package/skills/android-camerax/references/camera1-to-camerax.md +198 -0
- package/skills/android-camerax/references/camera2-to-camerax.md +193 -0
- package/skills/android-camerax/references/expert-blueprints.md +58 -0
- package/skills/android-camerax/references/foldables.md +83 -0
- package/skills/android-camerax/references/immutability.md +60 -0
- package/skills/android-camerax/references/low-light.md +124 -0
- package/skills/android-camerax/references/mlkit-spatial.md +75 -0
- package/skills/android-camerax/references/modern-apis.md +42 -0
- package/skills/android-camerax/references/testing.md +69 -0
- package/skills/android-camerax/references/thermals.md +85 -0
- package/skills/android-camerax/references/wear-os.md +76 -0
- package/skills/android-camerax/references/xr.md +54 -0
- package/skills/android-cli/SKILL.md +474 -0
- package/skills/android-cli/references/interact.md +113 -0
- package/skills/android-cli/references/journeys.md +120 -0
- package/skills/android-code-review/SKILL.md +58 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/SKILL.md +340 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/design/ui/ai-glasses/guides/interaction/inputs.md +67 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/access-hardware-projected-context.md +388 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/buttons.md +139 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/cards.md +148 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/focus.md +107 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/icons.md +90 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/text.md +69 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/title-chips.md +82 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/request-hardware-permissions.md +213 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/button-samples-source.md +176 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/button-source.md +203 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/card-samples-source.md +296 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/card-source.md +515 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/deptheffect-source.md +224 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/deptheffectlevels-source.md +105 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/glimmersansflextypography-source.md +270 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/glimmertheme-source.md +182 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/icon-source.md +388 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/iconbutton-source.md +126 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/iconsizes-source.md +78 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/list-source.md +27 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/listitem-source.md +272 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/liststate-source.md +427 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/material-hct-source.md +217 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/projectedcontext-source.md +265 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/stack-source.md +368 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/stackitemscope-source.md +440 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/stackstate-source.md +325 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/surface-source.md +1211 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/titlechip-samples-source.md +101 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/titlechip-source.md +131 -0
- package/skills/android-edge-to-edge/SKILL.md +429 -0
- package/skills/android-engage-sdk-integration/SKILL.md +130 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/faq.md +439 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/food.md +1149 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/healthandfitness.md +1055 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/listen.md +1050 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/otherverticals.md +1301 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/read.md +910 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/shopping.md +1224 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/social.md +719 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/travel.md +1413 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/tv/continue-watching/index.md +19 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/tv/entitlements.md +353 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/tv/getting-started.md +202 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/tv/recommendations.md +471 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/watch.md +1081 -0
- package/skills/android-engage-sdk-integration/references/clusters.md +154 -0
- package/skills/android-engage-sdk-integration/references/common.md +519 -0
- package/skills/android-engage-sdk-integration/references/patterns.md +527 -0
- package/skills/android-engage-sdk-integration/references/requests.md +260 -0
- package/skills/android-engage-sdk-integration/references/schemas/food.md +509 -0
- package/skills/android-engage-sdk-integration/references/schemas/listen.md +842 -0
- package/skills/android-engage-sdk-integration/references/schemas/other.md +220 -0
- package/skills/android-engage-sdk-integration/references/schemas/read.md +412 -0
- package/skills/android-engage-sdk-integration/references/schemas/shopping.md +357 -0
- package/skills/android-engage-sdk-integration/references/schemas/social.md +228 -0
- package/skills/android-engage-sdk-integration/references/schemas/travel.md +923 -0
- package/skills/android-engage-sdk-integration/references/schemas/tv.md +1226 -0
- package/skills/android-engage-sdk-integration/references/schemas/watch.md +1137 -0
- package/skills/android-engage-sdk-integration/references/troubleshooting.md +39 -0
- package/skills/android-gradle-build-debug/SKILL.md +71 -0
- package/skills/android-intent-security/SKILL.md +550 -0
- package/skills/android-leanback-to-compose-tv-migration/SKILL.md +743 -0
- package/skills/android-leanback-to-compose-tv-migration/references/android/training/tv/get-started/navigation.md +372 -0
- package/skills/android-leanback-to-compose-tv-migration/references/android/training/tv/playback/compose/browse.md +243 -0
- package/skills/android-leanback-to-compose-tv-migration/references/android/training/tv/playback/compose/index.md +153 -0
- package/skills/android-media3-cast-integration/SKILL.md +236 -0
- package/skills/android-media3-cast-integration/references/android/media/media3/cast/create-castplayer.md +390 -0
- package/skills/android-media3-cast-integration/references/android/media/media3/cast/customize-castoptions.md +93 -0
- package/skills/android-media3-cast-integration/references/android/media/media3/cast/index.md +21 -0
- package/skills/android-migrate-xml-views-to-jetpack-compose/SKILL.md +127 -0
- package/skills/android-migrate-xml-views-to-jetpack-compose/references/analysis-of-the-project-and-layout.md +42 -0
- package/skills/android-migrate-xml-views-to-jetpack-compose/references/android/develop/ui/compose/designsystems/migrate-xml-theme-to-compose.md +171 -0
- package/skills/android-migrate-xml-views-to-jetpack-compose/references/android/develop/ui/compose/migrate/interoperability-apis/compose-in-views.md +299 -0
- package/skills/android-migrate-xml-views-to-jetpack-compose/references/android/develop/ui/compose/migrate/interoperability-apis/views-in-compose.md +286 -0
- package/skills/android-migrate-xml-views-to-jetpack-compose/references/android/develop/ui/compose/setup-compose-dependencies-and-compiler.md +197 -0
- package/skills/android-migrate-xml-views-to-jetpack-compose/references/identify-optimal-xml-candidate.md +31 -0
- package/skills/android-migrate-xml-views-to-jetpack-compose/references/xml-layout-migration.md +86 -0
- package/skills/android-ml-kit-genai-prompt-api/SKILL.md +124 -0
- package/skills/android-ml-kit-genai-prompt-api/references/get-started.md +272 -0
- package/skills/android-ml-kit-genai-prompt-api/references/prefix-caching.md +146 -0
- package/skills/android-ml-kit-genai-prompt-api/references/prompt-design.md +55 -0
- package/skills/android-ml-kit-genai-prompt-api/references/prompt-optimization.md +74 -0
- package/skills/android-ml-kit-genai-prompt-api/references/structured-output.md +219 -0
- package/skills/android-ml-kit-genai-prompt-api/references/system-instructions.md +71 -0
- package/skills/android-navigation-3/SKILL.md +122 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/index.md +51 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/migration-guide.md +670 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/animations.md +147 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/basic.md +89 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/basicdsl.md +85 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/basicsaveable.md +90 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/bottomsheet.md +195 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/common-ui.md +200 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/conditional-transitions.md +182 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/conditional.md +230 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/deeplinks-custommatcher.md +176 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/deeplinks-staticuri.md +140 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/deeplinks-syntheticbackstack.md +184 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/dialog.md +107 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/lifecycle-owner.md +185 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/material-listdetail.md +141 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/material-supportingpane.md +145 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/modular-hilt.md +283 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/modular-koin.md +287 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/multiple-backstacks.md +468 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/passingarguments.md +371 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/results-event.md +273 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/results-state.md +266 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/scenes-listdetail.md +435 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/scenes-twopane.md +244 -0
- package/skills/android-navigation-3/references/android/guide/navigation/type-safe-destinations.md +129 -0
- package/skills/android-navigation-event/SKILL.md +312 -0
- package/skills/android-navigation-event/references/android/guide/navigation/navigation-event/dispatcher.md +134 -0
- package/skills/android-navigation-event/references/android/guide/navigation/navigation-event/handle-back.md +217 -0
- package/skills/android-navigation-event/references/android/guide/navigation/navigation-event/index.md +83 -0
- package/skills/android-navigation-event/references/android/guide/navigation/navigation-event/setup.md +32 -0
- package/skills/android-play-billing-library-version-upgrade/SKILL.md +96 -0
- package/skills/android-play-billing-library-version-upgrade/references/android/google/play/billing/release-notes.md +1240 -0
- package/skills/android-play-billing-library-version-upgrade/references/migration-logic.md +78 -0
- package/skills/android-play-billing-library-version-upgrade/references/version-checklist.md +54 -0
- package/skills/android-play-policy-insights/SKILL.md +172 -0
- package/skills/android-play-policy-insights/resources/common_mandates.md +100 -0
- package/skills/android-play-policy-insights/resources/compliance_report_template.md +59 -0
- package/skills/android-play-policy-insights/resources/critic.md +86 -0
- package/skills/android-play-policy-insights/resources/goal_data_safety.md +212 -0
- package/skills/android-play-policy-insights/resources/goal_permissions_and_apis.md +459 -0
- package/skills/android-play-policy-insights/resources/goal_user_account.md +106 -0
- package/skills/android-play-policy-insights/resources/policies.json +321 -0
- package/skills/android-play-policy-insights/resources/scanner_config.json +843 -0
- package/skills/android-play-policy-insights/scripts/generate_report.py +860 -0
- package/skills/android-play-policy-insights/scripts/orchestrator.py +1313 -0
- package/skills/android-play-policy-insights/scripts/play_store_scraper.py +410 -0
- package/skills/android-play-policy-insights/scripts/scanner.py +261 -0
- package/skills/android-play-policy-insights/scripts/template_engine.py +243 -0
- package/skills/android-profiler/SKILL.md +60 -0
- package/skills/android-profiler/analysis/analysis_orchestrator.md +32 -0
- package/skills/android-profiler/analysis/workflows/perfetto-sql/perfetto_sql.md +28 -0
- package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/perfetto_trace_analysis.md +121 -0
- package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/guiding_principles.md +51 -0
- package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/domain_hints_template.md +7 -0
- package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_cpu.md +56 -0
- package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_graphics.md +51 -0
- package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_io.md +46 -0
- package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_ipc.md +41 -0
- package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_memory.md +55 -0
- package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_power.md +33 -0
- package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/per_candidate_analysis.md +172 -0
- package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/triage.md +94 -0
- package/skills/android-profiler/recording/recording_orchestrator.md +36 -0
- package/skills/android-profiler/recording/workflows/perfetto-trace-recording/perfetto_trace_recording.md +148 -0
- package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/app_jank.pftxt +43 -0
- package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/cpu_profile.pftxt +35 -0
- package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/java_heap_dump.pftxt +21 -0
- package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/long_background.pftxt +37 -0
- package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/memory_counters.pftxt +45 -0
- package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/native_heap.pftxt +21 -0
- package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/sched_cpu.pftxt +33 -0
- package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/trace_config_reference.md +102 -0
- package/skills/android-profiler/references/env_setup.md +15 -0
- package/skills/android-profiler/references/perfetto/setup.md +29 -0
- package/skills/android-profiler/references/perfetto/sql.md +327 -0
- package/skills/android-r8-analyzer/SKILL.md +72 -0
- package/skills/android-r8-analyzer/references/CONFIGURATION-ANALYZER.md +287 -0
- package/skills/android-r8-analyzer/references/CONFIGURATION.md +44 -0
- package/skills/android-r8-analyzer/references/KEEP-RULES-IMPACT-HIERARCHY.md +83 -0
- package/skills/android-r8-analyzer/references/REDUNDANT-RULES.md +222 -0
- package/skills/android-r8-analyzer/references/REFLECTION-GUIDE.md +139 -0
- package/skills/android-r8-analyzer/references/REPORT_FORMAT.md +51 -0
- package/skills/android-r8-analyzer/references/android/topic/performance/app-optimization/enable-app-optimization.md +252 -0
- package/skills/android-r8-analyzer/references/android/training/testing/other-components/ui-automator.md +312 -0
- package/skills/android-restore-credentials/SKILL.md +359 -0
- package/skills/android-restore-credentials/references/android/guide/topics/manifest/application-element.md +832 -0
- package/skills/android-restore-credentials/references/android/identity/passkeys/create-passkeys.md +327 -0
- package/skills/android-restore-credentials/references/android/identity/passkeys/sign-in-with-passkeys.md +219 -0
- package/skills/android-styles/SKILL.md +229 -0
- package/skills/android-styles/references/android/develop/ui/compose/designsystems/custom.md +459 -0
- package/skills/android-styles/references/android/develop/ui/compose/styles/fundamentals.md +421 -0
- package/skills/android-styles/references/android/develop/ui/compose/styles/state-animations.md +461 -0
- package/skills/android-styles/references/android/develop/ui/compose/styles/styles-vs-modifiers.md +48 -0
- package/skills/android-styles/references/android/develop/ui/compose/styles/theming.md +269 -0
- package/skills/android-verified-email/SKILL.md +432 -0
- package/skills/android-verified-email/references/android/identity/credential-manager/index.md +67 -0
- package/skills/android-verified-email/references/android/identity/digital-credentials/credential-verifier.md +166 -0
- package/skills/android-verified-email/references/android/identity/digital-credentials/email-verification-implementation.md +313 -0
- package/skills/android-verified-email/references/android/identity/digital-credentials/email-verification.md +158 -0
- package/skills/android-verified-email/references/android/identity/digital-credentials/index.md +112 -0
- package/skills/android-verified-email/references/android/identity/passkeys/create-passkeys.md +327 -0
- package/skills/android-verified-email/references/android/identity/sign-in/credential-manager-webview.md +84 -0
- package/skills/android-wear-compose-m3/SKILL.md +365 -0
- package/skills/android-wear-compose-m3/references/android/training/wearables/compose/migrate-to-material3.md +677 -0
- package/skills/android-wear-compose-m3/references/foundation/AmbientModeSample.kt.md +123 -0
- package/skills/android-wear-compose-m3/references/foundation/AmbientModeSample.kt.md.txt +123 -0
- package/skills/android-wear-compose-m3/references/foundation/CurvedWorldSample.kt.md +430 -0
- package/skills/android-wear-compose-m3/references/foundation/CurvedWorldSample.kt.md.txt +430 -0
- package/skills/android-wear-compose-m3/references/foundation/ExpandableSample.kt.md +99 -0
- package/skills/android-wear-compose-m3/references/foundation/ExpandableSample.kt.md.txt +99 -0
- package/skills/android-wear-compose-m3/references/foundation/HierarchicalFocusSample.kt.md +141 -0
- package/skills/android-wear-compose-m3/references/foundation/HierarchicalFocusSample.kt.md.txt +141 -0
- package/skills/android-wear-compose-m3/references/foundation/PagerSamples.kt.md +56 -0
- package/skills/android-wear-compose-m3/references/foundation/PagerSamples.kt.md.txt +56 -0
- package/skills/android-wear-compose-m3/references/foundation/RotarySamples.kt.md +153 -0
- package/skills/android-wear-compose-m3/references/foundation/RotarySamples.kt.md.txt +153 -0
- package/skills/android-wear-compose-m3/references/foundation/ScalingLazyColumnSample.kt.md +131 -0
- package/skills/android-wear-compose-m3/references/foundation/ScalingLazyColumnSample.kt.md.txt +131 -0
- package/skills/android-wear-compose-m3/references/foundation/SwipeToDismissBoxSample.kt.md +169 -0
- package/skills/android-wear-compose-m3/references/foundation/SwipeToDismissBoxSample.kt.md.txt +169 -0
- package/skills/android-wear-compose-m3/references/foundation/SwipeToRevealSample.kt.md +282 -0
- package/skills/android-wear-compose-m3/references/foundation/SwipeToRevealSample.kt.md.txt +282 -0
- package/skills/android-wear-compose-m3/references/foundation/TransformingLazyColumnSample.kt.md +335 -0
- package/skills/android-wear-compose-m3/references/foundation/TransformingLazyColumnSample.kt.md.txt +335 -0
- package/skills/android-wear-compose-m3/references/material3/AlertDialogSample.kt.md +377 -0
- package/skills/android-wear-compose-m3/references/material3/AlertDialogSample.kt.md.txt +377 -0
- package/skills/android-wear-compose-m3/references/material3/AnimatedTextSample.kt.md +165 -0
- package/skills/android-wear-compose-m3/references/material3/AnimatedTextSample.kt.md.txt +165 -0
- package/skills/android-wear-compose-m3/references/material3/ButtonGroupSample.kt.md +91 -0
- package/skills/android-wear-compose-m3/references/material3/ButtonGroupSample.kt.md.txt +91 -0
- package/skills/android-wear-compose-m3/references/material3/ButtonSample.kt.md +496 -0
- package/skills/android-wear-compose-m3/references/material3/ButtonSample.kt.md.txt +496 -0
- package/skills/android-wear-compose-m3/references/material3/CardSample.kt.md +470 -0
- package/skills/android-wear-compose-m3/references/material3/CardSample.kt.md.txt +470 -0
- package/skills/android-wear-compose-m3/references/material3/CheckboxButtonSample.kt.md +67 -0
- package/skills/android-wear-compose-m3/references/material3/CheckboxButtonSample.kt.md.txt +67 -0
- package/skills/android-wear-compose-m3/references/material3/ConfirmationDialogSample.kt.md +162 -0
- package/skills/android-wear-compose-m3/references/material3/ConfirmationDialogSample.kt.md.txt +162 -0
- package/skills/android-wear-compose-m3/references/material3/CurvedTextSamples.kt.md +78 -0
- package/skills/android-wear-compose-m3/references/material3/CurvedTextSamples.kt.md.txt +78 -0
- package/skills/android-wear-compose-m3/references/material3/DatePickerSample.kt.md +131 -0
- package/skills/android-wear-compose-m3/references/material3/DatePickerSample.kt.md.txt +131 -0
- package/skills/android-wear-compose-m3/references/material3/DynamicColorSchemeSample.kt.md +74 -0
- package/skills/android-wear-compose-m3/references/material3/DynamicColorSchemeSample.kt.md.txt +74 -0
- package/skills/android-wear-compose-m3/references/material3/EdgeButtonSample.kt.md +63 -0
- package/skills/android-wear-compose-m3/references/material3/EdgeButtonSample.kt.md.txt +63 -0
- package/skills/android-wear-compose-m3/references/material3/FadingExpandingLabelSample.kt.md +60 -0
- package/skills/android-wear-compose-m3/references/material3/FadingExpandingLabelSample.kt.md.txt +60 -0
- package/skills/android-wear-compose-m3/references/material3/IconButtonSample.kt.md +125 -0
- package/skills/android-wear-compose-m3/references/material3/IconButtonSample.kt.md.txt +125 -0
- package/skills/android-wear-compose-m3/references/material3/IconToggleButtonSample.kt.md +116 -0
- package/skills/android-wear-compose-m3/references/material3/IconToggleButtonSample.kt.md.txt +116 -0
- package/skills/android-wear-compose-m3/references/material3/LevelIndicatorSample.kt.md +68 -0
- package/skills/android-wear-compose-m3/references/material3/LevelIndicatorSample.kt.md.txt +68 -0
- package/skills/android-wear-compose-m3/references/material3/LinearProgressIndicatorSample.kt.md +50 -0
- package/skills/android-wear-compose-m3/references/material3/LinearProgressIndicatorSample.kt.md.txt +50 -0
- package/skills/android-wear-compose-m3/references/material3/ListHeaderSample.kt.md +177 -0
- package/skills/android-wear-compose-m3/references/material3/ListHeaderSample.kt.md.txt +177 -0
- package/skills/android-wear-compose-m3/references/material3/OneHandedGestureSamples.kt.md +651 -0
- package/skills/android-wear-compose-m3/references/material3/OneHandedGestureSamples.kt.md.txt +651 -0
- package/skills/android-wear-compose-m3/references/material3/OpenOnPhoneDialogSample.kt.md +57 -0
- package/skills/android-wear-compose-m3/references/material3/OpenOnPhoneDialogSample.kt.md.txt +57 -0
- package/skills/android-wear-compose-m3/references/material3/PageIndicatorSample.kt.md +110 -0
- package/skills/android-wear-compose-m3/references/material3/PageIndicatorSample.kt.md.txt +110 -0
- package/skills/android-wear-compose-m3/references/material3/PagerScaffoldSample.kt.md +204 -0
- package/skills/android-wear-compose-m3/references/material3/PagerScaffoldSample.kt.md.txt +204 -0
- package/skills/android-wear-compose-m3/references/material3/PickerGroupSample.kt.md +139 -0
- package/skills/android-wear-compose-m3/references/material3/PickerGroupSample.kt.md.txt +139 -0
- package/skills/android-wear-compose-m3/references/material3/PickerSample.kt.md +111 -0
- package/skills/android-wear-compose-m3/references/material3/PickerSample.kt.md.txt +111 -0
- package/skills/android-wear-compose-m3/references/material3/PlaceholderSample.kt.md +184 -0
- package/skills/android-wear-compose-m3/references/material3/PlaceholderSample.kt.md.txt +184 -0
- package/skills/android-wear-compose-m3/references/material3/ProgressIndicatorSample.kt.md +263 -0
- package/skills/android-wear-compose-m3/references/material3/ProgressIndicatorSample.kt.md.txt +263 -0
- package/skills/android-wear-compose-m3/references/material3/RadioButtonSample.kt.md +105 -0
- package/skills/android-wear-compose-m3/references/material3/RadioButtonSample.kt.md.txt +105 -0
- package/skills/android-wear-compose-m3/references/material3/ScaffoldSample.kt.md +146 -0
- package/skills/android-wear-compose-m3/references/material3/ScaffoldSample.kt.md.txt +146 -0
- package/skills/android-wear-compose-m3/references/material3/ScrollAwaySample.kt.md +97 -0
- package/skills/android-wear-compose-m3/references/material3/ScrollAwaySample.kt.md.txt +97 -0
- package/skills/android-wear-compose-m3/references/material3/ScrollIndicatorSample.kt.md +66 -0
- package/skills/android-wear-compose-m3/references/material3/ScrollIndicatorSample.kt.md.txt +66 -0
- package/skills/android-wear-compose-m3/references/material3/SliderSample.kt.md +86 -0
- package/skills/android-wear-compose-m3/references/material3/SliderSample.kt.md.txt +86 -0
- package/skills/android-wear-compose-m3/references/material3/StepperSample.kt.md +148 -0
- package/skills/android-wear-compose-m3/references/material3/StepperSample.kt.md.txt +148 -0
- package/skills/android-wear-compose-m3/references/material3/SurfaceTransformationSample.kt.md +166 -0
- package/skills/android-wear-compose-m3/references/material3/SurfaceTransformationSample.kt.md.txt +166 -0
- package/skills/android-wear-compose-m3/references/material3/SwipeToDismissBoxSample.kt.md +172 -0
- package/skills/android-wear-compose-m3/references/material3/SwipeToDismissBoxSample.kt.md.txt +172 -0
- package/skills/android-wear-compose-m3/references/material3/SwipeToRevealSample.kt.md +367 -0
- package/skills/android-wear-compose-m3/references/material3/SwipeToRevealSample.kt.md.txt +367 -0
- package/skills/android-wear-compose-m3/references/material3/SwitchButtonSample.kt.md +66 -0
- package/skills/android-wear-compose-m3/references/material3/SwitchButtonSample.kt.md.txt +66 -0
- package/skills/android-wear-compose-m3/references/material3/TextButtonSample.kt.md +115 -0
- package/skills/android-wear-compose-m3/references/material3/TextButtonSample.kt.md.txt +115 -0
- package/skills/android-wear-compose-m3/references/material3/TextToggleButtonSample.kt.md +71 -0
- package/skills/android-wear-compose-m3/references/material3/TextToggleButtonSample.kt.md.txt +71 -0
- package/skills/android-wear-compose-m3/references/material3/TimePickerSample.kt.md +151 -0
- package/skills/android-wear-compose-m3/references/material3/TimePickerSample.kt.md.txt +151 -0
- package/skills/android-wear-compose-m3/references/material3/TimeTextSample.kt.md +65 -0
- package/skills/android-wear-compose-m3/references/material3/TimeTextSample.kt.md.txt +65 -0
- package/skills/android-wear-compose-m3/references/material3/TransformationSpecSample.kt.md +246 -0
- package/skills/android-wear-compose-m3/references/material3/TransformationSpecSample.kt.md.txt +246 -0
- package/skills/android-wear-compose-m3/references/material3/TransformingLazyColumnNotificationsSample.kt.md +89 -0
- package/skills/android-wear-compose-m3/references/material3/TransformingLazyColumnNotificationsSample.kt.md.txt +89 -0
- package/skills/android-wear-compose-m3/references/material3/TransformingLazyColumnSample.kt.md +309 -0
- package/skills/android-wear-compose-m3/references/material3/TransformingLazyColumnSample.kt.md.txt +309 -0
- package/skills/android-wear-compose-m3/references/navigation3/SwipeDismissableSceneStrategySample.kt.md +205 -0
- package/skills/android-wear-compose-m3/references/navigation3/SwipeDismissableSceneStrategySample.kt.md.txt +205 -0
- package/skills/{architecture-feature-first → flutter-architecture-feature-first}/SKILL.md +1 -1
- package/skills/{bloc → flutter-bloc}/SKILL.md +1 -1
- package/skills/flutter-build-debug/SKILL.md +66 -0
- package/skills/{code-review → flutter-code-review}/SKILL.md +1 -1
- package/skills/{dart-3-updates → flutter-dart-3-updates}/SKILL.md +1 -1
- package/skills/{dart-fix-runtime-errors → flutter-dart-fix-runtime-errors}/SKILL.md +1 -1
- package/skills/{dart-resolve-package-conflicts → flutter-dart-resolve-package-conflicts}/SKILL.md +1 -1
- package/skills/{dart-run-static-analysis → flutter-dart-run-static-analysis}/SKILL.md +1 -1
- package/skills/{dart-use-pattern-matching → flutter-dart-use-pattern-matching}/SKILL.md +1 -1
- package/skills/{effective-dart → flutter-effective-dart}/SKILL.md +1 -1
- package/skills/{provider → flutter-provider}/SKILL.md +1 -1
- package/skills/{riverpod → flutter-riverpod}/SKILL.md +1 -1
- package/skills/ios-cocoapods-debug/SKILL.md +65 -0
- package/skills/ios-code-review/SKILL.md +56 -0
- package/skills/ios-xcode-build-debug/SKILL.md +66 -0
- package/skills/{detect-mobile-stack → mobile-detect-stack}/SKILL.md +1 -1
- package/skills/mobile-firebase/SKILL.md +54 -0
- package/skills/mobile-firebase/references/android/ai-logic.md +31 -0
- package/skills/mobile-firebase/references/android/analytics.md +33 -0
- package/skills/mobile-firebase/references/android/app-check.md +36 -0
- package/skills/mobile-firebase/references/android/auth.md +44 -0
- package/skills/mobile-firebase/references/android/crashlytics.md +31 -0
- package/skills/mobile-firebase/references/android/firestore.md +44 -0
- package/skills/mobile-firebase/references/android/functions.md +33 -0
- package/skills/mobile-firebase/references/android/in-app-messaging.md +28 -0
- package/skills/mobile-firebase/references/android/messaging.md +41 -0
- package/skills/mobile-firebase/references/android/realtime-database.md +50 -0
- package/skills/mobile-firebase/references/android/remote-config.md +43 -0
- package/skills/mobile-firebase/references/android/sql-connect.md +31 -0
- package/skills/mobile-firebase/references/android/storage.md +39 -0
- package/skills/mobile-firebase/references/android.md +30 -0
- package/skills/{firebase-ai/SKILL.md → mobile-firebase/references/flutter/ai-logic.md} +2 -8
- package/skills/{firebase-analytics/SKILL.md → mobile-firebase/references/flutter/analytics.md} +2 -8
- package/skills/{firebase-app-check/SKILL.md → mobile-firebase/references/flutter/app-check.md} +2 -8
- package/skills/{firebase-auth/SKILL.md → mobile-firebase/references/flutter/auth.md} +2 -8
- package/skills/{firebase-crashlytics/SKILL.md → mobile-firebase/references/flutter/crashlytics.md} +2 -8
- package/skills/{firebase-cloud-firestore/SKILL.md → mobile-firebase/references/flutter/firestore.md} +2 -8
- package/skills/{firebase-cloud-functions/SKILL.md → mobile-firebase/references/flutter/functions.md} +2 -8
- package/skills/{firebase-in-app-messaging/SKILL.md → mobile-firebase/references/flutter/in-app-messaging.md} +2 -8
- package/skills/{firebase-messaging/SKILL.md → mobile-firebase/references/flutter/messaging.md} +2 -8
- package/skills/{firebase-database/SKILL.md → mobile-firebase/references/flutter/realtime-database.md} +2 -8
- package/skills/{firebase-remote-config/SKILL.md → mobile-firebase/references/flutter/remote-config.md} +2 -8
- package/skills/{flutterfire-configure/SKILL.md → mobile-firebase/references/flutter/setup-flutterfire.md} +1 -8
- package/skills/{firebase-data-connect/SKILL.md → mobile-firebase/references/flutter/sql-connect.md} +2 -8
- package/skills/{firebase-storage/SKILL.md → mobile-firebase/references/flutter/storage.md} +2 -8
- package/skills/mobile-firebase/references/flutter.md +36 -0
- package/skills/mobile-firebase/references/ios/ai-logic.md +30 -0
- package/skills/mobile-firebase/references/ios/analytics.md +33 -0
- package/skills/mobile-firebase/references/ios/app-check.md +36 -0
- package/skills/mobile-firebase/references/ios/auth.md +48 -0
- package/skills/mobile-firebase/references/ios/crashlytics.md +34 -0
- package/skills/mobile-firebase/references/ios/firestore.md +53 -0
- package/skills/mobile-firebase/references/ios/functions.md +35 -0
- package/skills/mobile-firebase/references/ios/in-app-messaging.md +26 -0
- package/skills/mobile-firebase/references/ios/messaging.md +45 -0
- package/skills/mobile-firebase/references/ios/realtime-database.md +49 -0
- package/skills/mobile-firebase/references/ios/remote-config.md +44 -0
- package/skills/mobile-firebase/references/ios/sql-connect.md +33 -0
- package/skills/mobile-firebase/references/ios/storage.md +36 -0
- package/skills/mobile-firebase/references/ios.md +28 -0
- package/skills/mobile-firebase/references/react-native/ai-logic.md +32 -0
- package/skills/mobile-firebase/references/react-native/analytics.md +43 -0
- package/skills/mobile-firebase/references/react-native/app-check.md +35 -0
- package/skills/mobile-firebase/references/react-native/auth.md +50 -0
- package/skills/mobile-firebase/references/react-native/crashlytics.md +36 -0
- package/skills/mobile-firebase/references/react-native/firestore.md +45 -0
- package/skills/mobile-firebase/references/react-native/functions.md +28 -0
- package/skills/mobile-firebase/references/react-native/in-app-messaging.md +27 -0
- package/skills/mobile-firebase/references/react-native/messaging.md +46 -0
- package/skills/mobile-firebase/references/react-native/realtime-database.md +46 -0
- package/skills/mobile-firebase/references/react-native/remote-config.md +32 -0
- package/skills/mobile-firebase/references/react-native/sql-connect.md +11 -0
- package/skills/mobile-firebase/references/react-native/storage.md +30 -0
- package/skills/mobile-firebase/references/react-native.md +29 -0
- package/skills/mobile-test/SKILL.md +63 -0
- package/skills/mobile-test/references/android/setup/GUIDE.md +183 -0
- package/skills/mobile-test/references/android/setup/references/android/develop/ui/compose/testing/common-patterns.md +181 -0
- package/skills/mobile-test/references/android/setup/references/android/studio/preview/compose-screenshot-testing.md +255 -0
- package/skills/mobile-test/references/android/setup/references/android/training/dependency-injection/hilt-testing.md +447 -0
- package/skills/mobile-test/references/android.md +83 -0
- package/skills/{dart-collect-coverage/SKILL.md → mobile-test/references/flutter/coverage.md} +2 -11
- package/skills/{dart-generate-test-mocks/SKILL.md → mobile-test/references/flutter/generate-mocks.md} +2 -11
- package/skills/{flutter-add-integration-test/SKILL.md → mobile-test/references/flutter/integration-tests.md} +2 -11
- package/skills/{dart-migrate-to-checks-package/SKILL.md → mobile-test/references/flutter/migrate-to-checks.md} +2 -13
- package/skills/{mockito/SKILL.md → mobile-test/references/flutter/mockito.md} +1 -8
- package/skills/{mocktail/SKILL.md → mobile-test/references/flutter/mocktail.md} +1 -8
- package/skills/{patrol-e2e-testing/SKILL.md → mobile-test/references/flutter/patrol.md} +1 -8
- package/skills/{testing/SKILL.md → mobile-test/references/flutter/testing-guidelines.md} +1 -8
- package/skills/{dart-add-unit-test/SKILL.md → mobile-test/references/flutter/unit-tests.md} +2 -11
- package/skills/{flutter-add-widget-test/SKILL.md → mobile-test/references/flutter/widget-tests.md} +2 -11
- package/skills/mobile-test/references/flutter.md +44 -0
- package/skills/mobile-test/references/ios.md +79 -0
- package/skills/mobile-test/references/react-native.md +62 -0
- /package/skills/{dart-use-pattern-matching → flutter-dart-use-pattern-matching}/examples/json_patterns.dart +0 -0
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
To implement a robust navigation system, your app needs a centralized way to
|
|
2
|
+
handle back gestures and other navigation signals. This page describes how to
|
|
3
|
+
use [`NavigationEventDispatcher`](https://developer.android.com/reference/kotlin/androidx/navigationevent/NavigationEventDispatcher) to coordinate and distribute these
|
|
4
|
+
navigation events across your application.
|
|
5
|
+
|
|
6
|
+
## Declare a `NavigationEventDispatcher`
|
|
7
|
+
|
|
8
|
+
The `NavigationEventDispatcher` is the central component of the
|
|
9
|
+
`NavigationEvent` library. It acts as an event hub that dispatches
|
|
10
|
+
navigation-related events, such as back gestures and navigation transitions, to
|
|
11
|
+
registered listeners within your app. Components can subscribe to these events
|
|
12
|
+
to react to navigation changes or other system-driven navigation actions.
|
|
13
|
+
|
|
14
|
+
You should provide `NavigationEventDispatcher` instances through a
|
|
15
|
+
[`NavigationEventDispatcherOwner`](https://developer.android.com/reference/androidx/navigationevent/NavigationEventDispatcherOwner). This ensures that different parts of your
|
|
16
|
+
app can access the same dispatcher and observe navigation events in a consistent
|
|
17
|
+
and coordinated way.
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
```kotlin
|
|
21
|
+
class MyComponent: NavigationEventDispatcherOwner {
|
|
22
|
+
override val navigationEventDispatcher: NavigationEventDispatcher =
|
|
23
|
+
NavigationEventDispatcher()
|
|
24
|
+
}
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
<br />
|
|
28
|
+
|
|
29
|
+
If you are inside of a `ComponentActivity`, instead of implementing your own
|
|
30
|
+
dispatcher, you can retrieve the one provided for you.
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
```kotlin
|
|
34
|
+
class MyCustomActivity : ComponentActivity() {
|
|
35
|
+
fun addMyHandler() {
|
|
36
|
+
// navigationEventDispatcher provided by the ComponentActivity
|
|
37
|
+
navigationEventDispatcher.addHandler(myNavigationEventHandler)
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
<br />
|
|
43
|
+
|
|
44
|
+
## Add a `NavigationEventInput`
|
|
45
|
+
|
|
46
|
+
Now that you've registered the handler, you are set up to receive events.
|
|
47
|
+
However, you need to provide a source from which the events are generated with
|
|
48
|
+
`NavigationEventInput`.
|
|
49
|
+
|
|
50
|
+
`NavigationEventInput` is the platform-specific component that receives
|
|
51
|
+
raw system input and translates it into a standard `NavigationEvent` to be sent
|
|
52
|
+
to the `NavigationEventDispatcher`.
|
|
53
|
+
|
|
54
|
+
The following example is a custom implementation of a `NavigationEventInput`:
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
```kotlin
|
|
58
|
+
public class MyInput : NavigationEventInput() {
|
|
59
|
+
@MainThread
|
|
60
|
+
public fun backStarted(event: NavigationEvent) {
|
|
61
|
+
dispatchOnBackStarted(event)
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
@MainThread
|
|
65
|
+
public fun backProgressed(event: NavigationEvent) {
|
|
66
|
+
dispatchOnBackProgressed(event)
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
@MainThread
|
|
70
|
+
public fun backCancelled() {
|
|
71
|
+
dispatchOnBackCancelled()
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
@MainThread
|
|
75
|
+
public fun backCompleted() {
|
|
76
|
+
dispatchOnBackCompleted()
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
<br />
|
|
82
|
+
|
|
83
|
+
Next, provide that input to your dispatcher:
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
```kotlin
|
|
87
|
+
navigationEventDispatcher.addInput(MyInput())
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
<br />
|
|
91
|
+
|
|
92
|
+
> [!NOTE]
|
|
93
|
+
> **Note:** To provide a simple input, use the [`DirectNavigationEventInput`](https://developer.android.com/reference/androidx/navigationevent/DirectNavigationEventInput) class.
|
|
94
|
+
|
|
95
|
+
## Clean up resources with `dispose()`
|
|
96
|
+
|
|
97
|
+
To prevent memory leaks in a dynamic UI, every created
|
|
98
|
+
`NavigationEventDispatcher` instance must be explicitly removed from the
|
|
99
|
+
hierarchy using the `dispose()` method when the component it is tied to is
|
|
100
|
+
destroyed:
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
```kotlin
|
|
104
|
+
navigationEventDispatcher.dispose()
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
<br />
|
|
108
|
+
|
|
109
|
+
The `dispose()` method ensures a *cascading cleanup* by iteratively removing
|
|
110
|
+
the dispatcher and all of its descendants (children and grandchildren),
|
|
111
|
+
guaranteeing that all associated handlers are unregistered from the shared
|
|
112
|
+
system.
|
|
113
|
+
|
|
114
|
+
### Dispatcher hierarchy and control
|
|
115
|
+
|
|
116
|
+
The `NavigationEventDispatcher` supports a parent-child hierarchy, enabling
|
|
117
|
+
components nested deep within a UI (such as nested `NavHost`s or dialogs) to
|
|
118
|
+
participate in navigation event handling.
|
|
119
|
+
|
|
120
|
+
#### Create a child dispatcher
|
|
121
|
+
|
|
122
|
+
A child dispatcher is created by passing a reference to its parent dispatcher
|
|
123
|
+
during construction. All dispatchers in a hierarchy share the same
|
|
124
|
+
`NavigationEventProcessor` to maintain a global **Last-In, First-Out (LIFO)**
|
|
125
|
+
event ordering based on priority.
|
|
126
|
+
|
|
127
|
+
#### Hierarchical enabling
|
|
128
|
+
|
|
129
|
+
The dispatcher includes an `isEnabled` property that allows developers to enable
|
|
130
|
+
or disable an entire subtree of handlers at once.
|
|
131
|
+
|
|
132
|
+
When a parent dispatcher is disabled (`isEnabled = false`), all handlers
|
|
133
|
+
associated with that parent and any of its children will be ignored, regardless
|
|
134
|
+
of their individual enabled state.
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
You can extend the abstract class `NavigationEventHandler` to handle navigation
|
|
2
|
+
events across platforms. This class provides methods corresponding to the
|
|
3
|
+
lifecycle of a navigation gesture.
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
```kotlin
|
|
7
|
+
val myHandler = object: NavigationEventHandler<NavigationEventInfo>(
|
|
8
|
+
initialInfo = NavigationEventInfo.None,
|
|
9
|
+
isBackEnabled = true
|
|
10
|
+
) {
|
|
11
|
+
override fun onBackStarted(event: NavigationEvent) {
|
|
12
|
+
// Prepare for the back event
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
override fun onBackProgressed(event: NavigationEvent) {
|
|
16
|
+
// Use event.progress for predictive animations
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// This is the required method for final event handling
|
|
20
|
+
override fun onBackCompleted() {
|
|
21
|
+
// Complete the back event
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
override fun onBackCancelled() {
|
|
25
|
+
// Cancel the back event
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
<br />
|
|
31
|
+
|
|
32
|
+
The `addHandler` function connects the handler to the dispatcher:
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
```kotlin
|
|
36
|
+
navigationEventDispatcher.addHandler(myHandler)
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
<br />
|
|
40
|
+
|
|
41
|
+
Call `myHandler.remove()` to remove the handler from the dispatcher:
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
```kotlin
|
|
45
|
+
myHandler.remove()
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
<br />
|
|
49
|
+
|
|
50
|
+
Handlers are invoked based on priority, and then by recency. All
|
|
51
|
+
[`PRIORITY_OVERLAY`](https://developer.android.com/reference/kotlin/androidx/navigationevent/NavigationEventDispatcher#PRIORITY_OVERLAY()) handlers are called before any [`PRIORITY_DEFAULT`](https://developer.android.com/reference/kotlin/androidx/navigationevent/NavigationEventDispatcher#PRIORITY_DEFAULT())
|
|
52
|
+
handlers. Within each priority group, handlers are invoked in a Last-In,
|
|
53
|
+
First-Out (LIFO) order --- the most recently added handler is called first.
|
|
54
|
+
|
|
55
|
+
## Intercept back with Jetpack Compose
|
|
56
|
+
|
|
57
|
+
For Jetpack Compose, the library provides a utility composable to manage the
|
|
58
|
+
dispatcher hierarchy.
|
|
59
|
+
|
|
60
|
+
The `NavigationBackHandler` composable creates a `NavigationEventHandler` for
|
|
61
|
+
its content and links it to the `LocalNavigationEventDispatcherOwner`. It uses
|
|
62
|
+
Compose's `DisposableEffect` to automatically call the dispatcher's `dispose()`
|
|
63
|
+
method when the composable leaves the screen, safely managing resources.
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
```kotlin
|
|
67
|
+
@Composable
|
|
68
|
+
public fun NavigationBackHandler(
|
|
69
|
+
state: NavigationEventState<out NavigationEventInfo>,
|
|
70
|
+
isBackEnabled: Boolean = true,
|
|
71
|
+
onBackCancelled: () -> Unit = {},
|
|
72
|
+
onBackCompleted: () -> Unit,
|
|
73
|
+
){
|
|
74
|
+
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
<br />
|
|
79
|
+
|
|
80
|
+
This function lets you control event handling precisely within localized UI
|
|
81
|
+
subtrees.
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
```kotlin
|
|
85
|
+
@Composable
|
|
86
|
+
fun HandlingBackWithTransitionState(
|
|
87
|
+
onNavigateUp: () -> Unit
|
|
88
|
+
) {
|
|
89
|
+
val navigationState = rememberNavigationEventState(
|
|
90
|
+
currentInfo = NavigationEventInfo.None
|
|
91
|
+
)
|
|
92
|
+
val transitionState = navigationState.transitionState
|
|
93
|
+
// React to predictive back transition updates
|
|
94
|
+
when (transitionState) {
|
|
95
|
+
is NavigationEventTransitionState.InProgress -> {
|
|
96
|
+
val progress = transitionState.latestEvent.progress
|
|
97
|
+
// Use progress (0f..1f) to update UI during the gesture
|
|
98
|
+
}
|
|
99
|
+
is NavigationEventTransitionState.Idle -> {
|
|
100
|
+
// Reset any temporary UI state if the gesture is cancelled
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
NavigationBackHandler(
|
|
104
|
+
state = navigationState,
|
|
105
|
+
onBackCancelled = {
|
|
106
|
+
// Called if the back gesture is cancelled
|
|
107
|
+
},
|
|
108
|
+
onBackCompleted = {
|
|
109
|
+
// Called when the back gesture fully completes
|
|
110
|
+
onNavigateUp()
|
|
111
|
+
}
|
|
112
|
+
)
|
|
113
|
+
}
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
<br />
|
|
117
|
+
|
|
118
|
+
This example shows how to observe predictive back gesture updates using
|
|
119
|
+
[`NavigationEventTransitionState`](https://developer.android.com/reference/kotlin/androidx/navigationevent/NavigationEventTransitionState). The `progress` value can be used to
|
|
120
|
+
update UI elements in response to the back gesture, while handling completion
|
|
121
|
+
and cancellation through `NavigationBackHandler`.
|
|
122
|
+
|
|
123
|
+
### Access the back gesture or swipe edge in Compose
|
|
124
|
+
|
|
125
|
+
> [!NOTE]
|
|
126
|
+
> **Note:** For Android, if you're already using a navigation library with built-in Predictive Back support, like [Navigation 3](https://developer.android.com/guide/navigation/navigation-3/animate-destinations), use that instead of implementing the guidance here. The following section shows how to create a Predictive Back animation using only `NavigationEvent` and Compose.
|
|
127
|
+
|
|
128
|
+
**Figure 1** . A predictive back animation built with `NavigationEvent` and Compose.
|
|
129
|
+
|
|
130
|
+
To animate the screen while the user swipes back, you'll need to (a) check if
|
|
131
|
+
the `NavigationEventTransitionState` is `InProgress`, and (b) observe the
|
|
132
|
+
progress and swipe edge state with `rememberNavigationEventState`:
|
|
133
|
+
|
|
134
|
+
- `progress`: A Float from `0.0` to `1.0` indicating how far the user has swiped.
|
|
135
|
+
- `swipeEdge`: An integer constant (`EDGE_LEFT` or `EDGE_RIGHT`) indicating where the gesture started.
|
|
136
|
+
|
|
137
|
+
The following snippet is a simplified example of how to implement a scale and
|
|
138
|
+
shift animation:
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
```kotlin
|
|
142
|
+
object Routes {
|
|
143
|
+
const val SCREEN_A = "Screen A"
|
|
144
|
+
const val SCREEN_B = "Screen B"
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
class MainActivity : ComponentActivity() {
|
|
148
|
+
override fun onCreate(savedInstanceState: Bundle?) {
|
|
149
|
+
super.onCreate(savedInstanceState)
|
|
150
|
+
setContent {
|
|
151
|
+
var state by remember { mutableStateOf(Routes.SCREEN_A) }
|
|
152
|
+
val backEventState = rememberNavigationEventState<NavigationEventInfo>(currentInfo = NavigationEventInfo.None)
|
|
153
|
+
when (state) {
|
|
154
|
+
Routes.SCREEN_A -> {
|
|
155
|
+
ScreenA(onNavigate = { state = Routes.SCREEN_B })
|
|
156
|
+
}
|
|
157
|
+
else -> {
|
|
158
|
+
if (backEventState.transitionState is NavigationEventTransitionState.InProgress) {
|
|
159
|
+
ScreenA(onNavigate = { })
|
|
160
|
+
}
|
|
161
|
+
ScreenB(
|
|
162
|
+
backEventState = backEventState,
|
|
163
|
+
onBackCompleted = { state = Routes.SCREEN_A }
|
|
164
|
+
)
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
@Composable
|
|
172
|
+
fun ScreenB(
|
|
173
|
+
backEventState: NavigationEventState<NavigationEventInfo>,
|
|
174
|
+
onBackCompleted: () -> Unit = {},
|
|
175
|
+
) {
|
|
176
|
+
val transitionState = backEventState.transitionState
|
|
177
|
+
val latestEvent =
|
|
178
|
+
(transitionState as? NavigationEventTransitionState.InProgress)
|
|
179
|
+
?.latestEvent
|
|
180
|
+
val backProgress = latestEvent?.progress ?: 0f
|
|
181
|
+
val swipeEdge = latestEvent?.swipeEdge ?: NavigationEvent.EDGE_LEFT
|
|
182
|
+
if (transitionState is NavigationEventTransitionState.InProgress) {
|
|
183
|
+
Log.d("BackGesture", "Progress: ${transitionState.latestEvent.progress}")
|
|
184
|
+
} else if (transitionState is NavigationEventTransitionState.Idle) {
|
|
185
|
+
Log.d("BackGesture", "Idle")
|
|
186
|
+
}
|
|
187
|
+
val animatedScale by animateFloatAsState(
|
|
188
|
+
targetValue = 1f - (backProgress * 0.1f),
|
|
189
|
+
label = "ScaleAnimation"
|
|
190
|
+
)
|
|
191
|
+
val windowInfo = LocalWindowInfo.current
|
|
192
|
+
val density = LocalDensity.current
|
|
193
|
+
val maxShift = remember(windowInfo, density) {
|
|
194
|
+
val widthDp = with(density) { windowInfo.containerSize.width.toDp() }
|
|
195
|
+
(widthDp.value / 20f) - 8
|
|
196
|
+
}
|
|
197
|
+
val offsetX = when (swipeEdge) {
|
|
198
|
+
NavigationEvent.EDGE_LEFT -> (backProgress * maxShift).dp
|
|
199
|
+
NavigationEvent.EDGE_RIGHT -> (-backProgress * maxShift).dp
|
|
200
|
+
else -> 0.dp
|
|
201
|
+
}
|
|
202
|
+
NavigationBackHandler(
|
|
203
|
+
state = backEventState,
|
|
204
|
+
onBackCompleted = onBackCompleted,
|
|
205
|
+
isBackEnabled = true
|
|
206
|
+
)
|
|
207
|
+
Box(
|
|
208
|
+
modifier = Modifier
|
|
209
|
+
.offset(x = offsetX)
|
|
210
|
+
.scale(animatedScale)
|
|
211
|
+
){
|
|
212
|
+
// Rest of UI
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
<br />
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
Navigation Event is a library that provides a Kotlin Multiplatform (KMP)
|
|
2
|
+
solution for integrating system-level navigation events into your application.
|
|
3
|
+
It is designed to be the foundational layer for handling navigation directions
|
|
4
|
+
across various [supported platforms](https://developer.android.com/kotlin/multiplatform#kotlin-multiplatform-and-jetpack-libraries).
|
|
5
|
+
|
|
6
|
+
## Key concepts
|
|
7
|
+
|
|
8
|
+
The Navigation Event system is built around a centralized dispatcher-handler
|
|
9
|
+
model, often used in a parent-child hierarchy to map to complex UI structures,
|
|
10
|
+
such as those found in Jetpack Compose.
|
|
11
|
+
|
|
12
|
+
### `NavigationEventDispatcher`
|
|
13
|
+
|
|
14
|
+
The [`NavigationEventDispatcher`](https://developer.android.com/reference/kotlin/androidx/navigationevent/NavigationEventDispatcher) is the central class responsible for
|
|
15
|
+
managing all registered navigation event consumers
|
|
16
|
+
([`NavigationEventHandler`](https://developer.android.com/reference/kotlin/androidx/navigationevent/NavigationEventHandler))) and orchestrating the flow of events.
|
|
17
|
+
|
|
18
|
+
In a hierarchical setup, all dispatchers within the same chain share a single
|
|
19
|
+
`NavigationEventProcessor`, which manages the global state and ensures a single,
|
|
20
|
+
unified dispatching order across the entire tree.
|
|
21
|
+
|
|
22
|
+
### `NavigationEventHandler`
|
|
23
|
+
|
|
24
|
+
`NavigationEventHandler` is an abstract class that receives and handles
|
|
25
|
+
navigation events dispatched by a `NavigationEventDispatcher`. It defines
|
|
26
|
+
callback methods that correspond to different stages of a navigation gesture
|
|
27
|
+
lifecycle, such as when a gesture starts, progresses, completes, or is
|
|
28
|
+
cancelled.
|
|
29
|
+
|
|
30
|
+
Handlers can respond to these events to update UI or application state in
|
|
31
|
+
response to user navigation actions. Multiple handlers can be registered with a
|
|
32
|
+
dispatcher and are invoked based on priority and registration order.
|
|
33
|
+
|
|
34
|
+
### `NavigationEvent`
|
|
35
|
+
|
|
36
|
+
[`NavigationEvent`](https://developer.android.com/reference/androidx/navigationevent/NavigationEvent) is a data class that carries the details of the
|
|
37
|
+
navigation gesture.
|
|
38
|
+
|
|
39
|
+
### `NavigationEventInfo`
|
|
40
|
+
|
|
41
|
+
[`NavigationEventInfo`](https://developer.android.com/reference/androidx/navigationevent/NavigationEventInfo) is an abstract class that provides contextual
|
|
42
|
+
information about a navigation state.
|
|
43
|
+
|
|
44
|
+
### `NavigationEventInput`
|
|
45
|
+
|
|
46
|
+
[`NavigationEventInput`](https://developer.android.com/reference/androidx/navigationevent/NavigationEventInput) is an abstract class for components that generate
|
|
47
|
+
and dispatch navigation events. It acts as the "input" side of the navigation
|
|
48
|
+
system, translating platform-specific events (like system back gestures or
|
|
49
|
+
button clicks) into standardized events that can be sent to a
|
|
50
|
+
`NavigationEventDispatcher`.
|
|
51
|
+
|
|
52
|
+
## Supported navigation directions and triggers
|
|
53
|
+
|
|
54
|
+
The Navigation Event system is designed to encompass more than just the system
|
|
55
|
+
back button, with designs supporting multiple navigation directions and input
|
|
56
|
+
methods across platforms.
|
|
57
|
+
|
|
58
|
+
### Supported directions
|
|
59
|
+
|
|
60
|
+
Different platforms support varying navigation directions:
|
|
61
|
+
|
|
62
|
+
|---|---|---|---|---|
|
|
63
|
+
| **Platform** | **Back** | **Up** | **Forward** | **Home** |
|
|
64
|
+
| **Android phone** | ✅ | ✅ | 🚫 | ✅ |
|
|
65
|
+
| **Android tablet** | ✅ | ✅ | 🚫 | ✅ |
|
|
66
|
+
| **Web (Browser)** | ✅ | ✅ | ✅ | 🚫 |
|
|
67
|
+
| **iOS (iPhone/iPad)** | ✅ | 🚫 | ✅ | ✅ |
|
|
68
|
+
|
|
69
|
+
### Supported triggers
|
|
70
|
+
|
|
71
|
+
Input handling is achieved through various mechanisms on each platform:
|
|
72
|
+
|
|
73
|
+
|---|---|---|---|
|
|
74
|
+
| **Trigger** | **Android Phone** | **Web (Browser)** | **iOS (iPhone/iPad)** |
|
|
75
|
+
| **Keyboard back button** | ✅ Back | ❓ | ✅ Back |
|
|
76
|
+
| **Software back button** | 🚫 | ✅ Back | ✅ Back |
|
|
77
|
+
| **Software up button** | ✅ Up | 🚫 | 🚫 |
|
|
78
|
+
| **Gesture from left** | ✅ Back | ❓ | ✅ Back |
|
|
79
|
+
| **Gesture from right** | ✅ Back | ❓ | ✅ Forward |
|
|
80
|
+
| **Gesture from bottom** | ✅ Home | 🚫 | ✅ Home |
|
|
81
|
+
|
|
82
|
+
> [!NOTE]
|
|
83
|
+
> **Note:** The **Web** platform has unique navigation handling, where the browser controls the back stack state. This requires synchronization between the browser window and the application's navigation stack. The question mark represents behavior that is inconsistent because web browsers don't have a single, unified "back" button or gesture.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
To set up your development environment for `NavigationEvent`, follow these
|
|
2
|
+
steps.
|
|
3
|
+
|
|
4
|
+
## Declare dependencies
|
|
5
|
+
|
|
6
|
+
1. Add the `navigationevent` artifact to your project. This is the core library
|
|
7
|
+
containing the shared `NavigationEventDispatcher` and `NavigationEventHandler`
|
|
8
|
+
classes.
|
|
9
|
+
|
|
10
|
+
For Jetpack Compose integration, you also need to add the corresponding
|
|
11
|
+
Compose artifact:
|
|
12
|
+
|
|
13
|
+
[versions]
|
|
14
|
+
navigationevent = "1.0.0"
|
|
15
|
+
|
|
16
|
+
[libraries]
|
|
17
|
+
# NavigationEvent libraries
|
|
18
|
+
androidx-navigationevent = { module = "androidx.navigationevent:navigationevent", version.ref = "navigationevent" }
|
|
19
|
+
androidx-navigationevent-compose = { module = "androidx.navigationevent:navigationevent-compose", version.ref = "navigationevent" }
|
|
20
|
+
|
|
21
|
+
2. Update your compile SDK to 36 or above:
|
|
22
|
+
|
|
23
|
+
[versions]
|
|
24
|
+
compileSdk = "36"
|
|
25
|
+
|
|
26
|
+
3. Add the following to your app build file, `app/build.gradle.kts`:
|
|
27
|
+
|
|
28
|
+
dependencies {
|
|
29
|
+
...
|
|
30
|
+
implementation(libs.androidx.navigationevent)
|
|
31
|
+
implementation(libs.androidx.navigationevent.compose)
|
|
32
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: android-play-billing-library-version-upgrade
|
|
3
|
+
description: Use this skill when upgrading or migrating an Android project from any
|
|
4
|
+
legacy Google Play Billing Library (PBL) version to the latest stable version of
|
|
5
|
+
PBL.
|
|
6
|
+
license: Apache-2.0
|
|
7
|
+
source: https://github.com/android/skills
|
|
8
|
+
routing: manual
|
|
9
|
+
stacks: [android]
|
|
10
|
+
metadata:
|
|
11
|
+
author: Google LLC
|
|
12
|
+
last-updated: '2026-09-01'
|
|
13
|
+
keywords:
|
|
14
|
+
- android
|
|
15
|
+
- play billing
|
|
16
|
+
- play billing library
|
|
17
|
+
- pbl
|
|
18
|
+
- upgrade
|
|
19
|
+
- migration
|
|
20
|
+
- deprecation
|
|
21
|
+
- google play
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Phase 0: Intent Message
|
|
25
|
+
|
|
26
|
+
**Reporting Action**: Before proceeding, immediately tell the user: "I will
|
|
27
|
+
upgrade Play Billing Library to the latest version."
|
|
28
|
+
|
|
29
|
+
## Phase 1: Discovery \& Situational Awareness
|
|
30
|
+
|
|
31
|
+
1. **Primary Check (Build Version)** : Locate the project's billing dependency (e.g., `com.android.billingclient:billing`) in `build.gradle`, `build.gradle.kts`, or `libs.versions.toml`.
|
|
32
|
+
2. **Initial Compilation Test**: Attempt to sync and build the project immediately.
|
|
33
|
+
3. **Fallback Discovery (Effective Version)** :
|
|
34
|
+
- **Trigger**: Only if the build fails immediately, scan the source code for deprecated artifacts.
|
|
35
|
+
- **Logic** : The presence of deprecated APIs indicates the **"Effective
|
|
36
|
+
Version"** ---defined as the version where those specific APIs were **last
|
|
37
|
+
available**, not when they were introduced.
|
|
38
|
+
- **Example** : If `SkuDetails` is present, treat the baseline as **PBL v7** or earlier (regardless of the version string in `build.gradle`).
|
|
39
|
+
4. **Identify Target \& Path** : Access the version tool or release notes to find the latest stable version and calculate a \[Direct/Stepped\] migration path based on the **Effective Version** baseline.
|
|
40
|
+
|
|
41
|
+
- **Calculate Migration Path** :
|
|
42
|
+
- If the **Effective Version** is within 2 major versions of the target: Plan a **Direct Migration**.
|
|
43
|
+
- If it is more than 2 major versions behind: Plan a **Stepped
|
|
44
|
+
Migration**. Migrate by two major versions at a time (e.g., v4 -\> v6 -\> v8) until you are within two versions of the target.
|
|
45
|
+
- **Reporting Action**: Before proceeding, tell the user: "I've detected you are effectively on PBL \[Current\] and the latest is \[Target\]. I am planning a \[direct/stepped\] migration path."
|
|
46
|
+
|
|
47
|
+
## Phase 2: Contextual Document Mapping \& Planning
|
|
48
|
+
|
|
49
|
+
For every major version jump identified in your path, you **MUST** synthesize
|
|
50
|
+
instructions from:
|
|
51
|
+
|
|
52
|
+
- **[Migration Guide](https://developer.android.com/google/play/billing/migrate-gpblv%5BX%5D)** (where `[X]` is the target major version).
|
|
53
|
+
- **Release Highlights** : The "Deprecations" and "Breaking Changes" sections of the relevant [Release Notes](references/android/google/play/billing/release-notes.md).
|
|
54
|
+
- **Developer Documentation**: Consult your knowledge of the Google Play Billing documentation regarding the relevant features used in this app (e.g., Subscriptions, One-Time Products).
|
|
55
|
+
- **Develop the Plan**: Identify every specific code change required (API removals, class replacements, logic shifts) and print this out as a checklist.
|
|
56
|
+
|
|
57
|
+
## Phase 3: Instructions for Execution
|
|
58
|
+
|
|
59
|
+
*Reporting Action: For each of the following steps, give a brief explanation of
|
|
60
|
+
what you will be doing prior to execution, and a brief summary of what you
|
|
61
|
+
accomplished afterwards.*
|
|
62
|
+
|
|
63
|
+
### Step 1: SDK \& Environment Alignment
|
|
64
|
+
|
|
65
|
+
- **Action** : Update `build.gradle` to meet SDK requirements (e.g., "PBL 9 requires `compileSdk` 35").
|
|
66
|
+
- **Gradle Version**: Verify if the new library requires a newer Android Gradle Plugin (AGP) or Kotlin version.
|
|
67
|
+
|
|
68
|
+
### Step 2: Intent-based Refactoring
|
|
69
|
+
|
|
70
|
+
Analyze the intent of the existing code rather than performing purely textual
|
|
71
|
+
string replacement.
|
|
72
|
+
|
|
73
|
+
- **Action** : You **MUST** follow all deprecation instructions and refactor patterns from **both** the [references/migration-logic.md](references/migration-logic.md) section, the official migration guides, and the general documentation pages identified in Phase 2.
|
|
74
|
+
- **Verification** : Verify you are doing **all steps from all documentation** and then making sure you follow the specific directions from the checklist in the references.
|
|
75
|
+
|
|
76
|
+
### Step 3: Sequential Verification (Only applicable for Stepped Migrations)
|
|
77
|
+
|
|
78
|
+
1. **Upgrade** to the first major intermediate version in your path.
|
|
79
|
+
2. **Run `./gradlew assembleDebug`** to verify no intermediate breaking changes were missed.
|
|
80
|
+
3. **Repeat** until you reach the final target version.
|
|
81
|
+
|
|
82
|
+
### Step 4: Final Validation Checklist
|
|
83
|
+
|
|
84
|
+
1. **Smart Checklist Verification**:
|
|
85
|
+
2. Open [references/version-checklist.md](references/version-checklist.md) and locate the **Smart Version-Specific Checklist**.
|
|
86
|
+
3. **Action**: For every version between your \[Detected Effective Version\] and \[Detected New Version\], verify that every item has been addressed in the code using "Find in Files" or structural analysis.
|
|
87
|
+
4. **Tests** : Run all unit and implementation tests (`./gradlew test`).
|
|
88
|
+
5. **Clean Build** : Verify the project completes a full clean build: `./gradlew clean assembleDebug`. Then, run `./gradlew sync` and `./gradlew build` so that the user can immediately test the new version manually.
|
|
89
|
+
|
|
90
|
+
## Final Report
|
|
91
|
+
|
|
92
|
+
Explain the "Why" to the developer:
|
|
93
|
+
|
|
94
|
+
- "I updated your SDK to \[Version\] because PBL \[Version\] requires it for \[Reason from docs\]."
|
|
95
|
+
- "I removed your custom `retryConnection()` logic because it is now handled natively by the library using `enableAutoServiceReconnection()`."
|
|
96
|
+
- "Successfully upgraded from PBL \[Old\] to PBL \[New\] and verified with unit tests. Based on an analysis of features in the latest library and this application's current feature set, I suggest exploring \[New Feature\] (e.g., Prepaid Plans or Installments) from the latest release because it is now available but not yet implemented."
|