#149 by GitHub stars
android/skills
Upgrades, or migrates, an Android project to use Android Gradle Plugin (AGP) version 9. Do not use this skill for migrating Kotlin Multiplatform (KMP) projects.
History
Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.
View weekly changes
build-system/agp/agp-9-upgrade/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
45fd1739a4db → 6daa53ef27fa
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 45fd1739a4db
No earlier version was observed for comparison.
camera/camerax/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
45fd1739a4db → 6daa53ef27fa
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 45fd1739a4db
No earlier version was observed for comparison.
cars/android-for-cars-parked-apps/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
45fd1739a4db → 6daa53ef27fa
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 45fd1739a4db
No earlier version was observed for comparison.
device-ai/appfunctions/SKILL.md
Week of Nov 2, 2026 · +25 / −17 lines
Before Network or broad shell → After Network or broad shell
45fd1739a4db → 6daa53ef27fa
- 3 description: Analyzes Android apps to identify key user workflows for AppFunctions
- 4 such as creating a note, playing media, or sending an automated or AI agent triggered
- 5 message, voice commands, or system shortcuts, without needing to open the app UI.
- 6 Generates Kotlin code to expose these workflows to the Android system, allowing
- 7 agents to discover and execute them on-device. Also refines KDoc documentation to
- 8 ensure AI agents correctly understand and use the provided functionality.
+ 3 description: Analyzes Android apps to find user workflows to expose as AppFunctions,
+ 4 such as creating a note, playing media, or sending a message. AI agents, voice commands,
+ 5 and system shortcuts then run them without opening the app UI. Generates Kotlin
+ 6 code with the androidx.appfunctions library, and refines KDoc and the app description
+ 7 so that agents choose and call functions correctly. Use this skill when discovering,
+ 8 implementing, documenting, testing, or upgrading AppFunctions in an Android app,
+ 9 including @AppFunctionDeclaration, @AppFunctionSerializable, @AppFunctionServiceEntryPoint,
+ 10 AppFunctionService, app_metadata.xml, appfn:instructions, adb shell cmd app_function,
+ 11 and legacy @AppFunction or AppFunctionConfiguration.Provider code. Don't use for
+ 12 building agents that call AppFunctions or for remote MCP servers.
- 12 last-updated: '2026-10-25'
+ 16 last-updated: '2026-10-28'
- 23 Analyzes Android apps to identify key user workflows for AppFunctions such as
- 24 creating a note, playing media, or sending an automated or AI agent triggered
- 25 message, voice commands, or system shortcuts, without needing to open the app
- 26 UI.
+ 27 Analyzes Android apps to identify key user workflows to expose as AppFunctions,
+ 28 such as creating a note, playing media, or sending a message, for AI agents,
+ 29 voice commands, and system shortcuts to run without opening the app UI.
- 31 Also refines KDoc documentation to ensure AI agents correctly
+ 34 Also refines KDoc documentation and the app description so AI agents correctly
+ 43 Use `androidx.appfunctions:appfunctions` and the KSP compiler
+ 44 `androidx.appfunctions:appfunctions-compiler`, version 1.0.0-beta01 or later.
- 51 - *[Step 3: KDoc refinement](references/kdoc-refinement-optimization.md)*: Optimize AppFunction KDoc for AI agents and Model Context Protocol. If a user asks to "write KDoc", "optimize for MCP", or "refactor tool descriptions for LLMs", use this step.
+ 56 - *[Step 3: KDoc refinement](references/kdoc-refinement-optimization.md)*: Optimize AppFunction KDoc and the app description for AI agents and Model Context Protocol. If a user asks to "write KDoc", "optimize for MCP", or "refactor tool descriptions for LLMs", use this step.
- 54 If users request a subset of steps, you must encourage them to use all steps.
+ 59 When the user asks for a subset of the steps, run those steps and any step
+ 60 that the critical constraints require. Then list the skipped steps and ask
+ 61 whether to run them.
- 59 - *[Migration to service entry point](references/migrate-to-service-entry-point.md)* : Documents the systematic procedure for migrating Android applications using AppFunctions versions 1.0.0-alpha09 and lower to `AppFunctionServiceEntryPoint` architecture introduced in version 1.0.0-alpha10. Load when a user asks to migrate or upgrade existing AppFunctions code, or when you encounter legacy `AppFunctionConfiguration.Provider` implementations.
+ 66 - *[Migration to service entry point](references/migrate-to-service-entry-point.md)* : Migrates apps on AppFunctions 1.0.0-alpha09 or lower to the `AppFunctionServiceEntryPoint` architecture from 1.0.0-alpha10, and upgrades apps to 1.0.0-beta01. Load it when a user asks to migrate or upgrade existing AppFunctions code. When you find legacy `AppFunctionConfiguration.Provider` implementations, `@AppFunction` annotations, or `appfn:description` attributes, load it and ask the user before you migrate.
- 64 - **Security**: Don't expose sensitive data or run destructive actions without user confirmation.
+ 71 - **Security**: Expose only safe, non-destructive tasks that the app's UI already offers on that form factor. Never give agents wide-ranging access to user data or system resources. Never require or return passwords, financial details, private keys, or other highly sensitive personal information.
+ 72 - **Descriptions**: Describe what each function does, never how an agent must behave. Put call order across functions in the app description, not in function KDoc.
- 71 - If you encounter issues when upgrading legacy configurations, see [Migration to service entry point](references/migrate-to-service-entry-point.md).
+ 79 - If you encounter issues when upgrading AppFunctions, such as errors on `@AppFunction`, which is no longer an annotation, see [Migration to service entry point](references/migrate-to-service-entry-point.md).
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 45fd1739a4db
No earlier version was observed for comparison.
device-ai/litert/litert-lm/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
45fd1739a4db → 6daa53ef27fa
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 45fd1739a4db
No earlier version was observed for comparison.
device-ai/litert/litert-runtime/SKILL.md
Week of Nov 2, 2026 · +28 / −4 lines
Before Network or broad shell → After Network or broad shell
45fd1739a4db → 6daa53ef27fa
- 14 last-updated: '2026-10-23'
+ 14 last-updated: '2026-10-28'
- 401 5. **Rewrite the inference code** : Replace `Interpreter` and `FileUtil.loadMappedFile` with the `Classifier` helper of Step 2, created and run only on the single-thread executor of Step 3, never in a constructor that the main thread calls. When no caller retries on the CPU as in Step 3, create the helper's GPU option with the CPU as a second accelerator (`CompiledModel.Options(Accelerator.GPU, Accelerator.CPU)`).
- 402 6. **Verify in two stages**: The build passes and the searches for legacy references print nothing; then the migrated output matches the golden output on a device.
- 403 7. **Report what changed and what didn't migrate** : When the app used NNAPI, tell the user that it now runs on the GPU with the CPU as a second accelerator, which changes the speed and the numerical results of a quantized model that ran on a DSP or an NPU before; point them to [NPU acceleration with LiteRT](https://ai.google.dev/edge/litert/next/npu) for the NPU. Tell the user about the TensorFlow Lite Task Library, C++ modules, and Select TensorFlow operators, which this skill doesn't migrate.
+ 401 5. **Rewrite the inference code** : Replace `Interpreter` and
+ 402 `FileUtil.loadMappedFile` with the `Classifier` helper of Step 2, created and
+ 403 run only on the single-thread executor of Step 3, never in a constructor
+ 404 that the main thread calls. When no caller retries on the CPU as in Step 3,
+ 405 create the helper's GPU option with the CPU as a second accelerator
+ 406 (`CompiledModel.Options(Accelerator.GPU, Accelerator.CPU)`). An
+ 407 `interpreter.runSignature(inputs, outputs, key)` call becomes the helper's
+ 408 buffers and `run` call with the signature key, as follows. This form runs on
+ 409 both runtimes, also after the app changes runtime or upgrades LiteRT; when
+ 410 the signature has more than one input or output, you must follow the
+ 411 signature rules in [migration](references/migration.md):
+ 412
+ 413 inputs += model.createInputBuffers("serving_default")
+ 414 outputs += model.createOutputBuffers("serving_default")
+ 415 model.run(inputs, outputs, "serving_default")
+ 416
+ 417 6. **Verify in two stages**: The build passes and the searches for legacy
+ 418 references print nothing; then the migrated output matches the golden
+ 419 output on a device.
+ 420
+ 421 7. **Report what changed and what didn't migrate** : When the app used NNAPI,
+ 422 tell the user that it now runs on the GPU with the CPU as a second
+ 423 accelerator, which changes the speed and the numerical results of a
+ 424 quantized model that ran on a DSP or an NPU before; point them to
+ 425 [NPU acceleration with LiteRT](https://ai.google.dev/edge/litert/next/npu) for the NPU. Tell the user about the
+ 426 TensorFlow Lite Task Library, C++ modules, and Select TensorFlow operators,
+ 427 which this skill doesn't migrate.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 45fd1739a4db
No earlier version was observed for comparison.
device-ai/ml-kit-genai-prompt-api/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
45fd1739a4db → 6daa53ef27fa
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 45fd1739a4db
No earlier version was observed for comparison.
device-ai/mlkit-agent-api/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
45fd1739a4db → 6daa53ef27fa
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 45fd1739a4db
No earlier version was observed for comparison.
devtools/android-cli/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
45fd1739a4db → 6daa53ef27fa
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 45fd1739a4db
No earlier version was observed for comparison.
identity/restore-credentials/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
45fd1739a4db → 6daa53ef27fa
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 45fd1739a4db
No earlier version was observed for comparison.
identity/verified-email/SKILL.md
Week of Nov 2, 2026 · +3 / −3 lines
Before Network or broad shell → After Network or broad shell
45fd1739a4db → 6daa53ef27fa
- 11 last-updated: '2026-09-16'
+ 11 last-updated: '2026-10-28'
- 123 [Digital Credentials Verifier API](references/android/identity/digital-credentials/credential-verifier.md) through an [OpenID for Verifiable
+ 123 [Digital Credentials Verifier API](https://developer.android.com/identity/digital-credentials/credential-verifier) through an [OpenID for Verifiable
- 347 > **Important:** We highly recommend that after receiving the verified email, you trigger Credential Manager's [passkey creation](https://developer.android.com/identity/credential-manager/passkeys/create-passkeys).
+ 347 > **Important:** We highly recommend that after receiving the verified email, you trigger Credential Manager's [passkey creation](references/android/identity/passkeys/create-passkeys.md).
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 45fd1739a4db
No earlier version was observed for comparison.
jetpack-compose/adaptive/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
45fd1739a4db → 6daa53ef27fa
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 45fd1739a4db
No earlier version was observed for comparison.
jetpack-compose/ink/ink-app-builder/SKILL.md
Week of Nov 2, 2026 · +1 / −1 lines
Before Network or broad shell → After Network or broad shell
45fd1739a4db → 6daa53ef27fa
- 14 last-updated: '2026-10-24'
+ 14 last-updated: '2026-10-28'
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 45fd1739a4db
No earlier version was observed for comparison.
jetpack-compose/ink/ink-custom-brush-builder/SKILL.md
Week of Nov 2, 2026 · +1 / −1 lines
Before Network or broad shell → After Network or broad shell
45fd1739a4db → 6daa53ef27fa
- 15 last-updated: '2026-10-24'
+ 15 last-updated: '2026-10-28'
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 45fd1739a4db
No earlier version was observed for comparison.
jetpack-compose/jetpack-compose-performance/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
45fd1739a4db → 6daa53ef27fa
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 45fd1739a4db
No earlier version was observed for comparison.
jetpack-compose/migration/migrate-xml-views-to-jetpack-compose/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
45fd1739a4db → 6daa53ef27fa
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 45fd1739a4db
No earlier version was observed for comparison.
media/media3-cast-integration/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
45fd1739a4db → 6daa53ef27fa
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 45fd1739a4db
No earlier version was observed for comparison.
navigation/navigation-3/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
45fd1739a4db → 6daa53ef27fa
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 45fd1739a4db
No earlier version was observed for comparison.
navigation/navigation-event/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
45fd1739a4db → 6daa53ef27fa
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 45fd1739a4db
No earlier version was observed for comparison.
performance/anr-audit-and-fix/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
45fd1739a4db → 6daa53ef27fa
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 45fd1739a4db
No earlier version was observed for comparison.
performance/r8-analyzer/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
45fd1739a4db → 6daa53ef27fa
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 45fd1739a4db
No earlier version was observed for comparison.
play/engage-sdk-integration/SKILL.md
Week of Nov 2, 2026 · +1 / −1 lines
Before Network or broad shell → After Network or broad shell
45fd1739a4db → 6daa53ef27fa
- 9 last-updated: '2026-10-17'
+ 9 last-updated: '2026-10-28'
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 45fd1739a4db
No earlier version was observed for comparison.
play/play-billing-library-version-upgrade/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
45fd1739a4db → 6daa53ef27fa
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 45fd1739a4db
No earlier version was observed for comparison.
play/play-policy-insights/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
45fd1739a4db → 6daa53ef27fa
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 45fd1739a4db
No earlier version was observed for comparison.
profilers/android-profiler/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
45fd1739a4db → 6daa53ef27fa
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 45fd1739a4db
No earlier version was observed for comparison.
security/android-intent-security/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
45fd1739a4db → 6daa53ef27fa
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 45fd1739a4db
No earlier version was observed for comparison.
security/android-permissions-security/SKILL.md
Week of Nov 2, 2026 · +6 / −6 lines
Before Network or broad shell → After Network or broad shell
45fd1739a4db → 6daa53ef27fa
- 10 last-updated: '2026-10-22'
+ 10 last-updated: '2026-10-28'
- 63 | **Weak Custom Permission Protection** | `AndroidManifest.xml` with `android:protectionLevel="normal"`, `"dangerous"`, or `"signatureOrSystem"` | Unauthorized apps request or claim permission without restriction | Upgrade to `signature` or `signature|knownSigner` with `android:knownCerts`. |
+ 63 | **Weak Custom Permission Protection** | `AndroidManifest.xml` with `android:protectionLevel="normal"`, `"dangerous"`, or `"signatureOrSystem"` | Unauthorized apps request or claim permission without restriction | Upgrade to `signature` or `signature` with `knownSigner` and `android:knownCerts`. |
- 65 | **Missing ContentProvider Split Permissions** | `<provider>` with only generic `android:permission` or missing `android:readPermission` and `android:writePermission` | Read-only callers execute write operations or write-only callers access read operations | Configure granular `android:readPermission="...READ_DATA"` and `android:writePermission="...WRITE_DATA"`, AND declare the custom `<permission>` tags with `android:protectionLevel="signature"` (or `signature|knownSigner`) at the `<manifest>` root. |
+ 65 | **Missing ContentProvider Split Permissions** | `<provider>` with only generic `android:permission` or missing `android:readPermission` and `android:writePermission` | Read-only callers execute write operations or write-only callers access read operations | Configure granular `android:readPermission="...READ_DATA"` and `android:writePermission="...WRITE_DATA"`, AND declare the custom `<permission>` tags with `android:protectionLevel="signature"` (or `signature` with `knownSigner`) at the `<manifest>` root. |
- 145 - *Persist access* : The receiving app calls `contentResolver.takePersistableUriPermission(uri, modeFlags)` for durable access across reboots.
+ 145 - *Persist and release access* : The receiving app calls `contentResolver.takePersistableUriPermission(uri, modeFlags)` for durable access across reboots, and `contentResolver.releasePersistableUriPermission(uri, modeFlags)` when durable access is no longer needed.
- 147 - *Revoke access* : Call `context.revokeUriPermission(uri, modeFlags)` or `contentResolver.releasePersistableUriPermission(uri, modeFlags)` as soon as operations conclude.
+ 147 - *Revoke temporary access* : Call `context.revokeUriPermission(targetPackage, uri, modeFlags)` (API 26+), falling back to `context.revokeUriPermission(uri, modeFlags)` on API 25 and lower so access fails closed as soon as operations conclude.
- 366 2. **Check Rationale** : `shouldShowRequestPermissionRationale(permission)` to present educational context before requesting.
+ 366 2. **Check Rationale** : When `shouldShowRequestPermissionRationale(permission)` returns `true`, show a rationale dialog and launch the permission request only from its Continue button.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 45fd1739a4db
No earlier version was observed for comparison.
system/edge-to-edge/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
45fd1739a4db → 6daa53ef27fa
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 45fd1739a4db
No earlier version was observed for comparison.
system/glance-appwidget-updates-and-memory/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
45fd1739a4db → 6daa53ef27fa
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 45fd1739a4db
No earlier version was observed for comparison.
system/glance-canonical-layouts/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
45fd1739a4db → 6daa53ef27fa
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 45fd1739a4db
No earlier version was observed for comparison.
testing/testing-setup/SKILL.md
Week of Nov 2, 2026 · +1 / −1 lines
Before Network or broad shell → After Network or broad shell
45fd1739a4db → 6daa53ef27fa
- 9 last-updated: '2026-10-23'
+ 9 last-updated: '2026-10-28'
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 45fd1739a4db
No earlier version was observed for comparison.
tv/leanback-to-compose-tv-migration/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
45fd1739a4db → 6daa53ef27fa
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 45fd1739a4db
No earlier version was observed for comparison.
wear/wear-compose-m3/SKILL.md
Week of Nov 2, 2026 · +1 / −1 lines
Before Network or broad shell → After Network or broad shell
45fd1739a4db → 6daa53ef27fa
- 11 last-updated: '2026-10-24'
+ 11 last-updated: '2026-10-28'
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 45fd1739a4db
No earlier version was observed for comparison.
wear/wear-widgets/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
45fd1739a4db → 6daa53ef27fa
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 45fd1739a4db
No earlier version was observed for comparison.
xr/display-glasses-with-jetpack-compose-glimmer/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
45fd1739a4db → 6daa53ef27fa
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 45fd1739a4db
No earlier version was observed for comparison.
xr/projected-hardware/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
45fd1739a4db → 6daa53ef27fa
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 45fd1739a4db
No earlier version was observed for comparison.
Verified commit 6daa53ef27fa2aa87827d183a85c06cedceca833
git clone --filter=blob:none --no-checkout https://github.com/android/skills.git .hotskills/android-skills && git -C .hotskills/android-skills checkout --detach 6daa53ef27fa2aa87827d183a85c06cedceca833
# Copy each selected skill directory from .hotskills/android-skills into .claude/skills/<skill-name>/Heat
7.3- Star growth, last 7 daysAhead of 93% of tracked repositories
- Star growth, last 24 hoursAhead of 84% of tracked repositories
- Rank movement, last 7 daysAhead of 64% of tracked repositories
- Commits, last 30 daysAhead of 83% of tracked repositories
- Accounts asking about it through MCP, last 7 daysNot available
- Hot votes this weekAhead of 0% of tracked repositories
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
Individual skills in this repository
- agp-9-upgrade
build-system/agp/agp-9-upgrade - camerax
camera/camerax - android-for-cars-parked-apps
cars/android-for-cars-parked-apps - appfunctions
device-ai/appfunctions - litert-lm
device-ai/litert/litert-lm - litert-runtime
device-ai/litert/litert-runtime - ml-kit-genai-prompt-api
device-ai/ml-kit-genai-prompt-api - mlkit-agent-api
device-ai/mlkit-agent-api - android-cli
devtools/android-cli - restore-credentials
identity/restore-credentials - verified-email
identity/verified-email - adaptive
jetpack-compose/adaptive - ink-app-builder
jetpack-compose/ink/ink-app-builder - ink-custom-brush-builder
jetpack-compose/ink/ink-custom-brush-builder - jetpack-compose-performance
jetpack-compose/jetpack-compose-performance - migrate-xml-views-to-jetpack-compose
jetpack-compose/migration/migrate-xml-views-to-jetpack-compose - media3-cast-integration
media/media3-cast-integration - navigation-3
navigation/navigation-3 - navigation-event
navigation/navigation-event - anr-audit-and-fix
performance/anr-audit-and-fix - r8-analyzer
performance/r8-analyzer - engage-sdk-integration
play/engage-sdk-integration - play-billing-library-version-upgrade
play/play-billing-library-version-upgrade - play-policy-insights
play/play-policy-insights - android-profiler
profilers/android-profiler - android-intent-security
security/android-intent-security - android-permissions-security
security/android-permissions-security - edge-to-edge
system/edge-to-edge - glance-appwidget-updates-and-memory
system/glance-appwidget-updates-and-memory - glance-canonical-layouts
system/glance-canonical-layouts - testing-setup
testing/testing-setup - leanback-to-compose-tv-migration
tv/leanback-to-compose-tv-migration - wear-compose-m3
wear/wear-compose-m3 - wear-widgets
wear/wear-widgets - display-glasses-with-jetpack-compose-glimmer
xr/display-glasses-with-jetpack-compose-glimmer - projected-hardware
xr/projected-hardware
How it works
agp-9-upgrade
When your agent uses it
Upgrades, or migrates, an Android project to use Android Gradle Plugin (AGP) version 9. Do not use this skill for migrating Kotlin Multiplatform (KMP) projects.
What it loads into context
Frontmatter
130 tokensAlways available to the agent
SKILL.md
920 tokensWhen the skill is activated
Reference documents
844,644 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Migration guide
- Requirements
- Steps
- Guidelines
- Verification
- Troubleshooting
Scripts executed separately
../../../performance/r8-analyzer/scripts/analyze.py../../../performance/r8-analyzer/scripts/convert_pb_to_json.py../../../performance/r8-analyzer/scripts/keep_radius_pb2.py../../../play/play-policy-insights/scripts/generate_report.py../../../play/play-policy-insights/scripts/orchestrator.py../../../play/play-policy-insights/scripts/play_store_scraper.py../../../play/play-policy-insights/scripts/scanner.py../../../play/play-policy-insights/scripts/template_engine.py../../../profilers/android-profiler/references/perfetto/bin/trace_processor
Files
../../../.claude-plugin/marketplace.jsonasset898 bytes../../../.claude-plugin/plugin.jsonasset2,302 bytesSKILL.mdcore3,529 bytesSKILL.mdcore3,529 bytesreferences/android/build/migrate-to-built-in-kotlin.mddoc13,427 bytesreferences/android/build/releases/agp-9-0-0-release-notes.mddoc52,526 bytesreferences/buildconfig.mddoc1,500 bytesreferences/ksp-kapt.mddoc1,790 bytesreferences/paparazzi-gradle-9.mddoc1,164 bytesreferences/recipes.mddoc2,272 bytes../../../camera/camerax/SKILL.mddoc6,402 bytes../../../camera/camerax/references/camera1-to-camerax.mddoc5,513 bytes../../../camera/camerax/references/camera2-to-camerax.mddoc5,717 bytes../../../camera/camerax/references/expert-blueprints.mddoc2,199 bytes../../../camera/camerax/references/foldables.mddoc3,030 bytes../../../camera/camerax/references/immutability.mddoc1,704 bytes../../../camera/camerax/references/low-light.mddoc4,657 bytes../../../camera/camerax/references/mlkit-spatial.mddoc2,842 bytes../../../camera/camerax/references/modern-apis.mddoc2,052 bytes../../../camera/camerax/references/testing.mddoc2,605 bytes../../../camera/camerax/references/thermals.mddoc3,201 bytes../../../camera/camerax/references/wear-os.mddoc2,770 bytes../../../camera/camerax/references/xr.mddoc2,455 bytes../../../cars/android-for-cars-parked-apps/SKILL.mddoc17,862 bytes../../../cars/android-for-cars-parked-apps/references/android/docs/quality-guidelines/car-app-quality/index.mddoc55,421 bytes../../../device-ai/appfunctions/SKILL.mddoc5,715 bytes../../../device-ai/appfunctions/references/adb-interaction-testing.mddoc3,830 bytes../../../device-ai/appfunctions/references/context.mddoc1,614 bytes../../../device-ai/appfunctions/references/feature-discovery-analysis.mddoc3,297 bytes../../../device-ai/appfunctions/references/implementation-configuration.mddoc13,559 bytes../../../device-ai/appfunctions/references/kdoc-refinement-optimization.mddoc4,790 bytes../../../device-ai/appfunctions/references/migrate-to-service-entry-point.mddoc11,874 bytes../../../device-ai/litert/litert-lm/SKILL.mddoc18,290 bytes../../../device-ai/litert/litert-lm/references/android/google/play/on-device-ai.mddoc37,695 bytes../../../device-ai/litert/litert-lm/references/get-a-model.mddoc1,869 bytes../../../device-ai/litert/litert-runtime/SKILL.mddoc27,631 bytes../../../device-ai/litert/litert-runtime/references/android/google/play/on-device-ai.mddoc37,695 bytes../../../device-ai/litert/litert-runtime/references/migration.mddoc19,312 bytes../../../device-ai/litert/litert-runtime/references/play-services.mddoc11,109 bytes../../../device-ai/litert/litert-runtime/references/verify.mddoc2,457 bytes../../../device-ai/ml-kit-genai-prompt-api/SKILL.mddoc4,179 bytes../../../device-ai/ml-kit-genai-prompt-api/references/get-started.mddoc10,837 bytes../../../device-ai/ml-kit-genai-prompt-api/references/prefix-caching.mddoc5,821 bytes../../../device-ai/ml-kit-genai-prompt-api/references/prompt-design.mddoc3,573 bytes../../../device-ai/ml-kit-genai-prompt-api/references/prompt-optimization.mddoc4,649 bytes../../../device-ai/ml-kit-genai-prompt-api/references/structured-output.mddoc10,437 bytes../../../device-ai/ml-kit-genai-prompt-api/references/system-instructions.mddoc3,394 bytes../../../device-ai/mlkit-agent-api/SKILL.mddoc14,124 bytes../../../device-ai/mlkit-agent-api/references/session_lifecycle.mddoc3,035 bytes../../../device-ai/mlkit-agent-api/references/tools_and_functions.mddoc12,221 bytes../../../devtools/android-cli/SKILL.mddoc43,321 bytes../../../identity/restore-credentials/SKILL.mddoc25,330 bytes../../../identity/restore-credentials/references/android/guide/topics/manifest/application-element.mddoc43,070 bytes../../../identity/restore-credentials/references/android/identity/passkeys/create-passkeys.mddoc19,472 bytes../../../identity/restore-credentials/references/android/identity/passkeys/sign-in-with-passkeys.mddoc11,571 bytes../../../identity/verified-email/SKILL.mddoc20,346 bytes../../../identity/verified-email/references/android/identity/credential-manager/index.mddoc5,342 bytes../../../identity/verified-email/references/android/identity/digital-credentials/email-verification-implementation.mddoc14,924 bytes../../../identity/verified-email/references/android/identity/digital-credentials/email-verification.mddoc9,472 bytes../../../identity/verified-email/references/android/identity/digital-credentials/index.mddoc9,393 bytes../../../identity/verified-email/references/android/identity/passkeys/create-passkeys.mddoc19,472 bytes../../../identity/verified-email/references/android/identity/sign-in/credential-manager-webview.mddoc3,850 bytes../../../jetpack-compose/adaptive/SKILL.mddoc22,102 bytes../../../jetpack-compose/adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/container-behavior.mddoc9,349 bytes../../../jetpack-compose/adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/get-started.mddoc2,337 bytes../../../jetpack-compose/adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/index.mddoc5,987 bytes../../../jetpack-compose/adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/item-behavior.mddoc8,504 bytes../../../jetpack-compose/adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/container-properties.mddoc16,219 bytes../../../jetpack-compose/adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/get-started.mddoc1,849 bytes../../../jetpack-compose/adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/index.mddoc4,253 bytes../../../jetpack-compose/adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/item-properties.mddoc5,756 bytes../../../jetpack-compose/adaptive/references/android/develop/ui/compose/layouts/adaptive/mediaquery/index.mddoc14,161 bytes../../../jetpack-compose/adaptive/references/android/guide/navigation/navigation-3/recipes/material-listdetail.mddoc6,513 bytes../../../jetpack-compose/adaptive/references/android/guide/navigation/navigation-3/save-state.mddoc6,011 bytes../../../jetpack-compose/adaptive/references/android/studio/preview/compose-screenshot-testing-with-testsuites.mddoc7,507 bytes../../../jetpack-compose/adaptive/references/custom_cursors.mddoc4,351 bytes../../../jetpack-compose/adaptive/references/foldable-tabletop.mddoc3,875 bytes../../../jetpack-compose/adaptive/references/keyboard_shortcuts.mddoc6,166 bytes../../../jetpack-compose/adaptive/references/tooltips.mddoc4,266 bytes../../../jetpack-compose/ink/ink-app-builder/SKILL.mddoc15,618 bytes../../../jetpack-compose/ink/ink-app-builder/references/android/develop/ui/compose/touch-input/stylus-input/ink-api-brush-apis.mddoc5,135 bytes../../../jetpack-compose/ink/ink-app-builder/references/android/develop/ui/compose/touch-input/stylus-input/ink-api-draw-stroke.mddoc2,115 bytes../../../jetpack-compose/ink/ink-app-builder/references/android/develop/ui/compose/touch-input/stylus-input/ink-api-geometry-apis.mddoc1,238 bytes../../../jetpack-compose/ink/ink-app-builder/references/android/develop/ui/compose/touch-input/stylus-input/ink-api-setup.mddoc1,226 bytes../../../jetpack-compose/ink/ink-app-builder/references/android/develop/ui/compose/touch-input/stylus-input/ink-api-state-preservation.mddoc12,150 bytes../../../jetpack-compose/ink/ink-app-builder/references/drawing-and-brushes.mddoc9,197 bytes../../../jetpack-compose/ink/ink-app-builder/references/editing-and-architecture.mddoc10,463 bytes../../../jetpack-compose/ink/ink-app-builder/references/persistence-and-advanced.mddoc10,901 bytes../../../jetpack-compose/ink/ink-custom-brush-builder/SKILL.mddoc7,330 bytes../../../jetpack-compose/ink/ink-custom-brush-builder/references/android/develop/ui/compose/touch-input/stylus-input/ink-api-brush-apis.mddoc5,135 bytes../../../jetpack-compose/ink/ink-custom-brush-builder/references/brush-behaviors.mddoc11,043 bytes../../../jetpack-compose/ink/ink-custom-brush-builder/references/brush-structure.mddoc10,145 bytes../../../jetpack-compose/ink/ink-custom-brush-builder/references/examples.mddoc12,091 bytes../../../jetpack-compose/ink/ink-custom-brush-builder/references/textures-and-serialization.mddoc7,826 bytes../../../jetpack-compose/jetpack-compose-performance/SKILL.mddoc20,957 bytes../../../jetpack-compose/jetpack-compose-performance/references/android/develop/ui/compose/custom-modifiers.mddoc27,301 bytes../../../jetpack-compose/jetpack-compose-performance/references/android/develop/ui/compose/performance/backwards-write.mddoc12,248 bytes../../../jetpack-compose/jetpack-compose-performance/references/android/develop/ui/compose/performance/stability/strongskipping.mddoc6,743 bytes../../../jetpack-compose/jetpack-compose-performance/references/animation.mddoc8,169 bytes../../../jetpack-compose/jetpack-compose-performance/references/effects-and-threading.mddoc17,715 bytes../../../jetpack-compose/jetpack-compose-performance/references/graphics-performance.mddoc9,643 bytes../../../jetpack-compose/jetpack-compose-performance/references/layouts.mddoc9,041 bytes../../../jetpack-compose/jetpack-compose-performance/references/lazy-layouts.mddoc12,841 bytes../../../jetpack-compose/jetpack-compose-performance/references/state-and-stability.mddoc28,178 bytes../../../jetpack-compose/migration/migrate-xml-views-to-jetpack-compose/SKILL.mddoc5,434 bytes../../../jetpack-compose/migration/migrate-xml-views-to-jetpack-compose/references/analysis-of-the-project-and-layout.mddoc3,133 bytes../../../jetpack-compose/migration/migrate-xml-views-to-jetpack-compose/references/android/develop/ui/compose/designsystems/migrate-xml-theme-to-compose.mddoc8,259 bytes../../../jetpack-compose/migration/migrate-xml-views-to-jetpack-compose/references/android/develop/ui/compose/migrate/interoperability-apis/compose-in-views.mddoc12,304 bytes../../../jetpack-compose/migration/migrate-xml-views-to-jetpack-compose/references/android/develop/ui/compose/migrate/interoperability-apis/views-in-compose.mddoc12,529 bytes../../../jetpack-compose/migration/migrate-xml-views-to-jetpack-compose/references/android/develop/ui/compose/setup-compose-dependencies-and-compiler.mddoc7,517 bytes../../../jetpack-compose/migration/migrate-xml-views-to-jetpack-compose/references/identify-optimal-xml-candidate.mddoc1,667 bytes../../../jetpack-compose/migration/migrate-xml-views-to-jetpack-compose/references/xml-layout-migration.mddoc3,589 bytes../../../media/media3-cast-integration/SKILL.mddoc10,723 bytes../../../media/media3-cast-integration/references/android/media/media3/cast/create-castplayer.mddoc14,304 bytes../../../media/media3-cast-integration/references/android/media/media3/cast/customize-castoptions.mddoc2,958 bytes../../../media/media3-cast-integration/references/android/media/media3/cast/index.mddoc1,326 bytes../../../navigation/navigation-3/SKILL.mddoc6,686 bytes../../../navigation/navigation-3/references/android/guide/navigation/navigation-3/index.mddoc3,579 bytes../../../navigation/navigation-3/references/android/guide/navigation/navigation-3/migration-guide.mddoc27,098 bytes../../../navigation/navigation-3/references/android/guide/navigation/navigation-3/recipes/animations.mddoc6,525 bytes../../../navigation/navigation-3/references/android/guide/navigation/navigation-3/recipes/basic.mddoc3,587 bytes../../../navigation/navigation-3/references/android/guide/navigation/navigation-3/recipes/basicdsl.mddoc3,628 bytes../../../navigation/navigation-3/references/android/guide/navigation/navigation-3/recipes/basicsaveable.mddoc3,597 bytes../../../navigation/navigation-3/references/android/guide/navigation/navigation-3/recipes/bottomsheet.mddoc7,954 bytes../../../navigation/navigation-3/references/android/guide/navigation/navigation-3/recipes/common-ui.mddoc8,673 bytes../../../navigation/navigation-3/references/android/guide/navigation/navigation-3/recipes/conditional-transitions.mddoc8,577 bytes../../../navigation/navigation-3/references/android/guide/navigation/navigation-3/recipes/conditional.mddoc9,664 bytes../../../navigation/navigation-3/references/android/guide/navigation/navigation-3/recipes/deeplinks-custommatcher.mddoc7,228 bytes../../../navigation/navigation-3/references/android/guide/navigation/navigation-3/recipes/deeplinks-staticuri.mddoc5,597 bytes../../../navigation/navigation-3/references/android/guide/navigation/navigation-3/recipes/deeplinks-syntheticbackstack.mddoc7,920 bytes../../../navigation/navigation-3/references/android/guide/navigation/navigation-3/recipes/deeplinks-uriarguments.mddoc15,795 bytes../../../navigation/navigation-3/references/android/guide/navigation/navigation-3/recipes/dialog.mddoc4,494 bytes../../../navigation/navigation-3/references/android/guide/navigation/navigation-3/recipes/lifecycle-owner.mddoc8,354 bytes../../../navigation/navigation-3/references/android/guide/navigation/navigation-3/recipes/material-listdetail.mddoc6,513 bytes../../../navigation/navigation-3/references/android/guide/navigation/navigation-3/recipes/material-supportingpane.mddoc6,798 bytes../../../navigation/navigation-3/references/android/guide/navigation/navigation-3/recipes/modular-hilt.mddoc12,674 bytes../../../navigation/navigation-3/references/android/guide/navigation/navigation-3/recipes/modular-koin.mddoc13,661 bytes../../../navigation/navigation-3/references/android/guide/navigation/navigation-3/recipes/multiple-backstacks.mddoc16,966 bytes../../../navigation/navigation-3/references/android/guide/navigation/navigation-3/recipes/passingarguments.mddoc16,435 bytes../../../navigation/navigation-3/references/android/guide/navigation/navigation-3/recipes/results-event.mddoc10,053 bytes../../../navigation/navigation-3/references/android/guide/navigation/navigation-3/recipes/results-state.mddoc9,841 bytes../../../navigation/navigation-3/references/android/guide/navigation/navigation-3/recipes/scenes-listdetail.mddoc16,235 bytes../../../navigation/navigation-3/references/android/guide/navigation/navigation-3/recipes/scenes-twopane.mddoc9,343 bytes../../../navigation/navigation-3/references/android/guide/navigation/type-safe-destinations.mddoc4,220 bytes../../../navigation/navigation-event/SKILL.mddoc13,103 bytes../../../navigation/navigation-event/references/android/guide/navigation/navigation-event/dispatcher.mddoc4,372 bytes../../../navigation/navigation-event/references/android/guide/navigation/navigation-event/handle-back.mddoc7,355 bytes../../../navigation/navigation-event/references/android/guide/navigation/navigation-event/index.mddoc4,100 bytes../../../navigation/navigation-event/references/android/guide/navigation/navigation-event/setup.mddoc1,068 bytes../../../performance/anr-audit-and-fix/SKILL.mddoc1,757 bytes../../../performance/anr-audit-and-fix/references/anr_trace_report_template.mddoc1,934 bytes../../../performance/anr-audit-and-fix/references/risk_analysis_guide.mddoc7,085 bytes../../../performance/anr-audit-and-fix/references/trace_analysis_guide.mddoc11,878 bytes../../../performance/r8-analyzer/SKILL.mddoc6,311 bytes../../../performance/r8-analyzer/references/CONFIGURATION.mddoc2,309 bytes../../../performance/r8-analyzer/references/FULL_BUILD_CONFIG_ANALYZER.mddoc4,161 bytes../../../performance/r8-analyzer/references/INSPECT-RULES.mddoc10,139 bytes../../../performance/r8-analyzer/references/REPORT_FORMAT.mddoc4,124 bytes../../../performance/r8-analyzer/references/android/topic/performance/app-optimization/enable-app-optimization.mddoc16,659 bytes../../../performance/r8-analyzer/scripts/analyze.pyruns8,818 bytes../../../performance/r8-analyzer/scripts/convert_pb_to_json.pyruns2,365 bytes../../../performance/r8-analyzer/scripts/keep_radius_pb2.pyruns7,899 bytes../../../play/engage-sdk-integration/SKILL.mddoc9,493 bytes../../../play/engage-sdk-integration/references/android/guide/playcore/engage/faq.mddoc23,281 bytes../../../play/engage-sdk-integration/references/android/guide/playcore/engage/food.mddoc59,531 bytes../../../play/engage-sdk-integration/references/android/guide/playcore/engage/healthandfitness.mddoc63,525 bytes../../../play/engage-sdk-integration/references/android/guide/playcore/engage/listen.mddoc54,130 bytes../../../play/engage-sdk-integration/references/android/guide/playcore/engage/otherverticals.mddoc95,014 bytes../../../play/engage-sdk-integration/references/android/guide/playcore/engage/read.mddoc45,044 bytes../../../play/engage-sdk-integration/references/android/guide/playcore/engage/shopping.mddoc61,822 bytes../../../play/engage-sdk-integration/references/android/guide/playcore/engage/social.mddoc36,656 bytes../../../play/engage-sdk-integration/references/android/guide/playcore/engage/travel.mddoc104,709 bytes../../../play/engage-sdk-integration/references/android/guide/playcore/engage/tv/continue-watching/index.mddoc1,152 bytes../../../play/engage-sdk-integration/references/android/guide/playcore/engage/tv/entitlements.mddoc15,476 bytes../../../play/engage-sdk-integration/references/android/guide/playcore/engage/tv/getting-started.mddoc23,008 bytes../../../play/engage-sdk-integration/references/android/guide/playcore/engage/tv/recommendations.mddoc18,812 bytes../../../play/engage-sdk-integration/references/android/guide/playcore/engage/watch.mddoc61,289 bytes../../../play/engage-sdk-integration/references/clusters.mddoc6,006 bytes../../../play/engage-sdk-integration/references/common.mddoc18,327 bytes../../../play/engage-sdk-integration/references/patterns.mddoc21,784 bytes../../../play/engage-sdk-integration/references/requests.mddoc10,544 bytes../../../play/engage-sdk-integration/references/schemas/food.mddoc19,049 bytes../../../play/engage-sdk-integration/references/schemas/listen.mddoc30,595 bytes../../../play/engage-sdk-integration/references/schemas/other.mddoc8,238 bytes../../../play/engage-sdk-integration/references/schemas/read.mddoc15,326 bytes../../../play/engage-sdk-integration/references/schemas/shopping.mddoc13,819 bytes../../../play/engage-sdk-integration/references/schemas/social.mddoc8,688 bytes../../../play/engage-sdk-integration/references/schemas/travel.mddoc34,825 bytes../../../play/engage-sdk-integration/references/schemas/tv.mddoc48,052 bytes../../../play/engage-sdk-integration/references/schemas/watch.mddoc44,714 bytes../../../play/engage-sdk-integration/references/troubleshooting.mddoc3,733 bytes../../../play/play-billing-library-version-upgrade/SKILL.mddoc5,656 bytes../../../play/play-billing-library-version-upgrade/references/android/google/play/billing/release-notes.mddoc80,434 bytes../../../play/play-billing-library-version-upgrade/references/migration-logic.mddoc4,379 bytes../../../play/play-billing-library-version-upgrade/references/version-checklist.mddoc3,404 bytes../../../play/play-policy-insights/SKILL.mddoc8,521 bytes../../../play/play-policy-insights/resources/common_mandates.mddoc6,127 bytes../../../play/play-policy-insights/resources/compliance_report_template.mddoc3,204 bytes../../../play/play-policy-insights/resources/critic.mddoc4,293 bytes../../../play/play-policy-insights/resources/goal_data_safety.mddoc10,420 bytes../../../play/play-policy-insights/resources/goal_permissions_and_apis.mddoc26,352 bytes../../../play/play-policy-insights/resources/goal_user_account.mddoc5,262 bytes../../../play/play-policy-insights/resources/policies.jsonasset13,159 bytes../../../play/play-policy-insights/resources/scanner_config.jsonasset26,066 bytes../../../play/play-policy-insights/scripts/generate_report.pyruns28,402 bytes../../../play/play-policy-insights/scripts/orchestrator.pyruns46,010 bytes../../../play/play-policy-insights/scripts/play_store_scraper.pyruns12,303 bytes../../../play/play-policy-insights/scripts/scanner.pyruns9,055 bytes../../../play/play-policy-insights/scripts/template_engine.pyruns7,129 bytes../../../profilers/android-profiler/SKILL.mddoc2,269 bytes../../../profilers/android-profiler/analysis/analysis_orchestrator.mddoc1,491 bytes../../../profilers/android-profiler/analysis/workflows/perfetto-sql/perfetto_sql.mddoc969 bytes../../../profilers/android-profiler/analysis/workflows/perfetto-trace-analysis/perfetto_trace_analysis.mddoc4,305 bytes../../../profilers/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/hints_cpu.mddoc2,673 bytes../../../profilers/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/hints_graphics.mddoc2,177 bytes../../../profilers/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/hints_io.mddoc1,833 bytes../../../profilers/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/hints_ipc.mddoc1,776 bytes../../../profilers/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/hints_memory.mddoc2,282 bytes../../../profilers/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/hints_power.mddoc1,202 bytes../../../profilers/android-profiler/analysis/workflows/perfetto-trace-analysis/references/per_candidate_analysis.mddoc8,977 bytes../../../profilers/android-profiler/analysis/workflows/perfetto-trace-analysis/references/triage.mddoc3,988 bytes../../../profilers/android-profiler/recording/recording_orchestrator.mddoc1,576 bytes../../../profilers/android-profiler/recording/workflows/perfetto-trace-recording/perfetto_trace_recording.mddoc4,769 bytes../../../profilers/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/app_jank.pftxtasset1,040 bytes../../../profilers/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/cpu_profile.pftxtasset773 bytes../../../profilers/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/java_heap_dump.pftxtasset566 bytes../../../profilers/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/long_background.pftxtasset1,006 bytes../../../profilers/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/memory_counters.pftxtasset1,069 bytes../../../profilers/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/native_heap.pftxtasset589 bytes../../../profilers/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/sched_cpu.pftxtasset836 bytes../../../profilers/android-profiler/recording/workflows/perfetto-trace-recording/references/trace_config_reference.mddoc4,983 bytes../../../profilers/android-profiler/references/env_setup.mddoc513 bytes../../../profilers/android-profiler/references/perfetto/bin/trace_processorruns11,073 bytes../../../profilers/android-profiler/references/perfetto/setup.mddoc1,332 bytes../../../profilers/android-profiler/references/perfetto/sql.mddoc16,206 bytes../../../security/android-intent-security/SKILL.mddoc24,418 bytes../../../security/android-permissions-security/SKILL.mddoc29,205 bytes../../../security/android-permissions-security/references/android/guide/topics/manifest/permission-element.mddoc6,904 bytes../../../security/android-permissions-security/references/android/guide/topics/permissions/overview.mddoc10,610 bytes../../../security/android-permissions-security/references/android/privacy-and-security/risks/sender-of-pending-intents.mddoc3,819 bytes../../../security/android-permissions-security/references/android/training/permissions/requesting.mddoc38,838 bytes../../../system/edge-to-edge/SKILL.mddoc14,433 bytes../../../system/glance-appwidget-updates-and-memory/SKILL.mddoc21,297 bytes../../../system/glance-appwidget-updates-and-memory/references/AndroidManifest.xmlasset1,127 bytes../../../system/glance-appwidget-updates-and-memory/references/ClassicWidgetImageUpdater.ktasset2,028 bytes../../../system/glance-appwidget-updates-and-memory/references/FeedCollectionGlanceWidget.ktasset2,380 bytes../../../system/glance-appwidget-updates-and-memory/references/SampleGlanceWidget.ktasset4,063 bytes../../../system/glance-appwidget-updates-and-memory/references/WidgetBitmapUtils.ktasset4,485 bytes../../../system/glance-appwidget-updates-and-memory/references/WidgetStateAndActions.ktasset1,893 bytes../../../system/glance-appwidget-updates-and-memory/references/android/about/versions/17/behavior-changes-17.mddoc24,035 bytes../../../system/glance-appwidget-updates-and-memory/references/android/develop/ui/compose/glance/create-app-widget.mddoc22,264 bytes../../../system/glance-appwidget-updates-and-memory/references/android/develop/ui/views/appwidgets/index.mddoc9,750 bytes../../../system/glance-appwidget-updates-and-memory/references/proguard-rules.proasset98 bytes../../../system/glance-appwidget-updates-and-memory/references/res/xml/file_paths.xmlasset117 bytes../../../system/glance-appwidget-updates-and-memory/references/res/xml/sample_widget_info.xmlasset307 bytes../../../system/glance-canonical-layouts/SKILL.mddoc24,521 bytes../../../system/glance-canonical-layouts/references/ActionDemonstrationActivity.ktasset1,629 bytes../../../system/glance-canonical-layouts/references/CanonicalLayoutActivity.ktasset14,076 bytes../../../system/glance-canonical-layouts/references/CollectionsKtx.ktasset1,323 bytes../../../system/glance-canonical-layouts/references/collections/ActionListAppWidget.ktasset3,360 bytes../../../system/glance-canonical-layouts/references/collections/CheckListAppWidget.ktasset3,623 bytes../../../system/glance-canonical-layouts/references/collections/ImageGridAppWidget.ktasset3,393 bytes../../../system/glance-canonical-layouts/references/collections/ImageTextListAppWidget.ktasset3,519 bytes../../../system/glance-canonical-layouts/references/collections/data/FakeActionListDataRepository.ktasset4,606 bytes../../../system/glance-canonical-layouts/references/collections/data/FakeCheckListDataRepository.ktasset3,853 bytes../../../system/glance-canonical-layouts/references/collections/data/FakeImageGridDataRepository.ktasset8,375 bytes../../../system/glance-canonical-layouts/references/collections/data/FakeImageTextListDataRepository.ktasset7,330 bytes../../../system/glance-canonical-layouts/references/collections/layout/ActionListLayout.ktasset20,141 bytes../../../system/glance-canonical-layouts/references/collections/layout/CheckListLayout.ktasset17,067 bytes../../../system/glance-canonical-layouts/references/collections/layout/EmptyListContent.ktasset900 bytes../../../system/glance-canonical-layouts/references/collections/layout/ImageGridLayout.ktasset13,655 bytes../../../system/glance-canonical-layouts/references/collections/layout/ImageTextListLayout.ktasset17,444 bytes../../../system/glance-canonical-layouts/references/collections/layout/ListItem.ktasset3,168 bytes../../../system/glance-canonical-layouts/references/collections/layout/NoDataContent.ktasset2,765 bytes../../../system/glance-canonical-layouts/references/collections/layout/RoundedScrollingLazyColumn.ktasset2,875 bytes../../../system/glance-canonical-layouts/references/collections/layout/RoundedScrollingLazyVerticalGrid.ktasset4,354 bytes../../../system/glance-canonical-layouts/references/collections/layout/VerticalListItem.ktasset3,507 bytes../../../system/glance-canonical-layouts/references/res/drawable/four_side_cookie_background.xmlasset1,445 bytes../../../system/glance-canonical-layouts/references/res/drawable/sample_ac_icon.xmlasset1,385 bytes../../../system/glance-canonical-layouts/references/res/drawable/sample_add_icon.xmlasset315 bytes../../../system/glance-canonical-layouts/references/res/drawable/sample_app_logo.xmlasset1,120 bytes../../../system/glance-canonical-layouts/references/res/drawable/sample_arrow_right_icon.xmlasset365 bytes../../../system/glance-canonical-layouts/references/res/drawable/sample_bulb_icon.xmlasset651 bytes../../../system/glance-canonical-layouts/references/res/drawable/sample_camera_icon.xmlasset1,235 bytes../../../system/glance-canonical-layouts/references/res/drawable/sample_checked_circle_icon.xmlasset402 bytes../../../system/glance-canonical-layouts/references/res/drawable/sample_circle_icon.xmlasset415 bytes../../../system/glance-canonical-layouts/references/res/drawable/sample_delete_icon.xmlasset389 bytes../../../system/glance-canonical-layouts/references/res/drawable/sample_door_icon.xmlasset810 bytes../../../system/glance-canonical-layouts/references/res/drawable/sample_edit_icon.xmlasset520 bytes../../../system/glance-canonical-layouts/references/res/drawable/sample_file_upload_icon.xmlasset1,062 bytes../../../system/glance-canonical-layouts/references/res/drawable/sample_grid_icon.xmlasset968 bytes../../../system/glance-canonical-layouts/references/res/drawable/sample_heart_icon.xmlasset1,149 bytes../../../system/glance-canonical-layouts/references/res/drawable/sample_home_icon.xmlasset517 bytes../../../system/glance-canonical-layouts/references/res/drawable/sample_image_icon.xmlasset846 bytes../../../system/glance-canonical-layouts/references/res/drawable/sample_info_icon.xmlasset449 bytes../../../system/glance-canonical-layouts/references/res/drawable/sample_mic_icon.xmlasset1,284 bytes../../../system/glance-canonical-layouts/references/res/drawable/sample_no_data_icon.xmlasset546 bytes../../../system/glance-canonical-layouts/references/res/drawable/sample_pin_icon.xmlasset488 bytes../../../system/glance-canonical-layouts/references/res/drawable/sample_power_settings_icon.xmlasset499 bytes../../../system/glance-canonical-layouts/references/res/drawable/sample_refresh_icon.xmlasset490 bytes../../../system/glance-canonical-layouts/references/res/drawable/sample_scrim_gradient.xmlasset1,476 bytes../../../system/glance-canonical-layouts/references/res/drawable/sample_search_icon.xmlasset1,184 bytes../../../system/glance-canonical-layouts/references/res/drawable/sample_share_icon.xmlasset711 bytes../../../system/glance-canonical-layouts/references/res/drawable/sample_snooze_icon.xmlasset569 bytes../../../system/glance-canonical-layouts/references/res/drawable/sample_text_icon.xmlasset491 bytes../../../system/glance-canonical-layouts/references/res/drawable/sample_thermostat_icon.xmlasset937 bytes../../../system/glance-canonical-layouts/references/res/drawable/sample_videocam_icon.xmlasset1,066 bytes../../../system/glance-canonical-layouts/references/res/values/dimens.xmlasset8,589 bytes../../../system/glance-canonical-layouts/references/res/values/strings.xmlasset5,985 bytes../../../system/glance-canonical-layouts/references/res/xml/sample_action_list_widget_info.xmlasset1,753 bytes../../../system/glance-canonical-layouts/references/res/xml/sample_check_list_widget_info.xmlasset1,817 bytes../../../system/glance-canonical-layouts/references/res/xml/sample_expressive_toolbar_widget_info.xmlasset1,649 bytes../../../system/glance-canonical-layouts/references/res/xml/sample_full_bleed_image_widget_info.xmlasset1,432 bytes../../../system/glance-canonical-layouts/references/res/xml/sample_image_grid_widget_info.xmlasset1,744 bytes../../../system/glance-canonical-layouts/references/res/xml/sample_image_text_list_widget_info.xmlasset1,829 bytes../../../system/glance-canonical-layouts/references/res/xml/sample_long_text_widget_info.xmlasset1,511 bytes../../../system/glance-canonical-layouts/references/res/xml/sample_search_toolbar_widget_info.xmlasset1,584 bytes../../../system/glance-canonical-layouts/references/res/xml/sample_text_with_image_widget_info.xmlasset1,588 bytes../../../system/glance-canonical-layouts/references/res/xml/sample_toolbar_widget_info.xmlasset1,550 bytes../../../system/glance-canonical-layouts/references/text/FullBleedImageAppWidget.ktasset3,625 bytes../../../system/glance-canonical-layouts/references/text/LongTextAppWidget.ktasset3,160 bytes../../../system/glance-canonical-layouts/references/text/TextWithImageAppWidget.ktasset3,864 bytes../../../system/glance-canonical-layouts/references/text/data/FakeLongTextRespository.ktasset3,036 bytes../../../system/glance-canonical-layouts/references/text/data/FakeTextWithImageRepository.ktasset6,069 bytes../../../system/glance-canonical-layouts/references/text/layout/FullBleedImageLayout.ktasset7,884 bytes../../../system/glance-canonical-layouts/references/text/layout/LongTextLayout.ktasset12,115 bytes../../../system/glance-canonical-layouts/references/text/layout/TextWithImageLayout.ktasset17,290 bytes../../../system/glance-canonical-layouts/references/toolbars/ExpressiveToolbarAppWidget.ktasset3,815 bytes../../../system/glance-canonical-layouts/references/toolbars/SearchToolBarAppWidget.ktasset3,275 bytes../../../system/glance-canonical-layouts/references/toolbars/ToolBarAppWidget.ktasset3,504 bytes../../../system/glance-canonical-layouts/references/toolbars/layout/Buttons.ktasset4,752 bytes../../../system/glance-canonical-layouts/references/toolbars/layout/ExpressiveToolbarLayout.ktasset15,231 bytes../../../system/glance-canonical-layouts/references/toolbars/layout/LayoutComponents.ktasset5,693 bytes../../../system/glance-canonical-layouts/references/toolbars/layout/SearchToolBarLayout.ktasset14,998 bytes../../../system/glance-canonical-layouts/references/toolbars/layout/ToolBarLayout.ktasset16,248 bytes../../../system/glance-canonical-layouts/references/ui/theme/Color.ktasset313 bytes../../../system/glance-canonical-layouts/references/ui/theme/Theme.ktasset2,122 bytes../../../system/glance-canonical-layouts/references/ui/theme/Type.ktasset992 bytes../../../system/glance-canonical-layouts/references/utils/ActionUtils.ktasset780 bytes../../../system/glance-canonical-layouts/references/utils/FontUtils.ktasset3,573 bytes../../../system/glance-canonical-layouts/references/utils/ImageAspectRatio.ktasset1,063 bytes../../../system/glance-canonical-layouts/references/utils/ImageUtils.ktasset5,383 bytes../../../system/glance-canonical-layouts/references/utils/PreviewAnnotations.ktasset3,064 bytes../../../testing/testing-setup/SKILL.mddoc10,232 bytes../../../testing/testing-setup/references/android/develop/ui/compose/testing/common-patterns.mddoc15,215 bytes../../../testing/testing-setup/references/android/studio/preview/compose-screenshot-testing-with-testsuites.mddoc7,507 bytes../../../testing/testing-setup/references/android/studio/preview/compose-screenshot-testing.mddoc13,004 bytes../../../testing/testing-setup/references/android/training/dependency-injection/hilt-testing.mddoc14,864 bytes../../../tv/leanback-to-compose-tv-migration/SKILL.mddoc34,769 bytes../../../tv/leanback-to-compose-tv-migration/references/android/training/tv/get-started/navigation.mddoc17,347 bytes../../../tv/leanback-to-compose-tv-migration/references/android/training/tv/playback/compose/browse.mddoc9,942 bytes../../../tv/leanback-to-compose-tv-migration/references/android/training/tv/playback/compose/index.mddoc7,814 bytes../../../wear/wear-compose-m3/SKILL.mddoc39,165 bytes../../../wear/wear-compose-m3/references/android/training/wearables/compose/migrate-to-material3.mddoc91,192 bytes../../../wear/wear-compose-m3/references/foundation/AmbientModeSample.kt.mddoc5,141 bytes../../../wear/wear-compose-m3/references/foundation/CurvedWorldSample.kt.mddoc14,684 bytes../../../wear/wear-compose-m3/references/foundation/ExpandableSample.kt.mddoc3,708 bytes../../../wear/wear-compose-m3/references/foundation/HierarchicalFocusSample.kt.mddoc5,503 bytes../../../wear/wear-compose-m3/references/foundation/PagerSamples.kt.mddoc2,076 bytes../../../wear/wear-compose-m3/references/foundation/RotarySamples.kt.mddoc6,161 bytes../../../wear/wear-compose-m3/references/foundation/SwipeToDismissBoxSample.kt.mddoc7,493 bytes../../../wear/wear-compose-m3/references/foundation/TransformingLazyColumnSample.kt.mddoc13,194 bytes../../../wear/wear-compose-m3/references/material3/AlertDialogSample.kt.mddoc12,815 bytes../../../wear/wear-compose-m3/references/material3/AnimatedTextSample.kt.mddoc6,347 bytes../../../wear/wear-compose-m3/references/material3/ButtonGroupSample.kt.mddoc3,381 bytes../../../wear/wear-compose-m3/references/material3/ButtonSample.kt.mddoc17,413 bytes../../../wear/wear-compose-m3/references/material3/CardSample.kt.mddoc15,525 bytes../../../wear/wear-compose-m3/references/material3/CheckboxButtonSample.kt.mddoc2,368 bytes../../../wear/wear-compose-m3/references/material3/ConfirmationDialogSample.kt.mddoc5,511 bytes../../../wear/wear-compose-m3/references/material3/CurvedTextSamples.kt.mddoc2,930 bytes../../../wear/wear-compose-m3/references/material3/DatePickerSample.kt.mddoc4,845 bytes../../../wear/wear-compose-m3/references/material3/DynamicColorSchemeSample.kt.mddoc3,103 bytes../../../wear/wear-compose-m3/references/material3/EdgeButtonSample.kt.mddoc2,360 bytes../../../wear/wear-compose-m3/references/material3/FadingExpandingLabelSample.kt.mddoc2,185 bytes../../../wear/wear-compose-m3/references/material3/IconButtonSample.kt.mddoc3,973 bytes../../../wear/wear-compose-m3/references/material3/IconToggleButtonSample.kt.mddoc3,706 bytes../../../wear/wear-compose-m3/references/material3/LevelIndicatorSample.kt.mddoc2,556 bytes../../../wear/wear-compose-m3/references/material3/LinearProgressIndicatorSample.kt.mddoc1,812 bytes../../../wear/wear-compose-m3/references/material3/ListHeaderSample.kt.mddoc7,816 bytes../../../wear/wear-compose-m3/references/material3/OneHandedGestureSamples.kt.mddoc32,291 bytes../../../wear/wear-compose-m3/references/material3/OpenOnPhoneDialogSample.kt.mddoc2,045 bytes../../../wear/wear-compose-m3/references/material3/PageIndicatorSample.kt.mddoc4,237 bytes../../../wear/wear-compose-m3/references/material3/PagerScaffoldSample.kt.mddoc8,689 bytes../../../wear/wear-compose-m3/references/material3/PickerGroupSample.kt.mddoc5,980 bytes../../../wear/wear-compose-m3/references/material3/PickerSample.kt.mddoc3,734 bytes../../../wear/wear-compose-m3/references/material3/PlaceholderSample.kt.mddoc6,658 bytes../../../wear/wear-compose-m3/references/material3/ProgressIndicatorSample.kt.mddoc9,060 bytes../../../wear/wear-compose-m3/references/material3/RadioButtonSample.kt.mddoc4,254 bytes../../../wear/wear-compose-m3/references/material3/ScaffoldSample.kt.mddoc6,311 bytes../../../wear/wear-compose-m3/references/material3/ScrollAwaySample.kt.mddoc3,839 bytes../../../wear/wear-compose-m3/references/material3/ScrollIndicatorSample.kt.mddoc2,498 bytes../../../wear/wear-compose-m3/references/material3/SliderSample.kt.mddoc2,468 bytes../../../wear/wear-compose-m3/references/material3/StepperSample.kt.mddoc5,281 bytes../../../wear/wear-compose-m3/references/material3/SurfaceTransformationSample.kt.mddoc6,184 bytes../../../wear/wear-compose-m3/references/material3/SwipeToDismissBoxSample.kt.mddoc7,443 bytes../../../wear/wear-compose-m3/references/material3/SwipeToRevealSample.kt.mddoc14,017 bytes../../../wear/wear-compose-m3/references/material3/SwitchButtonSample.kt.mddoc2,311 bytes../../../wear/wear-compose-m3/references/material3/TextButtonSample.kt.mddoc3,029 bytes../../../wear/wear-compose-m3/references/material3/TextToggleButtonSample.kt.mddoc2,326 bytes../../../wear/wear-compose-m3/references/material3/TimePickerSample.kt.mddoc5,669 bytes../../../wear/wear-compose-m3/references/material3/TimeTextSample.kt.mddoc2,584 bytes../../../wear/wear-compose-m3/references/material3/TransformationSpecSample.kt.mddoc10,178 bytes../../../wear/wear-compose-m3/references/material3/TransformingLazyColumnNotificationsSample.kt.mddoc3,769 bytes../../../wear/wear-compose-m3/references/material3/TransformingLazyColumnSample.kt.mddoc13,321 bytes../../../wear/wear-compose-m3/references/navigation3/SwipeDismissableSceneStrategySample.kt.mddoc8,513 bytes../../../wear/wear-widgets/SKILL.mddoc12,839 bytes../../../wear/wear-widgets/references/previews-and-testing.mddoc5,569 bytes../../../wear/wear-widgets/references/remote-compose-layouts.mddoc8,157 bytes../../../wear/wear-widgets/references/state-and-actions.mddoc5,713 bytes../../../wear/wear-widgets/references/widget-service-and-manifest.mddoc4,644 bytes../../../xr/display-glasses-with-jetpack-compose-glimmer/SKILL.mddoc26,265 bytes../../../xr/display-glasses-with-jetpack-compose-glimmer/references/android/design/ui/ai-glasses/guides/interaction/inputs.mddoc4,667 bytes../../../xr/display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/access-hardware-projected-context.mddoc19,066 bytes../../../xr/display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/buttons.mddoc8,349 bytes../../../xr/display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/cards.mddoc6,930 bytes../../../xr/display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/focus.mddoc5,695 bytes../../../xr/display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/icons.mddoc4,123 bytes../../../xr/display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/text.mddoc2,800 bytes../../../xr/display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/title-chips.mddoc3,788 bytes../../../xr/display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/request-hardware-permissions.mddoc9,331 bytes../../../xr/display-glasses-with-jetpack-compose-glimmer/references/button-samples-source.mddoc5,066 bytes../../../xr/display-glasses-with-jetpack-compose-glimmer/references/button-source.mddoc9,966 bytes../../../xr/display-glasses-with-jetpack-compose-glimmer/references/card-samples-source.mddoc10,589 bytes../../../xr/display-glasses-with-jetpack-compose-glimmer/references/card-source.mddoc52,963 bytes../../../xr/display-glasses-with-jetpack-compose-glimmer/references/deptheffect-source.mddoc7,986 bytes../../../xr/display-glasses-with-jetpack-compose-glimmer/references/deptheffectlevels-source.mddoc4,190 bytes../../../xr/display-glasses-with-jetpack-compose-glimmer/references/glimmersansflextypography-source.mddoc11,526 bytes../../../xr/display-glasses-with-jetpack-compose-glimmer/references/glimmertheme-source.mddoc7,738 bytes../../../xr/display-glasses-with-jetpack-compose-glimmer/references/icon-source.mddoc17,247 bytes../../../xr/display-glasses-with-jetpack-compose-glimmer/references/iconbutton-source.mddoc4,960 bytes../../../xr/display-glasses-with-jetpack-compose-glimmer/references/iconsizes-source.mddoc2,371 bytes../../../xr/display-glasses-with-jetpack-compose-glimmer/references/list-source.mddoc713 bytes../../../xr/display-glasses-with-jetpack-compose-glimmer/references/listitem-source.mddoc11,455 bytes../../../xr/display-glasses-with-jetpack-compose-glimmer/references/liststate-source.mddoc18,231 bytes../../../xr/display-glasses-with-jetpack-compose-glimmer/references/material-hct-source.mddoc6,458 bytes../../../xr/display-glasses-with-jetpack-compose-glimmer/references/projectedcontext-source.mddoc13,251 bytes../../../xr/display-glasses-with-jetpack-compose-glimmer/references/stack-source.mddoc15,672 bytes../../../xr/display-glasses-with-jetpack-compose-glimmer/references/stackitemscope-source.mddoc16,578 bytes../../../xr/display-glasses-with-jetpack-compose-glimmer/references/stackstate-source.mddoc13,164 bytes../../../xr/display-glasses-with-jetpack-compose-glimmer/references/surface-source.mddoc33,121 bytes../../../xr/display-glasses-with-jetpack-compose-glimmer/references/titlechip-samples-source.mddoc2,920 bytes../../../xr/display-glasses-with-jetpack-compose-glimmer/references/titlechip-source.mddoc5,254 bytes../../../xr/projected-hardware/SKILL.mddoc2,090 bytes../../../xr/projected-hardware/references/android/develop/xr/jetpack-xr-sdk/access-hardware-projected-context.mddoc19,066 bytes../../../xr/projected-hardware/references/android/develop/xr/jetpack-xr-sdk/glasses/check-availability.mddoc4,831 bytes../../../xr/projected-hardware/references/android/develop/xr/jetpack-xr-sdk/glasses/support-different-types.mddoc8,663 bytes../../../xr/projected-hardware/references/android/develop/xr/jetpack-xr-sdk/request-hardware-permissions.mddoc9,331 bytes
Read SKILL.md
## Migration guide
See the [AGP 9 migration guide](references/android/build/releases/agp-9-0-0-release-notes.md) for the major changes, many
breaking, in AGP 9 compared to AGP 8.
## Requirements
If the user requests to update or migrate to AGP 9, first check the AGP version
used in the project. If it is lower than 9, stop and ask the user to run the AGP
Upgrade Assistant in Android Studio to update to the latest stable version of
AGP, and confirm when done. The user may also request that this requirement be
skipped; if this is the case, you should update the version of AGP to the latest
stable version as part of the AGP 9 migration. See the
[AGP 9 migration guide](references/android/build/releases/agp-9-0-0-release-notes.md) for how to do this.View the complete source on GitHubcamerax
When your agent uses it
Provide technical guidance for Android camera development with CameraX. Use when implementing camera features, handling asynchronous recording lifecycles, wiring low-level hardware interop using CameraX, or integrating ML Kit or Media3 effects.
What it loads into context
Frontmatter
156 tokensAlways available to the agent
SKILL.md
1,400 tokensWhen the skill is activated
Reference documents
8,804 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Core workflows
- Hardware and device diversity
- Common pitfalls
Files
SKILL.mdcore6,402 bytesreferences/camera1-to-camerax.mddoc5,513 bytesreferences/camera2-to-camerax.mddoc5,717 bytesreferences/expert-blueprints.mddoc2,199 bytesreferences/foldables.mddoc3,030 bytesreferences/immutability.mddoc1,704 bytesreferences/low-light.mddoc4,657 bytesreferences/mlkit-spatial.mddoc2,842 bytesreferences/modern-apis.mddoc2,052 bytesreferences/testing.mddoc2,605 bytesreferences/thermals.mddoc3,201 bytesreferences/wear-os.mddoc2,770 bytesreferences/xr.mddoc2,455 bytes
Read SKILL.md
This skill provides procedural guidance and standard patterns for building
camera applications on Android, with a focus on CameraX, including its
`Camera2Interop` utilities, and Media3 integrations.
## Core workflows
### Handling immutable API patterns
Various Android camera and media APIs, especially CameraX `VideoCapture`, use a
**fluent, immutable builder-like pattern** where methods return a new instance.
Failing to reassign these results in settings, such as audio, being ignored.
**Pattern: Reassignment is required**
View the complete source on GitHubandroid-for-cars-parked-apps
When your agent uses it
Adapt existing Android video streaming apps, games, and web browsers to run as parked apps on Android Auto and Android Automotive OS. Covers manifest configuration, Google Play hardware feature declarations, compatibility mode, back navigation affordances, orientation and display continuity, controllable system bar insets, irregular display cutouts, driver distraction lifecycle handling, MediaSession playback restrictions with CarUxRestrictionsManager, background audio while driving, and browser sensitive data protection. Use this skill when migrating, building, or auditing parked apps for cars to meet Car App Quality guidelines. Don't use for media audio apps, templated Car App Library navigation, point of interest, internet of things, weather, or communication apps designed for use while driving.
What it loads into context
Frontmatter
233 tokensAlways available to the agent
SKILL.md
3,914 tokensWhen the skill is activated
Reference documents
12,334 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Prerequisites
- Glossary
- Codebase exploration
- Step 1: Configure the app manifest
- Step 2: Provide back navigation and orientation support
- Step 3: Adapt to system bars and irregular display cutouts
- Step 4: Meet driver distraction and media playback requirements
- Step 5: Protect sensitive data in browser apps
- Step 6: Verify implementation
- Post-implementation guidance
- Antipatterns
- Best practices
Files
SKILL.mdcore17,862 bytesreferences/android/docs/quality-guidelines/car-app-quality/index.mddoc55,421 bytes
Read SKILL.md
Adapt existing Android video apps, games, and web browsers to run as parked
apps on Android Auto and Android Automotive OS. Follow these steps to meet the
car app quality guidelines for Google Play distribution.
## Prerequisites
- Begin with an existing adaptive Android app in one of the supported parked app categories: video streaming apps, games, or web browsers.
## Glossary
- **Parked apps**: Parked apps run on Android Auto and Android Automotive OS only while the vehicle is parked. The three parked categories are video, games, and browsers; other categories can't be published as parked apps.
- **Android Auto**: Android Auto is a phone-powered projection system. Apps execute on the user's phone and are projected to the in-car display over a wired or wireless connection. Android Auto is a separate platform from Android Automotive OS.
- **Android Automotive OS**: Android Automotive OS, or AAOS, is a variant of Android that runs directly on the vehicle itself. Android Automotive OS is a separate platform from Android Auto.
- **Video category**: Video apps display streaming videos while parked. Generally available on Android Automotive OS; unsupported on Android Auto.View the complete source on GitHubappfunctions
When your agent uses it
Analyzes Android apps to find user workflows to expose as AppFunctions, such as creating a note, playing media, or sending a message. AI agents, voice commands, and system shortcuts then run them without opening the app UI. Generates Kotlin code with the androidx.appfunctions library, and refines KDoc and the app description so that agents choose and call functions correctly. Use this skill when discovering, implementing, documenting, testing, or upgrading AppFunctions in an Android app, including @AppFunctionDeclaration, @AppFunctionSerializable, @AppFunctionServiceEntryPoint, AppFunctionService, app_metadata.xml, appfn:instructions, adb shell cmd app_function, and legacy @AppFunction or AppFunctionConfiguration.Provider code. Don't use for building agents that call AppFunctions or for remote MCP servers.
What it loads into context
Frontmatter
242 tokensAlways available to the agent
SKILL.md
1,221 tokensWhen the skill is activated
Reference documents
8,551 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Prerequisites
- Workflows
- Critical constraints
- Troubleshooting
Files
SKILL.mdcore5,715 bytesreferences/adb-interaction-testing.mddoc3,830 bytesreferences/context.mddoc1,614 bytesreferences/feature-discovery-analysis.mddoc3,297 bytesreferences/implementation-configuration.mddoc13,559 bytesreferences/kdoc-refinement-optimization.mddoc4,790 bytesreferences/migrate-to-service-entry-point.mddoc11,874 bytes
Read SKILL.md
Analyzes Android apps to identify key user workflows to expose as AppFunctions,
such as creating a note, playing media, or sending a message, for AI agents,
voice commands, and system shortcuts to run without opening the app UI.
Generates Kotlin code to expose these workflows to the Android system,
allowing agents to discover and execute them on-device.
Also refines KDoc documentation and the app description so AI agents correctly
understand and use the provided functionality.
## Prerequisites
The app must **`targetSdk 36`** or newer and use **`compileSdk 37`** or newer as
AppFunctions, part of the Android platform API, are available from Android 16View the complete source on GitHublitert-lm
When your agent uses it
Builds an Android app that runs an open text LLM on the device, on the CPU or the GPU, with the LiteRT-LM Kotlin API (com.google.ai.edge.litertlm:litertlm-android). Use this skill when creating a chat, summarization, or extraction feature with a .litertlm model from Hugging Face litert-community (Gemma, Qwen, Llama, Phi), including the Gradle dependency, the GPU manifest entries, getting the model file onto the device, Engine initialization off the main thread, a streamed multi-turn Conversation with sendMessageAsync, and the AndroidViewModel and Compose screen. Don't use for running .tflite vision, audio, or embedding models with the CompiledModel API, for image or audio input, tool calling, or NPU backends, or for converting models.
What it loads into context
Frontmatter
262 tokensAlways available to the agent
SKILL.md
4,268 tokensWhen the skill is activated
Reference documents
8,848 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Prerequisites
- Critical mandates
- Detailed steps
- Post-implementation steps for the user
- Troubleshooting
- Checklist
- Antipatterns
Files
SKILL.mdcore18,290 bytesreferences/android/google/play/on-device-ai.mddoc37,695 bytesreferences/get-a-model.mddoc1,869 bytes
Read SKILL.md
This skill provides step-by-step guidance for building an Android app that runs
an open text LLM through the LiteRT-LM Kotlin API
(`com.google.ai.edge.litertlm`) on the CPU or the GPU. The model is one
`.litertlm` file. Images, audio, tool calling, and NPU backends aren't covered.
For vision and audio models with `.tflite` files, suggest the `litert-runtime`
skill.
When a LiteRT-LM class or method that this skill uses doesn't compile, you must
read the [LiteRT-LM Android guide](https://ai.google.dev/edge/litert-lm/android) and the [LiteRT-LM README](https://github.com/google-ai-edge/LiteRT-LM/blob/main/README.md) before
changing the code.
## Prerequisites
- A Kotlin Android project (the Android Studio Empty Activity template is enough). The `litertlm-android` 0.18.0 AAR declares `minSdk` 24.View the complete source on GitHublitert-runtime
When your agent uses it
Configures and implements LiteRT (.tflite) on-device inference on Android in Kotlin using the CompiledModel API on CPU and GPU. Use this skill for any Android LiteRT or .tflite task, including Gradle setup, image classification or vision/audio/embedding helpers, TensorBuffer reuse, CPU memory optimization, Bitmap preprocessing, AndroidViewModel GPU-to-CPU fallback with warm-up on a single-thread dispatcher, LiteRT in Google Play services (play-services-litert), migrating from legacy org.tensorflow.lite.Interpreter, GpuDelegate, or play-services-tflite, and latency benchmarking. Don't use for running generative text LLMs with .litertlm files or for Python model conversion.
What it loads into context
Frontmatter
229 tokensAlways available to the agent
SKILL.md
6,416 tokensWhen the skill is activated
Reference documents
16,344 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Prerequisites
- Critical mandates
- Detailed steps
- Migrating from legacy TFLite Interpreter
- Antipatterns
- Checklist
Files
SKILL.mdcore27,631 bytesSKILL.mdcore27,631 bytesreferences/android/google/play/on-device-ai.mddoc37,695 bytesreferences/migration.mddoc19,312 bytesreferences/play-services.mddoc11,109 bytesreferences/verify.mddoc2,457 bytes
Read SKILL.md
This skill provides step-by-step guidance for building an Android app that runs
a `.tflite` model with the [LiteRT CompiledModel API](https://ai.google.dev/edge/litert/android)
(`com.google.ai.edge.litert:litert` 2.x; [source repository](https://github.com/google-ai-edge/litert/blob/main/README.md)) on the CPU or
the GPU, with the runtime bundled in the APK or from Google Play services. Don't
use the deprecated `org.tensorflow.lite.Interpreter` API. For
open text language models using `.litertlm` files, suggest the `litert-lm`
skill.
## Prerequisites
- A Kotlin Android project (`minSdk` must be `24` or higher, as declared by the LiteRT 2.3.0 AARs).
- The runtime that Step 1 picks: the Google Play services runtime (`com.google.android.gms:play-services-litert`, the default; see [LiteRT in Google Play services](references/play-services.md)), or the bundled runtime (`implementation("com.google.ai.edge.litert:litert:2.3.0")` and `implementation("com.google.ai.edge.litert:litert-gpu:2.3.0")` from Google Maven). For the bundled runtime, from 2.3.0 the GPU accelerator is the second artifact: with `litert` alone the app builds, and `CompiledModel.create` with `CompiledModel.Options(Accelerator.GPU)` throws `LiteRtException` because the APK has no GPU accelerator library. With `CompiledModel.Options(Accelerator.GPU, Accelerator.CPU)` it doesn't throw: the model runs on the CPU while the app reports the GPU, and only Logcat shows it (`GPU accelerator could not be loaded and registered`). No manifest entry is needed: `litert-api`, which `litert` depends on, declares the OpenCL driver libraries (`uses-native-library`) in its own manifest.
- A verified `.tflite` model and its input contract (input dimensions, mean, standard deviation, channel order, and tensor layout). For models with a verified recipe, inspect the [LiteRT model recipes](https://github.com/google-ai-edge/litert-samples/blob/main/models/README.md).
View the complete source on GitHubml-kit-genai-prompt-api
When your agent uses it
Analyzes Android codebases to implement ML Kit GenAI Prompt API. Use this skill to send natural language requests on-device to Gemini Nano, use structured output with Prompt API, implement prefix caching, optimize the current prompt, or apply best practices."
What it loads into context
Frontmatter
125 tokensAlways available to the agent
SKILL.md
972 tokensWhen the skill is activated
Reference documents
7,965 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Prerequisites
- Detailed steps
Files
SKILL.mdcore4,179 bytesreferences/get-started.mddoc10,837 bytesreferences/prefix-caching.mddoc5,821 bytesreferences/prompt-design.mddoc3,573 bytesreferences/prompt-optimization.mddoc4,649 bytesreferences/structured-output.mddoc10,437 bytesreferences/system-instructions.mddoc3,394 bytes
Read SKILL.md
This skill provides step-by-step guidance for integrating and optimizing the ML
Kit GenAI Prompt API in Android apps.
## Prerequisites
- Android API level must be 26 or higher. If `minSdk` is below 26, update it to 26.
- Add the ML Kit GenAI Prompt API dependency (`com.google.mlkit:genai-prompt`) to the app-level `build.gradle` file, with version at least `1.0.0-beta4`.
- If `com.google.mlkit:genai-schema-compiler` dependency is used and KSP plugin version is below 2.3.6, update it to 2.3.6.
## Detailed steps
### 1. Prompt optimization
To optimize prompts for use with the ML Kit Prompt API, follow theView the complete source on GitHubmlkit-agent-api
When your agent uses it
Builds autonomous on-device agentic workflows in Android apps using the ML Kit GenAI Agent API powered by Gemini Nano and AICore. Use this skill when implementing conversational agents, multi-turn chat with AgentSession in a ViewModel, autonomous tool calling using Android AppFunctions (@AppFunctionDeclaration and AppFunctionAgentTools.discover), ephemeral single-turn execution with runner.runSingleTurnAsync, or handling GenAiException error resilience. It solves the problem of orchestrating local reasoning loops, typed tool dispatch, and session persistence on-device with zero cloud latency and privacy preservation. Don't use for cloud-based Gemini models or Vertex AI, single-turn text generation without agent loops (suggest Prompt API), or non-Android platforms.
What it loads into context
Frontmatter
250 tokensAlways available to the agent
SKILL.md
3,001 tokensWhen the skill is activated
Reference documents
3,244 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 1. Prerequisites and setup
- 2. Minimal agent and runner initialization
- 3. Multi-turn chat and lifecycle (ViewModel)
- 4. Tool calling recipe
- 5. Ephemeral single-turn execution
- 6. Error handling and GenAiException reference
Files
SKILL.mdcore14,124 bytesreferences/session_lifecycle.mddoc3,035 bytesreferences/tools_and_functions.mddoc12,221 bytes
Read SKILL.md
Targeting **AICore Developer Preview**. This skill provides authoritative
execution patterns and failure-prevention rules for on-device agentic workflows
in Android apps.
*** ** * ** ***
## 1. Prerequisites and setup
### Gradle dependencies
// app/build.gradle.kts
dependencies {
// Core ML Kit GenAI Agent API
implementation("com.google.mlkit:genai-agent:1.0.0-alpha1")View the complete source on GitHubandroid-cli
When your agent uses it
Provides instructions for installing and using the `android` CLI. The `android` command-line tool is a critical tool for Android development and helps you create new Android projects, install APKs onto devices and emulators and launch and run apps on them, manage and interact with Android virtual devices (including screenshots and UI inspection), manage Android SDK components, look up official Android documentation, and discover and install official Android skills.
What it loads into context
Frontmatter
166 tokensAlways available to the agent
SKILL.md
8,105 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Installation
- SDK management
- Project creation
- Interacting with Android devices
- Running journey tests
- Doc searching
- Running APKs
- Managing emulators
- Managing skills
- Updating the CLI
- `android help` output
Files
SKILL.mdcore43,321 bytesSKILL.mdcore43,321 bytesSKILL.mdcore43,321 bytesSKILL.mdcore43,321 bytesSKILL.mdcore43,321 bytesSKILL.mdcore43,321 bytesSKILL.mdcore43,321 bytes
Read SKILL.md
This skill provides instructions for using the `android` CLI tool. The tool
includes various commands for creating projects, running applications,
interacting with devices, and managing the CLI environment.
## Installation
If the android tool is not in the path, install it. To install run the following
command:
- Linux x86-64: curl -fsSL https://dl.google.com/android/cli/latest/linux_x86_64/install.sh \| bash
- Linux ARM64: curl -fsSL https://dl.google.com/android/cli/latest/linux_arm64/install.sh \| bash
- Mac Arm: curl -fsSL https://dl.google.com/android/cli/latest/darwin_arm64/install.sh \| bash
- Mac Intel: curl -fsSL https://dl.google.com/android/cli/latest/darwin_x86_64/install.sh \| bash
- Windows: curl -fsSL https://dl.google.com/android/cli/latest/windows_x86_64/install.cmd -o "%TEMP%\\i.cmd" \&\& "%TEMP%\\i.cmd"View the complete source on GitHubrestore-credentials
When your agent uses it
Provides knowledge and workflows to implement Android's Restore Credentials feature using the androidx.credentials library. Use this skill to create, sign in with, and delete restore keys, enabling silent user sign-in on new devices after a restore. It covers version compatibility, dependencies, server-side prerequisites, and the complete client-side implementation for creating, retrieving, and clearing restore keys.
What it loads into context
Frontmatter
147 tokensAlways available to the agent
SKILL.md
5,264 tokensWhen the skill is activated
Reference documents
15,221 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Fundamentals
- Implementation Guidelines
- Two-Tier Restoration Architecture
- DOs and DON'Ts
- Implementation Guide
- Version compatibility
- Prerequisites
- Dependencies
- Overview
- Create a restore key
- Sign in with a restore key
- Delete the restore key
- Backend Guidelines
- References
Files
SKILL.mdcore25,330 bytesSKILL.mdcore25,330 bytesreferences/android/guide/topics/manifest/application-element.mddoc43,070 bytesreferences/android/identity/passkeys/create-passkeys.mddoc19,472 bytesreferences/android/identity/passkeys/sign-in-with-passkeys.mddoc11,571 bytes
Read SKILL.md
## Fundamentals
The objective is to implement the **Restore Credentials** feature through the
Android Credential Manager API (`androidx.credentials`). This allows apps that
use or are integrating Credential Manager to silently log users back in when
they restore their app on a new device. Restore Credentials operates
independently of the app's primary authentication method (passwords, passkeys,
federated sign-in) and requires no UI changes to existing sign-in flows.
### Scope
**Crucial:** This skill focuses exclusively on the Android client-side
integration. It does **not** implement the server-side cryptographic
validation logic. The developer must be reminded of this and theView the complete source on GitHubverified-email
When your agent uses it
Provides a complete workflow for implementing verified email retrieval on Android Credential Manager API. Use this skill to integrate a secure, OTP-less email verification flow into an Android app. This skill solves the problem of high-friction sign-up processes by leveraging cryptographically verified credentials from trusted providers like Google.
What it loads into context
Frontmatter
163 tokensAlways available to the agent
SKILL.md
4,386 tokensWhen the skill is activated
Reference documents
12,813 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Fundamentals
- Codebase exploration for Use Cases
- Identifying Integration Points
- Important pointers for Implementation
- Overview
- Add dependencies
- Initialize Credential Manager
- Construct the Digital Credential request
- Present the request to the user
- Parse the response on the client
- Handle the response
- Server-side validation for account creation
- Passkey creation
- WebView support
- See also
- Critical Security Guidelines
Files
SKILL.mdcore20,346 bytesSKILL.mdcore20,346 bytesreferences/android/identity/credential-manager/index.mddoc5,342 bytesreferences/android/identity/digital-credentials/email-verification-implementation.mddoc14,924 bytesreferences/android/identity/digital-credentials/email-verification.mddoc9,472 bytesreferences/android/identity/digital-credentials/index.mddoc9,393 bytesreferences/android/identity/passkeys/create-passkeys.mddoc19,472 bytesreferences/android/identity/sign-in/credential-manager-webview.mddoc3,850 bytes
Read SKILL.md
## Fundamentals
- *[Overview of Digital Credentials](references/android/identity/digital-credentials/email-verification.md)*: Learn about cryptographically verifiable documents and the role of Credential Manager.
- *[Glossary](references/android/identity/digital-credentials/email-verification-implementation.md)* : Definitions for `dcql_query`, `UserInfoCredential`, and `GetDigitalCredentialOption`.
### Standards \& Examples
- *[OpenID4VP Standard](https://openid.net/specs/openid-4-verifiable-presentations-1_0.html#name-introduction)*: The specification used to create digital credentials requests.
- *[Digital Credentials Demo](https://digital-credentials.dev/)*: Example requests and cross-platform testing tool.
- *[W3C Verifiable Credentials](https://www.w3.org/TR/vc-data-model-2.0/)*: The data model for cryptographically secured claims.
- *[SD-JWT](https://datatracker.ietf.org/doc/draft-ietf-oauth-selective-disclosure-jwt/)*: Selective Disclosure JSON Web Token format used for responses.
- *[mdoc](https://www.iso.org/standard/69084.html)*: ISO/IEC 18013-5 standard for mobile documents.
### RequirementsView the complete source on GitHubadaptive
When your agent uses it
Instructions to make or update an app's UI so that it adapts to different Android devices including phones, tablets, foldables, laptops, desktop, TV, Auto, and XR. It includes how to handle different window sizes, pointing devices (such as mouse) and text entry devices (such as keyboard) using the Compose MediaQuery API, and how to preserve UI, navigation, scroll, and media playback state across configuration changes (such as folding/unfolding a foldable, rotating a device, or resizing a window). It also covers multi-pane layouts using Navigation3 Scenes, adaptive UI components (such as buttons) with varying target sizes, and adaptive layouts (including navigation areas - nav rails and nav bars) using the Compose Grid and FlexBox APIs. It also covers desktop experiences with keyboard shortcuts, tooltips and custom cursors.
What it loads into context
Frontmatter
273 tokensAlways available to the agent
SKILL.md
4,953 tokensWhen the skill is activated
Reference documents
24,476 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Prerequisites
- Workflow to make an app adaptive
- Step 1. Verify current UI
- Step 2. Make the navigation bar adaptive
- Step 3. Add multi-pane layouts using Navigation 3 Scenes
- Step 4. Make vertical lists adaptive by changing the number of columns
- Step 5: Hide App Bars when scrolling
- Step 6: Preserve UI state across configuration changes
- Step 7: Add desktop experiences
- Step 8. Support foldable devices
- Final step: Build and test
- Additional documentation for experimental adaptive APIs
- MediaQuery
- Grid
Files
SKILL.mdcore22,102 bytesreferences/android/develop/ui/compose/layouts/adaptive/flexbox/container-behavior.mddoc9,349 bytesreferences/android/develop/ui/compose/layouts/adaptive/flexbox/get-started.mddoc2,337 bytesreferences/android/develop/ui/compose/layouts/adaptive/flexbox/index.mddoc5,987 bytesreferences/android/develop/ui/compose/layouts/adaptive/flexbox/item-behavior.mddoc8,504 bytesreferences/android/develop/ui/compose/layouts/adaptive/grid/container-properties.mddoc16,219 bytesreferences/android/develop/ui/compose/layouts/adaptive/grid/get-started.mddoc1,849 bytesreferences/android/develop/ui/compose/layouts/adaptive/grid/index.mddoc4,253 bytesreferences/android/develop/ui/compose/layouts/adaptive/grid/item-properties.mddoc5,756 bytesreferences/android/develop/ui/compose/layouts/adaptive/mediaquery/index.mddoc14,161 bytesreferences/android/guide/navigation/navigation-3/recipes/material-listdetail.mddoc6,513 bytesreferences/android/guide/navigation/navigation-3/save-state.mddoc6,011 bytesreferences/android/studio/preview/compose-screenshot-testing-with-testsuites.mddoc7,507 bytesreferences/custom_cursors.mddoc4,351 bytesreferences/foldable-tabletop.mddoc3,875 bytesreferences/keyboard_shortcuts.mddoc6,166 bytesreferences/tooltips.mddoc4,266 bytes
Read SKILL.md
## Prerequisites
The app must:
- Use Compose for all screens. If it's still using Fragments or Views, suggest using the XML to Compose skill to migrate those screens.
- Use Jetpack Navigation 3. If it doesn't, suggest the Navigation 3 skill to migrate the app.
## Workflow to make an app adaptive
To make an app adaptive, follow these steps or a subset of them adapting to the
task.
- Step 1: Verify current UI
- Step 2: Make the navigation bar adaptiveView the complete source on GitHubink-app-builder
When your agent uses it
Adds inking and freehand drawing capabilities to an Android app using Jetpack Ink (androidx.ink) and Compose. Use this skill when implementing stylus or touch drawing surfaces, rendering wet and dry ink strokes, configuring stock brushes (pressure pen, marker, highlighter), implementing geometry-based erasing, linear undo and redo history, or stroke persistence with Room. Delivers working Compose and ViewModel implementations. Don't use for View-based (XML) inking or programmatic custom BrushFamily creation. For custom BrushFamily creation, custom tip shapes, or behavior node graphs, suggest the ink-custom-brush-builder skill.
What it loads into context
Frontmatter
247 tokensAlways available to the agent
SKILL.md
3,595 tokensWhen the skill is activated
Reference documents
11,738 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Setup and dependencies
- Core drawing surface and default brush
- Workflow and task routing
- Antipatterns
Files
SKILL.mdcore15,618 bytesSKILL.mdcore15,618 bytesSKILL.mdcore15,618 bytesreferences/android/develop/ui/compose/touch-input/stylus-input/ink-api-brush-apis.mddoc5,135 bytesreferences/android/develop/ui/compose/touch-input/stylus-input/ink-api-draw-stroke.mddoc2,115 bytesreferences/android/develop/ui/compose/touch-input/stylus-input/ink-api-geometry-apis.mddoc1,238 bytesreferences/android/develop/ui/compose/touch-input/stylus-input/ink-api-setup.mddoc1,226 bytesreferences/android/develop/ui/compose/touch-input/stylus-input/ink-api-state-preservation.mddoc12,150 bytesreferences/drawing-and-brushes.mddoc9,197 bytesreferences/editing-and-architecture.mddoc10,463 bytesreferences/persistence-and-advanced.mddoc10,901 bytes
Read SKILL.md
The Android Ink API (`androidx.ink`) is a modular Jetpack library for building
high-performance, low-latency freehand drawing experiences on Android. It uses a
**wet ink and dry ink** two-phase model:
- **Wet ink** : Real-time, ultra-low-latency rendering while the user is drawing, handled by the `InProgressStrokes` composable.
- **Dry ink** : Finalized, immutable `Stroke` objects rendered by the app using `CanvasStrokeRenderer`.
## Setup and dependencies
The Ink API requires **`minSdk = 26`** , which corresponds to Android 8.0 (API
level 26) and higher. All `androidx.ink` modules MUST share an identical version
in `gradle/libs.versions.toml`. Ask user permission before modifying project
build files.
View the complete source on GitHubink-custom-brush-builder
When your agent uses it
Creates custom BrushFamily definitions for an Android app using Jetpack Ink (androidx.ink 1.1.0-alpha03 and higher). Use this skill when configuring custom BrushTip shapes, adding pressure, tilt, speed, or noise sensitivity using BrushBehavior node graphs, creating multi-coat layered brushes, applying tiling or particle stamping textures, configuring SlidingWindowModel input smoothing, or serializing brushes. Delivers complete Kotlin BrushFamily, BrushCoat, BrushTip, BrushPaint, and BrushBehavior implementations. Don't use for View-based (XML) inking, Compose drawing surface setup, or stock brush selection. For Compose drawing surface setup, InProgressStrokes wet and dry rendering, eraser, or persistence, suggest the ink-app-builder skill.
What it loads into context
Frontmatter
279 tokensAlways available to the agent
SKILL.md
1,855 tokensWhen the skill is activated
Reference documents
11,112 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Workflow and task routing
- Antipatterns
Files
SKILL.mdcore7,330 bytesSKILL.mdcore7,330 bytesSKILL.mdcore7,330 bytesreferences/android/develop/ui/compose/touch-input/stylus-input/ink-api-brush-apis.mddoc5,135 bytesreferences/brush-behaviors.mddoc11,043 bytesreferences/brush-structure.mddoc10,145 bytesreferences/examples.mddoc12,091 bytesreferences/textures-and-serialization.mddoc7,826 bytes
Read SKILL.md
Custom brushes in the Android Ink API are built around the **`BrushFamily`**
hierarchy:
BrushFamily
├── InputModel (BrushFamily.InputModel.SlidingWindowModel or PASSTHROUGH_MODEL)
└── BrushCoat[] (one or more rendering layers)
├── BrushTip (shape: scaleX, scaleY, cornerRounding, rotationDegrees, slantDegrees, pinch)
│ └── BrushBehavior[] (dynamic response to stylus or touch input)
│ └── Tree: TargetNode(input = [Operators](input = SourceNode))
└── BrushPaint (visual appearance)
├── SelfOverlap (ANY, ACCUMULATE, or DISCARD)
├── TextureLayer[] (BrushPaint.TilingTexture or BrushPaint.StampingTexture)
└── BrushPaint.ColorFunction[] (OpacityMultiplier or ReplaceColor)
View the complete source on GitHubjetpack-compose-performance
When your agent uses it
Diagnose and optimize Android Jetpack Compose UI code. Use this skill when analyzing performance bottlenecks of existing code to minimize recomposition overhead and prevent dropped frames and UI lag.
What it loads into context
Frontmatter
181 tokensAlways available to the agent
SKILL.md
4,657 tokensWhen the skill is activated
Reference documents
29,236 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Foundational prerequisites
- Optimization audit workflow
- 1. State, snapshots, and stability ([references/state-and-stability.md](references/state-and-stability.md))
- 2. Layouts and measurement optimization ([references/layouts.md](references/layouts.md))
- 3. Lazy layouts optimization ([references/lazy-layouts.md](references/lazy-layouts.md))
- 4. Animation and shared transitions ([references/animation.md](references/animation.md))
- 5. Effects, lifecycle, and threading ([effects-and-threading.md](references/effects-and-threading.md))
- 6. Graphics and custom drawing ([references/graphics-performance.md](references/graphics-performance.md))
- 7. Custom modifiers: `Modifier.Node` ([Custom modifiers guide](references/android/develop/ui/compose/custom-modifiers.md))
Files
SKILL.mdcore20,957 bytesSKILL.mdcore20,957 bytesSKILL.mdcore20,957 bytesSKILL.mdcore20,957 bytesreferences/android/develop/ui/compose/custom-modifiers.mddoc27,301 bytesreferences/android/develop/ui/compose/performance/backwards-write.mddoc12,248 bytesreferences/android/develop/ui/compose/performance/stability/strongskipping.mddoc6,743 bytesreferences/animation.mddoc8,169 bytesreferences/effects-and-threading.mddoc17,715 bytesreferences/graphics-performance.mddoc9,643 bytesreferences/layouts.mddoc9,041 bytesreferences/lazy-layouts.mddoc12,841 bytesreferences/state-and-stability.mddoc28,178 bytes
Read SKILL.md
## Foundational prerequisites
Before micro-optimizing composables, ensure standard production flags are in
place:
1. **Release Build**: Never profile or benchmark debuggable builds; ART runtime verification severely degrades performance.
2. **R8 Minification**: Keep R8 enabled to optimize bytecode and coroutine dispatch.
3. **Baseline Profiles**: Generate baseline profiles for critical user journeys (cold start, key scrolling feeds) so the ART VM pre-compiles and preloads classes ahead of time.
## Optimization audit workflow
1. **Exhaustive Scan** : Scan the target code against all 7 core categories in the following sections. Evaluate every `@Composable` function, modifier chain, and lazy-layout data model against all checklist rules rather than stopping after the first issue found.
2. **Mandatory Reference Read Before Flagging or Editing** : Whenever a file matches a rule in Categories 1--7, you **MUST** open and read the corresponding `references/*.md` file for the approved fix pattern and full scope guards **before** reporting a finding or editing code. Never rely on the summary bullets alone to write fixes.
View the complete source on GitHubmigrate-xml-views-to-jetpack-compose
When your agent uses it
Provides a structured workflow for migrating an Android XML View to Jetpack Compose. This skill details the step-by-step process, from planning and dependency setup, to theming and layout migration, validation and XML cleanup. Use this skill when you need to migrate an XML View to Jetpack Compose in an Android project. It solves the problem of converting the UI of a legacy XML View into modern, declarative Compose components while maintaining interoperability.
What it loads into context
Frontmatter
174 tokensAlways available to the agent
SKILL.md
1,191 tokensWhen the skill is activated
Reference documents
10,579 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Objective
- Summary of the 10-step migration process
- Detailed steps
Files
SKILL.mdcore5,434 bytesreferences/analysis-of-the-project-and-layout.mddoc3,133 bytesreferences/android/develop/ui/compose/designsystems/migrate-xml-theme-to-compose.mddoc8,259 bytesreferences/android/develop/ui/compose/migrate/interoperability-apis/compose-in-views.mddoc12,304 bytesreferences/android/develop/ui/compose/migrate/interoperability-apis/views-in-compose.mddoc12,529 bytesreferences/android/develop/ui/compose/setup-compose-dependencies-and-compiler.mddoc7,517 bytesreferences/identify-optimal-xml-candidate.mddoc1,667 bytesreferences/xml-layout-migration.mddoc3,589 bytes
Read SKILL.md
This skill guides through the process of migrating an existing Android XML View
to Jetpack Compose. It performs a stable, safe and visually consistent
transition by following a structured, 10-step methodology. This skill migrates
UI (XML to Jetpack Compose) only.
## Objective
To systematically convert a single legacy XML layout into modern, declarative
Jetpack Compose UI while maintaining pixel-perfect visual parity and functional
integrity.
## Summary of the 10-step migration process
1. **Identify the optimal XML candidate for migration**View the complete source on GitHubmedia3-cast-integration
When your agent uses it
Implements Google Cast support in Android apps using Jetpack Media3. Handles adding build dependencies, updating manifest, configuring OptionsProvider, and managing CastPlayer or RemoteCastPlayer for playback in both Compose and View-based UIs. Use when adding Cast functionality or migrating from legacy Cast SDK to Media3 Cast.
What it loads into context
Frontmatter
147 tokensAlways available to the agent
SKILL.md
2,308 tokensWhen the skill is activated
Reference documents
4,169 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Prerequisites
- Glossary
- Common guidelines
- Step 1: Set up dependencies
- Step 2: Update the manifest
- Step 3: Implement the player and service
- Step 4: Set up the UI
- Step 5: Clean up legacy Cast SDK code
Files
SKILL.mdcore10,723 bytesSKILL.mdcore10,723 bytesreferences/android/media/media3/cast/create-castplayer.mddoc14,304 bytesreferences/android/media/media3/cast/customize-castoptions.mddoc2,958 bytesreferences/android/media/media3/cast/index.mddoc1,326 bytes
Read SKILL.md
## Prerequisites
- Jetpack Media3 version must be `>= 1.9.0`. Cast isn't available in lower versions.
## Glossary
- **`CastPlayer`** : Media3 `Player` that controls playback on both local and remote Cast devices.
- **`RemoteCastPlayer`** : Media3 `Player` that communicates with a Cast receiver, only used for remote playback.
- **Google Cast SDK**: Legacy casting SDK in maintenance mode, superseded by Jetpack Media3.
- **`OptionsProvider`** : Interface providing configuration options to initialize GMS `CastContext`.
## Common guidelines
- Legacy [Google Cast SDK](https://developers.google.com/cast) is in maintenance mode.View the complete source on GitHubnavigation-3
When your agent uses it
Learn how to install and migrate to Jetpack Navigation 3, and how to implement features and patterns such as deep links, multiple backstacks, scenes (dialogs, bottom sheets, list-detail, two-pane, supporting pane), conditional navigation (such as logged-in navigation versus anonymous), returning results from flows, integration with Hilt, ViewModel, Kotlin, and view interoperability.
What it loads into context
Frontmatter
226 tokensAlways available to the agent
SKILL.md
1,441 tokensWhen the skill is activated
Reference documents
50,242 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Migration guide
- Developer documentation
- Recipes
Files
SKILL.mdcore6,686 bytesreferences/android/guide/navigation/navigation-3/index.mddoc3,579 bytesreferences/android/guide/navigation/navigation-3/migration-guide.mddoc27,098 bytesreferences/android/guide/navigation/navigation-3/recipes/animations.mddoc6,525 bytesreferences/android/guide/navigation/navigation-3/recipes/basic.mddoc3,587 bytesreferences/android/guide/navigation/navigation-3/recipes/basicdsl.mddoc3,628 bytesreferences/android/guide/navigation/navigation-3/recipes/basicsaveable.mddoc3,597 bytesreferences/android/guide/navigation/navigation-3/recipes/bottomsheet.mddoc7,954 bytesreferences/android/guide/navigation/navigation-3/recipes/common-ui.mddoc8,673 bytesreferences/android/guide/navigation/navigation-3/recipes/conditional-transitions.mddoc8,577 bytesreferences/android/guide/navigation/navigation-3/recipes/conditional.mddoc9,664 bytesreferences/android/guide/navigation/navigation-3/recipes/deeplinks-custommatcher.mddoc7,228 bytesreferences/android/guide/navigation/navigation-3/recipes/deeplinks-staticuri.mddoc5,597 bytesreferences/android/guide/navigation/navigation-3/recipes/deeplinks-syntheticbackstack.mddoc7,920 bytesreferences/android/guide/navigation/navigation-3/recipes/deeplinks-uriarguments.mddoc15,795 bytesreferences/android/guide/navigation/navigation-3/recipes/dialog.mddoc4,494 bytesreferences/android/guide/navigation/navigation-3/recipes/lifecycle-owner.mddoc8,354 bytesreferences/android/guide/navigation/navigation-3/recipes/material-listdetail.mddoc6,513 bytesreferences/android/guide/navigation/navigation-3/recipes/material-supportingpane.mddoc6,798 bytesreferences/android/guide/navigation/navigation-3/recipes/modular-hilt.mddoc12,674 bytesreferences/android/guide/navigation/navigation-3/recipes/modular-koin.mddoc13,661 bytesreferences/android/guide/navigation/navigation-3/recipes/multiple-backstacks.mddoc16,966 bytesreferences/android/guide/navigation/navigation-3/recipes/passingarguments.mddoc16,435 bytesreferences/android/guide/navigation/navigation-3/recipes/results-event.mddoc10,053 bytesreferences/android/guide/navigation/navigation-3/recipes/results-state.mddoc9,841 bytesreferences/android/guide/navigation/navigation-3/recipes/scenes-listdetail.mddoc16,235 bytesreferences/android/guide/navigation/navigation-3/recipes/scenes-twopane.mddoc9,343 bytesreferences/android/guide/navigation/type-safe-destinations.mddoc4,220 bytes
Read SKILL.md
*** ** * ** ***
## Migration guide
- *[Navigation 2 to Navigation 3 migration guide](references/android/guide/navigation/navigation-3/migration-guide.md)*: Step-by-step guide to migrate an Android application from Navigation 2 to Navigation 3, covering dependency updates, route changes, state management, and UI component replacements.
### Requirements
- *[Guide: Migrate to type-safe navigation in Compose](references/android/guide/navigation/type-safe-destinations.md)* : Step-by-step guide to migrating an Android application from string-based navigation to **Type-Safe Navigation** in Jetpack Compose using Jetpack Navigation 2.
## Developer documentation
- *[Navigation 3](references/android/guide/navigation/navigation-3/index.md)*. Search documentation for more information on basics, saving and managing navigation state, modularizing navigation code, creating custom layouts using Scenes, animating between destinations, or applying logic or wrappers to destinations.
View the complete source on GitHubnavigation-event
When your agent uses it
Intercept back gestures and run Predictive Back animations using the NavigationEvent (androidx.navigationevent) library in Compose Android. Handles Activity setup, parent-child dispatcher scoping in `ViewPagers` or tabs, Compose `NavigationBackHandler`, and migration from legacy `BackHandler` on SDK 36+.
What it loads into context
Frontmatter
153 tokensAlways available to the agent
SKILL.md
2,691 tokensWhen the skill is activated
Reference documents
3,508 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Common guidelines
- Step 1: Plan
- Step 2: Set up dependencies
- Step 3: Configure dispatcher and inputs
- Step 4: Handle back navigation and UI transitions
- Step 5: Clean up resources
- Core troubleshooting guidelines
- Checklist
Files
SKILL.mdcore13,103 bytesreferences/android/guide/navigation/navigation-event/dispatcher.mddoc4,372 bytesreferences/android/guide/navigation/navigation-event/handle-back.mddoc7,355 bytesreferences/android/guide/navigation/navigation-event/index.mddoc4,100 bytesreferences/android/guide/navigation/navigation-event/setup.mddoc1,068 bytes
Read SKILL.md
## Common guidelines
- **For architecture concepts** : To understand the foundational architecture, continuous gesture event lifecycles, or class definitions of the Navigation Event library, read [Navigation Event overview](references/android/guide/navigation/navigation-event/index.md).
- **For Android target** : If compile SDK is lower than 36, set it to `36` or higher in `build.gradle.kts`.
- **For Compose Android target**: The project must use Jetpack Compose for Compose-specific APIs. This skill is scoped exclusively to Compose Android (Android Views and non-Compose implementations are excluded).
- **For activity dispatchers** : `ComponentActivity` automatically implements `NavigationEventDispatcherOwner` out-of-the-box. You must use the built-in `navigationEventDispatcher` without creating anonymous delegate owners or overriding member properties.
- **For dialog scoping** : Floating windows (Compose `Dialog`, `ModalBottomSheet`, `ComponentDialog`) automatically provide a `NavigationEventDispatcherOwner`. You don't need manual `CompositionLocalProvider` propagation for dialogs.
- **For parent-child dispatcher hierarchies** : When scoping navigation handling to `ViewPagers`, tabbed interfaces, or nested navigation containers in Compose, use `rememberNavigationEventDispatcherOwner()` to create a child owner linked to the parent. Disabling the owner (`enabled = false`) automatically cascades to disable all child handlers.
- **For Compose handlers** : A one-to-one relationship between `NavigationEventState` and handlers is strictly enforced. Never bind the same `NavigationEventState` to multiple active `NavigationBackHandler` instances (`IllegalArgumentException`).
## Step 1: Plan
To complete this step, you **MUST** ensure the following:
View the complete source on GitHubanr-audit-and-fix
When your agent uses it
Audits Android codebases for ANR risks and diagnoses ANR stack dumps. Use this skill when scanning Android code for ANR risks or triaging ANR stack dumps. Don't use for non-ANR crashes, dropped frames, general CPU profiling, or Perfetto system traces.
What it loads into context
Frontmatter
142 tokensAlways available to the agent
SKILL.md
404 tokensWhen the skill is activated
Reference documents
4,845 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 1. Path A: Static codebase ANR risk audit
- 2. Path B: Trace-driven diagnosis and remediation
Files
SKILL.mdcore1,757 bytesSKILL.mdcore1,757 bytesreferences/anr_trace_report_template.mddoc1,934 bytesreferences/risk_analysis_guide.mddoc7,085 bytesreferences/trace_analysis_guide.mddoc11,878 bytes
Read SKILL.md
Select the execution path matching the user's request:
## 1. Path A: Static codebase ANR risk audit
When auditing source files or scanning for thread-blocking operations:
- Follow [references/risk_analysis_guide.md](references/risk_analysis_guide.md) step by step: list candidates, **prove the executing thread** (trace callers when the thread depends on them), **prove the call blocks**, then attribute and grade. Report only candidates that pass these checks; list the dismissed ones separately with a one-line reason.
- Evaluate off-main-thread mutations of attached Views not merely as crash risks (`CalledFromWrongThreadException`), but as **Sync Barrier Leak ANR** risks with their own proof (off-main execution plus an attached View).
## 2. Path B: Trace-driven diagnosis and remediation
When analyzing ANR traces or stack dumps:
- Diagnose systematically using [references/trace_analysis_guide.md](references/trace_analysis_guide.md) and format the report with [references/anr_trace_report_template.md](references/anr_trace_report_template.md).View the complete source on GitHubr8-analyzer
When your agent uses it
Analyzes Android build files and R8 keep rules to identify redundancies, broad package-wide rules, and rules that subsume library consumer keep rules. Use this skill when developers want to optimize their Android app's size, remove redundant or overly broad keep rules, or troubleshoot ProGuard configurations. Don't use for general Gradle build errors, Compose UI performance, or runtime CPU profiling.
What it loads into context
Frontmatter
163 tokensAlways available to the agent
SKILL.md
1,585 tokensWhen the skill is activated
Reference documents
8,488 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Step 1. Setup and configuration check
- Step 2. Analysis path selection
- Step 3. Report generation
- Constraints
Scripts executed separately
scripts/analyze.pyscripts/convert_pb_to_json.pyscripts/keep_radius_pb2.py
Files
SKILL.mdcore6,311 bytesreferences/CONFIGURATION.mddoc2,309 bytesreferences/FULL_BUILD_CONFIG_ANALYZER.mddoc4,161 bytesreferences/INSPECT-RULES.mddoc10,139 bytesreferences/REPORT_FORMAT.mddoc4,124 bytesreferences/android/topic/performance/app-optimization/enable-app-optimization.mddoc16,659 bytesscripts/analyze.pyruns8,818 bytesscripts/convert_pb_to_json.pyruns2,365 bytesscripts/keep_radius_pb2.pyruns7,899 bytes
Read SKILL.md
## Step 1. Setup and configuration check
- Inspect `build.gradle`, `build.gradle.kts`, and `gradle.properties`.
- Use [references/CONFIGURATION.md](references/CONFIGURATION.md) to identify missing optimizations.
- **AGP** : If the version is lower than 9.3, suggest migration to 9.3 for the simplified [`optimization {}` DSL](references/android/topic/performance/app-optimization/enable-app-optimization.md) and the Configuration Analyzer task.
- **Full mode** : Verify `android.enableR8.fullMode=false` is removed from the `gradle.properties` file.
## Step 2. Analysis path selection
- Inspect `build.gradle`, `build.gradle.kts`, `settings.gradle`, `settings.gradle.kts`, `gradle.properties`, and `libs.versions.toml` to get the AGP and R8 versions. An R8 version pinned in `settings.gradle(.kts)` replaces the R8 bundled with AGP.
- Find the app module (usually `app`) and a build variant with R8 enabled (usually `release`). The following commands use them as `<module>` and `<Variant>`, for example `:app:minifyReleaseWithR8`.
- The helper scripts are in this skill's `scripts/` directory. In the following
commands, `<skill_dir>` is this skill's directory. Run every command from the
project root.View the complete source on GitHubengage-sdk-integration
When your agent uses it
Helps developers integrate, debug, and resolve Play Engage SDK implementation issues. Use when adding Engage SDK support, generating publishing code, mapping data classes to entities, or fixing SDK-related errors.
What it loads into context
Frontmatter
105 tokensAlways available to the agent
SKILL.md
2,173 tokensWhen the skill is activated
Reference documents
197,929 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Workflow
- Reference materials
Files
SKILL.mdcore9,493 bytesSKILL.mdcore9,493 bytesSKILL.mdcore9,493 bytesreferences/android/guide/playcore/engage/faq.mddoc23,281 bytesreferences/android/guide/playcore/engage/food.mddoc59,531 bytesreferences/android/guide/playcore/engage/healthandfitness.mddoc63,525 bytesreferences/android/guide/playcore/engage/listen.mddoc54,130 bytesreferences/android/guide/playcore/engage/otherverticals.mddoc95,014 bytesreferences/android/guide/playcore/engage/read.mddoc45,044 bytesreferences/android/guide/playcore/engage/shopping.mddoc61,822 bytesreferences/android/guide/playcore/engage/social.mddoc36,656 bytesreferences/android/guide/playcore/engage/travel.mddoc104,709 bytesreferences/android/guide/playcore/engage/tv/continue-watching/index.mddoc1,152 bytesreferences/android/guide/playcore/engage/tv/entitlements.mddoc15,476 bytesreferences/android/guide/playcore/engage/tv/getting-started.mddoc23,008 bytesreferences/android/guide/playcore/engage/tv/recommendations.mddoc18,812 bytesreferences/android/guide/playcore/engage/watch.mddoc61,289 bytesreferences/clusters.mddoc6,006 bytesreferences/common.mddoc18,327 bytesreferences/patterns.mddoc21,784 bytesreferences/requests.mddoc10,544 bytesreferences/schemas/food.mddoc19,049 bytesreferences/schemas/listen.mddoc30,595 bytesreferences/schemas/other.mddoc8,238 bytesreferences/schemas/read.mddoc15,326 bytesreferences/schemas/shopping.mddoc13,819 bytesreferences/schemas/social.mddoc8,688 bytesreferences/schemas/travel.mddoc34,825 bytesreferences/schemas/tv.mddoc48,052 bytesreferences/schemas/watch.mddoc44,714 bytesreferences/troubleshooting.mddoc3,733 bytes
Read SKILL.md
This skill guides you through integrating the Play Engage SDK into an Android
app. It ensures that the code follows the mandatory structure and uses the
required Engage entities for each vertical.
## Workflow
Follow these steps to assist the developer:
1. **Identify vertical and cluster:**
- Ask the developer which vertical their app belongs to based on **[references/schemas/](references/schemas)**.
- Check if the integration is for TV or mobile. If the integration is for TV, read the TV-specific sections in [patterns.md](references/patterns.md) as well.
- Use `{VERTICAL}.md` in the **[references/schemas/](references/schemas)** directory to identify the corresponding Engage entities and the `client` class name. The `client` field in the JSON provides the full class name. For example, `com.google.android.engage.food.service.AppEngageFoodClient`.
- **Note:** Initializing the client class requires a `Context` parameter. For example, `AppEngageFoodClient(context)`.View the complete source on GitHubplay-billing-library-version-upgrade
When your agent uses it
Use this skill when upgrading or migrating an Android project from any legacy Google Play Billing Library (PBL) version to the latest stable version of PBL.
What it loads into context
Frontmatter
116 tokensAlways available to the agent
SKILL.md
1,314 tokensWhen the skill is activated
Reference documents
18,601 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Phase 0: Intent Message
- Phase 1: Discovery \& Situational Awareness
- Phase 2: Contextual Document Mapping \& Planning
- Phase 3: Instructions for Execution
- Final Report
Files
SKILL.mdcore5,656 bytesSKILL.mdcore5,656 bytesreferences/android/google/play/billing/release-notes.mddoc80,434 bytesreferences/migration-logic.mddoc4,379 bytesreferences/version-checklist.mddoc3,404 bytes
Read SKILL.md
## Phase 0: Intent Message
**Reporting Action**: Before proceeding, immediately tell the user: "I will
upgrade Play Billing Library to the latest version."
## Phase 1: Discovery \& Situational Awareness
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`.
2. **Initial Compilation Test**: Attempt to sync and build the project immediately.
3. **Fallback Discovery (Effective Version)** :
- **Trigger**: Only if the build fails immediately, scan the source code for deprecated artifacts.
- **Logic** : The presence of deprecated APIs indicates the **"Effective
Version"** ---defined as the version where those specific APIs were **last
available**, not when they were introduced.View the complete source on GitHubplay-policy-insights
When your agent uses it
Automated auditor designed to verify Android applications against Google Play Policy domains. It cross-references static code analysis with Play Store declarations to generate deterministic compliance reports, identifying undeclared data collection, architectural risks, and missing disclosures across Permissions and APIs Hygiene, User Account and Identity, and Data Safety and Privacy domains.
What it loads into context
Frontmatter
262 tokensAlways available to the agent
SKILL.md
2,009 tokensWhen the skill is activated
Reference documents
13,080 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Path Resolution
- Critical mandates
- The two-phase protocol
Scripts executed separately
scripts/generate_report.pyscripts/orchestrator.pyscripts/play_store_scraper.pyscripts/scanner.pyscripts/template_engine.py
Files
SKILL.mdcore8,521 bytesSKILL.mdcore8,521 bytesSKILL.mdcore8,521 bytesSKILL.mdcore8,521 bytesresources/common_mandates.mddoc6,127 bytesresources/compliance_report_template.mddoc3,204 bytesresources/critic.mddoc4,293 bytesresources/goal_data_safety.mddoc10,420 bytesresources/goal_permissions_and_apis.mddoc26,352 bytesresources/goal_user_account.mddoc5,262 bytesresources/policies.jsonasset13,159 bytesresources/scanner_config.jsonasset26,066 bytesscripts/generate_report.pyruns28,402 bytesscripts/orchestrator.pyruns46,010 bytesscripts/play_store_scraper.pyruns12,303 bytesscripts/scanner.pyruns9,055 bytesscripts/template_engine.pyruns7,129 bytes
Read SKILL.md
# Play Policy Insights: data safety, login credentials, and restricted permissions
You must audit Android apps for three specific policy domains. You must check
data safety, demo login credentials, and restricted permissions.
## Path Resolution
* **repo_root**: Absolute path to the directory containing this `SKILL.md`.
* **app_dir**:: Absolute path to the directory containing app's code.
* **temp_dir**: Absolute path to the scratch directory at the workspace root.
It is located at `.scratch/play_policy_insights_<uuid>`. **Containment
Mandate**: You must confine all file system writes, intermediate artifacts,
and logs strictly to this directory. This ensures the skill remains portable
and safe across diverse execution environments, including local harnessesView the complete source on GitHubandroid-profiler
When your agent uses it
Records and analyzes Android performance data and diagnoses performance bottlenecks across user apps, system apps, and system services, even if the user does not explicitly mention profiling or traces. Use when: recording system traces, CPU call stacks, Vulkan GPU/DRM memory, or Java/native heap profiles; analyzing Perfetto traces for UI jank, frame drops, ANRs, or app startup latency issues; investigating CPU bottlenecks, IPC/Binder storms, or thread scheduling stalls; diagnosing battery drain, modem power rails, and kernel wake locks; debugging memory pressure, Low Memory Kills (LMK), OOMs, leaks, and allocation churn; performing A/B baseline trace comparisons to find regressions; executing ad hoc PerfettoSQL queries on Android traces.
What it loads into context
Frontmatter
251 tokensAlways available to the agent
SKILL.md
513 tokensWhen the skill is activated
Reference documents
14,273 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Prerequisites and Setup
- Intent Disambiguation
- Recording
- Analysis
Scripts executed separately
references/perfetto/bin/trace_processor
Files
SKILL.mdcore2,269 bytesanalysis/analysis_orchestrator.mddoc1,491 bytesanalysis/workflows/perfetto-sql/perfetto_sql.mddoc969 bytesanalysis/workflows/perfetto-trace-analysis/perfetto_trace_analysis.mddoc4,305 bytesanalysis/workflows/perfetto-trace-analysis/references/hints/hints_cpu.mddoc2,673 bytesanalysis/workflows/perfetto-trace-analysis/references/hints/hints_graphics.mddoc2,177 bytesanalysis/workflows/perfetto-trace-analysis/references/hints/hints_io.mddoc1,833 bytesanalysis/workflows/perfetto-trace-analysis/references/hints/hints_ipc.mddoc1,776 bytesanalysis/workflows/perfetto-trace-analysis/references/hints/hints_memory.mddoc2,282 bytesanalysis/workflows/perfetto-trace-analysis/references/hints/hints_power.mddoc1,202 bytesanalysis/workflows/perfetto-trace-analysis/references/per_candidate_analysis.mddoc8,977 bytesanalysis/workflows/perfetto-trace-analysis/references/triage.mddoc3,988 bytesrecording/recording_orchestrator.mddoc1,576 bytesrecording/workflows/perfetto-trace-recording/perfetto_trace_recording.mddoc4,769 bytesrecording/workflows/perfetto-trace-recording/references/example-configs/app_jank.pftxtasset1,040 bytesrecording/workflows/perfetto-trace-recording/references/example-configs/cpu_profile.pftxtasset773 bytesrecording/workflows/perfetto-trace-recording/references/example-configs/java_heap_dump.pftxtasset566 bytesrecording/workflows/perfetto-trace-recording/references/example-configs/long_background.pftxtasset1,006 bytesrecording/workflows/perfetto-trace-recording/references/example-configs/memory_counters.pftxtasset1,069 bytesrecording/workflows/perfetto-trace-recording/references/example-configs/native_heap.pftxtasset589 bytesrecording/workflows/perfetto-trace-recording/references/example-configs/sched_cpu.pftxtasset836 bytesrecording/workflows/perfetto-trace-recording/references/trace_config_reference.mddoc4,983 bytesreferences/env_setup.mddoc513 bytesreferences/perfetto/bin/trace_processorruns11,073 bytesreferences/perfetto/setup.mddoc1,332 bytesreferences/perfetto/sql.mddoc16,206 bytes
Read SKILL.md
Your primary role is to figure out what the user wants to do (disambiguation),
find the right instructions for it (workflow discovery), and follow them
step-by-step (following the execution plan). If the request is unclear, work
with the user to finalize the execution plan before proceeding.
## Prerequisites and Setup
Before executing any workflows, read [`references/env_setup.md`](references/env_setup.md). It defines
what to set `$SKILL_ROOT` to - the anchor every other path in this skill is
written against.
## Intent Disambiguation
Do not guess the user's intent. If the user request is not clear, **ask theView the complete source on GitHubandroid-intent-security
When your agent uses it
Best practices for Android Intent security. Use this skill when auditing component configurations in AndroidManifest.xml activities, services, receivers) or source code handling incoming Intents (getIntent, getParcelableExtra) to prevent Intent Redirection and unauthorized access.
What it loads into context
Frontmatter
150 tokensAlways available to the agent
SKILL.md
5,262 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Glossary
- Prerequisites
- Limitations
- Setup and dependencies
- Intent security logic and decisions
- Code and configuration patterns
- Error handling
- Reporting guidelines
- Antipatterns
- Best Practices
Files
SKILL.mdcore24,418 bytesSKILL.mdcore24,418 bytesSKILL.mdcore24,418 bytesSKILL.mdcore24,418 bytes
Read SKILL.md
This skill provides guidelines and patterns to secure Android components
(Activities, Services, Broadcast Receivers, Content Providers) and handle
Intents safely, preventing privilege escalation and unauthorized access.
## Glossary
- **Intent:** An asynchronous messaging object used to request an action from another app component.
- **Exported component:** A component (`android:exported="true"`) that can be launched by other apps on the device.
- **Sticky intent:** A broadcast intent that remains in the system cache after it's sent, allowing any app to retrieve its contents.
- **Signature permission:** A permission whose protection level is set to `signature`, granted only to apps signed with the same developer key.
- **onNewIntent:** An activity lifecycle callback invoked when an activity is launched with `FLAG_ACTIVITY_SINGLE_TOP` and is already running at the top of the history stack.
- **PendingIntent:** A token granted to a foreign application (for example, system services) allowing it to execute a predefined Intent with the creator's permissions.
- **Mutable PendingIntent:** A PendingIntent whose underlying Intent parameters can be modified by the receiving application.
- **ContentProvider:** A component that encapsulates data and provides it to other applications via standard query/insert interfaces.View the complete source on GitHubandroid-permissions-security
When your agent uses it
Audits, detects gaps, and remediates Android permissions and IPC component security vulnerabilities. Use when reviewing AndroidManifest.xml, defining custom permissions, securing Services, Receivers, and Providers, verifying caller signatures and UID using Binder, or implementing runtime permission flows.
What it loads into context
Frontmatter
187 tokensAlways available to the agent
SKILL.md
6,193 tokensWhen the skill is activated
Reference documents
11,979 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Glossary
- Prerequisites
- 1. Security audit and permission gap detection playbook
- 2. Custom permissions and protection levels
- 3. Exported component protection and URI permissions
- 4. Cryptographic caller identity verification
- 5. Method-level Binder enforcement in bound services (SecureBoundService.kt)
- 6. Safe runtime permission workflow (RuntimePermissionsActivity.kt)
- 7. Zero-permission alternatives and sequential flows
- 8. Stateless checks and error boundaries
- 9. Secure broadcasts (API 34+ share identity)
- Quality checklist
Files
SKILL.mdcore29,205 bytesreferences/android/guide/topics/manifest/permission-element.mddoc6,904 bytesreferences/android/guide/topics/permissions/overview.mddoc10,610 bytesreferences/android/privacy-and-security/risks/sender-of-pending-intents.mddoc3,819 bytesreferences/android/training/permissions/requesting.mddoc38,838 bytes
Read SKILL.md
Guidelines for auditing permission vulnerabilities, enforcing least privilege,
securing IPC boundaries, and handling runtime permissions across the Android
ecosystem.
## Glossary
- **Runtime Permission:** Dangerous permission (e.g., Camera, Location) that must be granted by the user at runtime on Android 6.0+ (API 23+).
- **Custom Permission:** A permission defined by an app (`<permission>`) to restrict access to its exported components.
- **Protection Level:** Attribute defining how the OS grants the permission (`normal`, `dangerous`, `signature`, `knownSigner`).
- **knownSigner:** Protection flag (API 31+) granting signature-level access to partner apps matching trusted certificate digests.
- **SigningInfo:** Object (API 28+) providing signing history and multiple signer certificates for an application.
- **Binder Calling Identity:** Reliable UID representing the calling process obtained using `Binder.getCallingUid()`.
- **URI Permission:** Temporary, granular access granted to a content URI using `grantUriPermissions` and intent flags.
View the complete source on GitHubedge-to-edge
When your agent uses it
Use this skill to migrate your Jetpack Compose app to add adaptive edge-to-edge support and troubleshoot common issues. Use this skill to fix UI components (like buttons or lists) that are obscured by or overlapping with the navigation bar or status bar, fix IME insets, and fix system bar legibility.
What it loads into context
Frontmatter
137 tokensAlways available to the agent
SKILL.md
3,320 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Prerequisites
- Step 1: plan
- Step 2: add edge-to-edge support
- Step 3: apply insets
- Adaptive Scaffolds
- IME
- Navigation Bar Contrast \& System Bar Icons
- Lists
- Dialogs
- Checklist
Files
SKILL.mdcore14,433 bytes
Read SKILL.md
## Prerequisites
- Project **MUST** use Android Jetpack Compose.
- Project **MUST** target SDK 35 or later. If the SDK is lower than 35, increase the SDK to 35.
## Step 1: plan
1. Locate and analyze all Activity classes to detect which have existing edge-to-edge support. For every Activity without edge-to-edge, plan to make each Activity edge-to-edge.
2. In each Activity, Locate and analyze all lists and FAB components to detect which have existing edge-to-edge support. For every component without edge-to-edge support, plan to make each of these components edge-to-edge.
3. In each Activity, scan for `TextField`, `OutlinedTextField`, or `BasicTextField`. If found, then you **MUST** verify the IME doesn't hide the input field by following the IME section of this skill.
## Step 2: add edge-to-edge support
1. Add `enableEdgeToEdge` before `setContent` in `onCreate` in each Activity that does not already call `enableEdgeToEdge`.View the complete source on GitHubglance-appwidget-updates-and-memory
When your agent uses it
Manages Android AppWidget state updates, background syncs, and RemoteViews bitmap memory limits with Jetpack Glance (androidx.glance:glance-appwidget) and AppWidgetProvider receivers on Android 17 (API 37). Use this skill when configuring Android 17 (API level 37) compileSdk/targetSdk and AndroidManifest.xml widget receivers, refreshing frozen or stale Glance widget UI after CoroutineWorker DataStore preference updates (updateAppWidgetState), downsampling images within the WindowMetrics memory limit for SizeMode.Responsive, SizeMode.Exact, or LazyColumn, sharing content:// URIs with FileProvider, or fixing ActionCallback NoSuchMethodException and AppWidgetProvider ForegroundServiceStartNotAllowedException crashes with WorkManager. Don't use for Glance layout templates (suggest the glance-canonical-layouts skill) or in-app Compose screens.
What it loads into context
Frontmatter
371 tokensAlways available to the agent
SKILL.md
5,196 tokensWhen the skill is activated
Reference documents
11,942 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Prerequisites
- Critical mandates
- Reference implementation files
- Detailed steps
- Common errors and fixes
- Antipatterns
Files
SKILL.mdcore21,297 bytesreferences/AndroidManifest.xmlasset1,127 bytesreferences/ClassicWidgetImageUpdater.ktasset2,028 bytesreferences/FeedCollectionGlanceWidget.ktasset2,380 bytesreferences/SampleGlanceWidget.ktasset4,063 bytesreferences/WidgetBitmapUtils.ktasset4,485 bytesreferences/WidgetStateAndActions.ktasset1,893 bytesreferences/android/about/versions/17/behavior-changes-17.mddoc24,035 bytesreferences/android/develop/ui/compose/glance/create-app-widget.mddoc22,264 bytesreferences/android/develop/ui/views/appwidgets/index.mddoc9,750 bytesreferences/proguard-rules.proasset98 bytesreferences/res/xml/file_paths.xmlasset117 bytesreferences/res/xml/sample_widget_info.xmlasset307 bytes
Read SKILL.md
This skill provides guidance for managing state updates and keeping Android
AppWidgets that use Jetpack Glance (`androidx.glance:glance-appwidget`) or
`RemoteViews` within the Android 17 widget bitmap memory limits. For widget UI
layout templates, suggest the `glance-canonical-layouts` skill.
- When configuring a Glance widget, see [Create an app widget with Glance](references/android/develop/ui/compose/glance/create-app-widget.md).
- When targeting Android 17 (`targetSdk = 37`), see [Android 17 widget memory limits](references/android/about/versions/17/behavior-changes-17.md).
- When maintaining a classic `AppWidgetProvider`, see [Create an app widget](references/android/develop/ui/views/appwidgets/index.md).
## Prerequisites
- Kotlin Android project (`minSdk >= 26`) with `compileSdk = 37` (`targetSdk = 37` when targeting Android 17) in `build.gradle.kts`.
- Jetpack Glance (`1.2.0`, minimum `1.1.1+`) and the Compose compiler Gradle plugin enabled on the module.
View the complete source on GitHubglance-canonical-layouts
When your agent uses it
Use this skill to create home screen widgets using Jetpack Glance Canonical Layouts from the Android Platform Samples project, or when asked to implement standard widget layout patterns (including Check List, Image Grid, Snap Scrolling, and Standard Toolbar).
What it loads into context
Frontmatter
174 tokensAlways available to the agent
SKILL.md
5,749 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Dependencies
- Canonical layout reference files
- Troubleshooting
- Checklist
Files
SKILL.mdcore24,521 bytesreferences/ActionDemonstrationActivity.ktasset1,629 bytesreferences/CanonicalLayoutActivity.ktasset14,076 bytesreferences/CollectionsKtx.ktasset1,323 bytesreferences/collections/ActionListAppWidget.ktasset3,360 bytesreferences/collections/CheckListAppWidget.ktasset3,623 bytesreferences/collections/ImageGridAppWidget.ktasset3,393 bytesreferences/collections/ImageTextListAppWidget.ktasset3,519 bytesreferences/collections/data/FakeActionListDataRepository.ktasset4,606 bytesreferences/collections/data/FakeCheckListDataRepository.ktasset3,853 bytesreferences/collections/data/FakeImageGridDataRepository.ktasset8,375 bytesreferences/collections/data/FakeImageTextListDataRepository.ktasset7,330 bytesreferences/collections/layout/ActionListLayout.ktasset20,141 bytesreferences/collections/layout/CheckListLayout.ktasset17,067 bytesreferences/collections/layout/EmptyListContent.ktasset900 bytesreferences/collections/layout/ImageGridLayout.ktasset13,655 bytesreferences/collections/layout/ImageTextListLayout.ktasset17,444 bytesreferences/collections/layout/ListItem.ktasset3,168 bytesreferences/collections/layout/NoDataContent.ktasset2,765 bytesreferences/collections/layout/RoundedScrollingLazyColumn.ktasset2,875 bytesreferences/collections/layout/RoundedScrollingLazyVerticalGrid.ktasset4,354 bytesreferences/collections/layout/VerticalListItem.ktasset3,507 bytesreferences/res/drawable/four_side_cookie_background.xmlasset1,445 bytesreferences/res/drawable/sample_ac_icon.xmlasset1,385 bytesreferences/res/drawable/sample_add_icon.xmlasset315 bytesreferences/res/drawable/sample_app_logo.xmlasset1,120 bytesreferences/res/drawable/sample_arrow_right_icon.xmlasset365 bytesreferences/res/drawable/sample_bulb_icon.xmlasset651 bytesreferences/res/drawable/sample_camera_icon.xmlasset1,235 bytesreferences/res/drawable/sample_checked_circle_icon.xmlasset402 bytesreferences/res/drawable/sample_circle_icon.xmlasset415 bytesreferences/res/drawable/sample_delete_icon.xmlasset389 bytesreferences/res/drawable/sample_door_icon.xmlasset810 bytesreferences/res/drawable/sample_edit_icon.xmlasset520 bytesreferences/res/drawable/sample_file_upload_icon.xmlasset1,062 bytesreferences/res/drawable/sample_grid_icon.xmlasset968 bytesreferences/res/drawable/sample_heart_icon.xmlasset1,149 bytesreferences/res/drawable/sample_home_icon.xmlasset517 bytesreferences/res/drawable/sample_image_icon.xmlasset846 bytesreferences/res/drawable/sample_info_icon.xmlasset449 bytesreferences/res/drawable/sample_mic_icon.xmlasset1,284 bytesreferences/res/drawable/sample_no_data_icon.xmlasset546 bytesreferences/res/drawable/sample_pin_icon.xmlasset488 bytesreferences/res/drawable/sample_power_settings_icon.xmlasset499 bytesreferences/res/drawable/sample_refresh_icon.xmlasset490 bytesreferences/res/drawable/sample_scrim_gradient.xmlasset1,476 bytesreferences/res/drawable/sample_search_icon.xmlasset1,184 bytesreferences/res/drawable/sample_share_icon.xmlasset711 bytesreferences/res/drawable/sample_snooze_icon.xmlasset569 bytesreferences/res/drawable/sample_text_icon.xmlasset491 bytesreferences/res/drawable/sample_thermostat_icon.xmlasset937 bytesreferences/res/drawable/sample_videocam_icon.xmlasset1,066 bytesreferences/res/values/dimens.xmlasset8,589 bytesreferences/res/values/strings.xmlasset5,985 bytesreferences/res/xml/sample_action_list_widget_info.xmlasset1,753 bytesreferences/res/xml/sample_check_list_widget_info.xmlasset1,817 bytesreferences/res/xml/sample_expressive_toolbar_widget_info.xmlasset1,649 bytesreferences/res/xml/sample_full_bleed_image_widget_info.xmlasset1,432 bytesreferences/res/xml/sample_image_grid_widget_info.xmlasset1,744 bytesreferences/res/xml/sample_image_text_list_widget_info.xmlasset1,829 bytesreferences/res/xml/sample_long_text_widget_info.xmlasset1,511 bytesreferences/res/xml/sample_search_toolbar_widget_info.xmlasset1,584 bytesreferences/res/xml/sample_text_with_image_widget_info.xmlasset1,588 bytesreferences/res/xml/sample_toolbar_widget_info.xmlasset1,550 bytesreferences/text/FullBleedImageAppWidget.ktasset3,625 bytesreferences/text/LongTextAppWidget.ktasset3,160 bytesreferences/text/TextWithImageAppWidget.ktasset3,864 bytesreferences/text/data/FakeLongTextRespository.ktasset3,036 bytesreferences/text/data/FakeTextWithImageRepository.ktasset6,069 bytesreferences/text/layout/FullBleedImageLayout.ktasset7,884 bytesreferences/text/layout/LongTextLayout.ktasset12,115 bytesreferences/text/layout/TextWithImageLayout.ktasset17,290 bytesreferences/toolbars/ExpressiveToolbarAppWidget.ktasset3,815 bytesreferences/toolbars/SearchToolBarAppWidget.ktasset3,275 bytesreferences/toolbars/ToolBarAppWidget.ktasset3,504 bytesreferences/toolbars/layout/Buttons.ktasset4,752 bytesreferences/toolbars/layout/ExpressiveToolbarLayout.ktasset15,231 bytesreferences/toolbars/layout/LayoutComponents.ktasset5,693 bytesreferences/toolbars/layout/SearchToolBarLayout.ktasset14,998 bytesreferences/toolbars/layout/ToolBarLayout.ktasset16,248 bytesreferences/ui/theme/Color.ktasset313 bytesreferences/ui/theme/Theme.ktasset2,122 bytesreferences/ui/theme/Type.ktasset992 bytesreferences/utils/ActionUtils.ktasset780 bytesreferences/utils/FontUtils.ktasset3,573 bytesreferences/utils/ImageAspectRatio.ktasset1,063 bytesreferences/utils/ImageUtils.ktasset5,383 bytesreferences/utils/PreviewAnnotations.ktasset3,064 bytes
Read SKILL.md
To implement a widget Canonical Layout that follows the recommended design
patterns:
1. The project **MUST** use Jetpack Glance.
2. You **MUST** locate the requested layout from the list under **Canonical Layout Reference Files**.
3. Copy the layout reference files into your project's target app module (e.g., `src/main/java/` and `src/main/res/`) in one step to implement the exact design and reduce the number of tool calls.
4. You **MUST** set override val `sizeMode: SizeMode = SizeMode.Exact` in the widget provider class.
5. Validate that your project compiles, updating sample package declarations, import paths, and class names to match the target app's package name.
6. Clean your project's widget code, removing unused classes (for example, unused buttons).
7. You **MUST** register the widget receiver in `AndroidManifest.xml` inside `<application>` after `<activity>`, ensuring `android:resource="@xml/..."` matches the filename of the copied Widget Info XML. Otherwise, the widget won't appear in the widget picker:
<br />
```xmlView the complete source on GitHubtesting-setup
When your agent uses it
Analyze and create a testing strategy for Android apps - install testing libraries, set up test infrastructure, create harnesses for unit tests, UI tests, screenshot tests, and end-to-end tests.
What it loads into context
Frontmatter
102 tokensAlways available to the agent
SKILL.md
2,304 tokensWhen the skill is activated
Reference documents
11,025 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Step 1: Analyze the current testing setup
- Step 2: Set up Dependency Injection frameworks for testing
- Step 3: Install frameworks
- Step 4: Refactor and create fakes for testing
- Step 5: Unit testing
- Step 6: UI testing
- Step 7: Test databases
- Step 8: Screenshot tests
- Step 9: UI Behavior tests
- Step 10: Navigation tests
- Step 11: Simulate different window sizes and settings
- Step 12: End-to-end tests
- Step 13: Instrumented Screenshot tests
- Step 14: Install JaCoCo
- Final touches
Files
SKILL.mdcore10,232 bytesreferences/android/develop/ui/compose/testing/common-patterns.mddoc15,215 bytesreferences/android/studio/preview/compose-screenshot-testing-with-testsuites.mddoc7,507 bytesreferences/android/studio/preview/compose-screenshot-testing.mddoc13,004 bytesreferences/android/training/dependency-injection/hilt-testing.mddoc14,864 bytes
Read SKILL.md
## Step 1: Analyze the current testing setup
To understand the testing setup of an existing project, look for these
dependencies in the libs.versions.toml file, or build files:
1. Dependency Injection framework used. For example, Hilt, Koin, Anvil, or vanilla Dagger.
2. Unit (local) testing framework this project uses. For example, JUnit4 or JUnit5.
3. Mocking framework (if any) used for unit tests, and for instrumented and UI tests. For example, Mockito or Mockk.
4. Robolectric. Identify which of these three uses apply:
1. Used in unit tests to have fakes for platform entities
2. To run behavior UI tests without a device or emulator. For example, used to run Espresso or Compose tests.
3. To do screenshot testing with Roborazzi
5. Is the app 100% Compose, Views or hybrid?
6. Behavior UI tests:View the complete source on GitHubleanback-to-compose-tv-migration
When your agent uses it
Provides instructions and architectural patterns for migrating Android TV applications from legacy Leanback UI Toolkit, Android Views, or Support Fragments to Jetpack Compose for TV (androidx.tv). Use this skill for Leanback to Compose migrations, including browse screen, settings screen, authentication screen, login screen, or video playback screen migrations, or when replacing BrowseSupportFragment, LeanbackSettingsFragment, PreferenceFragment, BaseLeanbackPreferenceFragmentCompat, VideoSupportFragment, GuidedStepSupportFragment, SearchSupportFragment, VerticalGridSupportFragment, Presenter, ArrayObjectAdapter, or CursorMapper with modern Compose equivalents, implementing immersive carousels with focus memory, Media3 video playback with PlayerSurface, or custom 10-foot hero layouts.
What it loads into context
Frontmatter
284 tokensAlways available to the agent
SKILL.md
7,009 tokensWhen the skill is activated
Reference documents
7,476 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- The 10-foot UI
- Core architecture and library selection
- D-pad focus handling and navigation
- Lazy containers
- Media3 video playback and transport controls
- Phased migration strategy
- Component and class mapping guide
- Reference implementations and battle-tested patterns
Files
SKILL.mdcore34,769 bytesreferences/android/training/tv/get-started/navigation.mddoc17,347 bytesreferences/android/training/tv/playback/compose/browse.mddoc9,942 bytesreferences/android/training/tv/playback/compose/index.mddoc7,814 bytes
Read SKILL.md
## The 10-foot UI
A "10-foot UI" is a design paradigm for televisions that tailors an interface
for viewing from approximately 3 meters (10 feet) away. When designing for this
experience, account for these key characteristics:
- **Viewing distance**: Viewers are sitting far from the screen, "leaning back". Screen layouts are uncluttered, with text and UI elements that are large enough to be comfortably readable from a distance, without dense blocks of text.
- **Color contrast**: To avoid washed out colors on TV displays with low contrast ratios, the design uses high-contrast palettes and distinct visual indicators so focused states remain visible across different TV panels.
- **D-pad navigation** : Interaction relies on a directional remote control with limited 4-way navigation (`Up`, `Down`, `Left`, `Right`) with components organized into clear spatial grids and carousels without focus traps.
## Core architecture and library selection
When migrating an Android TV application to Jetpack Compose, you must use
`androidx.tv` libraries and follow these 10-foot UI patterns:View the complete source on GitHubwear-compose-m3
When your agent uses it
Guidance for Wear OS Compose Material3 (Wear Compose Material 3 / Wear Compose Material3) watch and wearable apps. Covers creating, updating, and migrating projects (Material 2.5 and Horologist migration) using androidx.wear.compose.material3, androidx.wear.compose.foundation, and androidx.wear.compose.navigation3, including AppScaffold, ScreenScaffold, TransformingLazyColumn, ambient mode, and previews.
What it loads into context
Frontmatter
202 tokensAlways available to the agent
SKILL.md
8,841 tokensWhen the skill is activated
Reference documents
81,180 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Prerequisites and compatibility
- Gotchas
- Capabilities and tools
Files
SKILL.mdcore39,165 bytesreferences/android/training/wearables/compose/migrate-to-material3.mddoc91,192 bytesreferences/foundation/AmbientModeSample.kt.mddoc5,141 bytesreferences/foundation/CurvedWorldSample.kt.mddoc14,684 bytesreferences/foundation/ExpandableSample.kt.mddoc3,708 bytesreferences/foundation/HierarchicalFocusSample.kt.mddoc5,503 bytesreferences/foundation/PagerSamples.kt.mddoc2,076 bytesreferences/foundation/RotarySamples.kt.mddoc6,161 bytesreferences/foundation/SwipeToDismissBoxSample.kt.mddoc7,493 bytesreferences/foundation/TransformingLazyColumnSample.kt.mddoc13,194 bytesreferences/material3/AlertDialogSample.kt.mddoc12,815 bytesreferences/material3/AnimatedTextSample.kt.mddoc6,347 bytesreferences/material3/ButtonGroupSample.kt.mddoc3,381 bytesreferences/material3/ButtonSample.kt.mddoc17,413 bytesreferences/material3/CardSample.kt.mddoc15,525 bytesreferences/material3/CheckboxButtonSample.kt.mddoc2,368 bytesreferences/material3/ConfirmationDialogSample.kt.mddoc5,511 bytesreferences/material3/CurvedTextSamples.kt.mddoc2,930 bytesreferences/material3/DatePickerSample.kt.mddoc4,845 bytesreferences/material3/DynamicColorSchemeSample.kt.mddoc3,103 bytesreferences/material3/EdgeButtonSample.kt.mddoc2,360 bytesreferences/material3/FadingExpandingLabelSample.kt.mddoc2,185 bytesreferences/material3/IconButtonSample.kt.mddoc3,973 bytesreferences/material3/IconToggleButtonSample.kt.mddoc3,706 bytesreferences/material3/LevelIndicatorSample.kt.mddoc2,556 bytesreferences/material3/LinearProgressIndicatorSample.kt.mddoc1,812 bytesreferences/material3/ListHeaderSample.kt.mddoc7,816 bytesreferences/material3/OneHandedGestureSamples.kt.mddoc32,291 bytesreferences/material3/OpenOnPhoneDialogSample.kt.mddoc2,045 bytesreferences/material3/PageIndicatorSample.kt.mddoc4,237 bytesreferences/material3/PagerScaffoldSample.kt.mddoc8,689 bytesreferences/material3/PickerGroupSample.kt.mddoc5,980 bytesreferences/material3/PickerSample.kt.mddoc3,734 bytesreferences/material3/PlaceholderSample.kt.mddoc6,658 bytesreferences/material3/ProgressIndicatorSample.kt.mddoc9,060 bytesreferences/material3/RadioButtonSample.kt.mddoc4,254 bytesreferences/material3/ScaffoldSample.kt.mddoc6,311 bytesreferences/material3/ScrollAwaySample.kt.mddoc3,839 bytesreferences/material3/ScrollIndicatorSample.kt.mddoc2,498 bytesreferences/material3/SliderSample.kt.mddoc2,468 bytesreferences/material3/StepperSample.kt.mddoc5,281 bytesreferences/material3/SurfaceTransformationSample.kt.mddoc6,184 bytesreferences/material3/SwipeToDismissBoxSample.kt.mddoc7,443 bytesreferences/material3/SwipeToRevealSample.kt.mddoc14,017 bytesreferences/material3/SwitchButtonSample.kt.mddoc2,311 bytesreferences/material3/TextButtonSample.kt.mddoc3,029 bytesreferences/material3/TextToggleButtonSample.kt.mddoc2,326 bytesreferences/material3/TimePickerSample.kt.mddoc5,669 bytesreferences/material3/TimeTextSample.kt.mddoc2,584 bytesreferences/material3/TransformationSpecSample.kt.mddoc10,178 bytesreferences/material3/TransformingLazyColumnNotificationsSample.kt.mddoc3,769 bytesreferences/material3/TransformingLazyColumnSample.kt.mddoc13,321 bytesreferences/navigation3/SwipeDismissableSceneStrategySample.kt.mddoc8,513 bytes
Read SKILL.md
## Prerequisites and compatibility
1. **Current Wear OS Compose version in-use:** To find the installed library version, read `gradle/libs.versions.toml` or `build.gradle.kts` directly. Don't run `./gradlew dependencies` or other shell commands to resolve versions.
2. **Wear OS Compose Material3 version:** If an internal tool is available to establish the **latest stable version** `{VERSION}` of `androidx.wear.compose:compose-material3`, use that tool.
- Otherwise, fetch the [official Maven metadata XML](https://dl.google.com/dl/android/maven2/androidx/wear/compose/compose-material3/maven-metadata.xml) to identify `{VERSION}` (highest number, ignoring `-alpha`, `-beta`, or `-rc`).
3. **Strict compliance:** If a version is listed as stable, you MUST use it, unless overridden by the user. Do not downgrade based on initial "Unresolved reference" errors in the editor or outdated web search results.
4. **Kotlin \& Compose compiler:** Use Kotlin **2.0.0+** with the `org.jetbrains.kotlin.plugin.compose` Gradle plugin.
5. **Min SDK:** Ensure `minSdk` is at least **25**.
6. **Compile SDK \& AGP:** Ensure `compileSdk` and AGP meet the library's AAR metadata floors (`compileSdk >= 35` and `AGP >= 8.6.0` for `1.6.x`; `compileSdk >= 37` and `AGP >= 9.1.0` for `1.7.x`).
## Gotchas
1. **Mandatory sync and validation:** After updating versions in `libs.versions.toml` or `build.gradle.kts`, perform a Gradle sync (or `./gradlew assembleDebug`) before refactoring, and run `./gradlew assembleDebug` after refactoring to verify the build.
2. **Prohibition of guessing (error protocol):** If you encounter an 'Unresolved Reference' or API mismatch after a successful sync, do not attempt to 'fix' it by downgrading the library version.View the complete source on GitHubwear-widgets
When your agent uses it
Create, migrate, update, and verify Wear OS widgets using Glance Wear and Remote Compose in an Android project. Use this skill when implementing GlanceWearWidget, GlanceWearWidgetService, WearWidgetDocument, Remote Compose UI primitives (RemoteColumn, RemoteRow, RemoteBox, RemoteText, RemoteImage, RemoteButton), local state with rememberMutableRemoteInt and valueChange, click actions with pendingIntentAction, widget provider XML containers (SMALL and LARGE), rectangular widget picker PNG previews, or migrating legacy ProtoLayout TileService tiles to Wear OS widgets. Don't use for mobile home screen AppWidgetProvider or GlanceAppWidget implementations, watch face complications, or full-screen Wear OS activities.
What it loads into context
Frontmatter
219 tokensAlways available to the agent
SKILL.md
3,051 tokensWhen the skill is activated
Reference documents
5,061 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Prerequisites and setup
- Codebase exploration
- Workflow
- Component mapping
- Troubleshooting
- Verification
- Antipatterns
- Best practices
Files
SKILL.mdcore12,839 bytesSKILL.mdcore12,839 bytesreferences/previews-and-testing.mddoc5,569 bytesreferences/remote-compose-layouts.mddoc8,157 bytesreferences/state-and-actions.mddoc5,713 bytesreferences/widget-service-and-manifest.mddoc4,644 bytes
Read SKILL.md
Wear OS widgets use `androidx.glance.wear` (`GlanceWearWidget` and
`GlanceWearWidgetService`) with `androidx.compose.remote` (Remote Compose).
They serialize declarative UI and state documents to the watch host process.
## Prerequisites and setup
1. **Resolve library versions** : Resolve the latest versions for `{GLANCE_WEAR_VERSION}` (`androidx.glance.wear`), `{COMPOSE_REMOTE_VERSION}` (`androidx.compose.remote`), and `{WEAR_COMPOSE_REMOTE_VERSION}` (`androidx.wear.compose.remote`). Include `-alpha`, `-beta`, or `-rc` releases when no stable version exists yet. Don't run `./gradlew dependencies` to resolve versions:
- Use an available dependency lookup tool if present.
- Otherwise, fetch the latest version from Google Maven metadata ([Glance Wear metadata](https://dl.google.com/dl/android/maven2/androidx/glance/wear/wear/maven-metadata.xml), [Compose Remote metadata](https://dl.google.com/dl/android/maven2/androidx/compose/remote/remote-creation-compose/maven-metadata.xml), [Wear Compose Remote metadata](https://dl.google.com/dl/android/maven2/androidx/wear/compose/remote/remote-material3/maven-metadata.xml)).
2. **SDK and Compose compiler requirements** : Ask permission before modifying repo-wide Gradle files unless the user requested widget creation, tile migration, or dependency setup. Set `compileSdk = 37` or higher and enable `buildFeatures { compose = true }`. Keep the project's existing Android and Kotlin Gradle plugin declarations intact.
dependencies {
implementation("androidx.glance.wear:wear:{GLANCE_WEAR_VERSION}")
implementation("androidx.glance.wear:wear-core:{GLANCE_WEAR_VERSION}")View the complete source on GitHubdisplay-glasses-with-jetpack-compose-glimmer
When your agent uses it
Provides guidelines for developing projected Android XR apps for display glasses using the Jetpack Compose Glimmer UI toolkit. Covers Glimmer design principles, workflows, and interaction models for the glasses form factor. Use this skill to build an Android XR Augmented Experience app with Jetpack Compose Glimmer. Don't use for audio-only AI glasses without a display, non-glasses Android XR headsets (spatial panels or 3D volumes with Jetpack Compose for XR), or phone and tablet Material 3 UIs.
What it loads into context
Frontmatter
198 tokensAlways available to the agent
SKILL.md
6,238 tokensWhen the skill is activated
Reference documents
70,770 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Glossary
- Prerequisites
- Core constraints and limitations
- 1. Set up dependencies
- 2. Minimize and translate the UI
- 3. Map input controls
- 4. Build with Jetpack Compose Glimmer
- 5. Integrate with system UI
Files
SKILL.mdcore26,265 bytesreferences/android/design/ui/ai-glasses/guides/interaction/inputs.mddoc4,667 bytesreferences/android/develop/xr/jetpack-xr-sdk/access-hardware-projected-context.mddoc19,066 bytesreferences/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/buttons.mddoc8,349 bytesreferences/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/cards.mddoc6,930 bytesreferences/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/focus.mddoc5,695 bytesreferences/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/icons.mddoc4,123 bytesreferences/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/text.mddoc2,800 bytesreferences/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/title-chips.mddoc3,788 bytesreferences/android/develop/xr/jetpack-xr-sdk/request-hardware-permissions.mddoc9,331 bytesreferences/button-samples-source.mddoc5,066 bytesreferences/button-source.mddoc9,966 bytesreferences/card-samples-source.mddoc10,589 bytesreferences/card-source.mddoc52,963 bytesreferences/deptheffect-source.mddoc7,986 bytesreferences/deptheffectlevels-source.mddoc4,190 bytesreferences/glimmersansflextypography-source.mddoc11,526 bytesreferences/glimmertheme-source.mddoc7,738 bytesreferences/icon-source.mddoc17,247 bytesreferences/iconbutton-source.mddoc4,960 bytesreferences/iconsizes-source.mddoc2,371 bytesreferences/list-source.mddoc713 bytesreferences/listitem-source.mddoc11,455 bytesreferences/liststate-source.mddoc18,231 bytesreferences/material-hct-source.mddoc6,458 bytesreferences/projectedcontext-source.mddoc13,251 bytesreferences/stack-source.mddoc15,672 bytesreferences/stackitemscope-source.mddoc16,578 bytesreferences/stackstate-source.mddoc13,164 bytesreferences/surface-source.mddoc33,121 bytesreferences/titlechip-samples-source.mddoc2,920 bytesreferences/titlechip-source.mddoc5,254 bytes
Read SKILL.md
## Glossary
| Term | Definition |
|---|---|
| **Intelligent eyewear** | Hands-free eyewear with speakers, camera, and microphone (audio-only or display glasses). |
| **Display glasses** | Eyewear with a private in-lens display for glanceable visuals that pair with audio. |
| **Jetpack Compose Glimmer** | Compose UI toolkit providing components, theming, and focus behavior for display glasses. |
| **Projected activity** | An `Activity` running on a phone host whose UI and input are projected to connected eyewear. |
| **Projected device** | An XR eyewear device connected to an Android host phone that projects app content to it. |
| **GlimmerTheme** | Root styling provider for `GlimmerColors`, `GlimmerTypography`, and `GlimmerShapes`. |
| **Additive display** | Display where black (`#000000`) renders as 100% transparent by adding light to the scene. |
| **Augmented experiences** | Lightweight, additive Android XR experiences that help users while they're on the go. |
| **Visual angle** | Perceived size in XR; minimum readable text is 0.6 degrees (about 18sp at 1 m). |
View the complete source on GitHubprojected-hardware
When your agent uses it
Provides instructions and workflows for accessing and managing hardware on Android XR projected devices, such as audio glasses and display glasses. Use this skill when building experiences for intelligent eyewear in an Android app and you need to access device hardware like the camera and microphone, handle glasses-specific runtime permissions, or manage connection lifecycles using projected context.
What it loads into context
Frontmatter
165 tokensAlways available to the agent
SKILL.md
436 tokensWhen the skill is activated
Reference documents
8,315 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Prerequisites
- Connection and lifecycle management
- Request glasses hardware permissions
- Glasses hardware access and capabilities
Files
SKILL.mdcore2,090 bytesreferences/android/develop/xr/jetpack-xr-sdk/access-hardware-projected-context.mddoc19,066 bytesreferences/android/develop/xr/jetpack-xr-sdk/glasses/check-availability.mddoc4,831 bytesreferences/android/develop/xr/jetpack-xr-sdk/glasses/support-different-types.mddoc8,663 bytesreferences/android/develop/xr/jetpack-xr-sdk/request-hardware-permissions.mddoc9,331 bytes
Read SKILL.md
## Prerequisites
- You must use a `compileSdk` of 36 or higher.
## Connection and lifecycle management
Intelligent eyewear hardware is only accessible while the glasses are connected
to the host phone. Monitor connection state and manage resource lifecycles using
`ProjectedContext`. You must read
[Understand projected activities and projected contexts](references/android/develop/xr/jetpack-xr-sdk/glasses/support-different-types.md) to understand
how to get a projected context and [how to manage its lifecycle](references/android/develop/xr/jetpack-xr-sdk/glasses/check-availability.md).
## Request glasses hardware permissions
View the complete source on GitHubSkills included
- agp-9-upgrade
- camerax
- android-for-cars-parked-apps
- appfunctions
- litert-lm
- litert-runtime
- ml-kit-genai-prompt-api
- mlkit-agent-api
- android-cli
- restore-credentials
- verified-email
- adaptive
- ink-app-builder
- ink-custom-brush-builder
- jetpack-compose-performance
- migrate-xml-views-to-jetpack-compose
- media3-cast-integration
- navigation-3
- navigation-event
- anr-audit-and-fix
- r8-analyzer
- engage-sdk-integration
- play-billing-library-version-upgrade
- play-policy-insights
- android-profiler
- android-intent-security
- android-permissions-security
- edge-to-edge
- glance-appwidget-updates-and-memory
- glance-canonical-layouts
- testing-setup
- leanback-to-compose-tv-migration
- wear-compose-m3
- wear-widgets
- display-glasses-with-jetpack-compose-glimmer
- projected-hardware
Repository facts
- License
- Apache-2.0
- Created
- Mar 16, 2026
- Last pushed
- Nov 5, 2026
- Forks
- 675
- Open issues
- 36
- Project activity
- Active
Rank over the last 12 weeks
Now #149 · best #146 · up 18 in 30 days
- #146 from Oct 28 to Oct 29
- #147 from Oct 30 to Oct 31
- #146 on Nov 1
- #147 on Nov 2
- #150 on Nov 3
- #149 since Nov 4
66 earlier periods
- #160 on Aug 2
- #157 on Aug 7
- #158 on Aug 8
- #157 on Aug 9
- #160 on Aug 10
- #161 on Aug 11
- #159 on Aug 12
- #161 from Aug 13 to Aug 14
- #160 from Aug 15 to Aug 16
- #159 on Aug 17
- #160 from Aug 18 to Aug 19
- #158 from Aug 20 to Aug 21
- #155 on Aug 22
- #160 from Aug 23 to Aug 24
- #159 from Aug 25 to Aug 26
- #160 on Aug 27
- #159 on Aug 28
- #160 on Aug 29
- #158 on Aug 30
- #157 on Aug 31
- #160 on Sep 1
- #157 on Sep 2
- #162 on Sep 3
- #160 on Sep 4
- #163 on Sep 5
- #160 on Sep 6
- #162 from Sep 7 to Sep 8
- #163 on Sep 9
- #164 on Sep 10
- #161 on Sep 11
- #165 from Sep 12 to Sep 13
- #163 on Sep 14
- #164 on Sep 15
- #163 from Sep 16 to Sep 17
- #164 on Sep 18
- #162 on Sep 19
- #165 on Sep 20
- #164 on Sep 21
- #163 on Sep 22
- #165 on Sep 23
- #164 on Sep 24
- #165 on Sep 25
- #166 from Sep 26 to Sep 27
- #167 from Sep 28 to Sep 29
- #164 on Sep 30
- #166 on Oct 1
- #167 on Oct 2
- #165 on Oct 3
- #163 on Oct 4
- #165 from Oct 5 to Oct 6
- #167 on Oct 7
- #165 on Oct 8
- #168 on Oct 9
- #165 on Oct 10
- #167 on Oct 11
- #168 on Oct 12
- #170 on Oct 13
- #169 on Oct 14
- #168 on Oct 15
- #163 on Oct 16
- #158 on Oct 17
- #155 from Oct 18 to Oct 21
- #151 on Oct 22
- #150 on Oct 23
- #149 on Oct 24
- #150 on Oct 25
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 3, 2026
Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.
Show 62 notes
build-system/agp/agp-9-upgrade/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedbuild-system/agp/agp-9-upgrade/references/android/build/releases/agp-9-0-0-release-notes.md:553Analysis incomplete: physical or joined line exceeds character limitwear/wear-compose-m3/references/android/training/wearables/compose/migrate-to-material3.md:258Analysis incomplete: physical or joined line exceeds character limitwear/wear-compose-m3/references/android/training/wearables/compose/migrate-to-material3.md:259Analysis incomplete: physical or joined line exceeds character limitwear/wear-compose-m3/references/android/training/wearables/compose/migrate-to-material3.md:260Analysis incomplete: physical or joined line exceeds character limitwear/wear-compose-m3/references/android/training/wearables/compose/migrate-to-material3.md:268Analysis incomplete: physical or joined line exceeds character limitwear/wear-compose-m3/references/android/training/wearables/compose/migrate-to-material3.md:269Analysis incomplete: physical or joined line exceeds character limitwear/wear-compose-m3/references/android/training/wearables/compose/migrate-to-material3.md:270Analysis incomplete: physical or joined line exceeds character limitwear/wear-compose-m3/references/android/training/wearables/compose/migrate-to-material3.md:258Plugin-wide analysis incomplete; see repository noteswear/wear-compose-m3/references/android/training/wearables/compose/migrate-to-material3.md:258Plugin-wide analysis incomplete; see repository noteswear/wear-compose-m3/references/android/training/wearables/compose/migrate-to-material3.md:258Plugin-wide analysis incomplete; see repository noteswear/wear-compose-m3/references/android/training/wearables/compose/migrate-to-material3.md:258Plugin-wide analysis incomplete; see repository notesdevice-ai/litert/litert-runtime/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedwear/wear-compose-m3/references/android/training/wearables/compose/migrate-to-material3.md:258Plugin-wide analysis incomplete; see repository noteswear/wear-compose-m3/references/android/training/wearables/compose/migrate-to-material3.md:258Plugin-wide analysis incomplete; see repository notesdevtools/android-cli/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzeddevtools/android-cli/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzeddevtools/android-cli/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzeddevtools/android-cli/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzeddevtools/android-cli/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- No broad tool permissions
- 12 dangerous shell commandsin 2 files: devtools/android-cli/SKILL.md:33 performance/r8-analyzer/references/FULL_BUILD_CONFIG_ANALYZER.md:57
- 10,169 network referencesin 306 files: play/play-billing-library-version-upgrade/references/android/google/play/billing/release-notes.md:6 cars/android-for-cars-parked-apps/references/android/docs/quality-guidelines/car-app-quality/index.md:5 play/engage-sdk-integration/references/android/guide/playcore/engage/travel.md:2 and 303 more
- 4 obfuscation signalsin 2 files: agp-9-upgrade/references/android/build/releases/agp-9-0-0-release-notes.md:243 performance/r8-analyzer/scripts/keep_radius_pb2.py:90
- 6 instruction override signalsin 1 file: performance/r8-analyzer/references/FULL_BUILD_CONFIG_ANALYZER.md:14
- 18 executable scriptsin 9 files: performance/r8-analyzer/scripts/analyze.py:1 performance/r8-analyzer/scripts/convert_pb_to_json.py:1 performance/r8-analyzer/scripts/keep_radius_pb2.py:1 and 6 more
- 2 references to secretsin 1 file: play/play-policy-insights/resources/scanner_config.json:51
- No requests to vote in Hot
Show all 10,211 signals by file
.claude-plugin/marketplace.json
.claude-plugin/plugin.json
- Network accessline 6
"author": { "name": "Google / Android", "url": "https://github.com/android" - Network accessline 7
"name": "Google / Android", "url": "https://github.com/android" }, - Network accessline 8
"url": "https://github.com/android" - Network accessline 9
}, "homepage": "https://github.com/android/skills", "repository": "https://github.com/android/skills", - Network accessline 10
"homepage": "https://github.com/android/skills", - Network accessline 11
"repository": "https://github.com/android/skills",
build-system/agp/agp-9-upgrade/references/android/build/migrate-to-built-in-kotlin.md
- Network accessline 8
> [!NOTE] > **Note:** Built-in Kotlin replaces the `kotlin-android` plugin only. If you are writing a Kotlin Multiplatform (KMP) library module, you still need to apply the `org.jetbrains.kotlin.multiplatform` plugin and the [`com.android.k - Network accessline 9
> **Note:** Built-in Kotlin replaces the `kotlin-android` plugin only. If you are writing a Kotlin Multiplatform (KMP) library module, you still need to apply the `org.jetbrains.kotlin.multiplatform` plugin and the [`com.android.kotlin.mult - Network accessline 14
AGP 9.0 already enables built-in Kotlin for all your modules where you apply AGP, so you don't need to do anything to enable it. However, if you previously [opted out of built-in Kotlin](https://developer.android.com/build/migrate-to-built- - Network accessline 15
AGP, so you don't need to do anything to enable it. However, if you previously [opted out of built-in Kotlin](https://developer.android.com/build/migrate-to-built-in-kotlin#opt-out-of-built-in-kotlin) by setting `android.builtInKotlin=false - Network accessline 16
[opted out of built-in Kotlin](https://developer.android.com/build/migrate-to-built-in-kotlin#opt-out-of-built-in-kotlin) by setting `android.builtInKotlin=false` - Network accessline 20
> [!NOTE] > **Note:** You can also enable built-in Kotlin for [one module at a time](https://developer.android.com/build/migrate-to-built-in-kotlin#module-by-module-migration). - Network accessline 21
> **Note:** You can also enable built-in Kotlin for [one module at a time](https://developer.android.com/build/migrate-to-built-in-kotlin#module-by-module-migration). - Network accessline 28
After you upgrade your project from an older AGP version to AGP 9.0 or after you manually [enable built-in Kotlin](https://developer.android.com/build/migrate-to-built-in-kotlin#enable-built-in-kotlin), you might see the following error - Network accessline 29
you manually [enable built-in Kotlin](https://developer.android.com/build/migrate-to-built-in-kotlin#enable-built-in-kotlin), you might see the following error - Network accessline 43
> [!NOTE] > **Note:** If you're not yet ready to migrate your project, you can also [opt out of built-in Kotlin](https://developer.android.com/build/migrate-to-built-in-kotlin#opt-out-of-built-in-kotlin). - Network accessline 44
> **Note:** If you're not yet ready to migrate your project, you can also [opt out of built-in Kotlin](https://developer.android.com/build/migrate-to-built-in-kotlin#opt-out-of-built-in-kotlin). - Network accessline 46
1. [Remove the `kotlin-android` plugin](https://developer.android.com/build/migrate-to-built-in-kotlin#migration-steps-remove-kotlin-android-plugin) - Network accessline 47
2. [Migrate the `kotlin-kapt` plugin if necessary](https://developer.android.com/build/migrate-to-built-in-kotlin#migration-steps-migrate-kotlin-kapt-plugin) - Network accessline 48
3. [Migrate the `android.kotlinOptions{}` DSL if necessary](https://developer.android.com/build/migrate-to-built-in-kotlin#migration-steps-migrate-kotlin-options) - Network accessline 49
4. [Migrate the `kotlin.sourceSets{}` DSL if necessary](https://developer.android.com/build/migrate-to-built-in-kotlin#migration-steps-migrate-kotlin-source-sets) - Network accessline 54
the module-level build files where you apply it. The exact code to remove depends on whether you use [version catalogs](https://docs.gradle.org/current/userguide/version_catalogs.html) to declare plugins. - Network accessline 56
whether you use [version catalogs](https://docs.gradle.org/current/userguide/version_catalogs.html) to declare plugins. - Network accessline 150
The `org.jetbrains.kotlin.kapt` (or `kotlin-kapt`) plugin is incompatible with built-in Kotlin. If you use `kapt`, we recommend that you [migrate your project to KSP](https://developer.android.com/build/migrate-to-ksp). - Network accessline 152
[migrate your project to KSP](https://developer.android.com/build/migrate-to-ksp). - Network accessline 219
If you use the `android.kotlinOptions{}` DSL, you need to migrate it to the [`kotlin.compilerOptions{}`](https://kotlinlang.org/docs/gradle-compiler-options.html#migrate-from-kotlinoptions-to-compileroptions) DSL. - Network accessline 220
migrate it to the [`kotlin.compilerOptions{}`](https://kotlinlang.org/docs/gradle-compiler-options.html#migrate-from-kotlinoptions-to-compileroptions) DSL. - Network accessline 277
When you use the `kotlin-android` plugin, AGP lets you add additional Kotlin source directories using either the [`android.sourceSets{}`](https://developer.android.com/reference/tools/gradle-api/9.0/com/android/build/api/dsl/AndroidSourceSe - Network accessline 278
source directories using either the [`android.sourceSets{}`](https://developer.android.com/reference/tools/gradle-api/9.0/com/android/build/api/dsl/AndroidSourceSet) DSL or the - Network accessline 279
[`kotlin.sourceSets{}`](https://kotlinlang.org/api/kotlin-gradle-plugin/kotlin-gradle-plugin-api/org.jetbrains.kotlin.gradle.plugin/-kotlin-source-set/) DSL. - Network accessline 325
If you want to add a Kotlin source directory to a specific variant or if the directory is generated by a task, you can use the [`addStaticSourceDirectory`](https://developer.android.com/reference/tools/gradle-api/9.0/com/android/build/api/v - Network accessline 326
directory is generated by a task, you can use the [`addStaticSourceDirectory`](https://developer.android.com/reference/tools/gradle-api/9.0/com/android/build/api/variant/SourceDirectories#addStaticSourceDirectory(kotlin.String)) or [`addGen - Network accessline 327
[`addStaticSourceDirectory`](https://developer.android.com/reference/tools/gradle-api/9.0/com/android/build/api/variant/SourceDirectories#addStaticSourceDirectory(kotlin.String)) or [`addGeneratedSourceDirectory`](https://developer.android. - Network accessline 328
in the [variant API](https://developer.android.com/build/extend-agp#variant-api-artifacts-tasks): - Network accessline 350
If you encounter issues after completing the previous steps, review the known issues in [issue #438678642](https://issuetracker.google.com/438678642) and give us - Network accessline 351
review the known issues in [issue #438678642](https://issuetracker.google.com/438678642) and give us - Network accessline 362
> [!NOTE] > **Note:** You also need to set `android.newDsl=false` to opt out of the [new DSL](https://developer.android.com/r/tools/new-dsl) because the `kotlin-android` plugin is not compatible with it. - Network accessline 363
> **Note:** You also need to set `android.newDsl=false` to opt out of the [new DSL](https://developer.android.com/r/tools/new-dsl) because the `kotlin-android` plugin is not compatible with it. - Network accessline 365
Once you're ready to migrate your project, [enable built-in Kotlin](https://developer.android.com/build/migrate-to-built-in-kotlin#enable-built-in-kotlin) - Network accessline 366
and follow the [migration steps](https://developer.android.com/build/migrate-to-built-in-kotlin#migration-steps). - Network accessline 383
3. Follow the previous [migration steps](https://developer.android.com/build/migrate-to-built-in-kotlin#migration-steps) to migrate this module to
build-system/agp/agp-9-upgrade/references/android/build/releases/agp-9-0-0-release-notes.md
- Network accessline 6
To update to Android Gradle plugin 9.0.1, use the [Android Gradle plugin Upgrade Assistant](https://developer.android.com/build/agp-upgrade-assistant). The AGP upgrade assistant helps - Network accessline 7
[Android Gradle plugin Upgrade Assistant](https://developer.android.com/build/agp-upgrade-assistant). The AGP upgrade assistant helps - Network accessline 12
There are also two agent skills available to make the upgrade process easier. For a non-KMP app, try the [AGP 9 upgrade skill](https://github.com/android/skills/tree/main/build-system/agp/agp-9-upgrade) from the - Network accessline 13
For a non-KMP app, try the [AGP 9 upgrade skill](https://github.com/android/skills/tree/main/build-system/agp/agp-9-upgrade) from the - Network accessline 14
Android skills repository. For a KMP app, try the [AGP 9 upgrade skill](https://github.com/Kotlin/kotlin-agent-skills/tree/main/skills/kotlin-tooling-agp9-migration) from JetBrains. For more information about using skills in Android Studio, - Network accessline 15
skill](https://github.com/Kotlin/kotlin-agent-skills/tree/main/skills/kotlin-tooling-agp9-migration) from JetBrains. For more information about using skills - Network accessline 16
in Android Studio, see [Extend Agent Mode with skills](https://developer.android.com/studio/gemini/skills). - Network accessline 24
| | Minimum version | Default version | Notes | |---:|:---:|:---:|:---:| | Gradle | 9.1.0 | 9.1.0 | To learn more, see [updating Gradle](https://developer.android.com/build/releases/gradle-plugin?buildsystem=ndk-build#updating-gradle). | - Network accessline 25
|---:|:---:|:---:|:---:| | Gradle | 9.1.0 | 9.1.0 | To learn more, see [updating Gradle](https://developer.android.com/build/releases/gradle-plugin?buildsystem=ndk-build#updating-gradle). | | SDK Build Tools | 36.0.0 | 36.0.0 | [Install](ht - Network accessline 26
| Gradle | 9.1.0 | 9.1.0 | To learn more, see [updating Gradle](https://developer.android.com/build/releases/gradle-plugin?buildsystem=ndk-build#updating-gradle). | - Network accessline 27
| SDK Build Tools | 36.0.0 | 36.0.0 | [Install](https://developer.android.com/studio/intro/update#sdk-manager) or [configure](https://developer.android.com/tools/releases/build-tools) SDK Build Tools. | - Network accessline 28
| NDK | N/A | 28.2.13676358 | [Install](https://developer.android.com/studio/projects/install-ndk#specific-version) or [configure](https://developer.android.com/studio/projects/install-ndk#apply-specific-version) a different version of the - Network accessline 29
| JDK | 17 | 17 | To learn more, see [setting the JDK version](https://developer.android.com/studio/intro/studio-config#jdk). | - Network accessline 30
| Kotlin Gradle plugin (KGP) | 2.2.10 | 2.2.10 | To learn more, see [Runtime dependency on Kotlin Gradle plugin](https://developer.android.com/build/releases/agp-9-0-0-release-notes#runtime-dependency-on-kotlin-gradle-plugin). | - Network accessline 36
Over the last several years, we have introduced [new interfaces](https://developer.android.com/reference/tools/gradle-api) for our DSL and API in order to - Network accessline 37
[new interfaces](https://developer.android.com/reference/tools/gradle-api) for our DSL and API in order to - Network accessline 49
- **Ensure your project is compatible with [built-in Kotlin](https://developer.android.com/build/releases/agp-9-0-0-release-notes#android-gradle-plugin-built-in-kotlin):** The `org.jetbrains.kotlin.android` plugin is not compatible with t - Network accessline 50
Kotlin](https://developer.android.com/build/releases/agp-9-0-0-release-notes#android-gradle-plugin-built-in-kotlin):** The `org.jetbrains.kotlin.android` plugin is not compatible with the new DSL. - Network accessline 51
- **Switch KMP projects to the [Android Gradle Library Plugin for KMP](https://developer.android.com/kotlin/multiplatform/plugin):** Using the `org.jetbrains.kotlin.multiplatform` plugin in the same Gradle - Network accessline 52
[Android Gradle Library Plugin for KMP](https://developer.android.com/kotlin/multiplatform/plugin):** - Network accessline 61
While the change of interfaces is meant to keep the DSL as similar as possible, there might be [some small changes](https://developer.android.com/build/releases/agp-9-0-0-release-notes#android-gradle-plugin-changed-dsl). - Network accessline 63
[some small changes](https://developer.android.com/build/releases/agp-9-0-0-release-notes#android-gradle-plugin-changed-dsl). - Network accessline 67
In most cases this will be a one-to-one replacement. Replace any use of the `applicationVariants` and similar APIs with the new [`androidComponents` API](https://developer.android.com/build/extend-agp#variant-api-artifacts-tasks). - Network accessline 68
Replace any use of the `applicationVariants` and similar APIs with the new [`androidComponents` API](https://developer.android.com/build/extend-agp#variant-api-artifacts-tasks). This might be more complex, as the `androidComponents` API - Network accessline 69
[`androidComponents` API](https://developer.android.com/build/extend-agp#variant-api-artifacts-tasks). - Network accessline 70
This might be more complex, as the `androidComponents` API is designed to be more stable to keep plugins compatible longer. Check our [Gradle Recipes](https://github.com/android/gradle-recipes/tree/agp-9.0) - Network accessline 71
is designed to be more stable to keep plugins compatible longer. Check our [Gradle Recipes](https://github.com/android/gradle-recipes/tree/agp-9.0) for examples. - Network accessline 72
[Gradle Recipes](https://github.com/android/gradle-recipes/tree/agp-9.0) - Network accessline 83
| Deprecated API in the `android` block | Function | Replacement | |---|---|---| | `applicationVariants`, `libraryVariants`, `testVariants`, and `unitTestVariants` | Extension points for plugins to add new functionality to AGP. | Replace th - Network accessline 84
|---|---|---| | `applicationVariants`, `libraryVariants`, `testVariants`, and `unitTestVariants` | Extension points for plugins to add new functionality to AGP. | Replace this with the [`androidComponents.onVariants`](https://developer.andr - Network accessline 85
| `applicationVariants`, `libraryVariants`, `testVariants`, and `unitTestVariants` | Extension points for plugins to add new functionality to AGP. | Replace this with the [`androidComponents.onVariants`](https://developer.android.com/refere - Network accessline 86
| `variantFilter` | Allows selected variants to be disabled. | Replace this with the [`androidComponents.beforeVariants`](https://developer.android.com/reference/tools/gradle-api/9.0/com/android/build/api/variant/AndroidComponentsExtension# - Network accessline 87
| `deviceProvider` and `testServer` | Registration of custom test environments for running tests against Android devices and emulators. | Switch to [Gradle-managed devices](https://developer.android.com/studio/test/gradle-managed-devices). - Network accessline 88
| `sdkDirectory`, `ndkDirectory`, `bootClasspath`, `adbExecutable`, and `adbExe` | Using various components of the Android SDK for custom tasks. | Switch to [`androidComponents.sdkComponents`](https://developer.android.com/reference/tools/g - Network accessline 89
| `registerArtifactType`, `registerBuildTypeSourceProvider`, `registerProductFlavorSourceProvider`, `registerJavaArtifact`, `registerMultiFlavorSourceProvider`, and `wrapJavaSourceSet` | Obsolete functionality mostly related to the handling - Network accessline 90
| `dexOptions` | Obsolete settings related to the `dx` tool, which has been replaced by [`d8`](https://developer.android.com/tools/d8). None of the settings have had any effect since Android Gradle plugin 7.0. | There is no direct replaceme - Network accessline 92
| `aidlPackagedList` | AIDL files to package in the AAR to expose it as API for libraries and apps that depend on this library. | This is still exposed on [`LibraryExtension`](https://developer.android.com/reference/tools/gradle-api/9.0/com - Network accessline 108
Alternatively, for a more gradual migration, AGP 9.4 lets you opt out individual modules. To learn how, see [Variant API module opt-out](https://developer.android.com/build/releases/agp-9-4-0-release-notes#new-dsl-opt-out). - Network accessline 109
modules. To learn how, see [Variant API module opt-out](https://developer.android.com/build/releases/agp-9-4-0-release-notes#new-dsl-opt-out). - Network accessline 118
You can also start upgrading to the new APIs before upgrading to AGP 9.0. The new interfaces have been present for many AGP versions and so you can have a mix of new and old. The [AGP API reference docs](https://developer.android.com/refere - Network accessline 119
new interfaces have been present for many AGP versions and so you can have a mix of new and old. The [AGP API reference docs](https://developer.android.com/reference/tools/gradle-api) show the API surface for each AGP version, and when each - Network accessline 120
of new and old. The [AGP API reference docs](https://developer.android.com/reference/tools/gradle-api) show the API - Network accessline 129
If you find that the new DSL or Variant API are missing capabilities or features, please file an [issue](https://issuetracker.google.com/issues/new?component=192708&template=840533) as soon as possible. - Network accessline 130
features, please file an [issue](https://issuetracker.google.com/issues/new?component=192708&template=840533) as soon as possible. - Network accessline 141
Therefore, when you upgrade your project to AGP 9.0, you need to also [migrate to built-in Kotlin](https://developer.android.com/build/migrate-to-built-in-kotlin) or [opt out](https://developer.android.com/build/migrate-to-built-in-kotlin#o - Network accessline 142
[migrate to built-in Kotlin](https://developer.android.com/build/migrate-to-built-in-kotlin) or [opt out](https://developer.android.com/build/migrate-to-built-in-kotlin#opt-out-of-built-in-kotlin). - Network accessline 144
You can also [selectively disable built-in Kotlin support](https://developer.android.com/build/migrate-to-built-in-kotlin#selectively-disable) for Gradle - Network accessline 149
To provide [built-in Kotlin](https://developer.android.com/build/migrate-to-built-in-kotlin) support, Android Gradle plugin 9.0 now has a - Network accessline 174
You can only downgrade the KGP version if you've [opted out of built-in Kotlin](https://developer.android.com/build/migrate-to-built-in-kotlin#opt-out-of-built-in-kotlin). - Network accessline 175
[opted out of built-in Kotlin](https://developer.android.com/build/migrate-to-built-in-kotlin#opt-out-of-built-in-kotlin). - Network accessline 179
To use a lower version of KGP or KSP, declare that version in your top-level build file using a [strict version](https://docs.gradle.org/current/userguide/dependency_versions.html#sec:strict-version) declaration: - Network accessline 180
build file using a [strict version](https://docs.gradle.org/current/userguide/dependency_versions.html#sec:strict-version) declaration: - Network accessline 203
AGP 9.0 brings full Android Studio IDE support for [test fixtures](https://developer.android.com/reference/tools/gradle-api/9.0/com/android/build/api/dsl/TestFixtures). - Network accessline 204
[test fixtures](https://developer.android.com/reference/tools/gradle-api/9.0/com/android/build/api/dsl/TestFixtures). - Network accessline 212
For information about getting started, see [Publish multiple Android libraries as one with Fused Library](https://developer.android.com/build/publish-library/fused-library). - Network accessline 213
[Publish multiple Android libraries as one with Fused Library](https://developer.android.com/build/publish-library/fused-library). - Network accessline 220
|---|---| | Android Gradle plugin 9.0 uses NDK version `r28c` by default. | Consider specifying the NDK version you want to use explicitly. | | Android Gradle plugin 9.0 by default requires consumers of a library to use the same or higher c - Network accessline 222
| Android Gradle plugin 9.0 by default requires consumers of a library to use the same or higher compile SDK version. | Use the same or higher compile SDK when consuming a library. If this is not possible, or you want to give consumers of a - Network accessline 228
|---|---|---|---| | `android.newDsl` | Use the new DSL interfaces, without exposing the legacy implementations of the `android` block. This also means the legacy variant API, such as `android.applicationVariants` is no longer accessible. | - Network accessline 229
| `android.newDsl` | Use the new DSL interfaces, without exposing the legacy implementations of the `android` block. This also means the legacy variant API, such as `android.applicationVariants` is no longer accessible. | `false` → `true` | - Network accessline 230
| `android.builtInKotlin` | Enables [built-in Kotlin](https://developer.android.com/build/releases/agp-9-0-0-release-notes#android-gradle-plugin-built-in-kotlin) | `false` → `true` | [Migrate to built-in Kotlin](https://developer.android.co - Network accessline 231
| `android.uniquePackageNames` | Enforces that each library has a distinct package name. | `false` → `true` | Specify unique package names for all libraries within your project. If that is not possible, you can disable this flag while you m - Network accessline 232
| `android.useAndroidx` | Use [`androidx`](https://developer.android.com/jetpack/androidx) dependencies by default. | `false` → `true` | Adopt [`androidx`](https://developer.android.com/jetpack/androidx/migrate) dependencies. | - Network accessline 233
| `android.default.androidx.test.runner` | Run on-device tests with the [`androidx.test.runner.AndroidJUnitRunner`](https://developer.android.com/training/testing/instrumented-tests/androidx-test-libraries/runner) class by default, replacin - Network accessline 239
| `android.r8.optimizedResourceShrinking` | Allows R8 to keep fewer Android resources by considering classes and Android resources together. | `false` → `true` | If your project's keep rules are already complete, no change is required. | | - Network accessline 240
| `android.r8.strictFullModeForKeepRules` | Allows R8 to keep less by not implicitly keeping the default constructor when a class is kept. That is, `-keep class A` no longer implies `-keep class A { <init>(); }` | `false` → `true` | If your - Network accessline 241
| `android.defaults.buildfeatures.resvalues` | Enables [`resValues`](https://developer.android.com/reference/tools/gradle-api/9.0/com/android/build/api/variant/HasAndroidResources#resValues()) in all subprojects | `true` → `false` | Enable - Network accessline 242
| `android.defaults.buildfeatures.shaders` | Enables [shader compilation](https://developer.android.com/ndk/guides/graphics/shader-compilers) in all subprojects | `true` → `false` | Enable shader compilation in only the subprojects that con - Network accessline 243
| `android.r8.proguardAndroidTxt.disallowed` | In AGP 9.0, `getDefaultProguardFile()` will only support `proguard-android-optimize.txt` rather than `proguard-android.txt`. This is to prevent accidental usage of the `<U+00AD>dontoptimize` flag, whi - Possible obfuscationline 243
| `android.r8.proguardAndroidTxt.disallowed` | In AGP 9.0, `getDefaultProguardFile()` will only support `proguard-android-optimize.txt` rather than `proguard-android.txt`. This is to prevent accidental usage of the `<U+00AD>dontoptimize` flag, whi - Network accessline 244
| `android.r8.globalOptionsInConsumerRules.disallowed` | From AGP 9.0, Android library and feature module publishing will fail if consumer keep files contain problematic Proguard configurations. Consumer keep files that include global optio - Possible obfuscationline 244
| `android.r8.globalOptionsInConsumerRules.disallowed` | From AGP 9.0, Android library and feature module publishing will fail if consumer keep files contain problematic Proguard configurations. Consumer keep files that include global optio - Network accessline 245
| `android.sourceset.disallowProvider` | Disallow passing providers for generated sources using the [`AndroidSourceSet`](https://developer.android.com/reference/tools/gradle-api/9.0/com/android/build/api/dsl/AndroidSourceSet) DSL. | `false` - Network accessline 252
- **Embedded Wear OS app support** AGP 9.0 removes support for embedding Wear OS apps, which is no longer supported in Play. This includes removing the `wearApp` configurations and the [`AndroidSourceSet.wearAppConfigurationName`](https - Network accessline 253
AGP 9.0 removes support for embedding Wear OS apps, which is no longer supported in Play. This includes removing the `wearApp` configurations and the [`AndroidSourceSet.wearAppConfigurationName`](https://developer.android.com/reference/tool - Network accessline 254
- **`androidDependencies` and `sourceSets` report task** - **Density split APK support** AGP 9.0 removes support for creating split APKs based on screen density. The functionality and the related APIs have been removed. To split APKs b - Network accessline 256
AGP 9.0 removes support for creating split APKs based on screen density. The functionality and the related APIs have been removed. To split APKs based on screen density using AGP 9.0 or higher, use [app bundles](https://developer.android.co - Network accessline 262
- The parameterization of [`CommonExtension`](https://developer.android.com/reference/tools/gradle-api/9.0/com/android/build/api/dsl/CommonExtension) has been removed. - Network accessline 264
In itself, this is only a source-level breaking change to help avoid future source-level breaking changes, but it also means that the block methods need to move from [`CommonExtension`](https://developer.android.com/reference/tools/grad - Network accessline 265
avoid future source-level breaking changes, but it also means that the block methods need to move from [`CommonExtension`](https://developer.android.com/reference/tools/gradle-api/9.0/com/android/build/api/dsl/CommonExtension) to [`Appl - Network accessline 266
the block methods need to move from [`CommonExtension`](https://developer.android.com/reference/tools/gradle-api/9.0/com/android/build/api/dsl/CommonExtension) to - Network accessline 267
[`ApplicationExtension`](https://developer.android.com/reference/tools/gradle-api/9.0/com/android/build/api/dsl/ApplicationExtension), [`LibraryExtension`](https://developer.android.com/reference/tools/gradle-api/9.0/com/android/build/api/d - Network accessline 268
[`DynamicFeatureExtension`](https://developer.android.com/reference/tools/gradle-api/9.0/com/android/build/api/dsl/DynamicFeatureExtension) and [`TestExtension`](https://developer.android.com/reference/tools/gradle-api/9.0/com/android/build - Network accessline 306
- [`AndroidSourceSet.jni`](https://developer.android.com/reference/tools/gradle-api/8.13/com/android/build/api/dsl/AndroidSourceSet#jni(kotlin.Function1)), because it was not functional. - Network accessline 308
- [`AndroidSourceSet.wearAppConfigurationName`](https://developer.android.com/reference/tools/gradle-api/8.13/com/android/build/api/dsl/AndroidSourceSet#wearAppConfigurationName()), as it relates to the - Network accessline 311
- [`BuildType.isRenderscriptDebuggable`](https://developer.android.com/reference/tools/gradle-api/8.13/com/android/build/api/dsl/BuildType#isRenderscriptDebuggable()), because it was not functional. - Network accessline 313
- [`DependencyVariantSelection`](https://developer.android.com/reference/tools/gradle-api/8.13/com/android/build/api/dsl/DependencyVariantSelection). It is replaced By - Network accessline 314
[`DependencySelection`](https://developer.android.com/reference/tools/gradle-api/9.0/com/android/build/api/dsl/DependencySelection), which is exposed as - Network accessline 315
[`kotlin.android.localDependencySelection`](https://developer.android.com/reference/tools/gradle-api/9.0/com/android/build/api/dsl/KotlinMultiplatformAndroidLibraryExtension#localDependencySelection(kotlin.Function1)) - Network accessline 317
- [`Installation.installOptions(String)`](https://developer.android.com/reference/tools/gradle-api/8.13/com/android/build/api/dsl/Installation#installOptions(kotlin.String)). It is replaced by the - Network accessline 318
mutable property of [`Installation.installOptions`](https://developer.android.com/reference/tools/gradle-api/9.0/com/android/build/api/dsl/Installation#installOptions()). - Network accessline 320
- The experimental, but never stabilized [`PostProcessing`](https://developer.android.com/reference/tools/gradle-api/8.13/com/android/build/api/dsl/PostProcessing) block. - Network accessline 322
- [`ProductFlavor.setDimension`](https://developer.android.com/reference/tools/gradle-api/8.13/com/android/build/api/dsl/ProductFlavor#setDimension(kotlin.String)), which is replaced by the - Network accessline 323
[`dimension`](https://developer.android.com/reference/tools/gradle-api/9.0/com/android/build/api/dsl/ProductFlavor#dimension()) property - Network accessline 325
- `LanguageSplitOptions`, which was only useful for [Google Play Instant](https://developer.android.com/topic/google-play-instant), which is deprecated. - Network accessline 326
[Google Play Instant](https://developer.android.com/topic/google-play-instant), which is deprecated. - Network accessline 328
- [`DensitySplit`](https://developer.android.com/reference/tools/gradle-api/8.13/com/android/build/api/dsl/DensitySplit), because the feature is no longer supported. - Network accessline 329
Replacement is to use [App Bundles](https://developer.android.com/guide/app-bundle). - Network accessline 335
- [`AndroidComponentsExtension.finalizeDSl`](https://developer.android.com/reference/tools/gradle-api/8.13/com/android/build/api/variant/AndroidComponentsExtension#finalizeDSl(org.gradle.api.Action)). It is replaced by - Network accessline 336
[`finalizeDsl`](https://developer.android.com/reference/tools/gradle-api/9.0/com/android/build/api/variant/DslLifecycle#finalizeDsl(kotlin.Function1)) - Network accessline 338
- [`Component.transformClassesWith`](https://developer.android.com/reference/tools/gradle-api/8.13/com/android/build/api/variant/Component#transformClassesWith(java.lang.Class,com.android.build.api.instrumentation.InstrumentationScope,kotli - Network accessline 339
[`Instrumentation.transformClassesWith`](https://developer.android.com/reference/tools/gradle-api/9.0/com/android/build/api/variant/Instrumentation#transformClassesWith(java.lang.Class,com.android.build.api.instrumentation.InstrumentationSc - Network accessline 341
- [`Component.setAsmFramesComputationMode`](https://developer.android.com/reference/tools/gradle-api/8.13/com/android/build/api/variant/Component#setAsmFramesComputationMode(com.android.build.api.instrumentation.FramesComputationMode)). It - Network accessline 342
[`Instrumentation.setAsmFramesComputationMode`](https://developer.android.com/reference/tools/gradle-api/8.13/com/android/build/api/variant/Instrumentation#setAsmFramesComputationMode(com.android.build.api.instrumentation.FramesComputationM - Network accessline 344
- [`ComponentBuilder.enabled`](https://developer.android.com/reference/tools/gradle-api/8.13/com/android/build/api/variant/ComponentBuilder#enabled()). It is replaced by - Network accessline 345
[`ComponentBuilder.enable`](https://developer.android.com/reference/tools/gradle-api/9.0/com/android/build/api/variant/ComponentBuilder#enable()). - Network accessline 347
- [`DependenciesInfoBuilder.includedInApk`](https://developer.android.com/reference/tools/gradle-api/8.13/com/android/build/api/variant/DependenciesInfoBuilder#includedInApk()). Is is replaced by - Network accessline 348
[`includeInApk`](https://developer.android.com/reference/tools/gradle-api/9.0/com/android/build/api/variant/DependenciesInfoBuilder#includeInApk()) - Network accessline 350
- [`DependenciesInfoBuilder.includedInBundle`](https://developer.android.com/reference/tools/gradle-api/8.13/com/android/build/api/variant/DependenciesInfoBuilder#includedInBundle()). Is is replaced by - Network accessline 351
[`includeInBundle`](https://developer.android.com/reference/tools/gradle-api/9.0/com/android/build/api/variant/DependenciesInfoBuilder#includeInBundle()) - Network accessline 353
- [`GeneratesApk.targetSdkVersion`](https://developer.android.com/reference/tools/gradle-api/8.13/com/android/build/api/variant/GeneratesApk#targetSdkVersion()). Is is replaced by [`targetSdk`](https://developer.android.com/reference/tools/ - Network accessline 355
- [`Variant.minSdkVersion`](https://developer.android.com/reference/tools/gradle-api/8.13/com/android/build/api/variant/Variant#minSdkVersion()). Is is replaced by [`minSdk`](https://developer.android.com/reference/tools/gradle-api/9.0/com/ - Network accessline 357
- [`Variant.maxSdkVersion`](https://developer.android.com/reference/tools/gradle-api/8.13/com/android/build/api/variant/Variant#maxSdkVersion()). Is is replaced by [`maxSdk`](https://developer.android.com/reference/tools/gradle-api/9.0/com/ - Network accessline 359
- [`Variant.targetSdkVersion`](https://developer.android.com/reference/tools/gradle-api/8.13/com/android/build/api/variant/Variant#targetSdkVersion()). Is is replaced by [`targetSdk`](https://developer.android.com/reference/tools/gradle-api - Network accessline 361
- [`Variant.unitTest`](https://developer.android.com/reference/tools/gradle-api/8.13/com/android/build/api/variant/Variant#unitTest()), as it was not applicable to the - Network accessline 362
[`com.android.test`](https://developer.android.com/reference/tools/gradle-api/9.0/com/android/build/gradle/TestPlugin) plugin. - Network accessline 363
`unitTest` is available on [`VariantBuilder`](https://developer.android.com/reference/tools/gradle-api/9.0/com/android/build/api/variant/VariantBuilder) subtypes extending - Network accessline 364
[`HasUnitTest`](https://developer.android.com/reference/tools/gradle-api/9.0/com/android/build/api/variant/HasUnitTest). - Network accessline 366
- [`VariantBuilder.targetSdk`](https://developer.android.com/reference/tools/gradle-api/8.13/com/android/build/api/variant/VariantBuilder#targetSdk()) and [`targetSdkPreview`](https://developer.android.com/reference/tools/gradle-api/8.13/co - Network accessline 367
as they were not meaningful in libraries. Use [`GeneratesApkBuilder.targetSdk`](https://developer.android.com/reference/tools/gradle-api/9.0/com/android/build/api/variant/GeneratesApkBuilder#targetSdk()) or [`GeneratesApkBuilder.targetS - Network accessline 368
[`GeneratesApkBuilder.targetSdk`](https://developer.android.com/reference/tools/gradle-api/9.0/com/android/build/api/variant/GeneratesApkBuilder#targetSdk()) or - Network accessline 369
[`GeneratesApkBuilder.targetSdkPreview`](https://developer.android.com/reference/tools/gradle-api/9.0/com/android/build/api/variant/GeneratesApkBuilder#targetSdkPreview()) - Network accessline 372
- [`VariantBuilder.enableUnitTest`](https://developer.android.com/reference/tools/gradle-api/8.13/com/android/build/api/variant/VariantBuilder#enableUnitTest()), as it was not applicable to the - Network accessline 373
[`com.android.test`](https://developer.android.com/reference/tools/gradle-api/9.0/com/android/build/gradle/TestPlugin) plugin. - Network accessline 374
`enableUnitTest` is available on [`VariantBuilder`](https://developer.android.com/reference/tools/gradle-api/9.0/com/android/build/api/variant/VariantBuilder) subtypes extending - Network accessline 375
[`HasUnitTestBuilder`](https://developer.android.com/reference/tools/gradle-api/9.0/com/android/build/api/variant/HasUnitTestBuilder). - Network accessline 377
- [`VariantBuilder.unitTestEnabled`](https://developer.android.com/reference/tools/gradle-api/8.13/com/android/build/api/variant/VariantBuilder#unitTestEnabled()) is removed in favor of the more - Network accessline 378
consistently named [`enableUnitTest`](https://developer.android.com/reference/tools/gradle-api/9.0/com/android/build/api/variant/HasUnitTestBuilder#enableUnitTest()) on the [`VariantBuilder`](https://developer.android.com/reference/tools/ - Network accessline 379
named [`enableUnitTest`](https://developer.android.com/reference/tools/gradle-api/9.0/com/android/build/api/variant/HasUnitTestBuilder#enableUnitTest()) on the [`VariantBuilder`](https://developer.android.com/reference/tools/gradle-api/9.0/ - Network accessline 380
extending [`HasUnitTestBuilder`](https://developer.android.com/reference/tools/gradle-api/9.0/com/android/build/api/variant/HasUnitTestBuilder). - Network accessline 382
- [`VariantOutput.enable`](https://developer.android.com/reference/tools/gradle-api/8.13/com/android/build/api/variant/VariantOutput#enable()). Is is replaced by [`enabled`](https://developer.android.com/reference/tools/gradle-api/9.0/com/a - Network accessline 399
| Property | Function | Replacement | |---|---|---| | `android.defaults.buildfeatures.aidl` | Enables [AIDL compilation](https://source.android.com/docs/core/architecture/aidl) in all subprojects | Enable AIDL compilation in only the subpro - Network accessline 400
|---|---|---| | `android.defaults.buildfeatures.aidl` | Enables [AIDL compilation](https://source.android.com/docs/core/architecture/aidl) in all subprojects | Enable AIDL compilation in only the subprojects where there are AIDL sources by - Network accessline 401
| `android.defaults.buildfeatures.aidl` | Enables [AIDL compilation](https://source.android.com/docs/core/architecture/aidl) in all subprojects | Enable AIDL compilation in only the subprojects where there are AIDL sources by setting the fo - Network accessline 402
| `android.defaults.buildfeatures.renderscript` | Enables [RenderScript compilation](https://source.android.com/docs/core/architecture/vndk/renderscript) in all subprojects | Enable renderscript compilation in only the subprojects where the - Network accessline 408
The [Android Gradle plugin Upgrade Assistant](https://developer.android.com/build/agp-upgrade-assistant) won't upgrade projects to - Network accessline 501
possible to extract the ID of the mapping file that is required for retracing, which can be used to support [automated retracing of stack traces in Logcat](https://developer.android.com/studio/preview/features#logcat-retrace). - Network accessline 503
[automated retracing of stack traces in Logcat](https://developer.android.com/studio/preview/features#logcat-retrace). - Network accessline 553
Fixed Issues **Android Gradle Plugin** [Issue #171293712](https://issuetracker.google.com/issues/171293712) Feature Request: Inject ideal AGP version as a property [Issue #443976533](https://issuetracker.google.com/issues/443976533) Stabili
build-system/agp/agp-9-upgrade/references/buildconfig.md
- Network accessline 40
Use the **addCustomBuildConfigFields** recipe from the [gradle-recipes](https://developer.android.com/agents/skills/build-system/agp/agp-9-upgrade/references/recipes)
build-system/agp/agp-9-upgrade/references/paparazzi-gradle-9.md
- Network accessline 20
tasks.withType<Test>().configureEach { // https://github.com/cashapp/paparazzi/issues/2111 - Network accessline 21
// https://github.com/cashapp/paparazzi/issues/2111 - Network accessline 27
tasks.withType(Test).configureEach { // https://github.com/cashapp/paparazzi/issues/2111 - Network accessline 28
// https://github.com/cashapp/paparazzi/issues/2111
build-system/agp/agp-9-upgrade/references/recipes.md
- Network accessline 11
In some cases, there is a one-to-one replacement for the old code. Some examples are in [the AGP 9.0.0 release notes](https://developer.android.com/build/releases/agp-9-0-0-release-notes). - Network accessline 12
are in [the AGP 9.0.0 release notes](https://developer.android.com/build/releases/agp-9-0-0-release-notes). - Network accessline 14
In other cases, there is no direct one-to-one replacement. For these situations, the [gradle-recipes repo](https://github.com/android/gradle-recipes) is a great resource. You can checkout one of its - Network accessline 15
the [gradle-recipes repo](https://github.com/android/gradle-recipes) is a great resource. You can checkout one of its - Network accessline 41
See the detailed guide at [BuildConfig](https://developer.android.com/agents/skills/build-system/agp/agp-9-upgrade/references/buildconfig).
camera/camerax/references/expert-blueprints.md
- Network accessline 57
For guidance on Night Mode Extensions and Low Light Boost, [low-light.md](https://developer.android.com/agents/skills/camera/camerax/references/low-light). - Network accessline 57
For guidance on Night Mode Extensions and Low Light Boost, [low-light.md](https://developer.android.com/agents/skills/camera/camerax/references/low-light). - Network accessline 58
[low-light.md](https://developer.android.com/agents/skills/camera/camerax/references/low-light). - Network accessline 58
[low-light.md](https://developer.android.com/agents/skills/camera/camerax/references/low-light).
camera/camerax/references/modern-apis.md
cars/android-for-cars-parked-apps/references/android/docs/quality-guidelines/car-app-quality/index.md
- Network accessline 5
various app categories supported by Android Auto and Android Automotive OS. Many requirements apply only to specific categories, so be sure to filter by your app's category. See the [Car quality tiers](https://developer.android.com/docs/qua - Network accessline 5
various app categories supported by Android Auto and Android Automotive OS. Many requirements apply only to specific categories, so be sure to filter by your app's category. See the [Car quality tiers](https://developer.android.com/docs/qua - Network accessline 6
requirements apply only to specific categories, so be sure to filter by your app's category. See the [Car quality tiers](https://developer.android.com/docs/quality-guidelines/car-app-quality#car-quality-tiers) definitions for details on whi - Network accessline 6
requirements apply only to specific categories, so be sure to filter by your app's category. See the [Car quality tiers](https://developer.android.com/docs/quality-guidelines/car-app-quality#car-quality-tiers) definitions for details on whi - Network accessline 7
app's category. See the [Car quality tiers](https://developer.android.com/docs/quality-guidelines/car-app-quality#car-quality-tiers) definitions - Network accessline 7
app's category. See the [Car quality tiers](https://developer.android.com/docs/quality-guidelines/car-app-quality#car-quality-tiers) definitions - Network accessline 11
> [!NOTE] > **September 2026 update:** The Games app category is now generally available. See [September 2026](https://developer.android.com/docs/quality-guidelines/car-app-quality#sep-26) for details. - Network accessline 11
> [!NOTE] > **September 2026 update:** The Games app category is now generally available. See [September 2026](https://developer.android.com/docs/quality-guidelines/car-app-quality#sep-26) for details. - Network accessline 12
> **September 2026 update:** The Games app category is now generally available. See [September 2026](https://developer.android.com/docs/quality-guidelines/car-app-quality#sep-26) for details. - Network accessline 12
> **September 2026 update:** The Games app category is now generally available. See [September 2026](https://developer.android.com/docs/quality-guidelines/car-app-quality#sep-26) for details. - Network accessline 20
Android Automotive OS : Use the [Android Emulator](https://developer.android.com/studio/run/emulator) to validate each checklist - Network accessline 20
Android Automotive OS : Use the [Android Emulator](https://developer.android.com/studio/run/emulator) to validate each checklist - Network accessline 21
: Use the [Android Emulator](https://developer.android.com/studio/run/emulator) to validate each checklist - Network accessline 21
: Use the [Android Emulator](https://developer.android.com/studio/run/emulator) to validate each checklist - Network accessline 23
emulator](https://developer.android.com/training/cars/testing/emulator). - Network accessline 23
emulator](https://developer.android.com/training/cars/testing/emulator). - Network accessline 25
Android Auto : Use the Android Auto Desktop Head Unit (DHU) to validate each checklist item. For more information, see [Test using the Desktop Head Unit](https://developer.android.com/training/cars/testing/dhu). - Network accessline 25
Android Auto : Use the Android Auto Desktop Head Unit (DHU) to validate each checklist item. For more information, see [Test using the Desktop Head Unit](https://developer.android.com/training/cars/testing/dhu). - Network accessline 27
For more information, see [Test using the Desktop Head Unit](https://developer.android.com/training/cars/testing/dhu). - Network accessline 27
For more information, see [Test using the Desktop Head Unit](https://developer.android.com/training/cars/testing/dhu). - Network accessline 34
| [Supported categories](https://developer.android.com/training/cars#supported-app-categories) | Android Auto | Android Automotive OS | - Network accessline 34
| [Supported categories](https://developer.android.com/training/cars#supported-app-categories) | Android Auto | Android Automotive OS | - Network accessline 56
In addition to the guidelines specific to cars, each tier has associated guidelines from [Adaptive app quality guidelines](https://developer.android.com/docs/quality-guidelines/large-screen-app-quality) that - Network accessline 56
In addition to the guidelines specific to cars, each tier has associated guidelines from [Adaptive app quality guidelines](https://developer.android.com/docs/quality-guidelines/large-screen-app-quality) that - Network accessline 57
guidelines from [Adaptive app quality guidelines](https://developer.android.com/docs/quality-guidelines/large-screen-app-quality) that - Network accessline 57
guidelines from [Adaptive app quality guidelines](https://developer.android.com/docs/quality-guidelines/large-screen-app-quality) that - Network accessline 68
This tier primarily applies to the [parked categories](https://developer.android.com/training/cars/parked) of apps, - Network accessline 68
This tier primarily applies to the [parked categories](https://developer.android.com/training/cars/parked) of apps, - Network accessline 72
> [!NOTE] > **Note:** Through the [Car ready mobile apps program](https://developer.android.com/training/cars/car-ready-mobile-apps), mobile apps meeting the requirements in this tier can be made available for download from the Google Play - Network accessline 72
> [!NOTE] > **Note:** Through the [Car ready mobile apps program](https://developer.android.com/training/cars/car-ready-mobile-apps), mobile apps meeting the requirements in this tier can be made available for download from the Google Play - Network accessline 73
> **Note:** Through the [Car ready mobile apps program](https://developer.android.com/training/cars/car-ready-mobile-apps), mobile apps meeting the requirements in this tier can be made available for download from the Google Play Store on A - Network accessline 73
> **Note:** Through the [Car ready mobile apps program](https://developer.android.com/training/cars/car-ready-mobile-apps), mobile apps meeting the requirements in this tier can be made available for download from the Google Play Store on A - Network accessline 81
Apps in [categories built for use while driving](https://developer.android.com/training/cars#supported-app-categories) must - Network accessline 81
Apps in [categories built for use while driving](https://developer.android.com/training/cars#supported-app-categories) must - Network accessline 95
| Criteria | ID | Applicable Categories | Description | |---|---|---|---| | Permitted Categories | `PC-1` | All | The app must not include features outside the app types intended for cars. See [Supported app categories](https://developer.an - Network accessline 95
| Criteria | ID | Applicable Categories | Description | |---|---|---|---| | Permitted Categories | `PC-1` | All | The app must not include features outside the app types intended for cars. See [Supported app categories](https://developer.an - Network accessline 96
|---|---|---|---| | Permitted Categories | `PC-1` | All | The app must not include features outside the app types intended for cars. See [Supported app categories](https://developer.android.com/training/cars#supported-app-categories). | | E - Network accessline 96
|---|---|---|---| | Permitted Categories | `PC-1` | All | The app must not include features outside the app types intended for cars. See [Supported app categories](https://developer.android.com/training/cars#supported-app-categories). | | E - Network accessline 97
| Permitted Categories | `PC-1` | All | The app must not include features outside the app types intended for cars. See [Supported app categories](https://developer.android.com/training/cars#supported-app-categories). | - Network accessline 97
| Permitted Categories | `PC-1` | All | The app must not include features outside the app types intended for cars. See [Supported app categories](https://developer.android.com/training/cars#supported-app-categories). | - Network accessline 99
| Expected Performance | `EP-2` | Media, Messaging (templated), Calling, Navigation, POI, IOT, Weather, Video, Games, Browsers | When the app is relaunched from the home screen, the app must restore the app state as closely as possible to t - Network accessline 99
| Expected Performance | `EP-2` | Media, Messaging (templated), Calling, Navigation, POI, IOT, Weather, Video, Games, Browsers | When the app is relaunched from the home screen, the app must restore the app state as closely as possible to t - Network accessline 100
| Expected Performance | `EP-3` | Games | The app is responsive to input and does not freeze or stutter during gameplay. | | Expected Performance | `EP-4` | Media, Messaging (templated), Calling, Navigation, POI, IOT, Weather | **Android Au - Network accessline 100
| Expected Performance | `EP-3` | Games | The app is responsive to input and does not freeze or stutter during gameplay. | | Expected Performance | `EP-4` | Media, Messaging (templated), Calling, Navigation, POI, IOT, Weather | **Android Au - Network accessline 101
| Expected Performance | `EP-4` | Media, Messaging (templated), Calling, Navigation, POI, IOT, Weather | **Android Automotive OS only:** The app listing on Google Play Store must include screenshots for the Android Automotive OS form factor - Network accessline 101
| Expected Performance | `EP-4` | Media, Messaging (templated), Calling, Navigation, POI, IOT, Weather | **Android Automotive OS only:** The app listing on Google Play Store must include screenshots for the Android Automotive OS form factor - Network accessline 102
| Display Orientation | `DO-1` | Video, Games, Browsers | **Android Automotive OS only:** The app can be distributed to devices with fixed screen orientations. See [Required Android Automotive OS features](https://developer.android.com/trai - Network accessline 102
| Display Orientation | `DO-1` | Video, Games, Browsers | **Android Automotive OS only:** The app can be distributed to devices with fixed screen orientations. See [Required Android Automotive OS features](https://developer.android.com/trai - Network accessline 103
| Display Orientation | `DO-2` | Games | **Android Auto only:** The app is not significantly pillarboxed when running on landscape displays. See [Support common Android Auto screen sizes](https://developer.android.com/training/cars/parked/a - Network accessline 103
| Display Orientation | `DO-2` | Games | **Android Auto only:** The app is not significantly pillarboxed when running on landscape displays. See [Support common Android Auto screen sizes](https://developer.android.com/training/cars/parked/a - Network accessline 104
| App Rendering | `AR-1` | All categories supported by Android Automotive OS | In activities implemented by the app, interactive UI elements must not be obstructed by system bars or display cutouts. See [Work with window insets and display - Network accessline 104
| App Rendering | `AR-1` | All categories supported by Android Automotive OS | In activities implemented by the app, interactive UI elements must not be obstructed by system bars or display cutouts. See [Work with window insets and display - Network accessline 105
| Driver Distraction | `DD-3` | Video, Games, Browsers | The app must not be launchable or usable while driving and must not play any audio. See [Meet driver distraction requirements](https://developer.android.com/training/cars/parked/autom - Network accessline 105
| Driver Distraction | `DD-3` | Video, Games, Browsers | The app must not be launchable or usable while driving and must not play any audio. See [Meet driver distraction requirements](https://developer.android.com/training/cars/parked/autom - Network accessline 106
| Irrelevant notifications | `IN-2` | Video, Games, Browsers | The app must not post any [heads up notifications](https://developer.android.com/training/cars/platforms/automotive-os/notifications#hun). | - Network accessline 106
| Irrelevant notifications | `IN-2` | Video, Games, Browsers | The app must not post any [heads up notifications](https://developer.android.com/training/cars/platforms/automotive-os/notifications#hun). | - Network accessline 107
| App Navigability | `AN-1` | Video, Games, Browsers | Users can navigate through the app without encountering any dead ends. | | Sensitive Data | `SD-1` | Browsers | Browsers must not save or allow access to passwords or payment informatio - Network accessline 107
| App Navigability | `AN-1` | Video, Games, Browsers | Users can navigate through the app without encountering any dead ends. | | Sensitive Data | `SD-1` | Browsers | Browsers must not save or allow access to passwords or payment informatio - Network accessline 108
| Sensitive Data | `SD-1` | Browsers | Browsers must not save or allow access to passwords or payment information unless the [user can block access to passwords](https://developer.android.com/training/cars/parked/browser#block-sensitive) us - Network accessline 108
| Sensitive Data | `SD-1` | Browsers | Browsers must not save or allow access to passwords or payment information unless the [user can block access to passwords](https://developer.android.com/training/cars/parked/browser#block-sensitive) us - Network accessline 109
| Sensitive Data | `SD-2` | Browsers | Before syncing data to the car, browsers that synchronize passwords or payments data must do the following steps: 1. Prompt the user to authenticate. 2. Notify the user on the car screen their data wil - Network accessline 109
| Sensitive Data | `SD-2` | Browsers | Before syncing data to the car, browsers that synchronize passwords or payments data must do the following steps: 1. Prompt the user to authenticate. 2. Notify the user on the car screen their data wil - Network accessline 113
While these guidelines are relevant for all activities implemented by your app, they are Tier 3 requirements only for [parked apps](https://developer.android.com/training/cars/parked). - Network accessline 113
While these guidelines are relevant for all activities implemented by your app, they are Tier 3 requirements only for [parked apps](https://developer.android.com/training/cars/parked). - Network accessline 114
they are Tier 3 requirements only for [parked apps](https://developer.android.com/training/cars/parked). - Network accessline 114
they are Tier 3 requirements only for [parked apps](https://developer.android.com/training/cars/parked). - Network accessline 116
| Criteria | ID | Guidance for cars | |---|---|---| | Configuration and continuity | [`LS-C1`](https://developer.android.com/docs/quality-guidelines/large-screen-app-quality#LS-C1) | Configuration changes in cars are primarily caused by mov - Network accessline 116
| Criteria | ID | Guidance for cars | |---|---|---| | Configuration and continuity | [`LS-C1`](https://developer.android.com/docs/quality-guidelines/large-screen-app-quality#LS-C1) | Configuration changes in cars are primarily caused by mov - Network accessline 117
|---|---|---| | Configuration and continuity | [`LS-C1`](https://developer.android.com/docs/quality-guidelines/large-screen-app-quality#LS-C1) | Configuration changes in cars are primarily caused by moving an app between displays, such as w - Network accessline 117
|---|---|---| | Configuration and continuity | [`LS-C1`](https://developer.android.com/docs/quality-guidelines/large-screen-app-quality#LS-C1) | Configuration changes in cars are primarily caused by moving an app between displays, such as w - Network accessline 118
| Configuration and continuity | [`LS-C1`](https://developer.android.com/docs/quality-guidelines/large-screen-app-quality#LS-C1) | Configuration changes in cars are primarily caused by moving an app between displays, such as when moving an - Network accessline 118
| Configuration and continuity | [`LS-C1`](https://developer.android.com/docs/quality-guidelines/large-screen-app-quality#LS-C1) | Configuration changes in cars are primarily caused by moving an app between displays, such as when moving an - Network accessline 119
| Configuration and continuity | [`LS-C2`](https://developer.android.com/docs/quality-guidelines/large-screen-app-quality#LS-C2) | No additional guidance. | - Network accessline 119
| Configuration and continuity | [`LS-C2`](https://developer.android.com/docs/quality-guidelines/large-screen-app-quality#LS-C2) | No additional guidance. | - Network accessline 127
| Visual or Text Ads | `AD-1` | Media, Messaging, Calling, Navigation, POI, IOT, Weather | The app must not display text-based advertising other than the advertiser's name or the product name. | | Image Usage | `IU-1` | Media, Messaging, Ca - Network accessline 127
| Visual or Text Ads | `AD-1` | Media, Messaging, Calling, Navigation, POI, IOT, Weather | The app must not display text-based advertising other than the advertiser's name or the product name. | | Image Usage | `IU-1` | Media, Messaging, Ca - Network accessline 128
| Image Usage | `IU-1` | Media, Messaging, Calling, Navigation, POI, IOT, Weather | App elements don't display any images on the screen. Exceptions include: - Apps can display a single static image for content context in the background of t - Network accessline 128
| Image Usage | `IU-1` | Media, Messaging, Calling, Navigation, POI, IOT, Weather | App elements don't display any images on the screen. Exceptions include: - Apps can display a single static image for content context in the background of t - Network accessline 129
| Visual Information on Phone | `VI-1` | Media, Messaging (templated), Calling, Navigation, POI, IOT, Weather | **Android Auto only:** If the user must go to the phone screen---for example, to act on a permission request---then the app must - Network accessline 129
| Visual Information on Phone | `VI-1` | Media, Messaging (templated), Calling, Navigation, POI, IOT, Weather | **Android Auto only:** If the user must go to the phone screen---for example, to act on a permission request---then the app must - Network accessline 130
| App Doesn't Crash | `AC-1` | Messaging (templated), Calling, Navigation, POI, IOT, Weather | Users must be able to complete tasks in the app using five screens or fewer. For more information, see [Template restrictions](https://developer. - Network accessline 130
| App Doesn't Crash | `AC-1` | Messaging (templated), Calling, Navigation, POI, IOT, Weather | Users must be able to complete tasks in the app using five screens or fewer. For more information, see [Template restrictions](https://developer. - Network accessline 131
| Scrolling Text | `ST-1` | Media, Messaging, Calling, Navigation, POI, IOT, Weather | The app must not display automatically scrolling text. | | Voice Commands | `VC-1` | Media, Navigation | The app must support Gemini and Google Assistant - Network accessline 131
| Scrolling Text | `ST-1` | Media, Messaging, Calling, Navigation, POI, IOT, Weather | The app must not display automatically scrolling text. | | Voice Commands | `VC-1` | Media, Navigation | The app must support Gemini and Google Assistant - Network accessline 132
| Voice Commands | `VC-1` | Media, Navigation | The app must support Gemini and Google Assistant voice commands. For more information, see [Support voice actions](https://developer.android.com/training/cars/media/voice-actions) for media, a - Network accessline 132
| Voice Commands | `VC-1` | Media, Navigation | The app must support Gemini and Google Assistant voice commands. For more information, see [Support voice actions](https://developer.android.com/training/cars/media/voice-actions) for media, a - Network accessline 134
| Delayed Response | `DR-2` | Media, Messaging (templated), Calling, Navigation, POI, IOT, Weather | The app must launch in no more than 10 seconds. | | Delayed Response | `DR-3` | Media, Messaging (templated), Calling, Navigation, POI, IOT - Network accessline 134
| Delayed Response | `DR-2` | Media, Messaging (templated), Calling, Navigation, POI, IOT, Weather | The app must launch in no more than 10 seconds. | | Delayed Response | `DR-3` | Media, Messaging (templated), Calling, Navigation, POI, IOT - Network accessline 135
| Delayed Response | `DR-3` | Media, Messaging (templated), Calling, Navigation, POI, IOT, Weather | The app must load content in no more than 10 seconds. | | Contrast | `VD-1` | Media, Messaging, Calling, Navigation, POI, IOT, Weather | Th - Network accessline 135
| Delayed Response | `DR-3` | Media, Messaging (templated), Calling, Navigation, POI, IOT, Weather | The app must load content in no more than 10 seconds. | | Contrast | `VD-1` | Media, Messaging, Calling, Navigation, POI, IOT, Weather | Th - Network accessline 136
| Contrast | `VD-1` | Media, Messaging, Calling, Navigation, POI, IOT, Weather | The app must provide icons and colors that meet Android Auto's contrast requirements. For more information, see [Contrast](https://developers.google.com/cars/d - Network accessline 136
| Contrast | `VD-1` | Media, Messaging, Calling, Navigation, POI, IOT, Weather | The app must provide icons and colors that meet Android Auto's contrast requirements. For more information, see [Contrast](https://developers.google.com/cars/d - Network accessline 137
| Contrast | `VD-2` | Media | The app must provide white icon sets that the system colorizes to provide automatic contrast compensation. | | Contrast | `VD-3` | Media | The app must provide colors that the system can optimize for in-vehicle - Network accessline 137
| Contrast | `VD-2` | Media | The app must provide white icon sets that the system colorizes to provide automatic contrast compensation. | | Contrast | `VD-3` | Media | The app must provide colors that the system can optimize for in-vehicle - Network accessline 138
| Contrast | `VD-3` | Media | The app must provide colors that the system can optimize for in-vehicle readability. | | Theming | `TH-1` | Messaging (templated), Navigation, POI, IOT, Weather | Apps that add custom theming to Car App Library - Network accessline 138
| Contrast | `VD-3` | Media | The app must provide colors that the system can optimize for in-vehicle readability. | | Theming | `TH-1` | Messaging (templated), Navigation, POI, IOT, Weather | Apps that add custom theming to Car App Library - Network accessline 139
| Theming | `TH-1` | Messaging (templated), Navigation, POI, IOT, Weather | Apps that add custom theming to Car App Library components with version 1.9 or higher must support light and dark theme. See [Contrast](https://developer.android.co - Network accessline 139
| Theming | `TH-1` | Messaging (templated), Navigation, POI, IOT, Weather | Apps that add custom theming to Car App Library components with version 1.9 or higher must support light and dark theme. See [Contrast](https://developer.android.co - Network accessline 140
| Grey Buttons | `GB-1` | Media | Interactive elements that are intentionally disabled must be nonfunctional. | | Driver Distraction | `DD-1` | Navigation | The navigation audio channel can only be used by navigation apps and for navigation - Network accessline 140
| Grey Buttons | `GB-1` | Media | Interactive elements that are intentionally disabled must be nonfunctional. | | Driver Distraction | `DD-1` | Navigation | The navigation audio channel can only be used by navigation apps and for navigation - Network accessline 141
| Driver Distraction | `DD-1` | Navigation | The navigation audio channel can only be used by navigation apps and for navigation instructions. For more information, see [Voice guidance](https://developer.android.com/training/cars/apps/navig - Network accessline 141
| Driver Distraction | `DD-1` | Navigation | The navigation audio channel can only be used by navigation apps and for navigation instructions. For more information, see [Voice guidance](https://developer.android.com/training/cars/apps/navig - Network accessline 142
| Driver Distraction | `DD-2` | Video, Games, Browsers | While driving, the app must not be launchable and the app's UI must not be visible. The app's audio must stop when the user starts driving and cannot be unpaused while driving. For mo - Network accessline 142
| Driver Distraction | `DD-2` | Video, Games, Browsers | While driving, the app must not be launchable and the app's UI must not be visible. The app's audio must stop when the user starts driving and cannot be unpaused while driving. For mo - Network accessline 143
| Payments | `PA-1` | Navigation, POI, IOT, Weather | The app must have simple flows if purchases are enabled, using shortcuts such as recent or favorite purchases. For more information, see [Purchase using an existing payment method](https - Network accessline 143
| Payments | `PA-1` | Navigation, POI, IOT, Weather | The app must have simple flows if purchases are enabled, using shortcuts such as recent or favorite purchases. For more information, see [Purchase using an existing payment method](https - Network accessline 144
| Notification Ads | `NA-1` | Media, Messaging, Calling, Navigation, POI, IOT, Weather | The app must not present advertisements through notifications. | | Irrelevant Notifications | `IN-1` | Media, Messaging, Calling, Navigation, POI, IOT, - Network accessline 144
| Notification Ads | `NA-1` | Media, Messaging, Calling, Navigation, POI, IOT, Weather | The app must not present advertisements through notifications. | | Irrelevant Notifications | `IN-1` | Media, Messaging, Calling, Navigation, POI, IOT, - Network accessline 145
| Irrelevant Notifications | `IN-1` | Media, Messaging, Calling, Navigation, POI, IOT, Weather | The app must display notifications only when relevant to the driver's needs. Examples: Good: Notifying the user that a new message has arrived. - Network accessline 145
| Irrelevant Notifications | `IN-1` | Media, Messaging, Calling, Navigation, POI, IOT, Weather | The app must display notifications only when relevant to the driver's needs. Examples: Good: Notifying the user that a new message has arrived. - Network accessline 146
| Media Autoplay | `MA-1` | Media | The app must not autoplay on startup or without user initiated action to select the app or app media. For more information, see [Implement play commands](https://developer.android.com/training/cars/media# - Network accessline 146
| Media Autoplay | `MA-1` | Media | The app must not autoplay on startup or without user initiated action to select the app or app media. For more information, see [Implement play commands](https://developer.android.com/training/cars/media# - Network accessline 147
| Messaging Functionality | `MF-1` | Messaging | The app must receive incoming messages. For more information, see [Extend messaging notifications to Android Auto](https://developer.android.com/training/cars/communication/notification-messa - Network accessline 147
| Messaging Functionality | `MF-1` | Messaging | The app must receive incoming messages. For more information, see [Extend messaging notifications to Android Auto](https://developer.android.com/training/cars/communication/notification-messa - Network accessline 148
| Messaging Functionality | `MF-2` | Messaging | Messages must be properly grouped and displayed in the correct order. For more information, see [Extend messaging notifications to Android Auto](https://developer.android.com/training/cars/co - Network accessline 148
| Messaging Functionality | `MF-2` | Messaging | Messages must be properly grouped and displayed in the correct order. For more information, see [Extend messaging notifications to Android Auto](https://developer.android.com/training/cars/co - Network accessline 149
| Messaging Functionality | `MF-3` | Messaging | The user can reply to a message. For more information, see [Extend messaging notifications to Android Auto](https://developer.android.com/training/cars/communication/notification-messaging). - Network accessline 149
| Messaging Functionality | `MF-3` | Messaging | The user can reply to a message. For more information, see [Extend messaging notifications to Android Auto](https://developer.android.com/training/cars/communication/notification-messaging). - Network accessline 152
| Navigation Functionality | `NF-1` | Navigation | The app must provide turn-by-turn navigation directions. | | Navigation Functionality | `NF-2` | Navigation | The app draws only map content on the surface of the navigation templates. Text - Network accessline 152
| Navigation Functionality | `NF-1` | Navigation | The app must provide turn-by-turn navigation directions. | | Navigation Functionality | `NF-2` | Navigation | The app draws only map content on the surface of the navigation templates. Text - Network accessline 153
| Navigation Functionality | `NF-2` | Navigation | The app draws only map content on the surface of the navigation templates. Text-based turn-by-turn directions, lane guidance, and estimated arrival time must be displayed on the relevant co - Network accessline 153
| Navigation Functionality | `NF-2` | Navigation | The app draws only map content on the surface of the navigation templates. Text-based turn-by-turn directions, lane guidance, and estimated arrival time must be displayed on the relevant co - Network accessline 154
| Navigation Functionality | `NF-3` | Navigation | When the app provides text-based turn-by-turn directions, it must also trigger navigation notifications. For more information, see [Turn-by-turn notifications](https://developer.android.com - Network accessline 154
| Navigation Functionality | `NF-3` | Navigation | When the app provides text-based turn-by-turn directions, it must also trigger navigation notifications. For more information, see [Turn-by-turn notifications](https://developer.android.com - Network accessline 155
| Navigation Functionality | `NF-4` | Navigation | When the navigation app provides text-based turn-by-turn directions, it must send next-turn information to the vehicle's cluster display. For more information, see [Navigation metadata](htt - Network accessline 155
| Navigation Functionality | `NF-4` | Navigation | When the navigation app provides text-based turn-by-turn directions, it must send next-turn information to the vehicle's cluster display. For more information, see [Navigation metadata](htt - Network accessline 156
| Navigation Functionality | `NF-5` | Navigation | The app must not provide turn-by-turn notifications, voice guidance, or cluster information when another navigation app is providing turn-by-turn instructions. For more information, see [St - Network accessline 156
| Navigation Functionality | `NF-5` | Navigation | The app must not provide turn-by-turn notifications, voice guidance, or cluster information when another navigation app is providing turn-by-turn instructions. For more information, see [St - Network accessline 157
| Navigation Functionality | `NF-6` | Navigation | The app must handle navigation requests from other apps. For more information, see [Support navigation intents](https://developer.android.com/training/cars/apps/navigation#support-navigatio - Network accessline 157
| Navigation Functionality | `NF-6` | Navigation | The app must handle navigation requests from other apps. For more information, see [Support navigation intents](https://developer.android.com/training/cars/apps/navigation#support-navigatio - Network accessline 158
| Navigation Functionality | `NF-7` | Navigation | The app must provide a "test drive" mode that simulates driving. For more information, see [Simulate navigation](https://developer.android.com/training/cars/apps/navigation#simulating-navig - Network accessline 158
| Navigation Functionality | `NF-7` | Navigation | The app must provide a "test drive" mode that simulates driving. For more information, see [Simulate navigation](https://developer.android.com/training/cars/apps/navigation#simulating-navig - Network accessline 164
| Weather Functionality | `WE-4` | Weather | Customization of forecast intervals must not be made possible using templates. | | Weather Functionality | `WE-5` | Weather | Weather apps must not show more than five unique weather map annotati - Network accessline 164
| Weather Functionality | `WE-4` | Weather | Customization of forecast intervals must not be made possible using templates. | | Weather Functionality | `WE-5` | Weather | Weather apps must not show more than five unique weather map annotati - Network accessline 165
| Weather Functionality | `WE-5` | Weather | Weather apps must not show more than five unique weather map annotations in a given view (for example: Temperature markers, wind speed markers, humidity, radar overlay, lightning indicators, road - Network accessline 165
| Weather Functionality | `WE-5` | Weather | Weather apps must not show more than five unique weather map annotations in a given view (for example: Temperature markers, wind speed markers, humidity, radar overlay, lightning indicators, road - Network accessline 166
| Map Rendering | `MR-1` | Navigation, POI, Weather | By default, apps that [draw maps](https://developer.android.com/training/cars/apps#draw-maps) must draw a light-themed or dark-themed map when instructed to do so. For more information, - Network accessline 166
| Map Rendering | `MR-1` | Navigation, POI, Weather | By default, apps that [draw maps](https://developer.android.com/training/cars/apps#draw-maps) must draw a light-themed or dark-themed map when instructed to do so. For more information, - Network accessline 167
| Media Controls | `MC-1` | Video | The app integrates with media session. Depending on the content, the app must support either the play/pause or stop playback commands. Additionally, the app must provide title and thumbnail metadata for e - Network accessline 167
| Media Controls | `MC-1` | Video | The app integrates with media session. Depending on the content, the app must support either the play/pause or stop playback commands. Additionally, the app must provide title and thumbnail metadata for e - Network accessline 168
| Deep Links | `DL-1` | Video, Games, Browsers | **Android Automotive OS only:** The app supports deep links. See [Handling Android App Links](https://developer.android.com/training/app-links). | - Network accessline 168
| Deep Links | `DL-1` | Video, Games, Browsers | **Android Automotive OS only:** The app supports deep links. See [Handling Android App Links](https://developer.android.com/training/app-links). | - Network accessline 169
| Media Functionality (templated) | `MFT-1` | Media (templated) | User must be able to navigate to the `MediaPlaybackTemplate` from media browsing views or support the minimized control panel for apps using the Car App Library Version 1.9 o - Network accessline 169
| Media Functionality (templated) | `MFT-1` | Media (templated) | User must be able to navigate to the `MediaPlaybackTemplate` from media browsing views or support the minimized control panel for apps using the Car App Library Version 1.9 o - Network accessline 170
| Media Functionality (templated) | `MFT-3` | Media (templated) | Handle `SHOW_MEDIA_PLAYBACK` intents: Templated Media apps must handle the `androidx.car.app.media.action.SHOW_MEDIA_PLAYBACK` intent action to direct the user to the `MediaP - Network accessline 170
| Media Functionality (templated) | `MFT-3` | Media (templated) | Handle `SHOW_MEDIA_PLAYBACK` intents: Templated Media apps must handle the `androidx.car.app.media.action.SHOW_MEDIA_PLAYBACK` intent action to direct the user to the `MediaP - Network accessline 174
While these guidelines are relevant for all activities implemented by your app, they are Tier 2 requirements only for [parked apps](https://developer.android.com/training/cars/parked). - Network accessline 174
While these guidelines are relevant for all activities implemented by your app, they are Tier 2 requirements only for [parked apps](https://developer.android.com/training/cars/parked). - Network accessline 175
they are Tier 2 requirements only for [parked apps](https://developer.android.com/training/cars/parked). - Network accessline 175
they are Tier 2 requirements only for [parked apps](https://developer.android.com/training/cars/parked). - Network accessline 177
| Criteria | ID | Guidance for cars | |---|---|---| | Multi-window and multi-resume | [`LS-M2`](https://developer.android.com/docs/quality-guidelines/large-screen-app-quality#LS-M2) | When an activity is on a [distant display](https://devel - Network accessline 177
| Criteria | ID | Guidance for cars | |---|---|---| | Multi-window and multi-resume | [`LS-M2`](https://developer.android.com/docs/quality-guidelines/large-screen-app-quality#LS-M2) | When an activity is on a [distant display](https://devel - Network accessline 178
|---|---|---| | Multi-window and multi-resume | [`LS-M2`](https://developer.android.com/docs/quality-guidelines/large-screen-app-quality#LS-M2) | When an activity is on a [distant display](https://developer.android.com/training/cars/testing - Network accessline 178
|---|---|---| | Multi-window and multi-resume | [`LS-M2`](https://developer.android.com/docs/quality-guidelines/large-screen-app-quality#LS-M2) | When an activity is on a [distant display](https://developer.android.com/training/cars/testing - Network accessline 179
| Multi-window and multi-resume | [`LS-M2`](https://developer.android.com/docs/quality-guidelines/large-screen-app-quality#LS-M2) | When an activity is on a [distant display](https://developer.android.com/training/cars/testing/emulator/dist - Network accessline 179
| Multi-window and multi-resume | [`LS-M2`](https://developer.android.com/docs/quality-guidelines/large-screen-app-quality#LS-M2) | When an activity is on a [distant display](https://developer.android.com/training/cars/testing/emulator/dist - Network accessline 180
| UX | [`LS-U1`](https://developer.android.com/docs/quality-guidelines/large-screen-app-quality#LS-U1) | Some cars have landscape screens with much greater aspect ratios than are common on other large screen devices. You can use the [Automo - Network accessline 180
| UX | [`LS-U1`](https://developer.android.com/docs/quality-guidelines/large-screen-app-quality#LS-U1) | Some cars have landscape screens with much greater aspect ratios than are common on other large screen devices. You can use the [Automo - Network accessline 181
| UX | [`LS-U2`](https://developer.android.com/docs/quality-guidelines/large-screen-app-quality#LS-U2) | Same as for LS-U1 | - Network accessline 181
| UX | [`LS-U2`](https://developer.android.com/docs/quality-guidelines/large-screen-app-quality#LS-U2) | Same as for LS-U1 | - Network accessline 182
| UX | [`LS-U3`](https://developer.android.com/docs/quality-guidelines/large-screen-app-quality#LS-U3) | To qualify as a car optimized app, your app must meet the LS-U3 requirement for touch target sizes. To qualify as car differentiated, i - Network accessline 182
| UX | [`LS-U3`](https://developer.android.com/docs/quality-guidelines/large-screen-app-quality#LS-U3) | To qualify as a car optimized app, your app must meet the LS-U3 requirement for touch target sizes. To qualify as car differentiated, i - Network accessline 186
| Criteria | ID | Applicable Categories | Description | |---|---|---|---| | Navigation Functionality | `NF-9` | Navigation | The app supports rendering on cluster displays, and only renders map tiles on these displays. See [Drawing to the c - Network accessline 186
| Criteria | ID | Applicable Categories | Description | |---|---|---|---| | Navigation Functionality | `NF-9` | Navigation | The app supports rendering on cluster displays, and only renders map tiles on these displays. See [Drawing to the c - Network accessline 187
|---|---|---|---| | Navigation Functionality | `NF-9` | Navigation | The app supports rendering on cluster displays, and only renders map tiles on these displays. See [Drawing to the cluster display](https://developer.android.com/training/c - Network accessline 187
|---|---|---|---| | Navigation Functionality | `NF-9` | Navigation | The app supports rendering on cluster displays, and only renders map tiles on these displays. See [Drawing to the cluster display](https://developer.android.com/training/c - Network accessline 188
| Navigation Functionality | `NF-9` | Navigation | The app supports rendering on cluster displays, and only renders map tiles on these displays. See [Drawing to the cluster display](https://developer.android.com/training/cars/apps/navigatio - Network accessline 188
| Navigation Functionality | `NF-9` | Navigation | The app supports rendering on cluster displays, and only renders map tiles on these displays. See [Drawing to the cluster display](https://developer.android.com/training/cars/apps/navigatio - Network accessline 189
| Templated Messaging Functionality | `TMF-1` | Messaging (templated) | The app displays conversations as described in [Display conversations](https://developer.android.com/training/cars/communication/templated-messaging#display-conversatio - Network accessline 189
| Templated Messaging Functionality | `TMF-1` | Messaging (templated) | The app displays conversations as described in [Display conversations](https://developer.android.com/training/cars/communication/templated-messaging#display-conversatio - Network accessline 190
| Calling Functionality | `CF-1` | Calling | The app can be used to initiate, accept, decline, and leave calls. See [Build calling experiences for Android Auto](https://developer.android.com/training/cars/communication/calling#integrate-tel - Network accessline 190
| Calling Functionality | `CF-1` | Calling | The app can be used to initiate, accept, decline, and leave calls. See [Build calling experiences for Android Auto](https://developer.android.com/training/cars/communication/calling#integrate-tel - Network accessline 191
| Calling Functionality | `CF-2` | Calling | During a call, the app provides the following: - A call name and icon. - For meetings/group calls, the number of participants and the actively speaking participant. - The ability for a user to mu - Network accessline 191
| Calling Functionality | `CF-2` | Calling | During a call, the app provides the following: - A call name and icon. - For meetings/group calls, the number of participants and the actively speaking participant. - The ability for a user to mu - Network accessline 192
| Calling Functionality | `CF-3` | Calling | Calls initiated while Android Auto is not connected continue when a user connects to Android Auto and are displayed on Android Auto. | | Deep Links | `DL-2` | Media, Navigation, POI, IOT, Weather - Network accessline 192
| Calling Functionality | `CF-3` | Calling | Calls initiated while Android Auto is not connected continue when a user connects to Android Auto and are displayed on Android Auto. | | Deep Links | `DL-2` | Media, Navigation, POI, IOT, Weather - Network accessline 193
| Deep Links | `DL-2` | Media, Navigation, POI, IOT, Weather | **Android Automotive OS only:** The app supports deep links: - For media apps, see [Add support for Android Automotive OS to your media app](https://developer.android.com/traini - Network accessline 193
| Deep Links | `DL-2` | Media, Navigation, POI, IOT, Weather | **Android Automotive OS only:** The app supports deep links: - For media apps, see [Add support for Android Automotive OS to your media app](https://developer.android.com/traini - Network accessline 194
| Driver distraction | `DD-4` | Video | The app supports audio while driving on capable devices. See [Support audio while driving](https://developer.android.com/training/cars/parked/video#audio-while-driving) for additional details. **Impor - Network accessline 194
| Driver distraction | `DD-4` | Video | The app supports audio while driving on capable devices. See [Support audio while driving](https://developer.android.com/training/cars/parked/video#audio-while-driving) for additional details. **Impor - Network accessline 195
| App Rendering | `AR-2` | Video, Games, Browsers | The app renders into display cutouts to fully make use of the screen space available while maintaining the ability for users to continue interacting with all UI elements on the screen. See - Network accessline 195
| App Rendering | `AR-2` | Video, Games, Browsers | The app renders into display cutouts to fully make use of the screen space available while maintaining the ability for users to continue interacting with all UI elements on the screen. See - Network accessline 196
| Media Functionality (templated) | `MFT-2` | Media (templated) | App provides a differentiated experience by using templates for scenarios beyond basic browsing and playback. For example, by providing expanded playback controls or by allow - Network accessline 196
| Media Functionality (templated) | `MFT-2` | Media (templated) | App provides a differentiated experience by using templates for scenarios beyond basic browsing and playback. For example, by providing expanded playback controls or by allow - Network accessline 203
While these guidelines are relevant for all activities implemented by your app, they are Tier 1 requirements only for [parked apps](https://developer.android.com/training/cars/parked). - Network accessline 203
While these guidelines are relevant for all activities implemented by your app, they are Tier 1 requirements only for [parked apps](https://developer.android.com/training/cars/parked). - Network accessline 204
they are Tier 1 requirements only for [parked apps](https://developer.android.com/training/cars/parked). - Network accessline 204
they are Tier 1 requirements only for [parked apps](https://developer.android.com/training/cars/parked). - Network accessline 206
| Criteria | ID | Guidance for cars | |---|---|---| | UX | [`LS-U4`](https://developer.android.com/docs/quality-guidelines/large-screen-app-quality#LS-U4) | Although keyboards are supported by Android Automotive OS, they're less common inpu - Network accessline 206
| Criteria | ID | Guidance for cars | |---|---|---| | UX | [`LS-U4`](https://developer.android.com/docs/quality-guidelines/large-screen-app-quality#LS-U4) | Although keyboards are supported by Android Automotive OS, they're less common inpu - Network accessline 207
|---|---|---| | UX | [`LS-U4`](https://developer.android.com/docs/quality-guidelines/large-screen-app-quality#LS-U4) | Although keyboards are supported by Android Automotive OS, they're less common input methods in cars in comparison to oth - Network accessline 207
|---|---|---| | UX | [`LS-U4`](https://developer.android.com/docs/quality-guidelines/large-screen-app-quality#LS-U4) | Although keyboards are supported by Android Automotive OS, they're less common input methods in cars in comparison to oth - Network accessline 208
| UX | [`LS-U4`](https://developer.android.com/docs/quality-guidelines/large-screen-app-quality#LS-U4) | Although keyboards are supported by Android Automotive OS, they're less common input methods in cars in comparison to other large scree - Network accessline 208
| UX | [`LS-U4`](https://developer.android.com/docs/quality-guidelines/large-screen-app-quality#LS-U4) | Although keyboards are supported by Android Automotive OS, they're less common input methods in cars in comparison to other large scree - Network accessline 209
| Keyboard, mouse, and trackpad | [`LS-I3`](https://developer.android.com/docs/quality-guidelines/large-screen-app-quality#LS-I3) | Same as for LS-U4 | - Network accessline 209
| Keyboard, mouse, and trackpad | [`LS-I3`](https://developer.android.com/docs/quality-guidelines/large-screen-app-quality#LS-I3) | Same as for LS-U4 | - Network accessline 222
If your app does not meet the app quality requirements described on this page, the Play Store team contacts you through the email address specified in the [Google Play Console](https://play.google.com/console/) account associated with the a - Network accessline 222
If your app does not meet the app quality requirements described on this page, the Play Store team contacts you through the email address specified in the [Google Play Console](https://play.google.com/console/) account associated with the a - Network accessline 224
[Google Play Console](https://play.google.com/console/) account associated with the app. - Network accessline 224
[Google Play Console](https://play.google.com/console/) account associated with the app. - Network accessline 226
> [!NOTE] > **Note:** For information about how to publish your app in Google Play, see [Distribute to cars](https://developer.android.com/training/cars/distribute). - Network accessline 226
> [!NOTE] > **Note:** For information about how to publish your app in Google Play, see [Distribute to cars](https://developer.android.com/training/cars/distribute). - Network accessline 227
> **Note:** For information about how to publish your app in Google Play, see [Distribute to cars](https://developer.android.com/training/cars/distribute). - Network accessline 227
> **Note:** For information about how to publish your app in Google Play, see [Distribute to cars](https://developer.android.com/training/cars/distribute). - Network accessline 231
You can learn more about [managing policy violations and appeals](https://support.google.com/googleplay/android-developer/answer/9899142) - Network accessline 231
You can learn more about [managing policy violations and appeals](https://support.google.com/googleplay/android-developer/answer/9899142) - Network accessline 232
[managing policy violations and appeals](https://support.google.com/googleplay/android-developer/answer/9899142) - Network accessline 232
[managing policy violations and appeals](https://support.google.com/googleplay/android-developer/answer/9899142) - Network accessline 251
- The Games parked app category has graduated from beta to general availability. Developers can now publish games to all track types on Google Play. See [Supported app categories](https://developer.android.com/training/cars#supported-app-ca - Network accessline 251
- The Games parked app category has graduated from beta to general availability. Developers can now publish games to all track types on Google Play. See [Supported app categories](https://developer.android.com/training/cars#supported-app-ca - Network accessline 257
- Categories affected: Media, Messaging (templated), Calling, Navigation, POI, IOT, or Weather - New criterion: [`EP-4`](https://developer.android.com/docs/quality-guidelines/car-app-quality#EP-4) - Network accessline 257
- Categories affected: Media, Messaging (templated), Calling, Navigation, POI, IOT, or Weather - New criterion: [`EP-4`](https://developer.android.com/docs/quality-guidelines/car-app-quality#EP-4) - Network accessline 259
[`EP-4`](https://developer.android.com/docs/quality-guidelines/car-app-quality#EP-4) - Network accessline 259
[`EP-4`](https://developer.android.com/docs/quality-guidelines/car-app-quality#EP-4) - Network accessline 264
Automotive OS form factor. See [Provide Android Automotive OS screenshots](https://developer.android.com/training/cars/distribute#opt-in-aaos). - Network accessline 264
Automotive OS form factor. See [Provide Android Automotive OS screenshots](https://developer.android.com/training/cars/distribute#opt-in-aaos). - Network accessline 266
Automotive OS screenshots](https://developer.android.com/training/cars/distribute#opt-in-aaos). - Network accessline 266
Automotive OS screenshots](https://developer.android.com/training/cars/distribute#opt-in-aaos). - Network accessline 273
Play Store listing. See [Provide Android Automotive OS screenshots](https://developer.android.com/training/cars/distribute#opt-in-aaos). - Network accessline 273
Play Store listing. See [Provide Android Automotive OS screenshots](https://developer.android.com/training/cars/distribute#opt-in-aaos). - Network accessline 275
Automotive OS screenshots](https://developer.android.com/training/cars/distribute#opt-in-aaos). - Network accessline 275
Automotive OS screenshots](https://developer.android.com/training/cars/distribute#opt-in-aaos). - Network accessline 281
- Categories affected: Media, Media (templated), Navigation - Updated criterion: [`VC-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#VC-1) - Network accessline 281
- Categories affected: Media, Media (templated), Navigation - Updated criterion: [`VC-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#VC-1) - Network accessline 282
- Updated criterion: [`VC-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#VC-1) - Network accessline 282
- Updated criterion: [`VC-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#VC-1) - Network accessline 285
The app must support Google Assistant voice commands. For more information, see [Support voice actions](https://developer.android.com/training/cars/media/voice-actions) for - Network accessline 285
The app must support Google Assistant voice commands. For more information, see [Support voice actions](https://developer.android.com/training/cars/media/voice-actions) for - Network accessline 286
information, see [Support voice actions](https://developer.android.com/training/cars/media/voice-actions) for - Network accessline 286
information, see [Support voice actions](https://developer.android.com/training/cars/media/voice-actions) for - Network accessline 287
media, and [Support navigation intents](https://developer.android.com/training/cars/apps/navigation#support-navigation-intents) for - Network accessline 287
media, and [Support navigation intents](https://developer.android.com/training/cars/apps/navigation#support-navigation-intents) for - Network accessline 291
The app must support Gemini and Google Assistant voice commands. For more information, see [Support voice actions](https://developer.android.com/training/cars/media/voice-actions) - Network accessline 291
The app must support Gemini and Google Assistant voice commands. For more information, see [Support voice actions](https://developer.android.com/training/cars/media/voice-actions) - Network accessline 292
more information, see [Support voice actions](https://developer.android.com/training/cars/media/voice-actions) - Network accessline 292
more information, see [Support voice actions](https://developer.android.com/training/cars/media/voice-actions) - Network accessline 293
for media, and [Support navigation intents](https://developer.android.com/training/cars/apps/navigation#support-navigation-intents) for - Network accessline 293
for media, and [Support navigation intents](https://developer.android.com/training/cars/apps/navigation#support-navigation-intents) for - Network accessline 297
- Categories affected: Media (templated), Messaging (templated), Navigation, POI, IOT, Weather - New criterion: [`TH-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#TH-1) - Network accessline 297
- Categories affected: Media (templated), Messaging (templated), Navigation, POI, IOT, Weather - New criterion: [`TH-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#TH-1) - Network accessline 299
[`TH-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#TH-1) - Network accessline 299
[`TH-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#TH-1) - Network accessline 301
Apps that add custom theming to Car App Library components with version 1.9 or higher must support light and dark theme. See [Contrast](https://developer.android.com/develop/ui/compose/styles/theming) for more information. - Network accessline 301
Apps that add custom theming to Car App Library components with version 1.9 or higher must support light and dark theme. See [Contrast](https://developer.android.com/develop/ui/compose/styles/theming) for more information. - Network accessline 302
1.9 or higher must support light and dark theme. See [Contrast](https://developer.android.com/develop/ui/compose/styles/theming) for more information. - Media Functionality (templated) - Network accessline 302
1.9 or higher must support light and dark theme. See [Contrast](https://developer.android.com/develop/ui/compose/styles/theming) for more information. - Media Functionality (templated) - Network accessline 303
[Contrast](https://developer.android.com/develop/ui/compose/styles/theming) for more information. - Network accessline 303
[Contrast](https://developer.android.com/develop/ui/compose/styles/theming) for more information. - Network accessline 306
- Categories affected: Media (templated) - Updated criterion: [`MFT-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#MFT-1) - Network accessline 306
- Categories affected: Media (templated) - Updated criterion: [`MFT-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#MFT-1) - Network accessline 307
- Updated criterion: [`MFT-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#MFT-1) - Network accessline 307
- Updated criterion: [`MFT-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#MFT-1) - Network accessline 310
User must be able to navigate to the `MediaPlaybackTemplate` from media browsing views. See [Build templated media apps](https://developer.android.com/training/cars/apps/media) for more details. - Network accessline 310
User must be able to navigate to the `MediaPlaybackTemplate` from media browsing views. See [Build templated media apps](https://developer.android.com/training/cars/apps/media) for more details. - Network accessline 311
browsing views. See [Build templated media apps](https://developer.android.com/training/cars/apps/media) for more details. - New text: - Network accessline 311
browsing views. See [Build templated media apps](https://developer.android.com/training/cars/apps/media) for more details. - New text: - Network accessline 312
apps](https://developer.android.com/training/cars/apps/media) for more details. - Network accessline 312
apps](https://developer.android.com/training/cars/apps/media) for more details. - Network accessline 316
browsing views or support the minimized control panel for apps using the Car App Library Version 1.9 or higher. See [Build templated media apps](https://developer.android.com/training/cars/apps/media) for more details. - Network accessline 316
browsing views or support the minimized control panel for apps using the Car App Library Version 1.9 or higher. See [Build templated media apps](https://developer.android.com/training/cars/apps/media) for more details. - Network accessline 317
Car App Library Version 1.9 or higher. See [Build templated media apps](https://developer.android.com/training/cars/apps/media) for more details. - Categories affected: Media (templated) - Network accessline 317
Car App Library Version 1.9 or higher. See [Build templated media apps](https://developer.android.com/training/cars/apps/media) for more details. - Categories affected: Media (templated) - Network accessline 318
apps](https://developer.android.com/training/cars/apps/media) for more details. - Network accessline 318
apps](https://developer.android.com/training/cars/apps/media) for more details. - Network accessline 321
- New criterion: [`MFT-3`](https://developer.android.com/docs/quality-guidelines/car-app-quality#MFT-3) - Network accessline 321
- New criterion: [`MFT-3`](https://developer.android.com/docs/quality-guidelines/car-app-quality#MFT-3) - Network accessline 322
[`MFT-3`](https://developer.android.com/docs/quality-guidelines/car-app-quality#MFT-3) - Network accessline 322
[`MFT-3`](https://developer.android.com/docs/quality-guidelines/car-app-quality#MFT-3) - Network accessline 325
handle the `androidx.car.app.media.action.SHOW_MEDIA_PLAYBACK` intent action to direct the user to the `MediaPlaybackTemplate`. See [handle system media playback intents](https://developer.android.com/training/cars/apps/media#sys-me - Network accessline 325
handle the `androidx.car.app.media.action.SHOW_MEDIA_PLAYBACK` intent action to direct the user to the `MediaPlaybackTemplate`. See [handle system media playback intents](https://developer.android.com/training/cars/apps/media#sys-me - Network accessline 326
action to direct the user to the `MediaPlaybackTemplate`. See [handle system media playback intents](https://developer.android.com/training/cars/apps/media#sys-media-playback-intents) for more details. - Network accessline 326
action to direct the user to the `MediaPlaybackTemplate`. See [handle system media playback intents](https://developer.android.com/training/cars/apps/media#sys-media-playback-intents) for more details. - Network accessline 327
system media playback intents](https://developer.android.com/training/cars/apps/media#sys-media-playback-intents) for more - Network accessline 327
system media playback intents](https://developer.android.com/training/cars/apps/media#sys-media-playback-intents) for more - Network accessline 332
- [App Categories](https://developer.android.com/docs/quality-guidelines/car-app-quality#app-categories): "Communication --- messaging notifications" replaces the "Messaging" category. "Communication --- templated messaging" and "Communicat - Network accessline 332
- [App Categories](https://developer.android.com/docs/quality-guidelines/car-app-quality#app-categories): "Communication --- messaging notifications" replaces the "Messaging" category. "Communication --- templated messaging" and "Communicat - Network accessline 335
- Categories affected: Games - New criterion: [`EP-3`](https://developer.android.com/docs/quality-guidelines/car-app-quality#EP-3) - Network accessline 335
- Categories affected: Games - New criterion: [`EP-3`](https://developer.android.com/docs/quality-guidelines/car-app-quality#EP-3) - Network accessline 337
[`EP-3`](https://developer.android.com/docs/quality-guidelines/car-app-quality#EP-3) - Network accessline 337
[`EP-3`](https://developer.android.com/docs/quality-guidelines/car-app-quality#EP-3) - Network accessline 343
- Categories affected: Games, Video, Browser - Updated criterion: [`DO-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#DO-1) - Network accessline 343
- Categories affected: Games, Video, Browser - Updated criterion: [`DO-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#DO-1) - Network accessline 344
- Updated criterion: [`DO-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#DO-1) - Network accessline 344
- Updated criterion: [`DO-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#DO-1) - Network accessline 347
The app can be distributed to devices with fixed screen orientations. See [Required Android Automotive OS features](https://developer.android.com/training/cars/parked#required-features). - Network accessline 347
The app can be distributed to devices with fixed screen orientations. See [Required Android Automotive OS features](https://developer.android.com/training/cars/parked#required-features). - Network accessline 348
See [Required Android Automotive OS features](https://developer.android.com/training/cars/parked#required-features). - Network accessline 348
See [Required Android Automotive OS features](https://developer.android.com/training/cars/parked#required-features). - Network accessline 351
Android Automotive OS only: The app can be distributed to devices with fixed screen orientations. See [Required Android Automotive OS features](https://developer.android.com/training/cars/parked/automotive-os#required-features). - Network accessline 351
Android Automotive OS only: The app can be distributed to devices with fixed screen orientations. See [Required Android Automotive OS features](https://developer.android.com/training/cars/parked/automotive-os#required-features). - Network accessline 352
with fixed screen orientations. See [Required Android Automotive OS features](https://developer.android.com/training/cars/parked/automotive-os#required-features). - Categories affected: Games - Network accessline 352
with fixed screen orientations. See [Required Android Automotive OS features](https://developer.android.com/training/cars/parked/automotive-os#required-features). - Categories affected: Games - Network accessline 353
features](https://developer.android.com/training/cars/parked/automotive-os#required-features). - Network accessline 353
features](https://developer.android.com/training/cars/parked/automotive-os#required-features). - Network accessline 356
- New criterion: [`DO-2`](https://developer.android.com/docs/quality-guidelines/car-app-quality#DO-2) - Network accessline 356
- New criterion: [`DO-2`](https://developer.android.com/docs/quality-guidelines/car-app-quality#DO-2) - Network accessline 357
[`DO-2`](https://developer.android.com/docs/quality-guidelines/car-app-quality#DO-2) - Network accessline 357
[`DO-2`](https://developer.android.com/docs/quality-guidelines/car-app-quality#DO-2) - Network accessline 359
Android Auto only: The app is not significantly pillarboxed when running on landscape displays. See [Add support for Android Auto to your parked app](https://developer.android.com/training/cars/parked/auto). - Network accessline 359
Android Auto only: The app is not significantly pillarboxed when running on landscape displays. See [Add support for Android Auto to your parked app](https://developer.android.com/training/cars/parked/auto). - Network accessline 360
running on landscape displays. See [Add support for Android Auto to your parked app](https://developer.android.com/training/cars/parked/auto). - Deep Links - Network accessline 360
running on landscape displays. See [Add support for Android Auto to your parked app](https://developer.android.com/training/cars/parked/auto). - Deep Links - Network accessline 361
parked app](https://developer.android.com/training/cars/parked/auto). - Network accessline 361
parked app](https://developer.android.com/training/cars/parked/auto). - Network accessline 364
- Categories affected: Video, Games, Browsers - New criterion: [`DL-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#DL-1) - Network accessline 364
- Categories affected: Video, Games, Browsers - New criterion: [`DL-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#DL-1) - Network accessline 366
[`DL-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#DL-1) - Network accessline 366
[`DL-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#DL-1) - Network accessline 368
Android Automotive OS only: The app supports deep links. See [Handling Android App Links](https://developer.android.com/training/app-links). - Network accessline 368
Android Automotive OS only: The app supports deep links. See [Handling Android App Links](https://developer.android.com/training/app-links). - Network accessline 369
[Handling Android App Links](https://developer.android.com/training/app-links). - Network accessline 369
[Handling Android App Links](https://developer.android.com/training/app-links). - Network accessline 372
- New criterion: [`DL-2`](https://developer.android.com/docs/quality-guidelines/car-app-quality#DL-2) - Network accessline 372
- New criterion: [`DL-2`](https://developer.android.com/docs/quality-guidelines/car-app-quality#DL-2) - Network accessline 373
[`DL-2`](https://developer.android.com/docs/quality-guidelines/car-app-quality#DL-2) - Network accessline 373
[`DL-2`](https://developer.android.com/docs/quality-guidelines/car-app-quality#DL-2) - Network accessline 375
Android Automotive OS only: The app supports deep links: - For media apps, see [Add support for Android Automotive OS to your media app](https://developer.android.com/training/cars/media/automotive-os#support-deep-links). - Network accessline 375
Android Automotive OS only: The app supports deep links: - For media apps, see [Add support for Android Automotive OS to your media app](https://developer.android.com/training/cars/media/automotive-os#support-deep-links). - Network accessline 376
- For media apps, see [Add support for Android Automotive OS to your media app](https://developer.android.com/training/cars/media/automotive-os#support-deep-links). - For templated apps, see [Add support for Android Automotive OS - Network accessline 376
- For media apps, see [Add support for Android Automotive OS to your media app](https://developer.android.com/training/cars/media/automotive-os#support-deep-links). - For templated apps, see [Add support for Android Automotive OS - Network accessline 377
media app](https://developer.android.com/training/cars/media/automotive-os#support-deep-links). - Network accessline 377
media app](https://developer.android.com/training/cars/media/automotive-os#support-deep-links). - Network accessline 378
- For templated apps, see [Add support for Android Automotive OS to your templated app](https://developer.android.com/training/cars/apps/automotive-os#support-deep-links). - CPU Architectures - Network accessline 378
- For templated apps, see [Add support for Android Automotive OS to your templated app](https://developer.android.com/training/cars/apps/automotive-os#support-deep-links). - CPU Architectures - Network accessline 379
your templated app](https://developer.android.com/training/cars/apps/automotive-os#support-deep-links). - Network accessline 379
your templated app](https://developer.android.com/training/cars/apps/automotive-os#support-deep-links). - Network accessline 388
- Categories affected: Video - New criterion: [`DD-4`](https://developer.android.com/docs/quality-guidelines/car-app-quality#DD-4) - Network accessline 388
- Categories affected: Video - New criterion: [`DD-4`](https://developer.android.com/docs/quality-guidelines/car-app-quality#DD-4) - Network accessline 390
[`DD-4`](https://developer.android.com/docs/quality-guidelines/car-app-quality#DD-4) - Network accessline 390
[`DD-4`](https://developer.android.com/docs/quality-guidelines/car-app-quality#DD-4) - Network accessline 392
The app supports audio while driving on capable devices. See [Support audio while driving](https://developer.android.com/training/cars/parked/video#audio-while-driving) for additional details. - Network accessline 392
The app supports audio while driving on capable devices. See [Support audio while driving](https://developer.android.com/training/cars/parked/video#audio-while-driving) for additional details. - Network accessline 393
audio while driving](https://developer.android.com/training/cars/parked/video#audio-while-driving) for additional details. - Network accessline 393
audio while driving](https://developer.android.com/training/cars/parked/video#audio-while-driving) for additional details. - Network accessline 395
> [!IMPORTANT] > **Important:** The app must meet [`DD-2`](https://developer.android.com/docs/quality-guidelines/car-app-quality#DD-2) on devices that don't support audio while driving. - Network accessline 395
> [!IMPORTANT] > **Important:** The app must meet [`DD-2`](https://developer.android.com/docs/quality-guidelines/car-app-quality#DD-2) on devices that don't support audio while driving. - Network accessline 396
> **Important:** The app must meet [`DD-2`](https://developer.android.com/docs/quality-guidelines/car-app-quality#DD-2) on devices that don't support audio while driving. - Network accessline 396
> **Important:** The app must meet [`DD-2`](https://developer.android.com/docs/quality-guidelines/car-app-quality#DD-2) on devices that don't support audio while driving. - Network accessline 400
- [App Categories](https://developer.android.com/docs/quality-guidelines/car-app-quality#app-categories): "Weather" has been added, including the introduction of the Weather Functionality criteria. - Network accessline 400
- [App Categories](https://developer.android.com/docs/quality-guidelines/car-app-quality#app-categories): "Weather" has been added, including the introduction of the Weather Functionality criteria. - Network accessline 403
- Categories affected: Navigation, POI, Weather - New criterion: [`MR-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#MR-1) - Network accessline 403
- Categories affected: Navigation, POI, Weather - New criterion: [`MR-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#MR-1) - Network accessline 405
[`MR-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#MR-1) - Network accessline 405
[`MR-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#MR-1) - Network accessline 407
By default, apps that [draw maps](https://developer.android.com/training/cars/apps#draw-maps) must draw a - Network accessline 407
By default, apps that [draw maps](https://developer.android.com/training/cars/apps#draw-maps) must draw a - Network accessline 409
information, see [Support dark theme](https://developer.android.com/training/cars#dark-theme). - Network accessline 409
information, see [Support dark theme](https://developer.android.com/training/cars#dark-theme). - Network accessline 415
- Removed criterion: `NF-8` - Categories affected: Navigation Replacement of criterion NF-8 by the [`MR-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#MR-1) criterion. - Network accessline 415
- Removed criterion: `NF-8` - Categories affected: Navigation Replacement of criterion NF-8 by the [`MR-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#MR-1) criterion. - Network accessline 416
- Categories affected: Navigation Replacement of criterion NF-8 by the [`MR-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#MR-1) criterion. - Network accessline 416
- Categories affected: Navigation Replacement of criterion NF-8 by the [`MR-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#MR-1) criterion. - Network accessline 417
- Updated criterion: [`NF-9`](https://developer.android.com/docs/quality-guidelines/car-app-quality#NF-9) - Network accessline 417
- Updated criterion: [`NF-9`](https://developer.android.com/docs/quality-guidelines/car-app-quality#NF-9) - Network accessline 421
The app supports rendering on cluster displays, and only renders map tiles on these displays. See [Drawing to the cluster display](https://developer.android.com/training/cars/apps/navigation#drawing-cluster-display). - Network accessline 421
The app supports rendering on cluster displays, and only renders map tiles on these displays. See [Drawing to the cluster display](https://developer.android.com/training/cars/apps/navigation#drawing-cluster-display). - Network accessline 422
tiles on these displays. See [Drawing to the cluster display](https://developer.android.com/training/cars/apps/navigation#drawing-cluster-display). - New text: - Network accessline 422
tiles on these displays. See [Drawing to the cluster display](https://developer.android.com/training/cars/apps/navigation#drawing-cluster-display). - New text: - Network accessline 423
[Drawing to the cluster display](https://developer.android.com/training/cars/apps/navigation#drawing-cluster-display). - Network accessline 423
[Drawing to the cluster display](https://developer.android.com/training/cars/apps/navigation#drawing-cluster-display). - Network accessline 426
The app supports rendering on cluster displays, and only renders map tiles on these displays. See [Drawing to the cluster display](https://developer.android.com/training/cars/apps/navigation#drawing-cluster-display). - Network accessline 426
The app supports rendering on cluster displays, and only renders map tiles on these displays. See [Drawing to the cluster display](https://developer.android.com/training/cars/apps/navigation#drawing-cluster-display). - Network accessline 428
[Drawing to the cluster display](https://developer.android.com/training/cars/apps/navigation#drawing-cluster-display). - Network accessline 428
[Drawing to the cluster display](https://developer.android.com/training/cars/apps/navigation#drawing-cluster-display). - Network accessline 434
- Updated criterion: [`SA-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#SA-1) - Network accessline 434
- Updated criterion: [`SA-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#SA-1) - Network accessline 450
- Introduction of the [Car quality tiers](https://developer.android.com/docs/quality-guidelines/car-app-quality#car-quality-tiers) - Network accessline 450
- Introduction of the [Car quality tiers](https://developer.android.com/docs/quality-guidelines/car-app-quality#car-quality-tiers) - Network accessline 453
- Categories affected: Browsers, Games, Video - New criterion: [`DD-3`](https://developer.android.com/docs/quality-guidelines/car-app-quality#DD-3) - Network accessline 453
- Categories affected: Browsers, Games, Video - New criterion: [`DD-3`](https://developer.android.com/docs/quality-guidelines/car-app-quality#DD-3) - Network accessline 455
[`DD-3`](https://developer.android.com/docs/quality-guidelines/car-app-quality#DD-3) - Network accessline 455
[`DD-3`](https://developer.android.com/docs/quality-guidelines/car-app-quality#DD-3) - Network accessline 460
[Ensure there are no distraction optimized activities](https://developer.android.com/training/cars/parked#ensure_there_are_no_distraction-optimized_activities). - Network accessline 460
[Ensure there are no distraction optimized activities](https://developer.android.com/training/cars/parked#ensure_there_are_no_distraction-optimized_activities). - Network accessline 461
activities](https://developer.android.com/training/cars/parked#ensure_there_are_no_distraction-optimized_activities). - Network accessline 461
activities](https://developer.android.com/training/cars/parked#ensure_there_are_no_distraction-optimized_activities). - Network accessline 463
> [!NOTE] > **Note:** If your app plays audio, it must meet the [`DD-2`](https://developer.android.com/docs/quality-guidelines/car-app-quality#DD-2) requirement. - Network accessline 463
> [!NOTE] > **Note:** If your app plays audio, it must meet the [`DD-2`](https://developer.android.com/docs/quality-guidelines/car-app-quality#DD-2) requirement. - Network accessline 464
> **Note:** If your app plays audio, it must meet the [`DD-2`](https://developer.android.com/docs/quality-guidelines/car-app-quality#DD-2) requirement. - Network accessline 464
> **Note:** If your app plays audio, it must meet the [`DD-2`](https://developer.android.com/docs/quality-guidelines/car-app-quality#DD-2) requirement. - Network accessline 468
- Categories affected: All categories supported by Android Automotive OS - New criterion: [`AR-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#AR-1) - Network accessline 468
- Categories affected: All categories supported by Android Automotive OS - New criterion: [`AR-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#AR-1) - Network accessline 470
[`AR-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#AR-1) - Network accessline 470
[`AR-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#AR-1) - Network accessline 472
In activities implemented by the app, interactive UI elements must not be obstructed by system bars or display cutouts. See [Work with window insets and display cutouts](https://developer.android.com/training/cars/parked/automotive- - Network accessline 472
In activities implemented by the app, interactive UI elements must not be obstructed by system bars or display cutouts. See [Work with window insets and display cutouts](https://developer.android.com/training/cars/parked/automotive- - Network accessline 473
be obstructed by system bars or display cutouts. See [Work with window insets and display cutouts](https://developer.android.com/training/cars/parked/automotive-os#insets-and-cutouts). - New criterion: - Network accessline 473
be obstructed by system bars or display cutouts. See [Work with window insets and display cutouts](https://developer.android.com/training/cars/parked/automotive-os#insets-and-cutouts). - New criterion: - Network accessline 474
insets and display cutouts](https://developer.android.com/training/cars/parked/automotive-os#insets-and-cutouts). - Network accessline 474
insets and display cutouts](https://developer.android.com/training/cars/parked/automotive-os#insets-and-cutouts). - Network accessline 476
[`AR-2`](https://developer.android.com/docs/quality-guidelines/car-app-quality#AR-2) - Network accessline 476
[`AR-2`](https://developer.android.com/docs/quality-guidelines/car-app-quality#AR-2) - Network accessline 479
space available while ensuring interactive UI elements remain accessible. See [Adapt to irregularly shaped displays](https://developer.android.com/training/cars/parked/automotive-os#irregular-displays) for - Network accessline 479
space available while ensuring interactive UI elements remain accessible. See [Adapt to irregularly shaped displays](https://developer.android.com/training/cars/parked/automotive-os#irregular-displays) for - Network accessline 480
accessible. See [Adapt to irregularly shaped displays](https://developer.android.com/training/cars/parked/automotive-os#irregular-displays) for more details. - Network accessline 480
accessible. See [Adapt to irregularly shaped displays](https://developer.android.com/training/cars/parked/automotive-os#irregular-displays) for more details. - Network accessline 481
[Adapt to irregularly shaped displays](https://developer.android.com/training/cars/parked/automotive-os#irregular-displays) for - Network accessline 481
[Adapt to irregularly shaped displays](https://developer.android.com/training/cars/parked/automotive-os#irregular-displays) for - Network accessline 485
- Categories affected: Video - New criterion: [`MC-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#MC-1) - Network accessline 485
- Categories affected: Video - New criterion: [`MC-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#MC-1) - Network accessline 487
[`MC-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#MC-1) - Network accessline 487
[`MC-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#MC-1) - Network accessline 491
Additionally, the app must provide title and thumbnail metadata for every media item. See [Control and advertise playback using a MediaSession](https://developer.android.com/media/media3/session/control-playback). - Network accessline 491
Additionally, the app must provide title and thumbnail metadata for every media item. See [Control and advertise playback using a MediaSession](https://developer.android.com/media/media3/session/control-playback). - Network accessline 492
every media item. See [Control and advertise playback using a MediaSession](https://developer.android.com/media/media3/session/control-playback). - UX - Network accessline 492
every media item. See [Control and advertise playback using a MediaSession](https://developer.android.com/media/media3/session/control-playback). - UX - Network accessline 493
MediaSession](https://developer.android.com/media/media3/session/control-playback). - Network accessline 493
MediaSession](https://developer.android.com/media/media3/session/control-playback). - Network accessline 496
- Categories affected: Browsers, Games, Video - New criterion: [`UX-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#UX-1) - Network accessline 496
- Categories affected: Browsers, Games, Video - New criterion: [`UX-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#UX-1) - Network accessline 498
[`UX-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#UX-1) - Network accessline 498
[`UX-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#UX-1) - Network accessline 500
Touch targets are at least 64dp. - New criterion: [`UX-2`](https://developer.android.com/docs/quality-guidelines/car-app-quality#UX-2) - Network accessline 500
Touch targets are at least 64dp. - New criterion: [`UX-2`](https://developer.android.com/docs/quality-guidelines/car-app-quality#UX-2) - Network accessline 502
[`UX-2`](https://developer.android.com/docs/quality-guidelines/car-app-quality#UX-2) - Network accessline 502
[`UX-2`](https://developer.android.com/docs/quality-guidelines/car-app-quality#UX-2) - Network accessline 505
screen edges. - New criterion: [`UX-3`](https://developer.android.com/docs/quality-guidelines/car-app-quality#UX-3) - Network accessline 505
screen edges. - New criterion: [`UX-3`](https://developer.android.com/docs/quality-guidelines/car-app-quality#UX-3) - Network accessline 507
[`UX-3`](https://developer.android.com/docs/quality-guidelines/car-app-quality#UX-3) - Network accessline 507
[`UX-3`](https://developer.android.com/docs/quality-guidelines/car-app-quality#UX-3) - Network accessline 512
- Categories affected: Media, Navigation, POI, IOT - New criterion: [`PE-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#PE-1) - Network accessline 512
- Categories affected: Media, Navigation, POI, IOT - New criterion: [`PE-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#PE-1) - Network accessline 514
[`PE-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#PE-1) - Network accessline 514
[`PE-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#PE-1) - Network accessline 521
- Categories affected: Navigation - New criterion: [`NF-9`](https://developer.android.com/docs/quality-guidelines/car-app-quality#NF-9) - Network accessline 521
- Categories affected: Navigation - New criterion: [`NF-9`](https://developer.android.com/docs/quality-guidelines/car-app-quality#NF-9) - Network accessline 523
[`NF-9`](https://developer.android.com/docs/quality-guidelines/car-app-quality#NF-9) - Network accessline 523
[`NF-9`](https://developer.android.com/docs/quality-guidelines/car-app-quality#NF-9) - Network accessline 525
The app supports rendering on cluster displays, and only renders map tiles on these displays. See [Drawing to the cluster display](https://developer.android.com/training/cars/apps/navigation#drawing-cluster-display). - Network accessline 525
The app supports rendering on cluster displays, and only renders map tiles on these displays. See [Drawing to the cluster display](https://developer.android.com/training/cars/apps/navigation#drawing-cluster-display). - Network accessline 526
tiles on these displays. See [Drawing to the cluster display](https://developer.android.com/training/cars/apps/navigation#drawing-cluster-display). - Delayed Response - Network accessline 526
tiles on these displays. See [Drawing to the cluster display](https://developer.android.com/training/cars/apps/navigation#drawing-cluster-display). - Delayed Response - Network accessline 527
[Drawing to the cluster display](https://developer.android.com/training/cars/apps/navigation#drawing-cluster-display). - Network accessline 527
[Drawing to the cluster display](https://developer.android.com/training/cars/apps/navigation#drawing-cluster-display). - Network accessline 530
- Categories affected: Video - Removal of criteria [`DR-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#DR-1) , [`DR-2`](https://developer.android.com/docs/quality-guidelines/car-app-quality#DR-2) , and [`DR-3`]( - Network accessline 530
- Categories affected: Video - Removal of criteria [`DR-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#DR-1) , [`DR-2`](https://developer.android.com/docs/quality-guidelines/car-app-quality#DR-2) , and [`DR-3`]( - Network accessline 531
- Removal of criteria [`DR-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#DR-1) , [`DR-2`](https://developer.android.com/docs/quality-guidelines/car-app-quality#DR-2) , and [`DR-3`](https://developer.android.com/d - Network accessline 531
- Removal of criteria [`DR-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#DR-1) , [`DR-2`](https://developer.android.com/docs/quality-guidelines/car-app-quality#DR-2) , and [`DR-3`](https://developer.android.com/d - Network accessline 535
- [App Categories](https://developer.android.com/docs/quality-guidelines/car-app-quality#app-categories): "Browsers" has been added - Network accessline 535
- [App Categories](https://developer.android.com/docs/quality-guidelines/car-app-quality#app-categories): "Browsers" has been added - Network accessline 538
- Categories affected: Browsers - New criterion: [`SD-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#SD-1) - Network accessline 538
- Categories affected: Browsers - New criterion: [`SD-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#SD-1) - Network accessline 540
[`SD-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#SD-1) - Network accessline 540
[`SD-1`](https://developer.android.com/docs/quality-guidelines/car-app-quality#SD-1) - Network accessline 542
Browsers must not save or allow access to passwords or payment information unless the user can block access to passwords using a profile lock. [Learn how](https://developer.android.com/training/cars/parked/browser#block-sensitive). - Network accessline 542
Browsers must not save or allow access to passwords or payment information unless the user can block access to passwords using a profile lock. [Learn how](https://developer.android.com/training/cars/parked/browser#block-sensitive). - Network accessline 543
information unless the user can block access to passwords using a profile lock. [Learn how](https://developer.android.com/training/cars/parked/browser#block-sensitive). - New criterion: - Network accessline 543
information unless the user can block access to passwords using a profile lock. [Learn how](https://developer.android.com/training/cars/parked/browser#block-sensitive). - New criterion: - Network accessline 544
profile lock. [Learn how](https://developer.android.com/training/cars/parked/browser#block-sensitive). - Network accessline 544
profile lock. [Learn how](https://developer.android.com/training/cars/parked/browser#block-sensitive). - Network accessline 546
[`SD-2`](https://developer.android.com/docs/quality-guidelines/car-app-quality#SD-2) - Network accessline 546
[`SD-2`](https://developer.android.com/docs/quality-guidelines/car-app-quality#SD-2) - Network accessline 555
- [App Categories](https://developer.android.com/docs/quality-guidelines/car-app-quality#app-categories): "Games" has been added - Network accessline 555
- [App Categories](https://developer.android.com/docs/quality-guidelines/car-app-quality#app-categories): "Games" has been added - Network accessline 558
- Categories affected: Games, Video - New criterion: [`IN-2`](https://developer.android.com/docs/quality-guidelines/car-app-quality#IN-2) - Network accessline 558
- Categories affected: Games, Video - New criterion: [`IN-2`](https://developer.android.com/docs/quality-guidelines/car-app-quality#IN-2) - Network accessline 560
[`IN-2`](https://developer.android.com/docs/quality-guidelines/car-app-quality#IN-2) - Network accessline 560
[`IN-2`](https://developer.android.com/docs/quality-guidelines/car-app-quality#IN-2) - Network accessline 600
- [App Categories](https://developer.android.com/docs/quality-guidelines/car-app-quality#app-categories): "Parking \& Charging" has been replaced with "Point of Interest" - Network accessline 600
- [App Categories](https://developer.android.com/docs/quality-guidelines/car-app-quality#app-categories): "Parking \& Charging" has been replaced with "Point of Interest" - Network accessline 636
The app does not include games or other features outside the app types intended for cars. For more information, see [Supported app categories](https://developer.android.com/training/cars#supported-app-categories). - Network accessline 636
The app does not include games or other features outside the app types intended for cars. For more information, see [Supported app categories](https://developer.android.com/training/cars#supported-app-categories). - Network accessline 637
intended for cars. For more information, see [Supported app categories](https://developer.android.com/training/cars#supported-app-categories). - New text: - Network accessline 637
intended for cars. For more information, see [Supported app categories](https://developer.android.com/training/cars#supported-app-categories). - New text: - Network accessline 638
categories](https://developer.android.com/training/cars#supported-app-categories). - Network accessline 638
categories](https://developer.android.com/training/cars#supported-app-categories). - Network accessline 641
The app does not include features outside the app types intended for cars. For more information, see [Supported app categories](https://developer.android.com/training/cars#supported-app-categories). - Network accessline 641
The app does not include features outside the app types intended for cars. For more information, see [Supported app categories](https://developer.android.com/training/cars#supported-app-categories). - Network accessline 642
cars. For more information, see [Supported app categories](https://developer.android.com/training/cars#supported-app-categories). - Visual Information on Phone - Network accessline 642
cars. For more information, see [Supported app categories](https://developer.android.com/training/cars#supported-app-categories). - Visual Information on Phone - Network accessline 643
[Supported app categories](https://developer.android.com/training/cars#supported-app-categories). - Network accessline 643
[Supported app categories](https://developer.android.com/training/cars#supported-app-categories). - Network accessline 651
message instructing the user to only look at their phone screen when it's safe to do so. For more information, see [Handle general errors](https://developer.android.com/training/cars/media#errors) for media, and [Handle - Network accessline 651
message instructing the user to only look at their phone screen when it's safe to do so. For more information, see [Handle general errors](https://developer.android.com/training/cars/media#errors) for media, and [Handle - Network accessline 652
it's safe to do so. For more information, see [Handle general errors](https://developer.android.com/training/cars/media#errors) for media, and [Handle user input](https://developer.android.com/training/cars/apps#handle-user-input) f - Network accessline 652
it's safe to do so. For more information, see [Handle general errors](https://developer.android.com/training/cars/media#errors) for media, and [Handle user input](https://developer.android.com/training/cars/apps#handle-user-input) f - Network accessline 653
[Handle general errors](https://developer.android.com/training/cars/media#errors) for media, and [Handle - Network accessline 653
[Handle general errors](https://developer.android.com/training/cars/media#errors) for media, and [Handle - Network accessline 654
user input](https://developer.android.com/training/cars/apps#handle-user-input) for navigation, parking, and - Network accessline 654
user input](https://developer.android.com/training/cars/apps#handle-user-input) for navigation, parking, and - Network accessline 660
message instructing the user to only look at their phone screen when it's safe to do so. For more information, see [Handle general errors](https://developer.android.com/training/cars/media#errors) for media, and [Handle - Network accessline 660
message instructing the user to only look at their phone screen when it's safe to do so. For more information, see [Handle general errors](https://developer.android.com/training/cars/media#errors) for media, and [Handle - Network accessline 661
it's safe to do so. For more information, see [Handle general errors](https://developer.android.com/training/cars/media#errors) for media, and [Handle user input](https://developer.android.com/training/cars/apps#handle-user-input) f - Network accessline 661
it's safe to do so. For more information, see [Handle general errors](https://developer.android.com/training/cars/media#errors) for media, and [Handle user input](https://developer.android.com/training/cars/apps#handle-user-input) f - Network accessline 662
[Handle general errors](https://developer.android.com/training/cars/media#errors) for media, and [Handle - Network accessline 662
[Handle general errors](https://developer.android.com/training/cars/media#errors) for media, and [Handle - Network accessline 663
user input](https://developer.android.com/training/cars/apps#handle-user-input) for navigation and point of - Network accessline 663
user input](https://developer.android.com/training/cars/apps#handle-user-input) for navigation and point of - Network accessline 753
of visual information such as notifications, toasts, video, images, advertising, or similar. For more information, see [Build a navigation app](https://developer.android.com/training/cars/apps/navigation#handle-user-input) for navig - Network accessline 753
of visual information such as notifications, toasts, video, images, advertising, or similar. For more information, see [Build a navigation app](https://developer.android.com/training/cars/apps/navigation#handle-user-input) for navig - Network accessline 754
advertising, or similar. For more information, see [Build a navigation app](https://developer.android.com/training/cars/apps/navigation#handle-user-input) for navigation, parking, and charging. Similarly, while the app is running An - Network accessline 754
advertising, or similar. For more information, see [Build a navigation app](https://developer.android.com/training/cars/apps/navigation#handle-user-input) for navigation, parking, and charging. Similarly, while the app is running An - Network accessline 755
app](https://developer.android.com/training/cars/apps/navigation#handle-user-input) for navigation, parking, and charging. - Network accessline 755
app](https://developer.android.com/training/cars/apps/navigation#handle-user-input) for navigation, parking, and charging. - Network accessline 767
message instructing the user to only look at their phone screen when it's safe to do so. For more information, see [Handle general errors](https://developer.android.com/training/cars/media#errors) for media, and [Handle - Network accessline 767
message instructing the user to only look at their phone screen when it's safe to do so. For more information, see [Handle general errors](https://developer.android.com/training/cars/media#errors) for media, and [Handle - Network accessline 768
it's safe to do so. For more information, see [Handle general errors](https://developer.android.com/training/cars/media#errors) for media, and [Handle user input](https://developer.android.com/training/cars/apps#handle-user-input) f - Network accessline 768
it's safe to do so. For more information, see [Handle general errors](https://developer.android.com/training/cars/media#errors) for media, and [Handle user input](https://developer.android.com/training/cars/apps#handle-user-input) f - Network accessline 769
[Handle general errors](https://developer.android.com/training/cars/media#errors) for media, and [Handle - Network accessline 769
[Handle general errors](https://developer.android.com/training/cars/media#errors) for media, and [Handle - Network accessline 770
user input](https://developer.android.com/training/cars/apps#handle-user-input) for navigation, parking, and - Network accessline 770
user input](https://developer.android.com/training/cars/apps#handle-user-input) for navigation, parking, and - Network accessline 780
The app must have simple flows if purchases are enabled, using shortcuts such as recent or favorite purchases. For more information, see [Purchase using existing payment method](https://developers.google.com/cars/design/create-apps/ - Network accessline 780
The app must have simple flows if purchases are enabled, using shortcuts such as recent or favorite purchases. For more information, see [Purchase using existing payment method](https://developers.google.com/cars/design/create-apps/ - Network accessline 782
[Purchase using existing payment method](https://developers.google.com/cars/design/create-apps/sample-flows/purchase-with-existing-method). - Network accessline 782
[Purchase using existing payment method](https://developers.google.com/cars/design/create-apps/sample-flows/purchase-with-existing-method).
device-ai/appfunctions/references/implementation-configuration.md
device-ai/appfunctions/references/migrate-to-service-entry-point.md
- Network accessline 63
> [!NOTE] > **Note:** If another dependency in your project uses snapshot builds like `1.0.0-SNAPSHOT` or custom snapshot repositories from `https://androidx.dev/snapshots/...`, preserve your custom snapshot repository configuration in `set - Network accessline 63
> [!NOTE] > **Note:** If another dependency in your project uses snapshot builds like `1.0.0-SNAPSHOT` or custom snapshot repositories from `https://androidx.dev/snapshots/...`, preserve your custom snapshot repository configuration in `set - Network accessline 64
> **Note:** If another dependency in your project uses snapshot builds like `1.0.0-SNAPSHOT` or custom snapshot repositories from `https://androidx.dev/snapshots/...`, preserve your custom snapshot repository configuration in `settings.grad - Network accessline 64
> **Note:** If another dependency in your project uses snapshot builds like `1.0.0-SNAPSHOT` or custom snapshot repositories from `https://androidx.dev/snapshots/...`, preserve your custom snapshot repository configuration in `settings.grad
device-ai/litert/litert-lm/SKILL.md
- Network accessline 32
When a LiteRT-LM class or method that this skill uses doesn't compile, you must read the [LiteRT-LM Android guide](https://ai.google.dev/edge/litert-lm/android) and the [LiteRT-LM README](https://github.com/google-ai-edge/LiteRT-LM/blob/mai - Network accessline 32
When a LiteRT-LM class or method that this skill uses doesn't compile, you must read the [LiteRT-LM Android guide](https://ai.google.dev/edge/litert-lm/android) and the [LiteRT-LM README](https://github.com/google-ai-edge/LiteRT-LM/blob/mai - Network accessline 33
read the [LiteRT-LM Android guide](https://ai.google.dev/edge/litert-lm/android) and the [LiteRT-LM README](https://github.com/google-ai-edge/LiteRT-LM/blob/main/README.md) before - Network accessline 33
read the [LiteRT-LM Android guide](https://ai.google.dev/edge/litert-lm/android) and the [LiteRT-LM README](https://github.com/google-ai-edge/LiteRT-LM/blob/main/README.md) before - Network accessline 104
Choose a `.litertlm` file from [litert-community](https://huggingface.co/litert-community) on Hugging Face. Start with - Network accessline 104
Choose a `.litertlm` file from [litert-community](https://huggingface.co/litert-community) on Hugging Face. Start with - Network accessline 344
- When the app uses Path C in Step 3, create the AI pack module that holds the `.litertlm` file and upload the app to Play Console. - When no `.litertlm` file exists for the model, convert the model on a workstation. This skill doesn't conv - Network accessline 344
- When the app uses Path C in Step 3, create the AI pack module that holds the `.litertlm` file and upload the app to Play Console. - When no `.litertlm` file exists for the model, convert the model on a workstation. This skill doesn't conv - Network accessline 346
- When the user asks for a complete reference app, point them to [Google AI Edge Gallery](https://github.com/google-ai-edge/gallery/blob/main/README.md). - Network accessline 346
- When the user asks for a complete reference app, point them to [Google AI Edge Gallery](https://github.com/google-ai-edge/gallery/blob/main/README.md).
device-ai/litert/litert-lm/references/android/google/play/on-device-ai.md
- Network accessline 3
Play for On-device AI brings the benefits of [Android App Bundles](https://developer.android.com/guide/app-bundle) and Google Play delivery to custom ML - Network accessline 3
Play for On-device AI brings the benefits of [Android App Bundles](https://developer.android.com/guide/app-bundle) and Google Play delivery to custom ML - Network accessline 4
[Android App Bundles](https://developer.android.com/guide/app-bundle) and Google Play delivery to custom ML - Network accessline 4
[Android App Bundles](https://developer.android.com/guide/app-bundle) and Google Play delivery to custom ML - Network accessline 22
- By using Play for On-device AI you agree to the terms in the [Google Play Developer Distribution Agreement](https://play.google.com/about/developer-distribution-agreement.html) and the [Play Core Software Development Kit Terms of Service] - Network accessline 22
- By using Play for On-device AI you agree to the terms in the [Google Play Developer Distribution Agreement](https://play.google.com/about/developer-distribution-agreement.html) and the [Play Core Software Development Kit Terms of Service] - Network accessline 42
AI packs only contain models. Java/Kotlin and native libraries are not allowed. If you need to ship libraries or code to run your ML model, move it into the base module or a [feature module](https://developer.android.com/guide/playcore/feat - Network accessline 42
AI packs only contain models. Java/Kotlin and native libraries are not allowed. If you need to ship libraries or code to run your ML model, move it into the base module or a [feature module](https://developer.android.com/guide/playcore/feat - Network accessline 43
If you need to ship libraries or code to run your ML model, move it into the base module or a [feature module](https://developer.android.com/guide/playcore/feature-delivery). You can configure your feature module so that it has the same dow - Network accessline 43
If you need to ship libraries or code to run your ML model, move it into the base module or a [feature module](https://developer.android.com/guide/playcore/feature-delivery). You can configure your feature module so that it has the same dow - Network accessline 44
base module or a [feature module](https://developer.android.com/guide/playcore/feature-delivery). You can configure your feature module so that it has the same download and targeting settings as the AI pack. - Network accessline 44
base module or a [feature module](https://developer.android.com/guide/playcore/feature-delivery). You can configure your feature module so that it has the same download and targeting settings as the AI pack. - Network accessline 48
> [!NOTE] > **Note:** AI packs don't contain Java/Kotlin or native libraries. You can ship libraries or code to run your ML models in [feature modules](https://developer.android.com/guide/playcore/feature-delivery). - Network accessline 48
> [!NOTE] > **Note:** AI packs don't contain Java/Kotlin or native libraries. You can ship libraries or code to run your ML models in [feature modules](https://developer.android.com/guide/playcore/feature-delivery). - Network accessline 49
> **Note:** AI packs don't contain Java/Kotlin or native libraries. You can ship libraries or code to run your ML models in [feature modules](https://developer.android.com/guide/playcore/feature-delivery). - Network accessline 49
> **Note:** AI packs don't contain Java/Kotlin or native libraries. You can ship libraries or code to run your ML models in [feature modules](https://developer.android.com/guide/playcore/feature-delivery). - Network accessline 53
You can use LiteRT and MediaPipe with AI packs. Package your model in an AI pack and then access it using the instructions for [install-time packs](https://developer.android.com/google/play/on-device-ai#install-time-delivery) or for - Network accessline 53
You can use LiteRT and MediaPipe with AI packs. Package your model in an AI pack and then access it using the instructions for [install-time packs](https://developer.android.com/google/play/on-device-ai#install-time-delivery) or for - Network accessline 54
and then access it using the instructions for [install-time packs](https://developer.android.com/google/play/on-device-ai#install-time-delivery) or for [fast-follow and on-demand packs](https://developer.android.com/google/play/on-device-ai - Network accessline 54
and then access it using the instructions for [install-time packs](https://developer.android.com/google/play/on-device-ai#install-time-delivery) or for [fast-follow and on-demand packs](https://developer.android.com/google/play/on-device-ai - Network accessline 55
[install-time packs](https://developer.android.com/google/play/on-device-ai#install-time-delivery) or for - Network accessline 55
[install-time packs](https://developer.android.com/google/play/on-device-ai#install-time-delivery) or for - Network accessline 56
[fast-follow and on-demand packs](https://developer.android.com/google/play/on-device-ai#ff-od-delivery). - Network accessline 56
[fast-follow and on-demand packs](https://developer.android.com/google/play/on-device-ai#ff-od-delivery). - Network accessline 60
- [Getting started with LiteRT](https://ai.google.dev/edge/litert/android) - Network accessline 60
- [Getting started with LiteRT](https://ai.google.dev/edge/litert/android) - Network accessline 61
- The [sample app](https://developer.android.com/google/play/on-device-ai#example-app) shows how you can package a LiteRT model in an AI pack and load it at runtime. - Network accessline 61
- The [sample app](https://developer.android.com/google/play/on-device-ai#example-app) shows how you can package a LiteRT model in an AI pack and load it at runtime. - Network accessline 62
- There are many [pretrained LiteRT models](https://ai.google.dev/edge/litert/models/trained) that you can use in AI packs to get started. - Network accessline 62
- There are many [pretrained LiteRT models](https://ai.google.dev/edge/litert/models/trained) that you can use in AI packs to get started. - Network accessline 63
- [Getting started with MediaPipe](https://ai.google.dev/edge/mediapipe/framework/getting_started/android) - Network accessline 63
- [Getting started with MediaPipe](https://ai.google.dev/edge/mediapipe/framework/getting_started/android) - Network accessline 64
- For fast-follow and on-demand packs, you can use [AssetCache.java](https://github.com/google-ai-edge/mediapipe/blob/master/mediapipe/java/com/google/mediapipe/framework/AssetCache.java) to load your assets (eg. `.binarypb` files) by their - Network accessline 64
- For fast-follow and on-demand packs, you can use [AssetCache.java](https://github.com/google-ai-edge/mediapipe/blob/master/mediapipe/java/com/google/mediapipe/framework/AssetCache.java) to load your assets (eg. `.binarypb` files) by their - Network accessline 65
- For install-time packs, you can use [AndroidAssetUtil.java](https://github.com/google-ai-edge/mediapipe/blob/master/mediapipe/java/com/google/mediapipe/framework/AndroidAssetUtil.java#L56). - Network accessline 65
- For install-time packs, you can use [AndroidAssetUtil.java](https://github.com/google-ai-edge/mediapipe/blob/master/mediapipe/java/com/google/mediapipe/framework/AndroidAssetUtil.java#L56). - Network accessline 71
1. Package your models into AI packs into your Android App Bundle and specify how the AI packs should be delivered. 2. \[Optional\] If you want to deliver different models to different devices, you can [configure device targeting](https://d - Network accessline 71
1. Package your models into AI packs into your Android App Bundle and specify how the AI packs should be delivered. 2. \[Optional\] If you want to deliver different models to different devices, you can [configure device targeting](https://d - Network accessline 72
2. \[Optional\] If you want to deliver different models to different devices, you can [configure device targeting](https://developer.android.com/google/play/on-device-ai#device-targeting-configuration) for your AI packs. For example, you co - Network accessline 72
2. \[Optional\] If you want to deliver different models to different devices, you can [configure device targeting](https://developer.android.com/google/play/on-device-ai#device-targeting-configuration) for your AI packs. For example, you co - Network accessline 130
7. Add code to load and run your models. How you do this will depend on the delivery mode of your AI packs. See instructions for [install-time](https://developer.android.com/google/play/on-device-ai#install-time-delivery) and - Network accessline 130
7. Add code to load and run your models. How you do this will depend on the delivery mode of your AI packs. See instructions for [install-time](https://developer.android.com/google/play/on-device-ai#install-time-delivery) and - Network accessline 131
delivery mode of your AI packs. See instructions for [install-time](https://developer.android.com/google/play/on-device-ai#install-time-delivery) and [fast-follow/on-demand](https://developer.android.com/google/play/on-device-ai#ff-od - Network accessline 131
delivery mode of your AI packs. See instructions for [install-time](https://developer.android.com/google/play/on-device-ai#install-time-delivery) and [fast-follow/on-demand](https://developer.android.com/google/play/on-device-ai#ff-od - Network accessline 132
[install-time](https://developer.android.com/google/play/on-device-ai#install-time-delivery) and - Network accessline 132
[install-time](https://developer.android.com/google/play/on-device-ai#install-time-delivery) and - Network accessline 133
[fast-follow/on-demand](https://developer.android.com/google/play/on-device-ai#ff-od-delivery) below. - Network accessline 133
[fast-follow/on-demand](https://developer.android.com/google/play/on-device-ai#ff-od-delivery) below. - Network accessline 135
8. \[Optional\] [Configure device targeting](https://developer.android.com/google/play/on-device-ai#device-targeting-configuration) - Network accessline 135
8. \[Optional\] [Configure device targeting](https://developer.android.com/google/play/on-device-ai#device-targeting-configuration) - Network accessline 138
9. [Build the Android App Bundle with Gradle](https://developer.android.com/studio/build/building-cmdline#build_bundle). - Network accessline 138
9. [Build the Android App Bundle with Gradle](https://developer.android.com/studio/build/building-cmdline#build_bundle). - Network accessline 178
Each AI pack is stored in a separate folder in the app's internal storage. Use the [`getPackLocation()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#getPackLocation(java.lang.String)) - Network accessline 178
Each AI pack is stored in a separate folder in the app's internal storage. Use the [`getPackLocation()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#getPackLocation(java.lang.String)) - Network accessline 179
the [`getPackLocation()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#getPackLocation(java.lang.String)) method to determine the root folder of an AI pack. This method returns the - Network accessline 179
the [`getPackLocation()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#getPackLocation(java.lang.String)) method to determine the root folder of an AI pack. This method returns the - Network accessline 180
[`getPackLocation()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#getPackLocation(java.lang.String)) - Network accessline 180
[`getPackLocation()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#getPackLocation(java.lang.String)) - Network accessline 184
| Return value | Status | |---|---| | A valid [`AiPackLocation`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackLocation) object | AI pack root folder is ready for immediate access at [`assetsPath()`](htt - Network accessline 184
| Return value | Status | |---|---| | A valid [`AiPackLocation`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackLocation) object | AI pack root folder is ready for immediate access at [`assetsPath()`](htt - Network accessline 185
|---|---| | A valid [`AiPackLocation`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackLocation) object | AI pack root folder is ready for immediate access at [`assetsPath()`](https://developer.android.com - Network accessline 185
|---|---| | A valid [`AiPackLocation`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackLocation) object | AI pack root folder is ready for immediate access at [`assetsPath()`](https://developer.android.com - Network accessline 186
| A valid [`AiPackLocation`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackLocation) object | AI pack root folder is ready for immediate access at [`assetsPath()`](https://developer.android.com/reference - Network accessline 186
| A valid [`AiPackLocation`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackLocation) object | AI pack root folder is ready for immediate access at [`assetsPath()`](https://developer.android.com/reference - Network accessline 196
[`getPackStates()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#getPackStates(java.util.List%3Cjava.lang.String%3E)) method to determine the size of the download and whether the pack is already - Network accessline 196
[`getPackStates()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#getPackStates(java.util.List%3Cjava.lang.String%3E)) method to determine the size of the download and whether the pack is already - Network accessline 204
`getPackStates()` is an asynchronous method that returns a `Task<AiPackStates>`. The [`packStates()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackStates#packStates()) - Network accessline 204
`getPackStates()` is an asynchronous method that returns a `Task<AiPackStates>`. The [`packStates()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackStates#packStates()) - Network accessline 205
The [`packStates()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackStates#packStates()) method of an `AiPackStates` object returns a `Map<String, AiPackState>`. This - Network accessline 205
The [`packStates()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackStates#packStates()) method of an `AiPackStates` object returns a `Map<String, AiPackState>`. This - Network accessline 206
[`packStates()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackStates#packStates()) - Network accessline 206
[`packStates()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackStates#packStates()) - Network accessline 235
The following [`AiPackState`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackState) - Network accessline 235
The following [`AiPackState`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackState) - Network accessline 236
[`AiPackState`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackState) - Network accessline 236
[`AiPackState`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackState) - Network accessline 240
- [`totalBytesToDownload()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackState#totalBytesToDownload()) - Network accessline 240
- [`totalBytesToDownload()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackState#totalBytesToDownload()) - Network accessline 241
- [`bytesDownloaded()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackState#bytesDownloaded()) - Network accessline 241
- [`bytesDownloaded()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackState#bytesDownloaded()) - Network accessline 242
- [`transferProgressPercentage()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackState#transferProgressPercentage()) - Network accessline 242
- [`transferProgressPercentage()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackState#transferProgressPercentage()) - Network accessline 244
To get the status of an AI pack, use the [`status()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackState#status()) - Network accessline 244
To get the status of an AI pack, use the [`status()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackState#status()) - Network accessline 245
[`status()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackState#status()) - Network accessline 245
[`status()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackState#status()) - Network accessline 246
method, which returns the status as an integer that corresponds to a constant field in the [`AiPackStatus`](https://developer.android.com/reference/com/google/android/play/core/aipacks/model/AiPackStatus) - Network accessline 246
method, which returns the status as an integer that corresponds to a constant field in the [`AiPackStatus`](https://developer.android.com/reference/com/google/android/play/core/aipacks/model/AiPackStatus) - Network accessline 247
field in the [`AiPackStatus`](https://developer.android.com/reference/com/google/android/play/core/aipacks/model/AiPackStatus) class. An AI pack that's not installed yet has the status - Network accessline 247
field in the [`AiPackStatus`](https://developer.android.com/reference/com/google/android/play/core/aipacks/model/AiPackStatus) class. An AI pack that's not installed yet has the status - Network accessline 248
[`AiPackStatus`](https://developer.android.com/reference/com/google/android/play/core/aipacks/model/AiPackStatus) - Network accessline 248
[`AiPackStatus`](https://developer.android.com/reference/com/google/android/play/core/aipacks/model/AiPackStatus) - Network accessline 252
If a request fails, use the [`errorCode()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackState#errorCode()) - Network accessline 252
If a request fails, use the [`errorCode()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackState#errorCode()) - Network accessline 253
[`errorCode()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackState#errorCode()) - Network accessline 253
[`errorCode()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackState#errorCode()) - Network accessline 254
method, whose return value corresponds to a constant field in the [`AiPackErrorCode`](https://developer.android.com/reference/com/google/android/play/core/aipacks/model/AiPackErrorCode) class. - Network accessline 254
method, whose return value corresponds to a constant field in the [`AiPackErrorCode`](https://developer.android.com/reference/com/google/android/play/core/aipacks/model/AiPackErrorCode) class. - Network accessline 255
[`AiPackErrorCode`](https://developer.android.com/reference/com/google/android/play/core/aipacks/model/AiPackErrorCode) - Network accessline 255
[`AiPackErrorCode`](https://developer.android.com/reference/com/google/android/play/core/aipacks/model/AiPackErrorCode) - Network accessline 260
Use the [`fetch()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#fetch(java.util.List%3Cjava.lang.String%3E)) - Network accessline 260
Use the [`fetch()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#fetch(java.util.List%3Cjava.lang.String%3E)) - Network accessline 261
[`fetch()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#fetch(java.util.List%3Cjava.lang.String%3E)) - Network accessline 261
[`fetch()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#fetch(java.util.List%3Cjava.lang.String%3E)) - Network accessline 266
Task<AiPackStates> fetch(List<String> packNames) - Network accessline 266
Task<AiPackStates> fetch(List<String> packNames) - Network accessline 269
This method returns an [`AiPackStates`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackStates) object containing a list of packs and their initial download states and sizes. - Network accessline 269
This method returns an [`AiPackStates`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackStates) object containing a list of packs and their initial download states and sizes. - Network accessline 270
[`AiPackStates`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackStates) object containing a list of packs and their initial download states and sizes. If an AI pack requested via `fetch()` is already down - Network accessline 270
[`AiPackStates`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackStates) object containing a list of packs and their initial download states and sizes. If an AI pack requested via `fetch()` is already down - Network accessline 271
object containing a list of packs and their initial download states and sizes. If an AI pack requested via `fetch()` is already downloading, the download status is returned and no additional download is started. - Network accessline 271
object containing a list of packs and their initial download states and sizes. If an AI pack requested via `fetch()` is already downloading, the download status is returned and no additional download is started. - Network accessline 272
If an AI pack requested via `fetch()` is already downloading, the download - Network accessline 272
If an AI pack requested via `fetch()` is already downloading, the download - Network accessline 280
You should implement an [`AiPackStateUpdateListener`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackStateUpdateListener) - Network accessline 280
You should implement an [`AiPackStateUpdateListener`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackStateUpdateListener) - Network accessline 281
[`AiPackStateUpdateListener`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackStateUpdateListener) - Network accessline 281
[`AiPackStateUpdateListener`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackStateUpdateListener) - Network accessline 292
> [!NOTE] > **Note:** The Play Store automatically triggers the download of any `fast-follow` packs after the user installs or updates the app. However, these packs may not be ready to use immediately. You must check the status of the `fast - Network accessline 292
> [!NOTE] > **Note:** The Play Store automatically triggers the download of any `fast-follow` packs after the user installs or updates the app. However, these packs may not be ready to use immediately. You must check the status of the `fast - Network accessline 293
> **Note:** The Play Store automatically triggers the download of any `fast-follow` packs after the user installs or updates the app. However, these packs may not be ready to use immediately. You must check the status of the `fast-follow` p - Network accessline 293
> **Note:** The Play Store automatically triggers the download of any `fast-follow` packs after the user installs or updates the app. However, these packs may not be ready to use immediately. You must check the status of the `fast-follow` p - Network accessline 302
`WAITING_FOR_WIFI`. To trigger the UI flow to prompt the user for consent, use the [`showConfirmationDialog()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#showConfirmationDialog(androidx.activ - Network accessline 302
`WAITING_FOR_WIFI`. To trigger the UI flow to prompt the user for consent, use the [`showConfirmationDialog()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#showConfirmationDialog(androidx.activ - Network accessline 303
the [`showConfirmationDialog()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#showConfirmationDialog(androidx.activity.result.ActivityResultLauncher%3Candroidx.activity.result.IntentSenderReques - Network accessline 303
the [`showConfirmationDialog()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#showConfirmationDialog(androidx.activity.result.ActivityResultLauncher%3Candroidx.activity.result.IntentSenderReques - Network accessline 304
[`showConfirmationDialog()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#showConfirmationDialog(androidx.activity.result.ActivityResultLauncher%3Candroidx.activity.result.IntentSenderRequest%3E - Network accessline 304
[`showConfirmationDialog()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#showConfirmationDialog(androidx.activity.result.ActivityResultLauncher%3Candroidx.activity.result.IntentSenderRequest%3E - Network accessline 312
If a pack has the `REQUIRES_USER_CONFIRMATION` status, the download won't proceed until the user accepts the dialog that is shown with [`showConfirmationDialog()`](https://developer.android.com/reference/com/google/android/play/core/aipacks - Network accessline 312
If a pack has the `REQUIRES_USER_CONFIRMATION` status, the download won't proceed until the user accepts the dialog that is shown with [`showConfirmationDialog()`](https://developer.android.com/reference/com/google/android/play/core/aipacks - Network accessline 313
proceed until the user accepts the dialog that is shown with [`showConfirmationDialog()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#showConfirmationDialog(androidx.activity.result.ActivityRes - Network accessline 313
proceed until the user accepts the dialog that is shown with [`showConfirmationDialog()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#showConfirmationDialog(androidx.activity.result.ActivityRes - Network accessline 314
[`showConfirmationDialog()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#showConfirmationDialog(androidx.activity.result.ActivityResultLauncher%3Candroidx.activity.result.IntentSenderRequest%3E - Network accessline 314
[`showConfirmationDialog()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#showConfirmationDialog(androidx.activity.result.ActivityResultLauncher%3Candroidx.activity.result.IntentSenderRequest%3E - Network accessline 315
This status can occur when the app is not recognized by Play---for example, if the app was sideloaded. Note that calling [`showConfirmationDialog()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager - Network accessline 315
This status can occur when the app is not recognized by Play---for example, if the app was sideloaded. Note that calling [`showConfirmationDialog()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager - Network accessline 316
app was sideloaded. Note that calling [`showConfirmationDialog()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#showConfirmationDialog(androidx.activity.result.ActivityResultLauncher%3Candroidx. - Network accessline 316
app was sideloaded. Note that calling [`showConfirmationDialog()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#showConfirmationDialog(androidx.activity.result.ActivityResultLauncher%3Candroidx. - Network accessline 317
[`showConfirmationDialog()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#showConfirmationDialog(androidx.activity.result.ActivityResultLauncher%3Candroidx.activity.result.IntentSenderRequest%3E - Network accessline 317
[`showConfirmationDialog()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#showConfirmationDialog(androidx.activity.result.ActivityResultLauncher%3Candroidx.activity.result.IntentSenderRequest%3E - Network accessline 391
Alternatively, you can use the [`getPackStates()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#getPackStates()) - Network accessline 391
Alternatively, you can use the [`getPackStates()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#getPackStates()) - Network accessline 392
[`getPackStates()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#getPackStates()) - Network accessline 392
[`getPackStates()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#getPackStates()) - Network accessline 393
method to get the status of current downloads. [`AiPackStates`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackStates) contains the download progress, download status, and any failure error codes. - Network accessline 393
method to get the status of current downloads. [`AiPackStates`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackStates) contains the download progress, download status, and any failure error codes. - Network accessline 394
[`AiPackStates`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackStates) - Network accessline 394
[`AiPackStates`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackStates) - Network accessline 399
You can access an AI pack using file system calls after the download request reaches the [`COMPLETED`](https://developer.android.com/reference/com/google/android/play/core/aipacks/model/AiPackStatus#completed()) - Network accessline 399
You can access an AI pack using file system calls after the download request reaches the [`COMPLETED`](https://developer.android.com/reference/com/google/android/play/core/aipacks/model/AiPackStatus#completed()) - Network accessline 400
reaches the [`COMPLETED`](https://developer.android.com/reference/com/google/android/play/core/aipacks/model/AiPackStatus#completed()) state. Use the - Network accessline 400
reaches the [`COMPLETED`](https://developer.android.com/reference/com/google/android/play/core/aipacks/model/AiPackStatus#completed()) state. Use the - Network accessline 401
[`COMPLETED`](https://developer.android.com/reference/com/google/android/play/core/aipacks/model/AiPackStatus#completed()) - Network accessline 401
[`COMPLETED`](https://developer.android.com/reference/com/google/android/play/core/aipacks/model/AiPackStatus#completed()) - Network accessline 402
state. Use the [`getPackLocation()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#getPackLocation(java.lang.String)) method to get the root folder of the AI pack. - Network accessline 402
state. Use the [`getPackLocation()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#getPackLocation(java.lang.String)) method to get the root folder of the AI pack. - Network accessline 403
[`getPackLocation()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#getPackLocation(java.lang.String)) - Network accessline 403
[`getPackLocation()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#getPackLocation(java.lang.String)) - Network accessline 406
AI packs are stored in the `assets` directory within the AI pack root directory. You can get the path to the `assets` directory by using the convenience method [`assetsPath()`](https://developer.android.com/reference/com/google/android/play - Network accessline 406
AI packs are stored in the `assets` directory within the AI pack root directory. You can get the path to the `assets` directory by using the convenience method [`assetsPath()`](https://developer.android.com/reference/com/google/android/play - Network accessline 407
You can get the path to the `assets` directory by using the convenience method [`assetsPath()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackLocation#assetsPath()). Use the following method to get the p - Network accessline 407
You can get the path to the `assets` directory by using the convenience method [`assetsPath()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackLocation#assetsPath()). Use the following method to get the p - Network accessline 408
[`assetsPath()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackLocation#assetsPath()). - Network accessline 408
[`assetsPath()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackLocation#assetsPath()). - Network accessline 429
You can follow the [device targeting instructions](https://developer.android.com/google/play/on-device-ai#device-targeting-configuration) to specify - Network accessline 429
You can follow the [device targeting instructions](https://developer.android.com/google/play/on-device-ai#device-targeting-configuration) to specify - Network accessline 430
[device targeting instructions](https://developer.android.com/google/play/on-device-ai#device-targeting-configuration) to specify - Network accessline 430
[device targeting instructions](https://developer.android.com/google/play/on-device-ai#device-targeting-configuration) to specify - Network accessline 439
Use [`cancel()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#cancel(java.util.List%3Cjava.lang.String%3E)) - Network accessline 439
Use [`cancel()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#cancel(java.util.List%3Cjava.lang.String%3E)) - Network accessline 440
[`cancel()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#cancel(java.util.List%3Cjava.lang.String%3E)) - Network accessline 440
[`cancel()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#cancel(java.util.List%3Cjava.lang.String%3E)) - Network accessline 446
Use [`removePack()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#removePack(java.lang.String)) - Network accessline 446
Use [`removePack()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#removePack(java.lang.String)) - Network accessline 447
[`removePack()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#removePack(java.lang.String)) - Network accessline 447
[`removePack()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#removePack(java.lang.String)) - Network accessline 452
Use [`getPackLocations()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#getPackLocations()) - Network accessline 452
Use [`getPackLocations()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#getPackLocations()) - Network accessline 453
[`getPackLocations()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#getPackLocations()) - Network accessline 453
[`getPackLocations()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#getPackLocations()) - Network accessline 468
- Device model - Device RAM - [System features](https://developer.android.com/guide/topics/manifest/uses-feature-element#features-reference) - Network accessline 468
- Device model - Device RAM - [System features](https://developer.android.com/guide/topics/manifest/uses-feature-element#features-reference) - Network accessline 470
- [System features](https://developer.android.com/guide/topics/manifest/uses-feature-element#features-reference) - Network accessline 470
- [System features](https://developer.android.com/guide/topics/manifest/uses-feature-element#features-reference) - Network accessline 483
To use device targeting, ensure that your Android Gradle Plugin (AGP) version is at least 8.10.0. This is packaged with Android Studio (Meerkat 2 and later). Download the latest [stable version of Android Studio](https://developer.android.c - Network accessline 483
To use device targeting, ensure that your Android Gradle Plugin (AGP) version is at least 8.10.0. This is packaged with Android Studio (Meerkat 2 and later). Download the latest [stable version of Android Studio](https://developer.android.c - Network accessline 485
Download the latest [stable version of Android Studio](https://developer.android.com/studio). - Network accessline 485
Download the latest [stable version of Android Studio](https://developer.android.com/studio). - Network accessline 499
<config:device-targeting-config xmlns:config="http://schemas.android.com/apk/config"> - Network accessline 499
<config:device-targeting-config xmlns:config="http://schemas.android.com/apk/config"> - Network accessline 500
xmlns:config="http://schemas.android.com/apk/config"> - Network accessline 500
xmlns:config="http://schemas.android.com/apk/config"> - Network accessline 538
System [feature reference](https://developer.android.com/guide/topics/manifest/uses-feature-element#features-reference) - Network accessline 538
System [feature reference](https://developer.android.com/guide/topics/manifest/uses-feature-element#features-reference) - Network accessline 539
[feature reference](https://developer.android.com/guide/topics/manifest/uses-feature-element#features-reference) - Network accessline 539
[feature reference](https://developer.android.com/guide/topics/manifest/uses-feature-element#features-reference) - Network accessline 546
System [feature reference](https://developer.android.com/guide/topics/manifest/uses-feature-element#features-reference) - Network accessline 546
System [feature reference](https://developer.android.com/guide/topics/manifest/uses-feature-element#features-reference) - Network accessline 547
[feature reference](https://developer.android.com/guide/topics/manifest/uses-feature-element#features-reference) - Network accessline 547
[feature reference](https://developer.android.com/guide/topics/manifest/uses-feature-element#features-reference) - Network accessline 552
- **manufacturer** : [System on chip manufacturer](https://developer.android.com/reference/android/os/Build#SOC_MANUFACTURER) - Network accessline 552
- **manufacturer** : [System on chip manufacturer](https://developer.android.com/reference/android/os/Build#SOC_MANUFACTURER) - Network accessline 553
- **model** : [System on chip model](https://developer.android.com/reference/android/os/Build#SOC_MODEL) - Network accessline 553
- **model** : [System on chip model](https://developer.android.com/reference/android/os/Build#SOC_MODEL) - Network accessline 567
> is a Pixel 4 - also written as follows: > >  - Network accessline 567
> is a Pixel 4 - also written as follows: > >  - Network accessline 568
> >  > - Network accessline 568
> >  > - Network accessline 569
>  - Network accessline 569
>  - Network accessline 583
> it is a Pixel 4 - also written as follows: > >  - Network accessline 583
> it is a Pixel 4 - also written as follows: > >  - Network accessline 585
>  - Network accessline 585
>  - Network accessline 589
<config:device-targeting-config xmlns:config="http://schemas.android.com/apk/config"> - Network accessline 589
<config:device-targeting-config xmlns:config="http://schemas.android.com/apk/config"> - Network accessline 590
xmlns:config="http://schemas.android.com/apk/config"> - Network accessline 590
xmlns:config="http://schemas.android.com/apk/config"> - Network accessline 625
 - Network accessline 625
 - Network accessline 627
 - Network accessline 627
 - Network accessline 688
Once you have downloaded the AI pack, you can check whether your model is present by using the [AssetManager](https://developer.android.com/google/play/on-device-ai#install-time-delivery) for install-time - Network accessline 688
Once you have downloaded the AI pack, you can check whether your model is present by using the [AssetManager](https://developer.android.com/google/play/on-device-ai#install-time-delivery) for install-time - Network accessline 689
present by using the [AssetManager](https://developer.android.com/google/play/on-device-ai#install-time-delivery) for install-time - Network accessline 689
present by using the [AssetManager](https://developer.android.com/google/play/on-device-ai#install-time-delivery) for install-time - Network accessline 690
packs or the [AiPackManager](https://developer.android.com/google/play/on-device-ai#access-AI-packs) for fast-follow and on-demand - Network accessline 690
packs or the [AiPackManager](https://developer.android.com/google/play/on-device-ai#access-AI-packs) for fast-follow and on-demand - Network accessline 692
[sample app](https://developer.android.com/google/play/on-device-ai#example-app). - Network accessline 692
[sample app](https://developer.android.com/google/play/on-device-ai#example-app). - Network accessline 724
> [!NOTE] > **Note:** Devices that are not targeted won't receive the feature module at all. This is different from [targeting for AI packs](https://developer.android.com/google/play/on-device-ai#targeting-for-ai-packs), where devices that - Network accessline 724
> [!NOTE] > **Note:** Devices that are not targeted won't receive the feature module at all. This is different from [targeting for AI packs](https://developer.android.com/google/play/on-device-ai#targeting-for-ai-packs), where devices that - Network accessline 725
> **Note:** Devices that are not targeted won't receive the feature module at all. This is different from [targeting for AI packs](https://developer.android.com/google/play/on-device-ai#targeting-for-ai-packs), where devices that are not ta - Network accessline 725
> **Note:** Devices that are not targeted won't receive the feature module at all. This is different from [targeting for AI packs](https://developer.android.com/google/play/on-device-ai#targeting-for-ai-packs), where devices that are not ta - Network accessline 738
Take a look at the [internal app sharing instructions](https://support.google.com/googleplay/android-developer/answer/9844679). - Network accessline 738
Take a look at the [internal app sharing instructions](https://support.google.com/googleplay/android-developer/answer/9844679). - Network accessline 739
[internal app sharing instructions](https://support.google.com/googleplay/android-developer/answer/9844679). - Network accessline 739
[internal app sharing instructions](https://support.google.com/googleplay/android-developer/answer/9844679). - Network accessline 743
Alternatively, you can generate APKs using [`bundletool`](https://developer.android.com/studio/command-line/bundletool) (1.18.0 or above) and sideload - Network accessline 743
Alternatively, you can generate APKs using [`bundletool`](https://developer.android.com/studio/command-line/bundletool) (1.18.0 or above) and sideload - Network accessline 744
[`bundletool`](https://developer.android.com/studio/command-line/bundletool) (1.18.0 or above) and sideload - Network accessline 744
[`bundletool`](https://developer.android.com/studio/command-line/bundletool) (1.18.0 or above) and sideload - Network accessline 798
We recommend that you test your app end to end on Google Play with an [internal test track](https://support.google.com/googleplay/android-developer/answer/9845334). - Network accessline 798
We recommend that you test your app end to end on Google Play with an [internal test track](https://support.google.com/googleplay/android-developer/answer/9845334). - Network accessline 799
[internal test track](https://support.google.com/googleplay/android-developer/answer/9845334). - Network accessline 799
[internal test track](https://support.google.com/googleplay/android-developer/answer/9845334). - Network accessline 801
Once you've done this, you can incrementally release your app update to production with [staged roll-outs](https://support.google.com/googleplay/android-developer/answer/6346149). - Network accessline 801
Once you've done this, you can incrementally release your app update to production with [staged roll-outs](https://support.google.com/googleplay/android-developer/answer/6346149). - Network accessline 803
[staged roll-outs](https://support.google.com/googleplay/android-developer/answer/6346149). - Network accessline 803
[staged roll-outs](https://support.google.com/googleplay/android-developer/answer/6346149). - Network accessline 807
Download the [sample app](https://drive.google.com/drive/folders/1zb2O2mDvEh4vOmv1QbjeLU-O25KHrfKJ). - Network accessline 807
Download the [sample app](https://drive.google.com/drive/folders/1zb2O2mDvEh4vOmv1QbjeLU-O25KHrfKJ). - Network accessline 808
[sample app](https://drive.google.com/drive/folders/1zb2O2mDvEh4vOmv1QbjeLU-O25KHrfKJ). - Network accessline 808
[sample app](https://drive.google.com/drive/folders/1zb2O2mDvEh4vOmv1QbjeLU-O25KHrfKJ). - Network accessline 810
It demonstrates how to use each of the delivery modes as well as the device targeting configuration. See the [local testing](https://developer.android.com/google/play/on-device-ai#local-testing) section to get - Network accessline 810
It demonstrates how to use each of the delivery modes as well as the device targeting configuration. See the [local testing](https://developer.android.com/google/play/on-device-ai#local-testing) section to get - Network accessline 811
targeting configuration. See the [local testing](https://developer.android.com/google/play/on-device-ai#local-testing) section to get - Network accessline 811
targeting configuration. See the [local testing](https://developer.android.com/google/play/on-device-ai#local-testing) section to get - Network accessline 816
Learn more about [Android App Bundles](https://developer.android.com/guide/app-bundle) and read the - Network accessline 816
Learn more about [Android App Bundles](https://developer.android.com/guide/app-bundle) and read the - Network accessline 818
[AI Delivery SDK](https://developer.android.com/reference/com/google/android/play/core/packages-ai_delivery). - Network accessline 818
[AI Delivery SDK](https://developer.android.com/reference/com/google/android/play/core/packages-ai_delivery).
device-ai/litert/litert-lm/references/get-a-model.md
device-ai/litert/litert-runtime/SKILL.md
- Network accessline 24
This skill provides step-by-step guidance for building an Android app that runs a `.tflite` model with the [LiteRT CompiledModel API](https://ai.google.dev/edge/litert/android) - Network accessline 24
This skill provides step-by-step guidance for building an Android app that runs a `.tflite` model with the [LiteRT CompiledModel API](https://ai.google.dev/edge/litert/android) - Network accessline 25
a `.tflite` model with the [LiteRT CompiledModel API](https://ai.google.dev/edge/litert/android) - Network accessline 25
a `.tflite` model with the [LiteRT CompiledModel API](https://ai.google.dev/edge/litert/android) - Network accessline 26
(`com.google.ai.edge.litert:litert` 2.x; [source repository](https://github.com/google-ai-edge/litert/blob/main/README.md)) on the CPU or - Network accessline 26
(`com.google.ai.edge.litert:litert` 2.x; [source repository](https://github.com/google-ai-edge/litert/blob/main/README.md)) on the CPU or - Network accessline 34
- A Kotlin Android project (`minSdk` must be `24` or higher, as declared by the LiteRT 2.3.0 AARs). - The runtime that Step 1 picks: the Google Play services runtime (`com.google.android.gms:play-services-litert`, the default; see [LiteRT i - Network accessline 34
- A Kotlin Android project (`minSdk` must be `24` or higher, as declared by the LiteRT 2.3.0 AARs). - The runtime that Step 1 picks: the Google Play services runtime (`com.google.android.gms:play-services-litert`, the default; see [LiteRT i - Network accessline 36
- A verified `.tflite` model and its input contract (input dimensions, mean, standard deviation, channel order, and tensor layout). For models with a verified recipe, inspect the [LiteRT model recipes](https://github.com/google-ai-edge/lite - Network accessline 36
- A verified `.tflite` model and its input contract (input dimensions, mean, standard deviation, channel order, and tensor layout). For models with a verified recipe, inspect the [LiteRT model recipes](https://github.com/google-ai-edge/lite - Network accessline 397
2. **Capture a golden output first** : While the legacy runtime is still in the project, record the app's output for one fixed input on the CPU. This step needs a device or an emulator. Run the capture test with `am instrument`, not `connec - Network accessline 397
2. **Capture a golden output first** : While the legacy runtime is still in the project, record the app's output for one fixed input on the CPU. This step needs a device or an emulator. Run the capture test with `am instrument`, not `connec - Network accessline 398
3. **Swap the dependencies** : Delete every legacy artifact line (never leave it commented out) and add the dependencies of the runtime that Step 1 picks: by default those of [LiteRT in Google Play services](references/play-services.md), wi - Network accessline 398
3. **Swap the dependencies** : Delete every legacy artifact line (never leave it commented out) and add the dependencies of the runtime that Step 1 picks: by default those of [LiteRT in Google Play services](references/play-services.md), wi - Network accessline 399
services](references/play-services.md) describes. On the bundled runtime, an app keeps them with `com.google.ai.edge.litert:litert-support:2.3.0`, with the package `org.tensorflow.lite.support` renamed to `com.google.ai.edge.litert.support` - Network accessline 399
services](references/play-services.md) describes. On the bundled runtime, an app keeps them with `com.google.ai.edge.litert:litert-support:2.3.0`, with the package `org.tensorflow.lite.support` renamed to `com.google.ai.edge.litert.support` - Network accessline 423
accelerator, which changes the speed and the numerical results of a quantized model that ran on a DSP or an NPU before; point them to [NPU acceleration with LiteRT](https://ai.google.dev/edge/litert/next/npu) for the NPU. Tell the use - Network accessline 423
accelerator, which changes the speed and the numerical results of a quantized model that ran on a DSP or an NPU before; point them to [NPU acceleration with LiteRT](https://ai.google.dev/edge/litert/next/npu) for the NPU. Tell the use - Network accessline 424
quantized model that ran on a DSP or an NPU before; point them to [NPU acceleration with LiteRT](https://ai.google.dev/edge/litert/next/npu) for the NPU. Tell the user about the TensorFlow Lite Task Library, C++ modules, and Select Te - Network accessline 424
quantized model that ran on a DSP or an NPU before; point them to [NPU acceleration with LiteRT](https://ai.google.dev/edge/litert/next/npu) for the NPU. Tell the user about the TensorFlow Lite Task Library, C++ modules, and Select Te - Network accessline 425
[NPU acceleration with LiteRT](https://ai.google.dev/edge/litert/next/npu) for the NPU. Tell the user about the - Network accessline 425
[NPU acceleration with LiteRT](https://ai.google.dev/edge/litert/next/npu) for the NPU. Tell the user about the
device-ai/litert/litert-runtime/references/android/google/play/on-device-ai.md
- Network accessline 3
Play for On-device AI brings the benefits of [Android App Bundles](https://developer.android.com/guide/app-bundle) and Google Play delivery to custom ML - Network accessline 3
Play for On-device AI brings the benefits of [Android App Bundles](https://developer.android.com/guide/app-bundle) and Google Play delivery to custom ML - Network accessline 4
[Android App Bundles](https://developer.android.com/guide/app-bundle) and Google Play delivery to custom ML - Network accessline 4
[Android App Bundles](https://developer.android.com/guide/app-bundle) and Google Play delivery to custom ML - Network accessline 22
- By using Play for On-device AI you agree to the terms in the [Google Play Developer Distribution Agreement](https://play.google.com/about/developer-distribution-agreement.html) and the [Play Core Software Development Kit Terms of Service] - Network accessline 22
- By using Play for On-device AI you agree to the terms in the [Google Play Developer Distribution Agreement](https://play.google.com/about/developer-distribution-agreement.html) and the [Play Core Software Development Kit Terms of Service] - Network accessline 42
AI packs only contain models. Java/Kotlin and native libraries are not allowed. If you need to ship libraries or code to run your ML model, move it into the base module or a [feature module](https://developer.android.com/guide/playcore/feat - Network accessline 42
AI packs only contain models. Java/Kotlin and native libraries are not allowed. If you need to ship libraries or code to run your ML model, move it into the base module or a [feature module](https://developer.android.com/guide/playcore/feat - Network accessline 43
If you need to ship libraries or code to run your ML model, move it into the base module or a [feature module](https://developer.android.com/guide/playcore/feature-delivery). You can configure your feature module so that it has the same dow - Network accessline 43
If you need to ship libraries or code to run your ML model, move it into the base module or a [feature module](https://developer.android.com/guide/playcore/feature-delivery). You can configure your feature module so that it has the same dow - Network accessline 44
base module or a [feature module](https://developer.android.com/guide/playcore/feature-delivery). You can configure your feature module so that it has the same download and targeting settings as the AI pack. - Network accessline 44
base module or a [feature module](https://developer.android.com/guide/playcore/feature-delivery). You can configure your feature module so that it has the same download and targeting settings as the AI pack. - Network accessline 48
> [!NOTE] > **Note:** AI packs don't contain Java/Kotlin or native libraries. You can ship libraries or code to run your ML models in [feature modules](https://developer.android.com/guide/playcore/feature-delivery). - Network accessline 48
> [!NOTE] > **Note:** AI packs don't contain Java/Kotlin or native libraries. You can ship libraries or code to run your ML models in [feature modules](https://developer.android.com/guide/playcore/feature-delivery). - Network accessline 49
> **Note:** AI packs don't contain Java/Kotlin or native libraries. You can ship libraries or code to run your ML models in [feature modules](https://developer.android.com/guide/playcore/feature-delivery). - Network accessline 49
> **Note:** AI packs don't contain Java/Kotlin or native libraries. You can ship libraries or code to run your ML models in [feature modules](https://developer.android.com/guide/playcore/feature-delivery). - Network accessline 53
You can use LiteRT and MediaPipe with AI packs. Package your model in an AI pack and then access it using the instructions for [install-time packs](https://developer.android.com/google/play/on-device-ai#install-time-delivery) or for - Network accessline 53
You can use LiteRT and MediaPipe with AI packs. Package your model in an AI pack and then access it using the instructions for [install-time packs](https://developer.android.com/google/play/on-device-ai#install-time-delivery) or for - Network accessline 54
and then access it using the instructions for [install-time packs](https://developer.android.com/google/play/on-device-ai#install-time-delivery) or for [fast-follow and on-demand packs](https://developer.android.com/google/play/on-device-ai - Network accessline 54
and then access it using the instructions for [install-time packs](https://developer.android.com/google/play/on-device-ai#install-time-delivery) or for [fast-follow and on-demand packs](https://developer.android.com/google/play/on-device-ai - Network accessline 55
[install-time packs](https://developer.android.com/google/play/on-device-ai#install-time-delivery) or for - Network accessline 55
[install-time packs](https://developer.android.com/google/play/on-device-ai#install-time-delivery) or for - Network accessline 56
[fast-follow and on-demand packs](https://developer.android.com/google/play/on-device-ai#ff-od-delivery). - Network accessline 56
[fast-follow and on-demand packs](https://developer.android.com/google/play/on-device-ai#ff-od-delivery). - Network accessline 60
- [Getting started with LiteRT](https://ai.google.dev/edge/litert/android) - Network accessline 60
- [Getting started with LiteRT](https://ai.google.dev/edge/litert/android) - Network accessline 61
- The [sample app](https://developer.android.com/google/play/on-device-ai#example-app) shows how you can package a LiteRT model in an AI pack and load it at runtime. - Network accessline 61
- The [sample app](https://developer.android.com/google/play/on-device-ai#example-app) shows how you can package a LiteRT model in an AI pack and load it at runtime. - Network accessline 62
- There are many [pretrained LiteRT models](https://ai.google.dev/edge/litert/models/trained) that you can use in AI packs to get started. - Network accessline 62
- There are many [pretrained LiteRT models](https://ai.google.dev/edge/litert/models/trained) that you can use in AI packs to get started. - Network accessline 63
- [Getting started with MediaPipe](https://ai.google.dev/edge/mediapipe/framework/getting_started/android) - Network accessline 63
- [Getting started with MediaPipe](https://ai.google.dev/edge/mediapipe/framework/getting_started/android) - Network accessline 64
- For fast-follow and on-demand packs, you can use [AssetCache.java](https://github.com/google-ai-edge/mediapipe/blob/master/mediapipe/java/com/google/mediapipe/framework/AssetCache.java) to load your assets (eg. `.binarypb` files) by their - Network accessline 64
- For fast-follow and on-demand packs, you can use [AssetCache.java](https://github.com/google-ai-edge/mediapipe/blob/master/mediapipe/java/com/google/mediapipe/framework/AssetCache.java) to load your assets (eg. `.binarypb` files) by their - Network accessline 65
- For install-time packs, you can use [AndroidAssetUtil.java](https://github.com/google-ai-edge/mediapipe/blob/master/mediapipe/java/com/google/mediapipe/framework/AndroidAssetUtil.java#L56). - Network accessline 65
- For install-time packs, you can use [AndroidAssetUtil.java](https://github.com/google-ai-edge/mediapipe/blob/master/mediapipe/java/com/google/mediapipe/framework/AndroidAssetUtil.java#L56). - Network accessline 71
1. Package your models into AI packs into your Android App Bundle and specify how the AI packs should be delivered. 2. \[Optional\] If you want to deliver different models to different devices, you can [configure device targeting](https://d - Network accessline 71
1. Package your models into AI packs into your Android App Bundle and specify how the AI packs should be delivered. 2. \[Optional\] If you want to deliver different models to different devices, you can [configure device targeting](https://d - Network accessline 72
2. \[Optional\] If you want to deliver different models to different devices, you can [configure device targeting](https://developer.android.com/google/play/on-device-ai#device-targeting-configuration) for your AI packs. For example, you co - Network accessline 72
2. \[Optional\] If you want to deliver different models to different devices, you can [configure device targeting](https://developer.android.com/google/play/on-device-ai#device-targeting-configuration) for your AI packs. For example, you co - Network accessline 130
7. Add code to load and run your models. How you do this will depend on the delivery mode of your AI packs. See instructions for [install-time](https://developer.android.com/google/play/on-device-ai#install-time-delivery) and - Network accessline 130
7. Add code to load and run your models. How you do this will depend on the delivery mode of your AI packs. See instructions for [install-time](https://developer.android.com/google/play/on-device-ai#install-time-delivery) and - Network accessline 131
delivery mode of your AI packs. See instructions for [install-time](https://developer.android.com/google/play/on-device-ai#install-time-delivery) and [fast-follow/on-demand](https://developer.android.com/google/play/on-device-ai#ff-od - Network accessline 131
delivery mode of your AI packs. See instructions for [install-time](https://developer.android.com/google/play/on-device-ai#install-time-delivery) and [fast-follow/on-demand](https://developer.android.com/google/play/on-device-ai#ff-od - Network accessline 132
[install-time](https://developer.android.com/google/play/on-device-ai#install-time-delivery) and - Network accessline 132
[install-time](https://developer.android.com/google/play/on-device-ai#install-time-delivery) and - Network accessline 133
[fast-follow/on-demand](https://developer.android.com/google/play/on-device-ai#ff-od-delivery) below. - Network accessline 133
[fast-follow/on-demand](https://developer.android.com/google/play/on-device-ai#ff-od-delivery) below. - Network accessline 135
8. \[Optional\] [Configure device targeting](https://developer.android.com/google/play/on-device-ai#device-targeting-configuration) - Network accessline 135
8. \[Optional\] [Configure device targeting](https://developer.android.com/google/play/on-device-ai#device-targeting-configuration) - Network accessline 138
9. [Build the Android App Bundle with Gradle](https://developer.android.com/studio/build/building-cmdline#build_bundle). - Network accessline 138
9. [Build the Android App Bundle with Gradle](https://developer.android.com/studio/build/building-cmdline#build_bundle). - Network accessline 178
Each AI pack is stored in a separate folder in the app's internal storage. Use the [`getPackLocation()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#getPackLocation(java.lang.String)) - Network accessline 178
Each AI pack is stored in a separate folder in the app's internal storage. Use the [`getPackLocation()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#getPackLocation(java.lang.String)) - Network accessline 179
the [`getPackLocation()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#getPackLocation(java.lang.String)) method to determine the root folder of an AI pack. This method returns the - Network accessline 179
the [`getPackLocation()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#getPackLocation(java.lang.String)) method to determine the root folder of an AI pack. This method returns the - Network accessline 180
[`getPackLocation()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#getPackLocation(java.lang.String)) - Network accessline 180
[`getPackLocation()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#getPackLocation(java.lang.String)) - Network accessline 184
| Return value | Status | |---|---| | A valid [`AiPackLocation`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackLocation) object | AI pack root folder is ready for immediate access at [`assetsPath()`](htt - Network accessline 184
| Return value | Status | |---|---| | A valid [`AiPackLocation`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackLocation) object | AI pack root folder is ready for immediate access at [`assetsPath()`](htt - Network accessline 185
|---|---| | A valid [`AiPackLocation`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackLocation) object | AI pack root folder is ready for immediate access at [`assetsPath()`](https://developer.android.com - Network accessline 185
|---|---| | A valid [`AiPackLocation`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackLocation) object | AI pack root folder is ready for immediate access at [`assetsPath()`](https://developer.android.com - Network accessline 186
| A valid [`AiPackLocation`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackLocation) object | AI pack root folder is ready for immediate access at [`assetsPath()`](https://developer.android.com/reference - Network accessline 186
| A valid [`AiPackLocation`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackLocation) object | AI pack root folder is ready for immediate access at [`assetsPath()`](https://developer.android.com/reference - Network accessline 196
[`getPackStates()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#getPackStates(java.util.List%3Cjava.lang.String%3E)) method to determine the size of the download and whether the pack is already - Network accessline 196
[`getPackStates()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#getPackStates(java.util.List%3Cjava.lang.String%3E)) method to determine the size of the download and whether the pack is already - Network accessline 204
`getPackStates()` is an asynchronous method that returns a `Task<AiPackStates>`. The [`packStates()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackStates#packStates()) - Network accessline 204
`getPackStates()` is an asynchronous method that returns a `Task<AiPackStates>`. The [`packStates()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackStates#packStates()) - Network accessline 205
The [`packStates()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackStates#packStates()) method of an `AiPackStates` object returns a `Map<String, AiPackState>`. This - Network accessline 205
The [`packStates()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackStates#packStates()) method of an `AiPackStates` object returns a `Map<String, AiPackState>`. This - Network accessline 206
[`packStates()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackStates#packStates()) - Network accessline 206
[`packStates()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackStates#packStates()) - Network accessline 235
The following [`AiPackState`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackState) - Network accessline 235
The following [`AiPackState`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackState) - Network accessline 236
[`AiPackState`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackState) - Network accessline 236
[`AiPackState`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackState) - Network accessline 240
- [`totalBytesToDownload()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackState#totalBytesToDownload()) - Network accessline 240
- [`totalBytesToDownload()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackState#totalBytesToDownload()) - Network accessline 241
- [`bytesDownloaded()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackState#bytesDownloaded()) - Network accessline 241
- [`bytesDownloaded()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackState#bytesDownloaded()) - Network accessline 242
- [`transferProgressPercentage()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackState#transferProgressPercentage()) - Network accessline 242
- [`transferProgressPercentage()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackState#transferProgressPercentage()) - Network accessline 244
To get the status of an AI pack, use the [`status()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackState#status()) - Network accessline 244
To get the status of an AI pack, use the [`status()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackState#status()) - Network accessline 245
[`status()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackState#status()) - Network accessline 245
[`status()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackState#status()) - Network accessline 246
method, which returns the status as an integer that corresponds to a constant field in the [`AiPackStatus`](https://developer.android.com/reference/com/google/android/play/core/aipacks/model/AiPackStatus) - Network accessline 246
method, which returns the status as an integer that corresponds to a constant field in the [`AiPackStatus`](https://developer.android.com/reference/com/google/android/play/core/aipacks/model/AiPackStatus) - Network accessline 247
field in the [`AiPackStatus`](https://developer.android.com/reference/com/google/android/play/core/aipacks/model/AiPackStatus) class. An AI pack that's not installed yet has the status - Network accessline 247
field in the [`AiPackStatus`](https://developer.android.com/reference/com/google/android/play/core/aipacks/model/AiPackStatus) class. An AI pack that's not installed yet has the status - Network accessline 248
[`AiPackStatus`](https://developer.android.com/reference/com/google/android/play/core/aipacks/model/AiPackStatus) - Network accessline 248
[`AiPackStatus`](https://developer.android.com/reference/com/google/android/play/core/aipacks/model/AiPackStatus) - Network accessline 252
If a request fails, use the [`errorCode()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackState#errorCode()) - Network accessline 252
If a request fails, use the [`errorCode()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackState#errorCode()) - Network accessline 253
[`errorCode()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackState#errorCode()) - Network accessline 253
[`errorCode()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackState#errorCode()) - Network accessline 254
method, whose return value corresponds to a constant field in the [`AiPackErrorCode`](https://developer.android.com/reference/com/google/android/play/core/aipacks/model/AiPackErrorCode) class. - Network accessline 254
method, whose return value corresponds to a constant field in the [`AiPackErrorCode`](https://developer.android.com/reference/com/google/android/play/core/aipacks/model/AiPackErrorCode) class. - Network accessline 255
[`AiPackErrorCode`](https://developer.android.com/reference/com/google/android/play/core/aipacks/model/AiPackErrorCode) - Network accessline 255
[`AiPackErrorCode`](https://developer.android.com/reference/com/google/android/play/core/aipacks/model/AiPackErrorCode) - Network accessline 260
Use the [`fetch()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#fetch(java.util.List%3Cjava.lang.String%3E)) - Network accessline 260
Use the [`fetch()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#fetch(java.util.List%3Cjava.lang.String%3E)) - Network accessline 261
[`fetch()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#fetch(java.util.List%3Cjava.lang.String%3E)) - Network accessline 261
[`fetch()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#fetch(java.util.List%3Cjava.lang.String%3E)) - Network accessline 266
Task<AiPackStates> fetch(List<String> packNames) - Network accessline 266
Task<AiPackStates> fetch(List<String> packNames) - Network accessline 269
This method returns an [`AiPackStates`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackStates) object containing a list of packs and their initial download states and sizes. - Network accessline 269
This method returns an [`AiPackStates`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackStates) object containing a list of packs and their initial download states and sizes. - Network accessline 270
[`AiPackStates`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackStates) object containing a list of packs and their initial download states and sizes. If an AI pack requested via `fetch()` is already down - Network accessline 270
[`AiPackStates`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackStates) object containing a list of packs and their initial download states and sizes. If an AI pack requested via `fetch()` is already down - Network accessline 271
object containing a list of packs and their initial download states and sizes. If an AI pack requested via `fetch()` is already downloading, the download status is returned and no additional download is started. - Network accessline 271
object containing a list of packs and their initial download states and sizes. If an AI pack requested via `fetch()` is already downloading, the download status is returned and no additional download is started. - Network accessline 272
If an AI pack requested via `fetch()` is already downloading, the download - Network accessline 272
If an AI pack requested via `fetch()` is already downloading, the download - Network accessline 280
You should implement an [`AiPackStateUpdateListener`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackStateUpdateListener) - Network accessline 280
You should implement an [`AiPackStateUpdateListener`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackStateUpdateListener) - Network accessline 281
[`AiPackStateUpdateListener`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackStateUpdateListener) - Network accessline 281
[`AiPackStateUpdateListener`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackStateUpdateListener) - Network accessline 292
> [!NOTE] > **Note:** The Play Store automatically triggers the download of any `fast-follow` packs after the user installs or updates the app. However, these packs may not be ready to use immediately. You must check the status of the `fast - Network accessline 292
> [!NOTE] > **Note:** The Play Store automatically triggers the download of any `fast-follow` packs after the user installs or updates the app. However, these packs may not be ready to use immediately. You must check the status of the `fast - Network accessline 293
> **Note:** The Play Store automatically triggers the download of any `fast-follow` packs after the user installs or updates the app. However, these packs may not be ready to use immediately. You must check the status of the `fast-follow` p - Network accessline 293
> **Note:** The Play Store automatically triggers the download of any `fast-follow` packs after the user installs or updates the app. However, these packs may not be ready to use immediately. You must check the status of the `fast-follow` p - Network accessline 302
`WAITING_FOR_WIFI`. To trigger the UI flow to prompt the user for consent, use the [`showConfirmationDialog()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#showConfirmationDialog(androidx.activ - Network accessline 302
`WAITING_FOR_WIFI`. To trigger the UI flow to prompt the user for consent, use the [`showConfirmationDialog()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#showConfirmationDialog(androidx.activ - Network accessline 303
the [`showConfirmationDialog()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#showConfirmationDialog(androidx.activity.result.ActivityResultLauncher%3Candroidx.activity.result.IntentSenderReques - Network accessline 303
the [`showConfirmationDialog()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#showConfirmationDialog(androidx.activity.result.ActivityResultLauncher%3Candroidx.activity.result.IntentSenderReques - Network accessline 304
[`showConfirmationDialog()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#showConfirmationDialog(androidx.activity.result.ActivityResultLauncher%3Candroidx.activity.result.IntentSenderRequest%3E - Network accessline 304
[`showConfirmationDialog()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#showConfirmationDialog(androidx.activity.result.ActivityResultLauncher%3Candroidx.activity.result.IntentSenderRequest%3E - Network accessline 312
If a pack has the `REQUIRES_USER_CONFIRMATION` status, the download won't proceed until the user accepts the dialog that is shown with [`showConfirmationDialog()`](https://developer.android.com/reference/com/google/android/play/core/aipacks - Network accessline 312
If a pack has the `REQUIRES_USER_CONFIRMATION` status, the download won't proceed until the user accepts the dialog that is shown with [`showConfirmationDialog()`](https://developer.android.com/reference/com/google/android/play/core/aipacks - Network accessline 313
proceed until the user accepts the dialog that is shown with [`showConfirmationDialog()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#showConfirmationDialog(androidx.activity.result.ActivityRes - Network accessline 313
proceed until the user accepts the dialog that is shown with [`showConfirmationDialog()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#showConfirmationDialog(androidx.activity.result.ActivityRes - Network accessline 314
[`showConfirmationDialog()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#showConfirmationDialog(androidx.activity.result.ActivityResultLauncher%3Candroidx.activity.result.IntentSenderRequest%3E - Network accessline 314
[`showConfirmationDialog()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#showConfirmationDialog(androidx.activity.result.ActivityResultLauncher%3Candroidx.activity.result.IntentSenderRequest%3E - Network accessline 315
This status can occur when the app is not recognized by Play---for example, if the app was sideloaded. Note that calling [`showConfirmationDialog()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager - Network accessline 315
This status can occur when the app is not recognized by Play---for example, if the app was sideloaded. Note that calling [`showConfirmationDialog()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager - Network accessline 316
app was sideloaded. Note that calling [`showConfirmationDialog()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#showConfirmationDialog(androidx.activity.result.ActivityResultLauncher%3Candroidx. - Network accessline 316
app was sideloaded. Note that calling [`showConfirmationDialog()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#showConfirmationDialog(androidx.activity.result.ActivityResultLauncher%3Candroidx. - Network accessline 317
[`showConfirmationDialog()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#showConfirmationDialog(androidx.activity.result.ActivityResultLauncher%3Candroidx.activity.result.IntentSenderRequest%3E - Network accessline 317
[`showConfirmationDialog()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#showConfirmationDialog(androidx.activity.result.ActivityResultLauncher%3Candroidx.activity.result.IntentSenderRequest%3E - Network accessline 391
Alternatively, you can use the [`getPackStates()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#getPackStates()) - Network accessline 391
Alternatively, you can use the [`getPackStates()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#getPackStates()) - Network accessline 392
[`getPackStates()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#getPackStates()) - Network accessline 392
[`getPackStates()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#getPackStates()) - Network accessline 393
method to get the status of current downloads. [`AiPackStates`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackStates) contains the download progress, download status, and any failure error codes. - Network accessline 393
method to get the status of current downloads. [`AiPackStates`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackStates) contains the download progress, download status, and any failure error codes. - Network accessline 394
[`AiPackStates`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackStates) - Network accessline 394
[`AiPackStates`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackStates) - Network accessline 399
You can access an AI pack using file system calls after the download request reaches the [`COMPLETED`](https://developer.android.com/reference/com/google/android/play/core/aipacks/model/AiPackStatus#completed()) - Network accessline 399
You can access an AI pack using file system calls after the download request reaches the [`COMPLETED`](https://developer.android.com/reference/com/google/android/play/core/aipacks/model/AiPackStatus#completed()) - Network accessline 400
reaches the [`COMPLETED`](https://developer.android.com/reference/com/google/android/play/core/aipacks/model/AiPackStatus#completed()) state. Use the - Network accessline 400
reaches the [`COMPLETED`](https://developer.android.com/reference/com/google/android/play/core/aipacks/model/AiPackStatus#completed()) state. Use the - Network accessline 401
[`COMPLETED`](https://developer.android.com/reference/com/google/android/play/core/aipacks/model/AiPackStatus#completed()) - Network accessline 401
[`COMPLETED`](https://developer.android.com/reference/com/google/android/play/core/aipacks/model/AiPackStatus#completed()) - Network accessline 402
state. Use the [`getPackLocation()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#getPackLocation(java.lang.String)) method to get the root folder of the AI pack. - Network accessline 402
state. Use the [`getPackLocation()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#getPackLocation(java.lang.String)) method to get the root folder of the AI pack. - Network accessline 403
[`getPackLocation()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#getPackLocation(java.lang.String)) - Network accessline 403
[`getPackLocation()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#getPackLocation(java.lang.String)) - Network accessline 406
AI packs are stored in the `assets` directory within the AI pack root directory. You can get the path to the `assets` directory by using the convenience method [`assetsPath()`](https://developer.android.com/reference/com/google/android/play - Network accessline 406
AI packs are stored in the `assets` directory within the AI pack root directory. You can get the path to the `assets` directory by using the convenience method [`assetsPath()`](https://developer.android.com/reference/com/google/android/play - Network accessline 407
You can get the path to the `assets` directory by using the convenience method [`assetsPath()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackLocation#assetsPath()). Use the following method to get the p - Network accessline 407
You can get the path to the `assets` directory by using the convenience method [`assetsPath()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackLocation#assetsPath()). Use the following method to get the p - Network accessline 408
[`assetsPath()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackLocation#assetsPath()). - Network accessline 408
[`assetsPath()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackLocation#assetsPath()). - Network accessline 429
You can follow the [device targeting instructions](https://developer.android.com/google/play/on-device-ai#device-targeting-configuration) to specify - Network accessline 429
You can follow the [device targeting instructions](https://developer.android.com/google/play/on-device-ai#device-targeting-configuration) to specify - Network accessline 430
[device targeting instructions](https://developer.android.com/google/play/on-device-ai#device-targeting-configuration) to specify - Network accessline 430
[device targeting instructions](https://developer.android.com/google/play/on-device-ai#device-targeting-configuration) to specify - Network accessline 439
Use [`cancel()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#cancel(java.util.List%3Cjava.lang.String%3E)) - Network accessline 439
Use [`cancel()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#cancel(java.util.List%3Cjava.lang.String%3E)) - Network accessline 440
[`cancel()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#cancel(java.util.List%3Cjava.lang.String%3E)) - Network accessline 440
[`cancel()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#cancel(java.util.List%3Cjava.lang.String%3E)) - Network accessline 446
Use [`removePack()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#removePack(java.lang.String)) - Network accessline 446
Use [`removePack()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#removePack(java.lang.String)) - Network accessline 447
[`removePack()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#removePack(java.lang.String)) - Network accessline 447
[`removePack()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#removePack(java.lang.String)) - Network accessline 452
Use [`getPackLocations()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#getPackLocations()) - Network accessline 452
Use [`getPackLocations()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#getPackLocations()) - Network accessline 453
[`getPackLocations()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#getPackLocations()) - Network accessline 453
[`getPackLocations()`](https://developer.android.com/reference/com/google/android/play/core/aipacks/AiPackManager#getPackLocations()) - Network accessline 468
- Device model - Device RAM - [System features](https://developer.android.com/guide/topics/manifest/uses-feature-element#features-reference) - Network accessline 468
- Device model - Device RAM - [System features](https://developer.android.com/guide/topics/manifest/uses-feature-element#features-reference) - Network accessline 470
- [System features](https://developer.android.com/guide/topics/manifest/uses-feature-element#features-reference) - Network accessline 470
- [System features](https://developer.android.com/guide/topics/manifest/uses-feature-element#features-reference) - Network accessline 483
To use device targeting, ensure that your Android Gradle Plugin (AGP) version is at least 8.10.0. This is packaged with Android Studio (Meerkat 2 and later). Download the latest [stable version of Android Studio](https://developer.android.c - Network accessline 483
To use device targeting, ensure that your Android Gradle Plugin (AGP) version is at least 8.10.0. This is packaged with Android Studio (Meerkat 2 and later). Download the latest [stable version of Android Studio](https://developer.android.c - Network accessline 485
Download the latest [stable version of Android Studio](https://developer.android.com/studio). - Network accessline 485
Download the latest [stable version of Android Studio](https://developer.android.com/studio). - Network accessline 499
<config:device-targeting-config xmlns:config="http://schemas.android.com/apk/config"> - Network accessline 499
<config:device-targeting-config xmlns:config="http://schemas.android.com/apk/config"> - Network accessline 500
xmlns:config="http://schemas.android.com/apk/config"> - Network accessline 500
xmlns:config="http://schemas.android.com/apk/config"> - Network accessline 538
System [feature reference](https://developer.android.com/guide/topics/manifest/uses-feature-element#features-reference) - Network accessline 538
System [feature reference](https://developer.android.com/guide/topics/manifest/uses-feature-element#features-reference) - Network accessline 539
[feature reference](https://developer.android.com/guide/topics/manifest/uses-feature-element#features-reference) - Network accessline 539
[feature reference](https://developer.android.com/guide/topics/manifest/uses-feature-element#features-reference) - Network accessline 546
System [feature reference](https://developer.android.com/guide/topics/manifest/uses-feature-element#features-reference) - Network accessline 546
System [feature reference](https://developer.android.com/guide/topics/manifest/uses-feature-element#features-reference) - Network accessline 547
[feature reference](https://developer.android.com/guide/topics/manifest/uses-feature-element#features-reference) - Network accessline 547
[feature reference](https://developer.android.com/guide/topics/manifest/uses-feature-element#features-reference) - Network accessline 552
- **manufacturer** : [System on chip manufacturer](https://developer.android.com/reference/android/os/Build#SOC_MANUFACTURER) - Network accessline 552
- **manufacturer** : [System on chip manufacturer](https://developer.android.com/reference/android/os/Build#SOC_MANUFACTURER) - Network accessline 553
- **model** : [System on chip model](https://developer.android.com/reference/android/os/Build#SOC_MODEL) - Network accessline 553
- **model** : [System on chip model](https://developer.android.com/reference/android/os/Build#SOC_MODEL) - Network accessline 567
> is a Pixel 4 - also written as follows: > >  - Network accessline 567
> is a Pixel 4 - also written as follows: > >  - Network accessline 568
> >  > - Network accessline 568
> >  > - Network accessline 569
>  - Network accessline 569
>  - Network accessline 583
> it is a Pixel 4 - also written as follows: > >  - Network accessline 583
> it is a Pixel 4 - also written as follows: > >  - Network accessline 585
>  - Network accessline 585
>  - Network accessline 589
<config:device-targeting-config xmlns:config="http://schemas.android.com/apk/config"> - Network accessline 589
<config:device-targeting-config xmlns:config="http://schemas.android.com/apk/config"> - Network accessline 590
xmlns:config="http://schemas.android.com/apk/config"> - Network accessline 590
xmlns:config="http://schemas.android.com/apk/config"> - Network accessline 625
 - Network accessline 625
 - Network accessline 627
 - Network accessline 627
 - Network accessline 688
Once you have downloaded the AI pack, you can check whether your model is present by using the [AssetManager](https://developer.android.com/google/play/on-device-ai#install-time-delivery) for install-time - Network accessline 688
Once you have downloaded the AI pack, you can check whether your model is present by using the [AssetManager](https://developer.android.com/google/play/on-device-ai#install-time-delivery) for install-time - Network accessline 689
present by using the [AssetManager](https://developer.android.com/google/play/on-device-ai#install-time-delivery) for install-time - Network accessline 689
present by using the [AssetManager](https://developer.android.com/google/play/on-device-ai#install-time-delivery) for install-time - Network accessline 690
packs or the [AiPackManager](https://developer.android.com/google/play/on-device-ai#access-AI-packs) for fast-follow and on-demand - Network accessline 690
packs or the [AiPackManager](https://developer.android.com/google/play/on-device-ai#access-AI-packs) for fast-follow and on-demand - Network accessline 692
[sample app](https://developer.android.com/google/play/on-device-ai#example-app). - Network accessline 692
[sample app](https://developer.android.com/google/play/on-device-ai#example-app). - Network accessline 724
> [!NOTE] > **Note:** Devices that are not targeted won't receive the feature module at all. This is different from [targeting for AI packs](https://developer.android.com/google/play/on-device-ai#targeting-for-ai-packs), where devices that - Network accessline 724
> [!NOTE] > **Note:** Devices that are not targeted won't receive the feature module at all. This is different from [targeting for AI packs](https://developer.android.com/google/play/on-device-ai#targeting-for-ai-packs), where devices that - Network accessline 725
> **Note:** Devices that are not targeted won't receive the feature module at all. This is different from [targeting for AI packs](https://developer.android.com/google/play/on-device-ai#targeting-for-ai-packs), where devices that are not ta - Network accessline 725
> **Note:** Devices that are not targeted won't receive the feature module at all. This is different from [targeting for AI packs](https://developer.android.com/google/play/on-device-ai#targeting-for-ai-packs), where devices that are not ta - Network accessline 738
Take a look at the [internal app sharing instructions](https://support.google.com/googleplay/android-developer/answer/9844679). - Network accessline 738
Take a look at the [internal app sharing instructions](https://support.google.com/googleplay/android-developer/answer/9844679). - Network accessline 739
[internal app sharing instructions](https://support.google.com/googleplay/android-developer/answer/9844679). - Network accessline 739
[internal app sharing instructions](https://support.google.com/googleplay/android-developer/answer/9844679). - Network accessline 743
Alternatively, you can generate APKs using [`bundletool`](https://developer.android.com/studio/command-line/bundletool) (1.18.0 or above) and sideload - Network accessline 743
Alternatively, you can generate APKs using [`bundletool`](https://developer.android.com/studio/command-line/bundletool) (1.18.0 or above) and sideload - Network accessline 744
[`bundletool`](https://developer.android.com/studio/command-line/bundletool) (1.18.0 or above) and sideload - Network accessline 744
[`bundletool`](https://developer.android.com/studio/command-line/bundletool) (1.18.0 or above) and sideload - Network accessline 798
We recommend that you test your app end to end on Google Play with an [internal test track](https://support.google.com/googleplay/android-developer/answer/9845334). - Network accessline 798
We recommend that you test your app end to end on Google Play with an [internal test track](https://support.google.com/googleplay/android-developer/answer/9845334). - Network accessline 799
[internal test track](https://support.google.com/googleplay/android-developer/answer/9845334). - Network accessline 799
[internal test track](https://support.google.com/googleplay/android-developer/answer/9845334). - Network accessline 801
Once you've done this, you can incrementally release your app update to production with [staged roll-outs](https://support.google.com/googleplay/android-developer/answer/6346149). - Network accessline 801
Once you've done this, you can incrementally release your app update to production with [staged roll-outs](https://support.google.com/googleplay/android-developer/answer/6346149). - Network accessline 803
[staged roll-outs](https://support.google.com/googleplay/android-developer/answer/6346149). - Network accessline 803
[staged roll-outs](https://support.google.com/googleplay/android-developer/answer/6346149). - Network accessline 807
Download the [sample app](https://drive.google.com/drive/folders/1zb2O2mDvEh4vOmv1QbjeLU-O25KHrfKJ). - Network accessline 807
Download the [sample app](https://drive.google.com/drive/folders/1zb2O2mDvEh4vOmv1QbjeLU-O25KHrfKJ). - Network accessline 808
[sample app](https://drive.google.com/drive/folders/1zb2O2mDvEh4vOmv1QbjeLU-O25KHrfKJ). - Network accessline 808
[sample app](https://drive.google.com/drive/folders/1zb2O2mDvEh4vOmv1QbjeLU-O25KHrfKJ). - Network accessline 810
It demonstrates how to use each of the delivery modes as well as the device targeting configuration. See the [local testing](https://developer.android.com/google/play/on-device-ai#local-testing) section to get - Network accessline 810
It demonstrates how to use each of the delivery modes as well as the device targeting configuration. See the [local testing](https://developer.android.com/google/play/on-device-ai#local-testing) section to get - Network accessline 811
targeting configuration. See the [local testing](https://developer.android.com/google/play/on-device-ai#local-testing) section to get - Network accessline 811
targeting configuration. See the [local testing](https://developer.android.com/google/play/on-device-ai#local-testing) section to get - Network accessline 816
Learn more about [Android App Bundles](https://developer.android.com/guide/app-bundle) and read the - Network accessline 816
Learn more about [Android App Bundles](https://developer.android.com/guide/app-bundle) and read the - Network accessline 818
[AI Delivery SDK](https://developer.android.com/reference/com/google/android/play/core/packages-ai_delivery). - Network accessline 818
[AI Delivery SDK](https://developer.android.com/reference/com/google/android/play/core/packages-ai_delivery).
device-ai/litert/litert-runtime/references/migration.md
- Network accessline 27
When the app depends on the Interpreter API in Google Play services (`com.google.android.gms:play-services-tflite-java`, `-gpu`, or `-support`, with `TfLite.initialize` in the code), follow [LiteRT in Google Play services](https://developer - Network accessline 27
When the app depends on the Interpreter API in Google Play services (`com.google.android.gms:play-services-tflite-java`, `-gpu`, or `-support`, with `TfLite.initialize` in the code), follow [LiteRT in Google Play services](https://developer - Network accessline 28
(`com.google.android.gms:play-services-tflite-java`, `-gpu`, or `-support`, with `TfLite.initialize` in the code), follow [LiteRT in Google Play services](https://developer.android.com/agents/skills/device-ai/litert/litert-runtime/reference - Network accessline 28
(`com.google.android.gms:play-services-tflite-java`, `-gpu`, or `-support`, with `TfLite.initialize` in the code), follow [LiteRT in Google Play services](https://developer.android.com/agents/skills/device-ai/litert/litert-runtime/reference - Network accessline 29
`TfLite.initialize` in the code), follow [LiteRT in Google Play services](https://developer.android.com/agents/skills/device-ai/litert/litert-runtime/references/play-services) - Network accessline 29
`TfLite.initialize` in the code), follow [LiteRT in Google Play services](https://developer.android.com/agents/skills/device-ai/litert/litert-runtime/references/play-services) - Network accessline 101
- **Google Play services runtime (default)** : You must read [LiteRT in Google Play services](https://developer.android.com/agents/skills/device-ai/litert/litert-runtime/references/play-services) before you edit the build file. Add `com.goo - Network accessline 101
- **Google Play services runtime (default)** : You must read [LiteRT in Google Play services](https://developer.android.com/agents/skills/device-ai/litert/litert-runtime/references/play-services) before you edit the build file. Add `com.goo - Network accessline 111
library ships as LiteRT Support, with the same classes and behavior. When the app uses `ImageProcessor`, `TensorImage`, `TensorLabel`, or `MetadataExtractor`, you must read the [LiteRT Support migration guide](https://github.com/google-ai-e - Network accessline 111
library ships as LiteRT Support, with the same classes and behavior. When the app uses `ImageProcessor`, `TensorImage`, `TensorLabel`, or `MetadataExtractor`, you must read the [LiteRT Support migration guide](https://github.com/google-ai-e - Network accessline 112
app uses `ImageProcessor`, `TensorImage`, `TensorLabel`, or `MetadataExtractor`, you must read the [LiteRT Support migration guide](https://github.com/google-ai-edge/LiteRT/blob/main/litert/support_lib/MIGRATION_GUIDE.md) before swapping th - Network accessline 112
app uses `ImageProcessor`, `TensorImage`, `TensorLabel`, or `MetadataExtractor`, you must read the [LiteRT Support migration guide](https://github.com/google-ai-edge/LiteRT/blob/main/litert/support_lib/MIGRATION_GUIDE.md) before swapping th - Network accessline 113
you must read the [LiteRT Support migration guide](https://github.com/google-ai-edge/LiteRT/blob/main/litert/support_lib/MIGRATION_GUIDE.md) before swapping the - Network accessline 113
you must read the [LiteRT Support migration guide](https://github.com/google-ai-edge/LiteRT/blob/main/litert/support_lib/MIGRATION_GUIDE.md) before swapping the - Network accessline 147
- **GPU delegate** (`GpuDelegate`, `GpuDelegateFactory`): Create the GPU option of the Step 2 helper with the CPU as a second accelerator. `CompatibilityList` has no counterpart; the CPU fallback of Step 3 covers a device whose GPU can't ru - Network accessline 147
- **GPU delegate** (`GpuDelegate`, `GpuDelegateFactory`): Create the GPU option of the Step 2 helper with the CPU as a second accelerator. `CompatibilityList` has no counterpart; the CPU fallback of Step 3 covers a device whose GPU can't ru - Network accessline 148
- **NNAPI** (`NnApiDelegate`, `setUseNNAPI(true)`): NNAPI is deprecated from Android 15, and the `CompiledModel` API has no NNAPI accelerator. Remove the delegate, and map an NNAPI choice in the app to the GPU option. You must tell the user - Network accessline 148
- **NNAPI** (`NnApiDelegate`, `setUseNNAPI(true)`): NNAPI is deprecated from Android 15, and the `CompiledModel` API has no NNAPI accelerator. Remove the delegate, and map an NNAPI choice in the app to the GPU option. You must tell the user - Network accessline 282
`Android.mk`, or `.cpp` files that link `tensorflowlite_jni`, tell the user that the C++ module moves to the LiteRT C++ SDK, and point them to [Use prebuilt C++ library from LiteRT Maven](https://ai.google.dev/edge/litert/next/android_cpp_s - Network accessline 282
`Android.mk`, or `.cpp` files that link `tensorflowlite_jni`, tell the user that the C++ module moves to the LiteRT C++ SDK, and point them to [Use prebuilt C++ library from LiteRT Maven](https://ai.google.dev/edge/litert/next/android_cpp_s - Network accessline 284
[Use prebuilt C++ library from LiteRT Maven](https://ai.google.dev/edge/litert/next/android_cpp_sdk). - Network accessline 284
[Use prebuilt C++ library from LiteRT Maven](https://ai.google.dev/edge/litert/next/android_cpp_sdk).
device-ai/litert/litert-runtime/references/play-services.md
- Network accessline 10
When the user asks about Terms of Service, data use, or APIs, see [LiteRT in Google Play services](https://developers.google.com/edge/litert/android/play_services). - Network accessline 10
When the user asks about Terms of Service, data use, or APIs, see [LiteRT in Google Play services](https://developers.google.com/edge/litert/android/play_services). - Network accessline 11
[LiteRT in Google Play services](https://developers.google.com/edge/litert/android/play_services). - Network accessline 11
[LiteRT in Google Play services](https://developers.google.com/edge/litert/android/play_services).
device-ai/ml-kit-genai-prompt-api/SKILL.md
- Network accessline 32
To optimize prompts for use with the ML Kit Prompt API, follow the [prompt optimization guide](https://developer.android.com/agents/skills/device-ai/prompt-api/references/prompt-optimization). - Network accessline 32
To optimize prompts for use with the ML Kit Prompt API, follow the [prompt optimization guide](https://developer.android.com/agents/skills/device-ai/prompt-api/references/prompt-optimization). - Network accessline 33
[prompt optimization guide](https://developer.android.com/agents/skills/device-ai/prompt-api/references/prompt-optimization). - Network accessline 33
[prompt optimization guide](https://developer.android.com/agents/skills/device-ai/prompt-api/references/prompt-optimization). - Network accessline 37
If the prompt is more than 200 words, implement the [prefix caching API](https://developer.android.com/agents/skills/device-ai/prompt-api/references/prefix-caching). - Network accessline 37
If the prompt is more than 200 words, implement the [prefix caching API](https://developer.android.com/agents/skills/device-ai/prompt-api/references/prefix-caching). - Network accessline 41
- The model must be fully downloaded and available before calling the first inference. Follow the guide on [implementing a generative model](https://developer.android.com/agents/skills/device-ai/prompt-api/references/get-started) to check t - Network accessline 41
- The model must be fully downloaded and available before calling the first inference. Follow the guide on [implementing a generative model](https://developer.android.com/agents/skills/device-ai/prompt-api/references/get-started) to check t - Network accessline 61
1. **Check for API availability:** Verify Structured Output feature is available on the device with `isStructuredOutputFeatureAvailable()` before using it. Refer to the [Structured Output API guide](https://developer.android.com/agents/skil - Network accessline 61
1. **Check for API availability:** Verify Structured Output feature is available on the device with `isStructuredOutputFeatureAvailable()` before using it. Refer to the [Structured Output API guide](https://developer.android.com/agents/skil
device-ai/ml-kit-genai-prompt-api/references/get-started.md
- Network accessline 7
For more details about the Prompt API, see the reference documentation for Kotlin ([com.google.mlkit.genai.prompt](https://developer.android.com/android/reference/kotlin/com/google/mlkit/genai/prompt/package-summary)) and - Network accessline 7
For more details about the Prompt API, see the reference documentation for Kotlin ([com.google.mlkit.genai.prompt](https://developer.android.com/android/reference/kotlin/com/google/mlkit/genai/prompt/package-summary)) and - Network accessline 8
reference documentation for Kotlin ([com.google.mlkit.genai.prompt](https://developer.android.com/android/reference/kotlin/com/google/mlkit/genai/prompt/package-summary)) and - Network accessline 8
reference documentation for Kotlin ([com.google.mlkit.genai.prompt](https://developer.android.com/android/reference/kotlin/com/google/mlkit/genai/prompt/package-summary)) and - Network accessline 9
Java ([com.google.mlkit.genai.prompt.java](https://developer.android.com/android/reference/com/google/mlkit/genai/prompt/java/package-summary), - Network accessline 9
Java ([com.google.mlkit.genai.prompt.java](https://developer.android.com/android/reference/com/google/mlkit/genai/prompt/java/package-summary), - Network accessline 10
[com.google.mlkit.genai.prompt](https://developer.android.com/android/reference/com/google/mlkit/genai/prompt/package-summary)). - Network accessline 10
[com.google.mlkit.genai.prompt](https://developer.android.com/android/reference/com/google/mlkit/genai/prompt/package-summary)). - Network accessline 21
If you need your responses in a certain format using the Structured Output API, you need to configure KSP and add additional dependencies. For details, see [Generate structured output](https://developer.android.com/agents/skills/device-ai/p - Network accessline 21
If you need your responses in a certain format using the Structured Output API, you need to configure KSP and add additional dependencies. For details, see [Generate structured output](https://developer.android.com/agents/skills/device-ai/p - Network accessline 23
[Generate structured output](https://developer.android.com/agents/skills/device-ai/prompt-api/references/structured-output). - Network accessline 23
[Generate structured output](https://developer.android.com/agents/skills/device-ai/prompt-api/references/structured-output). - Network accessline 169
For more information about the optional parameters, see [Optional configurations](https://developer.android.com/agents/skills/device-ai/ml-kit-genai-prompt-api/references/get-started#optional-configurations). - Network accessline 169
For more information about the optional parameters, see [Optional configurations](https://developer.android.com/agents/skills/device-ai/ml-kit-genai-prompt-api/references/get-started#optional-configurations). - Network accessline 170
configurations](https://developer.android.com/agents/skills/device-ai/ml-kit-genai-prompt-api/references/get-started#optional-configurations). - Network accessline 170
configurations](https://developer.android.com/agents/skills/device-ai/ml-kit-genai-prompt-api/references/get-started#optional-configurations). - Network accessline 244
For more information about streaming and non-streaming inference, see [Streaming versus non-streaming](https://developer.android.com/ml-kit/genai#streaming-vs-non). - Network accessline 244
For more information about streaming and non-streaming inference, see [Streaming versus non-streaming](https://developer.android.com/ml-kit/genai#streaming-vs-non). - Network accessline 245
versus non-streaming](https://developer.android.com/ml-kit/genai#streaming-vs-non). - Network accessline 245
versus non-streaming](https://developer.android.com/ml-kit/genai#streaming-vs-non). - Network accessline 264
For more guidance on setting optional configurations, see [`GenerateContentRequest`](https://developer.android.com/android/reference/kotlin/com/google/mlkit/genai/prompt/GenerateContentRequest). - Network accessline 264
For more guidance on setting optional configurations, see [`GenerateContentRequest`](https://developer.android.com/android/reference/kotlin/com/google/mlkit/genai/prompt/GenerateContentRequest). - Network accessline 265
[`GenerateContentRequest`](https://developer.android.com/android/reference/kotlin/com/google/mlkit/genai/prompt/GenerateContentRequest). - Network accessline 265
[`GenerateContentRequest`](https://developer.android.com/android/reference/kotlin/com/google/mlkit/genai/prompt/GenerateContentRequest). - Network accessline 269
- Input must be under 4000 tokens (or approximately 3000 English words). For more information, see the [`countTokens`](https://developer.android.com/android/reference/com/google/mlkit/genai/prompt/GenerativeModel#countTokens(com.google.mlki - Network accessline 269
- Input must be under 4000 tokens (or approximately 3000 English words). For more information, see the [`countTokens`](https://developer.android.com/android/reference/com/google/mlkit/genai/prompt/GenerativeModel#countTokens(com.google.mlki - Network accessline 270
- Use cases that require long output (more than 4K tokens) should be avoided. - AICore enforces an inference quota per app. For more information, see [Quota per application](https://developer.android.com/ml-kit/genai#quota-per). - Network accessline 270
- Use cases that require long output (more than 4K tokens) should be avoided. - AICore enforces an inference quota per app. For more information, see [Quota per application](https://developer.android.com/ml-kit/genai#quota-per). - Network accessline 272
per application](https://developer.android.com/ml-kit/genai#quota-per). - Network accessline 272
per application](https://developer.android.com/ml-kit/genai#quota-per).
device-ai/ml-kit-genai-prompt-api/references/prefix-caching.md
- Network accessline 14
- [Implicit (automatic) prefix caching](https://developer.android.com/agents/skills/device-ai/ml-kit-genai-prompt-api/references/prefix-caching#implicit) is a lightweight approach where the application only needs to define a shared portion - Network accessline 14
- [Implicit (automatic) prefix caching](https://developer.android.com/agents/skills/device-ai/ml-kit-genai-prompt-api/references/prefix-caching#implicit) is a lightweight approach where the application only needs to define a shared portion - Network accessline 15
- [Explicit (manual) prefix caching](https://developer.android.com/agents/skills/device-ai/ml-kit-genai-prompt-api/references/prefix-caching#explicit) allows applications to have more control over caches, including cache creation, querying, - Network accessline 15
- [Explicit (manual) prefix caching](https://developer.android.com/agents/skills/device-ai/ml-kit-genai-prompt-api/references/prefix-caching#explicit) allows applications to have more control over caches, including cache creation, querying, - Network accessline 62
- Prompt cache sizes are dependent on the length of the prefix. - To clear all caches created from prefix caching, use the [`generativeMode.clearImplicitCaches()`](https://developer.android.com/android/reference/kotlin/com/google/mlkit/ge - Network accessline 62
- Prompt cache sizes are dependent on the length of the prefix. - To clear all caches created from prefix caching, use the [`generativeMode.clearImplicitCaches()`](https://developer.android.com/android/reference/kotlin/com/google/mlkit/ge - Network accessline 64
[`generativeMode.clearImplicitCaches()`](https://developer.android.com/android/reference/kotlin/com/google/mlkit/genai/prompt/GenerativeModel#clearCaches%28%29) method. - Network accessline 64
[`generativeMode.clearImplicitCaches()`](https://developer.android.com/android/reference/kotlin/com/google/mlkit/genai/prompt/GenerativeModel#clearCaches%28%29) method.
device-ai/ml-kit-genai-prompt-api/references/prompt-design.md
- Network accessline 5
For more general prompt engineering guidance, see [Prompt Engineering whitepaper](https://www.kaggle.com/whitepaper-prompt-engineering), [Prompt Engineering for Generative - Network accessline 5
For more general prompt engineering guidance, see [Prompt Engineering whitepaper](https://www.kaggle.com/whitepaper-prompt-engineering), [Prompt Engineering for Generative - Network accessline 6
whitepaper](https://www.kaggle.com/whitepaper-prompt-engineering), [Prompt Engineering for Generative - Network accessline 6
whitepaper](https://www.kaggle.com/whitepaper-prompt-engineering), [Prompt Engineering for Generative - Network accessline 7
AI](https://developer.android.com/machine-learning/resources/prompt-eng), and [Prompt design strategies](https://ai.google.dev/gemini-api/docs/prompting-strategies). - Network accessline 7
AI](https://developer.android.com/machine-learning/resources/prompt-eng), and [Prompt design strategies](https://ai.google.dev/gemini-api/docs/prompting-strategies). - Network accessline 9
Alternatively, to automatically refine and improve prompts, you can use the [zero-shot optimizer](https://docs.cloud.google.com/vertex-ai/generative-ai/docs/learn/prompts/zero-shot-optimizer#optimizing_for_smaller_models), which can target - Network accessline 9
Alternatively, to automatically refine and improve prompts, you can use the [zero-shot optimizer](https://docs.cloud.google.com/vertex-ai/generative-ai/docs/learn/prompts/zero-shot-optimizer#optimizing_for_smaller_models), which can target - Network accessline 10
[zero-shot optimizer](https://docs.cloud.google.com/vertex-ai/generative-ai/docs/learn/prompts/zero-shot-optimizer#optimizing_for_smaller_models), which can target on-device models such as - Network accessline 10
[zero-shot optimizer](https://docs.cloud.google.com/vertex-ai/generative-ai/docs/learn/prompts/zero-shot-optimizer#optimizing_for_smaller_models), which can target on-device models such as - Network accessline 20
Consider using the [prefix caching](https://developer.android.com/agents/skills/device-ai/prompt-api/references/prefix-caching) feature when you use in-context - Network accessline 20
Consider using the [prefix caching](https://developer.android.com/agents/skills/device-ai/prompt-api/references/prefix-caching) feature when you use in-context - Network accessline 24
suboptimal results. Keep your prompt focused and to-the-point. If you need to repeat a short directive that guides the model's behavior, consider using [system instructions](https://developer.android.com/agents/skills/device-ai/prompt-a - Network accessline 24
suboptimal results. Keep your prompt focused and to-the-point. If you need to repeat a short directive that guides the model's behavior, consider using [system instructions](https://developer.android.com/agents/skills/device-ai/prompt-a - Network accessline 26
[system instructions](https://developer.android.com/agents/skills/device-ai/prompt-api/references/system-instructions). - Network accessline 26
[system instructions](https://developer.android.com/agents/skills/device-ai/prompt-api/references/system-instructions). - Network accessline 28
- **Structure prompts** to generate more effective responses, such as this [sample prompt template](https://cloud.google.com/vertex-ai/generative-ai/docs/learn/prompts/prompt-design-strategies#sample-prompt-template) that clearly defines - Network accessline 28
- **Structure prompts** to generate more effective responses, such as this [sample prompt template](https://cloud.google.com/vertex-ai/generative-ai/docs/learn/prompts/prompt-design-strategies#sample-prompt-template) that clearly defines - Network accessline 29
[sample prompt template](https://cloud.google.com/vertex-ai/generative-ai/docs/learn/prompts/prompt-design-strategies#sample-prompt-template) that clearly defines instructions, - Network accessline 29
[sample prompt template](https://cloud.google.com/vertex-ai/generative-ai/docs/learn/prompts/prompt-design-strategies#sample-prompt-template) that clearly defines instructions, - Network accessline 34
output for your use case and do manual post-processing to structure the output in the chosen format. To help ensure that the response output is in your preferred format, use the [Structured Output API](https://developer.android.com/agen - Network accessline 34
output for your use case and do manual post-processing to structure the output in the chosen format. To help ensure that the response output is in your preferred format, use the [Structured Output API](https://developer.android.com/agen - Network accessline 36
preferred format, use the [Structured Output API](https://developer.android.com/agents/skills/device-ai/prompt-api/references/structured-output). - Network accessline 36
preferred format, use the [Structured Output API](https://developer.android.com/agents/skills/device-ai/prompt-api/references/structured-output). - Network accessline 48
handle a more focused task, while using code to chain multiple calls together. If you do need to tackle a complex, reasoning-intensive task all at once, consider using [thinking mode](https://developer.android.com/ml-kit/genai/prompt/an - Network accessline 48
handle a more focused task, while using code to chain multiple calls together. If you do need to tackle a complex, reasoning-intensive task all at once, consider using [thinking mode](https://developer.android.com/ml-kit/genai/prompt/an - Network accessline 50
consider using [thinking mode](https://developer.android.com/ml-kit/genai/prompt/android/thinking-mode). - Network accessline 50
consider using [thinking mode](https://developer.android.com/ml-kit/genai/prompt/android/thinking-mode).
device-ai/ml-kit-genai-prompt-api/references/prompt-optimization.md
- Network accessline 6
The best practices for prompt design for Prompt API are at [Prompt Design](https://developer.android.com/agents/skills/device-ai/prompt-api/references/prompt-design). Apply these core rules: - Network accessline 6
The best practices for prompt design for Prompt API are at [Prompt Design](https://developer.android.com/agents/skills/device-ai/prompt-api/references/prompt-design). Apply these core rules: - Network accessline 7
[Prompt Design](https://developer.android.com/agents/skills/device-ai/prompt-api/references/prompt-design). Apply these core rules: - Network accessline 7
[Prompt Design](https://developer.android.com/agents/skills/device-ai/prompt-api/references/prompt-design). Apply these core rules: - Network accessline 10
- Make prompts concise. Remove duplicate or repeated instructions. Do not include conversational filler such as: hello, please, do this, help me with, etc. For example, a verbose prompt such as: "Hello! I want you to act as an expert transl - Network accessline 10
- Make prompts concise. Remove duplicate or repeated instructions. Do not include conversational filler such as: hello, please, do this, help me with, etc. For example, a verbose prompt such as: "Hello! I want you to act as an expert transl - Network accessline 11
- Use paired XML/HTML delimiters to denote dynamic inputs (for example `<email>[content]</email>`) to clearly isolate user data from prompt instructions. Mention that the delimiters represent placeholder text that should be replaced by code - Network accessline 11
- Use paired XML/HTML delimiters to denote dynamic inputs (for example `<email>[content]</email>`) to clearly isolate user data from prompt instructions. Mention that the delimiters represent placeholder text that should be replaced by code - Network accessline 12
- Use the [Structured Output API](https://developer.android.com/agents/skills/device-ai/prompt-api/references/structured-output) if the output requires parsing responses into certain formats. Don't include the Structured Output API implemen - Network accessline 12
- Use the [Structured Output API](https://developer.android.com/agents/skills/device-ai/prompt-api/references/structured-output) if the output requires parsing responses into certain formats. Don't include the Structured Output API implemen - Network accessline 14
- Use [system instructions](https://developer.android.com/agents/skills/device-ai/prompt-api/references/system-instructions) for short instructions that define how a model should behave, and use [prefix caching](https://developer.android.co - Network accessline 14
- Use [system instructions](https://developer.android.com/agents/skills/device-ai/prompt-api/references/system-instructions) for short instructions that define how a model should behave, and use [prefix caching](https://developer.android.co
device-ai/ml-kit-genai-prompt-api/references/structured-output.md
- Network accessline 32
- Works in Kotlin only. - ProGuard might interfere with the parsing of your annotated class. Add your annotated class to your [keep rules](https://developer.android.com/topic/performance/app-optimization/keep-rules-overview) to exclude them - Network accessline 32
- Works in Kotlin only. - ProGuard might interfere with the parsing of your annotated class. Add your annotated class to your [keep rules](https://developer.android.com/topic/performance/app-optimization/keep-rules-overview) to exclude them - Network accessline 33
- ProGuard might interfere with the parsing of your annotated class. Add your annotated class to your [keep rules](https://developer.android.com/topic/performance/app-optimization/keep-rules-overview) to exclude them from ProGuard if you ge - Network accessline 33
- ProGuard might interfere with the parsing of your annotated class. Add your annotated class to your [keep rules](https://developer.android.com/topic/performance/app-optimization/keep-rules-overview) to exclude them from ProGuard if you ge - Network accessline 42
1. [Add the ML Kit Prompt API as a dependency](https://developer.android.com/agents/skills/device-ai/prompt-api/references/get-started#configure-project) in your - Network accessline 42
1. [Add the ML Kit Prompt API as a dependency](https://developer.android.com/agents/skills/device-ai/prompt-api/references/get-started#configure-project) in your - Network accessline 209
To check if your structured prompt is within the input token limit, calculate the token count using the [`countTokens()`](https://developer.android.com/android/reference/com/google/mlkit/genai/prompt/GenerativeModel#countTokens(com.google.m - Network accessline 209
To check if your structured prompt is within the input token limit, calculate the token count using the [`countTokens()`](https://developer.android.com/android/reference/com/google/mlkit/genai/prompt/GenerativeModel#countTokens(com.google.m - Network accessline 210
the token count using the [`countTokens()`](https://developer.android.com/android/reference/com/google/mlkit/genai/prompt/GenerativeModel#countTokens(com.google.mlkit.genai.prompt.GenerateContentRequest)) method. - Network accessline 210
the token count using the [`countTokens()`](https://developer.android.com/android/reference/com/google/mlkit/genai/prompt/GenerativeModel#countTokens(com.google.mlkit.genai.prompt.GenerateContentRequest)) method.
device-ai/ml-kit-genai-prompt-api/references/system-instructions.md
- Network accessline 14
System instructions work on devices running Gemini Nano V3 and higher. For a list of supported devices, see [Prompt API device support](https://developer.android.com/ml-kit/genai#prompt-device). - Network accessline 14
System instructions work on devices running Gemini Nano V3 and higher. For a list of supported devices, see [Prompt API device support](https://developer.android.com/ml-kit/genai#prompt-device). - Network accessline 15
list of supported devices, see [Prompt API device support](https://developer.android.com/ml-kit/genai#prompt-device). - Network accessline 15
list of supported devices, see [Prompt API device support](https://developer.android.com/ml-kit/genai#prompt-device). - Network accessline 19
We don't recommend using system instructions with [prefix caching](https://developer.android.com/agents/skills/device-ai/prompt-api/references/prefix-caching). In general, use system instructions for - Network accessline 19
We don't recommend using system instructions with [prefix caching](https://developer.android.com/agents/skills/device-ai/prompt-api/references/prefix-caching). In general, use system instructions for - Network accessline 20
[prefix caching](https://developer.android.com/agents/skills/device-ai/prompt-api/references/prefix-caching). In general, use system instructions for - Network accessline 20
[prefix caching](https://developer.android.com/agents/skills/device-ai/prompt-api/references/prefix-caching). In general, use system instructions for
devtools/android-cli/SKILL.md
- Dangerous shell operationline 33
- Linux x86-64: curl -fsSL https://dl.google.com/android/cli/latest/linux_x86_64/install.sh \| bash - Dangerous shell operationline 33
- Linux x86-64: curl -fsSL https://dl.google.com/android/cli/latest/linux_x86_64/install.sh \| bash - Network accessline 33
- Linux x86-64: curl -fsSL https://dl.google.com/android/cli/latest/linux_x86_64/install.sh \| bash - Network accessline 33
- Linux x86-64: curl -fsSL https://dl.google.com/android/cli/latest/linux_x86_64/install.sh \| bash - Dangerous shell operationline 34
- Linux ARM64: curl -fsSL https://dl.google.com/android/cli/latest/linux_arm64/install.sh \| bash - Dangerous shell operationline 34
- Linux ARM64: curl -fsSL https://dl.google.com/android/cli/latest/linux_arm64/install.sh \| bash - Network accessline 34
- Linux ARM64: curl -fsSL https://dl.google.com/android/cli/latest/linux_arm64/install.sh \| bash - Network accessline 34
- Linux ARM64: curl -fsSL https://dl.google.com/android/cli/latest/linux_arm64/install.sh \| bash - Dangerous shell operationline 35
- Mac Arm: curl -fsSL https://dl.google.com/android/cli/latest/darwin_arm64/install.sh \| bash - Dangerous shell operationline 35
- Mac Arm: curl -fsSL https://dl.google.com/android/cli/latest/darwin_arm64/install.sh \| bash - Network accessline 35
- Mac Arm: curl -fsSL https://dl.google.com/android/cli/latest/darwin_arm64/install.sh \| bash - Network accessline 35
- Mac Arm: curl -fsSL https://dl.google.com/android/cli/latest/darwin_arm64/install.sh \| bash - Dangerous shell operationline 36
- Mac Intel: curl -fsSL https://dl.google.com/android/cli/latest/darwin_x86_64/install.sh \| bash - Dangerous shell operationline 36
- Mac Intel: curl -fsSL https://dl.google.com/android/cli/latest/darwin_x86_64/install.sh \| bash - Network accessline 36
- Mac Intel: curl -fsSL https://dl.google.com/android/cli/latest/darwin_x86_64/install.sh \| bash - Network accessline 36
- Mac Intel: curl -fsSL https://dl.google.com/android/cli/latest/darwin_x86_64/install.sh \| bash - Network accessline 37
- Windows: curl -fsSL https://dl.google.com/android/cli/latest/windows_x86_64/install.cmd -o "%TEMP%\\i.cmd" \&\& "%TEMP%\\i.cmd" - Network accessline 37
- Windows: curl -fsSL https://dl.google.com/android/cli/latest/windows_x86_64/install.cmd -o "%TEMP%\\i.cmd" \&\& "%TEMP%\\i.cmd"
identity/restore-credentials/SKILL.md
- Network accessline 142
1. [**Create a restore key**](#create-restore-key): To create a restore key, complete the following steps: 1. [**Instantiate Credential Manager**](#implementation-guide): Create a `CredentialManager` object. 2. [**Get credential creat - Network accessline 142
1. [**Create a restore key**](#create-restore-key): To create a restore key, complete the following steps: 1. [**Instantiate Credential Manager**](#implementation-guide): Create a `CredentialManager` object. 2. [**Get credential creat - Network accessline 143
1. [**Instantiate Credential Manager**](#implementation-guide): Create a `CredentialManager` object. 2. [**Get credential creation options from the app server**](https://developer.mozilla.org/en-US/docs/Web/API/Web_Authentication_API): S - Network accessline 143
1. [**Instantiate Credential Manager**](#implementation-guide): Create a `CredentialManager` object. 2. [**Get credential creation options from the app server**](https://developer.mozilla.org/en-US/docs/Web/API/Web_Authentication_API): S - Network accessline 144
2. [**Get credential creation options from the app server**](https://developer.mozilla.org/en-US/docs/Web/API/Web_Authentication_API): Send the client app the details required to create the restore key from your app server. - Network accessline 144
2. [**Get credential creation options from the app server**](https://developer.mozilla.org/en-US/docs/Web/API/Web_Authentication_API): Send the client app the details required to create the restore key from your app server. - Network accessline 145
3. [**Create the restore key**](https://w3c.github.io/webauthn/#dictdef-publickeycredentialcreationoptionsjson): Create a restore key for the user's account if the user is signed in to your app. - Network accessline 145
3. [**Create the restore key**](https://w3c.github.io/webauthn/#dictdef-publickeycredentialcreationoptionsjson): Create a restore key for the user's account if the user is signed in to your app. - Network accessline 146
4. [**Handle the credential creation response**](https://w3c.github.io/webauthn/#dictdef-publickeycredentialrequestoptionsjson): Send the credentials from your client app to your app server for processing, and handle any exceptions. - Network accessline 146
4. [**Handle the credential creation response**](https://w3c.github.io/webauthn/#dictdef-publickeycredentialrequestoptionsjson): Send the credentials from your client app to your app server for processing, and handle any exceptions. - Network accessline 181
the user, the app, and additional configuration properties. For more information about the server-side implementation, see [Server-side guidance](https://developers.google.com/identity/passkeys/developer-guides/server-registration). - Network accessline 181
the user, the app, and additional configuration properties. For more information about the server-side implementation, see [Server-side guidance](https://developers.google.com/identity/passkeys/developer-guides/server-registration). - Network accessline 183
guidance](https://developers.google.com/identity/passkeys/developer-guides/server-registration). - Network accessline 183
guidance](https://developers.google.com/identity/passkeys/developer-guides/server-registration). - Network accessline 187
After parsing the public key creation options sent by the server, create a restore key by wrapping these options in a [`CreateRestoreCredentialRequest`](https://developer.android.com/reference/androidx/credentials/CreateRestoreCredentialReq - Network accessline 187
After parsing the public key creation options sent by the server, create a restore key by wrapping these options in a [`CreateRestoreCredentialRequest`](https://developer.android.com/reference/androidx/credentials/CreateRestoreCredentialReq - Network accessline 188
restore key by wrapping these options in a [`CreateRestoreCredentialRequest`](https://developer.android.com/reference/androidx/credentials/CreateRestoreCredentialRequest) object and calling the [`createCredential()`](https://developer.andro - Network accessline 188
restore key by wrapping these options in a [`CreateRestoreCredentialRequest`](https://developer.android.com/reference/androidx/credentials/CreateRestoreCredentialRequest) object and calling the [`createCredential()`](https://developer.andro - Network accessline 189
[`CreateRestoreCredentialRequest`](https://developer.android.com/reference/androidx/credentials/CreateRestoreCredentialRequest) object and calling the - Network accessline 189
[`CreateRestoreCredentialRequest`](https://developer.android.com/reference/androidx/credentials/CreateRestoreCredentialRequest) object and calling the - Network accessline 190
[`createCredential()`](https://developer.android.com/reference/androidx/credentials/CredentialManager#createCredential(android.content.Context,androidx.credentials.CreateCredentialRequest)) method with the `CredentialManager` object. - Network accessline 190
[`createCredential()`](https://developer.android.com/reference/androidx/credentials/CredentialManager#createCredential(android.content.Context,androidx.credentials.CreateCredentialRequest)) method with the `CredentialManager` object. - Network accessline 199
- `requestJson`: The credential creation options sent by the app server in the [Web Authentication API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Authentication_API) format for [`PublicKeyCredentialCreationOptionsJSON`](https://w - Network accessline 199
- `requestJson`: The credential creation options sent by the app server in the [Web Authentication API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Authentication_API) format for [`PublicKeyCredentialCreationOptionsJSON`](https://w - Network accessline 212
The Credential Manager API returns a response of type [`CreateRestoreCredentialResponse`](https://developer.android.com/reference/androidx/credentials/CreateRestoreCredentialResponse). This response holds the public key - Network accessline 212
The Credential Manager API returns a response of type [`CreateRestoreCredentialResponse`](https://developer.android.com/reference/androidx/credentials/CreateRestoreCredentialResponse). This response holds the public key - Network accessline 213
[`CreateRestoreCredentialResponse`](https://developer.android.com/reference/androidx/credentials/CreateRestoreCredentialResponse). This response holds the public key - Network accessline 213
[`CreateRestoreCredentialResponse`](https://developer.android.com/reference/androidx/credentials/CreateRestoreCredentialResponse). This response holds the public key - Network accessline 214
credential registration response in [JSON format](https://w3c.github.io/webauthn/#authenticatorattestationresponse). - Network accessline 214
credential registration response in [JSON format](https://w3c.github.io/webauthn/#authenticatorattestationresponse). - Network accessline 224
- [`CreateRestoreCredentialDomException`](https://developer.android.com/reference/androidx/credentials/exceptions/restorecredential/CreateRestoreCredentialDomException): This exception occurs if `requestJson` is invalid and does not follow - Network accessline 224
- [`CreateRestoreCredentialDomException`](https://developer.android.com/reference/androidx/credentials/exceptions/restorecredential/CreateRestoreCredentialDomException): This exception occurs if `requestJson` is invalid and does not follow - Network accessline 225
- [`E2eeUnavailableException`](https://developer.android.com/reference/androidx/credentials/exceptions/restorecredential/E2eeUnavailableException): This exception occurs if `isCloudBackupEnabled` is `true`, but the user's device doesn't hav - Network accessline 225
- [`E2eeUnavailableException`](https://developer.android.com/reference/androidx/credentials/exceptions/restorecredential/E2eeUnavailableException): This exception occurs if `isCloudBackupEnabled` is `true`, but the user's device doesn't hav - Network accessline 227
- `IllegalArgumentException`: This exception occurs if `createRestoreRequest` is empty or not valid JSON, or if it doesn't have a valid `user.id` that conforms to the WebAuthn [specifications](https://w3c.github.io/webauthn/#dictdef-publick - Network accessline 227
- `IllegalArgumentException`: This exception occurs if `createRestoreRequest` is empty or not valid JSON, or if it doesn't have a valid `user.id` that conforms to the WebAuthn [specifications](https://w3c.github.io/webauthn/#dictdef-publick - Network accessline 237
For similar passkey guidance for this step, see [Sign in with a passkey](references/android/identity/passkeys/sign-in-with-passkeys.md). For more information about the server-side implementation, see the [server-side authentication guide](h - Network accessline 237
For similar passkey guidance for this step, see [Sign in with a passkey](references/android/identity/passkeys/sign-in-with-passkeys.md). For more information about the server-side implementation, see the [server-side authentication guide](h - Network accessline 239
authentication guide](https://developers.google.com/identity/passkeys/developer-guides/server-authentication#create_credential_request_options). - Network accessline 239
authentication guide](https://developers.google.com/identity/passkeys/developer-guides/server-authentication#create_credential_request_options). - Network accessline 248
- On the first launch of the app on the device. Credential restoration in this scenario is independent of restoration of the app data. - If app data backup and restore is enabled, get the restore key immediately after the app data is restor - Network accessline 248
- On the first launch of the app on the device. Credential restoration in this scenario is independent of restoration of the app data. - If app data backup and restore is enabled, get the restore key immediately after the app data is restor - Network accessline 249
- If app data backup and restore is enabled, get the restore key immediately after the app data is restored. Use [`BackupAgent`](https://developer.android.com/reference/android/app/backup/BackupAgent) to configure your app's backup and ensu - Network accessline 249
- If app data backup and restore is enabled, get the restore key immediately after the app data is restored. Use [`BackupAgent`](https://developer.android.com/reference/android/app/backup/BackupAgent) to configure your app's backup and ensu - Network accessline 271
The credential manager APIs return a response of type [`GetCredentialResponse`](https://developer.android.com/reference/android/credentials/GetCredentialResponse). The credential contained in this response is - Network accessline 271
The credential manager APIs return a response of type [`GetCredentialResponse`](https://developer.android.com/reference/android/credentials/GetCredentialResponse). The credential contained in this response is - Network accessline 272
[`GetCredentialResponse`](https://developer.android.com/reference/android/credentials/GetCredentialResponse). The credential contained in this response is - Network accessline 272
[`GetCredentialResponse`](https://developer.android.com/reference/android/credentials/GetCredentialResponse). The credential contained in this response is - Network accessline 302
- **System-level actions**: Users uninstall the app or clear its data. - **App-level calls** : Programmatically delete the key by calling [`clearCredentialState()`](https://developer.android.com/reference/androidx/credentials/CredentialMana - Network accessline 302
- **System-level actions**: Users uninstall the app or clear its data. - **App-level calls** : Programmatically delete the key by calling [`clearCredentialState()`](https://developer.android.com/reference/androidx/credentials/CredentialMana - Network accessline 303
- **App-level calls** : Programmatically delete the key by calling [`clearCredentialState()`](https://developer.android.com/reference/androidx/credentials/CredentialManager#clearCredentialState(androidx.credentials.ClearCredentialStateReque - Network accessline 303
- **App-level calls** : Programmatically delete the key by calling [`clearCredentialState()`](https://developer.android.com/reference/androidx/credentials/CredentialManager#clearCredentialState(androidx.credentials.ClearCredentialStateReque - Network accessline 349
- [MDN Web Authentication API Documentation](https://developer.mozilla.org/en-US/docs/Web/API/Web_Authentication_API): Mozilla Developer Network - Network accessline 349
- [MDN Web Authentication API Documentation](https://developer.mozilla.org/en-US/docs/Web/API/Web_Authentication_API): Mozilla Developer Network - Network accessline 352
- [W3C `PublicKeyCredentialCreationOptionsJSON`](https://w3c.github.io/webauthn/#dictdef-publickeycredentialcreationoptionsjson): Data structure definition for WebAuthn credential creation requests in JSON format. - Network accessline 352
- [W3C `PublicKeyCredentialCreationOptionsJSON`](https://w3c.github.io/webauthn/#dictdef-publickeycredentialcreationoptionsjson): Data structure definition for WebAuthn credential creation requests in JSON format. - Network accessline 355
- [W3C `PublicKeyCredentialRequestOptionsJSON`](https://w3c.github.io/webauthn/#dictdef-publickeycredentialrequestoptionsjson): Data structure definition for WebAuthn authentication or assertion requests in JSON format. - Network accessline 355
- [W3C `PublicKeyCredentialRequestOptionsJSON`](https://w3c.github.io/webauthn/#dictdef-publickeycredentialrequestoptionsjson): Data structure definition for WebAuthn authentication or assertion requests in JSON format.
identity/restore-credentials/references/android/guide/topics/manifest/application-element.md
- Network accessline 61
contained in: : `https://developer.android.com/guide/topics/manifest/manifest-element` - Network accessline 61
contained in: : `https://developer.android.com/guide/topics/manifest/manifest-element` - Network accessline 62
: `https://developer.android.com/guide/topics/manifest/manifest-element` - Network accessline 62
: `https://developer.android.com/guide/topics/manifest/manifest-element` - Network accessline 64
can contain: : `https://developer.android.com/guide/topics/manifest/activity-element` - Network accessline 64
can contain: : `https://developer.android.com/guide/topics/manifest/activity-element` - Network accessline 65
: `https://developer.android.com/guide/topics/manifest/activity-element` - Network accessline 65
: `https://developer.android.com/guide/topics/manifest/activity-element` - Network accessline 67
`https://developer.android.com/guide/topics/manifest/activity-alias-element` - Network accessline 67
`https://developer.android.com/guide/topics/manifest/activity-alias-element` - Network accessline 69
`https://developer.android.com/guide/topics/manifest/meta-data-element` - Network accessline 69
`https://developer.android.com/guide/topics/manifest/meta-data-element` - Network accessline 71
`https://developer.android.com/guide/topics/manifest/service-element` - Network accessline 71
`https://developer.android.com/guide/topics/manifest/service-element` - Network accessline 73
`https://developer.android.com/guide/topics/manifest/receiver-element` - Network accessline 73
`https://developer.android.com/guide/topics/manifest/receiver-element` - Network accessline 75
`https://developer.android.com/guide/topics/manifest/profileable-element` - Network accessline 75
`https://developer.android.com/guide/topics/manifest/profileable-element` - Network accessline 77
`https://developer.android.com/guide/topics/manifest/provider-element` - Network accessline 77
`https://developer.android.com/guide/topics/manifest/provider-element` - Network accessline 79
`https://developer.android.com/guide/topics/manifest/uses-library-element` - Network accessline 79
`https://developer.android.com/guide/topics/manifest/uses-library-element` - Network accessline 81
`https://developer.android.com/guide/topics/manifest/uses-native-library-element` - Network accessline 81
`https://developer.android.com/guide/topics/manifest/uses-native-library-element` - Network accessline 83
`https://developer.android.com/guide/topics/manifest/property-element` - Network accessline 83
`https://developer.android.com/guide/topics/manifest/property-element` - Network accessline 110
The `https://developer.android.com/guide/topics/manifest/activity-element` - Network accessline 110
The `https://developer.android.com/guide/topics/manifest/activity-element` - Network accessline 111
`https://developer.android.com/guide/topics/manifest/activity-element` - Network accessline 111
`https://developer.android.com/guide/topics/manifest/activity-element` - Network accessline 112
element has its own `https://developer.android.com/guide/topics/manifest/activity-element#reparent` attribute that can override the value set here. - Network accessline 112
element has its own `https://developer.android.com/guide/topics/manifest/activity-element#reparent` attribute that can override the value set here. - Network accessline 113
`https://developer.android.com/guide/topics/manifest/activity-element#reparent` - Network accessline 113
`https://developer.android.com/guide/topics/manifest/activity-element#reparent` - Network accessline 123
attribute is `"true"`. If your app processes sensitive data, you can keep this attribute set to `"true"` and configure [`android:dataExtractionRules`](https://developer.android.com/guide/topics/manifest/application-element#d - Network accessline 123
attribute is `"true"`. If your app processes sensitive data, you can keep this attribute set to `"true"` and configure [`android:dataExtractionRules`](https://developer.android.com/guide/topics/manifest/application-element#d - Network accessline 124
this attribute set to `"true"` and configure [`android:dataExtractionRules`](https://developer.android.com/guide/topics/manifest/application-element#dataExtractionRules) to safely exclude sensitive keys or temporary caches w - Network accessline 124
this attribute set to `"true"` and configure [`android:dataExtractionRules`](https://developer.android.com/guide/topics/manifest/application-element#dataExtractionRules) to safely exclude sensitive keys or temporary caches w - Network accessline 125
[`android:dataExtractionRules`](https://developer.android.com/guide/topics/manifest/application-element#dataExtractionRules) to safely - Network accessline 125
[`android:dataExtractionRules`](https://developer.android.com/guide/topics/manifest/application-element#dataExtractionRules) to safely - Network accessline 138
For more information, see the [backup and restore](https://developer.android.com/about/versions/12/behavior-changes-12#backup-restore) section - Network accessline 138
For more information, see the [backup and restore](https://developer.android.com/about/versions/12/behavior-changes-12#backup-restore) section - Network accessline 139
[backup and restore](https://developer.android.com/about/versions/12/behavior-changes-12#backup-restore) section - Network accessline 139
[backup and restore](https://developer.android.com/about/versions/12/behavior-changes-12#backup-restore) section - Network accessline 154
For more information, see [Data backup overview](https://developer.android.com/guide/topics/data/backup). - Network accessline 154
For more information, see [Data backup overview](https://developer.android.com/guide/topics/data/backup). - Network accessline 165
For more information, see the guide to [Secure Background Activity Launches](https://developer.android.com/guide/components/activities/secure-bal). - Network accessline 165
For more information, see the guide to [Secure Background Activity Launches](https://developer.android.com/guide/components/activities/secure-bal). - Network accessline 166
[Secure Background Activity Launches](https://developer.android.com/guide/components/activities/secure-bal). - Network accessline 166
[Secure Background Activity Launches](https://developer.android.com/guide/components/activities/secure-bal). - Network accessline 176
For more information, see [Tagged Pointers](https://source.android.com/devices/tech/debug/tagged-pointers). - Network accessline 176
For more information, see [Tagged Pointers](https://source.android.com/devices/tech/debug/tagged-pointers). - Network accessline 200
`android:backupAgent` : The name of the class that implements the application's backup agent, a subclass of `https://developer.android.com/reference/android/app/backup/BackupAgent`. The attribute value is - Network accessline 200
`android:backupAgent` : The name of the class that implements the application's backup agent, a subclass of `https://developer.android.com/reference/android/app/backup/BackupAgent`. The attribute value is - Network accessline 201
: The name of the class that implements the application's backup agent, a subclass of `https://developer.android.com/reference/android/app/backup/BackupAgent`. The attribute value is a fully qualified class name, such as ` - Network accessline 201
: The name of the class that implements the application's backup agent, a subclass of `https://developer.android.com/reference/android/app/backup/BackupAgent`. The attribute value is a fully qualified class name, such as ` - Network accessline 202
a subclass of `https://developer.android.com/reference/android/app/backup/BackupAgent`. The attribute value is - Network accessline 202
a subclass of `https://developer.android.com/reference/android/app/backup/BackupAgent`. The attribute value is - Network accessline 205
for example, `".MyBackupAgent"`, it is appended to the package name specified in the `https://developer.android.com/guide/topics/manifest/manifest-element` - Network accessline 205
for example, `".MyBackupAgent"`, it is appended to the package name specified in the `https://developer.android.com/guide/topics/manifest/manifest-element` - Network accessline 206
package name specified in the `https://developer.android.com/guide/topics/manifest/manifest-element` element. - Network accessline 206
package name specified in the `https://developer.android.com/guide/topics/manifest/manifest-element` element. - Network accessline 207
`https://developer.android.com/guide/topics/manifest/manifest-element` - Network accessline 207
`https://developer.android.com/guide/topics/manifest/manifest-element` - Network accessline 213
`android:backupInForeground` : Indicates that [Auto Backup](https://developer.android.com/guide/topics/data/autobackup) operations - Network accessline 213
`android:backupInForeground` : Indicates that [Auto Backup](https://developer.android.com/guide/topics/data/autobackup) operations - Network accessline 214
: Indicates that [Auto Backup](https://developer.android.com/guide/topics/data/autobackup) operations can be performed on this app even if the app is in a foreground-equivalent - Network accessline 214
: Indicates that [Auto Backup](https://developer.android.com/guide/topics/data/autobackup) operations can be performed on this app even if the app is in a foreground-equivalent - Network accessline 215
[Auto Backup](https://developer.android.com/guide/topics/data/autobackup) operations - Network accessline 215
[Auto Backup](https://developer.android.com/guide/topics/data/autobackup) operations - Network accessline 222
backing up the app while it's running in the foreground, such as a music app that is actively playing music using a service in the `https://developer.android.com/reference/android/app/Service#startForeground(int, android.app - Network accessline 222
backing up the app while it's running in the foreground, such as a music app that is actively playing music using a service in the `https://developer.android.com/reference/android/app/Service#startForeground(int, android.app - Network accessline 224
`https://developer.android.com/reference/android/app/Service#startForeground(int, android.app.Notification)` state. - Network accessline 224
`https://developer.android.com/reference/android/app/Service#startForeground(int, android.app.Notification)` state. - Network accessline 226
`android:banner` : A [drawable resource](https://developer.android.com/guide/topics/resources/drawable-resource) - Network accessline 226
`android:banner` : A [drawable resource](https://developer.android.com/guide/topics/resources/drawable-resource) - Network accessline 227
: A [drawable resource](https://developer.android.com/guide/topics/resources/drawable-resource) - Network accessline 227
: A [drawable resource](https://developer.android.com/guide/topics/resources/drawable-resource) - Network accessline 228
providing an extended graphical banner for its associated item. Use with the `<application>` tag to supply a default banner for all application activities or with the [`<activity>`](https://developer.android.com/guide/topics - Network accessline 228
providing an extended graphical banner for its associated item. Use with the `<application>` tag to supply a default banner for all application activities or with the [`<activity>`](https://developer.android.com/guide/topics - Network accessline 229
`<application>` tag to supply a default banner for all application activities or with the [`<activity>`](https://developer.android.com/guide/topics/manifest/activity-element) tag to supply a banner for a specific activity. - Network accessline 229
`<application>` tag to supply a default banner for all application activities or with the [`<activity>`](https://developer.android.com/guide/topics/manifest/activity-element) tag to supply a banner for a specific activity. - Network accessline 230
[`<activity>`](https://developer.android.com/guide/topics/manifest/activity-element) - Network accessline 230
[`<activity>`](https://developer.android.com/guide/topics/manifest/activity-element) - Network accessline 233
The system uses the banner to represent an app in the Android TV home screen. Therefore, only specify this for applications with an activity that handles the `https://developer.android.com/reference/android/content/Intent#CA - Network accessline 233
The system uses the banner to represent an app in the Android TV home screen. Therefore, only specify this for applications with an activity that handles the `https://developer.android.com/reference/android/content/Intent#CA - Network accessline 235
`https://developer.android.com/reference/android/content/Intent#CATEGORY_LEANBACK_LAUNCHER` intent. - Network accessline 235
`https://developer.android.com/reference/android/content/Intent#CATEGORY_LEANBACK_LAUNCHER` intent. - Network accessline 242
For more information, see [Provide a home screen banner](https://developer.android.com/training/tv/start/start#banner). - Network accessline 242
For more information, see [Provide a home screen banner](https://developer.android.com/training/tv/start/start#banner). - Network accessline 252
For information about the format of the XML file, see [Backup and restore](https://developer.android.com/about/versions/12/behavior-changes-12#backup-restore). - Network accessline 252
For information about the format of the XML file, see [Backup and restore](https://developer.android.com/about/versions/12/behavior-changes-12#backup-restore). - Network accessline 302
For more information, see the guide on [automatic package visibility filtering](https://developer.android.com/training/package-visibility/automatic). - Network accessline 302
For more information, see the guide on [automatic package visibility filtering](https://developer.android.com/training/package-visibility/automatic). - Network accessline 303
[automatic package visibility filtering](https://developer.android.com/training/package-visibility/automatic). - Network accessline 303
[automatic package visibility filtering](https://developer.android.com/training/package-visibility/automatic). - Network accessline 305
`android:fullBackupContent` : This attribute points to an XML file that contains full backup rules for [Auto Backup](https://developer.android.com/guide/topics/data/autobackup). - Network accessline 305
`android:fullBackupContent` : This attribute points to an XML file that contains full backup rules for [Auto Backup](https://developer.android.com/guide/topics/data/autobackup). - Network accessline 306
: This attribute points to an XML file that contains full backup rules for [Auto Backup](https://developer.android.com/guide/topics/data/autobackup). These rules determine what files get backed up. For more information, se - Network accessline 306
: This attribute points to an XML file that contains full backup rules for [Auto Backup](https://developer.android.com/guide/topics/data/autobackup). These rules determine what files get backed up. For more information, se - Network accessline 307
[Auto Backup](https://developer.android.com/guide/topics/data/autobackup). - Network accessline 307
[Auto Backup](https://developer.android.com/guide/topics/data/autobackup). - Network accessline 308
These rules determine what files get backed up. For more information, see the [XML config syntax](https://developer.android.com/guide/topics/data/autobackup#XMLSyntax) for Auto Backup. - Network accessline 308
These rules determine what files get backed up. For more information, see the [XML config syntax](https://developer.android.com/guide/topics/data/autobackup#XMLSyntax) for Auto Backup. - Network accessline 309
[XML config syntax](https://developer.android.com/guide/topics/data/autobackup#XMLSyntax) - Network accessline 309
[XML config syntax](https://developer.android.com/guide/topics/data/autobackup#XMLSyntax) - Network accessline 313
This attribute is optional. If it is not specified, by default, Auto Backup includes most of your app's files. For more information, see [Files that are backed up](https://developer.android.com/guide/topics/data/autobackup#F - Network accessline 313
This attribute is optional. If it is not specified, by default, Auto Backup includes most of your app's files. For more information, see [Files that are backed up](https://developer.android.com/guide/topics/data/autobackup#F - Network accessline 315
[Files that are backed up](https://developer.android.com/guide/topics/data/autobackup#Files). - Network accessline 315
[Files that are backed up](https://developer.android.com/guide/topics/data/autobackup#Files). - Network accessline 317
`android:fullBackupOnly` : This attribute indicates whether to use [Auto Backup](https://developer.android.com/guide/topics/data/autobackup) on devices - Network accessline 317
`android:fullBackupOnly` : This attribute indicates whether to use [Auto Backup](https://developer.android.com/guide/topics/data/autobackup) on devices - Network accessline 318
: This attribute indicates whether to use [Auto Backup](https://developer.android.com/guide/topics/data/autobackup) on devices where it is available. If set to `"true"`, then your app performs - Network accessline 318
: This attribute indicates whether to use [Auto Backup](https://developer.android.com/guide/topics/data/autobackup) on devices where it is available. If set to `"true"`, then your app performs - Network accessline 319
[Auto Backup](https://developer.android.com/guide/topics/data/autobackup) on devices - Network accessline 319
[Auto Backup](https://developer.android.com/guide/topics/data/autobackup) on devices - Network accessline 321
Auto Backup when installed on a device running Android 6.0 (API level 23) or higher. On older devices, your app ignores this attribute and performs [key/value backups](https://developer.android.com/guide/topics/data/keyvalue - Network accessline 321
Auto Backup when installed on a device running Android 6.0 (API level 23) or higher. On older devices, your app ignores this attribute and performs [key/value backups](https://developer.android.com/guide/topics/data/keyvalue - Network accessline 323
[key/value backups](https://developer.android.com/guide/topics/data/keyvaluebackup). - Network accessline 323
[key/value backups](https://developer.android.com/guide/topics/data/keyvaluebackup). - Network accessline 328
`android:gwpAsanMode` : This attribute indicates whether to use [GWP-ASan](https://developer.android.com/ndk/guides/gwp-asan), a native memory allocator feature that helps - Network accessline 328
`android:gwpAsanMode` : This attribute indicates whether to use [GWP-ASan](https://developer.android.com/ndk/guides/gwp-asan), a native memory allocator feature that helps - Network accessline 329
: This attribute indicates whether to use [GWP-ASan](https://developer.android.com/ndk/guides/gwp-asan), a native memory allocator feature that helps find use-after-free and heap-buffer-overflow bugs. - Network accessline 329
: This attribute indicates whether to use [GWP-ASan](https://developer.android.com/ndk/guides/gwp-asan), a native memory allocator feature that helps find use-after-free and heap-buffer-overflow bugs. - Network accessline 330
[GWP-ASan](https://developer.android.com/ndk/guides/gwp-asan), a native memory allocator feature that helps - Network accessline 330
[GWP-ASan](https://developer.android.com/ndk/guides/gwp-asan), a native memory allocator feature that helps - Network accessline 355
For example, your app might support [Play feature delivery](https://developer.android.com/platform/technology/app-bundle) and include feature - Network accessline 355
For example, your app might support [Play feature delivery](https://developer.android.com/platform/technology/app-bundle) and include feature - Network accessline 356
[Play feature delivery](https://developer.android.com/platform/technology/app-bundle) and include feature - Network accessline 356
[Play feature delivery](https://developer.android.com/platform/technology/app-bundle) and include feature - Network accessline 367
activities and views in this application. It's `"true"` if it is enabled and `"false"` if not. The default value is `"true"` if you set either [`minSdkVersion`](https://developer.android.com/guide/topics/manifest/uses-sdk-el - Network accessline 367
activities and views in this application. It's `"true"` if it is enabled and `"false"` if not. The default value is `"true"` if you set either [`minSdkVersion`](https://developer.android.com/guide/topics/manifest/uses-sdk-el - Network accessline 368
enabled and `"false"` if not. The default value is `"true"` if you set either [`minSdkVersion`](https://developer.android.com/guide/topics/manifest/uses-sdk-element#min) or [`targetSdkVersion`](https://developer.android.com/ - Network accessline 368
enabled and `"false"` if not. The default value is `"true"` if you set either [`minSdkVersion`](https://developer.android.com/guide/topics/manifest/uses-sdk-element#min) or [`targetSdkVersion`](https://developer.android.com/ - Network accessline 369
either [`minSdkVersion`](https://developer.android.com/guide/topics/manifest/uses-sdk-element#min) - Network accessline 369
either [`minSdkVersion`](https://developer.android.com/guide/topics/manifest/uses-sdk-element#min) - Network accessline 370
or [`targetSdkVersion`](https://developer.android.com/guide/topics/manifest/uses-sdk-element#target) - Network accessline 370
or [`targetSdkVersion`](https://developer.android.com/guide/topics/manifest/uses-sdk-element#target) - Network accessline 389
For more information, read the [Hardware acceleration](https://developer.android.com/guide/topics/graphics/hardware-accel) - Network accessline 389
For more information, read the [Hardware acceleration](https://developer.android.com/guide/topics/graphics/hardware-accel) - Network accessline 390
[Hardware acceleration](https://developer.android.com/guide/topics/graphics/hardware-accel) - Network accessline 390
[Hardware acceleration](https://developer.android.com/guide/topics/graphics/hardware-accel) - Network accessline 395
each of the application's components. See the individual `icon` attributes for the `https://developer.android.com/guide/topics/manifest/activity-element`, - Network accessline 395
each of the application's components. See the individual `icon` attributes for the `https://developer.android.com/guide/topics/manifest/activity-element`, - Network accessline 396
`icon` attributes for the `https://developer.android.com/guide/topics/manifest/activity-element`, `https://developer.android.com/guide/topics/manifest/activity-alias-element`, - Network accessline 396
`icon` attributes for the `https://developer.android.com/guide/topics/manifest/activity-element`, `https://developer.android.com/guide/topics/manifest/activity-alias-element`, - Network accessline 397
`https://developer.android.com/guide/topics/manifest/activity-element`, - Network accessline 397
`https://developer.android.com/guide/topics/manifest/activity-element`, - Network accessline 398
`https://developer.android.com/guide/topics/manifest/activity-alias-element`, - Network accessline 398
`https://developer.android.com/guide/topics/manifest/activity-alias-element`, - Network accessline 399
`https://developer.android.com/guide/topics/manifest/service-element`, - Network accessline 399
`https://developer.android.com/guide/topics/manifest/service-element`, - Network accessline 400
`https://developer.android.com/guide/topics/manifest/receiver-element`, and - Network accessline 400
`https://developer.android.com/guide/topics/manifest/receiver-element`, and - Network accessline 401
`https://developer.android.com/guide/topics/manifest/provider-element` elements. - Network accessline 401
`https://developer.android.com/guide/topics/manifest/provider-element` elements. - Network accessline 430
For more information, see the [Safer Intents](https://developer.android.com/about/versions/16/behavior-changes-16#safer-intents) - Network accessline 430
For more information, see the [Safer Intents](https://developer.android.com/about/versions/16/behavior-changes-16#safer-intents) - Network accessline 431
[Safer Intents](https://developer.android.com/about/versions/16/behavior-changes-16#safer-intents) - Network accessline 431
[Safer Intents](https://developer.android.com/about/versions/16/behavior-changes-16#safer-intents) - Network accessline 442
**Note:** If an app declares this attribute in its manifest, the developer must follow the [Stalkerware](https://support.google.com/googleplay/android-developer/answer/9888380#commercial-spyware) - Network accessline 442
**Note:** If an app declares this attribute in its manifest, the developer must follow the [Stalkerware](https://support.google.com/googleplay/android-developer/answer/9888380#commercial-spyware) - Network accessline 443
follow the [Stalkerware](https://support.google.com/googleplay/android-developer/answer/9888380#commercial-spyware) policy to publish the app to Google Play. - Network accessline 443
follow the [Stalkerware](https://support.google.com/googleplay/android-developer/answer/9888380#commercial-spyware) policy to publish the app to Google Play. - Network accessline 444
[Stalkerware](https://support.google.com/googleplay/android-developer/answer/9888380#commercial-spyware) - Network accessline 444
[Stalkerware](https://support.google.com/googleplay/android-developer/answer/9888380#commercial-spyware) - Network accessline 478
To query the available memory size at runtime, use the methods `https://developer.android.com/reference/android/app/ActivityManager#getMemoryClass()` or `https://developer.android.com/reference/android/app/ActivityManager#getLargeMemoryClas - Network accessline 478
To query the available memory size at runtime, use the methods `https://developer.android.com/reference/android/app/ActivityManager#getMemoryClass()` or `https://developer.android.com/reference/android/app/ActivityManager#getLargeMemoryClas - Network accessline 482
label for each of the application's components. See the individual `label` attributes for the `https://developer.android.com/guide/topics/manifest/activity-element`, - Network accessline 482
label for each of the application's components. See the individual `label` attributes for the `https://developer.android.com/guide/topics/manifest/activity-element`, - Network accessline 483
`label` attributes for the `https://developer.android.com/guide/topics/manifest/activity-element`, `https://developer.android.com/guide/topics/manifest/activity-alias-element`, - Network accessline 483
`label` attributes for the `https://developer.android.com/guide/topics/manifest/activity-element`, `https://developer.android.com/guide/topics/manifest/activity-alias-element`, - Network accessline 484
`https://developer.android.com/guide/topics/manifest/activity-element`, - Network accessline 484
`https://developer.android.com/guide/topics/manifest/activity-element`, - Network accessline 485
`https://developer.android.com/guide/topics/manifest/activity-alias-element`, - Network accessline 485
`https://developer.android.com/guide/topics/manifest/activity-alias-element`, - Network accessline 486
`https://developer.android.com/guide/topics/manifest/service-element`, - Network accessline 486
`https://developer.android.com/guide/topics/manifest/service-element`, - Network accessline 487
`https://developer.android.com/guide/topics/manifest/receiver-element`, and - Network accessline 487
`https://developer.android.com/guide/topics/manifest/receiver-element`, and - Network accessline 488
`https://developer.android.com/guide/topics/manifest/provider-element` elements. - Network accessline 488
`https://developer.android.com/guide/topics/manifest/provider-element` elements. - Network accessline 502
For more information, see the guide on [per-app language preferences](https://developer.android.com/guide/topics/resources/app-languages). - Network accessline 502
For more information, see the guide on [per-app language preferences](https://developer.android.com/guide/topics/resources/app-languages). - Network accessline 503
[per-app language preferences](https://developer.android.com/guide/topics/resources/app-languages). - Network accessline 503
[per-app language preferences](https://developer.android.com/guide/topics/resources/app-languages). - Network accessline 512
launches to let users manage the memory occupied by the application on the device. The activity is also declared with an `https://developer.android.com/guide/topics/manifest/activity-element` element. - Network accessline 512
launches to let users manage the memory occupied by the application on the device. The activity is also declared with an `https://developer.android.com/guide/topics/manifest/activity-element` element. - Network accessline 514
`https://developer.android.com/guide/topics/manifest/activity-element` element. - Network accessline 514
`https://developer.android.com/guide/topics/manifest/activity-element` element. - Network accessline 516
`android:name` : The fully qualified name of an `https://developer.android.com/reference/android/app/Application` - Network accessline 516
`android:name` : The fully qualified name of an `https://developer.android.com/reference/android/app/Application` - Network accessline 517
: The fully qualified name of an `https://developer.android.com/reference/android/app/Application` - Network accessline 517
: The fully qualified name of an `https://developer.android.com/reference/android/app/Application` - Network accessline 529
: Specifies the name of the XML file that contains your application's [Network security configuration](https://developer.android.com/training/articles/security-config). The value is a reference to the XML resource file - Network accessline 529
: Specifies the name of the XML file that contains your application's [Network security configuration](https://developer.android.com/training/articles/security-config). The value is a reference to the XML resource file - Network accessline 530
[Network security configuration](https://developer.android.com/training/articles/security-config). The value is a reference to the XML resource file containing the configuration. - Network accessline 530
[Network security configuration](https://developer.android.com/training/articles/security-config). The value is a reference to the XML resource file containing the configuration. - Network accessline 531
configuration](https://developer.android.com/training/articles/security-config). The value is a reference to the XML resource file - Network accessline 531
configuration](https://developer.android.com/training/articles/security-config). The value is a reference to the XML resource file - Network accessline 542
For more information, see the guide on [supporting 16 KB page sizes](https://developer.android.com/guide/practices/page-sizes). - Network accessline 542
For more information, see the guide on [supporting 16 KB page sizes](https://developer.android.com/guide/practices/page-sizes). - Network accessline 543
[supporting 16 KB page sizes](https://developer.android.com/guide/practices/page-sizes). - Network accessline 543
[supporting 16 KB page sizes](https://developer.android.com/guide/practices/page-sizes). - Network accessline 553
For more information about permissions, see the [Permissions](https://developer.android.com/guide/topics/manifest/manifest-intro#perms) - Network accessline 553
For more information about permissions, see the [Permissions](https://developer.android.com/guide/topics/manifest/manifest-intro#perms) - Network accessline 554
[Permissions](https://developer.android.com/guide/topics/manifest/manifest-intro#perms) - Network accessline 554
[Permissions](https://developer.android.com/guide/topics/manifest/manifest-intro#perms) - Network accessline 556
[Security tips](https://developer.android.com/guide/topics/security/security). - Network accessline 556
[Security tips](https://developer.android.com/guide/topics/security/security). - Network accessline 571
of its components needs to run. All components then run in that process. The name of the default process matches the package name set by the `https://developer.android.com/guide/topics/manifest/manifest-element` element. - Network accessline 571
of its components needs to run. All components then run in that process. The name of the default process matches the package name set by the `https://developer.android.com/guide/topics/manifest/manifest-element` element. - Network accessline 573
`https://developer.android.com/guide/topics/manifest/manifest-element` element. - Network accessline 573
`https://developer.android.com/guide/topics/manifest/manifest-element` element. - Network accessline 599
: Whether the application wants to opt out of [scoped storage](https://developer.android.com/training/data-storage/files/external-scoped). - Network accessline 599
: Whether the application wants to opt out of [scoped storage](https://developer.android.com/training/data-storage/files/external-scoped). - Network accessline 600
[scoped storage](https://developer.android.com/training/data-storage/files/external-scoped). - Network accessline 600
[scoped storage](https://developer.android.com/training/data-storage/files/external-scoped). - Network accessline 605
`android:requiredAccountType` : Specifies the account type required by the application to function. If your app requires an `https://developer.android.com/reference/android/accounts/Account`, the value for this attribute must - Network accessline 605
`android:requiredAccountType` : Specifies the account type required by the application to function. If your app requires an `https://developer.android.com/reference/android/accounts/Account`, the value for this attribute must - Network accessline 606
: Specifies the account type required by the application to function. If your app requires an `https://developer.android.com/reference/android/accounts/Account`, the value for this attribute must correspond to the account - Network accessline 606
: Specifies the account type required by the application to function. If your app requires an `https://developer.android.com/reference/android/accounts/Account`, the value for this attribute must correspond to the account - Network accessline 607
If your app requires an `https://developer.android.com/reference/android/accounts/Account`, the value for this attribute must - Network accessline 607
If your app requires an `https://developer.android.com/reference/android/accounts/Account`, the value for this attribute must - Network accessline 608
correspond to the account authenticator type used by your app, as defined by `https://developer.android.com/reference/android/accounts/AuthenticatorDescription`, such as `"com.google"`. - Network accessline 608
correspond to the account authenticator type used by your app, as defined by `https://developer.android.com/reference/android/accounts/AuthenticatorDescription`, such as `"com.google"`. - Network accessline 609
type used by your app, as defined by `https://developer.android.com/reference/android/accounts/AuthenticatorDescription`, - Network accessline 609
type used by your app, as defined by `https://developer.android.com/reference/android/accounts/AuthenticatorDescription`, - Network accessline 617
can't add accounts, specifying this attribute makes your app unavailable from a restricted profile unless you also declare [`android:restrictedAccountType`](https://developer.android.com/guide/topics/manifest/application-ele - Network accessline 617
can't add accounts, specifying this attribute makes your app unavailable from a restricted profile unless you also declare [`android:restrictedAccountType`](https://developer.android.com/guide/topics/manifest/application-ele - Network accessline 618
unavailable from a restricted profile unless you also declare [`android:restrictedAccountType`](https://developer.android.com/guide/topics/manifest/application-element#restrictedAccountType) with the same value. - Network accessline 618
unavailable from a restricted profile unless you also declare [`android:restrictedAccountType`](https://developer.android.com/guide/topics/manifest/application-element#restrictedAccountType) with the same value. - Network accessline 619
[`android:restrictedAccountType`](https://developer.android.com/guide/topics/manifest/application-element#restrictedAccountType) with - Network accessline 619
[`android:restrictedAccountType`](https://developer.android.com/guide/topics/manifest/application-element#restrictedAccountType) with - Network accessline 623
**Caution:** If the account data might reveal personally identifiable information, it's important that you declare this attribute and leave [`android:restrictedAccountType`](https://developer.android.com/guide/topics/manifes - Network accessline 623
**Caution:** If the account data might reveal personally identifiable information, it's important that you declare this attribute and leave [`android:restrictedAccountType`](https://developer.android.com/guide/topics/manifes - Network accessline 624
If the account data might reveal personally identifiable information, it's important that you declare this attribute and leave [`android:restrictedAccountType`](https://developer.android.com/guide/topics/manifest/application-element - Network accessline 624
If the account data might reveal personally identifiable information, it's important that you declare this attribute and leave [`android:restrictedAccountType`](https://developer.android.com/guide/topics/manifest/application-element - Network accessline 625
that you declare this attribute and leave [`android:restrictedAccountType`](https://developer.android.com/guide/topics/manifest/application-element#restrictedAccountType) null, so that restricted profiles cannot use - Network accessline 625
that you declare this attribute and leave [`android:restrictedAccountType`](https://developer.android.com/guide/topics/manifest/application-element#restrictedAccountType) null, so that restricted profiles cannot use - Network accessline 633
: Specifies whether the app supports [multi-window mode](https://developer.android.com/guide/topics/ui/multi-window). - Network accessline 633
: Specifies whether the app supports [multi-window mode](https://developer.android.com/guide/topics/ui/multi-window). - Network accessline 634
Specifies whether the app supports [multi-window mode](https://developer.android.com/guide/topics/ui/multi-window). - Network accessline 634
Specifies whether the app supports [multi-window mode](https://developer.android.com/guide/topics/ui/multi-window). - Network accessline 636
> [!WARNING] > **Warning:** To improve the layout of apps on form factors with smallest width \>= 600dp, the system ignores this attribute for apps that target Android 16 (API level 36). Your app can opt out of the Android 16 behavi - Network accessline 636
> [!WARNING] > **Warning:** To improve the layout of apps on form factors with smallest width \>= 600dp, the system ignores this attribute for apps that target Android 16 (API level 36). Your app can opt out of the Android 16 behavi - Network accessline 637
> **Warning:** To improve the layout of apps on form factors with smallest width \>= 600dp, the system ignores this attribute for apps that target Android 16 (API level 36). Your app can opt out of the Android 16 behavior, but the opt out w - Network accessline 637
> **Warning:** To improve the layout of apps on form factors with smallest width \>= 600dp, the system ignores this attribute for apps that target Android 16 (API level 36). Your app can opt out of the Android 16 behavior, but the opt out w - Network accessline 640
You can set this attribute in either the [`<activity>`](https://developer.android.com/guide/topics/manifest/activity-element) - Network accessline 640
You can set this attribute in either the [`<activity>`](https://developer.android.com/guide/topics/manifest/activity-element) - Network accessline 668
> - Device manufacturers can override the API level 31 behavior to improve the layout of apps. > - On devices with Android 16 (API level 36) or higher installed, virtual device owners (select trusted and privileged apps) can configu - Network accessline 668
> - Device manufacturers can override the API level 31 behavior to improve the layout of apps. > - On devices with Android 16 (API level 36) or higher installed, virtual device owners (select trusted and privileged apps) can configu - Network accessline 669
> - On devices with Android 16 (API level 36) or higher installed, virtual device owners (select trusted and privileged apps) can configure devices they manage to override (ignore) this attribute to improve app layout. See also [Companion a - Network accessline 669
> - On devices with Android 16 (API level 36) or higher installed, virtual device owners (select trusted and privileged apps) can configure devices they manage to override (ignore) this attribute to improve app layout. See also [Companion a - Network accessline 670
> streaming](https://source.android.com/docs/core/permissions/app-streaming). - Network accessline 670
> streaming](https://source.android.com/docs/core/permissions/app-streaming). - Network accessline 672
> See [Device compatibility mode](https://developer.android.com/guide/practices/device-compatibility-mode). - Network accessline 672
> See [Device compatibility mode](https://developer.android.com/guide/practices/device-compatibility-mode). - Network accessline 683
: Specifies the account type required by this application and indicates that restricted profiles can access such accounts that belong to the owner user. If your app requires an `https://developer.android.com/reference/andr - Network accessline 683
: Specifies the account type required by this application and indicates that restricted profiles can access such accounts that belong to the owner user. If your app requires an `https://developer.android.com/reference/andr - Network accessline 684
can access such accounts that belong to the owner user. If your app requires an `https://developer.android.com/reference/android/accounts/Account` and restricted profiles *can* access the primary user's accounts, the value f - Network accessline 684
can access such accounts that belong to the owner user. If your app requires an `https://developer.android.com/reference/android/accounts/Account` and restricted profiles *can* access the primary user's accounts, the value f - Network accessline 685
`https://developer.android.com/reference/android/accounts/Account` and restricted profiles *can* - Network accessline 685
`https://developer.android.com/reference/android/accounts/Account` and restricted profiles *can* - Network accessline 686
access the primary user's accounts, the value for this attribute must correspond to the account authenticator type used by your app, as defined by `https://developer.android.com/reference/android/accounts/AuthenticatorDescri - Network accessline 686
access the primary user's accounts, the value for this attribute must correspond to the account authenticator type used by your app, as defined by `https://developer.android.com/reference/android/accounts/AuthenticatorDescri - Network accessline 688
defined by `https://developer.android.com/reference/android/accounts/AuthenticatorDescription`, such as `"com.google"`. - Network accessline 688
defined by `https://developer.android.com/reference/android/accounts/AuthenticatorDescription`, such as `"com.google"`. - Network accessline 696
app with accounts that belong to the owner user, which might reveal personally identifiable information. If the account might reveal personal details, *don't* use this attribute. Instead, declare the [`android:requiredAccoun - Network accessline 696
app with accounts that belong to the owner user, which might reveal personally identifiable information. If the account might reveal personal details, *don't* use this attribute. Instead, declare the [`android:requiredAccoun - Network accessline 697
information. If the account might reveal personal details, *don't* use this attribute. Instead, declare the [`android:requiredAccountType`](https://developer.android.com/guide/topics/manifest/application-element#requiredAccountType) - Network accessline 697
information. If the account might reveal personal details, *don't* use this attribute. Instead, declare the [`android:requiredAccountType`](https://developer.android.com/guide/topics/manifest/application-element#requiredAccountType) - Network accessline 698
use this attribute. Instead, declare the [`android:requiredAccountType`](https://developer.android.com/guide/topics/manifest/application-element#requiredAccountType) attribute - Network accessline 698
use this attribute. Instead, declare the [`android:requiredAccountType`](https://developer.android.com/guide/topics/manifest/application-element#requiredAccountType) attribute - Network accessline 708
If this is set to `"true"` and [`targetSdkVersion`](https://developer.android.com/guide/topics/manifest/uses-sdk-element#target) - Network accessline 708
If this is set to `"true"` and [`targetSdkVersion`](https://developer.android.com/guide/topics/manifest/uses-sdk-element#target) - Network accessline 709
[`targetSdkVersion`](https://developer.android.com/guide/topics/manifest/uses-sdk-element#target) - Network accessline 709
[`targetSdkVersion`](https://developer.android.com/guide/topics/manifest/uses-sdk-element#target) - Network accessline 721
: An affinity name that applies to all activities within the application, except for those that set a different affinity with their own `https://developer.android.com/guide/topics/manifest/activity-element#aff` - Network accessline 721
: An affinity name that applies to all activities within the application, except for those that set a different affinity with their own `https://developer.android.com/guide/topics/manifest/activity-element#aff` - Network accessline 722
except for those that set a different affinity with their own `https://developer.android.com/guide/topics/manifest/activity-element#aff` attributes. See that attribute for more information. - Network accessline 722
except for those that set a different affinity with their own `https://developer.android.com/guide/topics/manifest/activity-element#aff` attributes. See that attribute for more information. - Network accessline 723
`https://developer.android.com/guide/topics/manifest/activity-element#aff` - Network accessline 723
`https://developer.android.com/guide/topics/manifest/activity-element#aff` - Network accessline 728
affinity. The name of that affinity is the same as the package name set by the `https://developer.android.com/guide/topics/manifest/manifest-element` element. - Network accessline 728
affinity. The name of that affinity is the same as the package name set by the `https://developer.android.com/guide/topics/manifest/manifest-element` element. - Network accessline 730
`https://developer.android.com/guide/topics/manifest/manifest-element` element. - Network accessline 730
`https://developer.android.com/guide/topics/manifest/manifest-element` element. - Network accessline 734
it might expose functionality or data outside of itself that can cause a security hole, but be useful for testing. This kind of APK only installs through `https://developer.android.com/studio/command-line/adb`. You can't pub - Network accessline 734
it might expose functionality or data outside of itself that can cause a security hole, but be useful for testing. This kind of APK only installs through `https://developer.android.com/studio/command-line/adb`. You can't pub - Network accessline 736
through `https://developer.android.com/studio/command-line/adb`. You can't publish it to Google Play. - Network accessline 736
through `https://developer.android.com/studio/command-line/adb`. You can't publish it to Google Play. - Network accessline 738
Android Studio automatically adds this attribute when you click **Run** . - Network accessline 738
Android Studio automatically adds this attribute when you click **Run** . - Network accessline 739
. - Network accessline 739
. - Network accessline 742
: A reference to a style resource defining a default theme for all activities in the application. Individual activities can override the default by setting their own `https://developer.android.com/guide/topics/manifest/act - Network accessline 742
: A reference to a style resource defining a default theme for all activities in the application. Individual activities can override the default by setting their own `https://developer.android.com/guide/topics/manifest/act - Network accessline 743
activities in the application. Individual activities can override the default by setting their own `https://developer.android.com/guide/topics/manifest/activity-element#theme` attributes. For more information, see [Styles an - Network accessline 743
activities in the application. Individual activities can override the default by setting their own `https://developer.android.com/guide/topics/manifest/activity-element#theme` attributes. For more information, see [Styles an - Network accessline 744
the default by setting their own `https://developer.android.com/guide/topics/manifest/activity-element#theme` - Network accessline 744
the default by setting their own `https://developer.android.com/guide/topics/manifest/activity-element#theme` - Network accessline 745
attributes. For more information, see [Styles and themes](https://developer.android.com/guide/topics/ui/themes). - Network accessline 745
attributes. For more information, see [Styles and themes](https://developer.android.com/guide/topics/ui/themes). - Network accessline 756
For more information about the app bar, see [Add the app bar](https://developer.android.com/training/appbar). - Network accessline 756
For more information about the app bar, see [Add the app bar](https://developer.android.com/training/appbar). - Network accessline 765
**Note:** This attribute is getting deprecated and will be ignored for apps targeting API levels 38 and above. Specify a [Network Security Configuration](https://developer.android.com/training/articles/security-config#Cleart - Network accessline 765
**Note:** This attribute is getting deprecated and will be ignored for apps targeting API levels 38 and above. Specify a [Network Security Configuration](https://developer.android.com/training/articles/security-config#Cleart - Network accessline 766
This attribute is getting deprecated and will be ignored for apps targeting API levels 38 and above. Specify a [Network Security Configuration](https://developer.android.com/training/articles/security-config#CleartextTraffic) to con - Network accessline 766
This attribute is getting deprecated and will be ignored for apps targeting API levels 38 and above. Specify a [Network Security Configuration](https://developer.android.com/training/articles/security-config#CleartextTraffic) to con - Network accessline 767
Specify a [Network Security Configuration](https://developer.android.com/training/articles/security-config#CleartextTraffic) to control cleartext traffic for API levels 24 and above. - Network accessline 767
Specify a [Network Security Configuration](https://developer.android.com/training/articles/security-config#CleartextTraffic) to control cleartext traffic for API levels 24 and above. - Network accessline 771
When the attribute is set to `"false"`, platform components, for example, HTTP and FTP stacks, `https://developer.android.com/reference/android/app/DownloadManager`, and - Network accessline 771
When the attribute is set to `"false"`, platform components, for example, HTTP and FTP stacks, `https://developer.android.com/reference/android/app/DownloadManager`, and - Network accessline 772
stacks, `https://developer.android.com/reference/android/app/DownloadManager`, and `https://developer.android.com/reference/android/media/MediaPlayer`, refuse the app's requests to use cleartext traffic. - Network accessline 772
stacks, `https://developer.android.com/reference/android/app/DownloadManager`, and `https://developer.android.com/reference/android/media/MediaPlayer`, refuse the app's requests to use cleartext traffic. - Network accessline 773
`https://developer.android.com/reference/android/media/MediaPlayer`, refuse the - Network accessline 773
`https://developer.android.com/reference/android/media/MediaPlayer`, refuse the - Network accessline 782
This flag is honored on a best-effort basis because it's impossible to prevent all cleartext traffic from Android applications given the level of access provided to them. For example, there's no expectation that the `https:/ - Network accessline 782
This flag is honored on a best-effort basis because it's impossible to prevent all cleartext traffic from Android applications given the level of access provided to them. For example, there's no expectation that the `https:/ - Network accessline 783
traffic from Android applications given the level of access provided to them. For example, there's no expectation that the `https://developer.android.com/reference/java/net/Socket` API honors this flag, because it can't dete - Network accessline 783
traffic from Android applications given the level of access provided to them. For example, there's no expectation that the `https://developer.android.com/reference/java/net/Socket` API honors this flag, because it can't dete - Network accessline 784
no expectation that the `https://developer.android.com/reference/java/net/Socket` API honors - Network accessline 784
no expectation that the `https://developer.android.com/reference/java/net/Socket` API honors - Network accessline 788
network traffic from applications is handled by higher-level network stacks and components, which can honor this flag by either reading it from `https://developer.android.com/reference/android/content/pm/ApplicationInfo#flag - Network accessline 788
network traffic from applications is handled by higher-level network stacks and components, which can honor this flag by either reading it from `https://developer.android.com/reference/android/content/pm/ApplicationInfo#flag - Network accessline 789
honor this flag by either reading it from `https://developer.android.com/reference/android/content/pm/ApplicationInfo#flags` or - Network accessline 789
honor this flag by either reading it from `https://developer.android.com/reference/android/content/pm/ApplicationInfo#flags` or - Network accessline 790
`https://developer.android.com/reference/android/content/pm/ApplicationInfo#flags` - Network accessline 790
`https://developer.android.com/reference/android/content/pm/ApplicationInfo#flags` - Network accessline 792
`https://developer.android.com/reference/android/security/NetworkSecurityPolicy#isCleartextTrafficPermitted()`. - Network accessline 792
`https://developer.android.com/reference/android/security/NetworkSecurityPolicy#isCleartextTrafficPermitted()`. - Network accessline 795
**Note:** `https://developer.android.com/reference/android/webkit/WebView` honors this attribute for - Network accessline 795
**Note:** `https://developer.android.com/reference/android/webkit/WebView` honors this attribute for - Network accessline 796
`https://developer.android.com/reference/android/webkit/WebView` honors this attribute for - Network accessline 796
`https://developer.android.com/reference/android/webkit/WebView` honors this attribute for - Network accessline 800
During app development, StrictMode can be used to identify any cleartext traffic from the app. For more information, see `https://developer.android.com/reference/android/os/StrictMode.VmPolicy.Builder#detectCleartextNetwork( - Network accessline 800
During app development, StrictMode can be used to identify any cleartext traffic from the app. For more information, see `https://developer.android.com/reference/android/os/StrictMode.VmPolicy.Builder#detectCleartextNetwork( - Network accessline 802
`https://developer.android.com/reference/android/os/StrictMode.VmPolicy.Builder#detectCleartextNetwork()`. - Network accessline 802
`https://developer.android.com/reference/android/os/StrictMode.VmPolicy.Builder#detectCleartextNetwork()`. - Network accessline 825
see also: : `https://developer.android.com/guide/topics/manifest/activity-element` - Network accessline 825
see also: : `https://developer.android.com/guide/topics/manifest/activity-element` - Network accessline 826
: `https://developer.android.com/guide/topics/manifest/activity-element` - Network accessline 826
: `https://developer.android.com/guide/topics/manifest/activity-element` - Network accessline 828
`https://developer.android.com/guide/topics/manifest/service-element` - Network accessline 828
`https://developer.android.com/guide/topics/manifest/service-element` - Network accessline 830
`https://developer.android.com/guide/topics/manifest/receiver-element` - Network accessline 830
`https://developer.android.com/guide/topics/manifest/receiver-element` - Network accessline 832
`https://developer.android.com/guide/topics/manifest/provider-element` - Network accessline 832
`https://developer.android.com/guide/topics/manifest/provider-element`
identity/restore-credentials/references/android/identity/passkeys/create-passkeys.md
- Network accessline 10
> [!TIP] > **Tip:** While designing authentication flows with passkeys, make sure that you follow the [UX guidelines for passkeys](https://developer.android.com/design/ui/mobile/guides/patterns/passkeys). - Network accessline 10
> [!TIP] > **Tip:** While designing authentication flows with passkeys, make sure that you follow the [UX guidelines for passkeys](https://developer.android.com/design/ui/mobile/guides/patterns/passkeys). - Network accessline 11
> **Tip:** While designing authentication flows with passkeys, make sure that you follow the [UX guidelines for passkeys](https://developer.android.com/design/ui/mobile/guides/patterns/passkeys). - Network accessline 11
> **Tip:** While designing authentication flows with passkeys, make sure that you follow the [UX guidelines for passkeys](https://developer.android.com/design/ui/mobile/guides/patterns/passkeys). - Network accessline 13
 **Figure 1:**Creation of passkeys - Network accessline 13
 **Figure 1:**Creation of passkeys - Network accessline 17
Make sure that you have set up [Digital Asset Links](https://developer.android.com/identity/credential-manager/prerequisites) and that you target - Network accessline 17
Make sure that you have set up [Digital Asset Links](https://developer.android.com/identity/credential-manager/prerequisites) and that you target - Network accessline 22
This guide focuses on the changes required in your [relying party client app](https://developer.android.com/identity/credential-manager#authentication-terminology) - Network accessline 22
This guide focuses on the changes required in your [relying party client app](https://developer.android.com/identity/credential-manager#authentication-terminology) - Network accessline 23
to create a passkey, and gives a brief overview of the [relying party app server](https://developer.android.com/identity/credential-manager#authentication-terminology) implementation. To learn more about the server-side integration, see [Se - Network accessline 23
to create a passkey, and gives a brief overview of the [relying party app server](https://developer.android.com/identity/credential-manager#authentication-terminology) implementation. To learn more about the server-side integration, see [Se - Network accessline 24
server](https://developer.android.com/identity/credential-manager#authentication-terminology) implementation. To learn more about the server-side integration, see - Network accessline 24
server](https://developer.android.com/identity/credential-manager#authentication-terminology) implementation. To learn more about the server-side integration, see - Network accessline 25
[Server-side passkey registration](https://developers.google.com/identity/passkeys/developer-guides/server-registration). - Network accessline 25
[Server-side passkey registration](https://developers.google.com/identity/passkeys/developer-guides/server-registration). - Network accessline 27
1. [**Add dependencies to your app**](https://developer.android.com/identity/passkeys/create-passkeys#add-dependencies): Add the required Credential Manager libraries. - Network accessline 27
1. [**Add dependencies to your app**](https://developer.android.com/identity/passkeys/create-passkeys#add-dependencies): Add the required Credential Manager libraries. - Network accessline 28
2. [**Instantiate Credential Manager**](https://developer.android.com/identity/passkeys/create-passkeys#instantiate): Create a Credential Manager instance. - Network accessline 28
2. [**Instantiate Credential Manager**](https://developer.android.com/identity/passkeys/create-passkeys#instantiate): Create a Credential Manager instance. - Network accessline 29
3. [**Get credential creation options from the app server**](https://developer.android.com/identity/passkeys/create-passkeys#get-options): From your app server, send the client app the details required to create the passkey, such as informa - Network accessline 29
3. [**Get credential creation options from the app server**](https://developer.android.com/identity/passkeys/create-passkeys#get-options): From your app server, send the client app the details required to create the passkey, such as informa - Network accessline 30
4. [**Request a passkey**](https://developer.android.com/identity/passkeys/create-passkeys#request-passkey): In your app, use the details received from the app server to create a [`GetPublicKeyCredentialOption`](https://developer.android.co - Network accessline 30
4. [**Request a passkey**](https://developer.android.com/identity/passkeys/create-passkeys#request-passkey): In your app, use the details received from the app server to create a [`GetPublicKeyCredentialOption`](https://developer.android.co - Network accessline 31
5. [**Handle the passkey creation response**](https://developer.android.com/identity/passkeys/create-passkeys#handle-response): When you receive the credentials on your client app, you must encode, serialize and then send the public key to - Network accessline 31
5. [**Handle the passkey creation response**](https://developer.android.com/identity/passkeys/create-passkeys#handle-response): When you receive the credentials on your client app, you must encode, serialize and then send the public key to - Network accessline 32
6. [**Verify and save the public key on the server**](https://developer.android.com/identity/passkeys/create-passkeys#verify): Complete the server-side steps to verify the origin of the credential and then save the public key. - Network accessline 32
6. [**Verify and save the public key on the server**](https://developer.android.com/identity/passkeys/create-passkeys#verify): Complete the server-side steps to verify the origin of the credential and then save the public key. - Network accessline 33
7. [**Notify the user**](https://developer.android.com/identity/passkeys/create-passkeys#notify): Notify the user that their passkey has been created. - Network accessline 33
7. [**Notify the user**](https://developer.android.com/identity/passkeys/create-passkeys#notify): Notify the user that their passkey has been created. - Network accessline 35
> [!TIP] > **Tip:** To enhance the user experience during sign up, add functionality to [restore credentials](https://developer.android.com/identity/sign-in/restore-credentials) on a new device to let users seamlessly set up their existing - Network accessline 35
> [!TIP] > **Tip:** To enhance the user experience during sign up, add functionality to [restore credentials](https://developer.android.com/identity/sign-in/restore-credentials) on a new device to let users seamlessly set up their existing - Network accessline 36
> **Tip:** To enhance the user experience during sign up, add functionality to [restore credentials](https://developer.android.com/identity/sign-in/restore-credentials) on a new device to let users seamlessly set up their existing accounts - Network accessline 36
> **Tip:** To enhance the user experience during sign up, add functionality to [restore credentials](https://developer.android.com/identity/sign-in/restore-credentials) on a new device to let users seamlessly set up their existing accounts - Network accessline 37
> credential fields](https://developer.android.com/identity/passkeys/create-passkeys#suppress-autofill). - Network accessline 37
> credential fields](https://developer.android.com/identity/passkeys/create-passkeys#suppress-autofill). - Network accessline 61
> [!NOTE] > **Note:** Use the latest available versions of the dependencies. Versions of [`androidx.credentials`](https://developer.android.com/identity/passkeys/create-passkeys#automatic-upgrade) earlier than version 1.2 throw an `Unsuppor - Network accessline 61
> [!NOTE] > **Note:** Use the latest available versions of the dependencies. Versions of [`androidx.credentials`](https://developer.android.com/identity/passkeys/create-passkeys#automatic-upgrade) earlier than version 1.2 throw an `Unsuppor - Network accessline 62
> **Note:** Use the latest available versions of the dependencies. Versions of [`androidx.credentials`](https://developer.android.com/identity/passkeys/create-passkeys#automatic-upgrade) earlier than version 1.2 throw an `UnsupportedOperati - Network accessline 62
> **Note:** Use the latest available versions of the dependencies. Versions of [`androidx.credentials`](https://developer.android.com/identity/passkeys/create-passkeys#automatic-upgrade) earlier than version 1.2 throw an `UnsupportedOperati - Network accessline 79
information required to create a passkey, such as information about the user, the app, and additional configuration properties. To learn more, see [Server side passkey registration](https://developers.google.com/identity/passkeys/developer- - Network accessline 79
information required to create a passkey, such as information about the user, the app, and additional configuration properties. To learn more, see [Server side passkey registration](https://developers.google.com/identity/passkeys/developer- - Network accessline 81
side passkey registration](https://developers.google.com/identity/passkeys/developer-guides/server-registration). - Network accessline 81
side passkey registration](https://developers.google.com/identity/passkeys/developer-guides/server-registration). - Network accessline 84
server. These are usually represented in JSON format. To learn more about how this decoding is done for web clients, see [Encoding and Decoding](https://developers.google.com/identity/passkeys/developer-guides/server-registration#encoding_a - Network accessline 84
server. These are usually represented in JSON format. To learn more about how this decoding is done for web clients, see [Encoding and Decoding](https://developers.google.com/identity/passkeys/developer-guides/server-registration#encoding_a - Network accessline 85
this decoding is done for web clients, see [Encoding and Decoding](https://developers.google.com/identity/passkeys/developer-guides/server-registration#encoding_and_decoding). For Android client apps, you must handle the decoding separately - Network accessline 85
this decoding is done for web clients, see [Encoding and Decoding](https://developers.google.com/identity/passkeys/developer-guides/server-registration#encoding_and_decoding). For Android client apps, you must handle the decoding separately - Network accessline 86
Decoding](https://developers.google.com/identity/passkeys/developer-guides/server-registration#encoding_and_decoding). For Android client apps, you must handle the decoding - Network accessline 86
Decoding](https://developers.google.com/identity/passkeys/developer-guides/server-registration#encoding_and_decoding). For Android client apps, you must handle the decoding - Network accessline 135
- `displayName`: An optional, user-friendly name for the account intended for display in the account selector. - `authenticatorSelection`: Details about the device that will be used for authentication. - `authenticatorAttachment`: Indicat - Network accessline 135
- `displayName`: An optional, user-friendly name for the account intended for display in the account selector. - `authenticatorSelection`: Details about the device that will be used for authentication. - `authenticatorAttachment`: Indicat - Network accessline 136
- `authenticatorSelection`: Details about the device that will be used for authentication. - `authenticatorAttachment`: Indicates the preferred [authenticator](https://www.w3.org/TR/webauthn/#authenticator). The possible values are as fol - Network accessline 136
- `authenticatorSelection`: Details about the device that will be used for authentication. - `authenticatorAttachment`: Indicates the preferred [authenticator](https://www.w3.org/TR/webauthn/#authenticator). The possible values are as fol - Network accessline 137
- `authenticatorAttachment`: Indicates the preferred [authenticator](https://www.w3.org/TR/webauthn/#authenticator). The possible values are as follows: - Network accessline 137
- `authenticatorAttachment`: Indicates the preferred [authenticator](https://www.w3.org/TR/webauthn/#authenticator). The possible values are as follows: - Network accessline 145
- `required`: Use this value if invoking a user verification method available on the device is required. - `discouraged`: Use this value if using a user verification method is discouraged. To learn more about `userVerification` - Network accessline 145
- `required`: Use this value if invoking a user verification method available on the device is required. - `discouraged`: Use this value if using a user verification method is discouraged. To learn more about `userVerification` - Network accessline 146
- `discouraged`: Use this value if using a user verification method is discouraged. To learn more about `userVerification`, see [userVerification deep dive](https://web.dev/articles/webauthn-user-verification). - `excludeCredential - Network accessline 146
- `discouraged`: Use this value if using a user verification method is discouraged. To learn more about `userVerification`, see [userVerification deep dive](https://web.dev/articles/webauthn-user-verification). - `excludeCredential - Network accessline 147
To learn more about `userVerification`, see [userVerification deep dive](https://web.dev/articles/webauthn-user-verification). - Network accessline 147
To learn more about `userVerification`, see [userVerification deep dive](https://web.dev/articles/webauthn-user-verification). - Network accessline 148
- `excludeCredentials`: List credential IDs in an [array](https://w3c.github.io/webauthn/#dom-publickeycredentialcreationoptions-excludecredentials) to prevent the creation of a duplicate passkey if one already exists with the same credenti - Network accessline 148
- `excludeCredentials`: List credential IDs in an [array](https://w3c.github.io/webauthn/#dom-publickeycredentialcreationoptions-excludecredentials) to prevent the creation of a duplicate passkey if one already exists with the same credenti - Network accessline 158
- `requestJson`: The credential creation options sent by the app server. - `preferImmediatelyAvailableCredentials`: This is an optional Boolean field that defines whether to only use locally-available or credential provider-synced credentia - Network accessline 158
- `requestJson`: The credential creation options sent by the app server. - `preferImmediatelyAvailableCredentials`: This is an optional Boolean field that defines whether to only use locally-available or credential provider-synced credentia - Network accessline 159
- `preferImmediatelyAvailableCredentials`: This is an optional Boolean field that defines whether to only use locally-available or credential provider-synced credentials to fulfill the request, instead of credentials from security keys or [ - Network accessline 159
- `preferImmediatelyAvailableCredentials`: This is an optional Boolean field that defines whether to only use locally-available or credential provider-synced credentials to fulfill the request, instead of credentials from security keys or [ - Network accessline 160
- `false` (default): Use this value if the call to Credential Manager was triggered by an explicit user action. - `true`: Use this value if Credential Manager is opportunistically called, such as when first opening the app. If you - Network accessline 160
- `false` (default): Use this value if the call to Credential Manager was triggered by an explicit user action. - `true`: Use this value if Credential Manager is opportunistically called, such as when first opening the app. If you - Network accessline 161
- `true`: Use this value if Credential Manager is opportunistically called, such as when first opening the app. If you set the value to `true` and there are no immediately available credentials, Credential Manager won't show any UI a - Network accessline 161
- `true`: Use this value if Credential Manager is opportunistically called, such as when first opening the app. If you set the value to `true` and there are no immediately available credentials, Credential Manager won't show any UI a - Network accessline 162
If you set the value to `true` and there are no immediately available credentials, Credential Manager won't show any UI and the request will fail immediately, returning NoCredentialException for get requests and [`CreateCredentialNoCreateOp - Network accessline 162
If you set the value to `true` and there are no immediately available credentials, Credential Manager won't show any UI and the request will fail immediately, returning NoCredentialException for get requests and [`CreateCredentialNoCreateOp - Network accessline 163
- `origin`: This field is automatically set for Android apps. For browsers and similarly privileged apps that need to set `origin`, see [Make Credential Manager calls on behalf of other parties for privileged apps](https://developer.andro - Network accessline 163
- `origin`: This field is automatically set for Android apps. For browsers and similarly privileged apps that need to set `origin`, see [Make Credential Manager calls on behalf of other parties for privileged apps](https://developer.andro - Network accessline 164
Manager calls on behalf of other parties for privileged apps](https://developer.android.com/training/sign-in/privileged-apps). - Network accessline 164
Manager calls on behalf of other parties for privileged apps](https://developer.android.com/training/sign-in/privileged-apps). - Network accessline 165
- `isConditional`: This is an optional field that defaults to `false`. For more information, see [Automatically create a passkey](https://developer.android.com/identity/passkeys/create-passkeys#automatic-upgrade). - Network accessline 165
- `isConditional`: This is an optional field that defaults to `false`. For more information, see [Automatically create a passkey](https://developer.android.com/identity/passkeys/create-passkeys#automatic-upgrade). - Network accessline 179
background and store it in the user's credential provider, such as Google Password Manager. For an example of how this is implemented, see the [public sample](https://github.com/android/identity-samples/blob/main/Shrine/app/src/main/java/co - Network accessline 179
background and store it in the user's credential provider, such as Google Password Manager. For an example of how this is implemented, see the [public sample](https://github.com/android/identity-samples/blob/main/Shrine/app/src/main/java/co - Network accessline 180
Password Manager. For an example of how this is implemented, see the [public sample](https://github.com/android/identity-samples/blob/main/Shrine/app/src/main/java/com/authentication/shrine/ui/AuthenticationScreen.kt#L98). . . - Network accessline 181
sample](https://github.com/android/identity-samples/blob/main/Shrine/app/src/main/java/com/authentication/shrine/ui/AuthenticationScreen.kt#L98). - Network accessline 182
 **Figure 2:**Google Password Manager notification - Network accessline 182
 **Figure 2:**Google Password Manager notification - Network accessline 192
The response after you successfully call `createCredential()` is a [PublicKeyCredential](https://developer.android.com/jetpack/androidx/releases/credentials) object. - Network accessline 192
The response after you successfully call `createCredential()` is a [PublicKeyCredential](https://developer.android.com/jetpack/androidx/releases/credentials) object. - Network accessline 193
[PublicKeyCredential](https://developer.android.com/jetpack/androidx/releases/credentials) object. - Network accessline 193
[PublicKeyCredential](https://developer.android.com/jetpack/androidx/releases/credentials) object. - Network accessline 244
On the app server, you must verify the public key credential and then [save the public key](https://web.dev/articles/passkey-registration#save-credential). - Network accessline 244
On the app server, you must verify the public key credential and then [save the public key](https://web.dev/articles/passkey-registration#save-credential). - Network accessline 245
public key](https://web.dev/articles/passkey-registration#save-credential). - Network accessline 245
public key](https://web.dev/articles/passkey-registration#save-credential). - Network accessline 280
> [!NOTE] > **Note:** When you save the passkey on the app server, make sure that you save the Authenticator Attestation Globally Unique Identifier ([AAGUID](https://web.dev/articles/webauthn-aaguid)) from the client data. The AAGUID is a u - Network accessline 280
> [!NOTE] > **Note:** When you save the passkey on the app server, make sure that you save the Authenticator Attestation Globally Unique Identifier ([AAGUID](https://web.dev/articles/webauthn-aaguid)) from the client data. The AAGUID is a u - Network accessline 281
> **Note:** When you save the passkey on the app server, make sure that you save the Authenticator Attestation Globally Unique Identifier ([AAGUID](https://web.dev/articles/webauthn-aaguid)) from the client data. The AAGUID is a unique numb - Network accessline 281
> **Note:** When you save the passkey on the app server, make sure that you save the Authenticator Attestation Globally Unique Identifier ([AAGUID](https://web.dev/articles/webauthn-aaguid)) from the client data. The AAGUID is a unique numb - Network accessline 285
After the passkey is successfully created, notify your users about the passkey and inform them that they can manage their passkeys from their credential provider app or from [within the app settings](https://developer.android.com/identity/p - Network accessline 285
After the passkey is successfully created, notify your users about the passkey and inform them that they can manage their passkeys from their credential provider app or from [within the app settings](https://developer.android.com/identity/p - Network accessline 286
and inform them that they can manage their passkeys from their credential provider app or from [within the app settings](https://developer.android.com/identity/passkeys/manage-passkeys). Notify users by using a custom dialog, notification, - Network accessline 286
and inform them that they can manage their passkeys from their credential provider app or from [within the app settings](https://developer.android.com/identity/passkeys/manage-passkeys). Notify users by using a custom dialog, notification, - Network accessline 287
provider app or from [within the app settings](https://developer.android.com/identity/passkeys/manage-passkeys). Notify users by using a - Network accessline 287
provider app or from [within the app settings](https://developer.android.com/identity/passkeys/manage-passkeys). Notify users by using a - Network accessline 301
To allow users to seamlessly log into their accounts on a new device, implement the [Restore Credentials](https://developer.android.com/identity/sign-in/restore-credentials) functionality. Adding restore credentials with - Network accessline 301
To allow users to seamlessly log into their accounts on a new device, implement the [Restore Credentials](https://developer.android.com/identity/sign-in/restore-credentials) functionality. Adding restore credentials with - Network accessline 302
the [Restore Credentials](https://developer.android.com/identity/sign-in/restore-credentials) functionality. Adding restore credentials with - Network accessline 302
the [Restore Credentials](https://developer.android.com/identity/sign-in/restore-credentials) functionality. Adding restore credentials with - Network accessline 325
- [Sign in with passkeys](https://developer.android.com/identity/passkeys/sign-in-with-passkeys) - Network accessline 325
- [Sign in with passkeys](https://developer.android.com/identity/passkeys/sign-in-with-passkeys) - Network accessline 326
- [Manage passkeys](https://developer.android.com/identity/passkeys/manage-passkeys) - Network accessline 326
- [Manage passkeys](https://developer.android.com/identity/passkeys/manage-passkeys) - Network accessline 327
- [Understand passkey user experience flows](https://developer.android.com/design/ui/mobile/guides/patterns/passkeys) - Network accessline 327
- [Understand passkey user experience flows](https://developer.android.com/design/ui/mobile/guides/patterns/passkeys)
identity/restore-credentials/references/android/identity/passkeys/sign-in-with-passkeys.md
- Network accessline 1
This guide continues on the implementation of using passkeys for authentication. Before your users can sign in with passkeys, you must also complete the instructions in [Create passkeys](https://developer.android.com/identity/passkeys/creat - Network accessline 1
This guide continues on the implementation of using passkeys for authentication. Before your users can sign in with passkeys, you must also complete the instructions in [Create passkeys](https://developer.android.com/identity/passkeys/creat - Network accessline 3
instructions in [Create passkeys](https://developer.android.com/identity/passkeys/create-passkeys). - Network accessline 3
instructions in [Create passkeys](https://developer.android.com/identity/passkeys/create-passkeys). - Network accessline 5
To authenticate with a passkey, you must first retrieve the options required to retrieve the public key from your [app server](https://developer.android.com/identity/credential-manager#authentication-terminology), and then call the Credenti - Network accessline 5
To authenticate with a passkey, you must first retrieve the options required to retrieve the public key from your [app server](https://developer.android.com/identity/credential-manager#authentication-terminology), and then call the Credenti - Network accessline 6
retrieve the public key from your [app server](https://developer.android.com/identity/credential-manager#authentication-terminology), and then call the Credential - Network accessline 6
retrieve the public key from your [app server](https://developer.android.com/identity/credential-manager#authentication-terminology), and then call the Credential - Network accessline 10
> [!TIP] > **Tip:** While designing authentication flows with passkeys, make sure you follow the recommendations in the [UX guidelines for passkeys](https://developer.android.com/design/ui/mobile/guides/patterns/passkeys). - Network accessline 10
> [!TIP] > **Tip:** While designing authentication flows with passkeys, make sure you follow the recommendations in the [UX guidelines for passkeys](https://developer.android.com/design/ui/mobile/guides/patterns/passkeys). - Network accessline 11
> **Tip:** While designing authentication flows with passkeys, make sure you follow the recommendations in the [UX guidelines for passkeys](https://developer.android.com/design/ui/mobile/guides/patterns/passkeys). - Network accessline 11
> **Tip:** While designing authentication flows with passkeys, make sure you follow the recommendations in the [UX guidelines for passkeys](https://developer.android.com/design/ui/mobile/guides/patterns/passkeys). - Network accessline 16
user with a passkey, and gives a brief overview of the app server-side implementation. To learn more about server-side integration, see [Server-side passkey authentication](https://developers.google.com/identity/passkeys/developer-guides/se - Network accessline 16
user with a passkey, and gives a brief overview of the app server-side implementation. To learn more about server-side integration, see [Server-side passkey authentication](https://developers.google.com/identity/passkeys/developer-guides/se - Network accessline 18
passkey authentication](https://developers.google.com/identity/passkeys/developer-guides/server-authentication). - Network accessline 18
passkey authentication](https://developers.google.com/identity/passkeys/developer-guides/server-authentication). - Network accessline 23
1. [**Get credential request options from the server**](https://developer.android.com/identity/passkeys/sign-in-with-passkeys#get-options): Make a request from your app to your authentication server to start the passkey sign-in process. Fro - Network accessline 23
1. [**Get credential request options from the server**](https://developer.android.com/identity/passkeys/sign-in-with-passkeys#get-options): Make a request from your app to your authentication server to start the passkey sign-in process. Fro - Network accessline 24
2. [**Create the object required to get the public key credential**](https://developer.android.com/identity/passkeys/sign-in-with-passkeys#create-object): Wrap the options sent by the server in a `GetPublicKeyCredentialOption` object - Network accessline 24
2. [**Create the object required to get the public key credential**](https://developer.android.com/identity/passkeys/sign-in-with-passkeys#create-object): Wrap the options sent by the server in a `GetPublicKeyCredentialOption` object - Network accessline 25
3. ([**optional) Prepare getCredential**](https://developer.android.com/identity/passkeys/sign-in-with-passkeys#reduce-latency): In Android 14 and higher, you can reduce latency by showing the account selector by using the `prepareGetCreden - Network accessline 25
3. ([**optional) Prepare getCredential**](https://developer.android.com/identity/passkeys/sign-in-with-passkeys#reduce-latency): In Android 14 and higher, you can reduce latency by showing the account selector by using the `prepareGetCreden - Network accessline 26
4. [**Launch the sign in flow**](https://developer.android.com/identity/passkeys/sign-in-with-passkeys#launch-sign-in): Call `getCredential()` method to sign in the user - Network accessline 26
4. [**Launch the sign in flow**](https://developer.android.com/identity/passkeys/sign-in-with-passkeys#launch-sign-in): Call `getCredential()` method to sign in the user - Network accessline 27
5. [**Handle the response**](https://developer.android.com/identity/passkeys/sign-in-with-passkeys#handle-response): Handle each of the possible credential responses. - Network accessline 27
5. [**Handle the response**](https://developer.android.com/identity/passkeys/sign-in-with-passkeys#handle-response): Handle each of the possible credential responses. - Network accessline 28
6. [**Handle exceptions**](https://developer.android.com/identity/passkeys/sign-in-with-passkeys#handle-exceptions): Make sure that you handle exceptions appropriately. - Network accessline 28
6. [**Handle exceptions**](https://developer.android.com/identity/passkeys/sign-in-with-passkeys#handle-exceptions): Make sure that you handle exceptions appropriately. - Network accessline 30
> [!TIP] > **Tip:** Enhance the user experience during sign in by also adding functionality to [restore credentials](https://developer.android.com/identity/sign-in/restore-credentials) on a new device to let users seamlessly set up their ex - Network accessline 30
> [!TIP] > **Tip:** Enhance the user experience during sign in by also adding functionality to [restore credentials](https://developer.android.com/identity/sign-in/restore-credentials) on a new device to let users seamlessly set up their ex - Network accessline 31
> **Tip:** Enhance the user experience during sign in by also adding functionality to [restore credentials](https://developer.android.com/identity/sign-in/restore-credentials) on a new device to let users seamlessly set up their existing ac - Network accessline 31
> **Tip:** Enhance the user experience during sign in by also adding functionality to [restore credentials](https://developer.android.com/identity/sign-in/restore-credentials) on a new device to let users seamlessly set up their existing ac - Network accessline 36
as well as the `challenge`, which is unique for each sign-in attempt. To learn more about the server-side implementation, see [Create the challenge](https://developers.google.com/identity/passkeys/developer-guides/server-authentication#crea - Network accessline 36
as well as the `challenge`, which is unique for each sign-in attempt. To learn more about the server-side implementation, see [Create the challenge](https://developers.google.com/identity/passkeys/developer-guides/server-authentication#crea - Network accessline 37
more about the server-side implementation, see [Create the challenge](https://developers.google.com/identity/passkeys/developer-guides/server-authentication#create_the_challenge) and [Create credential request options](https://developers.go - Network accessline 37
more about the server-side implementation, see [Create the challenge](https://developers.google.com/identity/passkeys/developer-guides/server-authentication#create_the_challenge) and [Create credential request options](https://developers.go - Network accessline 38
challenge](https://developers.google.com/identity/passkeys/developer-guides/server-authentication#create_the_challenge) and [Create credential request - Network accessline 38
challenge](https://developers.google.com/identity/passkeys/developer-guides/server-authentication#create_the_challenge) and [Create credential request - Network accessline 39
options](https://developers.google.com/identity/passkeys/developer-guides/server-authentication#create_credential_request_options). - Network accessline 39
options](https://developers.google.com/identity/passkeys/developer-guides/server-authentication#create_credential_request_options). - Network accessline 49
To learn more about the fields, see the blogpost about [signing in with a passkey](https://web.dev/articles/passkey-form-autofill#fetch_information_from_the_backend). - Network accessline 49
To learn more about the fields, see the blogpost about [signing in with a passkey](https://web.dev/articles/passkey-form-autofill#fetch_information_from_the_backend). - Network accessline 50
passkey](https://web.dev/articles/passkey-form-autofill#fetch_information_from_the_backend). - Network accessline 50
passkey](https://web.dev/articles/passkey-form-autofill#fetch_information_from_the_backend). - Network accessline 79
> [!NOTE] > **Note:** [`GetCredentialRequest`](https://developer.android.com/reference/androidx/credentials/GetCredentialRequest#GetCredentialRequest) can include an `origin` field. However, `origin` is automatically set for Android apps, a - Network accessline 79
> [!NOTE] > **Note:** [`GetCredentialRequest`](https://developer.android.com/reference/androidx/credentials/GetCredentialRequest#GetCredentialRequest) can include an `origin` field. However, `origin` is automatically set for Android apps, a - Network accessline 80
> **Note:** [`GetCredentialRequest`](https://developer.android.com/reference/androidx/credentials/GetCredentialRequest#GetCredentialRequest) can include an `origin` field. However, `origin` is automatically set for Android apps, and hence s - Network accessline 80
> **Note:** [`GetCredentialRequest`](https://developer.android.com/reference/androidx/credentials/GetCredentialRequest#GetCredentialRequest) can include an `origin` field. However, `origin` is automatically set for Android apps, and hence s - Network accessline 81
> apps](https://developer.android.com/training/sign-in/privileged-apps). - Network accessline 81
> apps](https://developer.android.com/training/sign-in/privileged-apps). - Network accessline 85
On Android 14 or higher, you can reduce latency when showing the account selector by using the [`prepareGetCredential()`](https://developer.android.com/reference/androidx/credentials/CredentialManager#prepareGetCredential) method before cal - Network accessline 85
On Android 14 or higher, you can reduce latency when showing the account selector by using the [`prepareGetCredential()`](https://developer.android.com/reference/androidx/credentials/CredentialManager#prepareGetCredential) method before cal - Network accessline 86
selector by using the [`prepareGetCredential()`](https://developer.android.com/reference/androidx/credentials/CredentialManager#prepareGetCredential) method before calling - Network accessline 86
selector by using the [`prepareGetCredential()`](https://developer.android.com/reference/androidx/credentials/CredentialManager#prepareGetCredential) method before calling - Network accessline 89
The `prepareGetCredential()` method returns a [`PrepareGetCredentialResponse`](https://developer.android.com/reference/androidx/credentials/PrepareGetCredentialResponse) object which is cached. This lets the - Network accessline 89
The `prepareGetCredential()` method returns a [`PrepareGetCredentialResponse`](https://developer.android.com/reference/androidx/credentials/PrepareGetCredentialResponse) object which is cached. This lets the - Network accessline 90
[`PrepareGetCredentialResponse`](https://developer.android.com/reference/androidx/credentials/PrepareGetCredentialResponse) object which is cached. This lets the - Network accessline 90
[`PrepareGetCredentialResponse`](https://developer.android.com/reference/androidx/credentials/PrepareGetCredentialResponse) object which is cached. This lets the - Network accessline 130
> [!NOTE] > **Note:** If you call `getCredential()` but the user does not have any credentials available, or if they don't grant consent to using their credentials, a `NoCredentialException` is returned. To learn more about this exception, - Network accessline 130
> [!NOTE] > **Note:** If you call `getCredential()` but the user does not have any credentials available, or if they don't grant consent to using their credentials, a `NoCredentialException` is returned. To learn more about this exception, - Network accessline 131
> **Note:** If you call `getCredential()` but the user does not have any credentials available, or if they don't grant consent to using their credentials, a `NoCredentialException` is returned. To learn more about this exception, see the [t - Network accessline 131
> **Note:** If you call `getCredential()` but the user does not have any credentials available, or if they don't grant consent to using their credentials, a `NoCredentialException` is returned. To learn more about this exception, see the [t - Network accessline 197
On the server, you must verify the credential. To learn more, see [Verify and sign in the user](https://developers.google.com/identity/passkeys/developer-guides/server-authentication#verify_and_sign_in_the_user). - Network accessline 197
On the server, you must verify the credential. To learn more, see [Verify and sign in the user](https://developers.google.com/identity/passkeys/developer-guides/server-authentication#verify_and_sign_in_the_user). - Network accessline 198
sign in the user](https://developers.google.com/identity/passkeys/developer-guides/server-authentication#verify_and_sign_in_the_user). - Network accessline 198
sign in the user](https://developers.google.com/identity/passkeys/developer-guides/server-authentication#verify_and_sign_in_the_user). - Network accessline 202
You should handle all the subclass exceptions of [`GetCredentialException`](https://developer.android.com/reference/androidx/credentials/exceptions/GetCredentialException). - Network accessline 202
You should handle all the subclass exceptions of [`GetCredentialException`](https://developer.android.com/reference/androidx/credentials/exceptions/GetCredentialException). - Network accessline 203
To learn how to handle each exception, see the [troubleshooting guide](https://developer.android.com/identity/sign-in/credential-manager-troubleshooting-guide). - Network accessline 203
To learn how to handle each exception, see the [troubleshooting guide](https://developer.android.com/identity/sign-in/credential-manager-troubleshooting-guide). - Network accessline 218
- [Manage passkeys](https://developer.android.com/identity/passkeys/manage-passkeys) - Network accessline 218
- [Manage passkeys](https://developer.android.com/identity/passkeys/manage-passkeys) - Network accessline 219
- [Understand passkey user experience flows](https://developer.android.com/design/ui/mobile/guides/patterns/passkeys) - Network accessline 219
- [Understand passkey user experience flows](https://developer.android.com/design/ui/mobile/guides/patterns/passkeys)
identity/verified-email/SKILL.md
- Network accessline 34
- *[OpenID4VP Standard](https://openid.net/specs/openid-4-verifiable-presentations-1_0.html#name-introduction)*: The specification used to create digital credentials requests. - Network accessline 34
- *[OpenID4VP Standard](https://openid.net/specs/openid-4-verifiable-presentations-1_0.html#name-introduction)*: The specification used to create digital credentials requests. - Network accessline 35
- *[Digital Credentials Demo](https://digital-credentials.dev/)*: Example requests and cross-platform testing tool. - Network accessline 35
- *[Digital Credentials Demo](https://digital-credentials.dev/)*: Example requests and cross-platform testing tool. - Network accessline 36
- *[W3C Verifiable Credentials](https://www.w3.org/TR/vc-data-model-2.0/)*: The data model for cryptographically secured claims. - Network accessline 36
- *[W3C Verifiable Credentials](https://www.w3.org/TR/vc-data-model-2.0/)*: The data model for cryptographically secured claims. - Network accessline 37
- *[SD-JWT](https://datatracker.ietf.org/doc/draft-ietf-oauth-selective-disclosure-jwt/)*: Selective Disclosure JSON Web Token format used for responses. - Network accessline 37
- *[SD-JWT](https://datatracker.ietf.org/doc/draft-ietf-oauth-selective-disclosure-jwt/)*: Selective Disclosure JSON Web Token format used for responses. - Network accessline 38
- *[mdoc](https://www.iso.org/standard/69084.html)*: ISO/IEC 18013-5 standard for mobile documents. - Network accessline 38
- *[mdoc](https://www.iso.org/standard/69084.html)*: ISO/IEC 18013-5 standard for mobile documents. - Network accessline 122
This guide describes how to implement verified email retrieval using the [Digital Credentials Verifier API](https://developer.android.com/identity/digital-credentials/credential-verifier) through an [OpenID for Verifiable - Network accessline 122
This guide describes how to implement verified email retrieval using the [Digital Credentials Verifier API](https://developer.android.com/identity/digital-credentials/credential-verifier) through an [OpenID for Verifiable - Network accessline 123
[Digital Credentials Verifier API](https://developer.android.com/identity/digital-credentials/credential-verifier) through an [OpenID for Verifiable - Network accessline 123
[Digital Credentials Verifier API](https://developer.android.com/identity/digital-credentials/credential-verifier) through an [OpenID for Verifiable - Network accessline 124
Presentations (OpenID4VP)](https://openid.net/specs/openid-4-verifiable-presentations-1_0.html) request. - Network accessline 124
Presentations (OpenID4VP)](https://openid.net/specs/openid-4-verifiable-presentations-1_0.html) request. - Network accessline 159
To request a verified email, construct a [`GetCredentialRequest`](https://developer.android.com/reference/android/credentials/GetCredentialRequest) - Network accessline 159
To request a verified email, construct a [`GetCredentialRequest`](https://developer.android.com/reference/android/credentials/GetCredentialRequest) - Network accessline 160
containing a [`GetDigitalCredentialOption`](https://developer.android.com/reference/androidx/credentials/GetDigitalCredentialOption). This option requires a - Network accessline 160
containing a [`GetDigitalCredentialOption`](https://developer.android.com/reference/androidx/credentials/GetDigitalCredentialOption). This option requires a - Network accessline 218
> [!NOTE] > **Note:** If `email_verified` is `true` and `hd` is empty in the response, it implies that the account is an authorized Google Account. Google does not issue [verifiable credentials](references/android/identity/digital-credent - Network accessline 218
> [!NOTE] > **Note:** If `email_verified` is `true` and `hd` is empty in the response, it implies that the account is an authorized Google Account. Google does not issue [verifiable credentials](references/android/identity/digital-credent - Network accessline 220
> Identity guides](https://developers.google.com/identity/gsi/web/guides/verify-google-id-token). - Network accessline 220
> Identity guides](https://developers.google.com/identity/gsi/web/guides/verify-google-id-token). - Network accessline 232
> [!NOTE] > **Note:** The `hd` and `email_verified` fields are hidden from users in Credential Manager's built-in UI. You cannot make a request with only these hidden fields- in case of such requests, the response is the [`GetCredentialCanc - Network accessline 232
> [!NOTE] > **Note:** The `hd` and `email_verified` fields are hidden from users in Credential Manager's built-in UI. You cannot make a request with only these hidden fields- in case of such requests, the response is the [`GetCredentialCanc - Network accessline 233
> **Note:** The `hd` and `email_verified` fields are hidden from users in Credential Manager's built-in UI. You cannot make a request with only these hidden fields- in case of such requests, the response is the [`GetCredentialCancellationEx - Network accessline 233
> **Note:** The `hd` and `email_verified` fields are hidden from users in Credential Manager's built-in UI. You cannot make a request with only these hidden fields- in case of such requests, the response is the [`GetCredentialCancellationEx - Network accessline 268
> [!WARNING] > **Warning:** From August 2026, the [response JSON](https://developer.android.com/reference/androidx/credentials/DigitalCredential#getCredentialJson()) format has been updated to strictly match the W3C standards. It contains ` - Network accessline 268
> [!WARNING] > **Warning:** From August 2026, the [response JSON](https://developer.android.com/reference/androidx/credentials/DigitalCredential#getCredentialJson()) format has been updated to strictly match the W3C standards. It contains ` - Network accessline 269
> **Warning:** From August 2026, the [response JSON](https://developer.android.com/reference/androidx/credentials/DigitalCredential#getCredentialJson()) format has been updated to strictly match the W3C standards. It contains `data` and `pr - Network accessline 269
> **Warning:** From August 2026, the [response JSON](https://developer.android.com/reference/androidx/credentials/DigitalCredential#getCredentialJson()) format has been updated to strictly match the W3C standards. It contains `data` and `pr - Network accessline 278
The following code extracts the raw [Selective Disclosure JWT (SD-JWT)](https://datatracker.ietf.org/doc/rfc9901/) and uses a helper to decode its claims. - Network accessline 278
The following code extracts the raw [Selective Disclosure JWT (SD-JWT)](https://datatracker.ietf.org/doc/rfc9901/) and uses a helper to decode its claims. - Network accessline 279
(SD-JWT)](https://datatracker.ietf.org/doc/rfc9901/) and uses a helper to decode its claims. - Network accessline 279
(SD-JWT)](https://datatracker.ietf.org/doc/rfc9901/) and uses a helper to decode its claims. - Network accessline 305
The Credential Manager API will return a [`DigitalCredential`](https://developer.android.com/reference/androidx/credentials/DigitalCredential) - Network accessline 305
The Credential Manager API will return a [`DigitalCredential`](https://developer.android.com/reference/androidx/credentials/DigitalCredential) - Network accessline 332
"exp": 1775688222, "iat": 1775083422, "iss": "https://verifiablecredentials-pa.googleapis.com", - Network accessline 332
"exp": 1775688222, "iat": 1775083422, "iss": "https://verifiablecredentials-pa.googleapis.com", - Network accessline 333
"iat": 1775083422, "iss": "https://verifiablecredentials-pa.googleapis.com", "vct": "UserInfoCredential", - Network accessline 333
"iat": 1775083422, "iss": "https://verifiablecredentials-pa.googleapis.com", "vct": "UserInfoCredential", - Network accessline 334
"iss": "https://verifiablecredentials-pa.googleapis.com", - Network accessline 334
"iss": "https://verifiablecredentials-pa.googleapis.com", - Network accessline 339
"family_name": "Doe", "name": "Jane Doe", "picture": "http://example.com/janedoe/me.jpg", - Network accessline 339
"family_name": "Doe", "name": "Jane Doe", "picture": "http://example.com/janedoe/me.jpg", - Network accessline 340
"name": "Jane Doe", "picture": "http://example.com/janedoe/me.jpg", "hd": "" - Network accessline 340
"name": "Jane Doe", "picture": "http://example.com/janedoe/me.jpg", "hd": "" - Network accessline 341
"picture": "http://example.com/janedoe/me.jpg", - Network accessline 341
"picture": "http://example.com/janedoe/me.jpg", - Network accessline 369
- **Verify issuer** : Ensure the `iss` (issuer) field matches `https://verifiablecredentials-pa.googleapis.com`. - Network accessline 369
- **Verify issuer** : Ensure the `iss` (issuer) field matches `https://verifiablecredentials-pa.googleapis.com`. - Network accessline 370
- **Verify signature**: Check the signature of the SD-JWT using the public keys (JWKs) available at https://verifiablecredentials-pa.googleapis.com/.well-known/vc-public-jwks. - Network accessline 370
- **Verify signature**: Check the signature of the SD-JWT using the public keys (JWKs) available at https://verifiablecredentials-pa.googleapis.com/.well-known/vc-public-jwks. - Network accessline 372
> [!NOTE] > **Note:** Use a standard library (such as [@sd-jwt/sd-jwt-vc](https://datatracker.ietf.org/doc/rfc9901/) for Node.js) to perform the verification steps as outlined in the [OpenID for Verifiable - Network accessline 372
> [!NOTE] > **Note:** Use a standard library (such as [@sd-jwt/sd-jwt-vc](https://datatracker.ietf.org/doc/rfc9901/) for Node.js) to perform the verification steps as outlined in the [OpenID for Verifiable - Network accessline 373
> **Note:** Use a standard library (such as [@sd-jwt/sd-jwt-vc](https://datatracker.ietf.org/doc/rfc9901/) for Node.js) to perform the verification steps as outlined in the [OpenID for Verifiable - Network accessline 373
> **Note:** Use a standard library (such as [@sd-jwt/sd-jwt-vc](https://datatracker.ietf.org/doc/rfc9901/) for Node.js) to perform the verification steps as outlined in the [OpenID for Verifiable - Network accessline 374
> Presentations specification](https://openid.net/specs/openid-4-verifiable-presentations-1_0.html). - Network accessline 374
> Presentations specification](https://openid.net/specs/openid-4-verifiable-presentations-1_0.html). - Network accessline 383
> [!WARNING] > **Warning:** As mentioned in [Parse the response on the client](#parse-response), from August 2026, the [response JSON](https://developer.android.com/reference/androidx/credentials/DigitalCredential#getCredentialJson()) forma - Network accessline 383
> [!WARNING] > **Warning:** As mentioned in [Parse the response on the client](#parse-response), from August 2026, the [response JSON](https://developer.android.com/reference/androidx/credentials/DigitalCredential#getCredentialJson()) forma - Network accessline 384
> **Warning:** As mentioned in [Parse the response on the client](#parse-response), from August 2026, the [response JSON](https://developer.android.com/reference/androidx/credentials/DigitalCredential#getCredentialJson()) format has been up - Network accessline 384
> **Warning:** As mentioned in [Parse the response on the client](#parse-response), from August 2026, the [response JSON](https://developer.android.com/reference/androidx/credentials/DigitalCredential#getCredentialJson()) format has been up - Network accessline 414
For the flow to work on a [`WebView`](https://developer.android.com/reference/android/webkit/WebView), developers should implement a - Network accessline 414
For the flow to work on a [`WebView`](https://developer.android.com/reference/android/webkit/WebView), developers should implement a
identity/verified-email/references/android/identity/credential-manager/index.md
- Network accessline 1
[Credential Manager](https://developer.android.com/reference/kotlin/androidx/credentials/package-summary) is the recommended Jetpack API for credential exchange - Network accessline 1
[Credential Manager](https://developer.android.com/reference/kotlin/androidx/credentials/package-summary) is the recommended Jetpack API for credential exchange - Network accessline 12
- **Support for various authentication mechanisms** : Enables users to sign up or sign in to your app using: - [Passkeys](https://developer.android.com/identity/passkeys) - Network accessline 12
- **Support for various authentication mechanisms** : Enables users to sign up or sign in to your app using: - [Passkeys](https://developer.android.com/identity/passkeys) - Network accessline 13
- [Passkeys](https://developer.android.com/identity/passkeys) - Network accessline 13
- [Passkeys](https://developer.android.com/identity/passkeys) - Network accessline 14
- [Sign-in with Google](https://developer.android.com/identity/sign-in/credential-manager-siwg) and other federated sign-in mechanisms - Network accessline 14
- [Sign-in with Google](https://developer.android.com/identity/sign-in/credential-manager-siwg) and other federated sign-in mechanisms - Network accessline 15
- [Passwords](https://developer.android.com/identity/passwords) - Network accessline 15
- [Passwords](https://developer.android.com/identity/passwords) - Network accessline 16
- [Digital credentials](https://developer.android.com/identity/digital-credentials) - Network accessline 16
- [Digital credentials](https://developer.android.com/identity/digital-credentials) - Network accessline 17
- **Cross-device credential restore** : Provides integration with [Restore Credentials](https://developer.android.com/identity/sign-in/restore-credentials), allowing users to seamlessly start using your app on a new device. - **Seamless i - Network accessline 17
- **Cross-device credential restore** : Provides integration with [Restore Credentials](https://developer.android.com/identity/sign-in/restore-credentials), allowing users to seamlessly start using your app on a new device. - **Seamless i - Network accessline 18
Credentials](https://developer.android.com/identity/sign-in/restore-credentials), allowing users to seamlessly start using your app on a new device. - Network accessline 18
Credentials](https://developer.android.com/identity/sign-in/restore-credentials), allowing users to seamlessly start using your app on a new device. - Network accessline 19
- **Seamless integration with credential providers** : Offers support for [credential providers](https://developer.android.com/identity/sign-in/credential-provider), including password managers such as Google Password Manager. - Network accessline 19
- **Seamless integration with credential providers** : Offers support for [credential providers](https://developer.android.com/identity/sign-in/credential-provider), including password managers such as Google Password Manager. - Network accessline 20
- **Credential management**: Enables updating the metadata for user credentials, helping to keep credentials consistent across your app and credential providers. - **WebView compatibility** : Works with apps that use [WebView](https://devel - Network accessline 20
- **Credential management**: Enables updating the metadata for user credentials, helping to keep credentials consistent across your app and credential providers. - **WebView compatibility** : Works with apps that use [WebView](https://devel - Network accessline 21
- **WebView compatibility** : Works with apps that use [WebView](https://developer.android.com/identity/sign-in/credential-manager-webview). - Network accessline 21
- **WebView compatibility** : Works with apps that use [WebView](https://developer.android.com/identity/sign-in/credential-manager-webview). - Network accessline 22
- **Autofill integration** : Integrates with [autofill](https://developer.android.com/identity/autofill/credential-manager-autofill) to display credentials within the autofill UI. - Network accessline 22
- **Autofill integration** : Integrates with [autofill](https://developer.android.com/identity/autofill/credential-manager-autofill) to display credentials within the autofill UI. - Network accessline 29
- **Enhanced security**: Passkeys offer enhanced security and protect users from phishing attempts. - **Support for various form factors** : The APIs work across Android [form factors](https://developer.android.com/identity/form-factors), - Network accessline 29
- **Enhanced security**: Passkeys offer enhanced security and protect users from phishing attempts. - **Support for various form factors** : The APIs work across Android [form factors](https://developer.android.com/identity/form-factors), - Network accessline 30
- **Support for various form factors** : The APIs work across Android [form factors](https://developer.android.com/identity/form-factors), including mobile, Android XR, and Wear OS devices. - **Simplified authentication across use cases** - Network accessline 30
- **Support for various form factors** : The APIs work across Android [form factors](https://developer.android.com/identity/form-factors), including mobile, Android XR, and Wear OS devices. - **Simplified authentication across use cases** - Network accessline 31
factors](https://developer.android.com/identity/form-factors), including mobile, Android XR, and Wear OS devices. - Network accessline 31
factors](https://developer.android.com/identity/form-factors), including mobile, Android XR, and Wear OS devices. - Network accessline 32
- **Simplified authentication across use cases** : [Digital credentials](https://developer.android.com/identity/digital-credentials), such as digital driver's licenses, corporate IDs, and national ID cards, enable authentication across vari - Network accessline 32
- **Simplified authentication across use cases** : [Digital credentials](https://developer.android.com/identity/digital-credentials), such as digital driver's licenses, corporate IDs, and national ID cards, enable authentication across vari - Network accessline 35
 **Figure 1.**Credential Manager's built-in unified interface fo - Network accessline 35
 **Figure 1.**Credential Manager's built-in unified interface fo - Network accessline 42
- **Relying party client app**: The client---in this case, your Android app---that handles the user interface to create and use passkeys. - **Relying party server**: An app server that helps with the creation, storage, and verification of p - Network accessline 42
- **Relying party client app**: The client---in this case, your Android app---that handles the user interface to create and use passkeys. - **Relying party server**: An app server that helps with the creation, storage, and verification of p - Network accessline 44
- **Credential provider** : A component that stores and provides user credentials, such as Google Password Manager. Note that the [FIDO documentation](https://fidoalliance.org/passkeys/) refers to credential providers as credential managers - Network accessline 44
- **Credential provider** : A component that stores and provides user credentials, such as Google Password Manager. Note that the [FIDO documentation](https://fidoalliance.org/passkeys/) refers to credential providers as credential managers - Network accessline 50
simplifying the authentication process. To integrate with Credential Manager as a credential provider, see [Implement authentication as a credential provider](https://developer.android.com/identity/sign-in/credential-provider). - Network accessline 50
simplifying the authentication process. To integrate with Credential Manager as a credential provider, see [Implement authentication as a credential provider](https://developer.android.com/identity/sign-in/credential-provider). - Network accessline 52
[Implement authentication as a credential provider](https://developer.android.com/identity/sign-in/credential-provider). - Network accessline 52
[Implement authentication as a credential provider](https://developer.android.com/identity/sign-in/credential-provider). - Network accessline 54
For more information about how Google Password Manager keeps your credentials secure, see [Security of Passkeys in the Google Password Manager](https://security.googleblog.com/2022/10/SecurityofPasskeysintheGooglePasswordManager.html). - Network accessline 54
For more information about how Google Password Manager keeps your credentials secure, see [Security of Passkeys in the Google Password Manager](https://security.googleblog.com/2022/10/SecurityofPasskeysintheGooglePasswordManager.html). - Network accessline 56
[Security of Passkeys in the Google Password Manager](https://security.googleblog.com/2022/10/SecurityofPasskeysintheGooglePasswordManager.html). - Network accessline 56
[Security of Passkeys in the Google Password Manager](https://security.googleblog.com/2022/10/SecurityofPasskeysintheGooglePasswordManager.html). - Network accessline 64
- [Google Sign-In](https://developer.android.com/identity/sign-in/legacy-gsi-migration) - Network accessline 64
- [Google Sign-In](https://developer.android.com/identity/sign-in/legacy-gsi-migration) - Network accessline 65
- [One Tap](https://developer.android.com/identity/legacy/one-tap) - Network accessline 65
- [One Tap](https://developer.android.com/identity/legacy/one-tap) - Network accessline 66
- [Smart Lock for Passwords](https://developer.android.com/identity/sign-in/smart-lock-migration) - Network accessline 66
- [Smart Lock for Passwords](https://developer.android.com/identity/sign-in/smart-lock-migration) - Network accessline 67
- [FIDO2](https://developer.android.com/identity/sign-in/fido2-migration) - Network accessline 67
- [FIDO2](https://developer.android.com/identity/sign-in/fido2-migration)
identity/verified-email/references/android/identity/digital-credentials/email-verification-implementation.md
- Network accessline 3
[View on GitHub](https://github.com/android/skills/tree/main/identity/verified-email) - Network accessline 3
[View on GitHub](https://github.com/android/skills/tree/main/identity/verified-email) - Network accessline 7
Use an [Android skill](https://developer.android.com/tools/agents/android-skills) to integrate a secure, OTP-less email verification flow into your app. To install the skill from the [Android CLI](https://developer.android.com/tools/agents/ - Network accessline 7
Use an [Android skill](https://developer.android.com/tools/agents/android-skills) to integrate a secure, OTP-less email verification flow into your app. To install the skill from the [Android CLI](https://developer.android.com/tools/agents/ - Network accessline 15
This guide describes how to implement verified email retrieval using the [Digital Credentials Verifier API](https://developer.android.com/identity/digital-credentials/credential-verifier) through an [OpenID for Verifiable - Network accessline 15
This guide describes how to implement verified email retrieval using the [Digital Credentials Verifier API](https://developer.android.com/identity/digital-credentials/credential-verifier) through an [OpenID for Verifiable - Network accessline 16
[Digital Credentials Verifier API](https://developer.android.com/identity/digital-credentials/credential-verifier) through an [OpenID for Verifiable - Network accessline 16
[Digital Credentials Verifier API](https://developer.android.com/identity/digital-credentials/credential-verifier) through an [OpenID for Verifiable - Network accessline 17
Presentations (OpenID4VP)](https://openid.net/specs/openid-4-verifiable-presentations-1_0.html) request. - Network accessline 17
Presentations (OpenID4VP)](https://openid.net/specs/openid-4-verifiable-presentations-1_0.html) request. - Network accessline 52
To request a verified email, construct a [`GetCredentialRequest`](https://developer.android.com/reference/android/credentials/GetCredentialRequest) - Network accessline 52
To request a verified email, construct a [`GetCredentialRequest`](https://developer.android.com/reference/android/credentials/GetCredentialRequest) - Network accessline 53
containing a [`GetDigitalCredentialOption`](https://developer.android.com/reference/androidx/credentials/GetDigitalCredentialOption). This option requires a - Network accessline 53
containing a [`GetDigitalCredentialOption`](https://developer.android.com/reference/androidx/credentials/GetDigitalCredentialOption). This option requires a - Network accessline 111
> [!NOTE] > **Note:** If `email_verified` is `true` and `hd` is empty in the response, it implies that the account is an authorized Google Account. Google does not issue [verifiable credentials](https://developer.android.com/identity/digi - Network accessline 111
> [!NOTE] > **Note:** If `email_verified` is `true` and `hd` is empty in the response, it implies that the account is an authorized Google Account. Google does not issue [verifiable credentials](https://developer.android.com/identity/digi - Network accessline 112
> **Note:** If `email_verified` is `true` and `hd` is empty in the response, it implies that the account is an authorized Google Account. Google does not issue [verifiable credentials](https://developer.android.com/identity/digital-credenti - Network accessline 112
> **Note:** If `email_verified` is `true` and `hd` is empty in the response, it implies that the account is an authorized Google Account. Google does not issue [verifiable credentials](https://developer.android.com/identity/digital-credenti - Network accessline 113
> Identity guides](https://developers.google.com/identity/gsi/web/guides/verify-google-id-token). - Network accessline 113
> Identity guides](https://developers.google.com/identity/gsi/web/guides/verify-google-id-token). - Network accessline 125
> [!NOTE] > **Note:** The `hd` and `email_verified` fields are hidden from users in Credential Manager's built-in UI. You cannot make a request with only these hidden fields- in case of such requests, the response is the [`GetCredentialCanc - Network accessline 125
> [!NOTE] > **Note:** The `hd` and `email_verified` fields are hidden from users in Credential Manager's built-in UI. You cannot make a request with only these hidden fields- in case of such requests, the response is the [`GetCredentialCanc - Network accessline 126
> **Note:** The `hd` and `email_verified` fields are hidden from users in Credential Manager's built-in UI. You cannot make a request with only these hidden fields- in case of such requests, the response is the [`GetCredentialCancellationEx - Network accessline 126
> **Note:** The `hd` and `email_verified` fields are hidden from users in Credential Manager's built-in UI. You cannot make a request with only these hidden fields- in case of such requests, the response is the [`GetCredentialCancellationEx - Network accessline 161
> [!WARNING] > **Warning:** From August 2026, the [response JSON](https://developer.android.com/reference/androidx/credentials/DigitalCredential#getCredentialJson()) format has been updated to strictly match the W3C standards. It contains ` - Network accessline 161
> [!WARNING] > **Warning:** From August 2026, the [response JSON](https://developer.android.com/reference/androidx/credentials/DigitalCredential#getCredentialJson()) format has been updated to strictly match the W3C standards. It contains ` - Network accessline 162
> **Warning:** From August 2026, the [response JSON](https://developer.android.com/reference/androidx/credentials/DigitalCredential#getCredentialJson()) format has been updated to strictly match the W3C standards. It contains `data` and `pr - Network accessline 162
> **Warning:** From August 2026, the [response JSON](https://developer.android.com/reference/androidx/credentials/DigitalCredential#getCredentialJson()) format has been updated to strictly match the W3C standards. It contains `data` and `pr - Network accessline 171
The following code extracts the raw [Selective Disclosure JWT (SD-JWT)](https://datatracker.ietf.org/doc/rfc9901/) and uses a helper to decode its claims. - Network accessline 171
The following code extracts the raw [Selective Disclosure JWT (SD-JWT)](https://datatracker.ietf.org/doc/rfc9901/) and uses a helper to decode its claims. - Network accessline 172
(SD-JWT)](https://datatracker.ietf.org/doc/rfc9901/) and uses a helper to decode its claims. - Network accessline 172
(SD-JWT)](https://datatracker.ietf.org/doc/rfc9901/) and uses a helper to decode its claims. - Network accessline 198
The Credential Manager API will return a [`DigitalCredential`](https://developer.android.com/reference/androidx/credentials/DigitalCredential) - Network accessline 198
The Credential Manager API will return a [`DigitalCredential`](https://developer.android.com/reference/androidx/credentials/DigitalCredential) - Network accessline 225
"exp": 1775688222, "iat": 1775083422, "iss": "https://verifiablecredentials-pa.googleapis.com", - Network accessline 225
"exp": 1775688222, "iat": 1775083422, "iss": "https://verifiablecredentials-pa.googleapis.com", - Network accessline 226
"iat": 1775083422, "iss": "https://verifiablecredentials-pa.googleapis.com", "vct": "UserInfoCredential", - Network accessline 226
"iat": 1775083422, "iss": "https://verifiablecredentials-pa.googleapis.com", "vct": "UserInfoCredential", - Network accessline 227
"iss": "https://verifiablecredentials-pa.googleapis.com", - Network accessline 227
"iss": "https://verifiablecredentials-pa.googleapis.com", - Network accessline 232
"family_name": "Doe", "name": "Jane Doe", "picture": "http://example.com/janedoe/me.jpg", - Network accessline 232
"family_name": "Doe", "name": "Jane Doe", "picture": "http://example.com/janedoe/me.jpg", - Network accessline 233
"name": "Jane Doe", "picture": "http://example.com/janedoe/me.jpg", "hd": "" - Network accessline 233
"name": "Jane Doe", "picture": "http://example.com/janedoe/me.jpg", "hd": "" - Network accessline 234
"picture": "http://example.com/janedoe/me.jpg", - Network accessline 234
"picture": "http://example.com/janedoe/me.jpg", - Network accessline 239
> [!IMPORTANT] > **Important:** We highly recommend that after receiving the verified email, you trigger Credential Manager's [passkey creation](https://developer.android.com/identity/passkeys/create-passkeys). - Network accessline 239
> [!IMPORTANT] > **Important:** We highly recommend that after receiving the verified email, you trigger Credential Manager's [passkey creation](https://developer.android.com/identity/passkeys/create-passkeys). - Network accessline 240
> **Important:** We highly recommend that after receiving the verified email, you trigger Credential Manager's [passkey creation](https://developer.android.com/identity/passkeys/create-passkeys). - Network accessline 240
> **Important:** We highly recommend that after receiving the verified email, you trigger Credential Manager's [passkey creation](https://developer.android.com/identity/passkeys/create-passkeys). - Network accessline 262
- **Verify issuer** : Ensure the `iss` (issuer) field matches `https://verifiablecredentials-pa.googleapis.com`. - Network accessline 262
- **Verify issuer** : Ensure the `iss` (issuer) field matches `https://verifiablecredentials-pa.googleapis.com`. - Network accessline 263
- **Verify signature**: Check the signature of the SD-JWT using the public keys (JWKs) available at https://verifiablecredentials-pa.googleapis.com/.well-known/vc-public-jwks. - Network accessline 263
- **Verify signature**: Check the signature of the SD-JWT using the public keys (JWKs) available at https://verifiablecredentials-pa.googleapis.com/.well-known/vc-public-jwks. - Network accessline 265
> [!NOTE] > **Note:** Use a standard library (such as [@sd-jwt/sd-jwt-vc](https://datatracker.ietf.org/doc/rfc9901/) for Node.js) to perform the verification steps as outlined in the [OpenID for Verifiable - Network accessline 265
> [!NOTE] > **Note:** Use a standard library (such as [@sd-jwt/sd-jwt-vc](https://datatracker.ietf.org/doc/rfc9901/) for Node.js) to perform the verification steps as outlined in the [OpenID for Verifiable - Network accessline 266
> **Note:** Use a standard library (such as [@sd-jwt/sd-jwt-vc](https://datatracker.ietf.org/doc/rfc9901/) for Node.js) to perform the verification steps as outlined in the [OpenID for Verifiable - Network accessline 266
> **Note:** Use a standard library (such as [@sd-jwt/sd-jwt-vc](https://datatracker.ietf.org/doc/rfc9901/) for Node.js) to perform the verification steps as outlined in the [OpenID for Verifiable - Network accessline 267
> Presentations specification](https://openid.net/specs/openid-4-verifiable-presentations-1_0.html). - Network accessline 267
> Presentations specification](https://openid.net/specs/openid-4-verifiable-presentations-1_0.html). - Network accessline 276
> [!WARNING] > **Warning:** As mentioned in [Parse the response on the client](https://developer.android.com/identity/digital-credentials/email-verification-implementation#parse-response), from August 2026, the [response JSON](https://devel - Network accessline 276
> [!WARNING] > **Warning:** As mentioned in [Parse the response on the client](https://developer.android.com/identity/digital-credentials/email-verification-implementation#parse-response), from August 2026, the [response JSON](https://devel - Network accessline 277
> **Warning:** As mentioned in [Parse the response on the client](https://developer.android.com/identity/digital-credentials/email-verification-implementation#parse-response), from August 2026, the [response JSON](https://developer.android. - Network accessline 277
> **Warning:** As mentioned in [Parse the response on the client](https://developer.android.com/identity/digital-credentials/email-verification-implementation#parse-response), from August 2026, the [response JSON](https://developer.android. - Network accessline 300
An optional but highly recommended next step after provisioning an account is to immediately [create a passkey](https://developer.android.com/identity/passkeys/create-passkeys) for that account. This provides a secure, - Network accessline 300
An optional but highly recommended next step after provisioning an account is to immediately [create a passkey](https://developer.android.com/identity/passkeys/create-passkeys) for that account. This provides a secure, - Network accessline 301
immediately [create a passkey](https://developer.android.com/identity/passkeys/create-passkeys) for that account. This provides a secure, - Network accessline 301
immediately [create a passkey](https://developer.android.com/identity/passkeys/create-passkeys) for that account. This provides a secure, - Network accessline 307
For the flow to work on a [`WebView`](https://developer.android.com/reference/android/webkit/WebView), developers should implement a - Network accessline 307
For the flow to work on a [`WebView`](https://developer.android.com/reference/android/webkit/WebView), developers should implement a - Network accessline 308
[JavaScript bridge](https://developer.android.com/identity/sign-in/credential-manager-webview) (JS Bridge) to facilitate the handoff. This bridge - Network accessline 308
[JavaScript bridge](https://developer.android.com/identity/sign-in/credential-manager-webview) (JS Bridge) to facilitate the handoff. This bridge - Network accessline 314
- [Overview of verified email retrieval](https://developer.android.com/identity/digital-credentials/email-verification) - Network accessline 314
- [Overview of verified email retrieval](https://developer.android.com/identity/digital-credentials/email-verification) - Network accessline 315
- [Credential Manager](https://developer.android.com/identity/credential-manager) - Network accessline 315
- [Credential Manager](https://developer.android.com/identity/credential-manager)
identity/verified-email/references/android/identity/digital-credentials/email-verification.md
- Network accessline 10
- Accounts supported - Implication of email deliverability - Comparison with [Sign in with Google](https://developer.android.com/identity/sign-in/credential-manager-siwg) - Network accessline 10
- Accounts supported - Implication of email deliverability - Comparison with [Sign in with Google](https://developer.android.com/identity/sign-in/credential-manager-siwg) - Network accessline 12
- Comparison with [Sign in with Google](https://developer.android.com/identity/sign-in/credential-manager-siwg) - Network accessline 12
- Comparison with [Sign in with Google](https://developer.android.com/identity/sign-in/credential-manager-siwg) - Network accessline 16
- [Credential Manager](https://developer.android.com/identity/credential-manager) - Network accessline 16
- [Credential Manager](https://developer.android.com/identity/credential-manager) - Network accessline 17
- [Digital Credentials](https://developer.android.com/identity/digital-credentials) - Network accessline 17
- [Digital Credentials](https://developer.android.com/identity/digital-credentials) - Network accessline 18
- [Verifiable Credentials](https://developer.android.com/identity/digital-credentials#verifiable-credentials) - Network accessline 18
- [Verifiable Credentials](https://developer.android.com/identity/digital-credentials#verifiable-credentials) - Network accessline 23
[View on GitHub](https://github.com/android/skills/tree/main/identity/verified-email) - Network accessline 23
[View on GitHub](https://github.com/android/skills/tree/main/identity/verified-email) - Network accessline 27
Use an [Android skill](https://developer.android.com/tools/agents/android-skills) to integrate a secure, OTP-less email verification flow into your app. To install the skill from the [Android CLI](https://developer.android.com/tools/agents/ - Network accessline 27
Use an [Android skill](https://developer.android.com/tools/agents/android-skills) to integrate a secure, OTP-less email verification flow into your app. To install the skill from the [Android CLI](https://developer.android.com/tools/agents/ - Network accessline 63
4. Optional: If the user is signing up for your service, prompt the user to [create](https://developer.android.com/identity/passkeys/create-passkeys) a [passkey](https://developer.android.com/identity/passkeys) to make it easier for them - Network accessline 63
4. Optional: If the user is signing up for your service, prompt the user to [create](https://developer.android.com/identity/passkeys/create-passkeys) a [passkey](https://developer.android.com/identity/passkeys) to make it easier for them - Network accessline 64
[create](https://developer.android.com/identity/passkeys/create-passkeys) a [passkey](https://developer.android.com/identity/passkeys) to make it easier for them to sign in - Network accessline 64
[create](https://developer.android.com/identity/passkeys/create-passkeys) a [passkey](https://developer.android.com/identity/passkeys) to make it easier for them to sign in - Network accessline 85
Users can immediately create an account with a verified email without a separate verification step. Optionally, prompt the user to add a passkey. If they opt to add a passkey, trigger the [passkey creation](https://developer.android.com/ide - Network accessline 85
Users can immediately create an account with a verified email without a separate verification step. Optionally, prompt the user to add a passkey. If they opt to add a passkey, trigger the [passkey creation](https://developer.android.com/ide - Network accessline 86
verification step. Optionally, prompt the user to add a passkey. If they opt to add a passkey, trigger the [passkey creation](https://developer.android.com/identity/passkeys/create-passkeys) flow.  flow.  flow. - Network accessline 87
add a passkey, trigger the [passkey creation](https://developer.android.com/identity/passkeys/create-passkeys) flow. - Network accessline 88
 Email verification during sign up - Network accessline 88
 Email verification during sign up - Network accessline 94
stored on their device. Additionally, suggest that they create a passkey for future use.  E - Network accessline 94
stored on their device. Additionally, suggest that they create a passkey for future use.  E - Network accessline 96
 Email verification during account recovery - Network accessline 96
 Email verification during account recovery - Network accessline 100
Protect sensitive user actions, such as changing settings or updating profile details, by requiring a quick reauthentication step.  Email verification during reauthentication - Network accessline 102
 Email verification during reauthentication - Network accessline 106
Email verification through Credential Manager only supports verification of consumer Google Accounts. [Workspace accounts](https://knowledge.workspace.google.com/admin/getting-started/set-up-google-workspace-for-your-organization) and [supe - Network accessline 106
Email verification through Credential Manager only supports verification of consumer Google Accounts. [Workspace accounts](https://knowledge.workspace.google.com/admin/getting-started/set-up-google-workspace-for-your-organization) and [supe - Network accessline 107
consumer Google Accounts. [Workspace accounts](https://knowledge.workspace.google.com/admin/getting-started/set-up-google-workspace-for-your-organization) and [supervised - Network accessline 107
consumer Google Accounts. [Workspace accounts](https://knowledge.workspace.google.com/admin/getting-started/set-up-google-workspace-for-your-organization) and [supervised - Network accessline 108
accounts](https://support.google.com/families/answer/9499054) aren't supported. - Network accessline 108
accounts](https://support.google.com/families/answer/9499054) aren't supported. - Network accessline 117
For more information about what verification implies, see [Digital Credentials](https://developer.android.com/identity/digital-credentials#verified). - Network accessline 117
For more information about what verification implies, see [Digital Credentials](https://developer.android.com/identity/digital-credentials#verified). - Network accessline 118
Credentials](https://developer.android.com/identity/digital-credentials#verified). - Network accessline 118
Credentials](https://developer.android.com/identity/digital-credentials#verified). - Network accessline 120
> [!NOTE] > **Note:** Apart from a user's email information, you can request other unverified fields, such as the user's given name, family name, name, and the profile picture of their Google Account. However, only the email is verified by - Network accessline 120
> [!NOTE] > **Note:** Apart from a user's email information, you can request other unverified fields, such as the user's given name, family name, name, and the profile picture of their Google Account. However, only the email is verified by - Network accessline 122
> For phone number verification, see [Verify phone numbers with digital credentials](https://developer.android.com/identity/digital-credentials/phone-number-verification). For a Firebase solution, see [Firebase Phone Number Verification](ht - Network accessline 122
> For phone number verification, see [Verify phone numbers with digital credentials](https://developer.android.com/identity/digital-credentials/phone-number-verification). For a Firebase solution, see [Firebase Phone Number Verification](ht - Network accessline 126
The system issues [verifiable credentials](https://developer.android.com/identity/digital-credentials#verified) (VCs) based on the user's current - Network accessline 126
The system issues [verifiable credentials](https://developer.android.com/identity/digital-credentials#verified) (VCs) based on the user's current - Network accessline 148
While both Digital Credentials and [Sign in with Google](https://developer.android.com/identity/sign-in/credential-manager-siwg) solutions provide a - Network accessline 148
While both Digital Credentials and [Sign in with Google](https://developer.android.com/identity/sign-in/credential-manager-siwg) solutions provide a - Network accessline 152
- **Registration**: The Credential Manager flow doesn't require Google registration, unlike Sign in with Google. - **Platform support**: The Credential Manager flow is an Android-only solution. - **Scopes** : Unlike Sign in with Google, whi - Network accessline 152
- **Registration**: The Credential Manager flow doesn't require Google registration, unlike Sign in with Google. - **Platform support**: The Credential Manager flow is an Android-only solution. - **Scopes** : Unlike Sign in with Google, whi - Network accessline 154
- **Scopes** : Unlike Sign in with Google, which can use OAuth 2.0 to request access to user data (such as Calendar or Drive through scopes), the Digital Credentials API is strictly for retrieving verified identity attributes. It can't be u - Network accessline 154
- **Scopes** : Unlike Sign in with Google, which can use OAuth 2.0 to request access to user data (such as Calendar or Drive through scopes), the Digital Credentials API is strictly for retrieving verified identity attributes. It can't be u - Network accessline 158
To implement this feature in your app, see the [Implementation guide](https://developer.android.com/identity/digital-credentials/email-verification-implementation). - Network accessline 158
To implement this feature in your app, see the [Implementation guide](https://developer.android.com/identity/digital-credentials/email-verification-implementation).
identity/verified-email/references/android/identity/digital-credentials/index.md
- Network accessline 2
users can use to provide information about themselves, and use to authenticate or authorize themselves. Digital credentials are based on the [open W3C Digital Credentials API industry standard](https://www.w3.org/TR/digital-credentials/). O - Network accessline 2
users can use to provide information about themselves, and use to authenticate or authorize themselves. Digital credentials are based on the [open W3C Digital Credentials API industry standard](https://www.w3.org/TR/digital-credentials/). O - Network accessline 3
or authorize themselves. Digital credentials are based on the [open W3C Digital Credentials API industry standard](https://www.w3.org/TR/digital-credentials/). On Android, this is implemented through [Credential Manager's](https://developer - Network accessline 3
or authorize themselves. Digital credentials are based on the [open W3C Digital Credentials API industry standard](https://www.w3.org/TR/digital-credentials/). On Android, this is implemented through [Credential Manager's](https://developer - Network accessline 4
Credentials API industry standard](https://www.w3.org/TR/digital-credentials/). On Android, this is - Network accessline 4
Credentials API industry standard](https://www.w3.org/TR/digital-credentials/). On Android, this is - Network accessline 5
implemented through [Credential Manager's](https://developer.android.com/identity/credential-manager) [Digital Credentials API](https://developer.android.com/reference/kotlin/androidx/credentials/DigitalCredential). - Network accessline 5
implemented through [Credential Manager's](https://developer.android.com/identity/credential-manager) [Digital Credentials API](https://developer.android.com/reference/kotlin/androidx/credentials/DigitalCredential). - Network accessline 6
 **Figure 1.** Using a digital credential in a sample app. - Network accessline 6
 **Figure 1.** Using a digital credential in a sample app. - Network accessline 23
- **Accept government-issued IDs**: Apps can request and use official government document attributes, for flows including age verification, account recovery, Know-Your-Customer (KYC) process. - **Verify phone numbers** : Apps can use the AP - Network accessline 23
- **Accept government-issued IDs**: Apps can request and use official government document attributes, for flows including age verification, account recovery, Know-Your-Customer (KYC) process. - **Verify phone numbers** : Apps can use the AP - Network accessline 24
- **Verify phone numbers** : Apps can use the API for phone number verification, by exchanging digital credentials derived from the phone's SIM card directly with the user's carrier. This removes the need for one-time passwords (OTPs), impr - Network accessline 24
- **Verify phone numbers** : Apps can use the API for phone number verification, by exchanging digital credentials derived from the phone's SIM card directly with the user's carrier. This removes the need for one-time passwords (OTPs), impr - Network accessline 25
- **Verify email addresses** : The API lets your app retrieve verified emails directly from the user's device, removing the need for OTPs, for frictionless sign-up, sign-in, and account recovery. For more information, see the [email verific - Network accessline 25
- **Verify email addresses** : The API lets your app retrieve verified emails directly from the user's device, removing the need for OTPs, for frictionless sign-up, sign-in, and account recovery. For more information, see the [email verific - Network accessline 33
- **Issuers** : Issuers are apps that securely create and [issue](https://developer.android.com/identity/digital-credentials/credential-issuer/issue-credentials) credentials. - Network accessline 33
- **Issuers** : Issuers are apps that securely create and [issue](https://developer.android.com/identity/digital-credentials/credential-issuer/issue-credentials) credentials. - Network accessline 34
- **Holders (wallets)** : Holders are apps on a user's device that store credentials. They should be able to share these credentials with requesting apps through a [presentation](https://developer.android.com/identity/digital-credentials/cr - Network accessline 34
- **Holders (wallets)** : Holders are apps on a user's device that store credentials. They should be able to share these credentials with requesting apps through a [presentation](https://developer.android.com/identity/digital-credentials/cr - Network accessline 65
 **Figure 2.** The UX variants for digital credentials for email verificati - Network accessline 65
 **Figure 2.** The UX variants for digital credentials for email verificati - Network accessline 72
- **Sharing** : Digital credentials are requested using the [OpenID4VP standard](https://openid.net/specs/openid-4-verifiable-presentations-1_0.html#name-introduction). - Network accessline 72
- **Sharing** : Digital credentials are requested using the [OpenID4VP standard](https://openid.net/specs/openid-4-verifiable-presentations-1_0.html#name-introduction). - Network accessline 73
standard](https://openid.net/specs/openid-4-verifiable-presentations-1_0.html#name-introduction). - Network accessline 73
standard](https://openid.net/specs/openid-4-verifiable-presentations-1_0.html#name-introduction). - Network accessline 74
- **Issuance** : Digital credentials are issued using the [OpenID4VCI standard](https://openid.github.io/OpenID4VCI/openid-4-verifiable-credential-issuance-1_1-wg-draft.html). - **Credential storage format** : Digital credentials are repr - Network accessline 74
- **Issuance** : Digital credentials are issued using the [OpenID4VCI standard](https://openid.github.io/OpenID4VCI/openid-4-verifiable-credential-issuance-1_1-wg-draft.html). - **Credential storage format** : Digital credentials are repr - Network accessline 75
standard](https://openid.github.io/OpenID4VCI/openid-4-verifiable-credential-issuance-1_1-wg-draft.html). - Network accessline 75
standard](https://openid.github.io/OpenID4VCI/openid-4-verifiable-credential-issuance-1_1-wg-draft.html). - Network accessline 76
- **Credential storage format** : Digital credentials are represented in standardized formats maintained by different standards bodies, primarily the following: - IETF [selective disclosure of JSON web tokens (sd-jwt)](https://datatracker - Network accessline 76
- **Credential storage format** : Digital credentials are represented in standardized formats maintained by different standards bodies, primarily the following: - IETF [selective disclosure of JSON web tokens (sd-jwt)](https://datatracker - Network accessline 77
- IETF [selective disclosure of JSON web tokens (sd-jwt)](https://datatracker.ietf.org/doc/draft-ietf-oauth-selective-disclosure-jwt/) VC - Network accessline 77
- IETF [selective disclosure of JSON web tokens (sd-jwt)](https://datatracker.ietf.org/doc/draft-ietf-oauth-selective-disclosure-jwt/) VC - Network accessline 78
- ISO [MDoc](https://www.iso.org/standard/69084.html) - Network accessline 78
- ISO [MDoc](https://www.iso.org/standard/69084.html) - Network accessline 92
1. **Install the sample apps on the Android-powered device** : Use one of the following methods to install the apps on your first device: - **Use the prebuilt APKs** : - **Download the holder app** : Sign in to your GitHub account, - Network accessline 92
1. **Install the sample apps on the Android-powered device** : Use one of the following methods to install the apps on your first device: - **Use the prebuilt APKs** : - **Download the holder app** : Sign in to your GitHub account, - Network accessline 93
- **Use the prebuilt APKs** : - **Download the holder app** : Sign in to your GitHub account, navigate to the [holder app GitHub Actions page](https://github.com/digitalcredentialsdev/CMWallet/actions), select the latest successful bui - Network accessline 93
- **Use the prebuilt APKs** : - **Download the holder app** : Sign in to your GitHub account, navigate to the [holder app GitHub Actions page](https://github.com/digitalcredentialsdev/CMWallet/actions), select the latest successful bui - Network accessline 94
- **Download the holder app** : Sign in to your GitHub account, navigate to the [holder app GitHub Actions page](https://github.com/digitalcredentialsdev/CMWallet/actions), select the latest successful build, and download the `app-debug.apk - Network accessline 94
- **Download the holder app** : Sign in to your GitHub account, navigate to the [holder app GitHub Actions page](https://github.com/digitalcredentialsdev/CMWallet/actions), select the latest successful build, and download the `app-debug.apk - Network accessline 95
- **Download the verifier app** : For the sample verifier app, get the APK from the [Identity samples repository](https://github.com/android/identity-samples/actions). Then, install the APK on your Android-powered device. This app is called - Network accessline 95
- **Download the verifier app** : For the sample verifier app, get the APK from the [Identity samples repository](https://github.com/android/identity-samples/actions). Then, install the APK on your Android-powered device. This app is called - Network accessline 102
> [!NOTE] > **Note:** You can also initiate the request from a web browser on another device by navigating to <https://digital-credentials.dev/> and selecting **Request Credentials (OpenID4VP 1.0)**. - Network accessline 102
> [!NOTE] > **Note:** You can also initiate the request from a web browser on another device by navigating to <https://digital-credentials.dev/> and selecting **Request Credentials (OpenID4VP 1.0)**. - Network accessline 103
> **Note:** You can also initiate the request from a web browser on another device by navigating to <https://digital-credentials.dev/> and selecting **Request Credentials (OpenID4VP 1.0)**. - Network accessline 103
> **Note:** You can also initiate the request from a web browser on another device by navigating to <https://digital-credentials.dev/> and selecting **Request Credentials (OpenID4VP 1.0)**. - Network accessline 107
- For more information about issuing digital credentials, see the [issuer guide](https://developer.android.com/identity/digital-credentials/credential-issuer/issue-credentials). - Network accessline 107
- For more information about issuing digital credentials, see the [issuer guide](https://developer.android.com/identity/digital-credentials/credential-issuer/issue-credentials). - Network accessline 108
guide](https://developer.android.com/identity/digital-credentials/credential-issuer/issue-credentials). - Network accessline 108
guide](https://developer.android.com/identity/digital-credentials/credential-issuer/issue-credentials). - Network accessline 109
- For more information about holder apps, see the [holder guide](https://developer.android.com/identity/digital-credentials/credential-holder/present-credentials). - Network accessline 109
- For more information about holder apps, see the [holder guide](https://developer.android.com/identity/digital-credentials/credential-holder/present-credentials). - Network accessline 110
- For more information about verifying users based on digital credentials, see the [verifier guide](https://developer.android.com/identity/digital-credentials/credential-verifier/request-credential). - Network accessline 110
- For more information about verifying users based on digital credentials, see the [verifier guide](https://developer.android.com/identity/digital-credentials/credential-verifier/request-credential). - Network accessline 112
credentials on the web](https://developer.chrome.com/blog/digital-credentials-api-shipped). - Network accessline 112
credentials on the web](https://developer.chrome.com/blog/digital-credentials-api-shipped).
identity/verified-email/references/android/identity/passkeys/create-passkeys.md
- Network accessline 10
> [!TIP] > **Tip:** While designing authentication flows with passkeys, make sure that you follow the [UX guidelines for passkeys](https://developer.android.com/design/ui/mobile/guides/patterns/passkeys). - Network accessline 10
> [!TIP] > **Tip:** While designing authentication flows with passkeys, make sure that you follow the [UX guidelines for passkeys](https://developer.android.com/design/ui/mobile/guides/patterns/passkeys). - Network accessline 11
> **Tip:** While designing authentication flows with passkeys, make sure that you follow the [UX guidelines for passkeys](https://developer.android.com/design/ui/mobile/guides/patterns/passkeys). - Network accessline 11
> **Tip:** While designing authentication flows with passkeys, make sure that you follow the [UX guidelines for passkeys](https://developer.android.com/design/ui/mobile/guides/patterns/passkeys). - Network accessline 13
 **Figure 1:**Creation of passkeys - Network accessline 13
 **Figure 1:**Creation of passkeys - Network accessline 17
Make sure that you have set up [Digital Asset Links](https://developer.android.com/identity/credential-manager/prerequisites) and that you target - Network accessline 17
Make sure that you have set up [Digital Asset Links](https://developer.android.com/identity/credential-manager/prerequisites) and that you target - Network accessline 22
This guide focuses on the changes required in your [relying party client app](https://developer.android.com/identity/credential-manager#authentication-terminology) - Network accessline 22
This guide focuses on the changes required in your [relying party client app](https://developer.android.com/identity/credential-manager#authentication-terminology) - Network accessline 23
to create a passkey, and gives a brief overview of the [relying party app server](https://developer.android.com/identity/credential-manager#authentication-terminology) implementation. To learn more about the server-side integration, see [Se - Network accessline 23
to create a passkey, and gives a brief overview of the [relying party app server](https://developer.android.com/identity/credential-manager#authentication-terminology) implementation. To learn more about the server-side integration, see [Se - Network accessline 24
server](https://developer.android.com/identity/credential-manager#authentication-terminology) implementation. To learn more about the server-side integration, see - Network accessline 24
server](https://developer.android.com/identity/credential-manager#authentication-terminology) implementation. To learn more about the server-side integration, see - Network accessline 25
[Server-side passkey registration](https://developers.google.com/identity/passkeys/developer-guides/server-registration). - Network accessline 25
[Server-side passkey registration](https://developers.google.com/identity/passkeys/developer-guides/server-registration). - Network accessline 27
1. [**Add dependencies to your app**](https://developer.android.com/identity/passkeys/create-passkeys#add-dependencies): Add the required Credential Manager libraries. - Network accessline 27
1. [**Add dependencies to your app**](https://developer.android.com/identity/passkeys/create-passkeys#add-dependencies): Add the required Credential Manager libraries. - Network accessline 28
2. [**Instantiate Credential Manager**](https://developer.android.com/identity/passkeys/create-passkeys#instantiate): Create a Credential Manager instance. - Network accessline 28
2. [**Instantiate Credential Manager**](https://developer.android.com/identity/passkeys/create-passkeys#instantiate): Create a Credential Manager instance. - Network accessline 29
3. [**Get credential creation options from the app server**](https://developer.android.com/identity/passkeys/create-passkeys#get-options): From your app server, send the client app the details required to create the passkey, such as informa - Network accessline 29
3. [**Get credential creation options from the app server**](https://developer.android.com/identity/passkeys/create-passkeys#get-options): From your app server, send the client app the details required to create the passkey, such as informa - Network accessline 30
4. [**Request a passkey**](https://developer.android.com/identity/passkeys/create-passkeys#request-passkey): In your app, use the details received from the app server to create a [`GetPublicKeyCredentialOption`](https://developer.android.co - Network accessline 30
4. [**Request a passkey**](https://developer.android.com/identity/passkeys/create-passkeys#request-passkey): In your app, use the details received from the app server to create a [`GetPublicKeyCredentialOption`](https://developer.android.co - Network accessline 31
5. [**Handle the passkey creation response**](https://developer.android.com/identity/passkeys/create-passkeys#handle-response): When you receive the credentials on your client app, you must encode, serialize and then send the public key to - Network accessline 31
5. [**Handle the passkey creation response**](https://developer.android.com/identity/passkeys/create-passkeys#handle-response): When you receive the credentials on your client app, you must encode, serialize and then send the public key to - Network accessline 32
6. [**Verify and save the public key on the server**](https://developer.android.com/identity/passkeys/create-passkeys#verify): Complete the server-side steps to verify the origin of the credential and then save the public key. - Network accessline 32
6. [**Verify and save the public key on the server**](https://developer.android.com/identity/passkeys/create-passkeys#verify): Complete the server-side steps to verify the origin of the credential and then save the public key. - Network accessline 33
7. [**Notify the user**](https://developer.android.com/identity/passkeys/create-passkeys#notify): Notify the user that their passkey has been created. - Network accessline 33
7. [**Notify the user**](https://developer.android.com/identity/passkeys/create-passkeys#notify): Notify the user that their passkey has been created. - Network accessline 35
> [!TIP] > **Tip:** To enhance the user experience during sign up, add functionality to [restore credentials](https://developer.android.com/identity/sign-in/restore-credentials) on a new device to let users seamlessly set up their existing - Network accessline 35
> [!TIP] > **Tip:** To enhance the user experience during sign up, add functionality to [restore credentials](https://developer.android.com/identity/sign-in/restore-credentials) on a new device to let users seamlessly set up their existing - Network accessline 36
> **Tip:** To enhance the user experience during sign up, add functionality to [restore credentials](https://developer.android.com/identity/sign-in/restore-credentials) on a new device to let users seamlessly set up their existing accounts - Network accessline 36
> **Tip:** To enhance the user experience during sign up, add functionality to [restore credentials](https://developer.android.com/identity/sign-in/restore-credentials) on a new device to let users seamlessly set up their existing accounts - Network accessline 37
> credential fields](https://developer.android.com/identity/passkeys/create-passkeys#suppress-autofill). - Network accessline 37
> credential fields](https://developer.android.com/identity/passkeys/create-passkeys#suppress-autofill). - Network accessline 61
> [!NOTE] > **Note:** Use the latest available versions of the dependencies. Versions of [`androidx.credentials`](https://developer.android.com/identity/passkeys/create-passkeys#automatic-upgrade) earlier than version 1.2 throw an `Unsuppor - Network accessline 61
> [!NOTE] > **Note:** Use the latest available versions of the dependencies. Versions of [`androidx.credentials`](https://developer.android.com/identity/passkeys/create-passkeys#automatic-upgrade) earlier than version 1.2 throw an `Unsuppor - Network accessline 62
> **Note:** Use the latest available versions of the dependencies. Versions of [`androidx.credentials`](https://developer.android.com/identity/passkeys/create-passkeys#automatic-upgrade) earlier than version 1.2 throw an `UnsupportedOperati - Network accessline 62
> **Note:** Use the latest available versions of the dependencies. Versions of [`androidx.credentials`](https://developer.android.com/identity/passkeys/create-passkeys#automatic-upgrade) earlier than version 1.2 throw an `UnsupportedOperati - Network accessline 79
information required to create a passkey, such as information about the user, the app, and additional configuration properties. To learn more, see [Server side passkey registration](https://developers.google.com/identity/passkeys/developer- - Network accessline 79
information required to create a passkey, such as information about the user, the app, and additional configuration properties. To learn more, see [Server side passkey registration](https://developers.google.com/identity/passkeys/developer- - Network accessline 81
side passkey registration](https://developers.google.com/identity/passkeys/developer-guides/server-registration). - Network accessline 81
side passkey registration](https://developers.google.com/identity/passkeys/developer-guides/server-registration). - Network accessline 84
server. These are usually represented in JSON format. To learn more about how this decoding is done for web clients, see [Encoding and Decoding](https://developers.google.com/identity/passkeys/developer-guides/server-registration#encoding_a - Network accessline 84
server. These are usually represented in JSON format. To learn more about how this decoding is done for web clients, see [Encoding and Decoding](https://developers.google.com/identity/passkeys/developer-guides/server-registration#encoding_a - Network accessline 85
this decoding is done for web clients, see [Encoding and Decoding](https://developers.google.com/identity/passkeys/developer-guides/server-registration#encoding_and_decoding). For Android client apps, you must handle the decoding separately - Network accessline 85
this decoding is done for web clients, see [Encoding and Decoding](https://developers.google.com/identity/passkeys/developer-guides/server-registration#encoding_and_decoding). For Android client apps, you must handle the decoding separately - Network accessline 86
Decoding](https://developers.google.com/identity/passkeys/developer-guides/server-registration#encoding_and_decoding). For Android client apps, you must handle the decoding - Network accessline 86
Decoding](https://developers.google.com/identity/passkeys/developer-guides/server-registration#encoding_and_decoding). For Android client apps, you must handle the decoding - Network accessline 135
- `displayName`: An optional, user-friendly name for the account intended for display in the account selector. - `authenticatorSelection`: Details about the device that will be used for authentication. - `authenticatorAttachment`: Indicat - Network accessline 135
- `displayName`: An optional, user-friendly name for the account intended for display in the account selector. - `authenticatorSelection`: Details about the device that will be used for authentication. - `authenticatorAttachment`: Indicat - Network accessline 136
- `authenticatorSelection`: Details about the device that will be used for authentication. - `authenticatorAttachment`: Indicates the preferred [authenticator](https://www.w3.org/TR/webauthn/#authenticator). The possible values are as fol - Network accessline 136
- `authenticatorSelection`: Details about the device that will be used for authentication. - `authenticatorAttachment`: Indicates the preferred [authenticator](https://www.w3.org/TR/webauthn/#authenticator). The possible values are as fol - Network accessline 137
- `authenticatorAttachment`: Indicates the preferred [authenticator](https://www.w3.org/TR/webauthn/#authenticator). The possible values are as follows: - Network accessline 137
- `authenticatorAttachment`: Indicates the preferred [authenticator](https://www.w3.org/TR/webauthn/#authenticator). The possible values are as follows: - Network accessline 145
- `required`: Use this value if invoking a user verification method available on the device is required. - `discouraged`: Use this value if using a user verification method is discouraged. To learn more about `userVerification` - Network accessline 145
- `required`: Use this value if invoking a user verification method available on the device is required. - `discouraged`: Use this value if using a user verification method is discouraged. To learn more about `userVerification` - Network accessline 146
- `discouraged`: Use this value if using a user verification method is discouraged. To learn more about `userVerification`, see [userVerification deep dive](https://web.dev/articles/webauthn-user-verification). - `excludeCredential - Network accessline 146
- `discouraged`: Use this value if using a user verification method is discouraged. To learn more about `userVerification`, see [userVerification deep dive](https://web.dev/articles/webauthn-user-verification). - `excludeCredential - Network accessline 147
To learn more about `userVerification`, see [userVerification deep dive](https://web.dev/articles/webauthn-user-verification). - Network accessline 147
To learn more about `userVerification`, see [userVerification deep dive](https://web.dev/articles/webauthn-user-verification). - Network accessline 148
- `excludeCredentials`: List credential IDs in an [array](https://w3c.github.io/webauthn/#dom-publickeycredentialcreationoptions-excludecredentials) to prevent the creation of a duplicate passkey if one already exists with the same credenti - Network accessline 148
- `excludeCredentials`: List credential IDs in an [array](https://w3c.github.io/webauthn/#dom-publickeycredentialcreationoptions-excludecredentials) to prevent the creation of a duplicate passkey if one already exists with the same credenti - Network accessline 158
- `requestJson`: The credential creation options sent by the app server. - `preferImmediatelyAvailableCredentials`: This is an optional Boolean field that defines whether to only use locally-available or credential provider-synced credentia - Network accessline 158
- `requestJson`: The credential creation options sent by the app server. - `preferImmediatelyAvailableCredentials`: This is an optional Boolean field that defines whether to only use locally-available or credential provider-synced credentia - Network accessline 159
- `preferImmediatelyAvailableCredentials`: This is an optional Boolean field that defines whether to only use locally-available or credential provider-synced credentials to fulfill the request, instead of credentials from security keys or [ - Network accessline 159
- `preferImmediatelyAvailableCredentials`: This is an optional Boolean field that defines whether to only use locally-available or credential provider-synced credentials to fulfill the request, instead of credentials from security keys or [ - Network accessline 160
- `false` (default): Use this value if the call to Credential Manager was triggered by an explicit user action. - `true`: Use this value if Credential Manager is opportunistically called, such as when first opening the app. If you - Network accessline 160
- `false` (default): Use this value if the call to Credential Manager was triggered by an explicit user action. - `true`: Use this value if Credential Manager is opportunistically called, such as when first opening the app. If you - Network accessline 161
- `true`: Use this value if Credential Manager is opportunistically called, such as when first opening the app. If you set the value to `true` and there are no immediately available credentials, Credential Manager won't show any UI a - Network accessline 161
- `true`: Use this value if Credential Manager is opportunistically called, such as when first opening the app. If you set the value to `true` and there are no immediately available credentials, Credential Manager won't show any UI a - Network accessline 162
If you set the value to `true` and there are no immediately available credentials, Credential Manager won't show any UI and the request will fail immediately, returning NoCredentialException for get requests and [`CreateCredentialNoCreateOp - Network accessline 162
If you set the value to `true` and there are no immediately available credentials, Credential Manager won't show any UI and the request will fail immediately, returning NoCredentialException for get requests and [`CreateCredentialNoCreateOp - Network accessline 163
- `origin`: This field is automatically set for Android apps. For browsers and similarly privileged apps that need to set `origin`, see [Make Credential Manager calls on behalf of other parties for privileged apps](https://developer.andro - Network accessline 163
- `origin`: This field is automatically set for Android apps. For browsers and similarly privileged apps that need to set `origin`, see [Make Credential Manager calls on behalf of other parties for privileged apps](https://developer.andro - Network accessline 164
Manager calls on behalf of other parties for privileged apps](https://developer.android.com/training/sign-in/privileged-apps). - Network accessline 164
Manager calls on behalf of other parties for privileged apps](https://developer.android.com/training/sign-in/privileged-apps). - Network accessline 165
- `isConditional`: This is an optional field that defaults to `false`. For more information, see [Automatically create a passkey](https://developer.android.com/identity/passkeys/create-passkeys#automatic-upgrade). - Network accessline 165
- `isConditional`: This is an optional field that defaults to `false`. For more information, see [Automatically create a passkey](https://developer.android.com/identity/passkeys/create-passkeys#automatic-upgrade). - Network accessline 179
background and store it in the user's credential provider, such as Google Password Manager. For an example of how this is implemented, see the [public sample](https://github.com/android/identity-samples/blob/main/Shrine/app/src/main/java/co - Network accessline 179
background and store it in the user's credential provider, such as Google Password Manager. For an example of how this is implemented, see the [public sample](https://github.com/android/identity-samples/blob/main/Shrine/app/src/main/java/co - Network accessline 180
Password Manager. For an example of how this is implemented, see the [public sample](https://github.com/android/identity-samples/blob/main/Shrine/app/src/main/java/com/authentication/shrine/ui/AuthenticationScreen.kt#L98). . . - Network accessline 181
sample](https://github.com/android/identity-samples/blob/main/Shrine/app/src/main/java/com/authentication/shrine/ui/AuthenticationScreen.kt#L98). - Network accessline 182
 **Figure 2:**Google Password Manager notification - Network accessline 182
 **Figure 2:**Google Password Manager notification - Network accessline 192
The response after you successfully call `createCredential()` is a [PublicKeyCredential](https://developer.android.com/jetpack/androidx/releases/credentials) object. - Network accessline 192
The response after you successfully call `createCredential()` is a [PublicKeyCredential](https://developer.android.com/jetpack/androidx/releases/credentials) object. - Network accessline 193
[PublicKeyCredential](https://developer.android.com/jetpack/androidx/releases/credentials) object. - Network accessline 193
[PublicKeyCredential](https://developer.android.com/jetpack/androidx/releases/credentials) object. - Network accessline 244
On the app server, you must verify the public key credential and then [save the public key](https://web.dev/articles/passkey-registration#save-credential). - Network accessline 244
On the app server, you must verify the public key credential and then [save the public key](https://web.dev/articles/passkey-registration#save-credential). - Network accessline 245
public key](https://web.dev/articles/passkey-registration#save-credential). - Network accessline 245
public key](https://web.dev/articles/passkey-registration#save-credential). - Network accessline 280
> [!NOTE] > **Note:** When you save the passkey on the app server, make sure that you save the Authenticator Attestation Globally Unique Identifier ([AAGUID](https://web.dev/articles/webauthn-aaguid)) from the client data. The AAGUID is a u - Network accessline 280
> [!NOTE] > **Note:** When you save the passkey on the app server, make sure that you save the Authenticator Attestation Globally Unique Identifier ([AAGUID](https://web.dev/articles/webauthn-aaguid)) from the client data. The AAGUID is a u - Network accessline 281
> **Note:** When you save the passkey on the app server, make sure that you save the Authenticator Attestation Globally Unique Identifier ([AAGUID](https://web.dev/articles/webauthn-aaguid)) from the client data. The AAGUID is a unique numb - Network accessline 281
> **Note:** When you save the passkey on the app server, make sure that you save the Authenticator Attestation Globally Unique Identifier ([AAGUID](https://web.dev/articles/webauthn-aaguid)) from the client data. The AAGUID is a unique numb - Network accessline 285
After the passkey is successfully created, notify your users about the passkey and inform them that they can manage their passkeys from their credential provider app or from [within the app settings](https://developer.android.com/identity/p - Network accessline 285
After the passkey is successfully created, notify your users about the passkey and inform them that they can manage their passkeys from their credential provider app or from [within the app settings](https://developer.android.com/identity/p - Network accessline 286
and inform them that they can manage their passkeys from their credential provider app or from [within the app settings](https://developer.android.com/identity/passkeys/manage-passkeys). Notify users by using a custom dialog, notification, - Network accessline 286
and inform them that they can manage their passkeys from their credential provider app or from [within the app settings](https://developer.android.com/identity/passkeys/manage-passkeys). Notify users by using a custom dialog, notification, - Network accessline 287
provider app or from [within the app settings](https://developer.android.com/identity/passkeys/manage-passkeys). Notify users by using a - Network accessline 287
provider app or from [within the app settings](https://developer.android.com/identity/passkeys/manage-passkeys). Notify users by using a - Network accessline 301
To allow users to seamlessly log into their accounts on a new device, implement the [Restore Credentials](https://developer.android.com/identity/sign-in/restore-credentials) functionality. Adding restore credentials with - Network accessline 301
To allow users to seamlessly log into their accounts on a new device, implement the [Restore Credentials](https://developer.android.com/identity/sign-in/restore-credentials) functionality. Adding restore credentials with - Network accessline 302
the [Restore Credentials](https://developer.android.com/identity/sign-in/restore-credentials) functionality. Adding restore credentials with - Network accessline 302
the [Restore Credentials](https://developer.android.com/identity/sign-in/restore-credentials) functionality. Adding restore credentials with - Network accessline 325
- [Sign in with passkeys](https://developer.android.com/identity/passkeys/sign-in-with-passkeys) - Network accessline 325
- [Sign in with passkeys](https://developer.android.com/identity/passkeys/sign-in-with-passkeys) - Network accessline 326
- [Manage passkeys](https://developer.android.com/identity/passkeys/manage-passkeys) - Network accessline 326
- [Manage passkeys](https://developer.android.com/identity/passkeys/manage-passkeys) - Network accessline 327
- [Understand passkey user experience flows](https://developer.android.com/design/ui/mobile/guides/patterns/passkeys) - Network accessline 327
- [Understand passkey user experience flows](https://developer.android.com/design/ui/mobile/guides/patterns/passkeys)
identity/verified-email/references/android/identity/sign-in/credential-manager-webview.md
- Network accessline 1
This document describes how to integrate the Credential Manager API with an Android app that uses WebView. Credential Manager is supported natively in the `android.webkit.WebView` library in [version 1.12.0](https://developer.android.com/je - Network accessline 1
This document describes how to integrate the Credential Manager API with an Android app that uses WebView. Credential Manager is supported natively in the `android.webkit.WebView` library in [version 1.12.0](https://developer.android.com/je - Network accessline 3
`android.webkit.WebView` library in [version 1.12.0](https://developer.android.com/jetpack/androidx/releases/webkit#1.12.0) and later. - Network accessline 3
`android.webkit.WebView` library in [version 1.12.0](https://developer.android.com/jetpack/androidx/releases/webkit#1.12.0) and later. - Network accessline 16
You will also need to associate your app with a website that your app owns using digital asset linking. For more information, see [adding digital asset linking](https://developer.android.com/identity/credential-manager/prerequisites). - Network accessline 16
You will also need to associate your app with a website that your app owns using digital asset linking. For more information, see [adding digital asset linking](https://developer.android.com/identity/credential-manager/prerequisites). - Network accessline 18
[adding digital asset linking](https://developer.android.com/identity/credential-manager/prerequisites). - Network accessline 18
[adding digital asset linking](https://developer.android.com/identity/credential-manager/prerequisites). - Network accessline 28
setContent { // Put your webview link here. val url = "https://project-sesame-426206.appspot.com/passkey-signup" - Network accessline 28
setContent { // Put your webview link here. val url = "https://project-sesame-426206.appspot.com/passkey-signup" - Network accessline 29
// Put your webview link here. val url = "https://project-sesame-426206.appspot.com/passkey-signup" AndroidView( - Network accessline 29
// Put your webview link here. val url = "https://project-sesame-426206.appspot.com/passkey-signup" AndroidView( - Network accessline 30
val url = "https://project-sesame-426206.appspot.com/passkey-signup" - Network accessline 30
val url = "https://project-sesame-426206.appspot.com/passkey-signup" - Network accessline 69
To learn how to build Web integration see [Create a passkey for passwordless logins](https://web.dev/passkey-registration/). - Network accessline 69
To learn how to build Web integration see [Create a passkey for passwordless logins](https://web.dev/passkey-registration/). - Network accessline 70
[Create a passkey for passwordless logins](https://web.dev/passkey-registration/). - Network accessline 70
[Create a passkey for passwordless logins](https://web.dev/passkey-registration/). - Network accessline 71
You can also reference the [demo site source](https://github.com/deephand/webauthn-in-webview). - Network accessline 71
You can also reference the [demo site source](https://github.com/deephand/webauthn-in-webview). - Network accessline 84
Verify the implementation corresponds to the [UX recommendations](https://developer.android.com/design/ui/mobile/guides/patterns/passkeys). - Network accessline 84
Verify the implementation corresponds to the [UX recommendations](https://developer.android.com/design/ui/mobile/guides/patterns/passkeys).
jetpack-compose/adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/container-behavior.md
- Network accessline 44
|---|---| | |  | - Network accessline 44
|---|---| | |  | - Network accessline 45
| |  | - Network accessline 45
| |  | - Network accessline 46
| `Start` |  | - Network accessline 46
| `Start` |  | - Network accessline 47
| `Center` |  | - Network accessline 47
| `Center` |  | - Network accessline 48
| `End` |  | - Network accessline 48
| `End` |  | - Network accessline 49
| `SpaceBetween` |  | - Network accessline 49
| `SpaceBetween` |  | - Network accessline 50
| `SpaceAround` |  | - Network accessline 50
| `SpaceAround` |  | - Network accessline 51
| `SpaceEvenly` |  | - Network accessline 51
| `SpaceEvenly` |  | - Network accessline 55
Use `alignItems` to align items along the cross axis within a single line. This behavior can be overridden by individual items using the [`alignSelf` modifier](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/item-b - Network accessline 55
Use `alignItems` to align items along the cross axis within a single line. This behavior can be overridden by individual items using the [`alignSelf` modifier](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/item-b - Network accessline 57
[`alignSelf` modifier](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/item-behavior#item-alignment). - Network accessline 57
[`alignSelf` modifier](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/item-behavior#item-alignment). - Network accessline 61
|---|---|---|---|---|---| |  |  |  |  |  |  |  |  | : Prevents items from wrapping. Items overflow if the main size is insufficient. | : Prevents items from wrapping. Items overflow if the main size is insufficient. | ), a new line is created in the direction of the cross axis. For ex - Network accessline 83
| `Wrap`: When there is insufficient space for an item (plus any [gap](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/container-behavior#add-gaps)), a new line is created in the direction of the cross axis. For ex - Network accessline 84
| `WrapReverse`: The same as `Wrap`, except the new line is added in the opposite direction to the cross axis. For example, if the direction is `Row`, a new line is added **above**. |  **Figure 1.** First item placed in the `FlexBox` container. - Network accessline 93
 **Figure 1.** First item placed in the `FlexBox` container. - Network accessline 96
`40dp`. The required space is `48dp`. There is space, so the gap and Child 2 are placed into the line.  **Figure 2.** Second item placed in the `FlexBox` container after - Network accessline 98
 **Figure 2.** Second item placed in the `FlexBox` container after - Network accessline 101
`50dp`. The required space is `58dp`. There is not enough space in the current line, so Child 3 is placed in a new line.  **Figure 3.** Third item placed on a new line because it d - Network accessline 103
 **Figure 3.** Third item placed on a new line because it d - Network accessline 110
|---|---|---| |  |  |  |  |  library to your project's - Network accessline 5
1. Add the [`androidx.compose.foundation.layout`](https://developer.android.com/jetpack/androidx/versions) library to your project's - Network accessline 40
 - Network accessline 40
 - Network accessline 66
 and [Set - Network accessline 68
To learn more about `FlexBox` behavior, see [Set container behavior](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/container-behavior) and [Set - Network accessline 69
item behavior](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/item-behavior). - Network accessline 69
item behavior](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/item-behavior).
jetpack-compose/adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/index.md
- Network accessline 1
[`FlexBox`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/FlexBox.composable#FlexBox(androidx.compose.ui.Modifier,androidx.compose.foundation.layout.FlexBoxConfig,kotlin.Function1)) is a container that la - Network accessline 1
[`FlexBox`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/FlexBox.composable#FlexBox(androidx.compose.ui.Modifier,androidx.compose.foundation.layout.FlexBoxConfig,kotlin.Function1)) is a container that la - Network accessline 15
overall screen layout. For an overall screen layout, `Grid` is usually a better choice. `FlexBox` does not support lazy-loading of items. To display large numbers of items, use [lazy lists and grids](https://developer.android.com/develop/ui - Network accessline 15
overall screen layout. For an overall screen layout, `Grid` is usually a better choice. `FlexBox` does not support lazy-loading of items. To display large numbers of items, use [lazy lists and grids](https://developer.android.com/develop/ui - Network accessline 16
`Grid` is usually a better choice. `FlexBox` does not support lazy-loading of items. To display large numbers of items, use [lazy lists and grids](https://developer.android.com/develop/ui/compose/lists). If you need to wrap items, use `Flex - Network accessline 16
`Grid` is usually a better choice. `FlexBox` does not support lazy-loading of items. To display large numbers of items, use [lazy lists and grids](https://developer.android.com/develop/ui/compose/lists). If you need to wrap items, use `Flex - Network accessline 17
items. To display large numbers of items, use [lazy lists and grids](https://developer.android.com/develop/ui/compose/lists). If you - Network accessline 17
items. To display large numbers of items, use [lazy lists and grids](https://developer.android.com/develop/ui/compose/lists). If you - Network accessline 22
> [!IMPORTANT] > **Key Point:** `FlexBox` is heavily influenced by the [CSS Flexible Box Layout specification](https://www.w3.org/TR/css-flexbox-1/) and has almost identical concepts, terminology, and behavior. If you're familiar with `disp - Network accessline 22
> [!IMPORTANT] > **Key Point:** `FlexBox` is heavily influenced by the [CSS Flexible Box Layout specification](https://www.w3.org/TR/css-flexbox-1/) and has almost identical concepts, terminology, and behavior. If you're familiar with `disp - Network accessline 23
> **Key Point:** `FlexBox` is heavily influenced by the [CSS Flexible Box Layout specification](https://www.w3.org/TR/css-flexbox-1/) and has almost identical concepts, terminology, and behavior. If you're familiar with `display: flex`, you - Network accessline 23
> **Key Point:** `FlexBox` is heavily influenced by the [CSS Flexible Box Layout specification](https://www.w3.org/TR/css-flexbox-1/) and has almost identical concepts, terminology, and behavior. If you're familiar with `display: flex`, you - Network accessline 32
 **Figure 1.** Axes and sizes when the `FlexBox` direction is `Row`.  **Figure 1.** Axes and sizes when the `FlexBox` direction is `Row`.  - Network accessline 55
1. **Calculate child base size** : Use the child's [`basis` value](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/item-behavior#set-initial-size) - Network accessline 59
2. **Sort the children** : Sort the children by their [`order`](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/item-behavior#item-order) values, if - Network accessline 59
2. **Sort the children** : Sort the children by their [`order`](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/item-behavior#item-order) values, if - Network accessline 62
3. **Build lines** : For each child, check if its initial size plus [`gap`](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/container-behavior#add-gaps) will fit into the remaining space on the current line. - Network accessline 62
3. **Build lines** : For each child, check if its initial size plus [`gap`](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/container-behavior#add-gaps) will fit into the remaining space on the current line. - Network accessline 63
[`gap`](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/container-behavior#add-gaps) will fit into the remaining space on the current line. - Network accessline 63
[`gap`](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/container-behavior#add-gaps) will fit into the remaining space on the current line. - Network accessline 64
If so, place this child into the line. If not, place it onto a new line if [wrapping is enabled](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/container-behavior#wrap-items), or place the item into the current - Network accessline 64
If so, place this child into the line. If not, place it onto a new line if [wrapping is enabled](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/container-behavior#wrap-items), or place the item into the current - Network accessline 65
[wrapping is enabled](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/container-behavior#wrap-items), or place the item into the current line - Network accessline 65
[wrapping is enabled](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/container-behavior#wrap-items), or place the item into the current line - Network accessline 69
4. **Align or resize items in the main axis** : For each line, distribute extra space *to* or between items by [resizing](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/item-behavior#item-size) or - Network accessline 69
4. **Align or resize items in the main axis** : For each line, distribute extra space *to* or between items by [resizing](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/item-behavior#item-size) or - Network accessline 70
space *to* or between items by [resizing](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/item-behavior#item-size) or - Network accessline 70
space *to* or between items by [resizing](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/item-behavior#item-size) or - Network accessline 71
[aligning](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/container-behavior#main-axis) them. - Network accessline 71
[aligning](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/container-behavior#main-axis) them. - Network accessline 73
5. **Align or resize items in the cross axis** : For each line, distribute extra space to or between items and lines by [stretching or aligning them](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/container- - Network accessline 73
5. **Align or resize items in the cross axis** : For each line, distribute extra space to or between items and lines by [stretching or aligning them](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/container- - Network accessline 75
them](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/container-behavior#cross-axis). - Network accessline 75
them](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/container-behavior#cross-axis). - Network accessline 77
Now that you're familiar with `FlexBox` concepts, see [Get started](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/get-started) to - Network accessline 77
Now that you're familiar with `FlexBox` concepts, see [Get started](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/get-started) to
jetpack-compose/adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/item-behavior.md
- Network accessline 28
|---|---|---|---| | **Value type** | **Behavior** | **Code snippet** Note: The boxes have a maximum intrinsic size of `100dp` | **Example using container width `600dp`** | | `Auto` (default) | Use the item's maximum intrinsic size. For exam - Network accessline 28
|---|---|---|---| | **Value type** | **Behavior** | **Code snippet** Note: The boxes have a maximum intrinsic size of `100dp` | **Example using container width `600dp`** | | `Auto` (default) | Use the item's maximum intrinsic size. For exam - Network accessline 29
| **Value type** | **Behavior** | **Code snippet** Note: The boxes have a maximum intrinsic size of `100dp` | **Example using container width `600dp`** | | `Auto` (default) | Use the item's maximum intrinsic size. For example, a `Text` comp - Network accessline 29
| **Value type** | **Behavior** | **Code snippet** Note: The boxes have a maximum intrinsic size of `100dp` | **Example using container width `600dp`** | | `Auto` (default) | Use the item's maximum intrinsic size. For example, a `Text` comp - Network accessline 30
| `Auto` (default) | Use the item's maximum intrinsic size. For example, a `Text` composable's maximum intrinsic width is the width of all its text on a single line - no wrapping. | ```kotlin FlexBox { RedRoundedBox( Modifier.flex { basis(F - Network accessline 30
| `Auto` (default) | Use the item's maximum intrinsic size. For example, a `Text` composable's maximum intrinsic width is the width of all its text on a single line - no wrapping. | ```kotlin FlexBox { RedRoundedBox( Modifier.flex { basis(F - Network accessline 31
| Fixed `dp` | A fixed size in Dp. | ```kotlin FlexBox { RedRoundedBox( Modifier.flex { basis(200.dp) } ) BlueRoundedBox( Modifier.flex { basis(100.dp) } ) } ``` |  } ) BlueRoundedBox( Modifier.flex { basis(100.dp) } ) } ``` |  } ) BlueRoundedBox( Modifier.flex { basis(0.3f) } ) } ``` |  } ) BlueRoundedBox( Modifier.flex { basis(0.3f) } ) } ``` |  } ) BlueRoundedBox(title = "100dp") GreenRoundedBox(title = "100dp") } ``` | Each child has a basis value of `100dp`. There is `300dp` of ex - Network accessline 54
|---|---| | ```kotlin FlexBox { RedRoundedBox( title = "400dp", modifier = Modifier.flex { grow(1f) } ) BlueRoundedBox(title = "100dp") GreenRoundedBox(title = "100dp") } ``` | Each child has a basis value of `100dp`. There is `300dp` of ex - Network accessline 55
| ```kotlin FlexBox { RedRoundedBox( title = "400dp", modifier = Modifier.flex { grow(1f) } ) BlueRoundedBox(title = "100dp") GreenRoundedBox(title = "100dp") } ``` | Each child has a basis value of `100dp`. There is `300dp` of extra space. - Network accessline 55
| ```kotlin FlexBox { RedRoundedBox( title = "400dp", modifier = Modifier.flex { grow(1f) } ) BlueRoundedBox(title = "100dp") GreenRoundedBox(title = "100dp") } ``` | Each child has a basis value of `100dp`. There is `300dp` of extra space. - Network accessline 60
|---|---| | ```kotlin FlexBox { RedRoundedBox( title = "150dp", modifier = Modifier.flex { grow(1f) } ) BlueRoundedBox( title = "200dp", modifier = Modifier.flex { grow(2f) } ) GreenRoundedBox( title = "250dp", modifier = Modifier.flex { gr - Network accessline 60
|---|---| | ```kotlin FlexBox { RedRoundedBox( title = "150dp", modifier = Modifier.flex { grow(1f) } ) BlueRoundedBox( title = "200dp", modifier = Modifier.flex { grow(2f) } ) GreenRoundedBox( title = "250dp", modifier = Modifier.flex { gr - Network accessline 61
| ```kotlin FlexBox { RedRoundedBox( title = "150dp", modifier = Modifier.flex { grow(1f) } ) BlueRoundedBox( title = "200dp", modifier = Modifier.flex { grow(2f) } ) GreenRoundedBox( title = "250dp", modifier = Modifier.flex { grow(3f) } ) - Network accessline 61
| ```kotlin FlexBox { RedRoundedBox( title = "150dp", modifier = Modifier.flex { grow(1f) } ) BlueRoundedBox( title = "200dp", modifier = Modifier.flex { grow(2f) } ) GreenRoundedBox( title = "250dp", modifier = Modifier.flex { grow(3f) } ) - Network accessline 100
|---|---| | **Container size** | **FlexBox UI** | | `700dp` |  | - Network accessline 100
|---|---| | **Container size** | **FlexBox UI** | | `700dp` |  | - Network accessline 101
| **Container size** | **FlexBox UI** | | `700dp` |  | | `500dp` |  | | `500dp` |  | - Network accessline 102
| `700dp` |  | - Network accessline 103
| `500dp` |  | - Network accessline 103
| `500dp` |  | - Network accessline 104
| `450dp` |  | - Network accessline 104
| `450dp` |  | - Network accessline 108
Use `alignSelf` to control how an item is aligned to the cross axis. This overrides the [`alignItems` property](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/container-behavior#align-distribute) of the container - Network accessline 108
Use `alignSelf` to control how an item is aligned to the cross axis. This overrides the [`alignItems` property](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/container-behavior#align-distribute) of the container - Network accessline 109
overrides the [`alignItems` property](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/container-behavior#align-distribute) of the container for this item. It - Network accessline 109
overrides the [`alignItems` property](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/container-behavior#align-distribute) of the container for this item. It - Network accessline 133
 - Network accessline 133
 - Network accessline 170
 - Network accessline 170

jetpack-compose/adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/container-properties.md
- Network accessline 5
- [Define a grid](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid/container-properties#grid-definition): Set up the basic structure of rows and columns. - Network accessline 5
- [Define a grid](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid/container-properties#grid-definition): Set up the basic structure of rows and columns. - Network accessline 6
- [Place items in a grid](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid/container-properties#item-placement): Understand how items are placed into grid cells and how to change flow direction. - Network accessline 6
- [Place items in a grid](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid/container-properties#item-placement): Understand how items are placed into grid cells and how to change flow direction. - Network accessline 7
- [Manage track sizing](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid/container-properties#grid-track-size): Use fixed, percentage, flexible, and intrinsic sizing to set track sizes. - Network accessline 7
- [Manage track sizing](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid/container-properties#grid-track-size): Use fixed, percentage, flexible, and intrinsic sizing to set track sizes. - Network accessline 8
- [Set gaps](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid/container-properties#grid-gap): Manage the "gutters" between rows and columns. - Network accessline 8
- [Set gaps](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid/container-properties#grid-gap): Manage the "gutters" between rows and columns. - Network accessline 12
A grid consists of columns and rows. The [`Grid`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/Grid.composable#Grid(kotlin.Function1,androidx.compose.ui.Modifier,kotlin.Function1)) composable has a `conf - Network accessline 12
A grid consists of columns and rows. The [`Grid`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/Grid.composable#Grid(kotlin.Function1,androidx.compose.ui.Modifier,kotlin.Function1)) composable has a `conf - Network accessline 13
The [`Grid`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/Grid.composable#Grid(kotlin.Function1,androidx.compose.ui.Modifier,kotlin.Function1)) composable has a `config` parameter - Network accessline 13
The [`Grid`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/Grid.composable#Grid(kotlin.Function1,androidx.compose.ui.Modifier,kotlin.Function1)) composable has a `config` parameter - Network accessline 14
that accepts a lambda to define the columns and rows within [`GridConfigurationScope`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridConfigurationScope). The following example defines a grid that has - Network accessline 14
that accepts a lambda to define the columns and rows within [`GridConfigurationScope`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridConfigurationScope). The following example defines a grid that has - Network accessline 15
within [`GridConfigurationScope`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridConfigurationScope). - Network accessline 15
within [`GridConfigurationScope`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridConfigurationScope). - Network accessline 17
each with a fixed size specified in [`Dp`](https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/Dp): - Network accessline 17
each with a fixed size specified in [`Dp`](https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/Dp): - Network accessline 75
 **Figure 1**. Six cards are placed in a grid that has three rows and - Network accessline 75
 **Figure 1**. Six cards are placed in a grid that has three rows and - Network accessline 77
To change this default behavior to filling by column, set the [`flow`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridConfigurationScope#flow()) property to [`GridFlow.Column`](https://developer.androi - Network accessline 77
To change this default behavior to filling by column, set the [`flow`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridConfigurationScope#flow()) property to [`GridFlow.Column`](https://developer.androi - Network accessline 78
set the [`flow`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridConfigurationScope#flow()) property to [`GridFlow.Column`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/lay - Network accessline 78
set the [`flow`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridConfigurationScope#flow()) property to [`GridFlow.Column`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/lay - Network accessline 105
 **Figure 2** . `GridFlow.Row` (left) and `GridFlow.Column` (right). - Network accessline 105
 **Figure 2** . `GridFlow.Row` (left) and `GridFlow.Column` (right). - Network accessline 109
Rows and columns are collectively referred to as a [grid track](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid#grid-track). - Network accessline 109
Rows and columns are collectively referred to as a [grid track](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid#grid-track). - Network accessline 112
- **Fixed** (`Dp`): Allocates a specific size (e.g., `column(180.dp)`). - **Percentage** (`Float`): Allocates a percentage of the total available space from `0.0f` to `1.0f` (e.g., `row(0.5f)` for 50%). - **Flexible** ([`Fr`](https://develo - Network accessline 112
- **Fixed** (`Dp`): Allocates a specific size (e.g., `column(180.dp)`). - **Percentage** (`Float`): Allocates a percentage of the total available space from `0.0f` to `1.0f` (e.g., `row(0.5f)` for 50%). - **Flexible** ([`Fr`](https://develo - Network accessline 113
- **Percentage** (`Float`): Allocates a percentage of the total available space from `0.0f` to `1.0f` (e.g., `row(0.5f)` for 50%). - **Flexible** ([`Fr`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/Fr)) - Network accessline 113
- **Percentage** (`Float`): Allocates a percentage of the total available space from `0.0f` to `1.0f` (e.g., `row(0.5f)` for 50%). - **Flexible** ([`Fr`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/Fr)) - Network accessline 114
- **Flexible** ([`Fr`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/Fr)): Distributes remaining space proportionally after fixed and percentage tracks are calculated. For example, if two rows are set to - Network accessline 114
- **Flexible** ([`Fr`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/Fr)): Distributes remaining space proportionally after fixed and percentage tracks are calculated. For example, if two rows are set to - Network accessline 115
- **Intrinsic** : Sizes the track based on the content inside it. For more information, see [Determine grid track size intrinsically](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid/container-properties#intrisic-grid- - Network accessline 115
- **Intrinsic** : Sizes the track based on the content inside it. For more information, see [Determine grid track size intrinsically](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid/container-properties#intrisic-grid- - Network accessline 143
 **Figure 3** . Row heights defined using the four primary track sizing - Network accessline 143
 **Figure 3** . Row heights defined using the four primary track sizing - Network accessline 148
a standard flexible track can shrink to `0.dp`. To prevent this and ensure content isn't crushed, use [`GridTrackSize.MinMax`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridTrackSize#MinMax(androidx.c - Network accessline 148
a standard flexible track can shrink to `0.dp`. To prevent this and ensure content isn't crushed, use [`GridTrackSize.MinMax`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridTrackSize#MinMax(androidx.c - Network accessline 149
To prevent this and ensure content isn't crushed, use [`GridTrackSize.MinMax`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridTrackSize#MinMax(androidx.compose.ui.unit.Dp,androidx.compose.foundation.la - Network accessline 149
To prevent this and ensure content isn't crushed, use [`GridTrackSize.MinMax`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridTrackSize#MinMax(androidx.compose.ui.unit.Dp,androidx.compose.foundation.la - Network accessline 150
use [`GridTrackSize.MinMax`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridTrackSize#MinMax(androidx.compose.ui.unit.Dp,androidx.compose.foundation.layout.Fr)) - Network accessline 150
use [`GridTrackSize.MinMax`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridTrackSize#MinMax(androidx.compose.ui.unit.Dp,androidx.compose.foundation.layout.Fr)) - Network accessline 178
 **Figure 4** . The first row has at least `100.dp` height. - Network accessline 178
 **Figure 4** . The first row has at least `100.dp` height. - Network accessline 183
their children to establish a base size. However, Jetpack Compose prohibits querying the intrinsic sizes of [`SubcomposeLayout`](https://developer.android.com/reference/kotlin/androidx/compose/ui/layout/SubcomposeLayout.composable#Subcompos - Network accessline 183
their children to establish a base size. However, Jetpack Compose prohibits querying the intrinsic sizes of [`SubcomposeLayout`](https://developer.android.com/reference/kotlin/androidx/compose/ui/layout/SubcomposeLayout.composable#Subcompos - Network accessline 184
However, Jetpack Compose prohibits querying the intrinsic sizes of [`SubcomposeLayout`](https://developer.android.com/reference/kotlin/androidx/compose/ui/layout/SubcomposeLayout.composable#SubcomposeLayout(androidx.compose.ui.Modifier,kotl - Network accessline 184
However, Jetpack Compose prohibits querying the intrinsic sizes of [`SubcomposeLayout`](https://developer.android.com/reference/kotlin/androidx/compose/ui/layout/SubcomposeLayout.composable#SubcomposeLayout(androidx.compose.ui.Modifier,kotl - Network accessline 185
[`SubcomposeLayout`](https://developer.android.com/reference/kotlin/androidx/compose/ui/layout/SubcomposeLayout.composable#SubcomposeLayout(androidx.compose.ui.Modifier,kotlin.Function2)), which backs components, - Network accessline 185
[`SubcomposeLayout`](https://developer.android.com/reference/kotlin/androidx/compose/ui/layout/SubcomposeLayout.composable#SubcomposeLayout(androidx.compose.ui.Modifier,kotlin.Function2)), which backs components, - Network accessline 186
such as [`LazyColumn`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/lazy/LazyColumn.composable) and [`LazyRow`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/lazy/LazyRow.composable - Network accessline 186
such as [`LazyColumn`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/lazy/LazyColumn.composable) and [`LazyRow`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/lazy/LazyRow.composable - Network accessline 188
Placing a lazy list inside a standard flexible track causes an [`IllegalStateException`](https://developer.android.com/reference/java/lang/IllegalStateException) crash. - Network accessline 188
Placing a lazy list inside a standard flexible track causes an [`IllegalStateException`](https://developer.android.com/reference/java/lang/IllegalStateException) crash. - Network accessline 189
an [`IllegalStateException`](https://developer.android.com/reference/java/lang/IllegalStateException) crash. - Network accessline 189
an [`IllegalStateException`](https://developer.android.com/reference/java/lang/IllegalStateException) crash. - Network accessline 220
 **Figure 5** . `LazyColumn` in a grid cell. - Network accessline 220
 **Figure 5** . `LazyColumn` in a grid cell. - Network accessline 224
You can use [intrinsic sizing](https://developer.android.com/develop/ui/compose/layouts/intrinsic-measurements) for a `Grid` - Network accessline 224
You can use [intrinsic sizing](https://developer.android.com/develop/ui/compose/layouts/intrinsic-measurements) for a `Grid` - Network accessline 229
- [`GridTrackSize.MaxContent`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridTrackSize#MaxContent()): Use the content's maximum intrinsic size (e.g., the width is determined by the full length of the - Network accessline 229
- [`GridTrackSize.MaxContent`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridTrackSize#MaxContent()): Use the content's maximum intrinsic size (e.g., the width is determined by the full length of the - Network accessline 230
- [`GridTrackSize.MinContent`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridTrackSize#MinContent()): Use the content's minimum intrinsic size (e.g., the width is determined by the longest single word - Network accessline 230
- [`GridTrackSize.MinContent`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridTrackSize#MinContent()): Use the content's minimum intrinsic size (e.g., the width is determined by the longest single word - Network accessline 231
- [`GridTrackSize.Auto`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridTrackSize#Auto()): Use a flexible size for a track that adapts based on available space. It behaves like `MaxContent` by default, - Network accessline 231
- [`GridTrackSize.Auto`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridTrackSize#Auto()): Use a flexible size for a track that adapts based on available space. It behaves like `MaxContent` by default, - Network accessline 255
 **Figure 5**. Intrinsic sizes specified in the columns. - Network accessline 255
 **Figure 5**. Intrinsic sizes specified in the columns. - Network accessline 259
Once your grid tracks are sized, you can modify the [grid gap](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid#grid-gap) to refine the spacing between the tracks. - Network accessline 259
Once your grid tracks are sized, you can modify the [grid gap](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid#grid-gap) to refine the spacing between the tracks. - Network accessline 260
you can modify the [grid gap](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid#grid-gap) to refine the spacing between the tracks. - Network accessline 260
you can modify the [grid gap](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid#grid-gap) to refine the spacing between the tracks. - Network accessline 261
You can specify the column gap with the [`columnGap`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridConfigurationScope#columnGap(androidx.compose.ui.unit.Dp)) function, - Network accessline 261
You can specify the column gap with the [`columnGap`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridConfigurationScope#columnGap(androidx.compose.ui.unit.Dp)) function, - Network accessline 262
and the row gap with [`rowGap`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridConfigurationScope#rowGap(androidx.compose.ui.unit.Dp)). In the following example, - Network accessline 262
and the row gap with [`rowGap`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridConfigurationScope#rowGap(androidx.compose.ui.unit.Dp)). In the following example, - Network accessline 291
 **Figure 6**. Gaps between rows and columns. - Network accessline 291
 **Figure 6**. Gaps between rows and columns. - Network accessline 293
You can also use the convenience function [`gap`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridConfigurationScope#gap(androidx.compose.ui.unit.Dp)) - Network accessline 293
You can also use the convenience function [`gap`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridConfigurationScope#gap(androidx.compose.ui.unit.Dp)) - Network accessline 324
Named areas allow you to attach names to groups of grid cells, which are called [grid areas](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid#grid-area). - Network accessline 324
Named areas allow you to attach names to groups of grid cells, which are called [grid areas](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid#grid-area). - Network accessline 325
which are called [grid areas](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid#grid-area). - Network accessline 325
which are called [grid areas](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid#grid-area). - Network accessline 326
You can use these names instead of [coordinate indexes](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid/item-properties#position) - Network accessline 326
You can use these names instead of [coordinate indexes](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid/item-properties#position) - Network accessline 337
Inside the `config` lambda, use the [`area`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridConfigurationScope#area(kotlin.Any,kotlin.Int,kotlin.Int,kotlin.Int,kotlin.Int)) function in - Network accessline 337
Inside the `config` lambda, use the [`area`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridConfigurationScope#area(kotlin.Any,kotlin.Int,kotlin.Int,kotlin.Int,kotlin.Int)) function in - Network accessline 338
`GridConfigurationScope` to register named areas in the grid. You can then assign child composables to these areas using the [`gridItem`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridScope#(androidx. - Network accessline 338
`GridConfigurationScope` to register named areas in the grid. You can then assign child composables to these areas using the [`gridItem`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridScope#(androidx. - Network accessline 339
You can then assign child composables to these areas using the [`gridItem`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridScope#(androidx.compose.ui.Modifier).gridItem(kotlin.Any,androidx.compose.ui.A - Network accessline 339
You can then assign child composables to these areas using the [`gridItem`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridScope#(androidx.compose.ui.Modifier).gridItem(kotlin.Any,androidx.compose.ui.A - Network accessline 340
using the [`gridItem`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridScope#(androidx.compose.ui.Modifier).gridItem(kotlin.Any,androidx.compose.ui.Alignment)) modifier - Network accessline 340
using the [`gridItem`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridScope#(androidx.compose.ui.Modifier).gridItem(kotlin.Any,androidx.compose.ui.Alignment)) modifier
jetpack-compose/adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/get-started.md
- Network accessline 1
This page describes how to implement basic [`Grid`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/Grid.composable#Grid(kotlin.Function1,androidx.compose.ui.Modifier,kotlin.Function1)) layouts. - Network accessline 1
This page describes how to implement basic [`Grid`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/Grid.composable#Grid(kotlin.Function1,androidx.compose.ui.Modifier,kotlin.Function1)) layouts. - Network accessline 5
1. Add the [`androidx.compose.foundation.layout`](https://developer.android.com/jetpack/androidx/versions) library to your project's - Network accessline 5
1. Add the [`androidx.compose.foundation.layout`](https://developer.android.com/jetpack/androidx/versions) library to your project's - Network accessline 48
 **Figure 1**. A basic grid consists of rows and columns with fixed siz - Network accessline 48
 **Figure 1**. A basic grid consists of rows and columns with fixed siz - Network accessline 50
To learn how to implement more advanced grids, see [Set container properties](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid/container-properties) and [Set item properties](https://developer.android.com/develop/ui/co - Network accessline 50
To learn how to implement more advanced grids, see [Set container properties](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid/container-properties) and [Set item properties](https://developer.android.com/develop/ui/co - Network accessline 51
see [Set container properties](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid/container-properties) and [Set item properties](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid/item-properties). - Network accessline 51
see [Set container properties](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid/container-properties) and [Set item properties](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid/item-properties).
jetpack-compose/adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/index.md
- Network accessline 1
[`Grid`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/Grid.composable#Grid(kotlin.Function1,androidx.compose.ui.Modifier,kotlin.Function1)) is a Jetpack Compose API - Network accessline 1
[`Grid`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/Grid.composable#Grid(kotlin.Function1,androidx.compose.ui.Modifier,kotlin.Function1)) is a Jetpack Compose API - Network accessline 3
With this API, you can display items in multi-column or multi-row layouts that adapt to the available container size.  **Figure 1.** A flexible and adaptive two-dimensional layout with `Grid`. - Network accessline 5
 **Figure 1.** A flexible and adaptive two-dimensional layout with `Grid`. - Network accessline 9
Compose already offers similar components, such as [`LazyVerticalGrid`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/lazy/grid/LazyVerticalGrid.composable#LazyVerticalGrid(androidx.compose.foundation.lazy.grid. - Network accessline 9
Compose already offers similar components, such as [`LazyVerticalGrid`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/lazy/grid/LazyVerticalGrid.composable#LazyVerticalGrid(androidx.compose.foundation.lazy.grid. - Network accessline 41
including the one after the last row. In the following image, each dotted line represents a grid line:  **Figure 2**. The grid consists of four horizontal lines and three v - Network accessline 43
 **Figure 2**. The grid consists of four horizontal lines and three v - Network accessline 50
To define the size of these tracks, assign a size to them when you create the grid.  **Figure 3**. A grid - Network accessline 50
To define the size of these tracks, assign a size to them when you create the grid.  **Figure 3**. A grid - Network accessline 52
 **Figure 3**. A grid track for the first row. - Network accessline 52
 **Figure 3**. A grid track for the first row. - Network accessline 56
A grid cell is the intersection of a row and column track.  * - Network accessline 56
A grid cell is the intersection of a row and column track.  * - Network accessline 57
 **Figure 4**. A grid cell that is an intersection of the sec - Network accessline 57
 **Figure 4**. A grid cell that is an intersection of the sec - Network accessline 61
A grid area consists of several grid cells. You can define a grid area by making an item span multiple tracks.  **Figure 5**. A grid area that consists of four grid cells. - Network accessline 63
 **Figure 5**. A grid area that consists of four grid cells. - Network accessline 68
You can't place a UI element into a gap, but you can span a UI element across it.  **Figure 6**. A grid gap between the first column and the second column. - Network accessline 70
 **Figure 6**. A grid gap between the first column and the second column.
jetpack-compose/adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/item-properties.md
- Network accessline 1
While the `Grid` config defines the overall structure, you use the [`gridItem`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridScope#(androidx.compose.ui.Modifier).gridItem(kotlin.Int,kotlin.Int,kotlin - Network accessline 1
While the `Grid` config defines the overall structure, you use the [`gridItem`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridScope#(androidx.compose.ui.Modifier).gridItem(kotlin.Int,kotlin.Int,kotlin - Network accessline 2
you use the [`gridItem`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridScope#(androidx.compose.ui.Modifier).gridItem(kotlin.Int,kotlin.Int,kotlin.Int,kotlin.Int,androidx.compose.ui.Alignment)) modifie - Network accessline 2
you use the [`gridItem`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridScope#(androidx.compose.ui.Modifier).gridItem(kotlin.Int,kotlin.Int,kotlin.Int,kotlin.Int,androidx.compose.ui.Alignment)) modifie - Network accessline 8
with the `row` and `column` parameters. Coordinate indexes work best for straightforward grid layouts. For larger or more complex layouts, define [named areas](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid/container - Network accessline 8
with the `row` and `column` parameters. Coordinate indexes work best for straightforward grid layouts. For larger or more complex layouts, define [named areas](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid/container - Network accessline 10
For larger or more complex layouts, define [named areas](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid/container-properties#named-area) instead. - Network accessline 10
For larger or more complex layouts, define [named areas](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid/container-properties#named-area) instead. - Network accessline 54
 ** - Network accessline 54
 ** - Network accessline 56
and Card #3 is placed in the first column in the third row.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/grid/position.png) **Figure 1** . Card **#2** is placed in the grid cell in the second row and the - Network accessline 56
and Card #3 is placed in the first column in the third row.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/grid/position.png) **Figure 1** . Card **#2** is placed in the grid cell in the second row and the - Network accessline 60
Use the `rowSpan` and `columnSpan` parameters to span an item over multiple cells. You can place a UI element into a [grid area](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid#grid-area), - Network accessline 60
Use the `rowSpan` and `columnSpan` parameters to span an item over multiple cells. You can place a UI element into a [grid area](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid#grid-area), - Network accessline 61
to span an item over multiple cells. You can place a UI element into a [grid area](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid#grid-area), which is the area consisting of several [grid cells](https://developer.and - Network accessline 61
to span an item over multiple cells. You can place a UI element into a [grid area](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid#grid-area), which is the area consisting of several [grid cells](https://developer.and - Network accessline 62
You can place a UI element into a [grid area](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid#grid-area), - Network accessline 62
You can place a UI element into a [grid area](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid#grid-area), - Network accessline 63
which is the area consisting of several [grid cells](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid#grid-cell). - Network accessline 63
which is the area consisting of several [grid cells](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid#grid-cell). - Network accessline 93
 **Figure 2** . Card **#4** spans three columns. - Network accessline 93
 **Figure 2** . Card **#4** spans three columns. - Network accessline 97
You can set the alignment of the UI element in a grid area by specifying it in the `alignment` parameter of the [`gridItem`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridScope#(androidx.compose.ui.Mo - Network accessline 97
You can set the alignment of the UI element in a grid area by specifying it in the `alignment` parameter of the [`gridItem`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridScope#(androidx.compose.ui.Mo - Network accessline 98
by specifying it in the `alignment` parameter of the [`gridItem`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridScope#(androidx.compose.ui.Modifier).gridItem(kotlin.Int,kotlin.Int,kotlin.Int,kotlin.In - Network accessline 98
by specifying it in the `alignment` parameter of the [`gridItem`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridScope#(androidx.compose.ui.Modifier).gridItem(kotlin.Int,kotlin.Int,kotlin.Int,kotlin.In - Network accessline 133
 **Figure 3** . The Text with **#1** is - Network accessline 133
 **Figure 3** . The Text with **#1** is - Network accessline 134
consisting of two rows and two columns.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/grid/alignment.png) **Figure 3** . The Text with **#1** is placed in the center of the grid area consisting of two rows - Network accessline 134
consisting of two rows and two columns.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/grid/alignment.png) **Figure 3** . The Text with **#1** is placed in the center of the grid area consisting of two rows - Network accessline 170
 **Figure 4** . Card **#3** is placed next - Network accessline 170
 **Figure 4** . Card **#3** is placed next
jetpack-compose/adaptive/references/android/develop/ui/compose/layouts/adaptive/mediaquery/index.md
- Network accessline 1
> [!NOTE] > **Note:** The `mediaQuery` function and the related data types are experimental and subject to change. File any issues on the [issue tracker](https://issuetracker.google.com/issues?q=componentid:1876021). - Network accessline 1
> [!NOTE] > **Note:** The `mediaQuery` function and the related data types are experimental and subject to change. File any issues on the [issue tracker](https://issuetracker.google.com/issues?q=componentid:1876021). - Network accessline 2
> **Note:** The `mediaQuery` function and the related data types are experimental and subject to change. File any issues on the [issue tracker](https://issuetracker.google.com/issues?q=componentid:1876021). - Network accessline 2
> **Note:** The `mediaQuery` function and the related data types are experimental and subject to change. File any issues on the [issue tracker](https://issuetracker.google.com/issues?q=componentid:1876021). - Network accessline 15
Because the information is updated dynamically, you need to monitor it and trigger recomposition when any update happens. The [`mediaQuery`](https://developer.android.com/reference/kotlin/androidx/compose/ui/mediaQuery.composable#mediaQuery - Network accessline 15
Because the information is updated dynamically, you need to monitor it and trigger recomposition when any update happens. The [`mediaQuery`](https://developer.android.com/reference/kotlin/androidx/compose/ui/mediaQuery.composable#mediaQuery - Network accessline 16
you need to monitor it and trigger recomposition when any update happens. The [`mediaQuery`](https://developer.android.com/reference/kotlin/androidx/compose/ui/mediaQuery.composable#mediaQuery(kotlin.Function1)) function abstracts the detai - Network accessline 16
you need to monitor it and trigger recomposition when any update happens. The [`mediaQuery`](https://developer.android.com/reference/kotlin/androidx/compose/ui/mediaQuery.composable#mediaQuery(kotlin.Function1)) function abstracts the detai - Network accessline 17
The [`mediaQuery`](https://developer.android.com/reference/kotlin/androidx/compose/ui/mediaQuery.composable#mediaQuery(kotlin.Function1)) function abstracts the details of the information retrieval - Network accessline 17
The [`mediaQuery`](https://developer.android.com/reference/kotlin/androidx/compose/ui/mediaQuery.composable#mediaQuery(kotlin.Function1)) function abstracts the details of the information retrieval - Network accessline 20
> [!NOTE] > **Note:** "media" refers to the presentation medium that the UI is rendered on. The term "media" originates from [CSS media queries](https://www.w3.org/TR/mediaqueries-3/) which inspired the `mediaQuery` API. - Network accessline 20
> [!NOTE] > **Note:** "media" refers to the presentation medium that the UI is rendered on. The term "media" originates from [CSS media queries](https://www.w3.org/TR/mediaqueries-3/) which inspired the `mediaQuery` API. - Network accessline 21
> **Note:** "media" refers to the presentation medium that the UI is rendered on. The term "media" originates from [CSS media queries](https://www.w3.org/TR/mediaqueries-3/) which inspired the `mediaQuery` API. - Network accessline 21
> **Note:** "media" refers to the presentation medium that the UI is rendered on. The term "media" originates from [CSS media queries](https://www.w3.org/TR/mediaqueries-3/) which inspired the `mediaQuery` API. - Network accessline 46
To enable the `mediaQuery` function, set the `isMediaQueryIntegrationEnabled` attribute of the [`ComposeUiFlags`](https://developer.android.com/reference/kotlin/androidx/compose/ui/ComposeUiFlags) object to `true`: - Network accessline 46
To enable the `mediaQuery` function, set the `isMediaQueryIntegrationEnabled` attribute of the [`ComposeUiFlags`](https://developer.android.com/reference/kotlin/androidx/compose/ui/ComposeUiFlags) object to `true`: - Network accessline 48
the [`ComposeUiFlags`](https://developer.android.com/reference/kotlin/androidx/compose/ui/ComposeUiFlags) object to `true`: - Network accessline 48
the [`ComposeUiFlags`](https://developer.android.com/reference/kotlin/androidx/compose/ui/ComposeUiFlags) object to `true`: - Network accessline 64
You can define a condition as a lambda that is evaluated within [`UiMediaScope`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope). - Network accessline 64
You can define a condition as a lambda that is evaluated within [`UiMediaScope`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope). - Network accessline 65
that is evaluated within [`UiMediaScope`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope). - Network accessline 65
that is evaluated within [`UiMediaScope`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope). - Network accessline 73
| Parameter | Value type | Description | |---|---|---| | `windowWidth` | [`Dp`](https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/Dp) | The current window width in dp. | - Network accessline 73
| Parameter | Value type | Description | |---|---|---| | `windowWidth` | [`Dp`](https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/Dp) | The current window width in dp. | - Network accessline 74
|---|---|---| | `windowWidth` | [`Dp`](https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/Dp) | The current window width in dp. | | `windowHeight` | `Dp` | The current window height in dp. | - Network accessline 74
|---|---|---| | `windowWidth` | [`Dp`](https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/Dp) | The current window width in dp. | | `windowHeight` | `Dp` | The current window height in dp. | - Network accessline 75
| `windowWidth` | [`Dp`](https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/Dp) | The current window width in dp. | - Network accessline 75
| `windowWidth` | [`Dp`](https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/Dp) | The current window width in dp. | - Network accessline 76
| `windowHeight` | `Dp` | The current window height in dp. | | `windowPosture` | [`UiMediaScope.Posture`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope.Posture) | The current posture of the application wind - Network accessline 76
| `windowHeight` | `Dp` | The current window height in dp. | | `windowPosture` | [`UiMediaScope.Posture`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope.Posture) | The current posture of the application wind - Network accessline 77
| `windowPosture` | [`UiMediaScope.Posture`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope.Posture) | The current posture of the application window. | - Network accessline 77
| `windowPosture` | [`UiMediaScope.Posture`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope.Posture) | The current posture of the application window. | - Network accessline 78
| `pointerPrecision` | [`UiMediaScope.PointerPrecision`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope.PointerPrecision) | The highest precision of the available pointing devices. | - Network accessline 78
| `pointerPrecision` | [`UiMediaScope.PointerPrecision`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope.PointerPrecision) | The highest precision of the available pointing devices. | - Network accessline 79
| `keyboardKind` | [`UiMediaScope.KeyboardKind`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope.KeyboardKind) | The type of keyboard available or connected. | - Network accessline 79
| `keyboardKind` | [`UiMediaScope.KeyboardKind`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope.KeyboardKind) | The type of keyboard available or connected. | - Network accessline 80
| `hasCamera` | `Boolean` | Whether the camera is supported on the device. | | `hasMicrophone` | `Boolean` | Whether the microphone is supported on the device. | | `viewingDistance` | [`UiMediaScope.ViewingDistance`](https://developer.andro - Network accessline 80
| `hasCamera` | `Boolean` | Whether the camera is supported on the device. | | `hasMicrophone` | `Boolean` | Whether the microphone is supported on the device. | | `viewingDistance` | [`UiMediaScope.ViewingDistance`](https://developer.andro - Network accessline 82
| `viewingDistance` | [`UiMediaScope.ViewingDistance`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope.ViewingDistance) | The typical distance between the user and the device screen. | - Network accessline 82
| `viewingDistance` | [`UiMediaScope.ViewingDistance`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope.ViewingDistance) | The typical distance between the user and the device screen. | - Network accessline 84
A `UiMediaScope` object resolves the values of the parameters. The `mediaQuery` function uses [`LocalUiMediaScope.current`](https://developer.android.com/reference/kotlin/androidx/compose/ui/package-summary#LocalUiMediaScope()) - Network accessline 84
A `UiMediaScope` object resolves the values of the parameters. The `mediaQuery` function uses [`LocalUiMediaScope.current`](https://developer.android.com/reference/kotlin/androidx/compose/ui/package-summary#LocalUiMediaScope()) - Network accessline 85
The `mediaQuery` function uses [`LocalUiMediaScope.current`](https://developer.android.com/reference/kotlin/androidx/compose/ui/package-summary#LocalUiMediaScope()) - Network accessline 85
The `mediaQuery` function uses [`LocalUiMediaScope.current`](https://developer.android.com/reference/kotlin/androidx/compose/ui/package-summary#LocalUiMediaScope()) - Network accessline 115
[Window size classes](https://developer.android.com/develop/ui/compose/layouts/adaptive/use-window-size-classes) are a set of opinionated viewport breakpoints - Network accessline 115
[Window size classes](https://developer.android.com/develop/ui/compose/layouts/adaptive/use-window-size-classes) are a set of opinionated viewport breakpoints - Network accessline 118
with the threshold defined in the window size classes. The following example changes the number of panes according to the window width. [`WindowSizeClass`](https://developer.android.com/reference/androidx/window/core/layout/WindowSizeClass) - Network accessline 118
with the threshold defined in the window size classes. The following example changes the number of panes according to the window width. [`WindowSizeClass`](https://developer.android.com/reference/androidx/window/core/layout/WindowSizeClass) - Network accessline 119
The following example changes the number of panes according to the window width. [`WindowSizeClass`](https://developer.android.com/reference/androidx/window/core/layout/WindowSizeClass) class has constants for the thresholds of window size - Network accessline 119
The following example changes the number of panes according to the window width. [`WindowSizeClass`](https://developer.android.com/reference/androidx/window/core/layout/WindowSizeClass) class has constants for the thresholds of window size - Network accessline 120
[`WindowSizeClass`](https://developer.android.com/reference/androidx/window/core/layout/WindowSizeClass) class has constants for the thresholds - Network accessline 120
[`WindowSizeClass`](https://developer.android.com/reference/androidx/window/core/layout/WindowSizeClass) class has constants for the thresholds - Network accessline 123
The [`derivedMediaQuery`](https://developer.android.com/reference/kotlin/androidx/compose/ui/derivedMediaQuery.composable#derivedMediaQuery(kotlin.Function1)) function evaluates the `query` lambda - Network accessline 123
The [`derivedMediaQuery`](https://developer.android.com/reference/kotlin/androidx/compose/ui/derivedMediaQuery.composable#derivedMediaQuery(kotlin.Function1)) function evaluates the `query` lambda - Network accessline 124
and wraps the result in a [`derivedStateOf`](https://developer.android.com/develop/ui/compose/side-effects#derivedstateof). - Network accessline 124
and wraps the result in a [`derivedStateOf`](https://developer.android.com/develop/ui/compose/side-effects#derivedstateof). - Network accessline 150
The `windowPosture` parameter describes the current window posture as a `UiMediaScope.Posture` object. You can check the current [posture](https://developer.android.com/develop/ui/compose/layouts/adaptive/foldables/learn-about-foldables) by - Network accessline 150
The `windowPosture` parameter describes the current window posture as a `UiMediaScope.Posture` object. You can check the current [posture](https://developer.android.com/develop/ui/compose/layouts/adaptive/foldables/learn-about-foldables) by - Network accessline 151
as a `UiMediaScope.Posture` object. You can check the current [posture](https://developer.android.com/develop/ui/compose/layouts/adaptive/foldables/learn-about-foldables) by comparing the parameter with the values defined in the `UiMediaSco - Network accessline 151
as a `UiMediaScope.Posture` object. You can check the current [posture](https://developer.android.com/develop/ui/compose/layouts/adaptive/foldables/learn-about-foldables) by comparing the parameter with the values defined in the `UiMediaSco - Network accessline 152
You can check the current [posture](https://developer.android.com/develop/ui/compose/layouts/adaptive/foldables/learn-about-foldables) by comparing the parameter - Network accessline 152
You can check the current [posture](https://developer.android.com/develop/ui/compose/layouts/adaptive/foldables/learn-about-foldables) by comparing the parameter - Network accessline 173
of the available pointing devices, such as a mouse and touchscreen. There are four values defined in the `UiMediaScope.PointerPrecision` class: [`Fine`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope.Pointer - Network accessline 173
of the available pointing devices, such as a mouse and touchscreen. There are four values defined in the `UiMediaScope.PointerPrecision` class: [`Fine`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope.Pointer - Network accessline 174
There are four values defined in the `UiMediaScope.PointerPrecision` class: [`Fine`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope.PointerPrecision#Fine()), [`Coarse`](https://developer.android.com/referenc - Network accessline 174
There are four values defined in the `UiMediaScope.PointerPrecision` class: [`Fine`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope.PointerPrecision#Fine()), [`Coarse`](https://developer.android.com/referenc - Network accessline 175
[`Fine`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope.PointerPrecision#Fine()), [`Coarse`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope.PointerPrecision#Coarse()), [`Blun - Network accessline 175
[`Fine`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope.PointerPrecision#Fine()), [`Coarse`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope.PointerPrecision#Coarse()), [`Blun - Network accessline 202
The `keyboardKind` parameter represents the type of the available keyboards: [`Physical`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope.KeyboardKind#Physical()), [`Virtual`](https://developer.android.com/re - Network accessline 202
The `keyboardKind` parameter represents the type of the available keyboards: [`Physical`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope.KeyboardKind#Physical()), [`Virtual`](https://developer.android.com/re - Network accessline 203
[`Physical`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope.KeyboardKind#Physical()), [`Virtual`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope.KeyboardKind#Virtual()), and - Network accessline 203
[`Physical`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope.KeyboardKind#Physical()), [`Virtual`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope.KeyboardKind#Virtual()), and - Network accessline 253
There are three values defined in the `UiMediaScope.ViewingDistance` class: [`Near`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope.ViewingDistance#Near()), [`Medium`](https://developer.android.com/reference - Network accessline 253
There are three values defined in the `UiMediaScope.ViewingDistance` class: [`Near`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope.ViewingDistance#Near()), [`Medium`](https://developer.android.com/reference - Network accessline 254
[`Near`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope.ViewingDistance#Near()), [`Medium`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope.ViewingDistance#Medium()), and [`Fa - Network accessline 254
[`Near`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope.ViewingDistance#Near()), [`Medium`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope.ViewingDistance#Medium()), and [`Fa - Network accessline 276
and `FlatLayout` based on the `windowPosture` parameter value. To preview the `TabletopLayout`, the `windowPosture` parameter should be [`UiMediaScope.Posture.Tabletop`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiM - Network accessline 276
and `FlatLayout` based on the `windowPosture` parameter value. To preview the `TabletopLayout`, the `windowPosture` parameter should be [`UiMediaScope.Posture.Tabletop`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiM - Network accessline 278
[`UiMediaScope.Posture.Tabletop`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope.Posture#Tabletop()). - Network accessline 278
[`UiMediaScope.Posture.Tabletop`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope.Posture#Tabletop()). - Network accessline 296
1. Enable the `mediaQuery` function. 2. Define a custom object that implements the `UiMediaScope` interface. 3. Set the custom object to the `LocalUiMediaScope` with the [`CompositionLocalProvider`](https://developer.android.com/reference/k - Network accessline 296
1. Enable the `mediaQuery` function. 2. Define a custom object that implements the `UiMediaScope` interface. 3. Set the custom object to the `LocalUiMediaScope` with the [`CompositionLocalProvider`](https://developer.android.com/reference/k - Network accessline 297
2. Define a custom object that implements the `UiMediaScope` interface. 3. Set the custom object to the `LocalUiMediaScope` with the [`CompositionLocalProvider`](https://developer.android.com/reference/kotlin/androidx/compose/runtime/Compos - Network accessline 297
2. Define a custom object that implements the `UiMediaScope` interface. 3. Set the custom object to the `LocalUiMediaScope` with the [`CompositionLocalProvider`](https://developer.android.com/reference/kotlin/androidx/compose/runtime/Compos - Network accessline 298
3. Set the custom object to the `LocalUiMediaScope` with the [`CompositionLocalProvider`](https://developer.android.com/reference/kotlin/androidx/compose/runtime/CompositionLocalProvider.composable#CompositionLocalProvider(androidx.compose. - Network accessline 298
3. Set the custom object to the `LocalUiMediaScope` with the [`CompositionLocalProvider`](https://developer.android.com/reference/kotlin/androidx/compose/runtime/CompositionLocalProvider.composable#CompositionLocalProvider(androidx.compose.
jetpack-compose/adaptive/references/android/guide/navigation/navigation-3/recipes/material-listdetail.md
- Network accessline 22
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/material/listdetail) - Network accessline 22
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/material/listdetail) - Network accessline 32
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 32
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 33
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 33
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 34
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 34
* http://www.apache.org/licenses/LICENSE-2.0
jetpack-compose/adaptive/references/android/guide/navigation/navigation-3/save-state.md
- Network accessline 9
guidelines on how you should create or save it. However, Navigation 3 does offer a convenience method that provides you with a saveable back stack: [`rememberNavBackStack`](https://developer.android.com/reference/kotlin/androidx/navigation3 - Network accessline 9
guidelines on how you should create or save it. However, Navigation 3 does offer a convenience method that provides you with a saveable back stack: [`rememberNavBackStack`](https://developer.android.com/reference/kotlin/androidx/navigation3 - Network accessline 11
[`rememberNavBackStack`](https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/rememberNavBackStack.composable). - Network accessline 11
[`rememberNavBackStack`](https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/rememberNavBackStack.composable). - Network accessline 21
- **Implement `NavKey` interface** : Every key in the back stack must implement the [`NavKey`](https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavKey) interface. This acts as a marker interface that signals to th - Network accessline 21
- **Implement `NavKey` interface** : Every key in the back stack must implement the [`NavKey`](https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavKey) interface. This acts as a marker interface that signals to th - Network accessline 22
- **Have the `@Serializable` annotation** : In addition to implementing `NavKey`, your key classes and objects must be marked with the [`@Serializable`](https://kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-core/kotlinx.ser - Network accessline 22
- **Have the `@Serializable` annotation** : In addition to implementing `NavKey`, your key classes and objects must be marked with the [`@Serializable`](https://kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-core/kotlinx.ser - Network accessline 75
For more examples---including how to handle open polymorphism---see [`NavBackStackSamples`](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:navigation3/navigation3-runtime/samples/src/main/kotlin/androidx/navigat - Network accessline 75
For more examples---including how to handle open polymorphism---see [`NavBackStackSamples`](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:navigation3/navigation3-runtime/samples/src/main/kotlin/androidx/navigat - Network accessline 76
[`NavBackStackSamples`](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:navigation3/navigation3-runtime/samples/src/main/kotlin/androidx/navigation3/runtime/samples/NavBackStackSamples.kt). - Network accessline 76
[`NavBackStackSamples`](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:navigation3/navigation3-runtime/samples/src/main/kotlin/androidx/navigation3/runtime/samples/NavBackStackSamples.kt). - Network accessline 99
The `androidx.lifecycle:lifecycle-viewmodel-navigation3` add-on library provides a [`NavEntryDecorator`](https://developer.android.com/guide/navigation/navigation-3/naventrydecorators) that facilitates this. This decorator provides a - Network accessline 99
The `androidx.lifecycle:lifecycle-viewmodel-navigation3` add-on library provides a [`NavEntryDecorator`](https://developer.android.com/guide/navigation/navigation-3/naventrydecorators) that facilitates this. This decorator provides a - Network accessline 100
a [`NavEntryDecorator`](https://developer.android.com/guide/navigation/navigation-3/naventrydecorators) that facilitates this. This decorator provides a - Network accessline 100
a [`NavEntryDecorator`](https://developer.android.com/guide/navigation/navigation-3/naventrydecorators) that facilitates this. This decorator provides a - Network accessline 107
To use [`NavEntryDecorator`](https://developer.android.com/guide/navigation/navigation-3/naventrydecorators#apply-decorators) for scoping `ViewModel`s to `NavEntry`s, follow - Network accessline 107
To use [`NavEntryDecorator`](https://developer.android.com/guide/navigation/navigation-3/naventrydecorators#apply-decorators) for scoping `ViewModel`s to `NavEntry`s, follow - Network accessline 110
1. Add the `androidx.lifecycle:lifecycle-viewmodel-navigation3` dependency to your `app/build.gradle.kts` file. 2. Add the default [`rememberSaveableStateHolderNavEntryDecorator()`](https://developer.android.com/reference/kotlin/androidx/na - Network accessline 110
1. Add the `androidx.lifecycle:lifecycle-viewmodel-navigation3` dependency to your `app/build.gradle.kts` file. 2. Add the default [`rememberSaveableStateHolderNavEntryDecorator()`](https://developer.android.com/reference/kotlin/androidx/na - Network accessline 111
2. Add the default [`rememberSaveableStateHolderNavEntryDecorator()`](https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/rememberSaveableStateHolderNavEntryDecorator.composable) to the list of `entryDecorators` when - Network accessline 111
2. Add the default [`rememberSaveableStateHolderNavEntryDecorator()`](https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/rememberSaveableStateHolderNavEntryDecorator.composable) to the list of `entryDecorators` when - Network accessline 112
3. Add [`rememberViewModelStoreNavEntryDecorator()`](https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/navigation3/rememberViewModelStoreNavEntryDecorator.composable) to the list of `entryDecorators`. - Network accessline 112
3. Add [`rememberViewModelStoreNavEntryDecorator()`](https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/navigation3/rememberViewModelStoreNavEntryDecorator.composable) to the list of `entryDecorators`.
jetpack-compose/adaptive/references/android/studio/preview/compose-screenshot-testing-with-testsuites.md
- Network accessline 1
> [!WARNING] > **Experimental:** Compose Preview Screenshot Testing with AGP test suites is in active development. APIs and DSL syntax are subject to change. Report feedback and issues through the [issue tracker](https://issuetracker.google - Network accessline 1
> [!WARNING] > **Experimental:** Compose Preview Screenshot Testing with AGP test suites is in active development. APIs and DSL syntax are subject to change. Report feedback and issues through the [issue tracker](https://issuetracker.google - Network accessline 2
> **Experimental:** Compose Preview Screenshot Testing with AGP test suites is in active development. APIs and DSL syntax are subject to change. Report feedback and issues through the [issue tracker](https://issuetracker.google.com/issues/n - Network accessline 2
> **Experimental:** Compose Preview Screenshot Testing with AGP test suites is in active development. APIs and DSL syntax are subject to change. Report feedback and issues through the [issue tracker](https://issuetracker.google.com/issues/n - Network accessline 4
Starting with Android Gradle Plugin (AGP) 9.5.0-alpha03 and Compose Preview Screenshot Testing engine `0.0.1-alpha16`, screenshot testing is integrated with AGP's native [test suites](https://developer.android.com/reference/tools/gradle-api - Network accessline 4
Starting with Android Gradle Plugin (AGP) 9.5.0-alpha03 and Compose Preview Screenshot Testing engine `0.0.1-alpha16`, screenshot testing is integrated with AGP's native [test suites](https://developer.android.com/reference/tools/gradle-api - Network accessline 6
AGP's native [test suites](https://developer.android.com/reference/tools/gradle-api/9.5/com/android/build/api/dsl/AgpTestSuite) framework. - Network accessline 6
AGP's native [test suites](https://developer.android.com/reference/tools/gradle-api/9.5/com/android/build/api/dsl/AgpTestSuite) framework. - Network accessline 19
[View on GitHub](https://github.com/android/skills/blob/main/testing/testing-setup) - Network accessline 19
[View on GitHub](https://github.com/android/skills/blob/main/testing/testing-setup) - Network accessline 23
Use the `testing-setup` [Android skill](https://developer.android.com/tools/agents/android-skills) to develop a testing strategy and create screenshot tests. To install the skill from the [Android CLI](https://developer.android.com/tools/ag - Network accessline 23
Use the `testing-setup` [Android skill](https://developer.android.com/tools/agents/android-skills) to develop a testing strategy and create screenshot tests. To install the skill from the [Android CLI](https://developer.android.com/tools/ag - Network accessline 36
- Compose Screenshot Engine version 0.0.1-alpha16 or higher. - JDK version 17 or higher. - Compose enabled for your project. We recommend enabling Compose using the [Compose Compiler Gradle plugin](https://developer.android.com/develop/ui/c - Network accessline 36
- Compose Screenshot Engine version 0.0.1-alpha16 or higher. - JDK version 17 or higher. - Compose enabled for your project. We recommend enabling Compose using the [Compose Compiler Gradle plugin](https://developer.android.com/develop/ui/c - Network accessline 38
- Compose enabled for your project. We recommend enabling Compose using the [Compose Compiler Gradle plugin](https://developer.android.com/develop/ui/compose/compiler). - Network accessline 38
- Compose enabled for your project. We recommend enabling Compose using the [Compose Compiler Gradle plugin](https://developer.android.com/develop/ui/compose/compiler).
jetpack-compose/adaptive/references/custom_cursors.md
- Network accessline 65
- [Compose `pointerHoverIcon` API reference](https://developer.android.com/reference/kotlin/androidx/compose/ui/input/pointer/package-summary#pointerHoverIcon(androidx.compose.ui.Modifier,androidx.compose.ui.input.pointer.PointerIcon,kotlin - Network accessline 65
- [Compose `pointerHoverIcon` API reference](https://developer.android.com/reference/kotlin/androidx/compose/ui/input/pointer/package-summary#pointerHoverIcon(androidx.compose.ui.Modifier,androidx.compose.ui.input.pointer.PointerIcon,kotlin - Network accessline 66
- [Compose `PointerIcon` API reference](https://developer.android.com/reference/kotlin/androidx/compose/ui/input/pointer/PointerIcon) - Network accessline 66
- [Compose `PointerIcon` API reference](https://developer.android.com/reference/kotlin/androidx/compose/ui/input/pointer/PointerIcon) - Network accessline 67
- [Android pointer input overview](https://developer.android.com/develop/ui/compose/touch-input/pointer-input) - Network accessline 67
- [Android pointer input overview](https://developer.android.com/develop/ui/compose/touch-input/pointer-input)
jetpack-compose/adaptive/references/foldable-tabletop.md
- Network accessline 50
For a reference implementation of Option B, see the [Tabletop posture recipe](https://developer.android.com/develop/adaptive-apps/cookbook/tabletop-posture-media-query-grid). - Network accessline 50
For a reference implementation of Option B, see the [Tabletop posture recipe](https://developer.android.com/develop/adaptive-apps/cookbook/tabletop-posture-media-query-grid). - Network accessline 51
[Tabletop posture recipe](https://developer.android.com/develop/adaptive-apps/cookbook/tabletop-posture-media-query-grid). - Network accessline 51
[Tabletop posture recipe](https://developer.android.com/develop/adaptive-apps/cookbook/tabletop-posture-media-query-grid).
jetpack-compose/adaptive/references/keyboard_shortcuts.md
- Network accessline 80
Follow the Keyboard Shortcut Helper [guide](https://developer.android.com/develop/ui/compose/touch-input/keyboard-input/keyboard-shortcuts-helper). - Network accessline 80
Follow the Keyboard Shortcut Helper [guide](https://developer.android.com/develop/ui/compose/touch-input/keyboard-input/keyboard-shortcuts-helper). - Network accessline 96
- Compose keyboard input [guide](https://developer.android.com/develop/ui/compose/touch-input/keyboard-input/commands) - Network accessline 96
- Compose keyboard input [guide](https://developer.android.com/develop/ui/compose/touch-input/keyboard-input/commands) - Network accessline 97
- Android desktop keyboard interaction [guidance](https://developer.android.com/design/ui/desktop/guides/interaction/keyboard) - Network accessline 97
- Android desktop keyboard interaction [guidance](https://developer.android.com/design/ui/desktop/guides/interaction/keyboard)
jetpack-compose/adaptive/references/tooltips.md
- Network accessline 70
- AndroidX Material 3 tooltip [samples](https://android.googlesource.com/platform/frameworks/support/+/androidx-main/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/TooltipSamples.kt) - Network accessline 70
- AndroidX Material 3 tooltip [samples](https://android.googlesource.com/platform/frameworks/support/+/androidx-main/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/TooltipSamples.kt) - Network accessline 71
- Material Design 3 tooltip [guidelines](https://m3.material.io/components/tooltips/guidelines) - Network accessline 71
- Material Design 3 tooltip [guidelines](https://m3.material.io/components/tooltips/guidelines)
jetpack-compose/ink/ink-app-builder/references/android/develop/ui/compose/touch-input/stylus-input/ink-api-brush-apis.md
- Network accessline 1
The [`Brush`](https://developer.android.com/reference/kotlin/androidx/ink/brush/Brush) APIs provide you with the tools to - Network accessline 1
The [`Brush`](https://developer.android.com/reference/kotlin/androidx/ink/brush/Brush) APIs provide you with the tools to - Network accessline 8
[View on GitHub](https://github.com/android/skills/tree/main/jetpack-compose/ink/ink-custom-brush-builder) - Network accessline 8
[View on GitHub](https://github.com/android/skills/tree/main/jetpack-compose/ink/ink-custom-brush-builder) - Network accessline 12
Use the `ink-custom-brush-builder` [Android skill](https://developer.android.com/tools/agents/android-skills) to design custom BrushFamily styles in Jetpack Compose with custom tips, dynamic behaviors, textures, and coats. To install the sk - Network accessline 12
Use the `ink-custom-brush-builder` [Android skill](https://developer.android.com/tools/agents/android-skills) to design custom BrushFamily styles in Jetpack Compose with custom tips, dynamic behaviors, textures, and coats. To install the sk - Network accessline 20
To create a brush, use the Compose [`Brush`](https://developer.android.com/reference/kotlin/androidx/ink/brush/Brush) - Network accessline 20
To create a brush, use the Compose [`Brush`](https://developer.android.com/reference/kotlin/androidx/ink/brush/Brush) - Network accessline 21
companion methods with named arguments such as [`Brush.Companion.createWithComposeColor`](https://developer.android.com/reference/kotlin/androidx/ink/brush/Brush.Companion#(androidx.ink.brush.Brush.Companion).createWithComposeColor(androidx - Network accessline 21
companion methods with named arguments such as [`Brush.Companion.createWithComposeColor`](https://developer.android.com/reference/kotlin/androidx/ink/brush/Brush.Companion#(androidx.ink.brush.Brush.Companion).createWithComposeColor(androidx - Network accessline 22
[`Brush.Companion.createWithComposeColor`](https://developer.android.com/reference/kotlin/androidx/ink/brush/Brush.Companion#(androidx.ink.brush.Brush.Companion).createWithComposeColor(androidx.ink.brush.BrushFamily,androidx.compose.ui.grap - Network accessline 22
[`Brush.Companion.createWithComposeColor`](https://developer.android.com/reference/kotlin/androidx/ink/brush/Brush.Companion#(androidx.ink.brush.Brush.Companion).createWithComposeColor(androidx.ink.brush.BrushFamily,androidx.compose.ui.grap - Network accessline 25
- `family`: The style of the brush, analogous to a typeface or font in text. See [`StockBrushes`](https://developer.android.com/reference/kotlin/androidx/ink/brush/StockBrushes) for available [`BrushFamily`](https://developer.android.com/re - Network accessline 25
- `family`: The style of the brush, analogous to a typeface or font in text. See [`StockBrushes`](https://developer.android.com/reference/kotlin/androidx/ink/brush/StockBrushes) for available [`BrushFamily`](https://developer.android.com/re - Network accessline 26
- `color`: The color of the brush. You can set the color using a [`ColorLong`](https://developer.android.com/reference/kotlin/androidx/annotation/ColorLong). - Network accessline 26
- `color`: The color of the brush. You can set the color using a [`ColorLong`](https://developer.android.com/reference/kotlin/androidx/annotation/ColorLong). - Network accessline 44
You can create a copy of an existing brush using the [`copyWithComposeColor()`](https://developer.android.com/reference/kotlin/androidx/ink/brush/Brush#(androidx.ink.brush.Brush).copyWithComposeColor(androidx.compose.ui.graphics.Color,andro - Network accessline 44
You can create a copy of an existing brush using the [`copyWithComposeColor()`](https://developer.android.com/reference/kotlin/androidx/ink/brush/Brush#(androidx.ink.brush.Brush).copyWithComposeColor(androidx.compose.ui.graphics.Color,andro - Network accessline 45
[`copyWithComposeColor()`](https://developer.android.com/reference/kotlin/androidx/ink/brush/Brush#(androidx.ink.brush.Brush).copyWithComposeColor(androidx.compose.ui.graphics.Color,androidx.ink.brush.BrushFamily,kotlin.Float,kotlin.Float)) - Network accessline 45
[`copyWithComposeColor()`](https://developer.android.com/reference/kotlin/androidx/ink/brush/Brush#(androidx.ink.brush.Brush).copyWithComposeColor(androidx.compose.ui.graphics.Color,androidx.ink.brush.BrushFamily,kotlin.Float,kotlin.Float)) - Network accessline 64
While [`StockBrushes`](https://developer.android.com/reference/kotlin/androidx/ink/brush/StockBrushes) provides a versatile set of - Network accessline 64
While [`StockBrushes`](https://developer.android.com/reference/kotlin/androidx/ink/brush/StockBrushes) provides a versatile set of - Network accessline 69
A custom `BrushFamily` is loaded from its serialized format. The required format is the gzipped binary encoding of the [BrushFamily protocol buffer](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:ink/ink-storage - Network accessline 69
A custom `BrushFamily` is loaded from its serialized format. The required format is the gzipped binary encoding of the [BrushFamily protocol buffer](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:ink/ink-storage - Network accessline 70
is the gzipped binary encoding of the [BrushFamily protocol buffer](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:ink/ink-storage/src/commonMain/proto/brush_family.proto;l=1?q=brush_family.pr&sq). This lets you - Network accessline 70
is the gzipped binary encoding of the [BrushFamily protocol buffer](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:ink/ink-storage/src/commonMain/proto/brush_family.proto;l=1?q=brush_family.pr&sq). This lets you - Network accessline 71
[BrushFamily protocol buffer](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:ink/ink-storage/src/commonMain/proto/brush_family.proto;l=1?q=brush_family.pr&sq). This lets you load and use - Network accessline 71
[BrushFamily protocol buffer](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:ink/ink-storage/src/commonMain/proto/brush_family.proto;l=1?q=brush_family.pr&sq). This lets you load and use
jetpack-compose/ink/ink-app-builder/references/android/develop/ui/compose/touch-input/stylus-input/ink-api-draw-stroke.md
- Network accessline 4
To draw a stroke in Compose, use the [`InProgressStrokes`](https://developer.android.com/reference/kotlin/androidx/ink/authoring/compose/InProgressStrokes.composable#InProgressStrokes(androidx.ink.brush.Brush,kotlin.Function0,androidx.compo - Network accessline 4
To draw a stroke in Compose, use the [`InProgressStrokes`](https://developer.android.com/reference/kotlin/androidx/ink/authoring/compose/InProgressStrokes.composable#InProgressStrokes(androidx.ink.brush.Brush,kotlin.Function0,androidx.compo - Network accessline 5
[`InProgressStrokes`](https://developer.android.com/reference/kotlin/androidx/ink/authoring/compose/InProgressStrokes.composable#InProgressStrokes(androidx.ink.brush.Brush,kotlin.Function0,androidx.compose.ui.graphics.Matrix,androidx.compos - Network accessline 5
[`InProgressStrokes`](https://developer.android.com/reference/kotlin/androidx/ink/authoring/compose/InProgressStrokes.composable#InProgressStrokes(androidx.ink.brush.Brush,kotlin.Function0,androidx.compose.ui.graphics.Matrix,androidx.compos
jetpack-compose/ink/ink-app-builder/references/android/develop/ui/compose/touch-input/stylus-input/ink-api-geometry-apis.md
- Network accessline 25
> [!NOTE] > **Note:** You can implement an eraser that only removes the parts of strokes it touches by checking if a stroke intersects with individual line segments of a [`StrokeInputBatch`](https://developer.android.com/reference/kotlin/an - Network accessline 25
> [!NOTE] > **Note:** You can implement an eraser that only removes the parts of strokes it touches by checking if a stroke intersects with individual line segments of a [`StrokeInputBatch`](https://developer.android.com/reference/kotlin/an - Network accessline 26
> **Note:** You can implement an eraser that only removes the parts of strokes it touches by checking if a stroke intersects with individual line segments of a [`StrokeInputBatch`](https://developer.android.com/reference/kotlin/androidx/ink - Network accessline 26
> **Note:** You can implement an eraser that only removes the parts of strokes it touches by checking if a stroke intersects with individual line segments of a [`StrokeInputBatch`](https://developer.android.com/reference/kotlin/androidx/ink - Network accessline 28
> Then, create new `StrokeInputBatch` and [`Stroke`](https://developer.android.com/reference/kotlin/androidx/ink/strokes/Stroke) objects from the line segments that weren't intersected. - Network accessline 28
> Then, create new `StrokeInputBatch` and [`Stroke`](https://developer.android.com/reference/kotlin/androidx/ink/strokes/Stroke) objects from the line segments that weren't intersected.
jetpack-compose/ink/ink-app-builder/references/android/develop/ui/compose/touch-input/stylus-input/ink-api-state-preservation.md
- Network accessline 10
In Jetpack Compose, UI state is typically managed using [`remember`](https://developer.android.com/reference/kotlin/androidx/compose/runtime/package-summary#remember) - Network accessline 10
In Jetpack Compose, UI state is typically managed using [`remember`](https://developer.android.com/reference/kotlin/androidx/compose/runtime/package-summary#remember) - Network accessline 11
[`remember`](https://developer.android.com/reference/kotlin/androidx/compose/runtime/package-summary#remember) - Network accessline 11
[`remember`](https://developer.android.com/reference/kotlin/androidx/compose/runtime/package-summary#remember) - Network accessline 12
and [`rememberSaveable`](https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/rememberSaveable.composable#rememberSaveable(kotlin.Array,androidx.compose.runtime.saveable.Saver,kotlin.String,kotlin.Function0)). Wh - Network accessline 12
and [`rememberSaveable`](https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/rememberSaveable.composable#rememberSaveable(kotlin.Array,androidx.compose.runtime.saveable.Saver,kotlin.String,kotlin.Function0)). Wh - Network accessline 13
[`rememberSaveable`](https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/rememberSaveable.composable#rememberSaveable(kotlin.Array,androidx.compose.runtime.saveable.Saver,kotlin.String,kotlin.Function0)). - Network accessline 13
[`rememberSaveable`](https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/rememberSaveable.composable#rememberSaveable(kotlin.Array,androidx.compose.runtime.saveable.Saver,kotlin.String,kotlin.Function0)). - Network accessline 14
While [`rememberSaveable`](https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/rememberSaveable.composable#rememberSaveable(kotlin.Array,androidx.compose.runtime.saveable.Saver,kotlin.String,kotlin.Function0)) o - Network accessline 14
While [`rememberSaveable`](https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/rememberSaveable.composable#rememberSaveable(kotlin.Array,androidx.compose.runtime.saveable.Saver,kotlin.String,kotlin.Function0)) o - Network accessline 15
[`rememberSaveable`](https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/rememberSaveable.composable#rememberSaveable(kotlin.Array,androidx.compose.runtime.saveable.Saver,kotlin.String,kotlin.Function0)) - Network accessline 15
[`rememberSaveable`](https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/rememberSaveable.composable#rememberSaveable(kotlin.Array,androidx.compose.runtime.saveable.Saver,kotlin.String,kotlin.Function0)) - Network accessline 16
offers automatic state preservation across configuration changes, its built-in capabilities are limited to primitive data types and objects that implement [`Parcelable`](https://developer.android.com/reference/kotlin/android/os/Parcelable) - Network accessline 16
offers automatic state preservation across configuration changes, its built-in capabilities are limited to primitive data types and objects that implement [`Parcelable`](https://developer.android.com/reference/kotlin/android/os/Parcelable) - Network accessline 17
capabilities are limited to primitive data types and objects that implement [`Parcelable`](https://developer.android.com/reference/kotlin/android/os/Parcelable) or [`Serializable`](https://developer.android.com/reference/java/io/Serializabl - Network accessline 17
capabilities are limited to primitive data types and objects that implement [`Parcelable`](https://developer.android.com/reference/kotlin/android/os/Parcelable) or [`Serializable`](https://developer.android.com/reference/java/io/Serializabl - Network accessline 18
[`Parcelable`](https://developer.android.com/reference/kotlin/android/os/Parcelable) or - Network accessline 18
[`Parcelable`](https://developer.android.com/reference/kotlin/android/os/Parcelable) or - Network accessline 19
[`Serializable`](https://developer.android.com/reference/java/io/Serializable). - Network accessline 19
[`Serializable`](https://developer.android.com/reference/java/io/Serializable). - Network accessline 21
For custom objects that contain complex properties, such as [`Brush`](https://developer.android.com/reference/kotlin/androidx/ink/brush/Brush), you must define explicit - Network accessline 21
For custom objects that contain complex properties, such as [`Brush`](https://developer.android.com/reference/kotlin/androidx/ink/brush/Brush), you must define explicit - Network accessline 22
[`Brush`](https://developer.android.com/reference/kotlin/androidx/ink/brush/Brush), you must define explicit - Network accessline 22
[`Brush`](https://developer.android.com/reference/kotlin/androidx/ink/brush/Brush), you must define explicit - Network accessline 23
serialization and deserialization mechanisms using a custom state saver. By defining a custom [`Saver`](https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/Saver) for the `Brush` object, you can preserve the bru - Network accessline 23
serialization and deserialization mechanisms using a custom state saver. By defining a custom [`Saver`](https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/Saver) for the `Brush` object, you can preserve the bru - Network accessline 24
defining a custom [`Saver`](https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/Saver) - Network accessline 24
defining a custom [`Saver`](https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/Saver) - Network accessline 34
You can then use the custom [`Saver`](https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/Saver) to - Network accessline 34
You can then use the custom [`Saver`](https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/Saver) to - Network accessline 47
- [`Brush`](https://developer.android.com/reference/kotlin/androidx/ink/brush/Brush): Includes numeric fields (size, epsilon), color, and [`BrushFamily`](https://developer.android.com/reference/kotlin/androidx/ink/brush/BrushFamily). - Network accessline 47
- [`Brush`](https://developer.android.com/reference/kotlin/androidx/ink/brush/Brush): Includes numeric fields (size, epsilon), color, and [`BrushFamily`](https://developer.android.com/reference/kotlin/androidx/ink/brush/BrushFamily). - Network accessline 48
- [`StrokeInputBatch`](https://developer.android.com/reference/kotlin/androidx/ink/strokes/StrokeInputBatch): A list of input points with numeric fields. - Network accessline 48
- [`StrokeInputBatch`](https://developer.android.com/reference/kotlin/androidx/ink/strokes/StrokeInputBatch): A list of input points with numeric fields. - Network accessline 50
The Storage module simplifies compactly serializing the most complex part: the [`StrokeInputBatch`](https://developer.android.com/reference/kotlin/androidx/ink/strokes/StrokeInputBatch). - Network accessline 50
The Storage module simplifies compactly serializing the most complex part: the [`StrokeInputBatch`](https://developer.android.com/reference/kotlin/androidx/ink/strokes/StrokeInputBatch). - Network accessline 51
[`StrokeInputBatch`](https://developer.android.com/reference/kotlin/androidx/ink/strokes/StrokeInputBatch). - Network accessline 51
[`StrokeInputBatch`](https://developer.android.com/reference/kotlin/androidx/ink/strokes/StrokeInputBatch). - Network accessline 53
> [!NOTE] > **Note:** See data transfer objects such as `SerializedBrush` and `SerializedStroke` as well as the `Converters` helper class in the [*Data object and converter > helpers* section](https://developer.android.com/develop/ui/compos - Network accessline 53
> [!NOTE] > **Note:** See data transfer objects such as `SerializedBrush` and `SerializedStroke` as well as the `Converters` helper class in the [*Data object and converter > helpers* section](https://developer.android.com/develop/ui/compos - Network accessline 55
> helpers* section](https://developer.android.com/develop/ui/compose/touch-input/stylus-input/ink-api-state-preservation#data_object_and_converter_helpers). - Network accessline 55
> helpers* section](https://developer.android.com/develop/ui/compose/touch-input/stylus-input/ink-api-state-preservation#data_object_and_converter_helpers). - Network accessline 82
- Retrieve the saved binary data for the `StrokeInputBatch` and deserialize it using the storage module's [decode()](https://developer.android.com/reference/kotlin/androidx/ink/strokes/StrokeInputBatch.Companion#(androidx.ink.strokes.Stroke - Network accessline 82
- Retrieve the saved binary data for the `StrokeInputBatch` and deserialize it using the storage module's [decode()](https://developer.android.com/reference/kotlin/androidx/ink/strokes/StrokeInputBatch.Companion#(androidx.ink.strokes.Stroke - Network accessline 83
- Retrieve the saved `Brush` properties and create the brush. - Create the final stroke using the recreated brush and the deserialized [`StrokeInputBatch`](https://developer.android.com/reference/kotlin/androidx/ink/strokes/StrokeInputBat - Network accessline 83
- Retrieve the saved `Brush` properties and create the brush. - Create the final stroke using the recreated brush and the deserialized [`StrokeInputBatch`](https://developer.android.com/reference/kotlin/androidx/ink/strokes/StrokeInputBat - Network accessline 85
[`StrokeInputBatch`](https://developer.android.com/reference/kotlin/androidx/ink/strokes/StrokeInputBatch). - Network accessline 85
[`StrokeInputBatch`](https://developer.android.com/reference/kotlin/androidx/ink/strokes/StrokeInputBatch). - Network accessline 134
> [!NOTE] > **Note:** For details on implementing the gestures themselves, refer to the Jetpack Compose documentation for [detectTransformGestures](https://developer.android.com/reference/kotlin/androidx/compose/foundation/gestures/package- - Network accessline 134
> [!NOTE] > **Note:** For details on implementing the gestures themselves, refer to the Jetpack Compose documentation for [detectTransformGestures](https://developer.android.com/reference/kotlin/androidx/compose/foundation/gestures/package- - Network accessline 135
> **Note:** For details on implementing the gestures themselves, refer to the Jetpack Compose documentation for [detectTransformGestures](https://developer.android.com/reference/kotlin/androidx/compose/foundation/gestures/package-summary#(a - Network accessline 135
> **Note:** For details on implementing the gestures themselves, refer to the Jetpack Compose documentation for [detectTransformGestures](https://developer.android.com/reference/kotlin/androidx/compose/foundation/gestures/package-summary#(a - Network accessline 143
To export a scene, you can render your strokes to an offscreen bitmap instead of directly to the screen. Use [`Android's Picture API`](https://developer.android.com/reference/android/graphics/Picture), which lets you record drawings on a ca - Network accessline 143
To export a scene, you can render your strokes to an offscreen bitmap instead of directly to the screen. Use [`Android's Picture API`](https://developer.android.com/reference/android/graphics/Picture), which lets you record drawings on a ca - Network accessline 144
directly to the screen. Use [`Android's Picture API`](https://developer.android.com/reference/android/graphics/Picture), which lets you record drawings on a canvas without needing a visible UI component. - Network accessline 144
directly to the screen. Use [`Android's Picture API`](https://developer.android.com/reference/android/graphics/Picture), which lets you record drawings on a canvas without needing a visible UI component. - Network accessline 145
[`Android's Picture API`](https://developer.android.com/reference/android/graphics/Picture), which lets you record drawings on a canvas without - Network accessline 145
[`Android's Picture API`](https://developer.android.com/reference/android/graphics/Picture), which lets you record drawings on a canvas without - Network accessline 149
to get a `Canvas`, and then using your existing `CanvasStrokeRenderer` to draw each stroke onto that `Canvas`. After you record all the drawing commands, you can use the `Picture` to create a [`Bitmap`](https://developer.android.com/referen - Network accessline 149
to get a `Canvas`, and then using your existing `CanvasStrokeRenderer` to draw each stroke onto that `Canvas`. After you record all the drawing commands, you can use the `Picture` to create a [`Bitmap`](https://developer.android.com/referen - Network accessline 150
each stroke onto that `Canvas`. After you record all the drawing commands, you can use the `Picture` to create a [`Bitmap`](https://developer.android.com/reference/android/graphics/Bitmap), which you can then compress and save to a file. - Network accessline 150
each stroke onto that `Canvas`. After you record all the drawing commands, you can use the `Picture` to create a [`Bitmap`](https://developer.android.com/reference/android/graphics/Bitmap), which you can then compress and save to a file. - Network accessline 151
can use the `Picture` to create a [`Bitmap`](https://developer.android.com/reference/android/graphics/Bitmap), - Network accessline 151
can use the `Picture` to create a [`Bitmap`](https://developer.android.com/reference/android/graphics/Bitmap),
jetpack-compose/ink/ink-custom-brush-builder/references/android/develop/ui/compose/touch-input/stylus-input/ink-api-brush-apis.md
- Network accessline 1
The [`Brush`](https://developer.android.com/reference/kotlin/androidx/ink/brush/Brush) APIs provide you with the tools to - Network accessline 1
The [`Brush`](https://developer.android.com/reference/kotlin/androidx/ink/brush/Brush) APIs provide you with the tools to - Network accessline 8
[View on GitHub](https://github.com/android/skills/tree/main/jetpack-compose/ink/ink-custom-brush-builder) - Network accessline 8
[View on GitHub](https://github.com/android/skills/tree/main/jetpack-compose/ink/ink-custom-brush-builder) - Network accessline 12
Use the `ink-custom-brush-builder` [Android skill](https://developer.android.com/tools/agents/android-skills) to design custom BrushFamily styles in Jetpack Compose with custom tips, dynamic behaviors, textures, and coats. To install the sk - Network accessline 12
Use the `ink-custom-brush-builder` [Android skill](https://developer.android.com/tools/agents/android-skills) to design custom BrushFamily styles in Jetpack Compose with custom tips, dynamic behaviors, textures, and coats. To install the sk - Network accessline 20
To create a brush, use the Compose [`Brush`](https://developer.android.com/reference/kotlin/androidx/ink/brush/Brush) - Network accessline 20
To create a brush, use the Compose [`Brush`](https://developer.android.com/reference/kotlin/androidx/ink/brush/Brush) - Network accessline 21
companion methods with named arguments such as [`Brush.Companion.createWithComposeColor`](https://developer.android.com/reference/kotlin/androidx/ink/brush/Brush.Companion#(androidx.ink.brush.Brush.Companion).createWithComposeColor(androidx - Network accessline 21
companion methods with named arguments such as [`Brush.Companion.createWithComposeColor`](https://developer.android.com/reference/kotlin/androidx/ink/brush/Brush.Companion#(androidx.ink.brush.Brush.Companion).createWithComposeColor(androidx - Network accessline 22
[`Brush.Companion.createWithComposeColor`](https://developer.android.com/reference/kotlin/androidx/ink/brush/Brush.Companion#(androidx.ink.brush.Brush.Companion).createWithComposeColor(androidx.ink.brush.BrushFamily,androidx.compose.ui.grap - Network accessline 22
[`Brush.Companion.createWithComposeColor`](https://developer.android.com/reference/kotlin/androidx/ink/brush/Brush.Companion#(androidx.ink.brush.Brush.Companion).createWithComposeColor(androidx.ink.brush.BrushFamily,androidx.compose.ui.grap - Network accessline 25
- `family`: The style of the brush, analogous to a typeface or font in text. See [`StockBrushes`](https://developer.android.com/reference/kotlin/androidx/ink/brush/StockBrushes) for available [`BrushFamily`](https://developer.android.com/re - Network accessline 25
- `family`: The style of the brush, analogous to a typeface or font in text. See [`StockBrushes`](https://developer.android.com/reference/kotlin/androidx/ink/brush/StockBrushes) for available [`BrushFamily`](https://developer.android.com/re - Network accessline 26
- `color`: The color of the brush. You can set the color using a [`ColorLong`](https://developer.android.com/reference/kotlin/androidx/annotation/ColorLong). - Network accessline 26
- `color`: The color of the brush. You can set the color using a [`ColorLong`](https://developer.android.com/reference/kotlin/androidx/annotation/ColorLong). - Network accessline 44
You can create a copy of an existing brush using the [`copyWithComposeColor()`](https://developer.android.com/reference/kotlin/androidx/ink/brush/Brush#(androidx.ink.brush.Brush).copyWithComposeColor(androidx.compose.ui.graphics.Color,andro - Network accessline 44
You can create a copy of an existing brush using the [`copyWithComposeColor()`](https://developer.android.com/reference/kotlin/androidx/ink/brush/Brush#(androidx.ink.brush.Brush).copyWithComposeColor(androidx.compose.ui.graphics.Color,andro - Network accessline 45
[`copyWithComposeColor()`](https://developer.android.com/reference/kotlin/androidx/ink/brush/Brush#(androidx.ink.brush.Brush).copyWithComposeColor(androidx.compose.ui.graphics.Color,androidx.ink.brush.BrushFamily,kotlin.Float,kotlin.Float)) - Network accessline 45
[`copyWithComposeColor()`](https://developer.android.com/reference/kotlin/androidx/ink/brush/Brush#(androidx.ink.brush.Brush).copyWithComposeColor(androidx.compose.ui.graphics.Color,androidx.ink.brush.BrushFamily,kotlin.Float,kotlin.Float)) - Network accessline 64
While [`StockBrushes`](https://developer.android.com/reference/kotlin/androidx/ink/brush/StockBrushes) provides a versatile set of - Network accessline 64
While [`StockBrushes`](https://developer.android.com/reference/kotlin/androidx/ink/brush/StockBrushes) provides a versatile set of - Network accessline 69
A custom `BrushFamily` is loaded from its serialized format. The required format is the gzipped binary encoding of the [BrushFamily protocol buffer](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:ink/ink-storage - Network accessline 69
A custom `BrushFamily` is loaded from its serialized format. The required format is the gzipped binary encoding of the [BrushFamily protocol buffer](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:ink/ink-storage - Network accessline 70
is the gzipped binary encoding of the [BrushFamily protocol buffer](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:ink/ink-storage/src/commonMain/proto/brush_family.proto;l=1?q=brush_family.pr&sq). This lets you - Network accessline 70
is the gzipped binary encoding of the [BrushFamily protocol buffer](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:ink/ink-storage/src/commonMain/proto/brush_family.proto;l=1?q=brush_family.pr&sq). This lets you - Network accessline 71
[BrushFamily protocol buffer](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:ink/ink-storage/src/commonMain/proto/brush_family.proto;l=1?q=brush_family.pr&sq). This lets you load and use - Network accessline 71
[BrushFamily protocol buffer](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:ink/ink-storage/src/commonMain/proto/brush_family.proto;l=1?q=brush_family.pr&sq). This lets you load and use
jetpack-compose/jetpack-compose-performance/references/android/develop/ui/compose/custom-modifiers.md
- Network accessline 1
Compose provides many [modifiers](https://developer.android.com/develop/ui/compose/modifiers) for common behaviors right out of the box, - Network accessline 1
Compose provides many [modifiers](https://developer.android.com/develop/ui/compose/modifiers) for common behaviors right out of the box, - Network accessline 20
It is often possible to create custom modifiers by using existing modifiers. For example, [`Modifier.clip()`](https://developer.android.com/reference/kotlin/androidx/compose/ui/Modifier#(androidx.compose.ui.Modifier).clip(androidx.compose.u - Network accessline 20
It is often possible to create custom modifiers by using existing modifiers. For example, [`Modifier.clip()`](https://developer.android.com/reference/kotlin/androidx/compose/ui/Modifier#(androidx.compose.ui.Modifier).clip(androidx.compose.u - Network accessline 21
example, [`Modifier.clip()`](https://developer.android.com/reference/kotlin/androidx/compose/ui/Modifier#(androidx.compose.ui.Modifier).clip(androidx.compose.ui.graphics.Shape)) is implemented using the `graphicsLayer` - Network accessline 21
example, [`Modifier.clip()`](https://developer.android.com/reference/kotlin/androidx/compose/ui/Modifier#(androidx.compose.ui.Modifier).clip(androidx.compose.ui.graphics.Shape)) is implemented using the `graphicsLayer` - Network accessline 52
> [!NOTE] > **Note:** `composed {}` is no longer recommended due to performance concerns. See [Migrate from `Modifier.composed` to `Modifier.Node`](https://developer.android.com/develop/ui/compose/custom-modifiers-node) for details on how t - Network accessline 52
> [!NOTE] > **Note:** `composed {}` is no longer recommended due to performance concerns. See [Migrate from `Modifier.composed` to `Modifier.Node`](https://developer.android.com/develop/ui/compose/custom-modifiers-node) for details on how t - Network accessline 53
> **Note:** `composed {}` is no longer recommended due to performance concerns. See [Migrate from `Modifier.composed` to `Modifier.Node`](https://developer.android.com/develop/ui/compose/custom-modifiers-node) for details on how to migrate - Network accessline 53
> **Note:** `composed {}` is no longer recommended due to performance concerns. See [Migrate from `Modifier.composed` to `Modifier.Node`](https://developer.android.com/develop/ui/compose/custom-modifiers-node) for details on how to migrate - Network accessline 55
Using a composable modifier factory to create a modifier also lets you use higher level compose APIs, such as [`animate*AsState`](https://developer.android.com/develop/ui/compose/animation/value-based#animate-as-state) and other [Compose - Network accessline 55
Using a composable modifier factory to create a modifier also lets you use higher level compose APIs, such as [`animate*AsState`](https://developer.android.com/develop/ui/compose/animation/value-based#animate-as-state) and other [Compose - Network accessline 56
higher level compose APIs, such as [`animate*AsState`](https://developer.android.com/develop/ui/compose/animation/value-based#animate-as-state) and other [Compose - Network accessline 56
higher level compose APIs, such as [`animate*AsState`](https://developer.android.com/develop/ui/compose/animation/value-based#animate-as-state) and other [Compose - Network accessline 57
state backed animation APIs](https://developer.android.com/develop/ui/compose/animation/choose-api). For example, the following snippet shows a - Network accessline 57
state backed animation APIs](https://developer.android.com/develop/ui/compose/animation/choose-api). For example, the following snippet shows a - Network accessline 125
If this is not how you expect your modifier to work, use a custom [`Modifier.Node`](https://developer.android.com/develop/ui/compose/custom-modifiers#implement-custom) instead, as composition locals will be - Network accessline 125
If this is not how you expect your modifier to work, use a custom [`Modifier.Node`](https://developer.android.com/develop/ui/compose/custom-modifiers#implement-custom) instead, as composition locals will be - Network accessline 126
[`Modifier.Node`](https://developer.android.com/develop/ui/compose/custom-modifiers#implement-custom) instead, as composition locals will be - Network accessline 126
[`Modifier.Node`](https://developer.android.com/develop/ui/compose/custom-modifiers#implement-custom) instead, as composition locals will be - Network accessline 131
Composable factory modifiers are never [skipped](https://developer.android.com/develop/ui/compose/mental-model#skips) because composable functions - Network accessline 131
Composable factory modifiers are never [skipped](https://developer.android.com/develop/ui/compose/mental-model#skips) because composable functions - Network accessline 164
[`Modifier.Node`](https://developer.android.com/reference/kotlin/androidx/compose/ui/Modifier.Node) is a lower level API for creating modifiers in Compose. It - Network accessline 164
[`Modifier.Node`](https://developer.android.com/reference/kotlin/androidx/compose/ui/Modifier.Node) is a lower level API for creating modifiers in Compose. It - Network accessline 168
> [!NOTE] > **Note:** There is another API for creating custom modifiers, [`composed {}`](https://developer.android.com/reference/kotlin/androidx/compose/ui/Modifier#(androidx.compose.ui.Modifier).composed(kotlin.Function1,kotlin.Function1) - Network accessline 168
> [!NOTE] > **Note:** There is another API for creating custom modifiers, [`composed {}`](https://developer.android.com/reference/kotlin/androidx/compose/ui/Modifier#(androidx.compose.ui.Modifier).composed(kotlin.Function1,kotlin.Function1) - Network accessline 169
> **Note:** There is another API for creating custom modifiers, [`composed {}`](https://developer.android.com/reference/kotlin/androidx/compose/ui/Modifier#(androidx.compose.ui.Modifier).composed(kotlin.Function1,kotlin.Function1)). This AP - Network accessline 169
> **Note:** There is another API for creating custom modifiers, [`composed {}`](https://developer.android.com/reference/kotlin/androidx/compose/ui/Modifier#(androidx.compose.ui.Modifier).composed(kotlin.Function1,kotlin.Function1)). This AP - Network accessline 175
- A [`Modifier.Node`](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/Modifier.kt;l=184) implementation that holds the logic and state of your modifier. - Network accessline 175
- A [`Modifier.Node`](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/Modifier.kt;l=184) implementation that holds the logic and state of your modifier. - Network accessline 176
- A [`ModifierNodeElement`](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/ModifierNodeElement.kt;l=39) that creates and updates modifier node instanc - Network accessline 176
- A [`ModifierNodeElement`](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/ModifierNodeElement.kt;l=39) that creates and updates modifier node instanc - Network accessline 213
|---|---|---| | **Node** | **Usage** | **Sample Link** | | [`LayoutModifierNode`](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/LayoutModifierNode.kt - Network accessline 213
|---|---|---| | **Node** | **Usage** | **Sample Link** | | [`LayoutModifierNode`](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/LayoutModifierNode.kt - Network accessline 214
| **Node** | **Usage** | **Sample Link** | | [`LayoutModifierNode`](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/LayoutModifierNode.kt) | A `Modifie - Network accessline 214
| **Node** | **Usage** | **Sample Link** | | [`LayoutModifierNode`](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/LayoutModifierNode.kt) | A `Modifie - Network accessline 215
| [`LayoutModifierNode`](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/LayoutModifierNode.kt) | A `Modifier.Node` that changes how its wrapped conten - Network accessline 215
| [`LayoutModifierNode`](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/LayoutModifierNode.kt) | A `Modifier.Node` that changes how its wrapped conten - Network accessline 216
| [`DrawModifierNode`](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/DrawModifierNode.kt) | A `Modifier.Node` that draws into the space of the layout - Network accessline 216
| [`DrawModifierNode`](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/DrawModifierNode.kt) | A `Modifier.Node` that draws into the space of the layout - Network accessline 217
| [`CompositionLocalConsumerModifierNode`](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/CompositionLocalConsumerModifierNode.kt) | Implementing this - Network accessline 217
| [`CompositionLocalConsumerModifierNode`](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/CompositionLocalConsumerModifierNode.kt) | Implementing this - Network accessline 218
| [`SemanticsModifierNode`](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/SemanticsModifierNode.kt) | A `Modifier.Node` that adds semantics key/value - Network accessline 218
| [`SemanticsModifierNode`](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/SemanticsModifierNode.kt) | A `Modifier.Node` that adds semantics key/value - Network accessline 219
| [`PointerInputModifierNode`](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/PointerInputModifierNode.kt) | A `Modifier.Node` that receives [PointerI - Network accessline 219
| [`PointerInputModifierNode`](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/PointerInputModifierNode.kt) | A `Modifier.Node` that receives [PointerI - Network accessline 220
| [`ParentDataModifierNode`](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/ParentDataModifierNode.kt) | A `Modifier.Node` that provides data to the p - Network accessline 220
| [`ParentDataModifierNode`](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/ParentDataModifierNode.kt) | A `Modifier.Node` that provides data to the p - Network accessline 221
| [`LayoutAwareModifierNode`](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/LayoutAwareModifierNode.kt) | A `Modifier.Node` which receives `onMeasure - Network accessline 221
| [`LayoutAwareModifierNode`](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/LayoutAwareModifierNode.kt) | A `Modifier.Node` which receives `onMeasure - Network accessline 222
| [`GlobalPositionAwareModifierNode`](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/GlobalPositionAwareModifierNode.kt) | A `Modifier.Node` which rec - Network accessline 222
| [`GlobalPositionAwareModifierNode`](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/GlobalPositionAwareModifierNode.kt) | A `Modifier.Node` which rec - Network accessline 223
| [`ObserverModifierNode`](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/ObserverModifierNode.kt) | `Modifier.Node`s that implement `ObserverNode` ca - Network accessline 223
| [`ObserverModifierNode`](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/ObserverModifierNode.kt) | `Modifier.Node`s that implement `ObserverNode` ca - Network accessline 224
| [`DelegatingNode`](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/DelegatingNode.kt) | A `Modifier.Node` which is able to delegate work to other `Mo - Network accessline 224
| [`DelegatingNode`](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/DelegatingNode.kt) | A `Modifier.Node` which is able to delegate work to other `Mo - Network accessline 225
| [`TraversableNode`](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/TraversableNode.kt;l=28) | Allows `Modifier.Node` classes to traverse up/down the - Network accessline 225
| [`TraversableNode`](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/TraversableNode.kt;l=28) | Allows `Modifier.Node` classes to traverse up/down the - Network accessline 229
on the element, the node triggers a redraw and its color correctly updates. It is possible to opt out of auto-invalidation, as detailed in the [Opt out of node auto-invalidation](https://developer.android.com/develop/ui/compose/custom-modif - Network accessline 229
on the element, the node triggers a redraw and its color correctly updates. It is possible to opt out of auto-invalidation, as detailed in the [Opt out of node auto-invalidation](https://developer.android.com/develop/ui/compose/custom-modif - Network accessline 231
[Opt out of node auto-invalidation](https://developer.android.com/develop/ui/compose/custom-modifiers#autoinvalidation) section. - Network accessline 231
[Opt out of node auto-invalidation](https://developer.android.com/develop/ui/compose/custom-modifiers#autoinvalidation) section. - Network accessline 267
data classes for binary compatibility reasons, then you can manually implement `equals` and `hashCode`, for example, the [padding modifier element](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/foundati - Network accessline 267
data classes for binary compatibility reasons, then you can manually implement `equals` and `hashCode`, for example, the [padding modifier element](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/foundati - Network accessline 269
[padding modifier element](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Padding.kt;l=358). - Network accessline 269
[padding modifier element](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Padding.kt;l=358). - Network accessline 362
over modifiers that are just created with a composable factory is that they can read the value of the composition local from where the modifier is used in your UI tree, not where the modifier is allocated, using [`currentValueOf`](https://d - Network accessline 362
over modifiers that are just created with a composable factory is that they can read the value of the composition local from where the modifier is used in your UI tree, not where the modifier is allocated, using [`currentValueOf`](https://d - Network accessline 364
UI tree, not where the modifier is allocated, using [`currentValueOf`](https://developer.android.com/reference/kotlin/androidx/compose/ui/node/CompositionLocalConsumerModifierNode#(androidx.compose.ui.node.CompositionLocalConsumerModifierNo - Network accessline 364
UI tree, not where the modifier is allocated, using [`currentValueOf`](https://developer.android.com/reference/kotlin/androidx/compose/ui/node/CompositionLocalConsumerModifierNode#(androidx.compose.ui.node.CompositionLocalConsumerModifierNo - Network accessline 370
- `DrawModifierNode`: [`ContentDrawScope`](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/DrawModifierNode.kt;l=31) - Network accessline 370
- `DrawModifierNode`: [`ContentDrawScope`](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/DrawModifierNode.kt;l=31) - Network accessline 371
- `LayoutModifierNode`: [`MeasureScope`](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/LayoutModifierNode.kt;l=64) \& [`IntrinsicMeasureScope`](https - Network accessline 371
- `LayoutModifierNode`: [`MeasureScope`](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/LayoutModifierNode.kt;l=64) \& [`IntrinsicMeasureScope`](https - Network accessline 372
- `SemanticsModifierNode`: [`SemanticsPropertyReceiver`](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/semantics/SemanticsProperties.kt;l=788) - Network accessline 372
- `SemanticsModifierNode`: [`SemanticsPropertyReceiver`](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/semantics/SemanticsProperties.kt;l=788) - Network accessline 394
To react to state changes outside of a scope and automatically update your modifier, use an [`ObserverModifierNode`](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/ui/ui/src/commonMain/kotlin/androidx/co - Network accessline 394
To react to state changes outside of a scope and automatically update your modifier, use an [`ObserverModifierNode`](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/ui/ui/src/commonMain/kotlin/androidx/co - Network accessline 395
modifier, use an [`ObserverModifierNode`](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/ObserverModifierNode.kt). - Network accessline 395
modifier, use an [`ObserverModifierNode`](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/ObserverModifierNode.kt). - Network accessline 397
For example, [`Modifier.scrollable`](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/Scrollable.kt;l=269) uses this techniq - Network accessline 397
For example, [`Modifier.scrollable`](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/Scrollable.kt;l=269) uses this techniq - Network accessline 432
`Modifier.Node` implementations have access to a `coroutineScope`. This allows for use of the [Compose Animatable APIs](https://developer.android.com/develop/ui/compose/animation/value-based#animatable). For example, this snippet modifies - Network accessline 432
`Modifier.Node` implementations have access to a `coroutineScope`. This allows for use of the [Compose Animatable APIs](https://developer.android.com/develop/ui/compose/animation/value-based#animatable). For example, this snippet modifies - Network accessline 433
for use of the [Compose Animatable APIs](https://developer.android.com/develop/ui/compose/animation/value-based#animatable). For example, this snippet modifies - Network accessline 433
for use of the [Compose Animatable APIs](https://developer.android.com/develop/ui/compose/animation/value-based#animatable). For example, this snippet modifies - Network accessline 436
> [!NOTE] > **Note:** `Modifier.Node` can be reused in a composable. You can set the new state either by setting it in [`onAttach`](https://developer.android.com/reference/kotlin/androidx/compose/ui/Modifier.Node#onAttach()), or by resettin - Network accessline 436
> [!NOTE] > **Note:** `Modifier.Node` can be reused in a composable. You can set the new state either by setting it in [`onAttach`](https://developer.android.com/reference/kotlin/androidx/compose/ui/Modifier.Node#onAttach()), or by resettin - Network accessline 437
> **Note:** `Modifier.Node` can be reused in a composable. You can set the new state either by setting it in [`onAttach`](https://developer.android.com/reference/kotlin/androidx/compose/ui/Modifier.Node#onAttach()), or by resetting in [`onR - Network accessline 437
> **Note:** `Modifier.Node` can be reused in a composable. You can set the new state either by setting it in [`onAttach`](https://developer.android.com/reference/kotlin/androidx/compose/ui/Modifier.Node#onAttach()), or by resetting in [`onR
jetpack-compose/jetpack-compose-performance/references/android/develop/ui/compose/performance/backwards-write.md
- Network accessline 1
Compose executes a frame in three strictly ordered, forward-flowing phases:  **Figure 1.** The three phases of a Compose frame - Network accessline 2
 **Figure 1.** The three phases of a Compose frame - Network accessline 18
recompose by scheduling an earlier phase or composable to run again. A backwards write is an unoptimized recomposition loop.  **Figure 2.** Example of backwards write through the recomposition loop p - Network accessline 20
 **Figure 2.** Example of backwards write through the recomposition loop p
jetpack-compose/jetpack-compose-performance/references/android/develop/ui/compose/performance/stability/strongskipping.md
- Network accessline 4
- Composables with unstable parameters become [skippable](https://developer.android.com/develop/ui/compose/performance/stability#functions) - Network accessline 4
- Composables with unstable parameters become [skippable](https://developer.android.com/develop/ui/compose/performance/stability#functions) - Network accessline 5
- Lambdas with unstable captures are [remembered](https://developer.android.com/develop/ui/compose/state#state-in-composables) - Network accessline 5
- Lambdas with unstable captures are [remembered](https://developer.android.com/develop/ui/compose/state#state-in-composables) - Network accessline 7
> [!NOTE] > **Note:** Strong Skipping is enabled by default in Kotlin 2.0.20. The full list of options are available in the [Compose Compiler Gradle Plugin reference](https://kotlinlang.org/docs/compose-compiler-options.html). - Network accessline 7
> [!NOTE] > **Note:** Strong Skipping is enabled by default in Kotlin 2.0.20. The full list of options are available in the [Compose Compiler Gradle Plugin reference](https://kotlinlang.org/docs/compose-compiler-options.html). - Network accessline 8
> **Note:** Strong Skipping is enabled by default in Kotlin 2.0.20. The full list of options are available in the [Compose Compiler Gradle Plugin reference](https://kotlinlang.org/docs/compose-compiler-options.html). - Network accessline 8
> **Note:** Strong Skipping is enabled by default in Kotlin 2.0.20. The full list of options are available in the [Compose Compiler Gradle Plugin reference](https://kotlinlang.org/docs/compose-compiler-options.html). - Network accessline 26
Strong skipping mode relaxes some of the [stability](https://developer.android.com/develop/ui/compose/performance/stability) rules normally applied - Network accessline 26
Strong skipping mode relaxes some of the [stability](https://developer.android.com/develop/ui/compose/performance/stability) rules normally applied - Network accessline 37
To determine whether to skip a composable during recomposition, Compose compares the value of each parameter with their previous values. The type of comparison depends on the [stability](https://developer.android.com/develop/ui/compose/perf - Network accessline 37
To determine whether to skip a composable during recomposition, Compose compares the value of each parameter with their previous values. The type of comparison depends on the [stability](https://developer.android.com/develop/ui/compose/perf - Network accessline 39
depends on the [stability](https://developer.android.com/develop/ui/compose/performance/stability) of the parameter. - Network accessline 39
depends on the [stability](https://developer.android.com/develop/ui/compose/performance/stability) of the parameter. - Network accessline 69
Strong skipping mode also enables more [memoization](https://en.wikipedia.org/wiki/Memoization) of lambdas - Network accessline 69
Strong skipping mode also enables more [memoization](https://en.wikipedia.org/wiki/Memoization) of lambdas - Network accessline 137
Enabling strong skipping in [Now In Android](https://github.com/android/nowinandroid) increased the APK - Network accessline 137
Enabling strong skipping in [Now In Android](https://github.com/android/nowinandroid) increased the APK
jetpack-compose/jetpack-compose-performance/references/layouts.md
- Network accessline 123
`Modifier.layout` instead of passing them back to Composition. For more information on phase flow and eliminating recomposition loops, see the [Backwards Write documentation](https://developer.android.com/develop/ui/compose/performance/back - Network accessline 123
`Modifier.layout` instead of passing them back to Composition. For more information on phase flow and eliminating recomposition loops, see the [Backwards Write documentation](https://developer.android.com/develop/ui/compose/performance/back - Network accessline 125
[Backwards Write documentation](https://developer.android.com/develop/ui/compose/performance/backwards-write). - Network accessline 125
[Backwards Write documentation](https://developer.android.com/develop/ui/compose/performance/backwards-write).
jetpack-compose/jetpack-compose-performance/references/state-and-stability.md
- Network accessline 210
For more information, see the [Backwards Write documentation](https://developer.android.com/develop/ui/compose/performance/backwards-write). - Network accessline 210
For more information, see the [Backwards Write documentation](https://developer.android.com/develop/ui/compose/performance/backwards-write). - Network accessline 597
For more information, see the [Strong Skipping Mode documentation](https://developer.android.com/develop/ui/compose/performance/stability/strongskipping). - Network accessline 597
For more information, see the [Strong Skipping Mode documentation](https://developer.android.com/develop/ui/compose/performance/stability/strongskipping).
jetpack-compose/migration/migrate-xml-views-to-jetpack-compose/references/android/develop/ui/compose/designsystems/migrate-xml-theme-to-compose.md
- Network accessline 7
You can use the [Material Theme Builder](https://m3.material.io/theme-builder) - Network accessline 7
You can use the [Material Theme Builder](https://m3.material.io/theme-builder) - Network accessline 27
- This guide focuses on migrating to Material 3 only. For migrating from alternative design systems, see [Material 2](https://developer.android.com/develop/ui/compose/designsystems/material) or [Custom design systems in Compose](https://dev - Network accessline 27
- This guide focuses on migrating to Material 3 only. For migrating from alternative design systems, see [Material 2](https://developer.android.com/develop/ui/compose/designsystems/material) or [Custom design systems in Compose](https://dev - Network accessline 85
For more details, see [shapes](https://developer.android.com/develop/ui/compose/designsystems/material3#shapes). - Network accessline 85
For more details, see [shapes](https://developer.android.com/develop/ui/compose/designsystems/material3#shapes). - Network accessline 91
For more details, see [typography](https://developer.android.com/develop/ui/compose/designsystems/material3#typography). - Network accessline 91
For more details, see [typography](https://developer.android.com/develop/ui/compose/designsystems/material3#typography). - Network accessline 126
Styles have no **direct** equivalent in Compose - instead styles are passed as: parameters or modifiers to composables, using the [new, experimental Styles API](https://developer.android.com/develop/ui/compose/styles) defined in the AppThem - Network accessline 126
Styles have no **direct** equivalent in Compose - instead styles are passed as: parameters or modifiers to composables, using the [new, experimental Styles API](https://developer.android.com/develop/ui/compose/styles) defined in the AppThem - Network accessline 127
parameters or modifiers to composables, using the [new, experimental Styles API](https://developer.android.com/develop/ui/compose/styles) defined in the AppTheme, or by creating layered, reusable composable variations with the defined style - Network accessline 127
parameters or modifiers to composables, using the [new, experimental Styles API](https://developer.android.com/develop/ui/compose/styles) defined in the AppTheme, or by creating layered, reusable composable variations with the defined style - Network accessline 128
[new, experimental Styles API](https://developer.android.com/develop/ui/compose/styles) defined in the AppTheme, or by creating - Network accessline 128
[new, experimental Styles API](https://developer.android.com/develop/ui/compose/styles) defined in the AppTheme, or by creating
jetpack-compose/migration/migrate-xml-views-to-jetpack-compose/references/android/develop/ui/compose/migrate/interoperability-apis/compose-in-views.md
- Network accessline 37
> dependency to your `build.gradle` file. > > See the [Activity releases page](https://developer.android.com/jetpack/androidx/releases/activity) - Network accessline 37
> dependency to your `build.gradle` file. > > See the [Activity releases page](https://developer.android.com/jetpack/androidx/releases/activity) - Network accessline 38
> > See the [Activity releases page](https://developer.android.com/jetpack/androidx/releases/activity) > to find out the latest version. - Network accessline 38
> > See the [Activity releases page](https://developer.android.com/jetpack/androidx/releases/activity) > to find out the latest version. - Network accessline 39
> See the [Activity releases page](https://developer.android.com/jetpack/androidx/releases/activity) - Network accessline 39
> See the [Activity releases page](https://developer.android.com/jetpack/androidx/releases/activity) - Network accessline 44
[`ViewCompositionStrategy`](https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/ViewCompositionStrategy) - Network accessline 44
[`ViewCompositionStrategy`](https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/ViewCompositionStrategy) - Network accessline 45
defines when the Composition should be disposed. The default, [`ViewCompositionStrategy.Default`](https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/ViewCompositionStrategy#Default()), disposes the Composition when - Network accessline 45
defines when the Composition should be disposed. The default, [`ViewCompositionStrategy.Default`](https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/ViewCompositionStrategy#Default()), disposes the Composition when - Network accessline 46
[`ViewCompositionStrategy.Default`](https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/ViewCompositionStrategy#Default()), - Network accessline 46
[`ViewCompositionStrategy.Default`](https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/ViewCompositionStrategy#Default()), - Network accessline 47
disposes the Composition when the underlying [`ComposeView`](https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/ComposeView) detaches from the window, unless it is part of a pooling container such as a - Network accessline 47
disposes the Composition when the underlying [`ComposeView`](https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/ComposeView) detaches from the window, unless it is part of a pooling container such as a - Network accessline 48
[`ComposeView`](https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/ComposeView) - Network accessline 48
[`ComposeView`](https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/ComposeView) - Network accessline 54
To change the `ViewCompositionStrategy`, call the [`setViewCompositionStrategy()`](https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/AbstractComposeView#setViewCompositionStrategy(androidx.compose.ui.platform.ViewC - Network accessline 54
To change the `ViewCompositionStrategy`, call the [`setViewCompositionStrategy()`](https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/AbstractComposeView#setViewCompositionStrategy(androidx.compose.ui.platform.ViewC - Network accessline 60
| `ViewCompositionStrategy` | Description and Interop Scenario | |---|---| | [`DisposeOnDetachedFromWindow`](https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/ViewCompositionStrategy.DisposeOnDetachedFromWindow) | - Network accessline 60
| `ViewCompositionStrategy` | Description and Interop Scenario | |---|---| | [`DisposeOnDetachedFromWindow`](https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/ViewCompositionStrategy.DisposeOnDetachedFromWindow) | - Network accessline 61
|---|---| | [`DisposeOnDetachedFromWindow`](https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/ViewCompositionStrategy.DisposeOnDetachedFromWindow) | The Composition will be disposed when the underlying `ComposeView - Network accessline 61
|---|---| | [`DisposeOnDetachedFromWindow`](https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/ViewCompositionStrategy.DisposeOnDetachedFromWindow) | The Composition will be disposed when the underlying `ComposeView - Network accessline 62
| [`DisposeOnDetachedFromWindow`](https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/ViewCompositionStrategy.DisposeOnDetachedFromWindow) | The Composition will be disposed when the underlying `ComposeView` is detac - Network accessline 62
| [`DisposeOnDetachedFromWindow`](https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/ViewCompositionStrategy.DisposeOnDetachedFromWindow) | The Composition will be disposed when the underlying `ComposeView` is detac - Network accessline 63
| [`DisposeOnDetachedFromWindowOrReleasedFromPool`](https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/ViewCompositionStrategy.DisposeOnDetachedFromWindowOrReleasedFromPool) (**Default**) | Similar to `DisposeOnDeta - Network accessline 63
| [`DisposeOnDetachedFromWindowOrReleasedFromPool`](https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/ViewCompositionStrategy.DisposeOnDetachedFromWindowOrReleasedFromPool) (**Default**) | Similar to `DisposeOnDeta - Network accessline 64
| [`DisposeOnLifecycleDestroyed`](https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/ViewCompositionStrategy.DisposeOnLifecycleDestroyed) | The Composition will be disposed when the provided [`Lifecycle`](https://de - Network accessline 64
| [`DisposeOnLifecycleDestroyed`](https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/ViewCompositionStrategy.DisposeOnLifecycleDestroyed) | The Composition will be disposed when the provided [`Lifecycle`](https://de - Network accessline 65
| [`DisposeOnViewTreeLifecycleDestroyed`](https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed) | The Composition will be disposed when the `Lifecycle` owned - Network accessline 65
| [`DisposeOnViewTreeLifecycleDestroyed`](https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed) | The Composition will be disposed when the `Lifecycle` owned - Network accessline 72
If you want to incorporate Compose UI content in a fragment or an existing View layout, use [`ComposeView`](https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/ComposeView) - Network accessline 72
If you want to incorporate Compose UI content in a fragment or an existing View layout, use [`ComposeView`](https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/ComposeView) - Network accessline 73
layout, use [`ComposeView`](https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/ComposeView) - Network accessline 73
layout, use [`ComposeView`](https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/ComposeView) - Network accessline 74
and call its [`setContent()`](https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/ComposeView#setContent(kotlin.Function0)) method. `ComposeView` is an Android [`View`](https://developer.android.com/reference/android - Network accessline 74
and call its [`setContent()`](https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/ComposeView#setContent(kotlin.Function0)) method. `ComposeView` is an Android [`View`](https://developer.android.com/reference/android - Network accessline 75
[`setContent()`](https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/ComposeView#setContent(kotlin.Function0)) - Network accessline 75
[`setContent()`](https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/ComposeView#setContent(kotlin.Function0)) - Network accessline 76
method. `ComposeView` is an Android [`View`](https://developer.android.com/reference/android/view/View). - Network accessline 76
method. `ComposeView` is an Android [`View`](https://developer.android.com/reference/android/view/View). - Network accessline 81
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 81
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 98
In the Kotlin source code, inflate the layout from the [layout resource](https://developer.android.com/guide/topics/resources/layout-resource) defined in XML. Then get the - Network accessline 98
In the Kotlin source code, inflate the layout from the [layout resource](https://developer.android.com/guide/topics/resources/layout-resource) defined in XML. Then get the - Network accessline 99
resource](https://developer.android.com/guide/topics/resources/layout-resource) defined in XML. Then get the - Network accessline 99
resource](https://developer.android.com/guide/topics/resources/layout-resource) defined in XML. Then get the - Network accessline 174
 - Network accessline 174
 - Network accessline 284
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 284
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 285
xmlns:tools="http://schemas.android.com/tools" - Network accessline 285
xmlns:tools="http://schemas.android.com/tools" - Network accessline 299
 - Network accessline 299

jetpack-compose/migration/migrate-xml-views-to-jetpack-compose/references/android/develop/ui/compose/migrate/interoperability-apis/views-in-compose.md
- Network accessline 2
particularly useful if you want to use UI elements that are not yet available in Compose, like [`AdView`](https://developers.google.com/android/reference/com/google/android/gms/ads/AdView). - Network accessline 2
particularly useful if you want to use UI elements that are not yet available in Compose, like [`AdView`](https://developers.google.com/android/reference/com/google/android/gms/ads/AdView). - Network accessline 3
Compose, like [`AdView`](https://developers.google.com/android/reference/com/google/android/gms/ads/AdView). This approach also lets you reuse custom views you may have designed. - Network accessline 3
Compose, like [`AdView`](https://developers.google.com/android/reference/com/google/android/gms/ads/AdView). This approach also lets you reuse custom views you may have designed. - Network accessline 4
[`AdView`](https://developers.google.com/android/reference/com/google/android/gms/ads/AdView). - Network accessline 4
[`AdView`](https://developers.google.com/android/reference/com/google/android/gms/ads/AdView). - Network accessline 12
To include a view element or hierarchy, use the [`AndroidView`](https://developer.android.com/reference/kotlin/androidx/compose/ui/viewinterop/AndroidView.composable#AndroidView(kotlin.Function1,androidx.compose.ui.Modifier,kotlin.Function1 - Network accessline 12
To include a view element or hierarchy, use the [`AndroidView`](https://developer.android.com/reference/kotlin/androidx/compose/ui/viewinterop/AndroidView.composable#AndroidView(kotlin.Function1,androidx.compose.ui.Modifier,kotlin.Function1 - Network accessline 13
composable. `AndroidView` is passed a lambda that returns a [`View`](https://developer.android.com/reference/android/view/View). `AndroidView` also provides an `update` callback that is called when the view is inflated. The `AndroidView` re - Network accessline 13
composable. `AndroidView` is passed a lambda that returns a [`View`](https://developer.android.com/reference/android/view/View). `AndroidView` also provides an `update` callback that is called when the view is inflated. The `AndroidView` re - Network accessline 14
[`View`](https://developer.android.com/reference/android/view/View). `AndroidView` also provides an `update` - Network accessline 14
[`View`](https://developer.android.com/reference/android/view/View). `AndroidView` also provides an `update` - Network accessline 66
To embed an XML layout, use the [`AndroidViewBinding`](https://developer.android.com/reference/kotlin/androidx/compose/ui/viewinterop/package-summary#AndroidViewBinding(kotlin.Function3,%20androidx.compose.ui.Modifier,%20kotlin.Function1)) - Network accessline 66
To embed an XML layout, use the [`AndroidViewBinding`](https://developer.android.com/reference/kotlin/androidx/compose/ui/viewinterop/package-summary#AndroidViewBinding(kotlin.Function3,%20androidx.compose.ui.Modifier,%20kotlin.Function1)) - Network accessline 67
[`AndroidViewBinding`](https://developer.android.com/reference/kotlin/androidx/compose/ui/viewinterop/package-summary#AndroidViewBinding(kotlin.Function3,%20androidx.compose.ui.Modifier,%20kotlin.Function1)) - Network accessline 67
[`AndroidViewBinding`](https://developer.android.com/reference/kotlin/androidx/compose/ui/viewinterop/package-summary#AndroidViewBinding(kotlin.Function3,%20androidx.compose.ui.Modifier,%20kotlin.Function1)) - Network accessline 69
do this, your project must enable [view binding](https://developer.android.com/topic/libraries/view-binding#setup). - Network accessline 69
do this, your project must enable [view binding](https://developer.android.com/topic/libraries/view-binding#setup). - Network accessline 88
If you are using an `AndroidView` in a Lazy list (`LazyColumn`, `LazyRow`, `Pager`, etc.), consider using the [`AndroidView`](https://developer.android.com/reference/kotlin/androidx/compose/ui/viewinterop/package-summary#AndroidView(kotlin. - Network accessline 88
If you are using an `AndroidView` in a Lazy list (`LazyColumn`, `LazyRow`, `Pager`, etc.), consider using the [`AndroidView`](https://developer.android.com/reference/kotlin/androidx/compose/ui/viewinterop/package-summary#AndroidView(kotlin. - Network accessline 89
`Pager`, etc.), consider using the [`AndroidView`](https://developer.android.com/reference/kotlin/androidx/compose/ui/viewinterop/package-summary#AndroidView(kotlin.Function1,kotlin.Function1,androidx.compose.ui.Modifier,kotlin.Function1,ko - Network accessline 89
`Pager`, etc.), consider using the [`AndroidView`](https://developer.android.com/reference/kotlin/androidx/compose/ui/viewinterop/package-summary#AndroidView(kotlin.Function1,kotlin.Function1,androidx.compose.ui.Modifier,kotlin.Function1,ko - Network accessline 133
To include a fragment, use the [`AndroidFragment`](https://developer.android.com/reference/kotlin/androidx/fragment/compose/package-summary#AndroidFragment) - Network accessline 133
To include a fragment, use the [`AndroidFragment`](https://developer.android.com/reference/kotlin/androidx/fragment/compose/package-summary#AndroidFragment) - Network accessline 157
In Fragment [1.9.0](https://developer.android.com/jetpack/androidx/releases/fragment#1.9.0) and higher, you can use the `maxLifecycle` - Network accessline 157
In Fragment [1.9.0](https://developer.android.com/jetpack/androidx/releases/fragment#1.9.0) and higher, you can use the `maxLifecycle` - Network accessline 160
For example, in a [`HorizontalPager`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/pager/HorizontalPager.composable), you can dynamically set `maxLifecycle` - Network accessline 160
For example, in a [`HorizontalPager`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/pager/HorizontalPager.composable), you can dynamically set `maxLifecycle` - Network accessline 161
to [`RESUMED`](https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle.State#RESUMED) only when the corresponding page is active, keeping offscreen - Network accessline 161
to [`RESUMED`](https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle.State#RESUMED) only when the corresponding page is active, keeping offscreen - Network accessline 162
pages capped at [`STARTED`](https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle.State#STARTED). When the user navigates to another page, the - Network accessline 162
pages capped at [`STARTED`](https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle.State#STARTED). When the user navigates to another page, the - Network accessline 163
previous page's fragment cap becomes `STARTED`. This pauses or cancels workloads scoped to `RESUMED` (such as coroutines running in [`repeatOnLifecycle(RESUMED)`](https://developer.android.com/reference/kotlin/androidx/lifecycle/package-sum - Network accessline 163
previous page's fragment cap becomes `STARTED`. This pauses or cancels workloads scoped to `RESUMED` (such as coroutines running in [`repeatOnLifecycle(RESUMED)`](https://developer.android.com/reference/kotlin/androidx/lifecycle/package-sum - Network accessline 164
scoped to `RESUMED` (such as coroutines running in [`repeatOnLifecycle(RESUMED)`](https://developer.android.com/reference/kotlin/androidx/lifecycle/package-summary#(androidx.lifecycle.LifecycleOwner).repeatOnLifecycle(androidx.lifecycle.Lif - Network accessline 164
scoped to `RESUMED` (such as coroutines running in [`repeatOnLifecycle(RESUMED)`](https://developer.android.com/reference/kotlin/androidx/lifecycle/package-summary#(androidx.lifecycle.LifecycleOwner).repeatOnLifecycle(androidx.lifecycle.Lif - Network accessline 165
[`repeatOnLifecycle(RESUMED)`](https://developer.android.com/reference/kotlin/androidx/lifecycle/package-summary#(androidx.lifecycle.LifecycleOwner).repeatOnLifecycle(androidx.lifecycle.Lifecycle.State,kotlin.coroutines.SuspendFunction1))), - Network accessline 165
[`repeatOnLifecycle(RESUMED)`](https://developer.android.com/reference/kotlin/androidx/lifecycle/package-summary#(androidx.lifecycle.LifecycleOwner).repeatOnLifecycle(androidx.lifecycle.Lifecycle.State,kotlin.coroutines.SuspendFunction1))), - Network accessline 195
To learn more about system resources, see [Resources in Compose](https://developer.android.com/develop/ui/compose/resources). - Network accessline 195
To learn more about system resources, see [Resources in Compose](https://developer.android.com/develop/ui/compose/resources). - Network accessline 199
[`CompositionLocal`](https://developer.android.com/reference/kotlin/androidx/compose/runtime/CompositionLocal) - Network accessline 199
[`CompositionLocal`](https://developer.android.com/reference/kotlin/androidx/compose/runtime/CompositionLocal) - Network accessline 206
Compose such as `Context`, `Configuration` or the `View` in which the Compose code is hosted with the corresponding [`LocalContext`](https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/package-summary#LocalContext()) - Network accessline 206
Compose such as `Context`, `Configuration` or the `View` in which the Compose code is hosted with the corresponding [`LocalContext`](https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/package-summary#LocalContext()) - Network accessline 207
code is hosted with the corresponding [`LocalContext`](https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/package-summary#LocalContext()), [`LocalConfiguration`](https://developer.android.com/reference/kotlin/androi - Network accessline 207
code is hosted with the corresponding [`LocalContext`](https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/package-summary#LocalContext()), [`LocalConfiguration`](https://developer.android.com/reference/kotlin/androi - Network accessline 208
[`LocalContext`](https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/package-summary#LocalContext()), - Network accessline 208
[`LocalContext`](https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/package-summary#LocalContext()), - Network accessline 209
[`LocalConfiguration`](https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/package-summary#LocalConfiguration()), - Network accessline 209
[`LocalConfiguration`](https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/package-summary#LocalConfiguration()), - Network accessline 210
or [`LocalView`](https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/package-summary#LocalView()). Note that `CompositionLocal` classes are prefixed with `Local` for better - Network accessline 210
or [`LocalView`](https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/package-summary#LocalView()). Note that `CompositionLocal` classes are prefixed with `Local` for better - Network accessline 211
[`LocalView`](https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/package-summary#LocalView()). - Network accessline 211
[`LocalView`](https://developer.android.com/reference/kotlin/androidx/compose/ui/platform/package-summary#LocalView()). - Network accessline 236
To showcase `CompositionLocal` and [side effects](https://developer.android.com/develop/ui/compose/side-effects), if a - Network accessline 236
To showcase `CompositionLocal` and [side effects](https://developer.android.com/develop/ui/compose/side-effects), if a - Network accessline 237
effects](https://developer.android.com/develop/ui/compose/side-effects), if a - Network accessline 237
effects](https://developer.android.com/develop/ui/compose/side-effects), if a - Network accessline 238
[`BroadcastReceiver`](https://developer.android.com/guide/components/broadcasts) needs to be registered from - Network accessline 238
[`BroadcastReceiver`](https://developer.android.com/guide/components/broadcasts) needs to be registered from - Network accessline 290
is to follow the general Compose guideline, *data flows down, events flow up* (discussed at more length in [Thinking in Compose](https://developer.android.com/develop/ui/compose/mental-model)). For example, this composable - Network accessline 290
is to follow the general Compose guideline, *data flows down, events flow up* (discussed at more length in [Thinking in Compose](https://developer.android.com/develop/ui/compose/mental-model)). For example, this composable - Network accessline 291
*data flows down, events flow up* (discussed at more length in [Thinking in Compose](https://developer.android.com/develop/ui/compose/mental-model)). For example, this composable launches a different activity: - Network accessline 291
*data flows down, events flow up* (discussed at more length in [Thinking in Compose](https://developer.android.com/develop/ui/compose/mental-model)). For example, this composable launches a different activity: - Network accessline 292
in Compose](https://developer.android.com/develop/ui/compose/mental-model)). For example, this composable - Network accessline 292
in Compose](https://developer.android.com/develop/ui/compose/mental-model)). For example, this composable
jetpack-compose/migration/migrate-xml-views-to-jetpack-compose/references/android/develop/ui/compose/setup-compose-dependencies-and-compiler.md
- Network accessline 4
> [!NOTE] > **Note:** The Compose Compiler Gradle Plugin is only available from Kotlin 2.0+. For migration instructions, see ["Jetpack Compose compiler moving to the Kotlin > repository"](https://android-developers.googleblog.com/2024/04/je - Network accessline 4
> [!NOTE] > **Note:** The Compose Compiler Gradle Plugin is only available from Kotlin 2.0+. For migration instructions, see ["Jetpack Compose compiler moving to the Kotlin > repository"](https://android-developers.googleblog.com/2024/04/je - Network accessline 6
> repository"](https://android-developers.googleblog.com/2024/04/jetpack-compose-compiler-moving-to-kotlin-repository.html). - Network accessline 6
> repository"](https://android-developers.googleblog.com/2024/04/jetpack-compose-compiler-moving-to-kotlin-repository.html). - Network accessline 73
For the full list of available options, see the [documentation](https://www.jetbrains.com/help/kotlin-multiplatform-dev/compose-compiler.html#compose-compiler-options-dsl). - Network accessline 73
For the full list of available options, see the [documentation](https://www.jetbrains.com/help/kotlin-multiplatform-dev/compose-compiler.html#compose-compiler-options-dsl). - Network accessline 79
Set the `compose` flag to `true` inside the Android [`BuildFeatures`](https://developer.android.com/reference/tools/gradle-api/7.0/com/android/build/api/dsl/BuildFeatures) to - Network accessline 79
Set the `compose` flag to `true` inside the Android [`BuildFeatures`](https://developer.android.com/reference/tools/gradle-api/7.0/com/android/build/api/dsl/BuildFeatures) to - Network accessline 80
enable [Compose functionality](https://developer.android.com/develop/ui/compose/tooling) in Android Studio. - Network accessline 80
enable [Compose functionality](https://developer.android.com/develop/ui/compose/tooling) in Android Studio. - Network accessline 180
> [!NOTE] > **Note:** Jetpack Compose is shipped using a Bill of Materials (BOM), to keep the versions of all library groups in sync. Read more about it in the [Bill of > Materials page](https://developer.android.com/develop/ui/compose/bom/ - Network accessline 180
> [!NOTE] > **Note:** Jetpack Compose is shipped using a Bill of Materials (BOM), to keep the versions of all library groups in sync. Read more about it in the [Bill of > Materials page](https://developer.android.com/develop/ui/compose/bom/ - Network accessline 182
> Materials page](https://developer.android.com/develop/ui/compose/bom/bom). - Network accessline 182
> Materials page](https://developer.android.com/develop/ui/compose/bom/bom). - Network accessline 196
To check which version of AGP is supported for different API levels, see the [Android Gradle plugin API level support](https://developer.android.com/build/releases/about-agp#api-level-support) documentation. - Network accessline 196
To check which version of AGP is supported for different API levels, see the [Android Gradle plugin API level support](https://developer.android.com/build/releases/about-agp#api-level-support) documentation. - Network accessline 197
[Android Gradle plugin API level support](https://developer.android.com/build/releases/about-agp#api-level-support) documentation. - Network accessline 197
[Android Gradle plugin API level support](https://developer.android.com/build/releases/about-agp#api-level-support) documentation.
media/media3-cast-integration/SKILL.md
- Network accessline 36
- Legacy [Google Cast SDK](https://developers.google.com/cast) is in maintenance mode. - Network accessline 36
- Legacy [Google Cast SDK](https://developers.google.com/cast) is in maintenance mode. - Network accessline 155
- See the "Add a MediaRouteButton Composable to the Player" section in [Getting started with CastPlayer](references/android/media/media3/cast/create-castplayer.md) for Compose integration guidelines. - Use the [`MediaRouteButton` composable - Network accessline 155
- See the "Add a MediaRouteButton Composable to the Player" section in [Getting started with CastPlayer](references/android/media/media3/cast/create-castplayer.md) for Compose integration guidelines. - Use the [`MediaRouteButton` composable - Network accessline 156
- Use the [`MediaRouteButton` composable](https://developer.android.com/reference/kotlin/androidx/media3/cast/MediaRouteButton.composable) from `androidx.media3.cast` package. - Network accessline 156
- Use the [`MediaRouteButton` composable](https://developer.android.com/reference/kotlin/androidx/media3/cast/MediaRouteButton.composable) from `androidx.media3.cast` package. - Network accessline 158
- Place `MediaRouteButton` in an area next to playback controls. Don't hide it behind system UI. - Don't use `PlayerSurface` for custom player UI. Use the Material3 [`Player` composable](https://developer.android.com/reference/kotlin/andr - Network accessline 158
- Place `MediaRouteButton` in an area next to playback controls. Don't hide it behind system UI. - Don't use `PlayerSurface` for custom player UI. Use the Material3 [`Player` composable](https://developer.android.com/reference/kotlin/andr - Network accessline 159
- Don't use `PlayerSurface` for custom player UI. Use the Material3 [`Player` composable](https://developer.android.com/reference/kotlin/androidx/media3/ui/compose/material3/Player.composable). - Force recomposition on playback location s - Network accessline 159
- Don't use `PlayerSurface` for custom player UI. Use the Material3 [`Player` composable](https://developer.android.com/reference/kotlin/androidx/media3/ui/compose/material3/Player.composable). - Force recomposition on playback location s - Network accessline 160
composable](https://developer.android.com/reference/kotlin/androidx/media3/ui/compose/material3/Player.composable). - Network accessline 160
composable](https://developer.android.com/reference/kotlin/androidx/media3/ui/compose/material3/Player.composable). - Network accessline 218
- Don't use `AndroidView` to wrap the legacy `PlayerView`. - Implement Material3 [`Player` composable](https://developer.android.com/reference/kotlin/androidx/media3/ui/compose/material3/Player.composable) and [`MediaRouteButton` composab - Network accessline 218
- Don't use `AndroidView` to wrap the legacy `PlayerView`. - Implement Material3 [`Player` composable](https://developer.android.com/reference/kotlin/androidx/media3/ui/compose/material3/Player.composable) and [`MediaRouteButton` composab - Network accessline 219
- Implement Material3 [`Player` composable](https://developer.android.com/reference/kotlin/androidx/media3/ui/compose/material3/Player.composable) and [`MediaRouteButton` composable](https://developer.android.com/reference/kotlin/androidx/m - Network accessline 219
- Implement Material3 [`Player` composable](https://developer.android.com/reference/kotlin/androidx/media3/ui/compose/material3/Player.composable) and [`MediaRouteButton` composable](https://developer.android.com/reference/kotlin/androidx/m
media/media3-cast-integration/references/android/media/media3/cast/create-castplayer.md
- Network accessline 1
The [`CastPlayer`](https://developer.android.com/reference/androidx/media3/cast/CastPlayer) is a Jetpack Media3 [Player](https://developer.android.com/reference/kotlin/androidx/media3/common/Player) implementation that supports - Network accessline 1
The [`CastPlayer`](https://developer.android.com/reference/androidx/media3/cast/CastPlayer) is a Jetpack Media3 [Player](https://developer.android.com/reference/kotlin/androidx/media3/common/Player) implementation that supports - Network accessline 2
both local playback and casting to a remote Cast-enabled device. [`CastPlayer`](https://developer.android.com/reference/androidx/media3/cast/CastPlayer) - Network accessline 2
both local playback and casting to a remote Cast-enabled device. [`CastPlayer`](https://developer.android.com/reference/androidx/media3/cast/CastPlayer) - Network accessline 3
simplifies adding cast functionality to your app and provides rich features to seamlessly switch between local and remote playback. This guide shows you how to integrate [`CastPlayer`](https://developer.android.com/reference/androidx/media3 - Network accessline 3
simplifies adding cast functionality to your app and provides rich features to seamlessly switch between local and remote playback. This guide shows you how to integrate [`CastPlayer`](https://developer.android.com/reference/androidx/media3 - Network accessline 5
integrate [`CastPlayer`](https://developer.android.com/reference/androidx/media3/cast/CastPlayer) into your media app. - Network accessline 5
integrate [`CastPlayer`](https://developer.android.com/reference/androidx/media3/cast/CastPlayer) into your media app. - Network accessline 7
To integrate Cast with other platforms, see the [Cast SDK](https://developers.google.com/cast/docs/developers). - Network accessline 7
To integrate Cast with other platforms, see the [Cast SDK](https://developers.google.com/cast/docs/developers). - Network accessline 11
To test `CastPlayer`, you need a [Cast-enabled device](https://store.google.com/gb/category/connected_home?hl=en-GB). Choices include Android - Network accessline 11
To test `CastPlayer`, you need a [Cast-enabled device](https://store.google.com/gb/category/connected_home?hl=en-GB). Choices include Android - Network accessline 37
To configure the [`CastPlayer`](https://developer.android.com/reference/androidx/media3/cast/CastPlayer), update your `AndroidManifest.xml` file with an - Network accessline 37
To configure the [`CastPlayer`](https://developer.android.com/reference/androidx/media3/cast/CastPlayer), update your `AndroidManifest.xml` file with an - Network accessline 42
The [`CastPlayer`](https://developer.android.com/reference/androidx/media3/cast/CastPlayer) requires an options provider to configure its behavior. For a - Network accessline 42
The [`CastPlayer`](https://developer.android.com/reference/androidx/media3/cast/CastPlayer) requires an options provider to configure its behavior. For a - Network accessline 43
basic setup, you can use the [`DefaultCastOptionsProvider`](https://developer.android.com/reference/androidx/media3/cast/DefaultCastOptionsProvider) by adding it to your - Network accessline 43
basic setup, you can use the [`DefaultCastOptionsProvider`](https://developer.android.com/reference/androidx/media3/cast/DefaultCastOptionsProvider) by adding it to your - Network accessline 55
To customize the configuration, implement your own custom `OptionsProvider`. See the [CastOptions](https://developer.android.com/media/media3/cast/customize-castoptions) guide to learn how. - Network accessline 55
To customize the configuration, implement your own custom `OptionsProvider`. See the [CastOptions](https://developer.android.com/media/media3/cast/customize-castoptions) guide to learn how. - Network accessline 56
the [CastOptions](https://developer.android.com/media/media3/cast/customize-castoptions) guide to learn how. - Network accessline 56
the [CastOptions](https://developer.android.com/media/media3/cast/customize-castoptions) guide to learn how. - Network accessline 61
discover Cast-enabled devices on the network and reroute media without opening the app activity. For example, a user can change the device playing your app's media from the [media notification](https://developer.android.com/media/implement/ - Network accessline 61
discover Cast-enabled devices on the network and reroute media without opening the app activity. For example, a user can change the device playing your app's media from the [media notification](https://developer.android.com/media/implement/ - Network accessline 63
media from the [media notification](https://developer.android.com/media/implement/surfaces/mobile). - Network accessline 63
media from the [media notification](https://developer.android.com/media/implement/surfaces/mobile). - Network accessline 75
the system media notification. For this reason, you should create your `ExoPlayer` (for local playback) and `CastPlayer` (for remote playback) instances in a service, such as [MediaSessionService](https://developer.android.com/media/media3/ - Network accessline 75
the system media notification. For this reason, you should create your `ExoPlayer` (for local playback) and `CastPlayer` (for remote playback) instances in a service, such as [MediaSessionService](https://developer.android.com/media/media3/ - Network accessline 76
`ExoPlayer` (for local playback) and `CastPlayer` (for remote playback) instances in a service, such as [MediaSessionService](https://developer.android.com/media/media3/session/background-playback#service-lifecycle) or [MediaLibraryService] - Network accessline 76
`ExoPlayer` (for local playback) and `CastPlayer` (for remote playback) instances in a service, such as [MediaSessionService](https://developer.android.com/media/media3/session/background-playback#service-lifecycle) or [MediaLibraryService] - Network accessline 77
instances in a service, such as [MediaSessionService](https://developer.android.com/media/media3/session/background-playback#service-lifecycle) or [MediaLibraryService](https://developer.android.com/guide/topics/media/session/medialibraryse - Network accessline 77
instances in a service, such as [MediaSessionService](https://developer.android.com/media/media3/session/background-playback#service-lifecycle) or [MediaLibraryService](https://developer.android.com/guide/topics/media/session/medialibraryse - Network accessline 78
First, create your `ExoPlayer` instance and then when building your [`CastPlayer`](https://developer.android.com/reference/androidx/media3/cast/CastPlayer) instance, set `ExoPlayer` as the local player instance. You can then switch media pl - Network accessline 78
First, create your `ExoPlayer` instance and then when building your [`CastPlayer`](https://developer.android.com/reference/androidx/media3/cast/CastPlayer) instance, set `ExoPlayer` as the local player instance. You can then switch media pl - Network accessline 79
[`CastPlayer`](https://developer.android.com/reference/androidx/media3/cast/CastPlayer) instance, set `ExoPlayer` as the local player instance. You can - Network accessline 79
[`CastPlayer`](https://developer.android.com/reference/androidx/media3/cast/CastPlayer) instance, set `ExoPlayer` as the local player instance. You can - Network accessline 82
Switcher** feature to handle player transfers when the output route changes from local to remote or from remote to local.  Figure 1: (a) Device chip on Media notification (b) Cast-enabled devices shown on tapping the - Network accessline 84
 Figure 1: (a) Device chip on Media notification (b) Cast-enabled devices shown on tapping the - Network accessline 122
Add a [`MediaRouteButton`](https://developer.android.com/reference/androidx/mediarouter/app/MediaRouteButton) to your app's UI. Tapping the [`MediaRouteButton`](https://developer.android.com/reference/androidx/mediarouter/app/MediaRouteButt - Network accessline 122
Add a [`MediaRouteButton`](https://developer.android.com/reference/androidx/mediarouter/app/MediaRouteButton) to your app's UI. Tapping the [`MediaRouteButton`](https://developer.android.com/reference/androidx/mediarouter/app/MediaRouteButt - Network accessline 131
There are four ways to add the [`MediaRouteButton`](https://developer.android.com/reference/androidx/mediarouter/app/MediaRouteButton) to your activity's UI. The - Network accessline 131
There are four ways to add the [`MediaRouteButton`](https://developer.android.com/reference/androidx/mediarouter/app/MediaRouteButton) to your activity's UI. The - Network accessline 140
 Figure 2: (a) MediaRouteButton in menu bar, (b) as a View, (c) in PlayerView, and (d) Dialog of Cast-enabled devi - Network accessline 140
 Figure 2: (a) MediaRouteButton in menu bar, (b) as a View, (c) in PlayerView, and (d) Dialog of Cast-enabled devi - Network accessline 142
> [!IMPORTANT] > **Important:** To use the [`MediaRouteButton`](https://developer.android.com/reference/androidx/mediarouter/app/MediaRouteButton) in Views UI, the containing activity must be a subclass of `FragmentActivity`. - Network accessline 142
> [!IMPORTANT] > **Important:** To use the [`MediaRouteButton`](https://developer.android.com/reference/androidx/mediarouter/app/MediaRouteButton) in Views UI, the containing activity must be a subclass of `FragmentActivity`. - Network accessline 143
> **Important:** To use the [`MediaRouteButton`](https://developer.android.com/reference/androidx/mediarouter/app/MediaRouteButton) in Views UI, the containing activity must be a subclass of `FragmentActivity`. - Network accessline 143
> **Important:** To use the [`MediaRouteButton`](https://developer.android.com/reference/androidx/mediarouter/app/MediaRouteButton) in Views UI, the containing activity must be a subclass of `FragmentActivity`. - Network accessline 145
> [!TIP] > **Tip:** These screenshots are from the [demo-session](https://github.com/androidx/media/tree/release/demos/session) apps in Media3. You can checkout the app to see an example of `CastPlayer` implementation. - Network accessline 145
> [!TIP] > **Tip:** These screenshots are from the [demo-session](https://github.com/androidx/media/tree/release/demos/session) apps in Media3. You can checkout the app to see an example of `CastPlayer` implementation. - Network accessline 146
> **Tip:** These screenshots are from the [demo-session](https://github.com/androidx/media/tree/release/demos/session) apps in Media3. You can checkout the app to see an example of `CastPlayer` implementation. - Network accessline 146
> **Tip:** These screenshots are from the [demo-session](https://github.com/androidx/media/tree/release/demos/session) apps in Media3. You can checkout the app to see an example of `CastPlayer` implementation. - Network accessline 150
You can add the [`MediaRouteButton`](https://developer.android.com/reference/androidx/mediarouter/app/MediaRouteButton) Composable to your player's UI. For more - Network accessline 150
You can add the [`MediaRouteButton`](https://developer.android.com/reference/androidx/mediarouter/app/MediaRouteButton) Composable to your player's UI. For more - Network accessline 151
information, see the [Compose](https://developer.android.com/media/media3/ui/compose) guide. - Network accessline 151
information, see the [Compose](https://developer.android.com/media/media3/ui/compose) guide. - Network accessline 183
You can add the [`MediaRouteButton`](https://developer.android.com/reference/androidx/mediarouter/app/MediaRouteButton) directly within the [PlayerView](https://developer.android.com/guide/topics/media/ui/playerview)'s UI - Network accessline 183
You can add the [`MediaRouteButton`](https://developer.android.com/reference/androidx/mediarouter/app/MediaRouteButton) directly within the [PlayerView](https://developer.android.com/guide/topics/media/ui/playerview)'s UI - Network accessline 184
controls. After setting the [MediaController](https://developer.android.com/guide/topics/media/session/mediacontroller) as the player for your - Network accessline 184
controls. After setting the [MediaController](https://developer.android.com/guide/topics/media/session/mediacontroller) as the player for your - Network accessline 216
To set up a [`MediaRouteButton`](https://developer.android.com/reference/androidx/mediarouter/app/MediaRouteButton) in the app bar menu, create an XML menu and - Network accessline 216
To set up a [`MediaRouteButton`](https://developer.android.com/reference/androidx/mediarouter/app/MediaRouteButton) in the app bar menu, create an XML menu and - Network accessline 219
<menu xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 219
<menu xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 220
xmlns:app="http://schemas.android.com/apk/res-auto"> - Network accessline 220
xmlns:app="http://schemas.android.com/apk/res-auto"> - Network accessline 286
You can set up a [`MediaRouteButton`](https://developer.android.com/reference/androidx/mediarouter/app/MediaRouteButton) in your activity layout.xml. - Network accessline 286
You can set up a [`MediaRouteButton`](https://developer.android.com/reference/androidx/mediarouter/app/MediaRouteButton) in your activity layout.xml. - Network accessline 294
To complete the setup for the [`MediaRouteButton`](https://developer.android.com/reference/androidx/mediarouter/app/MediaRouteButton), use the Media3 Cast - Network accessline 294
To complete the setup for the [`MediaRouteButton`](https://developer.android.com/reference/androidx/mediarouter/app/MediaRouteButton), use the Media3 Cast - Network accessline 389
For more information about listening and responding to playback events, see the [player events](https://developer.android.com/media/media3/exoplayer/listening-to-player-events) guide. - Network accessline 389
For more information about listening and responding to playback events, see the [player events](https://developer.android.com/media/media3/exoplayer/listening-to-player-events) guide. - Network accessline 390
[player events](https://developer.android.com/media/media3/exoplayer/listening-to-player-events) guide. - Network accessline 390
[player events](https://developer.android.com/media/media3/exoplayer/listening-to-player-events) guide.
media/media3-cast-integration/references/android/media/media3/cast/customize-castoptions.md
- Network accessline 1
To configure your app's Cast session, provide an [`OptionsProvider`](https://developers.google.com/android/reference/com/google/android/gms/cast/framework/OptionsProvider). Use the - Network accessline 1
To configure your app's Cast session, provide an [`OptionsProvider`](https://developers.google.com/android/reference/com/google/android/gms/cast/framework/OptionsProvider). Use the - Network accessline 2
[`CastOptions`](https://developers.google.com/android/reference/com/google/android/gms/cast/framework/CastOptions) object built by the provider to set the receiver application ID, - Network accessline 2
[`CastOptions`](https://developers.google.com/android/reference/com/google/android/gms/cast/framework/CastOptions) object built by the provider to set the receiver application ID, - Network accessline 43
For more information, see [CastOptions.Builder](https://developers.google.com/android/reference/com/google/android/gms/cast/framework/CastOptions.Builder). - Network accessline 43
For more information, see [CastOptions.Builder](https://developers.google.com/android/reference/com/google/android/gms/cast/framework/CastOptions.Builder).
media/media3-cast-integration/references/android/media/media3/cast/index.md
- Network accessline 1
The Media3 [`cast`](https://developer.android.com/reference/androidx/media3/cast/package-summary) module extends your media playback experience to - Network accessline 1
The Media3 [`cast`](https://developer.android.com/reference/androidx/media3/cast/package-summary) module extends your media playback experience to - Network accessline 2
Cast devices. It lets your app cast content to [compatible devices](https://developer.android.com/media/media3/cast/create-castplayer#get-device), - Network accessline 2
Cast devices. It lets your app cast content to [compatible devices](https://developer.android.com/media/media3/cast/create-castplayer#get-device), - Network accessline 3
such as TVs and speakers. The [sender](https://developers.google.com/cast/glossary#sender) app acts as a remote controller for media - Network accessline 3
such as TVs and speakers. The [sender](https://developers.google.com/cast/glossary#sender) app acts as a remote controller for media - Network accessline 4
playback on the [receiver](https://developers.google.com/cast/glossary#receiver) device. This module integrates with the [Jetpack - Network accessline 4
playback on the [receiver](https://developers.google.com/cast/glossary#receiver) device. This module integrates with the [Jetpack - Network accessline 5
Media3](https://developer.android.com/guide/topics/media/media3) library, so you can use the same `Player` interface and UI - Network accessline 5
Media3](https://developer.android.com/guide/topics/media/media3) library, so you can use the same `Player` interface and UI - Network accessline 14
[Go to Media3 CastPlayer](https://developer.android.com/media/media3/cast/create-castplayer) - Network accessline 14
[Go to Media3 CastPlayer](https://developer.android.com/media/media3/cast/create-castplayer) - Network accessline 21
[Explore Cast SDK](https://developers.google.com/cast/docs/developers) - Network accessline 21
[Explore Cast SDK](https://developers.google.com/cast/docs/developers)
navigation/navigation-3/references/android/guide/navigation/navigation-3/index.md
- Network accessline 3
[View on GitHub](https://github.com/android/skills/tree/main/navigation/navigation-3) - Network accessline 3
[View on GitHub](https://github.com/android/skills/tree/main/navigation/navigation-3) - Network accessline 7
Use an Android skill to help you build using Jetpack Navigation 3. To install the skill from the [Android CLI](https://developer.android.com/tools/agents/android-cli), run: - Network accessline 7
Use an Android skill to help you build using Jetpack Navigation 3. To install the skill from the [Android CLI](https://developer.android.com/tools/agents/android-cli), run: - Network accessline 18
- Conventions for modeling a back stack, where each entry on the back stack represents content that the user has navigated to - A UI that automatically updates with back stack changes (including [animations](https://developer.android.com/gu - Network accessline 18
- Conventions for modeling a back stack, where each entry on the back stack represents content that the user has navigated to - A UI that automatically updates with back stack changes (including [animations](https://developer.android.com/gu - Network accessline 19
- A UI that automatically updates with back stack changes (including [animations](https://developer.android.com/guide/navigation/navigation-3/animate-destinations)) - Network accessline 19
- A UI that automatically updates with back stack changes (including [animations](https://developer.android.com/guide/navigation/navigation-3/animate-destinations)) - Network accessline 20
- A scope for items in the back stack, allowing state to be retained while an item is in the back stack - An adaptive layout system that allows multiple destinations to be displayed at the same time, enabling seamless switching between thos - Network accessline 20
- A scope for items in the back stack, allowing state to be retained while an item is in the back stack - An adaptive layout system that allows multiple destinations to be displayed at the same time, enabling seamless switching between thos - Network accessline 21
- An adaptive layout system that allows multiple destinations to be displayed at the same time, enabling seamless switching between those layouts - A mechanism for content to communicate with its parent layout ([metadata](https://developer. - Network accessline 21
- An adaptive layout system that allows multiple destinations to be displayed at the same time, enabling seamless switching between those layouts - A mechanism for content to communicate with its parent layout ([metadata](https://developer. - Network accessline 22
- A mechanism for content to communicate with its parent layout ([metadata](https://developer.android.com/guide/navigation/navigation-3/metadata)) - Network accessline 22
- A mechanism for content to communicate with its parent layout ([metadata](https://developer.android.com/guide/navigation/navigation-3/metadata)) - Network accessline 23
- Inter-destination communication to [return results](https://developer.android.com/guide/navigation/navigation-3/return-results) between screens - Network accessline 23
- Inter-destination communication to [return results](https://developer.android.com/guide/navigation/navigation-3/return-results) between screens - Network accessline 27
1. Define the content that users can navigate to in your app, each with a unique key, and add a function to resolve that key to the content. See [Resolve keys to content](https://developer.android.com/guide/navigation/navigation-3/basics - Network accessline 27
1. Define the content that users can navigate to in your app, each with a unique key, and add a function to resolve that key to the content. See [Resolve keys to content](https://developer.android.com/guide/navigation/navigation-3/basics - Network accessline 28
to content](https://developer.android.com/guide/navigation/navigation-3/basics#resolve-keys). - Network accessline 28
to content](https://developer.android.com/guide/navigation/navigation-3/basics#resolve-keys). - Network accessline 29
2. Create a back stack that keys are pushed onto and removed as users navigate your app. See [Create a back stack](https://developer.android.com/guide/navigation/navigation-3/basics#create-back). - Network accessline 29
2. Create a back stack that keys are pushed onto and removed as users navigate your app. See [Create a back stack](https://developer.android.com/guide/navigation/navigation-3/basics#create-back). - Network accessline 30
3. Use a [`NavDisplay`](https://developer.android.com/reference/kotlin/androidx/navigation3/ui/NavDisplay.composable) to display your app's back stack. Whenever the back stack changes, it updates the UI to display relevant content. See [Dis - Network accessline 30
3. Use a [`NavDisplay`](https://developer.android.com/reference/kotlin/androidx/navigation3/ui/NavDisplay.composable) to display your app's back stack. Whenever the back stack changes, it updates the UI to display relevant content. See [Dis - Network accessline 31
the back stack](https://developer.android.com/guide/navigation/navigation-3/basics#display-back). - Network accessline 31
the back stack](https://developer.android.com/guide/navigation/navigation-3/basics#display-back). - Network accessline 32
4. Modify `NavDisplay`'s [scene strategies](https://developer.android.com/guide/navigation/navigation-3/custom-layouts) as needed to support adaptive layouts and different platforms. - Network accessline 32
4. Modify `NavDisplay`'s [scene strategies](https://developer.android.com/guide/navigation/navigation-3/custom-layouts) as needed to support adaptive layouts and different platforms. - Network accessline 33
5. [Support deep links](https://developer.android.com/guide/navigation/navigation-3/deep-links) to navigate directly to destinations. - Network accessline 33
5. [Support deep links](https://developer.android.com/guide/navigation/navigation-3/deep-links) to navigate directly to destinations. - Network accessline 35
You can see the [full source code](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:navigation3/) for Navigation 3 on AOSP. - Network accessline 35
You can see the [full source code](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:navigation3/) for Navigation 3 on AOSP. - Network accessline 46
Read more about Navigation 3's principles and API design choices in the [announcement blog post](https://android-developers.googleblog.com/2025/05/announcing-jetpack-navigation-3-for-compose.html). - Network accessline 46
Read more about Navigation 3's principles and API design choices in the [announcement blog post](https://android-developers.googleblog.com/2025/05/announcing-jetpack-navigation-3-for-compose.html). - Network accessline 47
[announcement blog post](https://android-developers.googleblog.com/2025/05/announcing-jetpack-navigation-3-for-compose.html). - Network accessline 47
[announcement blog post](https://android-developers.googleblog.com/2025/05/announcing-jetpack-navigation-3-for-compose.html). - Network accessline 51
The [recipes repository](https://github.com/android/nav3-recipes) contains examples of how to use the - Network accessline 51
The [recipes repository](https://github.com/android/nav3-recipes) contains examples of how to use the
navigation/navigation-3/references/android/guide/navigation/navigation-3/migration-guide.md
- Network accessline 3
[View on GitHub](https://github.com/android/skills/tree/main/navigation/navigation-3) - Network accessline 3
[View on GitHub](https://github.com/android/skills/tree/main/navigation/navigation-3) - Network accessline 7
Use an Android skill to help you build and migrate to Jetpack Navigation 3. To install the skill from the [Android CLI](https://developer.android.com/tools/agents/android-cli), run: - Network accessline 7
Use an Android skill to help you build and migrate to Jetpack Navigation 3. To install the skill from the [Android CLI](https://developer.android.com/tools/agents/android-cli), run: - Network accessline 13
To migrate your app from [Navigation 2](https://developer.android.com/guide/navigation) to Navigation 3, follow these steps: - Network accessline 13
To migrate your app from [Navigation 2](https://developer.android.com/guide/navigation) to Navigation 3, follow these steps: - Network accessline 31
- You must use a `compileSdk` of 36 or later. - You should be familiar with [navigation terminology](https://developer.android.com/guide/navigation). - Network accessline 31
- You must use a `compileSdk` of 36 or later. - You should be familiar with [navigation terminology](https://developer.android.com/guide/navigation). - Network accessline 32
- You should be familiar with [navigation terminology](https://developer.android.com/guide/navigation). - Network accessline 32
- You should be familiar with [navigation terminology](https://developer.android.com/guide/navigation). - Network accessline 33
- Destinations are composable functions. Navigation 3 is designed exclusively for Compose. To use Fragments and Views in Compose, see [Using Views in Compose](https://developer.android.com/develop/ui/compose/migrate/interoperability-apis/ - Network accessline 33
- Destinations are composable functions. Navigation 3 is designed exclusively for Compose. To use Fragments and Views in Compose, see [Using Views in Compose](https://developer.android.com/develop/ui/compose/migrate/interoperability-apis/ - Network accessline 34
Compose](https://developer.android.com/develop/ui/compose/migrate/interoperability-apis/views-in-compose). - Network accessline 34
Compose](https://developer.android.com/develop/ui/compose/migrate/interoperability-apis/views-in-compose). - Network accessline 35
- Routes are strongly typed. If you use string-based routes, [migrate to type-safe routes](https://medium.com/androiddevelopers/type-safe-navigation-for-compose-105325a97657) first ([example](https://github.com/android/nowinandroid/pull/1 - Network accessline 35
- Routes are strongly typed. If you use string-based routes, [migrate to type-safe routes](https://medium.com/androiddevelopers/type-safe-navigation-for-compose-105325a97657) first ([example](https://github.com/android/nowinandroid/pull/1 - Network accessline 36
type-safe routes](https://medium.com/androiddevelopers/type-safe-navigation-for-compose-105325a97657) first ([example](https://github.com/android/nowinandroid/pull/1413)). - Network accessline 36
type-safe routes](https://medium.com/androiddevelopers/type-safe-navigation-for-compose-105325a97657) first ([example](https://github.com/android/nowinandroid/pull/1413)). - Network accessline 61
The [code recipes repository](https://github.com/android/nav3-recipes) demonstrates more nuanced use - Network accessline 61
The [code recipes repository](https://github.com/android/nav3-recipes) demonstrates more nuanced use - Network accessline 64
- [Bottom sheets](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/bottomsheet) (instructions are provided in this guide) - Network accessline 64
- [Bottom sheets](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/bottomsheet) (instructions are provided in this guide) - Network accessline 65
- [Modularized navigation code and injected destinations](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/modular/hilt) - Network accessline 65
- [Modularized navigation code and injected destinations](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/modular/hilt) - Network accessline 66
- [Using and passing arguments to `ViewModel`](https://github.com/android/nav3-recipes?tab=readme-ov-file#passing-navigation-arguments-to-viewmodels) - Network accessline 66
- [Using and passing arguments to `ViewModel`](https://github.com/android/nav3-recipes?tab=readme-ov-file#passing-navigation-arguments-to-viewmodels) - Network accessline 67
- [Returning results from a screen](https://github.com/android/nav3-recipes?tab=readme-ov-file#returning-results) - Network accessline 67
- [Returning results from a screen](https://github.com/android/nav3-recipes?tab=readme-ov-file#returning-results) - Network accessline 83
- More than one level of nested navigation - Shared destinations: screens that can move between different back stacks - [Custom destination types](https://developer.android.com/guide/navigation/design/kotlin-dsl#custom) - Network accessline 83
- More than one level of nested navigation - Shared destinations: screens that can move between different back stacks - [Custom destination types](https://developer.android.com/guide/navigation/design/kotlin-dsl#custom) - Network accessline 85
- [Custom destination types](https://developer.android.com/guide/navigation/design/kotlin-dsl#custom) - Network accessline 85
- [Custom destination types](https://developer.android.com/guide/navigation/design/kotlin-dsl#custom) - Network accessline 93
Use the [Get started](https://developer.android.com/guide/navigation/navigation-3/get-started) page to add the Navigation 3 dependencies to your - Network accessline 93
Use the [Get started](https://developer.android.com/guide/navigation/navigation-3/get-started) page to add the Navigation 3 dependencies to your - Network accessline 127
Update every navigation [route](https://developer.android.com/guide/navigation#types) so that it implements the `NavKey` - Network accessline 127
Update every navigation [route](https://developer.android.com/guide/navigation#types) so that it implements the `NavKey` - Network accessline 129
navigation state](https://developer.android.com/guide/navigation/navigation-3/save-state). - Network accessline 129
navigation state](https://developer.android.com/guide/navigation/navigation-3/save-state). - Network accessline 149
> [!NOTE] > **Note:** The `@Serializable` annotation is provided by the KotlinX Serialization plugin. You can add this by following [these project setup steps](https://developer.android.com/guide/navigation/navigation-3/get-started#project- - Network accessline 149
> [!NOTE] > **Note:** The `@Serializable` annotation is provided by the KotlinX Serialization plugin. You can add this by following [these project setup steps](https://developer.android.com/guide/navigation/navigation-3/get-started#project- - Network accessline 150
> **Note:** The `@Serializable` annotation is provided by the KotlinX Serialization plugin. You can add this by following [these project setup steps](https://developer.android.com/guide/navigation/navigation-3/get-started#project-setup). - Network accessline 150
> **Note:** The `@Serializable` annotation is provided by the KotlinX Serialization plugin. You can add this by following [these project setup steps](https://developer.android.com/guide/navigation/navigation-3/get-started#project-setup). - Network accessline 313
> [!IMPORTANT] > **Architecture principles:** These classes follow the principles of [Unidirectional Data Flow](https://developer.android.com/topic/architecture): - Network accessline 313
> [!IMPORTANT] > **Architecture principles:** These classes follow the principles of [Unidirectional Data Flow](https://developer.android.com/topic/architecture): - Network accessline 314
> **Architecture principles:** These classes follow the principles of [Unidirectional Data Flow](https://developer.android.com/topic/architecture): - Network accessline 314
> **Architecture principles:** These classes follow the principles of [Unidirectional Data Flow](https://developer.android.com/topic/architecture): - Network accessline 394
In Navigation 3, `NavDisplay` provides an entry-scoped `LifecycleOwner` through `LocalLifecycleOwner.current` to each destination's composable content. See [Destination lifecycle](https://developer.android.com/guide/navigation/navigation-3/ - Network accessline 394
In Navigation 3, `NavDisplay` provides an entry-scoped `LifecycleOwner` through `LocalLifecycleOwner.current` to each destination's composable content. See [Destination lifecycle](https://developer.android.com/guide/navigation/navigation-3/ - Network accessline 396
content. See [Destination lifecycle](https://developer.android.com/guide/navigation/navigation-3/basics#destination-lifecycle) for more information. - Network accessline 396
content. See [Destination lifecycle](https://developer.android.com/guide/navigation/navigation-3/basics#destination-lifecycle) for more information. - Network accessline 451
In Navigation 3, add [`rememberResultEventBusNavEntryDecorator()`](https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/result/rememberResultEventBusNavEntryDecorator.composable) to - Network accessline 451
In Navigation 3, add [`rememberResultEventBusNavEntryDecorator()`](https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/result/rememberResultEventBusNavEntryDecorator.composable) to - Network accessline 452
[`rememberResultEventBusNavEntryDecorator()`](https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/result/rememberResultEventBusNavEntryDecorator.composable) to - Network accessline 452
[`rememberResultEventBusNavEntryDecorator()`](https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/result/rememberResultEventBusNavEntryDecorator.composable) to - Network accessline 453
your `NavDisplay.entryDecorators`. In your sender destination's `entryProvider` mapping, retrieve [`LocalResultEventBus.current`](https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/result/LocalResultEventBus) and ca - Network accessline 453
your `NavDisplay.entryDecorators`. In your sender destination's `entryProvider` mapping, retrieve [`LocalResultEventBus.current`](https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/result/LocalResultEventBus) and ca - Network accessline 454
mapping, retrieve [`LocalResultEventBus.current`](https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/result/LocalResultEventBus) - Network accessline 454
mapping, retrieve [`LocalResultEventBus.current`](https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/result/LocalResultEventBus) - Network accessline 455
and call `sendResult()`. In the receiving destination, use [`ResultEffect`](https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/result/ResultEffect.composable) to forward the event to a `ViewModel` or trigger a side - Network accessline 455
and call `sendResult()`. In the receiving destination, use [`ResultEffect`](https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/result/ResultEffect.composable) to forward the event to a `ViewModel` or trigger a side - Network accessline 456
[`ResultEffect`](https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/result/ResultEffect.composable) to forward the event to a `ViewModel` or - Network accessline 456
[`ResultEffect`](https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/result/ResultEffect.composable) to forward the event to a `ViewModel` or - Network accessline 491
For state-based observation, you can call `resultBus.conflateAsState()`. For more details, see [Return results](https://developer.android.com/guide/navigation/navigation-3/return-results). - Network accessline 491
For state-based observation, you can call `resultBus.conflateAsState()`. For more details, see [Return results](https://developer.android.com/guide/navigation/navigation-3/return-results). - Network accessline 492
more details, see [Return results](https://developer.android.com/guide/navigation/navigation-3/return-results). - Network accessline 492
more details, see [Return results](https://developer.android.com/guide/navigation/navigation-3/return-results). - Network accessline 496
In Navigation 2, you [define your destinations](https://developer.android.com/guide/navigation/design#compose) - Network accessline 496
In Navigation 2, you [define your destinations](https://developer.android.com/guide/navigation/design#compose) - Network accessline 497
using the [NavGraphBuilder DSL](https://developer.android.com/guide/navigation/design/kotlin-dsl#navgraphbuilder), - Network accessline 497
using the [NavGraphBuilder DSL](https://developer.android.com/guide/navigation/design/kotlin-dsl#navgraphbuilder), - Network accessline 499
functions here as described in [Encapsulate your navigation code](https://developer.android.com/guide/navigation/design/encapsulate). - Network accessline 499
functions here as described in [Encapsulate your navigation code](https://developer.android.com/guide/navigation/design/encapsulate). - Network accessline 501
In Navigation 3, you define your destinations using an `entryProvider`. This `entryProvider` resolves a route to a [`NavEntry`](https://developer.android.com/guide/navigation/navigation-3/basics#resolve-keys). Importantly, the - Network accessline 501
In Navigation 3, you define your destinations using an `entryProvider`. This `entryProvider` resolves a route to a [`NavEntry`](https://developer.android.com/guide/navigation/navigation-3/basics#resolve-keys). Importantly, the - Network accessline 502
`entryProvider` resolves a route to a [`NavEntry`](https://developer.android.com/guide/navigation/navigation-3/basics#resolve-keys). Importantly, the - Network accessline 502
`entryProvider` resolves a route to a [`NavEntry`](https://developer.android.com/guide/navigation/navigation-3/basics#resolve-keys). Importantly, the - Network accessline 516
Create an `entryProvider` [using the DSL](https://developer.android.com/guide/navigation/navigation-3/basics#entry-provider-DSL) at the same scope as the - Network accessline 516
Create an `entryProvider` [using the DSL](https://developer.android.com/guide/navigation/navigation-3/basics#entry-provider-DSL) at the same scope as the - Network accessline 534
- `composable<T>`: Move it into `entryProvider` and rename it to `entry`, retaining the type parameter. For example, `composable<RouteA>` becomes `entry<RouteA>`. - `dialog<T>`: Do the same as `composable`, but add metadata to the entry as - Network accessline 534
- `composable<T>`: Move it into `entryProvider` and rename it to `entry`, retaining the type parameter. For example, `composable<RouteA>` becomes `entry<RouteA>`. - `dialog<T>`: Do the same as `composable`, but add metadata to the entry as - Network accessline 536
- [`bottomSheet`](https://developer.android.com/reference/kotlin/androidx/compose/material/navigation/package-summary#(androidx.navigation.NavGraphBuilder).bottomSheet(kotlin.String,kotlin.collections.List,kotlin.collections.List,kotlin.Fun - Network accessline 536
- [`bottomSheet`](https://developer.android.com/reference/kotlin/androidx/compose/material/navigation/package-summary#(androidx.navigation.NavGraphBuilder).bottomSheet(kotlin.String,kotlin.collections.List,kotlin.collections.List,kotlin.Fun - Network accessline 546
You can refactor [`NavGraphBuilder` extension functions](https://developer.android.com/guide/navigation/design/encapsulate) to - Network accessline 546
You can refactor [`NavGraphBuilder` extension functions](https://developer.android.com/guide/navigation/design/encapsulate) to - Network accessline 726
In Navigation 3, define a [`DeepLinkSerializer`](https://developer.android.com/guide/navigation/navigation-3/deep-links/uri-matcher#deep-link-serializer) to deserialize custom or - Network accessline 726
In Navigation 3, define a [`DeepLinkSerializer`](https://developer.android.com/guide/navigation/navigation-3/deep-links/uri-matcher#deep-link-serializer) to deserialize custom or - Network accessline 728
[Custom serialization with DeepLinkSerializer](https://developer.android.com/guide/navigation/navigation-3/deep-links/uri-matcher#deep-link-serializer) for details. - Network accessline 728
[Custom serialization with DeepLinkSerializer](https://developer.android.com/guide/navigation/navigation-3/deep-links/uri-matcher#deep-link-serializer) for details. - Network accessline 730
For more advanced use cases, including synthetic back stacks and custom matchers, see the [Support deep links](https://developer.android.com/guide/navigation/navigation-3/deep-links) guide. - Network accessline 730
For more advanced use cases, including synthetic back stacks and custom matchers, see the [Support deep links](https://developer.android.com/guide/navigation/navigation-3/deep-links) guide. - Network accessline 731
matchers, see the [Support deep links](https://developer.android.com/guide/navigation/navigation-3/deep-links) guide. - Network accessline 731
matchers, see the [Support deep links](https://developer.android.com/guide/navigation/navigation-3/deep-links) guide. - Network accessline 739
Congratulations! Your project is now migrated to Navigation 3. If you or your AI agent has run into any problems using this guide, [file a bug here](https://issuetracker.google.com/issues/new?component=1750212&template=2102223&title=%5BMigr - Network accessline 739
Congratulations! Your project is now migrated to Navigation 3. If you or your AI agent has run into any problems using this guide, [file a bug here](https://issuetracker.google.com/issues/new?component=1750212&template=2102223&title=%5BMigr - Network accessline 741
here](https://issuetracker.google.com/issues/new?component=1750212&template=2102223&title=%5BMigration%5D). - Network accessline 741
here](https://issuetracker.google.com/issues/new?component=1750212&template=2102223&title=%5BMigration%5D).
navigation/navigation-3/references/android/guide/navigation/navigation-3/recipes/animations.md
- Network accessline 11
It is also possible to override these animations for a specific destination by providing a different `transitionSpec` and `popTransitionSpec` to the `entry` composable. In this recipe, `ScreenC` has a custom vertical slide animation. [ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/animations) - Network accessline 12
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/animations)
navigation/navigation-3/references/android/guide/navigation/navigation-3/recipes/basic.md
- Network accessline 13
To navigate from `RouteA` to `RouteB`, we simply add a `RouteB` instance to the back stack. The `id` is passed as an argument to the `RouteB` data class. [ Explore View th - Network accessline 13
To navigate from `RouteA` to `RouteB`, we simply add a `RouteB` instance to the back stack. The `id` is passed as an argument to the `RouteB` data class. [ Explore View th - Network accessline 14
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/basic) - Network accessline 14
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/basic) - Network accessline 22
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 22
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 23
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 23
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 24
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 24
* http://www.apache.org/licenses/LICENSE-2.0
navigation/navigation-3/references/android/guide/navigation/navigation-3/recipes/basicdsl.md
- Network accessline 13
The navigation logic remains the same: to navigate from `RouteA` to `RouteB`, we add a `RouteB` instance to the back stack. [ Explore View the full recipe on GitHub.](http - Network accessline 13
The navigation logic remains the same: to navigate from `RouteA` to `RouteB`, we add a `RouteB` instance to the back stack. [ Explore View the full recipe on GitHub.](http - Network accessline 14
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/basicdsl) - Network accessline 14
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/basicdsl) - Network accessline 22
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 22
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 23
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 23
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 24
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 24
* http://www.apache.org/licenses/LICENSE-2.0
navigation/navigation-3/references/android/guide/navigation/navigation-3/recipes/basicsaveable.md
- Network accessline 11
This example uses a `when` statement within the `entryProvider` to map routes to their corresponding composables, but it could also be used with the `entryProvider` DSL. [ - Network accessline 11
This example uses a `when` statement within the `entryProvider` to map routes to their corresponding composables, but it could also be used with the `entryProvider` DSL. [ - Network accessline 12
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/basicsaveable) - Network accessline 12
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/basicsaveable) - Network accessline 20
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 20
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 21
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 21
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 22
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 22
* http://www.apache.org/licenses/LICENSE-2.0
navigation/navigation-3/references/android/guide/navigation/navigation-3/recipes/bottomsheet.md
- Network accessline 17
For more information, see the official documentation on [custom layouts](https://developer.android.com/guide/navigation/navigation-3/custom-layouts). - Network accessline 17
For more information, see the official documentation on [custom layouts](https://developer.android.com/guide/navigation/navigation-3/custom-layouts). - Network accessline 18
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/bottomsheet) - Network accessline 18
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/bottomsheet) - Network accessline 26
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 26
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 27
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 27
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 28
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 28
* http://www.apache.org/licenses/LICENSE-2.0
navigation/navigation-3/references/android/guide/navigation/navigation-3/recipes/common-ui.md
- Network accessline 30
**Note** : In this example, the `Home` route can move above the `ChatList` and `Camera` routes, meaning navigating back from `Home` doesn't necessarily leave the app. The app will exit when the user goes back from a single remaining top lev - Network accessline 30
**Note** : In this example, the `Home` route can move above the `ChatList` and `Camera` routes, meaning navigating back from `Home` doesn't necessarily leave the app. The app will exit when the user goes back from a single remaining top lev - Network accessline 31
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/commonui) - Network accessline 31
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/commonui) - Network accessline 39
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 39
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 40
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 40
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 41
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 41
* http://www.apache.org/licenses/LICENSE-2.0
navigation/navigation-3/references/android/guide/navigation/navigation-3/recipes/conditional-transitions.md
- Network accessline 16
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/conditionaltransitions) - Network accessline 16
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/conditionaltransitions)
navigation/navigation-3/references/android/guide/navigation/navigation-3/recipes/conditional.md
- Network accessline 21
This approach provides a clean way to handle conditional navigation by centralizing the logic in a custom back stack implementation. [ Explore View the full recipe on GitH - Network accessline 21
This approach provides a clean way to handle conditional navigation by centralizing the logic in a custom back stack implementation. [ Explore View the full recipe on GitH - Network accessline 22
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/conditional) - Network accessline 22
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/conditional) - Network accessline 30
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 30
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 31
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 31
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 32
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 32
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 169
// An overload of `rememberNavBackStack` that returns a subtype of `NavKey`. // See https://issuetracker.google.com/issues/463382671 for a discussion of this function - Network accessline 169
// An overload of `rememberNavBackStack` that returns a subtype of `NavKey`. // See https://issuetracker.google.com/issues/463382671 for a discussion of this function - Network accessline 170
// See https://issuetracker.google.com/issues/463382671 for a discussion of this function - Network accessline 170
// See https://issuetracker.google.com/issues/463382671 for a discussion of this function - Network accessline 187
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 187
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 188
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 188
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 189
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 189
* http://www.apache.org/licenses/LICENSE-2.0
navigation/navigation-3/references/android/guide/navigation/navigation-3/recipes/deeplinks-custommatcher.md
- Network accessline 20
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/deeplink/usecases/matcher) - Network accessline 20
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/deeplink/usecases/matcher)
navigation/navigation-3/references/android/guide/navigation/navigation-3/recipes/deeplinks-staticuri.md
- Network accessline 18
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/deeplink/handlerequests/staticuri) - Network accessline 18
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/deeplink/handlerequests/staticuri)
navigation/navigation-3/references/android/guide/navigation/navigation-3/recipes/deeplinks-syntheticbackstack.md
- Network accessline 11
"App A" is simulated by the module [syntheticbackstack](https://developer.android.com/app/src/main/java/com/example/nav3recipes/deeplink/handlerequests/syntheticbackstack), which - Network accessline 11
"App A" is simulated by the module [syntheticbackstack](https://developer.android.com/app/src/main/java/com/example/nav3recipes/deeplink/handlerequests/syntheticbackstack), which - Network accessline 15
"App B" is simulated by the module [syntheticbackstackapp](https://developer.android.com/syntheticbackstackapp/src/main/java/com/example/nav3recipes/deeplink/syntheticbackstack), which contains - Network accessline 15
"App B" is simulated by the module [syntheticbackstackapp](https://developer.android.com/syntheticbackstackapp/src/main/java/com/example/nav3recipes/deeplink/syntheticbackstack), which contains - Network accessline 28
The recipe follows the deep link guideline summarized [here](https://developer.android.com/docs/deeplink-guide#summary). - Network accessline 28
The recipe follows the deep link guideline summarized [here](https://developer.android.com/docs/deeplink-guide#summary). - Network accessline 50
The core helper functions for navigateUp and building synthetic backStack can be found [here](https://developer.android.com/syntheticbackstackapp/src/main/java/com/example/nav3recipes/deeplink/syntheticbackstack/util) - Network accessline 50
The core helper functions for navigateUp and building synthetic backStack can be found [here](https://developer.android.com/syntheticbackstackapp/src/main/java/com/example/nav3recipes/deeplink/syntheticbackstack/util) - Network accessline 51
found [here](https://developer.android.com/syntheticbackstackapp/src/main/java/com/example/nav3recipes/deeplink/syntheticbackstack/util) - Network accessline 51
found [here](https://developer.android.com/syntheticbackstackapp/src/main/java/com/example/nav3recipes/deeplink/syntheticbackstack/util) - Network accessline 55
Check out the [deep link guide](https://developer.android.com/docs/deeplink-guide) for a - Network accessline 55
Check out the [deep link guide](https://developer.android.com/docs/deeplink-guide) for a - Network accessline 57
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/deeplink/handlerequests/syntheticbac - Network accessline 57
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/deeplink/handlerequests/syntheticbac - Network accessline 80
internal const val ADVANCED_PATH_BASE = "https://www.nav3deeplink.com" - Network accessline 80
internal const val ADVANCED_PATH_BASE = "https://www.nav3deeplink.com"
navigation/navigation-3/references/android/guide/navigation/navigation-3/recipes/deeplinks-uriarguments.md
- Network accessline 40
See `MainActivity.deepLinkMatchers` for the actual url pattern of each. [ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/sr - Network accessline 40
See `MainActivity.deepLinkMatchers` for the actual url pattern of each. [ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/sr - Network accessline 41
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/deeplink/handlerequests/uriarguments - Network accessline 41
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/deeplink/handlerequests/uriarguments - Network accessline 114
/** STEP 1. Declare supported deep links */ internal val deepLinkMatchers: List<UriDeepLinkMatcher<NavKey>> = listOf( // "https://www.nav3recipes.com/home" - Network accessline 114
/** STEP 1. Declare supported deep links */ internal val deepLinkMatchers: List<UriDeepLinkMatcher<NavKey>> = listOf( // "https://www.nav3recipes.com/home" - Network accessline 115
internal val deepLinkMatchers: List<UriDeepLinkMatcher<NavKey>> = listOf( // "https://www.nav3recipes.com/home" UriDeepLinkMatcher(URL_HOME_EXACT.toUri(), serializer<HomeKey>()), - Network accessline 115
internal val deepLinkMatchers: List<UriDeepLinkMatcher<NavKey>> = listOf( // "https://www.nav3recipes.com/home" UriDeepLinkMatcher(URL_HOME_EXACT.toUri(), serializer<HomeKey>()), - Network accessline 116
// "https://www.nav3recipes.com/home" - Network accessline 116
// "https://www.nav3recipes.com/home" - Network accessline 117
UriDeepLinkMatcher(URL_HOME_EXACT.toUri(), serializer<HomeKey>()), // "https://www.nav3recipes.com/users/with/{filter}" UriDeepLinkMatcher(URL_USERS_WITH_FILTER.toUri(), serializer<UsersKey>()), - Network accessline 117
UriDeepLinkMatcher(URL_HOME_EXACT.toUri(), serializer<HomeKey>()), // "https://www.nav3recipes.com/users/with/{filter}" UriDeepLinkMatcher(URL_USERS_WITH_FILTER.toUri(), serializer<UsersKey>()), - Network accessline 118
// "https://www.nav3recipes.com/users/with/{filter}" - Network accessline 118
// "https://www.nav3recipes.com/users/with/{filter}" - Network accessline 119
UriDeepLinkMatcher(URL_USERS_WITH_FILTER.toUri(), serializer<UsersKey>()), // "https://www.nav3recipes.com/users/search?{firstName}&{age}&{location}" UriDeepLinkMatcher(URL_SEARCH.toUri(), serializer<SearchKey>()), - Network accessline 119
UriDeepLinkMatcher(URL_USERS_WITH_FILTER.toUri(), serializer<UsersKey>()), // "https://www.nav3recipes.com/users/search?{firstName}&{age}&{location}" UriDeepLinkMatcher(URL_SEARCH.toUri(), serializer<SearchKey>()), - Network accessline 120
// "https://www.nav3recipes.com/users/search?{firstName}&{age}&{location}" - Network accessline 120
// "https://www.nav3recipes.com/users/search?{firstName}&{age}&{location}" - Network accessline 377
internal const val STRING_LITERAL_SEARCH = "search" internal const val STRING_LITERAL_INCLUDE = "include" internal const val PATH_BASE = "https://www.nav3recipes.com" - Network accessline 377
internal const val STRING_LITERAL_SEARCH = "search" internal const val STRING_LITERAL_INCLUDE = "include" internal const val PATH_BASE = "https://www.nav3recipes.com" - Network accessline 378
internal const val STRING_LITERAL_INCLUDE = "include" internal const val PATH_BASE = "https://www.nav3recipes.com" internal const val PATH_INCLUDE = "$STRING_LITERAL_USERS/$STRING_LITERAL_INCLUDE" - Network accessline 378
internal const val STRING_LITERAL_INCLUDE = "include" internal const val PATH_BASE = "https://www.nav3recipes.com" internal const val PATH_INCLUDE = "$STRING_LITERAL_USERS/$STRING_LITERAL_INCLUDE" - Network accessline 379
internal const val PATH_BASE = "https://www.nav3recipes.com" - Network accessline 379
internal const val PATH_BASE = "https://www.nav3recipes.com"
navigation/navigation-3/references/android/guide/navigation/navigation-3/recipes/dialog.md
- Network accessline 17
For more information, see the official documentation on [custom layouts](https://developer.android.com/guide/navigation/navigation-3/custom-layouts). - Network accessline 17
For more information, see the official documentation on [custom layouts](https://developer.android.com/guide/navigation/navigation-3/custom-layouts). - Network accessline 18
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/dialog) - Network accessline 18
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/dialog) - Network accessline 26
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 26
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 27
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 27
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 28
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 28
* http://www.apache.org/licenses/LICENSE-2.0
navigation/navigation-3/references/android/guide/navigation/navigation-3/recipes/lifecycle-owner.md
- Network accessline 22
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/lifecycleowner) - Network accessline 22
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/lifecycleowner) - Network accessline 30
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 30
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 31
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 31
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 32
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 32
* http://www.apache.org/licenses/LICENSE-2.0
navigation/navigation-3/references/android/guide/navigation/navigation-3/recipes/material-listdetail.md
- Network accessline 22
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/material/listdetail) - Network accessline 22
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/material/listdetail) - Network accessline 32
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 32
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 33
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 33
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 34
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 34
* http://www.apache.org/licenses/LICENSE-2.0
navigation/navigation-3/references/android/guide/navigation/navigation-3/recipes/material-supportingpane.md
- Network accessline 24
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/material/supportingpane) - Network accessline 24
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/material/supportingpane) - Network accessline 34
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 34
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 35
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 35
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 36
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 36
* http://www.apache.org/licenses/LICENSE-2.0
navigation/navigation-3/references/android/guide/navigation/navigation-3/recipes/modular-hilt.md
- Network accessline 22
This modular approach allows for a clean separation of concerns, making the codebase more scalable and maintainable. Each feature is responsible for its own navigation logic, and the `app` module only combines these pieces together. [ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/modular/hilt) - Network accessline 23
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/modular/hilt) - Network accessline 55
const val PROFILE_URI = "https://www.nav3recipes.com/profile" - Network accessline 55
const val PROFILE_URI = "https://www.nav3recipes.com/profile" - Network accessline 191
const val CONVERSATION_URI = "https://www.nav3recipes.com/conversation" - Network accessline 191
const val CONVERSATION_URI = "https://www.nav3recipes.com/conversation"
navigation/navigation-3/references/android/guide/navigation/navigation-3/recipes/modular-koin.md
- Network accessline 3
This recipe demonstrates how to structure a multi-module application using Navigation 3 and Koin for dependency injection. The goal is to create a decoupled architecture where navigation is defined and implemented in separate feature module - Network accessline 3
This recipe demonstrates how to structure a multi-module application using Navigation 3 and Koin for dependency injection. The goal is to create a decoupled architecture where navigation is defined and implemented in separate feature module - Network accessline 18
- **`api` module**: Defines the public API for the feature, including its navigation routes and deep link URI patterns. This allows other modules to navigate to this feature without needing to know about its implementation details. - **`i - Network accessline 18
- **`api` module**: Defines the public API for the feature, including its navigation routes and deep link URI patterns. This allows other modules to navigate to this feature without needing to know about its implementation details. - **`i - Network accessline 19
- **`impl` module** : Provides the implementation of the feature, including its composables and Koin `Module`. The Koin module uses the [`navigation`](https://insert-koin.io/docs/reference/koin-compose/navigation3/#declaring-navigation-entr - Network accessline 19
- **`impl` module** : Provides the implementation of the feature, including its composables and Koin `Module`. The Koin module uses the [`navigation`](https://insert-koin.io/docs/reference/koin-compose/navigation3/#declaring-navigation-entr - Network accessline 21
This modular approach allows for a clean separation of concerns, making the codebase more scalable and maintainable. Each feature is responsible for its own navigation logic, and the `app` module only combines these pieces together. [ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/modular/koin) - Network accessline 22
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/modular/koin) - Network accessline 54
const val PROFILE_URI = "https://www.nav3recipes.com/profile" - Network accessline 54
const val PROFILE_URI = "https://www.nav3recipes.com/profile" - Network accessline 139
const val CONVERSATION_URI = "https://www.nav3recipes.com/conversation" - Network accessline 139
const val CONVERSATION_URI = "https://www.nav3recipes.com/conversation"
navigation/navigation-3/references/android/guide/navigation/navigation-3/recipes/multiple-backstacks.md
- Network accessline 23
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/multiplestacks) - Network accessline 23
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/multiplestacks) - Network accessline 31
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 31
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 32
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 32
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 33
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 33
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 89
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 89
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 90
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 90
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 91
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 91
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 218
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 218
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 219
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 219
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 220
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 220
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 346
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 346
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 347
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 347
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 348
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 348
* http://www.apache.org/licenses/LICENSE-2.0
navigation/navigation-3/references/android/guide/navigation/navigation-3/recipes/passingarguments.md
- Network accessline 13
**Note** : The `rememberViewModelStoreNavEntryDecorator` is added to the `NavDisplay`'s `entryDecorators`. This ensures that `ViewModel`s are correctly scoped to their corresponding `NavEntry`, so that a new `ViewModel` instance is created - Network accessline 13
**Note** : The `rememberViewModelStoreNavEntryDecorator` is added to the `NavDisplay`'s `entryDecorators`. This ensures that `ViewModel`s are correctly scoped to their corresponding `NavEntry`, so that a new `ViewModel` instance is created - Network accessline 14
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/passingarguments/viewmodels/hilt) - Network accessline 14
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/passingarguments/viewmodels/hilt) - Network accessline 22
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 22
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 23
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 23
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 24
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 24
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 147
**Note** : The `rememberViewModelStoreNavEntryDecorator` is added to the `NavDisplay`'s `entryDecorators`. This ensures that `ViewModel`s are correctly scoped to their corresponding `NavEntry`, so that a new `ViewModel` instance is created - Network accessline 147
**Note** : The `rememberViewModelStoreNavEntryDecorator` is added to the `NavDisplay`'s `entryDecorators`. This ensures that `ViewModel`s are correctly scoped to their corresponding `NavEntry`, so that a new `ViewModel` instance is created - Network accessline 148
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/passingarguments/viewmodels/basic) - Network accessline 148
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/passingarguments/viewmodels/basic) - Network accessline 156
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 156
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 157
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 157
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 158
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 158
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 272
**Note** : The `rememberViewModelStoreNavEntryDecorator` is added to the `NavDisplay`'s `entryDecorators`. This ensures that `ViewModel`s are correctly scoped to their corresponding `NavEntry`, so that a new `ViewModel` instance is created - Network accessline 272
**Note** : The `rememberViewModelStoreNavEntryDecorator` is added to the `NavDisplay`'s `entryDecorators`. This ensures that `ViewModel`s are correctly scoped to their corresponding `NavEntry`, so that a new `ViewModel` instance is created - Network accessline 273
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/passingarguments/viewmodels/koin) - Network accessline 273
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/passingarguments/viewmodels/koin)
navigation/navigation-3/references/android/guide/navigation/navigation-3/recipes/results-event.md
- Network accessline 14
This approach is useful for results that are transient and should be handled as one-time events. [ Explore View the full recipe on GitHub.](https://github.com/android/nav3 - Network accessline 14
This approach is useful for results that are transient and should be handled as one-time events. [ Explore View the full recipe on GitHub.](https://github.com/android/nav3 - Network accessline 15
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/results/event) - Network accessline 15
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/results/event) - Network accessline 23
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 23
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 24
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 24
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 25
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 25
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 52
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 52
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 53
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 53
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 54
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 54
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 81
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 81
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 82
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 82
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 83
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 83
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 106
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 106
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 107
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 107
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 108
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 108
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 191
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 191
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 192
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 192
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 193
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 193
* http://www.apache.org/licenses/LICENSE-2.0
navigation/navigation-3/references/android/guide/navigation/navigation-3/recipes/results-state.md
- Network accessline 14
This approach is suitable when only the latest result is required. The result state does not survive configuration change or process death. [ Explore View the full recipe - Network accessline 14
This approach is suitable when only the latest result is required. The result state does not survive configuration change or process death. [ Explore View the full recipe - Network accessline 15
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/results/state) - Network accessline 15
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/results/state) - Network accessline 23
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 23
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 24
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 24
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 25
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 25
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 52
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 52
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 53
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 53
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 54
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 54
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 81
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 81
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 82
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 82
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 83
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 83
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 106
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 106
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 107
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 107
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 108
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 108
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 191
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 191
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 192
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 192
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 193
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 193
* http://www.apache.org/licenses/LICENSE-2.0
navigation/navigation-3/references/android/guide/navigation/navigation-3/recipes/scenes-listdetail.md
- Network accessline 11
The `ListDetailScene` provides a `CompositionLocal` named `LocalBackButtonVisibility` that can be used by the detail `NavEntry` to control whether it displays a back button. This is useful when the detail entry usually displays a back butto - Network accessline 11
The `ListDetailScene` provides a `CompositionLocal` named `LocalBackButtonVisibility` that can be used by the detail `NavEntry` to control whether it displays a back button. This is useful when the detail entry usually displays a back butto - Network accessline 13
See `ListDetailScene.kt` for more implementation details. [ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/co - Network accessline 13
See `ListDetailScene.kt` for more implementation details. [ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/co - Network accessline 14
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/scenes/listdetail) - Network accessline 14
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/scenes/listdetail) - Network accessline 22
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 22
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 23
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 23
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 24
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 24
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 179
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 179
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 180
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 180
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 181
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 181
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 298
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 298
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 299
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 299
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 300
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 300
* http://www.apache.org/licenses/LICENSE-2.0
navigation/navigation-3/references/android/guide/navigation/navigation-3/recipes/scenes-twopane.md
- Network accessline 10
See `TwoPaneScene.kt` for more implementation details. [ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/e - Network accessline 10
See `TwoPaneScene.kt` for more implementation details. [ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/e - Network accessline 11
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/scenes/twopane) - Network accessline 11
[ Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/scenes/twopane) - Network accessline 134
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 134
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 135
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 135
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 136
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 136
* http://www.apache.org/licenses/LICENSE-2.0
navigation/navigation-event/references/android/guide/navigation/navigation-event/dispatcher.md
- Network accessline 1
To implement a robust navigation system, your app needs a centralized way to handle back gestures and other navigation signals. This page describes how to use [`NavigationEventDispatcher`](https://developer.android.com/reference/kotlin/andr - Network accessline 1
To implement a robust navigation system, your app needs a centralized way to handle back gestures and other navigation signals. This page describes how to use [`NavigationEventDispatcher`](https://developer.android.com/reference/kotlin/andr - Network accessline 2
handle back gestures and other navigation signals. This page describes how to use [`NavigationEventDispatcher`](https://developer.android.com/reference/kotlin/androidx/navigationevent/NavigationEventDispatcher) to coordinate and distribute - Network accessline 2
handle back gestures and other navigation signals. This page describes how to use [`NavigationEventDispatcher`](https://developer.android.com/reference/kotlin/androidx/navigationevent/NavigationEventDispatcher) to coordinate and distribute - Network accessline 3
use [`NavigationEventDispatcher`](https://developer.android.com/reference/kotlin/androidx/navigationevent/NavigationEventDispatcher) to coordinate and distribute these - Network accessline 3
use [`NavigationEventDispatcher`](https://developer.android.com/reference/kotlin/androidx/navigationevent/NavigationEventDispatcher) to coordinate and distribute these - Network accessline 14
You should provide `NavigationEventDispatcher` instances through a [`NavigationEventDispatcherOwner`](https://developer.android.com/reference/androidx/navigationevent/NavigationEventDispatcherOwner). This ensures that different parts of you - Network accessline 14
You should provide `NavigationEventDispatcher` instances through a [`NavigationEventDispatcherOwner`](https://developer.android.com/reference/androidx/navigationevent/NavigationEventDispatcherOwner). This ensures that different parts of you - Network accessline 15
[`NavigationEventDispatcherOwner`](https://developer.android.com/reference/androidx/navigationevent/NavigationEventDispatcherOwner). This ensures that different parts of your - Network accessline 15
[`NavigationEventDispatcherOwner`](https://developer.android.com/reference/androidx/navigationevent/NavigationEventDispatcherOwner). This ensures that different parts of your - Network accessline 92
> [!NOTE] > **Note:** To provide a simple input, use the [`DirectNavigationEventInput`](https://developer.android.com/reference/androidx/navigationevent/DirectNavigationEventInput) class. - Network accessline 92
> [!NOTE] > **Note:** To provide a simple input, use the [`DirectNavigationEventInput`](https://developer.android.com/reference/androidx/navigationevent/DirectNavigationEventInput) class. - Network accessline 93
> **Note:** To provide a simple input, use the [`DirectNavigationEventInput`](https://developer.android.com/reference/androidx/navigationevent/DirectNavigationEventInput) class. - Network accessline 93
> **Note:** To provide a simple input, use the [`DirectNavigationEventInput`](https://developer.android.com/reference/androidx/navigationevent/DirectNavigationEventInput) class.
navigation/navigation-event/references/android/guide/navigation/navigation-event/handle-back.md
- Network accessline 50
Handlers are invoked based on priority, and then by recency. All [`PRIORITY_OVERLAY`](https://developer.android.com/reference/kotlin/androidx/navigationevent/NavigationEventDispatcher#PRIORITY_OVERLAY()) handlers are called before any [`PRI - Network accessline 50
Handlers are invoked based on priority, and then by recency. All [`PRIORITY_OVERLAY`](https://developer.android.com/reference/kotlin/androidx/navigationevent/NavigationEventDispatcher#PRIORITY_OVERLAY()) handlers are called before any [`PRI - Network accessline 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/an - Network accessline 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/an - Network accessline 118
This example shows how to observe predictive back gesture updates using [`NavigationEventTransitionState`](https://developer.android.com/reference/kotlin/androidx/navigationevent/NavigationEventTransitionState). The `progress` value can be - Network accessline 118
This example shows how to observe predictive back gesture updates using [`NavigationEventTransitionState`](https://developer.android.com/reference/kotlin/androidx/navigationevent/NavigationEventTransitionState). The `progress` value can be - Network accessline 119
[`NavigationEventTransitionState`](https://developer.android.com/reference/kotlin/androidx/navigationevent/NavigationEventTransitionState). The `progress` value can be used to - Network accessline 119
[`NavigationEventTransitionState`](https://developer.android.com/reference/kotlin/androidx/navigationevent/NavigationEventTransitionState). The `progress` value can be used to - Network accessline 125
> [!NOTE] > **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 o - Network accessline 125
> [!NOTE] > **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 o - Network accessline 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 implemen - Network accessline 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 implemen
navigation/navigation-event/references/android/guide/navigation/navigation-event/index.md
- Network accessline 2
solution for integrating system-level navigation events into your application. It is designed to be the foundational layer for handling navigation directions across various [supported platforms](https://developer.android.com/kotlin/multipla - Network accessline 2
solution for integrating system-level navigation events into your application. It is designed to be the foundational layer for handling navigation directions across various [supported platforms](https://developer.android.com/kotlin/multipla - Network accessline 4
across various [supported platforms](https://developer.android.com/kotlin/multiplatform#kotlin-multiplatform-and-jetpack-libraries). - Network accessline 4
across various [supported platforms](https://developer.android.com/kotlin/multiplatform#kotlin-multiplatform-and-jetpack-libraries). - Network accessline 14
The [`NavigationEventDispatcher`](https://developer.android.com/reference/kotlin/androidx/navigationevent/NavigationEventDispatcher) is the central class responsible for - Network accessline 14
The [`NavigationEventDispatcher`](https://developer.android.com/reference/kotlin/androidx/navigationevent/NavigationEventDispatcher) is the central class responsible for - Network accessline 16
([`NavigationEventHandler`](https://developer.android.com/reference/kotlin/androidx/navigationevent/NavigationEventHandler)) and orchestrating the flow of events. - Network accessline 16
([`NavigationEventHandler`](https://developer.android.com/reference/kotlin/androidx/navigationevent/NavigationEventHandler)) and orchestrating the flow of events. - Network accessline 36
[`NavigationEvent`](https://developer.android.com/reference/androidx/navigationevent/NavigationEvent) is a data class that carries the details of the - Network accessline 36
[`NavigationEvent`](https://developer.android.com/reference/androidx/navigationevent/NavigationEvent) is a data class that carries the details of the - Network accessline 41
[`NavigationEventInfo`](https://developer.android.com/reference/androidx/navigationevent/NavigationEventInfo) is an abstract class that provides contextual - Network accessline 41
[`NavigationEventInfo`](https://developer.android.com/reference/androidx/navigationevent/NavigationEventInfo) is an abstract class that provides contextual - Network accessline 46
[`NavigationEventInput`](https://developer.android.com/reference/androidx/navigationevent/NavigationEventInput) is an abstract class for components that generate - Network accessline 46
[`NavigationEventInput`](https://developer.android.com/reference/androidx/navigationevent/NavigationEventInput) is an abstract class for components that generate
performance/anr-audit-and-fix/references/trace_analysis_guide.md
- Network accessline 1
Diagnose ANR traces using the following rules and format the output with [references/anr_trace_report_template.md](https://developer.android.com/agents/skills/performance/anr-audit-and-fix/references/anr_trace_report_template). - Network accessline 1
Diagnose ANR traces using the following rules and format the output with [references/anr_trace_report_template.md](https://developer.android.com/agents/skills/performance/anr-audit-and-fix/references/anr_trace_report_template). - Network accessline 2
[references/anr_trace_report_template.md](https://developer.android.com/agents/skills/performance/anr-audit-and-fix/references/anr_trace_report_template). - Network accessline 2
[references/anr_trace_report_template.md](https://developer.android.com/agents/skills/performance/anr-audit-and-fix/references/anr_trace_report_template).
performance/r8-analyzer/references/FULL_BUILD_CONFIG_ANALYZER.md
- Instruction override signalline 14
This temporary change is the only file edit the skill makes. When running interactively, ask for user confirmation before modifying `settings.gradle` or `settings.gradle.kts` (skip confirmation when running non-interactively). If - Instruction override signalline 14
This temporary change is the only file edit the skill makes. When running interactively, ask for user confirmation before modifying `settings.gradle` or `settings.gradle.kts` (skip confirmation when running non-interactively). If - Instruction override signalline 15
interactively, ask for user confirmation before modifying `settings.gradle` or `settings.gradle.kts` (skip confirmation when running non-interactively). If the user declines, or asks you not to edit build or source files, don't edit - Instruction override signalline 15
interactively, ask for user confirmation before modifying `settings.gradle` or `settings.gradle.kts` (skip confirmation when running non-interactively). If the user declines, or asks you not to edit build or source files, don't edit - Instruction override signalline 16
`settings.gradle.kts` (skip confirmation when running non-interactively). If - Instruction override signalline 16
`settings.gradle.kts` (skip confirmation when running non-interactively). If - Dangerous shell operationline 57
rm -f tmp/r8analysis/keepruleradius.json tmp/r8analysis/analysis_result.txt - Dangerous shell operationline 57
rm -f tmp/r8analysis/keepruleradius.json tmp/r8analysis/analysis_result.txt - Dangerous shell operationline 58
find tmp/r8analysis -name '*.pb' -delete - Dangerous shell operationline 58
find tmp/r8analysis -name '*.pb' -delete
performance/r8-analyzer/references/INSPECT-RULES.md
- Network accessline 109
1. Use `@SerializedName` on fields in your data classes that are used for serialization and deserialization. 2. Gson (**2.11.0 and higher** ) bundles its own rules ([View Gson's embedded ProGuard rules](https://github.com/google/gson/blo - Network accessline 109
1. Use `@SerializedName` on fields in your data classes that are used for serialization and deserialization. 2. Gson (**2.11.0 and higher** ) bundles its own rules ([View Gson's embedded ProGuard rules](https://github.com/google/gson/blo - Network accessline 111
ProGuard rules](https://github.com/google/gson/blob/main/gson/src/main/resources/META-INF/proguard/gson.pro)). The bundled keep rules retain the `@SerializedName` annotated fields. If you are on a version lower than 2.11, upgrade to Gson 2. - Network accessline 111
ProGuard rules](https://github.com/google/gson/blob/main/gson/src/main/resources/META-INF/proguard/gson.pro)). The bundled keep rules retain the `@SerializedName` annotated fields. If you are on a version lower than 2.11, upgrade to Gson 2. - Network accessline 146
**The fix** : Verify you are using Retrofit 2.10.0 and higher. Retrofit from 2.9.0 bundles rules that detect its own HTTP annotations (`@GET`, `@POST`) ([View Retrofit's embedded ProGuard rules](https://github.com/square/retrofit/blob/maste - Network accessline 146
**The fix** : Verify you are using Retrofit 2.10.0 and higher. Retrofit from 2.9.0 bundles rules that detect its own HTTP annotations (`@GET`, `@POST`) ([View Retrofit's embedded ProGuard rules](https://github.com/square/retrofit/blob/maste - Network accessline 147
2.9.0 bundles rules that detect its own HTTP annotations (`@GET`, `@POST`) ([View Retrofit's embedded ProGuard rules](https://github.com/square/retrofit/blob/master/retrofit/src/main/resources/META-INF/proguard/retrofit2.pro)), and from 2.1 - Network accessline 147
2.9.0 bundles rules that detect its own HTTP annotations (`@GET`, `@POST`) ([View Retrofit's embedded ProGuard rules](https://github.com/square/retrofit/blob/master/retrofit/src/main/resources/META-INF/proguard/retrofit2.pro)), and from 2.1 - Network accessline 148
([View Retrofit's embedded ProGuard rules](https://github.com/square/retrofit/blob/master/retrofit/src/main/resources/META-INF/proguard/retrofit2.pro)), and from 2.10.0 it also keeps - Network accessline 148
([View Retrofit's embedded ProGuard rules](https://github.com/square/retrofit/blob/master/retrofit/src/main/resources/META-INF/proguard/retrofit2.pro)), and from 2.10.0 it also keeps - Network accessline 187
**The fix** : Remove any broad `kotlinx` keep rules. Kotlin Coroutines (**1.7.0 and higher** ) bundles the necessary keep rules ([View Coroutines' embedded ProGuard rules](https://github.com/Kotlin/kotlinx.coroutines/blob/master/kotlinx-cor - Network accessline 187
**The fix** : Remove any broad `kotlinx` keep rules. Kotlin Coroutines (**1.7.0 and higher** ) bundles the necessary keep rules ([View Coroutines' embedded ProGuard rules](https://github.com/Kotlin/kotlinx.coroutines/blob/master/kotlinx-cor - Network accessline 189
ProGuard rules](https://github.com/Kotlin/kotlinx.coroutines/blob/master/kotlinx-coroutines-core/jvm/resources/META-INF/proguard/coroutines.pro)). - Network accessline 189
ProGuard rules](https://github.com/Kotlin/kotlinx.coroutines/blob/master/kotlinx-coroutines-core/jvm/resources/META-INF/proguard/coroutines.pro)).
performance/r8-analyzer/references/android/topic/performance/app-optimization/enable-app-optimization.md
- Network accessline 3
[View on GitHub](https://github.com/android/skills/tree/main/performance/r8-analyzer) - Network accessline 3
[View on GitHub](https://github.com/android/skills/tree/main/performance/r8-analyzer) - Network accessline 7
Use the R8 Analyzer [Android skill](https://developer.android.com/tools/agents/android-skills) to analyze build files and identify redundant, broad, or subsumed [keep rules](https://developer.android.com/topic/performance/app-optimization/k - Network accessline 7
Use the R8 Analyzer [Android skill](https://developer.android.com/tools/agents/android-skills) to analyze build files and identify redundant, broad, or subsumed [keep rules](https://developer.android.com/topic/performance/app-optimization/k - Network accessline 19
- Reduced memory usage - Improved rendering and runtime performance - Fewer [ANRs](https://developer.android.com/topic/performance/anrs/keep-your-app-responsive) - Network accessline 19
- Reduced memory usage - Improved rendering and runtime performance - Fewer [ANRs](https://developer.android.com/topic/performance/anrs/keep-your-app-responsive) - Network accessline 21
- Fewer [ANRs](https://developer.android.com/topic/performance/anrs/keep-your-app-responsive) - Network accessline 21
- Fewer [ANRs](https://developer.android.com/topic/performance/anrs/keep-your-app-responsive) - Network accessline 23
> [!IMPORTANT] > **Important:** You should always enable optimization for your app's release build; however, you probably don't want to enable it for tests or libraries. For more information about using R8 with tests, see [Test and troubles - Network accessline 23
> [!IMPORTANT] > **Important:** You should always enable optimization for your app's release build; however, you probably don't want to enable it for tests or libraries. For more information about using R8 with tests, see [Test and troubles - Network accessline 25
> optimization](https://developer.android.com/topic/performance/app-optimization/test-and-troubleshoot-the-optimization). For more information about enabling R8 from libraries, see [Optimization for library authors](https://developer.androi - Network accessline 25
> optimization](https://developer.android.com/topic/performance/app-optimization/test-and-troubleshoot-the-optimization). For more information about enabling R8 from libraries, see [Optimization for library authors](https://developer.androi - Network accessline 53
Since 8.12.0 version of Android Gradle Plugin (AGP), R8 also optimizes resources as part of its optimization phases. For more information, see [Optimized resource shrinking](https://developer.android.com/topic/performance/app-optimization/e - Network accessline 53
Since 8.12.0 version of Android Gradle Plugin (AGP), R8 also optimizes resources as part of its optimization phases. For more information, see [Optimized resource shrinking](https://developer.android.com/topic/performance/app-optimization/e - Network accessline 55
resource shrinking](https://developer.android.com/topic/performance/app-optimization/enable-app-optimization#optimize-resource-shrinking). - Network accessline 55
resource shrinking](https://developer.android.com/topic/performance/app-optimization/enable-app-optimization#optimize-resource-shrinking). - Network accessline 69
- Set `enable = true` in the `optimization` block in your release build's app-level build script. - Add your [keep rules](https://developer.android.com/topic/performance/app-optimization/add-keep-rules) to a file with the suffix `.keep` in - Network accessline 69
- Set `enable = true` in the `optimization` block in your release build's app-level build script. - Add your [keep rules](https://developer.android.com/topic/performance/app-optimization/add-keep-rules) to a file with the suffix `.keep` in - Network accessline 70
- Add your [keep rules](https://developer.android.com/topic/performance/app-optimization/add-keep-rules) to a file with the suffix `.keep` in the `src/<variant>/keepRules` source set. For example, `src/main/keepRules/custom-rules.keep`. - Network accessline 70
- Add your [keep rules](https://developer.android.com/topic/performance/app-optimization/add-keep-rules) to a file with the suffix `.keep` in the `src/<variant>/keepRules` source set. For example, `src/main/keepRules/custom-rules.keep`. - Network accessline 72
> [!NOTE] > **Note:** The updated DSL enables both code and resource optimization. It also includes a set of default keep rules for the Android platform, equivalent to "proguard-android-optimize.txt". To omit the default rules, see [Omit de - Network accessline 72
> [!NOTE] > **Note:** The updated DSL enables both code and resource optimization. It also includes a set of default keep rules for the Android platform, equivalent to "proguard-android-optimize.txt". To omit the default rules, see [Omit de - Network accessline 74
> rules](https://developer.android.com/topic/performance/app-optimization/keep-rules-overview#omit-default). - Network accessline 74
> rules](https://developer.android.com/topic/performance/app-optimization/keep-rules-overview#omit-default). - Network accessline 102
To enable app optimization, set `isMinifyEnabled = true` (for code optimization) and `isShrinkResources = true` (for resource optimization) in your [release build's](https://developer.android.com/studio/publish/preparing#turn-off-debugging) - Network accessline 102
To enable app optimization, set `isMinifyEnabled = true` (for code optimization) and `isShrinkResources = true` (for resource optimization) in your [release build's](https://developer.android.com/studio/publish/preparing#turn-off-debugging) - Network accessline 103
and `isShrinkResources = true` (for resource optimization) in your [release build's](https://developer.android.com/studio/publish/preparing#turn-off-debugging) app-level build script. We recommend that you always enable both settings. - Network accessline 103
and `isShrinkResources = true` (for resource optimization) in your [release build's](https://developer.android.com/studio/publish/preparing#turn-off-debugging) app-level build script. We recommend that you always enable both settings. - Network accessline 104
build's](https://developer.android.com/studio/publish/preparing#turn-off-debugging) app-level build script. We recommend that you always enable both - Network accessline 104
build's](https://developer.android.com/studio/publish/preparing#turn-off-debugging) app-level build script. We recommend that you always enable both - Network accessline 157
- Enable R8 in [full mode](https://developer.android.com/topic/performance/app-optimization/full-mode) - Network accessline 157
- Enable R8 in [full mode](https://developer.android.com/topic/performance/app-optimization/full-mode) - Network accessline 158
- Enable [obfuscation, optimization, and shrinking](https://developer.android.com/topic/performance/app-optimization/adopt-optimizations-incrementally) - Network accessline 158
- Enable [obfuscation, optimization, and shrinking](https://developer.android.com/topic/performance/app-optimization/adopt-optimizations-incrementally) - Network accessline 159
- Enable resource shrinking and [optimized resource shrinking](https://developer.android.com/topic/performance/app-optimization/enable-app-optimization#optimize-resource-shrinking) - Network accessline 159
- Enable resource shrinking and [optimized resource shrinking](https://developer.android.com/topic/performance/app-optimization/enable-app-optimization#optimize-resource-shrinking) - Network accessline 160
- [Refine keep rules](https://developer.android.com/topic/performance/app-optimization/keep-rules-best-practices) to allow maximum optimization of classes, fields and methods. - Network accessline 160
- [Refine keep rules](https://developer.android.com/topic/performance/app-optimization/keep-rules-best-practices) to allow maximum optimization of classes, fields and methods. - Network accessline 162
To help you refine keep rules, use the [R8 Configuration Analyzer](https://developer.android.com/topic/performance/app-optimization/r8-configuration-analyzer). - Network accessline 162
To help you refine keep rules, use the [R8 Configuration Analyzer](https://developer.android.com/topic/performance/app-optimization/r8-configuration-analyzer). - Network accessline 170
The R8 Configuration Analyzer is available in AGP version 9.3.0-alpha05 or from R8 version 9.3.7-dev. For more information, see [Analyze R8 configuration](https://developer.android.com/topic/performance/app-optimization/r8-configuration-ana - Network accessline 170
The R8 Configuration Analyzer is available in AGP version 9.3.0-alpha05 or from R8 version 9.3.7-dev. For more information, see [Analyze R8 configuration](https://developer.android.com/topic/performance/app-optimization/r8-configuration-ana - Network accessline 171
R8 version 9.3.7-dev. For more information, see [Analyze R8 configuration](https://developer.android.com/topic/performance/app-optimization/r8-configuration-analyzer). - Network accessline 171
R8 version 9.3.7-dev. For more information, see [Analyze R8 configuration](https://developer.android.com/topic/performance/app-optimization/r8-configuration-analyzer). - Network accessline 201
To enable R8 to use its [full optimization capabilities](https://developer.android.com/topic/performance/app-optimization/full-mode), remove the - Network accessline 201
To enable R8 to use its [full optimization capabilities](https://developer.android.com/topic/performance/app-optimization/full-mode), remove the - Network accessline 207
especially if R8 renames class or method names. To get stack traces that correctly correspond to your source code, see [Recover the original stack trace](https://developer.android.com/topic/performance/app-optimization/test-and-troubleshoot - Network accessline 207
especially if R8 renames class or method names. To get stack traces that correctly correspond to your source code, see [Recover the original stack trace](https://developer.android.com/topic/performance/app-optimization/test-and-troubleshoot - Network accessline 209
trace](https://developer.android.com/topic/performance/app-optimization/test-and-troubleshoot-the-optimization#recover-original-stack-trace). - Network accessline 209
trace](https://developer.android.com/topic/performance/app-optimization/test-and-troubleshoot-the-optimization#recover-original-stack-trace). - Network accessline 211
If R8 is enabled, you should also [create Startup Profiles](https://developer.android.com/topic/performance/baselineprofiles/dex-layout-optimizations) for even better - Network accessline 211
If R8 is enabled, you should also [create Startup Profiles](https://developer.android.com/topic/performance/baselineprofiles/dex-layout-optimizations) for even better - Network accessline 217
- [Add keep rules](https://developer.android.com/topic/performance/app-optimization/add-keep-rules) to keep some code untouched. - Network accessline 217
- [Add keep rules](https://developer.android.com/topic/performance/app-optimization/add-keep-rules) to keep some code untouched. - Network accessline 218
- [Adopt optimizations incrementally](https://developer.android.com/topic/performance/app-optimization/adopt-optimizations-incrementally). - Network accessline 218
- [Adopt optimizations incrementally](https://developer.android.com/topic/performance/app-optimization/adopt-optimizations-incrementally). - Network accessline 220
optimization](https://developer.android.com/topic/performance/app-optimization/choose-libraries-wisely). - Network accessline 220
optimization](https://developer.android.com/topic/performance/app-optimization/choose-libraries-wisely). - Network accessline 222
> [!CAUTION] > **Caution:** Tools that replace or modify R8's output can negatively impact runtime performance. R8 is careful about including and testing many optimizations at the code level, in [DEX layout](https://developer.android.com/to - Network accessline 222
> [!CAUTION] > **Caution:** Tools that replace or modify R8's output can negatively impact runtime performance. R8 is careful about including and testing many optimizations at the code level, in [DEX layout](https://developer.android.com/to - Network accessline 223
> **Caution:** Tools that replace or modify R8's output can negatively impact runtime performance. R8 is careful about including and testing many optimizations at the code level, in [DEX layout](https://developer.android.com/topic/performan - Network accessline 223
> **Caution:** Tools that replace or modify R8's output can negatively impact runtime performance. R8 is careful about including and testing many optimizations at the code level, in [DEX layout](https://developer.android.com/topic/performan - Network accessline 225
If you are interested in optimizing your build speed, see [Configure how R8 runs](https://developer.android.com/build/r8-execution-profiles) for information on how to configure R8 based on your environment. - Network accessline 225
If you are interested in optimizing your build speed, see [Configure how R8 runs](https://developer.android.com/build/r8-execution-profiles) for information on how to configure R8 based on your environment. - Network accessline 226
runs](https://developer.android.com/build/r8-execution-profiles) for information on how to configure R8 based on your environment. - Network accessline 226
runs](https://developer.android.com/build/r8-execution-profiles) for information on how to configure R8 based on your environment. - Network accessline 234
|---|---| | 9.3 | **Simplified DSL:** New \`optimization {}\` block enables requires less configuration- optimized resource shrinking is always enabled, default Android keep rules are opt-out. <br /> **\`keepRules\` source set:** If you use - Network accessline 234
|---|---| | 9.3 | **Simplified DSL:** New \`optimization {}\` block enables requires less configuration- optimized resource shrinking is always enabled, default Android keep rules are opt-out. <br /> **\`keepRules\` source set:** If you use - Network accessline 235
| 9.3 | **Simplified DSL:** New \`optimization {}\` block enables requires less configuration- optimized resource shrinking is always enabled, default Android keep rules are opt-out. <br /> **\`keepRules\` source set:** If you use the new D - Network accessline 235
| 9.3 | **Simplified DSL:** New \`optimization {}\` block enables requires less configuration- optimized resource shrinking is always enabled, default Android keep rules are opt-out. <br /> **\`keepRules\` source set:** If you use the new D - Network accessline 236
| 9.1 | **Classes repackaged by default:** R8 repackages classes (moving them to the unnamed package, at the top level) to compact DEX further, eliminating the need to specify `-repackageclasses` option. For information about how this works - Network accessline 236
| 9.1 | **Classes repackaged by default:** R8 repackages classes (moving them to the unnamed package, at the top level) to compact DEX further, eliminating the need to specify `-repackageclasses` option. For information about how this works - Network accessline 237
| 9.0 | **Optimized resource shrinking:** Enabled by default (controlled using `android.r8.optimizedResourceShrinking`). [Optimized resource shrinking](https://developer.android.com/topic/performance/app-optimization/enable-app-optimization - Network accessline 237
| 9.0 | **Optimized resource shrinking:** Enabled by default (controlled using `android.r8.optimizedResourceShrinking`). [Optimized resource shrinking](https://developer.android.com/topic/performance/app-optimization/enable-app-optimization - Network accessline 238
| 8.12 | **Optimized resource shrinking:** Initial support added (controlled using `android.r8.optimizedResourceShrinking`). [Optimized resource shrinking](https://developer.android.com/topic/performance/app-optimization/enable-app-optimiza - Network accessline 238
| 8.12 | **Optimized resource shrinking:** Initial support added (controlled using `android.r8.optimizedResourceShrinking`). [Optimized resource shrinking](https://developer.android.com/topic/performance/app-optimization/enable-app-optimiza - Network accessline 239
| 8.6 | **Improved retracing:** Includes filename and line number retracing by default for all `minSdk` levels (previously required `minSdk` 26+ in version 8.2). Updating R8 helps ensure that stack traces from obfuscated builds are readily - Network accessline 239
| 8.6 | **Improved retracing:** Includes filename and line number retracing by default for all `minSdk` levels (previously required `minSdk` 26+ in version 8.2). Updating R8 helps ensure that stack traces from obfuscated builds are readily - Network accessline 240
| 8.0 | **Full mode by default:** [R8 full mode](https://developer.android.com/topic/performance/app-optimization/full-mode) provides significantly more powerful optimization. It is enabled by default. You can opt out using `android.enableR - Network accessline 240
| 8.0 | **Full mode by default:** [R8 full mode](https://developer.android.com/topic/performance/app-optimization/full-mode) provides significantly more powerful optimization. It is enabled by default. You can opt out using `android.enableR - Network accessline 245
While AGP is the recommended and officially supported build system for Android apps, you might use an alternative build system like [Bazel](https://bazel.build/). If - Network accessline 245
While AGP is the recommended and officially supported build system for Android apps, you might use an alternative build system like [Bazel](https://bazel.build/). If - Network accessline 246
apps, you might use an alternative build system like [Bazel](https://bazel.build/). If - Network accessline 246
apps, you might use an alternative build system like [Bazel](https://bazel.build/). If - Network accessline 250
For information about optimizing an Android app using Bazel, see Bazel's [`rules_android` documentation](https://github.com/bazelbuild/rules_android/tree/main/docs/r8-optimization.md). Note that Bazel isn't - Network accessline 250
For information about optimizing an Android app using Bazel, see Bazel's [`rules_android` documentation](https://github.com/bazelbuild/rules_android/tree/main/docs/r8-optimization.md). Note that Bazel isn't - Network accessline 251
[`rules_android` documentation](https://github.com/bazelbuild/rules_android/tree/main/docs/r8-optimization.md). Note that Bazel isn't - Network accessline 251
[`rules_android` documentation](https://github.com/bazelbuild/rules_android/tree/main/docs/r8-optimization.md). Note that Bazel isn't - Network accessline 252
[officially supported](https://developer.android.com/build#other-build-systems) for Android app development. - Network accessline 252
[officially supported](https://developer.android.com/build#other-build-systems) for Android app development.
performance/r8-analyzer/scripts/analyze.py
performance/r8-analyzer/scripts/convert_pb_to_json.py
performance/r8-analyzer/scripts/keep_radius_pb2.py
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Possible obfuscationline 90
b' \x01(\x0b21.com.android.tools.r8.blastradius.proto.BuildInfo*\x1f\n\x0bKeepRuleTag\x12\x10\n\x0cPACKAGE_WIDE\x10\x00*H\n\x0eKeepConstraint\x12\x12\n\x0eDONT_OBFUSCATE\x10\x00\x12\x11\n\rDONT_OPTIMIZE\x10\x01\x12\x0f\n\x0bDONT_SHRINK\x10\ - Possible obfuscationline 90
b' \x01(\x0b21.com.android.tools.r8.blastradius.proto.BuildInfo*\x1f\n\x0bKeepRuleTag\x12\x10\n\x0cPACKAGE_WIDE\x10\x00*H\n\x0eKeepConstraint\x12\x12\n\x0eDONT_OBFUSCATE\x10\x00\x12\x11\n\rDONT_OPTIMIZE\x10\x01\x12\x0f\n\x0bDONT_SHRINK\x10\
play/engage-sdk-integration/references/android/guide/playcore/engage/faq.md
- Network accessline 43
The verification app doesn't support testing broadcast intent with permission. You have to remove permissions while testing and add them back before switching the SDK to prod version in [Step 6](https://developer.android.com/guide/playcore/ - Network accessline 43
The verification app doesn't support testing broadcast intent with permission. You have to remove permissions while testing and add them back before switching the SDK to prod version in [Step 6](https://developer.android.com/guide/playcore/ - Network accessline 45
add them back before switching the SDK to prod version in [Step 6](https://developer.android.com/guide/playcore/engage/workflow#switch-to-prod). - Network accessline 45
add them back before switching the SDK to prod version in [Step 6](https://developer.android.com/guide/playcore/engage/workflow#switch-to-prod). - Network accessline 95
The deep links are a great way to track the attribution. The deep link URLs that take users to your app can be included with additional tracking params. For example - "http://xx/deeplink?source_tag=engage". - Network accessline 95
The deep links are a great way to track the attribution. The deep link URLs that take users to your app can be included with additional tracking params. For example - "http://xx/deeplink?source_tag=engage". - Network accessline 97
For example - "http://xx/deeplink?source_tag=engage". - Network accessline 97
For example - "http://xx/deeplink?source_tag=engage". - Network accessline 129
- Increased engagement and retention: Engage helps bring users back to your app, even on new devices. By letting users resume their favorite shows, you increase the chances they'll keep watching. - Wider reach: Beyond Google TV, Engage work - Network accessline 129
- Increased engagement and retention: Engage helps bring users back to your app, even on new devices. By letting users resume their favorite shows, you increase the chances they'll keep watching. - Wider reach: Beyond Google TV, Engage work - Network accessline 131
- Backward compatible: If you're already using the older "[Watch Next](https://developer.android.com/training/tv/discovery/watch-next-add-programs)" feature, no problem! Engage is backward compatible, so your existing integration will still - Network accessline 131
- Backward compatible: If you're already using the older "[Watch Next](https://developer.android.com/training/tv/discovery/watch-next-add-programs)" feature, no problem! Engage is backward compatible, so your existing integration will still - Network accessline 166
Image requirements have been updated in the [Create Entities](https://developer.android.com/guide/playcore/engage/watch#image-specs) - Network accessline 166
Image requirements have been updated in the [Create Entities](https://developer.android.com/guide/playcore/engage/watch#image-specs)
play/engage-sdk-integration/references/android/guide/playcore/engage/food.md
- Network accessline 2
to deliver personalized recommendations and continuation content directly to users across multiple on-device surfaces, like **[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html - Network accessline 2
to deliver personalized recommendations and continuation content directly to users across multiple on-device surfaces, like **[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html - Network accessline 3
users across multiple on-device surfaces, like **[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html)** , **[Entertainment Space](https://blog.google/products/android/entertainm - Network accessline 3
users across multiple on-device surfaces, like **[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html)** , **[Entertainment Space](https://blog.google/products/android/entertainm - Network accessline 4
**[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html)** , **[Entertainment - Network accessline 4
**[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html)** , **[Entertainment - Network accessline 5
Space](https://blog.google/products/android/entertainment-space/)** , and the Play Store. The integration adds - Network accessline 5
Space](https://blog.google/products/android/entertainment-space/)** , and the Play Store. The integration adds - Network accessline 6
less than 50 KB (compressed) to the average APK and takes most apps about a week of developer time. Learn more at our **[business site](http://play.google.com/console/about/programs/EngageSDK)**. - Network accessline 6
less than 50 KB (compressed) to the average APK and takes most apps about a week of developer time. Learn more at our **[business site](http://play.google.com/console/about/programs/EngageSDK)**. - Network accessline 8
site](http://play.google.com/console/about/programs/EngageSDK)**. - Network accessline 8
site](http://play.google.com/console/about/programs/EngageSDK)**. - Network accessline 27
[View on GitHub](https://github.com/android/skills/tree/main/play/engage-sdk-integration) - Network accessline 27
[View on GitHub](https://github.com/android/skills/tree/main/play/engage-sdk-integration) - Network accessline 31
Use the Engage SDK [Android skill](https://developer.android.com/tools/agents/android-skills) to integrate, debug, and resolve implementation issues. To install the skill from the [Android CLI](https://developer.android.com/tools/agents/and - Network accessline 31
Use the Engage SDK [Android skill](https://developer.android.com/tools/agents/android-skills) to integrate, debug, and resolve implementation issues. To install the skill from the [Android CLI](https://developer.android.com/tools/agents/and - Network accessline 54
 **Figure :**\`ProductEntity\`, \`StoreEntity\`, and \`RecipeEntity\`. (\*UI for illustrative purposes only) - Network accessline 54
 **Figure :**\`ProductEntity\`, \`StoreEntity\`, and \`RecipeEntity\`. (\*UI for illustrative purposes only) - Network accessline 61
 **Figure :** Featured cluster with the \`RecipeEntity\`. (\*UI for illustrative purposes only) - Network accessline 61
 **Figure :** Featured cluster with the \`RecipeEntity\`. (\*UI for illustrative purposes only) - Network accessline 70
 **Figure:** Food Shopping Cart cluster from a single partner. (\*UI for illustrative purposes only) - Network accessline 70
 **Figure:** Food Shopping Cart cluster from a single partner. (\*UI for illustrative purposes only) - Network accessline 76
 **Figure:** Food Shopping List cluster from a single partner. (\*UI for illustrative purposes only) - Network accessline 76
 **Figure:** Food Shopping List cluster from a single partner. (\*UI for illustrative purposes only) - Network accessline 87
 **Figure:** Food Reorder cluster from a single partner. (\*UI for illustrative purposes only) - Network accessline 87
 **Figure:** Food Reorder cluster from a single partner. (\*UI for illustrative purposes only) - Network accessline 102
The design is based on an implementation of a [bound service](https://developer.android.com/guide/components/bound-services). - Network accessline 102
The design is based on an implementation of a [bound service](https://developer.android.com/guide/components/bound-services). - Network accessline 103
service](https://developer.android.com/guide/components/bound-services). - Network accessline 103
service](https://developer.android.com/guide/components/bound-services). - Network accessline 139
 **Figure :** Attributes of `ProductEntity` - Network accessline 139
 **Figure :** Attributes of `ProductEntity` - Network accessline 143
| Attribute | Requirement | Description | Format | |---|---|---|---| | Poster images | **Required** | At least one image must be provided. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/food#image-specs) fo - Network accessline 143
| Attribute | Requirement | Description | Format | |---|---|---|---| | Poster images | **Required** | At least one image must be provided. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/food#image-specs) fo - Network accessline 144
|---|---|---|---| | Poster images | **Required** | At least one image must be provided. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/food#image-specs) for guidance. | | Action Uri | **Required** | The dee - Network accessline 144
|---|---|---|---| | Poster images | **Required** | At least one image must be provided. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/food#image-specs) for guidance. | | Action Uri | **Required** | The dee - Network accessline 145
| Poster images | **Required** | At least one image must be provided. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/food#image-specs) for guidance. | - Network accessline 145
| Poster images | **Required** | At least one image must be provided. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/food#image-specs) for guidance. | - Network accessline 146
| Action Uri | **Required** | The deep link to the page in the app displaying details about the product. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-att - Network accessline 146
| Action Uri | **Required** | The deep link to the page in the app displaying details about the product. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-att - Network accessline 168
 **Figure :** Attributes of `StoreEntity` - Network accessline 168
 **Figure :** Attributes of `StoreEntity` - Network accessline 172
| Attribute | Requirement | Description | Format | |---|---|---|---| | Poster images | **Required** | At least one image must be provided. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/food#image-specs) fo - Network accessline 172
| Attribute | Requirement | Description | Format | |---|---|---|---| | Poster images | **Required** | At least one image must be provided. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/food#image-specs) fo - Network accessline 173
|---|---|---|---| | Poster images | **Required** | At least one image must be provided. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/food#image-specs) for guidance. | | Action Uri | **Required** | The dee - Network accessline 173
|---|---|---|---| | Poster images | **Required** | At least one image must be provided. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/food#image-specs) for guidance. | | Action Uri | **Required** | The dee - Network accessline 174
| Poster images | **Required** | At least one image must be provided. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/food#image-specs) for guidance. | - Network accessline 174
| Poster images | **Required** | At least one image must be provided. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/food#image-specs) for guidance. | - Network accessline 175
| Action Uri | **Required** | The deep link to the page in the app displaying details about the store. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attri - Network accessline 175
| Action Uri | **Required** | The deep link to the page in the app displaying details about the store. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attri - Network accessline 195
 **Figure :** Attributes of `RecipeEntity` - Network accessline 195
 **Figure :** Attributes of `RecipeEntity` - Network accessline 199
| Attribute | Requirement | Description | Format | |---|---|---|---| | Poster images | **Required** | At least one image must be provided. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/food#image-specs) fo - Network accessline 199
| Attribute | Requirement | Description | Format | |---|---|---|---| | Poster images | **Required** | At least one image must be provided. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/food#image-specs) fo - Network accessline 200
|---|---|---|---| | Poster images | **Required** | At least one image must be provided. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/food#image-specs) for guidance. | | Action Uri | **Required** | The dee - Network accessline 200
|---|---|---|---| | Poster images | **Required** | At least one image must be provided. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/food#image-specs) for guidance. | | Action Uri | **Required** | The dee - Network accessline 201
| Poster images | **Required** | At least one image must be provided. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/food#image-specs) for guidance. | - Network accessline 201
| Poster images | **Required** | At least one image must be provided. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/food#image-specs) for guidance. | - Network accessline 202
| Action Uri | **Required** | The deep link to the page in the app displaying details about the recipe. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attr - Network accessline 202
| Action Uri | **Required** | The deep link to the page in the app displaying details about the recipe. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attr - Network accessline 219
 **Figure:** Food Shopping Cart cluster attributes. - Network accessline 219
 **Figure:** Food Shopping Cart cluster attributes. - Network accessline 223
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | The deep link to the shopping cart in the partner's app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer. - Network accessline 223
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | The deep link to the shopping cart in the partner's app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer. - Network accessline 224
|---|---|---|---| | Action Uri | **Required** | The deep link to the shopping cart in the partner's app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-att - Network accessline 224
|---|---|---|---| | Action Uri | **Required** | The deep link to the shopping cart in the partner's app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-att - Network accessline 225
| Action Uri | **Required** | The deep link to the shopping cart in the partner's app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 225
| Action Uri | **Required** | The deep link to the shopping cart in the partner's app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 228
| Title | Optional | The title of the cart (for example, *Your cart*). **If no title is provided by the developer, *Your cart* is the default.** | Free text **Recommended text size: under 25 chars** (Text that is too long may show ellipses) - Network accessline 228
| Title | Optional | The title of the cart (for example, *Your cart*). **If no title is provided by the developer, *Your cart* is the default.** | Free text **Recommended text size: under 25 chars** (Text that is too long may show ellipses) - Network accessline 229
| Action Text | Optional | The call to action text of the button on the Shopping Cart (for example, *Your Shopping Bag*). **If no action text is provided by the developer, *View Cart* is the default.** This attribute is supported in version - Network accessline 229
| Action Text | Optional | The call to action text of the button on the Shopping Cart (for example, *Your Shopping Bag*). **If no action text is provided by the developer, *View Cart* is the default.** This attribute is supported in version - Network accessline 230
| Cart images | Optional | Images of each product in the cart. **Up to 10 images can be provided in order of priority; the actual number of images displayed depends on the device form factor.** | See [Image Specifications](https://developer - Network accessline 230
| Cart images | Optional | Images of each product in the cart. **Up to 10 images can be provided in order of priority; the actual number of images displayed depends on the device form factor.** | See [Image Specifications](https://developer - Network accessline 240
 **Figure:** Food Shopping List cluster. - Network accessline 240
 **Figure:** Food Shopping List cluster. - Network accessline 244
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | The deep link to the shopping list in the partner's app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer. - Network accessline 244
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | The deep link to the shopping list in the partner's app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer. - Network accessline 245
|---|---|---|---| | Action Uri | **Required** | The deep link to the shopping list in the partner's app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-att - Network accessline 245
|---|---|---|---| | Action Uri | **Required** | The deep link to the shopping list in the partner's app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-att - Network accessline 246
| Action Uri | **Required** | The deep link to the shopping list in the partner's app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 246
| Action Uri | **Required** | The deep link to the shopping list in the partner's app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 256
 **Figure:** Food Reorder cluster. - Network accessline 256
 **Figure:** Food Reorder cluster. - Network accessline 260
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | The deep link to reorder in the partner's app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.co - Network accessline 260
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | The deep link to reorder in the partner's app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.co - Network accessline 261
|---|---|---|---| | Action Uri | **Required** | The deep link to reorder in the partner's app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) - Network accessline 261
|---|---|---|---| | Action Uri | **Required** | The deep link to reorder in the partner's app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) - Network accessline 262
| Action Uri | **Required** | The deep link to reorder in the partner's app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 262
| Action Uri | **Required** | The deep link to reorder in the partner's app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 265
| Title | **Required** | The title of the reorder item. | Free text **Recommended text size: under 40 chars** (Text that is too long may show ellipses) | | Item labels | Optional (If not provided, poster images should be provided) | The lis - Network accessline 265
| Title | **Required** | The title of the reorder item. | Free text **Recommended text size: under 40 chars** (Text that is too long may show ellipses) | | Item labels | Optional (If not provided, poster images should be provided) | The lis - Network accessline 267
| Poster images | Optional (If not provided, item labels should be provided) | Images of the items in the previous order. **Up to 10 images can be provided in order of priority; the actual number of images displayed depends on the device fo - Network accessline 267
| Poster images | Optional (If not provided, item labels should be provided) | Images of the items in the previous order. **Up to 10 images can be provided in order of priority; the actual number of images displayed depends on the device fo - Network accessline 294
It is recommended to have the content publish job executed in the background (for example, using [WorkManager](https://developer.android.com/topic/libraries/architecture/workmanager)) - Network accessline 294
It is recommended to have the content publish job executed in the background (for example, using [WorkManager](https://developer.android.com/topic/libraries/architecture/workmanager)) - Network accessline 295
(for example, using [WorkManager](https://developer.android.com/topic/libraries/architecture/workmanager)) - Network accessline 295
(for example, using [WorkManager](https://developer.android.com/topic/libraries/architecture/workmanager)) - Network accessline 329
[View on GitHub](https://github.com/android/skills/tree/main/play/engage-sdk-integration) - Network accessline 329
[View on GitHub](https://github.com/android/skills/tree/main/play/engage-sdk-integration) - Network accessline 333
To install the skill from the [Android CLI](https://developer.android.com/tools/agents/android-cli), run: - Network accessline 333
To install the skill from the [Android CLI](https://developer.android.com/tools/agents/android-cli), run: - Network accessline 470
| Title | **Required** | The title for the Recommendation Cluster (for example, *Big savings on Thanksgiving menu*). **Recommended text size: under 25 chars** (Text that is too long may show ellipses) | | Subtitle | Optional | The subtitle - Network accessline 470
| Title | **Required** | The title for the Recommendation Cluster (for example, *Big savings on Thanksgiving menu*). **Recommended text size: under 25 chars** (Text that is too long may show ellipses) | | Subtitle | Optional | The subtitle - Network accessline 472
| Action Uri | Optional | The deep link to the page in the partner app where users can see the complete list of recommendations. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/ - Network accessline 472
| Action Uri | Optional | The deep link to the page in the partner app where users can see the complete list of recommendations. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/ - Network accessline 677
.addPosterImage( Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 677
.addPosterImage( Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 678
Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(500) - Network accessline 678
Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(500) - Network accessline 679
.setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 679
.setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 682
.build()) .setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 682
.build()) .setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 683
.setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) .build() - Network accessline 683
.setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) .build() - Network accessline 684
.setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 684
.setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 696
.addPosterImage( new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 696
.addPosterImage( new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 697
new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(500) - Network accessline 697
new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(500) - Network accessline 698
.setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 698
.setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 701
.build()) .setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 701
.build()) .setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 702
.setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) .build(); - Network accessline 702
.setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) .build(); - Network accessline 703
.setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 703
.setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 987
In addition to making publish content API calls through a job, it is also required to set up a [`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive - Network accessline 987
In addition to making publish content API calls through a job, it is also required to set up a [`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive - Network accessline 988
required to set up a [`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive the request for a content publish. - Network accessline 988
required to set up a [`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive the request for a content publish. - Network accessline 989
[`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive - Network accessline 989
[`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive - Network accessline 1138
The following [intents](https://developer.android.com/reference/android/content/Intent) will be sent by the - Network accessline 1138
The following [intents](https://developer.android.com/reference/android/content/Intent) will be sent by the - Network accessline 1149
For a step-by-step guide on verifying your integration after it is complete, see [Engage developer integration workflow](https://developer.android.com/guide/playcore/engage/workflow). - Network accessline 1149
For a step-by-step guide on verifying your integration after it is complete, see [Engage developer integration workflow](https://developer.android.com/guide/playcore/engage/workflow). - Network accessline 1150
[Engage developer integration workflow](https://developer.android.com/guide/playcore/engage/workflow). - Network accessline 1150
[Engage developer integration workflow](https://developer.android.com/guide/playcore/engage/workflow). - Network accessline 1154
See [Engage SDK Frequently Asked Questions](https://developer.android.com/guide/playcore/engage/faq) for - Network accessline 1154
See [Engage SDK Frequently Asked Questions](https://developer.android.com/guide/playcore/engage/faq) for
play/engage-sdk-integration/references/android/guide/playcore/engage/healthandfitness.md
- Network accessline 2
to deliver personalized recommendations and continuation content directly to users across multiple on-device surfaces, like **[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html - Network accessline 2
to deliver personalized recommendations and continuation content directly to users across multiple on-device surfaces, like **[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html - Network accessline 3
users across multiple on-device surfaces, like **[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html)** , **[Entertainment Space](https://blog.google/products/android/entertainm - Network accessline 3
users across multiple on-device surfaces, like **[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html)** , **[Entertainment Space](https://blog.google/products/android/entertainm - Network accessline 4
**[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html)** , **[Entertainment - Network accessline 4
**[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html)** , **[Entertainment - Network accessline 5
Space](https://blog.google/products/android/entertainment-space/)** , and the Play Store. The integration adds - Network accessline 5
Space](https://blog.google/products/android/entertainment-space/)** , and the Play Store. The integration adds - Network accessline 6
less than 50 KB (compressed) to the average APK and takes most apps about a week of developer time. Learn more at our **[business site](http://play.google.com/console/about/programs/EngageSDK)**. - Network accessline 6
less than 50 KB (compressed) to the average APK and takes most apps about a week of developer time. Learn more at our **[business site](http://play.google.com/console/about/programs/EngageSDK)**. - Network accessline 8
site](http://play.google.com/console/about/programs/EngageSDK)**. - Network accessline 8
site](http://play.google.com/console/about/programs/EngageSDK)**. - Network accessline 26
[View on GitHub](https://github.com/android/skills/tree/main/play/engage-sdk-integration) - Network accessline 26
[View on GitHub](https://github.com/android/skills/tree/main/play/engage-sdk-integration) - Network accessline 30
Use the Engage SDK [Android skill](https://developer.android.com/tools/agents/android-skills) to integrate, debug, and resolve implementation issues. To install the skill from the [Android CLI](https://developer.android.com/tools/agents/and - Network accessline 30
Use the Engage SDK [Android skill](https://developer.android.com/tools/agents/android-skills) to integrate, debug, and resolve implementation issues. To install the skill from the [Android CLI](https://developer.android.com/tools/agents/and - Network accessline 66
 **Figure 1:** UI showing a single ArticleEntity within Recommendations cluster. - Network accessline 66
 **Figure 1:** UI showing a single ArticleEntity within Recommendations cluster. - Network accessline 71
 **Figure 2:** UI showing a single PersonEntity within Recommendations cluster. - Network accessline 71
 **Figure 2:** UI showing a single PersonEntity within Recommendations cluster. - Network accessline 78
 **Figure 3:** UI showing a single EventEntity within Recommendations cluster. - Network accessline 78
 **Figure 3:** UI showing a single EventEntity within Recommendations cluster. - Network accessline 91
 **Figure 6.** UI showing a single ArticleEntity within a Continuation cluster. - Network accessline 91
 **Figure 6.** UI showing a single ArticleEntity within a Continuation cluster. - Network accessline 96
 **Figure 8.** UI showing a single EventReservationEntity within a Continuation cluster. - Network accessline 96
 **Figure 8.** UI showing a single EventReservationEntity within a Continuation cluster. - Network accessline 108
 **Figure 12:** UI showing a single hero GenericFeaturedEntity card within a Featured cluster - Network accessline 108
 **Figure 12:** UI showing a single hero GenericFeaturedEntity card within a Featured cluster - Network accessline 123
The design is based on an implementation of a [bound service](https://developer.android.com/guide/components/bound-services). - Network accessline 123
The design is based on an implementation of a [bound service](https://developer.android.com/guide/components/bound-services). - Network accessline 124
[bound service](https://developer.android.com/guide/components/bound-services). - Network accessline 124
[bound service](https://developer.android.com/guide/components/bound-services). - Network accessline 151
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 151
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 152
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 152
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 153
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 153
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 154
| Poster images | **Required** | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** If a badge is provided, please ensure safe space of 24 dps at both the top and bottom of the image | Se - Network accessline 154
| Poster images | **Required** | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** If a badge is provided, please ensure safe space of 24 dps at both the top and bottom of the image | Se - Network accessline 158
| Badges | Optional | Each badge is either free text (max 15 chars) or small image. Special UX treatment on top of image/video, for example as badge overlay on the image - "Live update" - Article read duration | | | Badge - Text | Optiona - Network accessline 158
| Badges | Optional | Each badge is either free text (max 15 chars) or small image. Special UX treatment on top of image/video, for example as badge overlay on the image - "Live update" - Article read duration | | | Badge - Text | Optiona - Network accessline 159
| Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 chars** | | Badge - Image | Optional | Small image Special UX treatment, for example as bad - Network accessline 159
| Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 chars** | | Badge - Image | Optional | Small image Special UX treatment, for example as bad - Network accessline 160
| Badge - Image | Optional | Small image Special UX treatment, for example as badge overlay on the image/video thumbnail. **Note:** Either text or image is required for the badge | See [Image Specifications](https://developer.android.com/gu - Network accessline 160
| Badge - Image | Optional | Small image Special UX treatment, for example as badge overlay on the image/video thumbnail. **Note:** Either text or image is required for the badge | See [Image Specifications](https://developer.android.com/gu - Network accessline 161
| Content Categories | Optional | Describe the category of the content in the entity. | List of Enums See the [Content Category section](https://developer.android.com/guide/playcore/engage/healthandfitness#content-category) for guidance. | - Network accessline 161
| Content Categories | Optional | Describe the category of the content in the entity. | List of Enums See the [Content Category section](https://developer.android.com/guide/playcore/engage/healthandfitness#content-category) for guidance. | - Network accessline 165
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 165
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 166
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 166
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 167
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 167
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 168
| Title | **Required** | Title of the entity. | Free text **Recommended text size: Max 50 chars** | | Poster images | Optional | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** Image i - Network accessline 168
| Title | **Required** | Title of the entity. | Free text **Recommended text size: Max 50 chars** | | Poster images | Optional | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** Image i - Network accessline 169
| Poster images | Optional | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** Image is highly recommended. If a badge is provided, please ensure safe space of 24 dps at both the top and - Network accessline 169
| Poster images | Optional | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** Image is highly recommended. If a badge is provided, please ensure safe space of 24 dps at both the top and - Network accessline 170
| Source - Title | Optional | The name of the author, organization, or reporter | Free text **Recommended text size: Under 25 chars** | | Source - Image | Optional | An image of the source like the author, the organization, reporter | See [ - Network accessline 170
| Source - Title | Optional | The name of the author, organization, or reporter | Free text **Recommended text size: Under 25 chars** | | Source - Image | Optional | An image of the source like the author, the organization, reporter | See [ - Network accessline 171
| Source - Image | Optional | An image of the source like the author, the organization, reporter | See [Image Specifications](https://developer.android.com/guide/playcore/engage/healthandfitness#image-specs) for guidance. | - Network accessline 171
| Source - Image | Optional | An image of the source like the author, the organization, reporter | See [Image Specifications](https://developer.android.com/guide/playcore/engage/healthandfitness#image-specs) for guidance. | - Network accessline 174
| Badges | Optional | Each badge is either free text (max 15 chars) or small image. Special UX treatment on top of image/video, for example as badge overlay on the image - "Live update" - Article read duration | | | Badge - Text | Optiona - Network accessline 174
| Badges | Optional | Each badge is either free text (max 15 chars) or small image. Special UX treatment on top of image/video, for example as badge overlay on the image - "Live update" - Article read duration | | | Badge - Text | Optiona - Network accessline 175
| Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 chars** | | Badge - Image | Optional | Small image Special UX treatment, for example as bad - Network accessline 175
| Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 chars** | | Badge - Image | Optional | Small image Special UX treatment, for example as bad - Network accessline 176
| Badge - Image | Optional | Small image Special UX treatment, for example as badge overlay on the image/video thumbnail. **Note:** Either text or image is required for the badge | See [Image Specifications](https://developer.android.com/gu - Network accessline 176
| Badge - Image | Optional | Small image Special UX treatment, for example as badge overlay on the image/video thumbnail. **Note:** Either text or image is required for the badge | See [Image Specifications](https://developer.android.com/gu - Network accessline 178
| Last Engagement Time | Conditionally Required | The epoch timestamp in milliseconds when the user interacted with this entity last time. **Note:** This field is required if this entity is part of the continuation cluster. | Epoch timestam - Network accessline 178
| Last Engagement Time | Conditionally Required | The epoch timestamp in milliseconds when the user interacted with this entity last time. **Note:** This field is required if this entity is part of the continuation cluster. | Epoch timestam - Network accessline 180
| Content Categories | Optional | Describe the category of the content in the entity. | List of Enums See the [Content Category section](https://developer.android.com/guide/playcore/engage/healthandfitness#content-category) for guidance. | - Network accessline 180
| Content Categories | Optional | Describe the category of the content in the entity. | List of Enums See the [Content Category section](https://developer.android.com/guide/playcore/engage/healthandfitness#content-category) for guidance. | - Network accessline 184
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 184
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 185
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 185
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 186
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 186
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 187
| Profile - Name | **Required** | Profile name or id or handle, eg "John Doe", "@TeamPixel", etc. | String **Recommended text size: Max 50 chars** | | Profile - Avatar | **Required** | Profile picture or avatar image of the user. **Note:**M - Network accessline 187
| Profile - Name | **Required** | Profile name or id or handle, eg "John Doe", "@TeamPixel", etc. | String **Recommended text size: Max 50 chars** | | Profile - Avatar | **Required** | Profile picture or avatar image of the user. **Note:**M - Network accessline 188
| Profile - Avatar | **Required** | Profile picture or avatar image of the user. **Note:**Must be Square 1:1 image. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/healthandfitness#image-specs) for guidance. - Network accessline 188
| Profile - Avatar | **Required** | Profile picture or avatar image of the user. **Note:**Must be Square 1:1 image. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/healthandfitness#image-specs) for guidance. - Network accessline 189
| Profile - Additional Text | Optional | Free text like the profile handle. | Free text **Recommended text size: Max 15 chars** | | Profile - Additional Image | Optional | Small image like a verified badge. | See [Image Specifications](http - Network accessline 189
| Profile - Additional Text | Optional | Free text like the profile handle. | Free text **Recommended text size: Max 15 chars** | | Profile - Additional Image | Optional | Small image like a verified badge. | See [Image Specifications](http - Network accessline 190
| Profile - Additional Image | Optional | Small image like a verified badge. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/healthandfitness#image-specs) for guidance. | - Network accessline 190
| Profile - Additional Image | Optional | Small image like a verified badge. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/healthandfitness#image-specs) for guidance. | - Network accessline 191
| Header image | Optional | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** Image is highly recommended. If a badge is provided, please ensure safe space of 24 dps at both the top and - Network accessline 191
| Header image | Optional | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** Image is highly recommended. If a badge is provided, please ensure safe space of 24 dps at both the top and - Network accessline 193
| Popularity - Count Value | Optional | The number of followers or popularity value. **Note:** Provide Count Value if your app doesn't want to handle logic on how a large number should be optimized for different display sizes. If both Count - Network accessline 193
| Popularity - Count Value | Optional | The number of followers or popularity value. **Note:** Provide Count Value if your app doesn't want to handle logic on how a large number should be optimized for different display sizes. If both Count - Network accessline 194
| Popularity - Label | Optional | Indicate what the popularity label is. For example - "Likes". | String **Recommended text size: Max 20 chars for count + label combined** | | Popularity - Visual | Optional | Indicate what the interaction i - Network accessline 194
| Popularity - Label | Optional | Indicate what the popularity label is. For example - "Likes". | String **Recommended text size: Max 20 chars for count + label combined** | | Popularity - Visual | Optional | Indicate what the interaction i - Network accessline 195
| Popularity - Visual | Optional | Indicate what the interaction is for. For example - Image showing Likes icon, emoji. Can provide more than 1 image, though not all may not be shown on all form factors. **Note:** Must be Square 1:1 image | - Network accessline 195
| Popularity - Visual | Optional | Indicate what the interaction is for. For example - Image showing Likes icon, emoji. Can provide more than 1 image, though not all may not be shown on all form factors. **Note:** Must be Square 1:1 image | - Network accessline 207
| Badges | Optional | Each badge is either free text (max 15 chars) or small image. | | | Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 c - Network accessline 207
| Badges | Optional | Each badge is either free text (max 15 chars) or small image. | | | Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 c - Network accessline 208
| Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 chars** | | Badge - Image | Optional | Small image Special UX treatment, for example as bad - Network accessline 208
| Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 chars** | | Badge - Image | Optional | Small image Special UX treatment, for example as bad - Network accessline 209
| Badge - Image | Optional | Small image Special UX treatment, for example as badge overlay on the image/video thumbnail. **Note:** Either text or image is required for the badge | See [Image Specifications](https://developer.android.com/gu - Network accessline 209
| Badge - Image | Optional | Small image Special UX treatment, for example as badge overlay on the image/video thumbnail. **Note:** Either text or image is required for the badge | See [Image Specifications](https://developer.android.com/gu - Network accessline 210
| Description | Optional | A single paragraph of text to describe the entity. **Note:** Either description or subtitle list will be displayed to the user, not both. | Free text **Recommended text size: 180 chars** | | Subtitle list | Option - Network accessline 210
| Description | Optional | A single paragraph of text to describe the entity. **Note:** Either description or subtitle list will be displayed to the user, not both. | Free text **Recommended text size: 180 chars** | | Subtitle list | Option - Network accessline 212
| Content Categories | Optional | Describe the category of the content in the entity. | List of Eligible Enums - TYPE_HEALTH_AND_FITENESS (Example - Yoga/fitness trainer) - TYPE_HOME_AND_AUTO (Example - Plumber) - TYPE_SPORTS (Example - Pla - Network accessline 212
| Content Categories | Optional | Describe the category of the content in the entity. | List of Eligible Enums - TYPE_HEALTH_AND_FITENESS (Example - Yoga/fitness trainer) - TYPE_HOME_AND_AUTO (Example - Plumber) - TYPE_SPORTS (Example - Pla - Network accessline 216
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 216
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 217
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 217
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 218
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 218
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 220
| Start time | **Required** | The epoch timestamp when the event is expected to start. **Note:**This will be represented in milliseconds. | Epoch timestamp in milliseconds | | Event mode | **Required** | A field to indicate whether the even - Network accessline 220
| Start time | **Required** | The epoch timestamp when the event is expected to start. **Note:**This will be represented in milliseconds. | Epoch timestamp in milliseconds | | Event mode | **Required** | A field to indicate whether the even - Network accessline 221
| Event mode | **Required** | A field to indicate whether the event will be virtual, in-person or both. | Enum: VIRTUAL, IN_PERSON, or HYBRID | | Poster images | **Required** | We will show only 1 image when multiple images are provided. Re - Network accessline 221
| Event mode | **Required** | A field to indicate whether the event will be virtual, in-person or both. | Enum: VIRTUAL, IN_PERSON, or HYBRID | | Poster images | **Required** | We will show only 1 image when multiple images are provided. Re - Network accessline 222
| Poster images | **Required** | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** Image is highly recommended. If a badge is provided, please ensure safe space of 24 dps at both the top - Network accessline 222
| Poster images | **Required** | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** Image is highly recommended. If a badge is provided, please ensure safe space of 24 dps at both the top - Network accessline 233
| Badges | Optional | Each badge is either free text (max 15 chars) or small image. | | | Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 c - Network accessline 233
| Badges | Optional | Each badge is either free text (max 15 chars) or small image. | | | Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 c - Network accessline 234
| Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 chars** | | Badge - Image | Optional | Small image Special UX treatment, for example as bad - Network accessline 234
| Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 chars** | | Badge - Image | Optional | Small image Special UX treatment, for example as bad - Network accessline 235
| Badge - Image | Optional | Small image Special UX treatment, for example as badge overlay on the image/video thumbnail. **Note:** Either text or image is required for the badge | See [Image Specifications](https://developer.android.com/gu - Network accessline 235
| Badge - Image | Optional | Small image Special UX treatment, for example as badge overlay on the image/video thumbnail. **Note:** Either text or image is required for the badge | See [Image Specifications](https://developer.android.com/gu - Network accessline 237
| Price - StrikethroughPrice | Optional | The original price of the ticket/pass for the event. | Free text | | Price Callout | Optional | Price callout to feature a promo, event, member discount, if available. | Free text **Recommended text - Network accessline 237
| Price - StrikethroughPrice | Optional | The original price of the ticket/pass for the event. | Free text | | Price Callout | Optional | Price callout to feature a promo, event, member discount, if available. | Free text **Recommended text - Network accessline 239
| Content Categories | Optional | Describe the category of the content in the entity. | List of Eligible Enums - TYPE_MOVIES_AND_TV_SHOWS (Example - Cinema) - TYPE_DIGITAL_GAMES (Example - eSports) - TYPE_MUSIC (Example - Concert) - TYPE_TR - Network accessline 239
| Content Categories | Optional | Describe the category of the content in the entity. | List of Eligible Enums - TYPE_MOVIES_AND_TV_SHOWS (Example - Cinema) - TYPE_DIGITAL_GAMES (Example - eSports) - TYPE_MUSIC (Example - Concert) - TYPE_TR - Network accessline 243
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 243
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 244
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 244
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 245
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 245
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 254
| Location - Zip code | Optional | The zip code (if applicable) of the location in which the event is being hosted. | Free text **Recommended text size: max \~20 chars** | | Location - Neighborhood | Optional | The neighborhood (if applicab - Network accessline 254
| Location - Zip code | Optional | The zip code (if applicable) of the location in which the event is being hosted. | Free text **Recommended text size: max \~20 chars** | | Location - Neighborhood | Optional | The neighborhood (if applicab - Network accessline 255
| Location - Neighborhood | Optional | The neighborhood (if applicable) in which the event is being hosted. | Free text **Recommended text size: max \~20 chars** | | Poster images | Optional | We will show only 1 image when multiple images - Network accessline 255
| Location - Neighborhood | Optional | The neighborhood (if applicable) in which the event is being hosted. | Free text **Recommended text size: max \~20 chars** | | Poster images | Optional | We will show only 1 image when multiple images - Network accessline 256
| Poster images | Optional | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** Image is highly recommended. If a badge is provided, please ensure safe space of 24 dps at both the top and - Network accessline 256
| Poster images | Optional | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** Image is highly recommended. If a badge is provided, please ensure safe space of 24 dps at both the top and - Network accessline 257
| End time | Optional | The epoch timestamp when the event is expected to end. **Note:**This will be represented in milliseconds. | Epoch timestamp in milliseconds | | Service Provider - Name | Optional | The name of the service provider. * - Network accessline 257
| End time | Optional | The epoch timestamp when the event is expected to end. **Note:**This will be represented in milliseconds. | Epoch timestamp in milliseconds | | Service Provider - Name | Optional | The name of the service provider. * - Network accessline 258
| Service Provider - Name | Optional | The name of the service provider. **Note:**Either text or image is required for the service provider. | Free text. For example, name of the event organizer/tour | | Service Provider - Image | Optional - Network accessline 258
| Service Provider - Name | Optional | The name of the service provider. **Note:**Either text or image is required for the service provider. | Free text. For example, name of the event organizer/tour | | Service Provider - Image | Optional - Network accessline 259
| Service Provider - Image | Optional | The logo/image of the service provider. **Note:**Either text or image is required for the service provider. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/healthandfi - Network accessline 259
| Service Provider - Image | Optional | The logo/image of the service provider. **Note:**Either text or image is required for the service provider. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/healthandfi - Network accessline 262
| Badges | Optional | Each badge is either free text (max 15 chars) or small image. | | | Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 c - Network accessline 262
| Badges | Optional | Each badge is either free text (max 15 chars) or small image. | | | Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 c - Network accessline 263
| Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 chars** | | Badge - Image | Optional | Small image Special UX treatment, for example as bad - Network accessline 263
| Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 chars** | | Badge - Image | Optional | Small image Special UX treatment, for example as bad - Network accessline 264
| Badge - Image | Optional | Small image Special UX treatment, for example as badge overlay on the image/video thumbnail. **Note:** Either text or image is required for the badge | See [Image Specifications](https://developer.android.com/gu - Network accessline 264
| Badge - Image | Optional | Small image Special UX treatment, for example as badge overlay on the image/video thumbnail. **Note:** Either text or image is required for the badge | See [Image Specifications](https://developer.android.com/gu - Network accessline 271
| Rating - Count | Optional | The count of the ratings for the event. **Note:** Provide this field if your app wants to control how this is displayed to the users. Please provide the concise string that can be displayed to the user. For exa - Network accessline 271
| Rating - Count | Optional | The count of the ratings for the event. **Note:** Provide this field if your app wants to control how this is displayed to the users. Please provide the concise string that can be displayed to the user. For exa - Network accessline 273
| Content Categories | Optional | Describe the category of the content in the entity. | List of Eligible Enums - TYPE_MOVIES_AND_TV_SHOWS (Example - Cinema) - TYPE_DIGITAL_GAMES (Example - eSports) - TYPE_MUSIC (Example - Concert) - TYPE_TR - Network accessline 273
| Content Categories | Optional | Describe the category of the content in the entity. | List of Eligible Enums - TYPE_MOVIES_AND_TV_SHOWS (Example - Cinema) - TYPE_DIGITAL_GAMES (Example - eSports) - TYPE_MUSIC (Example - Concert) - TYPE_TR - Network accessline 333
- TYPE_MOVIES_AND_TV_SHOWS - Check out the entities from [Watch integration guide](https://developer.android.com/guide/playcore/engage/watch) before using the generic entities. - Network accessline 333
- TYPE_MOVIES_AND_TV_SHOWS - Check out the entities from [Watch integration guide](https://developer.android.com/guide/playcore/engage/watch) before using the generic entities. - Network accessline 334
- TYPE_BOOKS - Check out the [EbookEntity](https://developer.android.com/guide/playcore/engage/read#ebookentity) before using the generic entities. - Network accessline 334
- TYPE_BOOKS - Check out the [EbookEntity](https://developer.android.com/guide/playcore/engage/read#ebookentity) before using the generic entities. - Network accessline 335
- TYPE_AUDIOBOOKS - Check out [AudiobookEntity](https://developer.android.com/guide/playcore/engage/read#audiobookentity) before using the generic entities. - Network accessline 335
- TYPE_AUDIOBOOKS - Check out [AudiobookEntity](https://developer.android.com/guide/playcore/engage/read#audiobookentity) before using the generic entities. - Network accessline 336
- TYPE_SHOPPING - Check out [ShoppingEntity](https://developer.android.com/guide/playcore/engage/shopping#shoppingEntity) before using the generic entities. - Network accessline 336
- TYPE_SHOPPING - Check out [ShoppingEntity](https://developer.android.com/guide/playcore/engage/shopping#shoppingEntity) before using the generic entities. - Network accessline 337
- TYPE_FOOD_AND_DRINK - Check out entities from [Food Integration guide](https://developer.android.com/guide/playcore/engage/food) before using the generic entities. - Network accessline 337
- TYPE_FOOD_AND_DRINK - Check out entities from [Food Integration guide](https://developer.android.com/guide/playcore/engage/food) before using the generic entities. - Network accessline 347
It is recommended to have the content publish job executed in the background (for example, using [WorkManager](https://developer.android.com/topic/libraries/architecture/workmanager)) - Network accessline 347
It is recommended to have the content publish job executed in the background (for example, using [WorkManager](https://developer.android.com/topic/libraries/architecture/workmanager)) - Network accessline 348
(for example, using [WorkManager](https://developer.android.com/topic/libraries/architecture/workmanager)) - Network accessline 348
(for example, using [WorkManager](https://developer.android.com/topic/libraries/architecture/workmanager)) - Network accessline 378
[View on GitHub](https://github.com/android/skills/tree/main/play/engage-sdk-integration) - Network accessline 378
[View on GitHub](https://github.com/android/skills/tree/main/play/engage-sdk-integration) - Network accessline 382
To install the skill from the [Android CLI](https://developer.android.com/tools/agents/android-cli), run: - Network accessline 382
To install the skill from the [Android CLI](https://developer.android.com/tools/agents/android-cli), run: - Network accessline 648
.addPosterImage( Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 648
.addPosterImage( Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 649
Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(500) - Network accessline 649
Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(500) - Network accessline 650
.setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 650
.setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 653
.build()) .setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 653
.build()) .setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 654
.setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) .build() - Network accessline 654
.setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) .build() - Network accessline 655
.setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 655
.setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 667
.addPosterImage( new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 667
.addPosterImage( new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 668
new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(500) - Network accessline 668
new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(500) - Network accessline 669
.setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 669
.setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 672
.build()) .setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 672
.build()) .setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 673
.setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) .build(); - Network accessline 673
.setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) .build(); - Network accessline 674
.setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 674
.setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 935
In addition to making publish content API calls through a job, it is also required to set up a [`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive - Network accessline 935
In addition to making publish content API calls through a job, it is also required to set up a [`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive - Network accessline 936
required to set up a [`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive the request for a content publish. - Network accessline 936
required to set up a [`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive the request for a content publish. - Network accessline 937
[`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive - Network accessline 937
[`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive - Network accessline 1045
The following [intents](https://developer.android.com/reference/android/content/Intent) is sent by the - Network accessline 1045
The following [intents](https://developer.android.com/reference/android/content/Intent) is sent by the - Network accessline 1054
For a step-by-step guide on verifying your integration after it is complete, see [Engage developer integration workflow](https://developer.android.com/guide/playcore/engage/workflow). - Network accessline 1054
For a step-by-step guide on verifying your integration after it is complete, see [Engage developer integration workflow](https://developer.android.com/guide/playcore/engage/workflow). - Network accessline 1055
[Engage developer integration workflow](https://developer.android.com/guide/playcore/engage/workflow). - Network accessline 1055
[Engage developer integration workflow](https://developer.android.com/guide/playcore/engage/workflow). - Network accessline 1059
See [Engage SDK Frequently Asked Questions](https://developer.android.com/guide/playcore/engage/faq) for - Network accessline 1059
See [Engage SDK Frequently Asked Questions](https://developer.android.com/guide/playcore/engage/faq) for
play/engage-sdk-integration/references/android/guide/playcore/engage/listen.md
- Network accessline 2
to deliver personalized recommendations and continuation content directly to users across multiple on-device surfaces, like **[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html - Network accessline 2
to deliver personalized recommendations and continuation content directly to users across multiple on-device surfaces, like **[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html - Network accessline 3
users across multiple on-device surfaces, like **[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html)** , **[Entertainment Space](https://blog.google/products/android/entertainm - Network accessline 3
users across multiple on-device surfaces, like **[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html)** , **[Entertainment Space](https://blog.google/products/android/entertainm - Network accessline 4
**[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html)** , **[Entertainment - Network accessline 4
**[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html)** , **[Entertainment - Network accessline 5
Space](https://blog.google/products/android/entertainment-space/)** , and the Play Store. The integration adds - Network accessline 5
Space](https://blog.google/products/android/entertainment-space/)** , and the Play Store. The integration adds - Network accessline 6
less than 50 KB (compressed) to the average APK and takes most apps about a week of developer time. Learn more at our **[business site](http://play.google.com/console/about/programs/EngageSDK)**. - Network accessline 6
less than 50 KB (compressed) to the average APK and takes most apps about a week of developer time. Learn more at our **[business site](http://play.google.com/console/about/programs/EngageSDK)**. - Network accessline 8
site](http://play.google.com/console/about/programs/EngageSDK)**. - Network accessline 8
site](http://play.google.com/console/about/programs/EngageSDK)**. - Network accessline 27
[View on GitHub](https://github.com/android/skills/tree/main/play/engage-sdk-integration) - Network accessline 27
[View on GitHub](https://github.com/android/skills/tree/main/play/engage-sdk-integration) - Network accessline 31
Use the Engage SDK [Android skill](https://developer.android.com/tools/agents/android-skills) to integrate, debug, and resolve implementation issues. To install the skill from the [Android CLI](https://developer.android.com/tools/agents/and - Network accessline 31
Use the Engage SDK [Android skill](https://developer.android.com/tools/agents/android-skills) to integrate, debug, and resolve implementation issues. To install the skill from the [Android CLI](https://developer.android.com/tools/agents/and - Network accessline 54
 **Figure 1.** Entertainment Space UI showing a Recommendation Cluster from a single partner. - Network accessline 54
 **Figure 1.** Entertainment Space UI showing a Recommendation Cluster from a single partner. - Network accessline 55
- **Entity:** An object representing a single item in a cluster. An entity can be a playlist, an audiobook, a podcast, and more. See the [Provide entity data](https://developer.android.com/guide/playcore/engage/listen#provide-entity - Network accessline 55
- **Entity:** An object representing a single item in a cluster. An entity can be a playlist, an audiobook, a podcast, and more. See the [Provide entity data](https://developer.android.com/guide/playcore/engage/listen#provide-entity - Network accessline 56
can be a playlist, an audiobook, a podcast, and more. See the [Provide entity data](https://developer.android.com/guide/playcore/engage/listen#provide-entity-data) section for a list of supported entity types. - Network accessline 56
can be a playlist, an audiobook, a podcast, and more. See the [Provide entity data](https://developer.android.com/guide/playcore/engage/listen#provide-entity-data) section for a list of supported entity types. - Network accessline 57
entity data](https://developer.android.com/guide/playcore/engage/listen#provide-entity-data) section for a list of supported entity - Network accessline 57
entity data](https://developer.android.com/guide/playcore/engage/listen#provide-entity-data) section for a list of supported entity - Network accessline 60
 **Figure 2.** Entertainment Space UI showing a single Entity within a single partner's Recommendation Cluster. - Network accessline 60
 **Figure 2.** Entertainment Space UI showing a single Entity within a single partner's Recommendation Cluster. - Network accessline 66
 **Figure 3.** Entertainment Space UI showing a Continuation cluster with unfinished recommendations from multiple partners (only one recommendation is - Network accessline 66
 **Figure 3.** Entertainment Space UI showing a Continuation cluster with unfinished recommendations from multiple partners (only one recommendation is - Network accessline 73
 **Figure 4.** Entertainment Space UI showing a Featured cluster with recommendations from multiple partners (only one recommendation is currently visib - Network accessline 73
 **Figure 4.** Entertainment Space UI showing a Featured cluster with recommendations from multiple partners (only one recommendation is currently visib - Network accessline 88
The design is based on an implementation of a [bound service](https://developer.android.com/guide/components/bound-services). - Network accessline 88
The design is based on an implementation of a [bound service](https://developer.android.com/guide/components/bound-services). - Network accessline 89
service](https://developer.android.com/guide/components/bound-services). - Network accessline 89
service](https://developer.android.com/guide/components/bound-services). - Network accessline 124
|---|---|---| | Name | **Required** | The title of the music album. | | Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) f - Network accessline 124
|---|---|---| | Name | **Required** | The title of the music album. | | Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) f - Network accessline 125
| Name | **Required** | The title of the music album. | | Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) for guidance. | - Network accessline 125
| Name | **Required** | The title of the music album. | | Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) for guidance. | - Network accessline 126
| Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) for guidance. | - Network accessline 126
| Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) for guidance. | - Network accessline 127
| Info page uri | **Required** | The deep link to the provider app for details about the music album. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attrib - Network accessline 127
| Info page uri | **Required** | The deep link to the provider app for details about the music album. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attrib - Network accessline 128
| Artists | **Required** | List of artists in the music album. | | Playback uri | Optional | A deep link that starts playing the album in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer. - Network accessline 128
| Artists | **Required** | List of artists in the music album. | | Playback uri | Optional | A deep link that starts playing the album in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer. - Network accessline 129
| Playback uri | Optional | A deep link that starts playing the album in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 129
| Playback uri | Optional | A deep link that starts playing the album in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 147
|---|---|---| | Name | **Required** | Name of the music artist. | | Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) for g - Network accessline 147
|---|---|---| | Name | **Required** | Name of the music artist. | | Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) for g - Network accessline 148
| Name | **Required** | Name of the music artist. | | Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) for guidance. | | I - Network accessline 148
| Name | **Required** | Name of the music artist. | | Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) for guidance. | | I - Network accessline 149
| Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) for guidance. | - Network accessline 149
| Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) for guidance. | - Network accessline 150
| Info page uri | **Required** | The deep link to the provider app for details about the music artist. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attri - Network accessline 150
| Info page uri | **Required** | The deep link to the provider app for details about the music artist. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attri - Network accessline 151
| Playback uri | Optional | The deep link which starts playing the artist's songs in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attri - Network accessline 151
| Playback uri | Optional | The deep link which starts playing the artist's songs in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attri - Network accessline 161
|---|---|---| | Name | **Required** | Title of the music track. | | Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) for g - Network accessline 161
|---|---|---| | Name | **Required** | Title of the music track. | | Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) for g - Network accessline 162
| Name | **Required** | Title of the music track. | | Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) for guidance. | | P - Network accessline 162
| Name | **Required** | Title of the music track. | | Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) for guidance. | | P - Network accessline 163
| Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) for guidance. | - Network accessline 163
| Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) for guidance. | - Network accessline 164
| Playback uri | **Required** | A deep link that starts playing the music track in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribu - Network accessline 164
| Playback uri | **Required** | A deep link that starts playing the music track in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribu - Network accessline 165
| Artists | **Required** | List of artists for the music track. | | Info page uri | Optional | A deep link to the provider app for details about the music track. Note: You can use deep links for attribution. [Refer to this FAQ](https://deve - Network accessline 165
| Artists | **Required** | List of artists for the music track. | | Info page uri | Optional | A deep link to the provider app for details about the music track. Note: You can use deep links for attribution. [Refer to this FAQ](https://deve - Network accessline 166
| Info page uri | Optional | A deep link to the provider app for details about the music track. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) - Network accessline 166
| Info page uri | Optional | A deep link to the provider app for details about the music track. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) - Network accessline 181
|---|---|---| | Name | **Required** | Title of the music video. | | Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) for g - Network accessline 181
|---|---|---| | Name | **Required** | Title of the music video. | | Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) for g - Network accessline 182
| Name | **Required** | Title of the music video. | | Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) for guidance. | | P - Network accessline 182
| Name | **Required** | Title of the music video. | | Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) for guidance. | | P - Network accessline 183
| Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) for guidance. | - Network accessline 183
| Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) for guidance. | - Network accessline 184
| Playback uri | **Required** | A deep link that starts playing the music video in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribu - Network accessline 184
| Playback uri | **Required** | A deep link that starts playing the music video in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribu - Network accessline 185
| Info page uri | Optional | A deep link to the provider app for details about the music video. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) - Network accessline 185
| Info page uri | Optional | A deep link to the provider app for details about the music video. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) - Network accessline 202
|---|---|---| | Name | **Required** | Title of the playlist. | | Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) for guid - Network accessline 202
|---|---|---| | Name | **Required** | Title of the playlist. | | Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) for guid - Network accessline 203
| Name | **Required** | Title of the playlist. | | Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) for guidance. | | Play - Network accessline 203
| Name | **Required** | Title of the playlist. | | Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) for guidance. | | Play - Network accessline 204
| Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) for guidance. | - Network accessline 204
| Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) for guidance. | - Network accessline 205
| Playback uri | **Required** | A deep link that starts playing the music playlist in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attr - Network accessline 205
| Playback uri | **Required** | A deep link that starts playing the music playlist in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attr - Network accessline 206
| Info page uri | Optional | A deep link to the provider app for details about the music playlist. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attributi - Network accessline 206
| Info page uri | Optional | A deep link to the provider app for details about the music playlist. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attributi - Network accessline 221
|---|---|---| | Name | **Required** | Title of the podcast series. | | Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) fo - Network accessline 221
|---|---|---| | Name | **Required** | Title of the podcast series. | | Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) fo - Network accessline 222
| Name | **Required** | Title of the podcast series. | | Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) for guidance. | - Network accessline 222
| Name | **Required** | Title of the podcast series. | | Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) for guidance. | - Network accessline 223
| Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) for guidance. | - Network accessline 223
| Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) for guidance. | - Network accessline 224
| Info page uri | **Required** | A deep link to the provider app for details about the podcast series. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attri - Network accessline 224
| Info page uri | **Required** | A deep link to the provider app for details about the podcast series. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attri - Network accessline 225
| Playback uri | Optional | A deep link that starts playing the podcast series in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribut - Network accessline 225
| Playback uri | Optional | A deep link that starts playing the podcast series in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribut - Network accessline 241
|---|---|---| | Name | **Required** | Title of the podcast episode. | | Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) f - Network accessline 241
|---|---|---| | Name | **Required** | Title of the podcast episode. | | Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) f - Network accessline 242
| Name | **Required** | Title of the podcast episode. | | Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) for guidance. | - Network accessline 242
| Name | **Required** | Title of the podcast episode. | | Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) for guidance. | - Network accessline 243
| Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) for guidance. | - Network accessline 243
| Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) for guidance. | - Network accessline 244
| Playback uri | **Required** | A deep link that starts playing the podcast episode in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-att - Network accessline 244
| Playback uri | **Required** | A deep link that starts playing the podcast episode in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-att - Network accessline 246
| Duration | **Required** | The duration of the podcast episode in milliseconds. | | Publish Date | **Required** | Publish date of the podcast (in epoch milliseconds) | | Info page uri | Optional | A deep link to the provider app for detail - Network accessline 246
| Duration | **Required** | The duration of the podcast episode in milliseconds. | | Publish Date | **Required** | Publish date of the podcast (in epoch milliseconds) | | Info page uri | Optional | A deep link to the provider app for detail - Network accessline 247
| Publish Date | **Required** | Publish date of the podcast (in epoch milliseconds) | | Info page uri | Optional | A deep link to the provider app for details about the podcast episode. Note: You can use deep links for attribution. [Refer t - Network accessline 247
| Publish Date | **Required** | Publish date of the podcast (in epoch milliseconds) | | Info page uri | Optional | A deep link to the provider app for details about the podcast episode. Note: You can use deep links for attribution. [Refer t - Network accessline 248
| Info page uri | Optional | A deep link to the provider app for details about the podcast episode. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribut - Network accessline 248
| Info page uri | Optional | A deep link to the provider app for details about the podcast episode. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribut - Network accessline 267
|---|---|---| | Name | **Required** | Title of the live radio station. | | Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs - Network accessline 267
|---|---|---| | Name | **Required** | Title of the live radio station. | | Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs - Network accessline 268
| Name | **Required** | Title of the live radio station. | | Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) for guidance - Network accessline 268
| Name | **Required** | Title of the live radio station. | | Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) for guidance - Network accessline 269
| Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) for guidance. | - Network accessline 269
| Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) for guidance. | - Network accessline 270
| Playback uri | **Required** | A deep link that starts playing the radio station in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attri - Network accessline 270
| Playback uri | **Required** | A deep link that starts playing the radio station in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attri - Network accessline 271
| Info page uri | Optional | A deep link to the provider app for details about the radio station. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attributio - Network accessline 271
| Info page uri | Optional | A deep link to the provider app for details about the radio station. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attributio - Network accessline 284
|---|---|---| | Name | **Required** | | | Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) for guidance. | - Network accessline 284
|---|---|---| | Name | **Required** | | | Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) for guidance. | - Network accessline 285
| Name | **Required** | | | Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) for guidance. | | Author | **Required** | A - Network accessline 285
| Name | **Required** | | | Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) for guidance. | | Author | **Required** | A - Network accessline 286
| Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) for guidance. | - Network accessline 286
| Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/listen#image-specs) for guidance. | - Network accessline 287
| Author | **Required** | At least one author name must be provided. | | Action link uri | **Required** | The deep link to the provider app for the audiobook. Note: You can use deep links for attribution. [Refer to this FAQ](https://develop - Network accessline 287
| Author | **Required** | At least one author name must be provided. | | Action link uri | **Required** | The deep link to the provider app for the audiobook. Note: You can use deep links for attribution. [Refer to this FAQ](https://develop - Network accessline 288
| Action link uri | **Required** | The deep link to the provider app for the audiobook. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 288
| Action link uri | **Required** | The deep link to the provider app for the audiobook. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 330
.setName(NAME) .addPosterImage(new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 330
.setName(NAME) .addPosterImage(new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 331
.addPosterImage(new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(960) - Network accessline 331
.addPosterImage(new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(960) - Network accessline 332
.setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 332
.setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 334
.setImageWidthInPixel(408) .build()) .setPlayBackUri(Uri.parse("https://play.google/album/play")) - Network accessline 334
.setImageWidthInPixel(408) .build()) .setPlayBackUri(Uri.parse("https://play.google/album/play")) - Network accessline 335
.build()) .setPlayBackUri(Uri.parse("https://play.google/album/play")) .setInfoPageUri(Uri.parse("https://play.google/album/info")) - Network accessline 335
.build()) .setPlayBackUri(Uri.parse("https://play.google/album/play")) .setInfoPageUri(Uri.parse("https://play.google/album/info")) - Network accessline 336
.setPlayBackUri(Uri.parse("https://play.google/album/play")) - Network accessline 336
.setPlayBackUri(Uri.parse("https://play.google/album/play")) - Network accessline 337
.setInfoPageUri(Uri.parse("https://play.google/album/info")) - Network accessline 337
.setInfoPageUri(Uri.parse("https://play.google/album/info")) - Network accessline 349
.setName("Becoming") .addPosterImage(new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 349
.setName("Becoming") .addPosterImage(new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 350
.addPosterImage(new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(960) - Network accessline 350
.addPosterImage(new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(960) - Network accessline 351
.setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 351
.setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 356
.addNarrator("Michelle Obama") .setActionLinkUri( Uri.parse("https://play.google/audiobooks/1")) - Network accessline 356
.addNarrator("Michelle Obama") .setActionLinkUri( Uri.parse("https://play.google/audiobooks/1")) - Network accessline 357
.setActionLinkUri( Uri.parse("https://play.google/audiobooks/1")) .setDurationMillis(16335L) - Network accessline 357
.setActionLinkUri( Uri.parse("https://play.google/audiobooks/1")) .setDurationMillis(16335L) - Network accessline 358
Uri.parse("https://play.google/audiobooks/1")) - Network accessline 358
Uri.parse("https://play.google/audiobooks/1")) - Network accessline 368
It's recommended to have the content publish job executed in the background (for example, using [WorkManager](https://developer.android.com/topic/libraries/architecture/workmanager)) - Network accessline 368
It's recommended to have the content publish job executed in the background (for example, using [WorkManager](https://developer.android.com/topic/libraries/architecture/workmanager)) - Network accessline 369
(for example, using [WorkManager](https://developer.android.com/topic/libraries/architecture/workmanager)) - Network accessline 369
(for example, using [WorkManager](https://developer.android.com/topic/libraries/architecture/workmanager)) - Network accessline 398
[View on GitHub](https://github.com/android/skills/tree/main/play/engage-sdk-integration) - Network accessline 398
[View on GitHub](https://github.com/android/skills/tree/main/play/engage-sdk-integration) - Network accessline 402
To install the skill from the [Android CLI](https://developer.android.com/tools/agents/android-cli), run: - Network accessline 402
To install the skill from the [Android CLI](https://developer.android.com/tools/agents/android-cli), run: - Network accessline 664
.addPosterImage( Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 664
.addPosterImage( Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 665
Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(500) - Network accessline 665
Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(500) - Network accessline 666
.setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 666
.setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 669
.build()) .setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 669
.build()) .setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 670
.setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) .build() - Network accessline 670
.setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) .build() - Network accessline 671
.setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 671
.setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 683
.addPosterImage( new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 683
.addPosterImage( new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 684
new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(500) - Network accessline 684
new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(500) - Network accessline 685
.setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 685
.setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 688
.build()) .setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 688
.build()) .setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 689
.setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) .build(); - Network accessline 689
.setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) .build(); - Network accessline 690
.setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 690
.setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 930
In addition to making publish content API calls through a job, it is also required to set up a [`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive - Network accessline 930
In addition to making publish content API calls through a job, it is also required to set up a [`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive - Network accessline 931
required to set up a [`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive the request for a content publish. - Network accessline 931
required to set up a [`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive the request for a content publish. - Network accessline 932
[`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive - Network accessline 932
[`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive - Network accessline 1040
The following [intents](https://developer.android.com/reference/android/content/Intent) will be sent by the - Network accessline 1040
The following [intents](https://developer.android.com/reference/android/content/Intent) will be sent by the - Network accessline 1049
For a step-by-step guide on verifying your integration after it is complete, see [Engage developer integration workflow](https://developer.android.com/guide/playcore/engage/workflow). - Network accessline 1049
For a step-by-step guide on verifying your integration after it is complete, see [Engage developer integration workflow](https://developer.android.com/guide/playcore/engage/workflow). - Network accessline 1050
[Engage developer integration workflow](https://developer.android.com/guide/playcore/engage/workflow). - Network accessline 1050
[Engage developer integration workflow](https://developer.android.com/guide/playcore/engage/workflow). - Network accessline 1054
See [Engage SDK Frequently Asked Questions](https://developer.android.com/guide/playcore/engage/faq) for - Network accessline 1054
See [Engage SDK Frequently Asked Questions](https://developer.android.com/guide/playcore/engage/faq) for
play/engage-sdk-integration/references/android/guide/playcore/engage/otherverticals.md
- Network accessline 2
to deliver personalized recommendations and continuation content directly to users across multiple on-device surfaces, like **[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html - Network accessline 2
to deliver personalized recommendations and continuation content directly to users across multiple on-device surfaces, like **[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html - Network accessline 3
users across multiple on-device surfaces, like **[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html)** , **[Entertainment Space](https://blog.google/products/android/entertainm - Network accessline 3
users across multiple on-device surfaces, like **[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html)** , **[Entertainment Space](https://blog.google/products/android/entertainm - Network accessline 4
**[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html)** , **[Entertainment - Network accessline 4
**[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html)** , **[Entertainment - Network accessline 5
Space](https://blog.google/products/android/entertainment-space/)** , and the Play Store. The integration adds - Network accessline 5
Space](https://blog.google/products/android/entertainment-space/)** , and the Play Store. The integration adds - Network accessline 6
less than 50 KB (compressed) to the average APK and takes most apps about a week of developer time. Learn more at our **[business site](http://play.google.com/console/about/programs/EngageSDK)**. - Network accessline 6
less than 50 KB (compressed) to the average APK and takes most apps about a week of developer time. Learn more at our **[business site](http://play.google.com/console/about/programs/EngageSDK)**. - Network accessline 8
site](http://play.google.com/console/about/programs/EngageSDK)**. - Network accessline 8
site](http://play.google.com/console/about/programs/EngageSDK)**. - Network accessline 17
[View on GitHub](https://github.com/android/skills/tree/main/play/engage-sdk-integration) - Network accessline 17
[View on GitHub](https://github.com/android/skills/tree/main/play/engage-sdk-integration) - Network accessline 21
Use the Engage SDK [Android skill](https://developer.android.com/tools/agents/android-skills) to integrate, debug, and resolve implementation issues. To install the skill from the [Android CLI](https://developer.android.com/tools/agents/and - Network accessline 21
Use the Engage SDK [Android skill](https://developer.android.com/tools/agents/android-skills) to integrate, debug, and resolve implementation issues. To install the skill from the [Android CLI](https://developer.android.com/tools/agents/and - Network accessline 48
 **Figure 1:** UI showing a single ArticleEntity within Recommendations cluster. - Network accessline 48
 **Figure 1:** UI showing a single ArticleEntity within Recommendations cluster. - Network accessline 53
 **Figure 2:** UI showing a single EventEntity within Recommendations cluster. - Network accessline 53
 **Figure 2:** UI showing a single EventEntity within Recommendations cluster. - Network accessline 58
 **Figure 3:** UI showing a single LodgingEntity within Recommendations cluster. - Network accessline 58
 **Figure 3:** UI showing a single LodgingEntity within Recommendations cluster. - Network accessline 64
 **Figure 4:** UI showing a single StoreEntity within Recommendations cluster. - Network accessline 64
 **Figure 4:** UI showing a single StoreEntity within Recommendations cluster. - Network accessline 72
 **Figure 5:** UI showing a single PointOfInterestEntity within Recommendations cluster. - Network accessline 72
 **Figure 5:** UI showing a single PointOfInterestEntity within Recommendations cluster. - Network accessline 77
 **Figure 5:** UI showing a single PersonEntity within Recommendations cluster. - Network accessline 77
 **Figure 5:** UI showing a single PersonEntity within Recommendations cluster. - Network accessline 90
 **Figure 6.** UI showing a single ArticleEntity within a Continuation cluster. - Network accessline 90
 **Figure 6.** UI showing a single ArticleEntity within a Continuation cluster. - Network accessline 95
 **Figure 7.** UI showing a single RestaurantReservationEntity within a Continuation cluster. - Network accessline 95
 **Figure 7.** UI showing a single RestaurantReservationEntity within a Continuation cluster. - Network accessline 108
 **Figure 8.** UI showing a single EventReservationEntity within a Continuation cluster. - Network accessline 108
 **Figure 8.** UI showing a single EventReservationEntity within a Continuation cluster. - Network accessline 113
 **Figure 9.** UI showing a single LodgingReservationEntity within a Continuation cluster. - Network accessline 113
 **Figure 9.** UI showing a single LodgingReservationEntity within a Continuation cluster. - Network accessline 119
 **Figure 10.** UI showing a single TransportationReservationEntity within a Continuation cluster. - Network accessline 119
 **Figure 10.** UI showing a single TransportationReservationEntity within a Continuation cluster. - Network accessline 124
 **Figure 11.** UI showing a single VehicleRentalReservationEntity within a Continuation cluster. - Network accessline 124
 **Figure 11.** UI showing a single VehicleRentalReservationEntity within a Continuation cluster. - Network accessline 138
 **Figure 12:** UI showing a single hero GenericFeaturedEntity card within a Featured cluster - Network accessline 138
 **Figure 12:** UI showing a single hero GenericFeaturedEntity card within a Featured cluster - Network accessline 153
The design is based on an implementation of a [bound service](https://developer.android.com/guide/components/bound-services). - Network accessline 153
The design is based on an implementation of a [bound service](https://developer.android.com/guide/components/bound-services). - Network accessline 154
[bound service](https://developer.android.com/guide/components/bound-services). - Network accessline 154
[bound service](https://developer.android.com/guide/components/bound-services). - Network accessline 188
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 188
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 189
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 189
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 190
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 190
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 191
| Poster images | **Required** | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** If a badge is provided, ensure safe space of 24 dps at both the top and bottom of the image | See [Imag - Network accessline 191
| Poster images | **Required** | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** If a badge is provided, ensure safe space of 24 dps at both the top and bottom of the image | See [Imag - Network accessline 195
| Badges | Optional | Each badge is either free text (max 15 chars) or small image. Special UX treatment on top of image/video, for example, as badge overlay on the image - "Live update" - Article read duration | | | Badge - Text | Option - Network accessline 195
| Badges | Optional | Each badge is either free text (max 15 chars) or small image. Special UX treatment on top of image/video, for example, as badge overlay on the image - "Live update" - Article read duration | | | Badge - Text | Option - Network accessline 196
| Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 chars** | | Badge - Image | Optional | Small image Special UX treatment, for example as bad - Network accessline 196
| Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 chars** | | Badge - Image | Optional | Small image Special UX treatment, for example as bad - Network accessline 197
| Badge - Image | Optional | Small image Special UX treatment, for example as badge overlay on the image/video thumbnail. **Note:** Either text or image is required for the badge | See [Image Specifications](https://developer.android.com/gu - Network accessline 197
| Badge - Image | Optional | Small image Special UX treatment, for example as badge overlay on the image/video thumbnail. **Note:** Either text or image is required for the badge | See [Image Specifications](https://developer.android.com/gu - Network accessline 198
| Content Categories | Optional | Describe the category of the content in the entity. | List of Enums See the [Content Category section](https://developer.android.com/guide/playcore/engage/otherverticals#content-category) for guidance. | - Network accessline 198
| Content Categories | Optional | Describe the category of the content in the entity. | List of Enums See the [Content Category section](https://developer.android.com/guide/playcore/engage/otherverticals#content-category) for guidance. | - Network accessline 202
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 202
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 203
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 203
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 204
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 204
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 205
| Title | **Required** | Title of the entity. | Free text **Recommended text size: Max 50 chars** | | Poster images | Optional | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** Image i - Network accessline 205
| Title | **Required** | Title of the entity. | Free text **Recommended text size: Max 50 chars** | | Poster images | Optional | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** Image i - Network accessline 206
| Poster images | Optional | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** Image is highly recommended. If a badge is provided, ensure safe space of 24 dps at both the top and bottom - Network accessline 206
| Poster images | Optional | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** Image is highly recommended. If a badge is provided, ensure safe space of 24 dps at both the top and bottom - Network accessline 207
| Source - Title | Optional | The name of the author, organization, or reporter | Free text **Recommended text size: Under 25 chars** | | Source - Image | Optional | An image of the source like the author, the organization, reporter | See [ - Network accessline 207
| Source - Title | Optional | The name of the author, organization, or reporter | Free text **Recommended text size: Under 25 chars** | | Source - Image | Optional | An image of the source like the author, the organization, reporter | See [ - Network accessline 208
| Source - Image | Optional | An image of the source like the author, the organization, reporter | See [Image Specifications](https://developer.android.com/guide/playcore/engage/otherverticals#image-specs) for guidance. | - Network accessline 208
| Source - Image | Optional | An image of the source like the author, the organization, reporter | See [Image Specifications](https://developer.android.com/guide/playcore/engage/otherverticals#image-specs) for guidance. | - Network accessline 211
| Badges | Optional | Each badge is either free text (max 15 chars) or small image. Special UX treatment on top of image/video, for example as badge overlay on the image - "Live update" - Article read duration | | | Badge - Text | Optiona - Network accessline 211
| Badges | Optional | Each badge is either free text (max 15 chars) or small image. Special UX treatment on top of image/video, for example as badge overlay on the image - "Live update" - Article read duration | | | Badge - Text | Optiona - Network accessline 212
| Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 chars** | | Badge - Image | Optional | Small image Special UX treatment, for example as bad - Network accessline 212
| Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 chars** | | Badge - Image | Optional | Small image Special UX treatment, for example as bad - Network accessline 213
| Badge - Image | Optional | Small image Special UX treatment, for example as badge overlay on the image/video thumbnail. **Note:** Either text or image is required for the badge | See [Image Specifications](https://developer.android.com/gu - Network accessline 213
| Badge - Image | Optional | Small image Special UX treatment, for example as badge overlay on the image/video thumbnail. **Note:** Either text or image is required for the badge | See [Image Specifications](https://developer.android.com/gu - Network accessline 215
| Last Engagement Time | Conditionally Required | The epoch timestamp in milliseconds when the user interacted with this entity last time. **Note:** This field is required if this entity is part of the continuation cluster. | Epoch timestam - Network accessline 215
| Last Engagement Time | Conditionally Required | The epoch timestamp in milliseconds when the user interacted with this entity last time. **Note:** This field is required if this entity is part of the continuation cluster. | Epoch timestam - Network accessline 217
| Content Categories | Optional | Describe the category of the content in the entity. | List of Enums See the [Content Category section](https://developer.android.com/guide/playcore/engage/otherverticals#content-category) for guidance. | - Network accessline 217
| Content Categories | Optional | Describe the category of the content in the entity. | List of Enums See the [Content Category section](https://developer.android.com/guide/playcore/engage/otherverticals#content-category) for guidance. | - Network accessline 221
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 221
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 222
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 222
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 223
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 223
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 225
| Start time | **Required** | The epoch timestamp when the event is expected to start. **Note:**This will be represented in milliseconds. | Epoch timestamp in milliseconds | | Event mode | **Required** | A field to indicate whether the even - Network accessline 225
| Start time | **Required** | The epoch timestamp when the event is expected to start. **Note:**This will be represented in milliseconds. | Epoch timestamp in milliseconds | | Event mode | **Required** | A field to indicate whether the even - Network accessline 226
| Event mode | **Required** | A field to indicate whether the event will be virtual, in-person or both. | Enum: VIRTUAL, IN_PERSON, or HYBRID | | Poster images | **Required** | We will show only 1 image when multiple images are provided. Re - Network accessline 226
| Event mode | **Required** | A field to indicate whether the event will be virtual, in-person or both. | Enum: VIRTUAL, IN_PERSON, or HYBRID | | Poster images | **Required** | We will show only 1 image when multiple images are provided. Re - Network accessline 227
| Poster images | **Required** | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** Image is highly recommended. If a badge is provided, ensure safe space of 24 dps at both the top and bo - Network accessline 227
| Poster images | **Required** | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** Image is highly recommended. If a badge is provided, ensure safe space of 24 dps at both the top and bo - Network accessline 238
| Badges | Optional | Each badge is either free text (max 15 chars) or small image. | | | Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 c - Network accessline 238
| Badges | Optional | Each badge is either free text (max 15 chars) or small image. | | | Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 c - Network accessline 239
| Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 chars** | | Badge - Image | Optional | Small image Special UX treatment, for example as bad - Network accessline 239
| Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 chars** | | Badge - Image | Optional | Small image Special UX treatment, for example as bad - Network accessline 240
| Badge - Image | Optional | Small image Special UX treatment, for example as badge overlay on the image/video thumbnail. **Note:** Either text or image is required for the badge | See [Image Specifications](https://developer.android.com/gu - Network accessline 240
| Badge - Image | Optional | Small image Special UX treatment, for example as badge overlay on the image/video thumbnail. **Note:** Either text or image is required for the badge | See [Image Specifications](https://developer.android.com/gu - Network accessline 242
| Price - StrikethroughPrice | Optional | The original price of the ticket/pass for the event. | Free text | | Price Callout | Optional | Price callout to feature a promo, event, member discount, if available. | Free text **Recommended text - Network accessline 242
| Price - StrikethroughPrice | Optional | The original price of the ticket/pass for the event. | Free text | | Price Callout | Optional | Price callout to feature a promo, event, member discount, if available. | Free text **Recommended text - Network accessline 244
| Content Categories | Optional | Describe the category of the content in the entity. | List of Eligible Enums - TYPE_MOVIES_AND_TV_SHOWS (Example - Cinema) - TYPE_DIGITAL_GAMES (Example - eSports) - TYPE_MUSIC (Example - Concert) - TYPE_TR - Network accessline 244
| Content Categories | Optional | Describe the category of the content in the entity. | List of Eligible Enums - TYPE_MOVIES_AND_TV_SHOWS (Example - Cinema) - TYPE_DIGITAL_GAMES (Example - eSports) - TYPE_MUSIC (Example - Concert) - TYPE_TR - Network accessline 248
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 248
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 249
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 249
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 250
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 250
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 251
| Title | **Required** | Title of the entity. | String **Recommended text size: Max 50 chars** | | Poster images | **Required** | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** If a b - Network accessline 251
| Title | **Required** | Title of the entity. | String **Recommended text size: Max 50 chars** | | Poster images | **Required** | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** If a b - Network accessline 252
| Poster images | **Required** | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** If a badge is provided, ensure safe space of 24 dps at both the top and bottom of the image | See [Imag - Network accessline 252
| Poster images | **Required** | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** If a badge is provided, ensure safe space of 24 dps at both the top and bottom of the image | See [Imag - Network accessline 260
| Badges | Optional | Each badge is either free text (max 15 chars) or small image. | | | Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 c - Network accessline 260
| Badges | Optional | Each badge is either free text (max 15 chars) or small image. | | | Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 c - Network accessline 261
| Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 chars** | | Badge - Image | Optional | Small image Special UX treatment, for example as bad - Network accessline 261
| Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 chars** | | Badge - Image | Optional | Small image Special UX treatment, for example as bad - Network accessline 262
| Badge - Image | Optional | Small image Special UX treatment, for example as badge overlay on the image/video thumbnail. **Note:** Either text or image is required for the badge | See [Image Specifications](https://developer.android.com/gu - Network accessline 262
| Badge - Image | Optional | Small image Special UX treatment, for example as badge overlay on the image/video thumbnail. **Note:** Either text or image is required for the badge | See [Image Specifications](https://developer.android.com/gu - Network accessline 280
| Attribute | Requirement | Description | Format | |---|---|---|---| | Poster images | **Required** | At least one image must be provided. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/otherverticals#image - Network accessline 280
| Attribute | Requirement | Description | Format | |---|---|---|---| | Poster images | **Required** | At least one image must be provided. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/otherverticals#image - Network accessline 281
|---|---|---|---| | Poster images | **Required** | At least one image must be provided. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/otherverticals#image-specs) for guidance. | | Action Uri | **Required** - Network accessline 281
|---|---|---|---| | Poster images | **Required** | At least one image must be provided. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/otherverticals#image-specs) for guidance. | | Action Uri | **Required** - Network accessline 282
| Poster images | **Required** | At least one image must be provided. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/otherverticals#image-specs) for guidance. | - Network accessline 282
| Poster images | **Required** | At least one image must be provided. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/otherverticals#image-specs) for guidance. | - Network accessline 283
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 283
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 296
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 296
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 297
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 297
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 298
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 298
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 299
| Title | **Required** | Title of the entity. | String **Recommended text size: Max 50 chars** | | Poster images | **Required** | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** Image - Network accessline 299
| Title | **Required** | Title of the entity. | String **Recommended text size: Max 50 chars** | | Poster images | **Required** | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** Image - Network accessline 300
| Poster images | **Required** | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** Image is highly recommended. If a badge is provided, ensure safe space of 24 dps at both the top and bo - Network accessline 300
| Poster images | **Required** | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** Image is highly recommended. If a badge is provided, ensure safe space of 24 dps at both the top and bo - Network accessline 310
| Badges | Optional | Each badge is either free text (max 15 chars) or small image. | | | Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 c - Network accessline 310
| Badges | Optional | Each badge is either free text (max 15 chars) or small image. | | | Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 c - Network accessline 311
| Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 chars** | | Badge - Image | Optional | Small image Special UX treatment, for example as bad - Network accessline 311
| Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 chars** | | Badge - Image | Optional | Small image Special UX treatment, for example as bad - Network accessline 312
| Badge - Image | Optional | Small image Special UX treatment, for example as badge overlay on the image/video thumbnail. **Note:** Either text or image is required for the badge | See [Image Specifications](https://developer.android.com/gu - Network accessline 312
| Badge - Image | Optional | Small image Special UX treatment, for example as badge overlay on the image/video thumbnail. **Note:** Either text or image is required for the badge | See [Image Specifications](https://developer.android.com/gu - Network accessline 320
| Price - StrikethroughPrice | Optional | The original price of the tickets/entry pass for the point of interest. | Free text | | Price Callout | Optional | Price callout to feature a promo, event, member discount, if available. | Free text - Network accessline 320
| Price - StrikethroughPrice | Optional | The original price of the tickets/entry pass for the point of interest. | Free text | | Price Callout | Optional | Price callout to feature a promo, event, member discount, if available. | Free text - Network accessline 322
| Content Categories | Optional | Describe the category of the content in the entity. | List of Eligible Enums - TYPE_TRAVEL_AND_LOCAL - TYPE_MOVIES_AND_TV_SHOWS (Example - theater) - TYPE_MEDICAL (Example - hospital) - TYPE_EDUCATION (Exam - Network accessline 322
| Content Categories | Optional | Describe the category of the content in the entity. | List of Eligible Enums - TYPE_TRAVEL_AND_LOCAL - TYPE_MOVIES_AND_TV_SHOWS (Example - theater) - TYPE_MEDICAL (Example - hospital) - TYPE_EDUCATION (Exam - Network accessline 326
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 326
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 327
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 327
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 328
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 328
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 329
| Profile - Name | **Required** | Profile name or id or handle, eg "John Doe", "@TeamPixel", etc. | String **Recommended text size: Max 50 chars** | | Profile - Avatar | **Required** | Profile picture or avatar image of the user. **Note:**M - Network accessline 329
| Profile - Name | **Required** | Profile name or id or handle, eg "John Doe", "@TeamPixel", etc. | String **Recommended text size: Max 50 chars** | | Profile - Avatar | **Required** | Profile picture or avatar image of the user. **Note:**M - Network accessline 330
| Profile - Avatar | **Required** | Profile picture or avatar image of the user. **Note:**Must be Square 1:1 image. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/otherverticals#image-specs) for guidance. | - Network accessline 330
| Profile - Avatar | **Required** | Profile picture or avatar image of the user. **Note:**Must be Square 1:1 image. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/otherverticals#image-specs) for guidance. | - Network accessline 331
| Profile - Additional Text | Optional | Free text like the profile handle. | Free text **Recommended text size: Max 15 chars** | | Profile - Additional Image | Optional | Small image like a verified badge. | See [Image Specifications](http - Network accessline 331
| Profile - Additional Text | Optional | Free text like the profile handle. | Free text **Recommended text size: Max 15 chars** | | Profile - Additional Image | Optional | Small image like a verified badge. | See [Image Specifications](http - Network accessline 332
| Profile - Additional Image | Optional | Small image like a verified badge. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/otherverticals#image-specs) for guidance. | - Network accessline 332
| Profile - Additional Image | Optional | Small image like a verified badge. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/otherverticals#image-specs) for guidance. | - Network accessline 333
| Header image | Optional | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** Image is highly recommended. If a badge is provided, ensure safe space of 24 dps at both the top and bottom - Network accessline 333
| Header image | Optional | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** Image is highly recommended. If a badge is provided, ensure safe space of 24 dps at both the top and bottom - Network accessline 335
| Popularity - Count Value | Optional | The number of followers or popularity value. **Note:** Provide Count Value if your app doesn't want to handle logic on how a large number should be optimized for different display sizes. If both Count - Network accessline 335
| Popularity - Count Value | Optional | The number of followers or popularity value. **Note:** Provide Count Value if your app doesn't want to handle logic on how a large number should be optimized for different display sizes. If both Count - Network accessline 336
| Popularity - Label | Optional | Indicate what the popularity label is. For example - "Likes". | String **Recommended text size: Max 20 chars for count + label combined** | | Popularity - Visual | Optional | Indicate what the interaction i - Network accessline 336
| Popularity - Label | Optional | Indicate what the popularity label is. For example - "Likes". | String **Recommended text size: Max 20 chars for count + label combined** | | Popularity - Visual | Optional | Indicate what the interaction i - Network accessline 337
| Popularity - Visual | Optional | Indicate what the interaction is for. For example - Image showing Likes icon, emoji. Can provide more than 1 image, though not all may not be shown on all form factors. **Note:** Must be Square 1:1 image | - Network accessline 337
| Popularity - Visual | Optional | Indicate what the interaction is for. For example - Image showing Likes icon, emoji. Can provide more than 1 image, though not all may not be shown on all form factors. **Note:** Must be Square 1:1 image | - Network accessline 349
| Badges | Optional | Each badge is either free text (max 15 chars) or small image. | | | Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 c - Network accessline 349
| Badges | Optional | Each badge is either free text (max 15 chars) or small image. | | | Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 c - Network accessline 350
| Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 chars** | | Badge - Image | Optional | Small image Special UX treatment, for example as bad - Network accessline 350
| Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 chars** | | Badge - Image | Optional | Small image Special UX treatment, for example as bad - Network accessline 351
| Badge - Image | Optional | Small image Special UX treatment, for example as badge overlay on the image/video thumbnail. **Note:** Either text or image is required for the badge | See [Image Specifications](https://developer.android.com/gu - Network accessline 351
| Badge - Image | Optional | Small image Special UX treatment, for example as badge overlay on the image/video thumbnail. **Note:** Either text or image is required for the badge | See [Image Specifications](https://developer.android.com/gu - Network accessline 352
| Description | Optional | A single paragraph of text to describe the entity. **Note:** Either description or subtitle list will be displayed to the user, not both. | Free text **Recommended text size: 180 chars** | | Subtitle list | Option - Network accessline 352
| Description | Optional | A single paragraph of text to describe the entity. **Note:** Either description or subtitle list will be displayed to the user, not both. | Free text **Recommended text size: 180 chars** | | Subtitle list | Option - Network accessline 354
| Content Categories | Optional | Describe the category of the content in the entity. | List of Eligible Enums - TYPE_HEALTH_AND_FITENESS (Example - Yoga/fitness trainer) - TYPE_HOME_AND_AUTO (Example - Plumber) - TYPE_SPORTS (Example - Pla - Network accessline 354
| Content Categories | Optional | Describe the category of the content in the entity. | List of Eligible Enums - TYPE_HEALTH_AND_FITENESS (Example - Yoga/fitness trainer) - TYPE_HOME_AND_AUTO (Example - Plumber) - TYPE_SPORTS (Example - Pla - Network accessline 358
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 358
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 359
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 359
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 360
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 360
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 368
| Location - Zip code | Optional | The zip code (if applicable) of the restaurant. | Free text **Recommended text size: max \~20 chars** | | Location - Neighborhood | Optional | The neighborhood (if applicable) of the restaurant. | Free tex - Network accessline 368
| Location - Zip code | Optional | The zip code (if applicable) of the restaurant. | Free text **Recommended text size: max \~20 chars** | | Location - Neighborhood | Optional | The neighborhood (if applicable) of the restaurant. | Free tex - Network accessline 369
| Location - Neighborhood | Optional | The neighborhood (if applicable) of the restaurant. | Free text **Recommended text size: max \~20 chars** | | Poster images | Optional | We will show only 1 image when multiple images are provided. Rec - Network accessline 369
| Location - Neighborhood | Optional | The neighborhood (if applicable) of the restaurant. | Free text **Recommended text size: max \~20 chars** | | Poster images | Optional | We will show only 1 image when multiple images are provided. Rec - Network accessline 370
| Poster images | Optional | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 | See [Image Specifications](https://developer.android.com/guide/playcore/engage/otherverticals#image-specs) for guid - Network accessline 370
| Poster images | Optional | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 | See [Image Specifications](https://developer.android.com/guide/playcore/engage/otherverticals#image-specs) for guid - Network accessline 377
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 377
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 378
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 378
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 379
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 379
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 388
| Location - Zip code | Optional | The zip code (if applicable) of the location in which the event is being hosted. | Free text **Recommended text size: max \~20 chars** | | Location - Neighborhood | Optional | The neighborhood (if applicab - Network accessline 388
| Location - Zip code | Optional | The zip code (if applicable) of the location in which the event is being hosted. | Free text **Recommended text size: max \~20 chars** | | Location - Neighborhood | Optional | The neighborhood (if applicab - Network accessline 389
| Location - Neighborhood | Optional | The neighborhood (if applicable) in which the event is being hosted. | Free text **Recommended text size: max \~20 chars** | | Poster images | Optional | We will show only 1 image when multiple images - Network accessline 389
| Location - Neighborhood | Optional | The neighborhood (if applicable) in which the event is being hosted. | Free text **Recommended text size: max \~20 chars** | | Poster images | Optional | We will show only 1 image when multiple images - Network accessline 390
| Poster images | Optional | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** Image is highly recommended. If a badge is provided, ensure safe space of 24 dps at both the top and bottom - Network accessline 390
| Poster images | Optional | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** Image is highly recommended. If a badge is provided, ensure safe space of 24 dps at both the top and bottom - Network accessline 391
| End time | Optional | The epoch timestamp when the event is expected to end. **Note:**This will be represented in milliseconds. | Epoch timestamp in milliseconds | | Service Provider - Name | Optional | The name of the service provider. * - Network accessline 391
| End time | Optional | The epoch timestamp when the event is expected to end. **Note:**This will be represented in milliseconds. | Epoch timestamp in milliseconds | | Service Provider - Name | Optional | The name of the service provider. * - Network accessline 392
| Service Provider - Name | Optional | The name of the service provider. **Note:**Either text or image is required for the service provider. | Free text. For example, name of the event organizer/tour | | Service Provider - Image | Optional - Network accessline 392
| Service Provider - Name | Optional | The name of the service provider. **Note:**Either text or image is required for the service provider. | Free text. For example, name of the event organizer/tour | | Service Provider - Image | Optional - Network accessline 393
| Service Provider - Image | Optional | The logo/image of the service provider. **Note:**Either text or image is required for the service provider. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/othervertic - Network accessline 393
| Service Provider - Image | Optional | The logo/image of the service provider. **Note:**Either text or image is required for the service provider. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/othervertic - Network accessline 396
| Badges | Optional | Each badge is either free text (max 15 chars) or small image. | | | Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 c - Network accessline 396
| Badges | Optional | Each badge is either free text (max 15 chars) or small image. | | | Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 c - Network accessline 397
| Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 chars** | | Badge - Image | Optional | Small image Special UX treatment, for example as bad - Network accessline 397
| Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 chars** | | Badge - Image | Optional | Small image Special UX treatment, for example as bad - Network accessline 398
| Badge - Image | Optional | Small image Special UX treatment, for example as badge overlay on the image/video thumbnail. **Note:** Either text or image is required for the badge | See [Image Specifications](https://developer.android.com/gu - Network accessline 398
| Badge - Image | Optional | Small image Special UX treatment, for example as badge overlay on the image/video thumbnail. **Note:** Either text or image is required for the badge | See [Image Specifications](https://developer.android.com/gu - Network accessline 405
| Rating - Count | Optional | The count of the ratings for the event. **Note:** Provide this field if your app wants to control how this is displayed to the users. Provide the concise string that can be displayed to the user. For example, i - Network accessline 405
| Rating - Count | Optional | The count of the ratings for the event. **Note:** Provide this field if your app wants to control how this is displayed to the users. Provide the concise string that can be displayed to the user. For example, i - Network accessline 407
| Content Categories | Optional | Describe the category of the content in the entity. | List of Eligible Enums - TYPE_MOVIES_AND_TV_SHOWS (Example - Cinema) - TYPE_DIGITAL_GAMES (Example - eSports) - TYPE_MUSIC (Example - Concert) - TYPE_TR - Network accessline 407
| Content Categories | Optional | Describe the category of the content in the entity. | List of Eligible Enums - TYPE_MOVIES_AND_TV_SHOWS (Example - Cinema) - TYPE_DIGITAL_GAMES (Example - eSports) - TYPE_MUSIC (Example - Concert) - TYPE_TR - Network accessline 411
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 411
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 412
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 412
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 413
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 413
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 422
| Location - Zip code | Optional | The zip code (if applicable) of the lodging. | Free text **Recommended text size: max \~20 chars** | | Location - Neighborhood | Optional | The neighborhood (if applicable) of the lodging. | Free text **Re - Network accessline 422
| Location - Zip code | Optional | The zip code (if applicable) of the lodging. | Free text **Recommended text size: max \~20 chars** | | Location - Neighborhood | Optional | The neighborhood (if applicable) of the lodging. | Free text **Re - Network accessline 423
| Location - Neighborhood | Optional | The neighborhood (if applicable) of the lodging. | Free text **Recommended text size: max \~20 chars** | | Poster images | Optional | We will show only 1 image when multiple images are provided. Recomm - Network accessline 423
| Location - Neighborhood | Optional | The neighborhood (if applicable) of the lodging. | Free text **Recommended text size: max \~20 chars** | | Poster images | Optional | We will show only 1 image when multiple images are provided. Recomm - Network accessline 424
| Poster images | Optional | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** If a badge is provided, ensure safe space of 24 dps at both the top and bottom of the image | See [Image Sp - Network accessline 424
| Poster images | Optional | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** If a badge is provided, ensure safe space of 24 dps at both the top and bottom of the image | See [Image Sp - Network accessline 438
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 438
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 439
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 439
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 440
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 440
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 458
| Arrival Location - Neighborhood | Optional | The neighborhood (if applicable) of the arrival location. | Free text **Recommended text size: max \~20 chars** | | Service Provider - Name | Optional | The name of the service provider. **Note - Network accessline 458
| Arrival Location - Neighborhood | Optional | The neighborhood (if applicable) of the arrival location. | Free text **Recommended text size: max \~20 chars** | | Service Provider - Name | Optional | The name of the service provider. **Note - Network accessline 459
| Service Provider - Name | Optional | The name of the service provider. **Note:**Either text or image is required for the service provider. | Free text. For example, Airline name | | Service Provider - Image | Optional | The logo/image of - Network accessline 459
| Service Provider - Name | Optional | The name of the service provider. **Note:**Either text or image is required for the service provider. | Free text. For example, Airline name | | Service Provider - Image | Optional | The logo/image of - Network accessline 460
| Service Provider - Image | Optional | The logo/image of the service provider. **Note:**Either text or image is required for the service provider. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/othervertic - Network accessline 460
| Service Provider - Image | Optional | The logo/image of the service provider. **Note:**Either text or image is required for the service provider. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/othervertic - Network accessline 461
| Poster images | Optional | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 | See [Image Specifications](https://developer.android.com/guide/playcore/engage/otherverticals#image-specs) for guid - Network accessline 461
| Poster images | Optional | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 | See [Image Specifications](https://developer.android.com/guide/playcore/engage/otherverticals#image-specs) for guid - Network accessline 473
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 473
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 474
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 474
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 475
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 475
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 492
| Return Address - Neighborhood | Optional | The neighborhood (if applicable) of the return location. | Free text **Recommended text size: max \~20 chars** | | Service Provider - Name | Optional | The name of the service provider. **Note:** - Network accessline 492
| Return Address - Neighborhood | Optional | The neighborhood (if applicable) of the return location. | Free text **Recommended text size: max \~20 chars** | | Service Provider - Name | Optional | The name of the service provider. **Note:** - Network accessline 493
| Service Provider - Name | Optional | The name of the service provider. **Note:**Either text or image is required for the service provider. | Free text. For example, "Avis Car Rental" | | Service Provider - Image | Optional | The logo/imag - Network accessline 493
| Service Provider - Name | Optional | The name of the service provider. **Note:**Either text or image is required for the service provider. | Free text. For example, "Avis Car Rental" | | Service Provider - Image | Optional | The logo/imag - Network accessline 494
| Service Provider - Image | Optional | The logo/image of the service provider. **Note:**Either text or image is required for the service provider. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/othervertic - Network accessline 494
| Service Provider - Image | Optional | The logo/image of the service provider. **Note:**Either text or image is required for the service provider. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/othervertic - Network accessline 495
| Poster images | Optional | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 | See [Image Specifications](https://developer.android.com/guide/playcore/engage/otherverticals#image-specs) for guid - Network accessline 495
| Poster images | Optional | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 | See [Image Specifications](https://developer.android.com/guide/playcore/engage/otherverticals#image-specs) for guid - Network accessline 561
- TYPE_MOVIES_AND_TV_SHOWS - Check out the entities from [Watch integration guide](https://developer.android.com/guide/playcore/engage/watch) before using the generic entities. - Network accessline 561
- TYPE_MOVIES_AND_TV_SHOWS - Check out the entities from [Watch integration guide](https://developer.android.com/guide/playcore/engage/watch) before using the generic entities. - Network accessline 562
- TYPE_BOOKS - Check out the [EbookEntity](https://developer.android.com/guide/playcore/engage/read#ebookentity) before using the generic entities. - Network accessline 562
- TYPE_BOOKS - Check out the [EbookEntity](https://developer.android.com/guide/playcore/engage/read#ebookentity) before using the generic entities. - Network accessline 563
- TYPE_AUDIOBOOKS - Check out [AudiobookEntity](https://developer.android.com/guide/playcore/engage/read#audiobookentity) before using the generic entities. - Network accessline 563
- TYPE_AUDIOBOOKS - Check out [AudiobookEntity](https://developer.android.com/guide/playcore/engage/read#audiobookentity) before using the generic entities. - Network accessline 564
- TYPE_SHOPPING - Check out [ShoppingEntity](https://developer.android.com/guide/playcore/engage/shopping#shoppingEntity) before using the generic entities. - Network accessline 564
- TYPE_SHOPPING - Check out [ShoppingEntity](https://developer.android.com/guide/playcore/engage/shopping#shoppingEntity) before using the generic entities. - Network accessline 565
- TYPE_FOOD_AND_DRINK - Check out entities from [Food Integration guide](https://developer.android.com/guide/playcore/engage/food) before using the generic entities. - Network accessline 565
- TYPE_FOOD_AND_DRINK - Check out entities from [Food Integration guide](https://developer.android.com/guide/playcore/engage/food) before using the generic entities. - Network accessline 575
It is recommended to have the content publish job executed in the background (for example, using [WorkManager](https://developer.android.com/topic/libraries/architecture/workmanager)) - Network accessline 575
It is recommended to have the content publish job executed in the background (for example, using [WorkManager](https://developer.android.com/topic/libraries/architecture/workmanager)) - Network accessline 576
(for example, using [WorkManager](https://developer.android.com/topic/libraries/architecture/workmanager)) - Network accessline 576
(for example, using [WorkManager](https://developer.android.com/topic/libraries/architecture/workmanager)) - Network accessline 606
[View on GitHub](https://github.com/android/skills/tree/main/play/engage-sdk-integration) - Network accessline 606
[View on GitHub](https://github.com/android/skills/tree/main/play/engage-sdk-integration) - Network accessline 610
To install the skill from the [Android CLI](https://developer.android.com/tools/agents/android-cli), run: - Network accessline 610
To install the skill from the [Android CLI](https://developer.android.com/tools/agents/android-cli), run: - Network accessline 885
.addPosterImage( Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 885
.addPosterImage( Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 886
Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(500) - Network accessline 886
Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(500) - Network accessline 887
.setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 887
.setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 890
.build()) .setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 890
.build()) .setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 891
.setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) .build() - Network accessline 891
.setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) .build() - Network accessline 892
.setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 892
.setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 904
.addPosterImage( new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 904
.addPosterImage( new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 905
new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(500) - Network accessline 905
new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(500) - Network accessline 906
.setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 906
.setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 909
.build()) .setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 909
.build()) .setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 910
.setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) .build(); - Network accessline 910
.setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) .build(); - Network accessline 911
.setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 911
.setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 1172
In addition to making publish content API calls through a job, it is also required to set up a [`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive - Network accessline 1172
In addition to making publish content API calls through a job, it is also required to set up a [`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive - Network accessline 1173
required to set up a [`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive the request for a content publish. - Network accessline 1173
required to set up a [`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive the request for a content publish. - Network accessline 1174
[`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive - Network accessline 1174
[`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive - Network accessline 1281
The following [intents](https://developer.android.com/reference/android/content/Intent) is sent by the - Network accessline 1281
The following [intents](https://developer.android.com/reference/android/content/Intent) is sent by the - Network accessline 1290
For a step-by-step guide on verifying your integration after it is complete, see [Engage developer integration workflow](https://developer.android.com/guide/playcore/engage/workflow). - Network accessline 1290
For a step-by-step guide on verifying your integration after it is complete, see [Engage developer integration workflow](https://developer.android.com/guide/playcore/engage/workflow). - Network accessline 1291
[Engage developer integration workflow](https://developer.android.com/guide/playcore/engage/workflow). - Network accessline 1291
[Engage developer integration workflow](https://developer.android.com/guide/playcore/engage/workflow). - Network accessline 1295
See [Engage SDK Frequently Asked Questions](https://developer.android.com/guide/playcore/engage/faq) for - Network accessline 1295
See [Engage SDK Frequently Asked Questions](https://developer.android.com/guide/playcore/engage/faq) for
play/engage-sdk-integration/references/android/guide/playcore/engage/read.md
- Network accessline 5
to deliver personalized recommendations and continuation content directly to users across multiple on-device surfaces, like **[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html - Network accessline 5
to deliver personalized recommendations and continuation content directly to users across multiple on-device surfaces, like **[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html - Network accessline 6
users across multiple on-device surfaces, like **[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html)** , **[Entertainment Space](https://blog.google/products/android/entertainm - Network accessline 6
users across multiple on-device surfaces, like **[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html)** , **[Entertainment Space](https://blog.google/products/android/entertainm - Network accessline 7
**[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html)** , **[Entertainment - Network accessline 7
**[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html)** , **[Entertainment - Network accessline 8
Space](https://blog.google/products/android/entertainment-space/)** , and the Play Store. The integration adds - Network accessline 8
Space](https://blog.google/products/android/entertainment-space/)** , and the Play Store. The integration adds - Network accessline 9
less than 50 KB (compressed) to the average APK and takes most apps about a week of developer time. Learn more at our **[business site](http://play.google.com/console/about/programs/EngageSDK)**. - Network accessline 9
less than 50 KB (compressed) to the average APK and takes most apps about a week of developer time. Learn more at our **[business site](http://play.google.com/console/about/programs/EngageSDK)**. - Network accessline 11
site](http://play.google.com/console/about/programs/EngageSDK)**. - Network accessline 11
site](http://play.google.com/console/about/programs/EngageSDK)**. - Network accessline 44
> [!NOTE] > **Note:** Play Store eligibility aligns with the supported categories for [Play Premium Growth Tools](https://play.google.com/console/about/guides/premium-growth-tools/). If your news app has additional forms of content not list - Network accessline 44
> [!NOTE] > **Note:** Play Store eligibility aligns with the supported categories for [Play Premium Growth Tools](https://play.google.com/console/about/guides/premium-growth-tools/). If your news app has additional forms of content not list - Network accessline 45
> **Note:** Play Store eligibility aligns with the supported categories for [Play Premium Growth Tools](https://play.google.com/console/about/guides/premium-growth-tools/). If your news app has additional forms of content not listed in the - Network accessline 45
> **Note:** Play Store eligibility aligns with the supported categories for [Play Premium Growth Tools](https://play.google.com/console/about/guides/premium-growth-tools/). If your news app has additional forms of content not listed in the - Network accessline 50
[View on GitHub](https://github.com/android/skills/tree/main/play/engage-sdk-integration) - Network accessline 50
[View on GitHub](https://github.com/android/skills/tree/main/play/engage-sdk-integration) - Network accessline 54
Use the Engage SDK [Android skill](https://developer.android.com/tools/agents/android-skills) to integrate, debug, and resolve implementation issues. To install the skill from the [Android CLI](https://developer.android.com/tools/agents/and - Network accessline 54
Use the Engage SDK [Android skill](https://developer.android.com/tools/agents/android-skills) to integrate, debug, and resolve implementation issues. To install the skill from the [Android CLI](https://developer.android.com/tools/agents/and - Network accessline 77
 **Figure 1.** Entertainment Space UI showing a Recommendation Cluster from a single partner. - Network accessline 77
 **Figure 1.** Entertainment Space UI showing a Recommendation Cluster from a single partner. - Network accessline 78
- **Entity:** An object representing a single item in a cluster. An entity can be an ebook, an audio book, a book series, and more. See the [Provide entity data](https://developer.android.com/guide/playcore/engage/read#provide-entit - Network accessline 78
- **Entity:** An object representing a single item in a cluster. An entity can be an ebook, an audio book, a book series, and more. See the [Provide entity data](https://developer.android.com/guide/playcore/engage/read#provide-entit - Network accessline 79
can be an ebook, an audio book, a book series, and more. See the [Provide entity data](https://developer.android.com/guide/playcore/engage/read#provide-entity-data) section for a list of supported entity types. - Network accessline 79
can be an ebook, an audio book, a book series, and more. See the [Provide entity data](https://developer.android.com/guide/playcore/engage/read#provide-entity-data) section for a list of supported entity types. - Network accessline 80
entity data](https://developer.android.com/guide/playcore/engage/read#provide-entity-data) section for a list of supported entity - Network accessline 80
entity data](https://developer.android.com/guide/playcore/engage/read#provide-entity-data) section for a list of supported entity - Network accessline 83
 **Figure 2.** Entertainment Space UI showing a single Entity within a single partner's Recommendation Cluster. - Network accessline 83
 **Figure 2.** Entertainment Space UI showing a single Entity within a single partner's Recommendation Cluster. - Network accessline 88
 **Figure 3.** Entertainment Space UI showing a Continuation cluster with unfinished recommendations from multiple partners (only one recommendation is cu - Network accessline 88
 **Figure 3.** Entertainment Space UI showing a Continuation cluster with unfinished recommendations from multiple partners (only one recommendation is cu - Network accessline 95
 **Figure 4.** Entertainment Space UI showing a Featured cluster with recommendations from multiple partners (only one recommendation is currently visible - Network accessline 95
 **Figure 4.** Entertainment Space UI showing a Featured cluster with recommendations from multiple partners (only one recommendation is currently visible - Network accessline 110
The design is based on an implementation of a [bound service](https://developer.android.com/guide/components/bound-services). - Network accessline 110
The design is based on an implementation of a [bound service](https://developer.android.com/guide/components/bound-services). - Network accessline 111
service](https://developer.android.com/guide/components/bound-services). - Network accessline 111
service](https://developer.android.com/guide/components/bound-services). - Network accessline 140
|---|---|---| | Name | **Required** | | | Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/read#image-specs) for guidance. | - Network accessline 140
|---|---|---| | Name | **Required** | | | Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/read#image-specs) for guidance. | - Network accessline 141
| Name | **Required** | | | Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/read#image-specs) for guidance. | | Author | **Required** | At - Network accessline 141
| Name | **Required** | | | Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/read#image-specs) for guidance. | | Author | **Required** | At - Network accessline 142
| Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/read#image-specs) for guidance. | - Network accessline 142
| Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/read#image-specs) for guidance. | - Network accessline 143
| Author | **Required** | At least one author name must be provided. | | Action link uri | **Required** | The deep link to the provider app for the ebook. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.a - Network accessline 143
| Author | **Required** | At least one author name must be provided. | | Action link uri | **Required** | The deep link to the provider app for the ebook. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.a - Network accessline 144
| Action link uri | **Required** | The deep link to the provider app for the ebook. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 144
| Action link uri | **Required** | The deep link to the provider app for the ebook. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 165
|---|---|---| | Name | **Required** | | | Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/read#image-specs) for guidance. | - Network accessline 165
|---|---|---| | Name | **Required** | | | Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/read#image-specs) for guidance. | - Network accessline 166
| Name | **Required** | | | Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/read#image-specs) for guidance. | | Author | **Required** | At - Network accessline 166
| Name | **Required** | | | Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/read#image-specs) for guidance. | | Author | **Required** | At - Network accessline 167
| Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/read#image-specs) for guidance. | - Network accessline 167
| Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/read#image-specs) for guidance. | - Network accessline 168
| Author | **Required** | At least one author name must be provided. | | Action link uri | **Required** | The deep link to the provider app for the audiobook. Note: You can use deep links for attribution. [Refer to this FAQ](https://develop - Network accessline 168
| Author | **Required** | At least one author name must be provided. | | Action link uri | **Required** | The deep link to the provider app for the audiobook. Note: You can use deep links for attribution. [Refer to this FAQ](https://develop - Network accessline 169
| Action link uri | **Required** | The deep link to the provider app for the audiobook. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 169
| Action link uri | **Required** | The deep link to the provider app for the audiobook. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 191
|---|---|---| | Name | **Required** | | | Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/read#image-specs) for guidance. | - Network accessline 191
|---|---|---| | Name | **Required** | | | Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/read#image-specs) for guidance. | - Network accessline 192
| Name | **Required** | | | Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/read#image-specs) for guidance. | | Author | **Required** | At - Network accessline 192
| Name | **Required** | | | Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/read#image-specs) for guidance. | | Author | **Required** | At - Network accessline 193
| Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/read#image-specs) for guidance. | - Network accessline 193
| Poster images | **Required** | At least one image must be provided. See [Image Specifications](https://developer.android.com/guide/playcore/engage/read#image-specs) for guidance. | - Network accessline 194
| Author | **Required** | At least one author name must be present. | | Action link uri | **Required** | The deep link to the provider app for the audiobook or ebook. Note: You can use deep links for attribution. [Refer to this FAQ](https:/ - Network accessline 194
| Author | **Required** | At least one author name must be present. | | Action link uri | **Required** | The deep link to the provider app for the audiobook or ebook. Note: You can use deep links for attribution. [Refer to this FAQ](https:/ - Network accessline 195
| Action link uri | **Required** | The deep link to the provider app for the audiobook or ebook. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution - Network accessline 195
| Action link uri | **Required** | The deep link to the provider app for the audiobook or ebook. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution - Network accessline 233
.addPosterImage( new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 233
.addPosterImage( new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 234
new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(960) - Network accessline 234
new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(960) - Network accessline 235
.setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 235
.setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 239
.addAuthor("Michelle Obama") .addNarrator("Michelle Obama") .setActionLinkUri(Uri.parse("https://play.google/audiobooks/1")) - Network accessline 239
.addAuthor("Michelle Obama") .addNarrator("Michelle Obama") .setActionLinkUri(Uri.parse("https://play.google/audiobooks/1")) - Network accessline 240
.addNarrator("Michelle Obama") .setActionLinkUri(Uri.parse("https://play.google/audiobooks/1")) .setDurationMillis(16335L) - Network accessline 240
.addNarrator("Michelle Obama") .setActionLinkUri(Uri.parse("https://play.google/audiobooks/1")) .setDurationMillis(16335L) - Network accessline 241
.setActionLinkUri(Uri.parse("https://play.google/audiobooks/1")) - Network accessline 241
.setActionLinkUri(Uri.parse("https://play.google/audiobooks/1")) - Network accessline 251
It's recommended to have the content publish job executed in the background (for example, using [WorkManager](https://developer.android.com/topic/libraries/architecture/workmanager)) - Network accessline 251
It's recommended to have the content publish job executed in the background (for example, using [WorkManager](https://developer.android.com/topic/libraries/architecture/workmanager)) - Network accessline 252
(for example, using [WorkManager](https://developer.android.com/topic/libraries/architecture/workmanager)) - Network accessline 252
(for example, using [WorkManager](https://developer.android.com/topic/libraries/architecture/workmanager)) - Network accessline 281
[View on GitHub](https://github.com/android/skills/tree/main/play/engage-sdk-integration) - Network accessline 281
[View on GitHub](https://github.com/android/skills/tree/main/play/engage-sdk-integration) - Network accessline 285
To install the skill from the [Android CLI](https://developer.android.com/tools/agents/android-cli), run: - Network accessline 285
To install the skill from the [Android CLI](https://developer.android.com/tools/agents/android-cli), run: - Network accessline 546
.addPosterImage( Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 546
.addPosterImage( Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 547
Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(500) - Network accessline 547
Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(500) - Network accessline 548
.setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 548
.setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 551
.build()) .setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 551
.build()) .setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 552
.setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) .build() - Network accessline 552
.setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) .build() - Network accessline 553
.setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 553
.setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 565
.addPosterImage( new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 565
.addPosterImage( new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 566
new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(500) - Network accessline 566
new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(500) - Network accessline 567
.setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 567
.setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 570
.build()) .setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 570
.build()) .setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 571
.setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) .build(); - Network accessline 571
.setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) .build(); - Network accessline 572
.setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 572
.setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 812
In addition to making publish content API calls through a job, it is also required to set up a [`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive - Network accessline 812
In addition to making publish content API calls through a job, it is also required to set up a [`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive - Network accessline 813
required to set up a [`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive the request for a content publish. - Network accessline 813
required to set up a [`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive the request for a content publish. - Network accessline 814
[`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive - Network accessline 814
[`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive - Network accessline 922
The following [intents](https://developer.android.com/reference/android/content/Intent) will be sent by the - Network accessline 922
The following [intents](https://developer.android.com/reference/android/content/Intent) will be sent by the - Network accessline 931
For a step-by-step guide on verifying your integration after it is complete, see [Engage developer integration workflow](https://developer.android.com/guide/playcore/engage/workflow). - Network accessline 931
For a step-by-step guide on verifying your integration after it is complete, see [Engage developer integration workflow](https://developer.android.com/guide/playcore/engage/workflow). - Network accessline 932
[Engage developer integration workflow](https://developer.android.com/guide/playcore/engage/workflow). - Network accessline 932
[Engage developer integration workflow](https://developer.android.com/guide/playcore/engage/workflow). - Network accessline 936
See [Engage SDK Frequently Asked Questions](https://developer.android.com/guide/playcore/engage/faq) for - Network accessline 936
See [Engage SDK Frequently Asked Questions](https://developer.android.com/guide/playcore/engage/faq) for
play/engage-sdk-integration/references/android/guide/playcore/engage/shopping.md
- Network accessline 2
to deliver personalized recommendations and continuation content directly to users across multiple on-device surfaces, like **[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html - Network accessline 2
to deliver personalized recommendations and continuation content directly to users across multiple on-device surfaces, like **[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html - Network accessline 3
users across multiple on-device surfaces, like **[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html)** , **[Entertainment Space](https://blog.google/products/android/entertainm - Network accessline 3
users across multiple on-device surfaces, like **[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html)** , **[Entertainment Space](https://blog.google/products/android/entertainm - Network accessline 4
**[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html)** , **[Entertainment - Network accessline 4
**[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html)** , **[Entertainment - Network accessline 5
Space](https://blog.google/products/android/entertainment-space/)** , and the Play Store. The integration adds - Network accessline 5
Space](https://blog.google/products/android/entertainment-space/)** , and the Play Store. The integration adds - Network accessline 6
less than 50 KB (compressed) to the average APK and takes most apps about a week of developer time. Learn more at our **[business site](http://play.google.com/console/about/programs/EngageSDK)**. - Network accessline 6
less than 50 KB (compressed) to the average APK and takes most apps about a week of developer time. Learn more at our **[business site](http://play.google.com/console/about/programs/EngageSDK)**. - Network accessline 8
site](http://play.google.com/console/about/programs/EngageSDK)**. - Network accessline 8
site](http://play.google.com/console/about/programs/EngageSDK)**. - Network accessline 26
[View on GitHub](https://github.com/android/skills/tree/main/play/engage-sdk-integration) - Network accessline 26
[View on GitHub](https://github.com/android/skills/tree/main/play/engage-sdk-integration) - Network accessline 30
Use the Engage SDK [Android skill](https://developer.android.com/tools/agents/android-skills) to integrate, debug, and resolve implementation issues. To install the skill from the [Android CLI](https://developer.android.com/tools/agents/and - Network accessline 30
Use the Engage SDK [Android skill](https://developer.android.com/tools/agents/android-skills) to integrate, debug, and resolve implementation issues. To install the skill from the [Android CLI](https://developer.android.com/tools/agents/and - Network accessline 121
For more information, see [Package visibility in Android 11](https://developer.android.com/about/versions/11/privacy/package-visibility). - Network accessline 121
For more information, see [Package visibility in Android 11](https://developer.android.com/about/versions/11/privacy/package-visibility). - Network accessline 122
11](https://developer.android.com/about/versions/11/privacy/package-visibility). - Network accessline 122
11](https://developer.android.com/about/versions/11/privacy/package-visibility). - Network accessline 126
The design is based on an implementation of a [bound service](https://developer.android.com/guide/components/bound-services). - Network accessline 126
The design is based on an implementation of a [bound service](https://developer.android.com/guide/components/bound-services). - Network accessline 127
service](https://developer.android.com/guide/components/bound-services). - Network accessline 127
service](https://developer.android.com/guide/components/bound-services). - Network accessline 162
| Attribute | Requirement | Description | Format | |---|---|---|---| | Poster images | **Required** | At least one image must be provided. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/shopping#image-specs - Network accessline 162
| Attribute | Requirement | Description | Format | |---|---|---|---| | Poster images | **Required** | At least one image must be provided. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/shopping#image-specs - Network accessline 163
|---|---|---|---| | Poster images | **Required** | At least one image must be provided. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/shopping#image-specs) for guidance. | | Action Uri | **Required** | The - Network accessline 163
|---|---|---|---| | Poster images | **Required** | At least one image must be provided. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/shopping#image-specs) for guidance. | | Action Uri | **Required** | The - Network accessline 164
| Poster images | **Required** | At least one image must be provided. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/shopping#image-specs) for guidance. | - Network accessline 164
| Poster images | **Required** | At least one image must be provided. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/shopping#image-specs) for guidance. | - Network accessline 165
| Action Uri | **Required** | The deep link to the page in the app displaying details about the entity. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attr - Network accessline 165
| Action Uri | **Required** | The deep link to the page in the app displaying details about the entity. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attr - Network accessline 182
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | The deep link to the shopping cart in the partner's app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer. - Network accessline 182
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | The deep link to the shopping cart in the partner's app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer. - Network accessline 183
|---|---|---|---| | Action Uri | **Required** | The deep link to the shopping cart in the partner's app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-att - Network accessline 183
|---|---|---|---| | Action Uri | **Required** | The deep link to the shopping cart in the partner's app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-att - Network accessline 184
| Action Uri | **Required** | The deep link to the shopping cart in the partner's app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 184
| Action Uri | **Required** | The deep link to the shopping cart in the partner's app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 186
| Action Text | Optional | The call to action text of the button on the Shopping Cart (for example, *Your Shopping Bag*). **If no action text is provided by the developer, *View Cart* is the default.** This attribute is supported in version - Network accessline 186
| Action Text | Optional | The call to action text of the button on the Shopping Cart (for example, *Your Shopping Bag*). **If no action text is provided by the developer, *View Cart* is the default.** This attribute is supported in version - Network accessline 187
| Title | Optional | The title of the cart (for example, *Your Shopping Bag*). **If no title is provided by the developer, *Your cart* is the default.** **If developer partner publishes a separate cart per merchant, please include *merchant - Network accessline 187
| Title | Optional | The title of the cart (for example, *Your Shopping Bag*). **If no title is provided by the developer, *Your cart* is the default.** **If developer partner publishes a separate cart per merchant, please include *merchant - Network accessline 188
| Cart images | Optional | Images of each product in the cart. **Up to 10 images can be provided in order of priority; the actual number of images displayed depends on the device form factor.** | See [Image Specifications](https://developer - Network accessline 188
| Cart images | Optional | Images of each product in the cart. **Up to 10 images can be provided in order of priority; the actual number of images displayed depends on the device form factor.** | See [Image Specifications](https://developer - Network accessline 197
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | The deep link to the shopping list in the partner's app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer. - Network accessline 197
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | The deep link to the shopping list in the partner's app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer. - Network accessline 198
|---|---|---|---| | Action Uri | **Required** | The deep link to the shopping list in the partner's app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-att - Network accessline 198
|---|---|---|---| | Action Uri | **Required** | The deep link to the shopping list in the partner's app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-att - Network accessline 199
| Action Uri | **Required** | The deep link to the shopping list in the partner's app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 199
| Action Uri | **Required** | The deep link to the shopping list in the partner's app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 207
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | The deep link to reorder in the partner's app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.co - Network accessline 207
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | The deep link to reorder in the partner's app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.co - Network accessline 208
|---|---|---|---| | Action Uri | **Required** | The deep link to reorder in the partner's app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) - Network accessline 208
|---|---|---|---| | Action Uri | **Required** | The deep link to reorder in the partner's app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) - Network accessline 209
| Action Uri | **Required** | The deep link to reorder in the partner's app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 209
| Action Uri | **Required** | The deep link to reorder in the partner's app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 212
| Title | **Required** | The title of the reorder item. | Free text **Recommended text size: under 40 chars** (Text that is too long may show ellipses) | | Item labels | Optional (If not provided, poster images should be provided) | The lis - Network accessline 212
| Title | **Required** | The title of the reorder item. | Free text **Recommended text size: under 40 chars** (Text that is too long may show ellipses) | | Item labels | Optional (If not provided, poster images should be provided) | The lis - Network accessline 214
| Poster images | Optional (If not provided, item labels should be provided) | Images of the items in the previous order. **Up to 10 images can be provided in order of priority; the actual number of images displayed depends on the device fo - Network accessline 214
| Poster images | Optional (If not provided, item labels should be provided) | Images of the items in the previous order. **Up to 10 images can be provided in order of priority; the actual number of images displayed depends on the device fo - Network accessline 226
| OrderDeliveryTimeWindow - Start Time | Optional | The epoch timestamp in milliseconds on/after which the order will be delivered or be ready for pickup. | Epoch timestamp in milliseconds | | OrderDeliveryTimeWindow - End Time | Optional | - Network accessline 226
| OrderDeliveryTimeWindow - Start Time | Optional | The epoch timestamp in milliseconds on/after which the order will be delivered or be ready for pickup. | Epoch timestamp in milliseconds | | OrderDeliveryTimeWindow - End Time | Optional | - Network accessline 227
| OrderDeliveryTimeWindow - End Time | Optional | The epoch timestamp in milliseconds on/before which the order will be delivered or be ready for pickup. | Epoch timestamp in milliseconds | | Poster images | Optional | Image of one item/pro - Network accessline 227
| OrderDeliveryTimeWindow - End Time | Optional | The epoch timestamp in milliseconds on/before which the order will be delivered or be ready for pickup. | Epoch timestamp in milliseconds | | Poster images | Optional | Image of one item/pro - Network accessline 228
| Poster images | Optional | Image of one item/product that is part of the order. Recommended aspect ratio is 1:1 | See [Image Specifications](https://developer.android.com/guide/playcore/engage/shopping#image-specs) for guidance. | - Network accessline 228
| Poster images | Optional | Image of one item/product that is part of the order. Recommended aspect ratio is 1:1 | See [Image Specifications](https://developer.android.com/guide/playcore/engage/shopping#image-specs) for guidance. | - Network accessline 261
It is recommended to have the content publish job executed in the background (for example, using [WorkManager](https://developer.android.com/topic/libraries/architecture/workmanager)) - Network accessline 261
It is recommended to have the content publish job executed in the background (for example, using [WorkManager](https://developer.android.com/topic/libraries/architecture/workmanager)) - Network accessline 262
(for example, using [WorkManager](https://developer.android.com/topic/libraries/architecture/workmanager)) - Network accessline 262
(for example, using [WorkManager](https://developer.android.com/topic/libraries/architecture/workmanager)) - Network accessline 298
[View on GitHub](https://github.com/android/skills/tree/main/play/engage-sdk-integration) - Network accessline 298
[View on GitHub](https://github.com/android/skills/tree/main/play/engage-sdk-integration) - Network accessline 302
To install the skill from the [Android CLI](https://developer.android.com/tools/agents/android-cli), run: - Network accessline 302
To install the skill from the [Android CLI](https://developer.android.com/tools/agents/android-cli), run: - Network accessline 440
| Title | **Required** | The title for the Recommendation Cluster. **Recommended text size: under 25 chars** (Text that is too long may show ellipses) | | Subtitle | Optional | The subtitle for the Recommendation Cluster. | | Action Uri | O - Network accessline 440
| Title | **Required** | The title for the Recommendation Cluster. **Recommended text size: under 25 chars** (Text that is too long may show ellipses) | | Subtitle | Optional | The subtitle for the Recommendation Cluster. | | Action Uri | O - Network accessline 442
| Action Uri | Optional | The deep link to the page in the partner app where users can see the complete list of recommendations. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/ - Network accessline 442
| Action Uri | Optional | The deep link to the page in the partner app where users can see the complete list of recommendations. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/ - Network accessline 685
.addPosterImage( Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 685
.addPosterImage( Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 686
Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(500) - Network accessline 686
Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(500) - Network accessline 687
.setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 687
.setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 690
.build()) .setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 690
.build()) .setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 691
.setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) .build() - Network accessline 691
.setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) .build() - Network accessline 692
.setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 692
.setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 704
.addPosterImage( new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 704
.addPosterImage( new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 705
new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(500) - Network accessline 705
new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(500) - Network accessline 706
.setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 706
.setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 709
.build()) .setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 709
.build()) .setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 710
.setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) .build(); - Network accessline 710
.setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) .build(); - Network accessline 711
.setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 711
.setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 1039
In addition to making publish content API calls through a job, it is also required to set up a [`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive - Network accessline 1039
In addition to making publish content API calls through a job, it is also required to set up a [`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive - Network accessline 1040
required to set up a [`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive the request for a content publish. - Network accessline 1040
required to set up a [`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive the request for a content publish. - Network accessline 1041
[`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive - Network accessline 1041
[`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive - Network accessline 1210
The following [intents](https://developer.android.com/reference/android/content/Intent) are sent by the - Network accessline 1210
The following [intents](https://developer.android.com/reference/android/content/Intent) are sent by the - Network accessline 1222
For a step-by-step guide on verifying your integration after it is complete, see [Engage developer integration workflow](https://developer.android.com/guide/playcore/engage/workflow). - Network accessline 1222
For a step-by-step guide on verifying your integration after it is complete, see [Engage developer integration workflow](https://developer.android.com/guide/playcore/engage/workflow). - Network accessline 1223
[Engage developer integration workflow](https://developer.android.com/guide/playcore/engage/workflow). - Network accessline 1223
[Engage developer integration workflow](https://developer.android.com/guide/playcore/engage/workflow). - Network accessline 1227
See [Engage SDK Frequently Asked Questions](https://developer.android.com/guide/playcore/engage/faq) for - Network accessline 1227
See [Engage SDK Frequently Asked Questions](https://developer.android.com/guide/playcore/engage/faq) for
play/engage-sdk-integration/references/android/guide/playcore/engage/social.md
- Network accessline 2
to deliver personalized recommendations and continuation content directly to users across multiple on-device surfaces, like **[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html - Network accessline 2
to deliver personalized recommendations and continuation content directly to users across multiple on-device surfaces, like **[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html - Network accessline 3
users across multiple on-device surfaces, like **[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html)** , **[Entertainment Space](https://blog.google/products/android/entertainm - Network accessline 3
users across multiple on-device surfaces, like **[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html)** , **[Entertainment Space](https://blog.google/products/android/entertainm - Network accessline 4
**[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html)** , **[Entertainment - Network accessline 4
**[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html)** , **[Entertainment - Network accessline 5
Space](https://blog.google/products/android/entertainment-space/)** , and the Play Store. The integration adds - Network accessline 5
Space](https://blog.google/products/android/entertainment-space/)** , and the Play Store. The integration adds - Network accessline 6
less than 50 KB (compressed) to the average APK and takes most apps about a week of developer time. Learn more at our **[business site](http://play.google.com/console/about/programs/EngageSDK)**. - Network accessline 6
less than 50 KB (compressed) to the average APK and takes most apps about a week of developer time. Learn more at our **[business site](http://play.google.com/console/about/programs/EngageSDK)**. - Network accessline 8
site](http://play.google.com/console/about/programs/EngageSDK)**. - Network accessline 8
site](http://play.google.com/console/about/programs/EngageSDK)**. - Network accessline 26
[View on GitHub](https://github.com/android/skills/tree/main/play/engage-sdk-integration) - Network accessline 26
[View on GitHub](https://github.com/android/skills/tree/main/play/engage-sdk-integration) - Network accessline 30
Use the Engage SDK [Android skill](https://developer.android.com/tools/agents/android-skills) to integrate, debug, and resolve implementation issues. To install the skill from the [Android CLI](https://developer.android.com/tools/agents/and - Network accessline 30
Use the Engage SDK [Android skill](https://developer.android.com/tools/agents/android-skills) to integrate, debug, and resolve implementation issues. To install the skill from the [Android CLI](https://developer.android.com/tools/agents/and - Network accessline 100
The design is based on an implementation of a [bound service](https://developer.android.com/guide/components/bound-services). - Network accessline 100
The design is based on an implementation of a [bound service](https://developer.android.com/guide/components/bound-services). - Network accessline 101
service](https://developer.android.com/guide/components/bound-services). - Network accessline 101
service](https://developer.android.com/guide/components/bound-services). - Network accessline 123
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action URI | **Required** for all surfaces other than Google TV | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to th - Network accessline 123
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action URI | **Required** for all surfaces other than Google TV | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to th - Network accessline 124
|---|---|---|---| | Action URI | **Required** for all surfaces other than Google TV | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcor - Network accessline 124
|---|---|---|---| | Action URI | **Required** for all surfaces other than Google TV | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcor - Network accessline 125
| Action URI | **Required** for all surfaces other than Google TV | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deepl - Network accessline 125
| Action URI | **Required** for all surfaces other than Google TV | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deepl - Network accessline 128
| Comments Summary | Optional | Summary of comments for the post. | String | | **Post related metadata (Required)** |||| | Image(s) | Required | Image(s) should be in **portrait aspect ratio.** The UI may show only 1 image when multiple ima - Network accessline 128
| Comments Summary | Optional | Summary of comments for the post. | String | | **Post related metadata (Required)** |||| | Image(s) | Required | Image(s) should be in **portrait aspect ratio.** The UI may show only 1 image when multiple ima - Network accessline 129
| **Post related metadata (Required)** |||| | Image(s) | Required | Image(s) should be in **portrait aspect ratio.** The UI may show only 1 image when multiple images are provided. However, the UI may provide visual indication that there ar - Network accessline 129
| **Post related metadata (Required)** |||| | Image(s) | Required | Image(s) should be in **portrait aspect ratio.** The UI may show only 1 image when multiple images are provided. However, the UI may provide visual indication that there ar - Network accessline 130
| Image(s) | Required | Image(s) should be in **portrait aspect ratio.** The UI may show only 1 image when multiple images are provided. However, the UI may provide visual indication that there are more images in the app. *If the post is a - Network accessline 130
| Image(s) | Required | Image(s) should be in **portrait aspect ratio.** The UI may show only 1 image when multiple images are provided. However, the UI may provide visual indication that there are more images in the app. *If the post is a - Network accessline 135
| **Profile related metadata (Optional)** |||| | Name | Required | Profile name or id or handle, eg "John Doe", "@TeamPixel" | String(recommended max 25 chars) | | Avatar | Required | Profile picture or avatar image of the user. **Square 1: - Network accessline 135
| **Profile related metadata (Optional)** |||| | Name | Required | Profile name or id or handle, eg "John Doe", "@TeamPixel" | String(recommended max 25 chars) | | Avatar | Required | Profile picture or avatar image of the user. **Square 1: - Network accessline 136
| Name | Required | Profile name or id or handle, eg "John Doe", "@TeamPixel" | String(recommended max 25 chars) | | Avatar | Required | Profile picture or avatar image of the user. **Square 1:1 image** | See [Image Specifications](https:// - Network accessline 136
| Name | Required | Profile name or id or handle, eg "John Doe", "@TeamPixel" | String(recommended max 25 chars) | | Avatar | Required | Profile picture or avatar image of the user. **Square 1:1 image** | See [Image Specifications](https:// - Network accessline 137
| Avatar | Required | Profile picture or avatar image of the user. **Square 1:1 image** | See [Image Specifications](https://developer.android.com/guide/playcore/engage/social#image-specs) for guidance. | - Network accessline 137
| Avatar | Required | Profile picture or avatar image of the user. **Square 1:1 image** | See [Image Specifications](https://developer.android.com/guide/playcore/engage/social#image-specs) for guidance. | - Network accessline 138
| Additional Image | Optional | Profile badge. for example - verified badge **Square 1:1 image** | See [Image Specifications](https://developer.android.com/guide/playcore/engage/social#image-specs) for guidance. | - Network accessline 138
| Additional Image | Optional | Profile badge. for example - verified badge **Square 1:1 image** | See [Image Specifications](https://developer.android.com/guide/playcore/engage/social#image-specs) for guidance. | - Network accessline 142
| Count Value | Optional | The number of interactions as a value. **Note:** Provide Count Value instead of Count if your app doesn't handle logic on how a large number should be optimized for different display sizes. If both Count and Count - Network accessline 142
| Count Value | Optional | The number of interactions as a value. **Note:** Provide Count Value instead of Count if your app doesn't handle logic on how a large number should be optimized for different display sizes. If both Count and Count - Network accessline 143
| Label | Optional | Indicate what the interaction label is for. For example - "Likes". | String | | Visual | Optional | Indicate what the interaction is for. For example - Image showing Likes icon, emoji. Can provide more than 1 image, tho - Network accessline 143
| Label | Optional | Indicate what the interaction label is for. For example - "Likes". | String | | Visual | Optional | Indicate what the interaction is for. For example - Image showing Likes icon, emoji. Can provide more than 1 image, tho - Network accessline 144
| Visual | Optional | Indicate what the interaction is for. For example - Image showing Likes icon, emoji. Can provide more than 1 image, though not all may not be shown on all form factors. **Note:** Must be Square 1:1 image | See [Image S - Network accessline 144
| Visual | Optional | Indicate what the interaction is for. For example - Image showing Likes icon, emoji. Can provide more than 1 image, though not all may not be shown on all form factors. **Note:** Must be Square 1:1 image | See [Image S - Network accessline 151
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action URI | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 151
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action URI | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 152
|---|---|---|---| | Action URI | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 152
|---|---|---|---| | Action URI | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 153
| Action URI | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | URI | - Network accessline 153
| Action URI | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | URI | - Network accessline 156
| Comments Summary | Optional | Summary of comments for the post. | String | | **Post related metadata (Required)** At least one of TextContent, Image or WebContent is required |||| | Image(s) | Optional | Image(s) should be in **portrait a - Network accessline 156
| Comments Summary | Optional | Summary of comments for the post. | String | | **Post related metadata (Required)** At least one of TextContent, Image or WebContent is required |||| | Image(s) | Optional | Image(s) should be in **portrait a - Network accessline 157
| **Post related metadata (Required)** At least one of TextContent, Image or WebContent is required |||| | Image(s) | Optional | Image(s) should be in **portrait aspect ratio.** The UI may show only 1 image when multiple images are provided - Network accessline 157
| **Post related metadata (Required)** At least one of TextContent, Image or WebContent is required |||| | Image(s) | Optional | Image(s) should be in **portrait aspect ratio.** The UI may show only 1 image when multiple images are provided - Network accessline 158
| Image(s) | Optional | Image(s) should be in **portrait aspect ratio.** The UI may show only 1 image when multiple images are provided. However, the UI may provide visual indication that there are more images in the app. *If the post is a - Network accessline 158
| Image(s) | Optional | Image(s) should be in **portrait aspect ratio.** The UI may show only 1 image when multiple images are provided. However, the UI may provide visual indication that there are more images in the app. *If the post is a - Network accessline 160
| **Video Content (Optional)** |||| | Duration | Required | The duration of the video in milliseconds. | Long | | Image | Required | Preview image of the video content. | See [Image Specifications](https://developer.android.com/guide/playco - Network accessline 160
| **Video Content (Optional)** |||| | Duration | Required | The duration of the video in milliseconds. | Long | | Image | Required | Preview image of the video content. | See [Image Specifications](https://developer.android.com/guide/playco - Network accessline 161
| Duration | Required | The duration of the video in milliseconds. | Long | | Image | Required | Preview image of the video content. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/social#image-specs) for gu - Network accessline 161
| Duration | Required | The duration of the video in milliseconds. | Long | | Image | Required | Preview image of the video content. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/social#image-specs) for gu - Network accessline 162
| Image | Required | Preview image of the video content. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/social#image-specs) for guidance. | - Network accessline 162
| Image | Required | Preview image of the video content. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/social#image-specs) for guidance. | - Network accessline 164
| Link Preview - Title | Required | Text to indicate the title of the web page content | String | | Link Preview - Hostname | Required | Text to indicate the web page owner, eg "INSIDER" | String | | Link Preview - Image | Optional | Hero i - Network accessline 164
| Link Preview - Title | Required | Text to indicate the title of the web page content | String | | Link Preview - Hostname | Required | Text to indicate the web page owner, eg "INSIDER" | String | | Link Preview - Image | Optional | Hero i - Network accessline 165
| Link Preview - Hostname | Required | Text to indicate the web page owner, eg "INSIDER" | String | | Link Preview - Image | Optional | Hero image for the web content | See [Image Specifications](https://developer.android.com/guide/playcore - Network accessline 165
| Link Preview - Hostname | Required | Text to indicate the web page owner, eg "INSIDER" | String | | Link Preview - Image | Optional | Hero image for the web content | See [Image Specifications](https://developer.android.com/guide/playcore - Network accessline 166
| Link Preview - Image | Optional | Hero image for the web content | See [Image Specifications](https://developer.android.com/guide/playcore/engage/social#image-specs) for guidance. | - Network accessline 166
| Link Preview - Image | Optional | Hero image for the web content | See [Image Specifications](https://developer.android.com/guide/playcore/engage/social#image-specs) for guidance. | - Network accessline 169
| Name | Required | Profile name or id or handle, eg "John Doe", "@TeamPixel." | String(recommended max 25 chars) | | Additional Text | Optional | Could be used as profile id or handle or additional metadata For example "@John-Doe", "5M fol - Network accessline 169
| Name | Required | Profile name or id or handle, eg "John Doe", "@TeamPixel." | String(recommended max 25 chars) | | Additional Text | Optional | Could be used as profile id or handle or additional metadata For example "@John-Doe", "5M fol - Network accessline 170
| Additional Text | Optional | Could be used as profile id or handle or additional metadata For example "@John-Doe", "5M followers", "You might like", "Trending", "5 new posts" | String(recommended max 40 chars) | | Avatar | Required | Prof - Network accessline 170
| Additional Text | Optional | Could be used as profile id or handle or additional metadata For example "@John-Doe", "5M followers", "You might like", "Trending", "5 new posts" | String(recommended max 40 chars) | | Avatar | Required | Prof - Network accessline 171
| Avatar | Required | Profile picture or avatar image of the user. **Square 1:1 image** | See [Image Specifications](https://developer.android.com/guide/playcore/engage/social#image-specs) for guidance. | - Network accessline 171
| Avatar | Required | Profile picture or avatar image of the user. **Square 1:1 image** | See [Image Specifications](https://developer.android.com/guide/playcore/engage/social#image-specs) for guidance. | - Network accessline 172
| Additional Image | Optional | Profile badge, for example - verified badge **Square 1:1 image** | See [Image Specifications](https://developer.android.com/guide/playcore/engage/social#image-specs) for guidance. | - Network accessline 172
| Additional Image | Optional | Profile badge, for example - verified badge **Square 1:1 image** | See [Image Specifications](https://developer.android.com/guide/playcore/engage/social#image-specs) for guidance. | - Network accessline 175
| CountWithOptionalLabel | Required | Indicate the number of interactions with an optional label, for example - "3.7 M Likes." **Note:** Partners should use either **Count** or **CountWithOptionalLabel**. | String | | Label | Optional If no - Network accessline 175
| CountWithOptionalLabel | Required | Indicate the number of interactions with an optional label, for example - "3.7 M Likes." **Note:** Partners should use either **Count** or **CountWithOptionalLabel**. | String | | Label | Optional If no - Network accessline 176
| Label | Optional If not provided, **Visual** must be provided. | Indicate what the interaction is for. For example - "Likes." | String (recommended max 20 chars for count + label combined) | | Visual | Optional If not provided, **Label** - Network accessline 176
| Label | Optional If not provided, **Visual** must be provided. | Indicate what the interaction is for. For example - "Likes." | String (recommended max 20 chars for count + label combined) | | Visual | Optional If not provided, **Label** - Network accessline 177
| Visual | Optional If not provided, **Label** must be provided. | Indicate what the interaction is for. For example - Image showing Likes icon, emoji. Can provide more than 1 image, though not all may not be shown on all form factors. **Sq - Network accessline 177
| Visual | Optional If not provided, **Label** must be provided. | Indicate what the interaction is for. For example - Image showing Likes icon, emoji. Can provide more than 1 image, though not all may not be shown on all form factors. **Sq - Network accessline 202
It is recommended to have the content publish job executed in the background (for example, using [WorkManager](https://developer.android.com/topic/libraries/architecture/workmanager)) - Network accessline 202
It is recommended to have the content publish job executed in the background (for example, using [WorkManager](https://developer.android.com/topic/libraries/architecture/workmanager)) - Network accessline 203
(for example, using [WorkManager](https://developer.android.com/topic/libraries/architecture/workmanager)) - Network accessline 203
(for example, using [WorkManager](https://developer.android.com/topic/libraries/architecture/workmanager)) - Network accessline 229
[View on GitHub](https://github.com/android/skills/tree/main/play/engage-sdk-integration) - Network accessline 229
[View on GitHub](https://github.com/android/skills/tree/main/play/engage-sdk-integration) - Network accessline 233
To install the skill from the [Android CLI](https://developer.android.com/tools/agents/android-cli), run: - Network accessline 233
To install the skill from the [Android CLI](https://developer.android.com/tools/agents/android-cli), run: - Network accessline 362
| Title | **Required** | The title for the Recommendation Cluster (for example, *Latest from your friends*). **Recommended text size: under 25 chars** (Text that is too long may show ellipses) | | Subtitle | Optional | The subtitle for the - Network accessline 362
| Title | **Required** | The title for the Recommendation Cluster (for example, *Latest from your friends*). **Recommended text size: under 25 chars** (Text that is too long may show ellipses) | | Subtitle | Optional | The subtitle for the - Network accessline 364
| Action Uri | Optional | The deep link to the page in the partner app where users can see the complete list of recommendations. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/ - Network accessline 364
| Action Uri | Optional | The deep link to the page in the partner app where users can see the complete list of recommendations. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/ - Network accessline 428
.addPosterImage( Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 428
.addPosterImage( Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 429
Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(500) - Network accessline 429
Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(500) - Network accessline 430
.setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 430
.setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 433
.build()) .setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 433
.build()) .setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 434
.setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) .build() - Network accessline 434
.setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) .build() - Network accessline 435
.setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 435
.setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 447
.addPosterImage( new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 447
.addPosterImage( new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 448
new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(500) - Network accessline 448
new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(500) - Network accessline 449
.setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 449
.setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 452
.build()) .setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 452
.build()) .setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 453
.setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) .build(); - Network accessline 453
.setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) .build(); - Network accessline 454
.setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 454
.setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 642
In addition to making publish content API calls through a job, it is also required to set up a [`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive - Network accessline 642
In addition to making publish content API calls through a job, it is also required to set up a [`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive - Network accessline 643
required to set up a [`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive the request for a content publish. - Network accessline 643
required to set up a [`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive the request for a content publish. - Network accessline 644
[`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive - Network accessline 644
[`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive - Network accessline 713
The following [intents](https://developer.android.com/reference/android/content/Intent) will be sent by the - Network accessline 713
The following [intents](https://developer.android.com/reference/android/content/Intent) will be sent by the - Network accessline 720
For a step-by-step guide on verifying your integration after it is complete, see [Engage developer integration workflow](https://developer.android.com/guide/playcore/engage/workflow). - Network accessline 720
For a step-by-step guide on verifying your integration after it is complete, see [Engage developer integration workflow](https://developer.android.com/guide/playcore/engage/workflow). - Network accessline 721
[Engage developer integration workflow](https://developer.android.com/guide/playcore/engage/workflow). - Network accessline 721
[Engage developer integration workflow](https://developer.android.com/guide/playcore/engage/workflow). - Network accessline 725
See [Engage SDK Frequently Asked Questions](https://developer.android.com/guide/playcore/engage/faq) for - Network accessline 725
See [Engage SDK Frequently Asked Questions](https://developer.android.com/guide/playcore/engage/faq) for
play/engage-sdk-integration/references/android/guide/playcore/engage/travel.md
- Network accessline 2
to deliver personalized recommendations and continuation content directly to users across multiple on-device surfaces, like **[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html - Network accessline 2
to deliver personalized recommendations and continuation content directly to users across multiple on-device surfaces, like **[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html - Network accessline 3
users across multiple on-device surfaces, like **[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html)** , **[Entertainment Space](https://blog.google/products/android/entertainm - Network accessline 3
users across multiple on-device surfaces, like **[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html)** , **[Entertainment Space](https://blog.google/products/android/entertainm - Network accessline 4
**[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html)** , **[Entertainment - Network accessline 4
**[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html)** , **[Entertainment - Network accessline 5
Space](https://blog.google/products/android/entertainment-space/)** , and the Play Store. The integration adds - Network accessline 5
Space](https://blog.google/products/android/entertainment-space/)** , and the Play Store. The integration adds - Network accessline 6
less than 50 KB (compressed) to the average APK and takes most apps about a week of developer time. Learn more at our **[business site](http://play.google.com/console/about/programs/EngageSDK)**. - Network accessline 6
less than 50 KB (compressed) to the average APK and takes most apps about a week of developer time. Learn more at our **[business site](http://play.google.com/console/about/programs/EngageSDK)**. - Network accessline 8
site](http://play.google.com/console/about/programs/EngageSDK)**. - Network accessline 8
site](http://play.google.com/console/about/programs/EngageSDK)**. - Network accessline 26
[View on GitHub](https://github.com/android/skills/tree/main/play/engage-sdk-integration) - Network accessline 26
[View on GitHub](https://github.com/android/skills/tree/main/play/engage-sdk-integration) - Network accessline 30
Use the Engage SDK [Android skill](https://developer.android.com/tools/agents/android-skills) to integrate, debug, and resolve implementation issues. To install the skill from the [Android CLI](https://developer.android.com/tools/agents/and - Network accessline 30
Use the Engage SDK [Android skill](https://developer.android.com/tools/agents/android-skills) to integrate, debug, and resolve implementation issues. To install the skill from the [Android CLI](https://developer.android.com/tools/agents/and - Network accessline 66
 **Figure 1:** UI showing a single ArticleEntity within Recommendations cluster. - Network accessline 66
 **Figure 1:** UI showing a single ArticleEntity within Recommendations cluster. - Network accessline 71
 **Figure 2:** UI showing a single EventEntity within Recommendations cluster. - Network accessline 71
 **Figure 2:** UI showing a single EventEntity within Recommendations cluster. - Network accessline 76
 **Figure 3:** UI showing a single LodgingEntity within Recommendations cluster. - Network accessline 76
 **Figure 3:** UI showing a single LodgingEntity within Recommendations cluster. - Network accessline 82
 **Figure 4:** UI showing a single StoreEntity within Recommendations cluster. - Network accessline 82
 **Figure 4:** UI showing a single StoreEntity within Recommendations cluster. - Network accessline 90
 **Figure 5:** UI showing a single PointOfInterestEntity within Recommendations cluster. - Network accessline 90
 **Figure 5:** UI showing a single PointOfInterestEntity within Recommendations cluster. - Network accessline 101
 **Figure 6.** UI showing a single RestaurantReservationEntity within a Reservation cluster. - Network accessline 101
 **Figure 6.** UI showing a single RestaurantReservationEntity within a Reservation cluster. - Network accessline 114
 **Figure 7.** UI showing a single EventReservationEntity within a Reservation cluster. - Network accessline 114
 **Figure 7.** UI showing a single EventReservationEntity within a Reservation cluster. - Network accessline 119
 **Figure 8.** UI showing a single LodgingReservationEntity within a Reservation cluster. - Network accessline 119
 **Figure 8.** UI showing a single LodgingReservationEntity within a Reservation cluster. - Network accessline 125
 **Figure 9.** UI showing a single TransportationReservationEntity within a Reservation cluster. - Network accessline 125
 **Figure 9.** UI showing a single TransportationReservationEntity within a Reservation cluster. - Network accessline 130
 **Figure 10.** UI showing a single VehicleRentalReservationEntity within a Reservation cluster. - Network accessline 130
 **Figure 10.** UI showing a single VehicleRentalReservationEntity within a Reservation cluster. - Network accessline 142
 **Figure 11:** UI showing a FeaturedCluster with a list of GenericFeaturedEntity - Network accessline 142
 **Figure 11:** UI showing a FeaturedCluster with a list of GenericFeaturedEntity - Network accessline 165
The design is based on an implementation of a [bound service](https://developer.android.com/guide/components/bound-services). - Network accessline 165
The design is based on an implementation of a [bound service](https://developer.android.com/guide/components/bound-services). - Network accessline 166
[bound service](https://developer.android.com/guide/components/bound-services). - Network accessline 166
[bound service](https://developer.android.com/guide/components/bound-services). - Network accessline 200
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 200
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 201
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 201
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 202
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 202
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 203
| Poster images | **Required** | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** If a badge is provided, ensure safe space of 24 dps at both the top and bottom of the image | See [Imag - Network accessline 203
| Poster images | **Required** | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** If a badge is provided, ensure safe space of 24 dps at both the top and bottom of the image | See [Imag - Network accessline 207
| Badges | Optional | Each badge is either free text (max 15 chars) or small image. Special UX treatment on top of image/video, For example, as badge overlay on the image - "Live update" - Article read duration | | | Badge - Text | Option - Network accessline 207
| Badges | Optional | Each badge is either free text (max 15 chars) or small image. Special UX treatment on top of image/video, For example, as badge overlay on the image - "Live update" - Article read duration | | | Badge - Text | Option - Network accessline 208
| Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 chars** | | Badge - Image | Optional | Small image Special UX treatment, for example as bad - Network accessline 208
| Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 chars** | | Badge - Image | Optional | Small image Special UX treatment, for example as bad - Network accessline 209
| Badge - Image | Optional | Small image Special UX treatment, for example as badge overlay on the image/video thumbnail. **Note:** Either text or image is required for the badge | See [Image Specifications](https://developer.android.com/gu - Network accessline 209
| Badge - Image | Optional | Small image Special UX treatment, for example as badge overlay on the image/video thumbnail. **Note:** Either text or image is required for the badge | See [Image Specifications](https://developer.android.com/gu - Network accessline 210
| Content Categories | Optional | Describe the category of the content in the entity. | List of Enums See the [Content Category section](https://developer.android.com/guide/playcore/engage/travel#content-category) for guidance. | - Network accessline 210
| Content Categories | Optional | Describe the category of the content in the entity. | List of Enums See the [Content Category section](https://developer.android.com/guide/playcore/engage/travel#content-category) for guidance. | - Network accessline 217
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 217
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 218
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 218
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 219
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 219
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 220
| Title | **Required** | Title of the entity. | Free text **Recommended text size: Max 50 chars** | | Poster images | Optional | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** Image i - Network accessline 220
| Title | **Required** | Title of the entity. | Free text **Recommended text size: Max 50 chars** | | Poster images | Optional | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** Image i - Network accessline 221
| Poster images | Optional | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** Image is highly recommended. If a badge is provided, ensure safe space of 24 dps at both the top and bottom - Network accessline 221
| Poster images | Optional | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** Image is highly recommended. If a badge is provided, ensure safe space of 24 dps at both the top and bottom - Network accessline 222
| Source - Title | Optional | The name of the author, organization, or reporter | Free text **Recommended text size: Under 25 chars** | | Source - Image | Optional | An image of the source like the author, the organization, reporter | See [ - Network accessline 222
| Source - Title | Optional | The name of the author, organization, or reporter | Free text **Recommended text size: Under 25 chars** | | Source - Image | Optional | An image of the source like the author, the organization, reporter | See [ - Network accessline 223
| Source - Image | Optional | An image of the source like the author, the organization, reporter | See [Image Specifications](https://developer.android.com/guide/playcore/engage/travel#image-specs) for guidance. | - Network accessline 223
| Source - Image | Optional | An image of the source like the author, the organization, reporter | See [Image Specifications](https://developer.android.com/guide/playcore/engage/travel#image-specs) for guidance. | - Network accessline 226
| Badges | Optional | Each badge is either free text (max 15 chars) or small image. Special UX treatment on top of image/video, for example, as badge overlay on the image - "Live update" - Article read duration | | | Badge - Text | Option - Network accessline 226
| Badges | Optional | Each badge is either free text (max 15 chars) or small image. Special UX treatment on top of image/video, for example, as badge overlay on the image - "Live update" - Article read duration | | | Badge - Text | Option - Network accessline 227
| Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 chars** | | Badge - Image | Optional | Small image Special UX treatment, for example as bad - Network accessline 227
| Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 chars** | | Badge - Image | Optional | Small image Special UX treatment, for example as bad - Network accessline 228
| Badge - Image | Optional | Small image Special UX treatment, for example as badge overlay on the image/video thumbnail. **Note:** Either text or image is required for the badge | See [Image Specifications](https://developer.android.com/gu - Network accessline 228
| Badge - Image | Optional | Small image Special UX treatment, for example as badge overlay on the image/video thumbnail. **Note:** Either text or image is required for the badge | See [Image Specifications](https://developer.android.com/gu - Network accessline 230
| Last Engagement Time | Optional | The epoch timestamp in milliseconds when the user interacted with this entity last time. | Epoch timestamp in milliseconds | | Progress Percentage | Optional | The percentage of the full content consumed - Network accessline 230
| Last Engagement Time | Optional | The epoch timestamp in milliseconds when the user interacted with this entity last time. | Epoch timestamp in milliseconds | | Progress Percentage | Optional | The percentage of the full content consumed - Network accessline 231
| Progress Percentage | Optional | The percentage of the full content consumed by the user to date. | An int value between 0\~100 inclusive. | | Content Categories | Optional | Describe the category of the content in the entity. | List of E - Network accessline 231
| Progress Percentage | Optional | The percentage of the full content consumed by the user to date. | An int value between 0\~100 inclusive. | | Content Categories | Optional | Describe the category of the content in the entity. | List of E - Network accessline 232
| Content Categories | Optional | Describe the category of the content in the entity. | List of Enums See the [Content Category section](https://developer.android.com/guide/playcore/engage/travel#content-category) for guidance. | - Network accessline 232
| Content Categories | Optional | Describe the category of the content in the entity. | List of Enums See the [Content Category section](https://developer.android.com/guide/playcore/engage/travel#content-category) for guidance. | - Network accessline 239
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 239
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 240
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 240
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 241
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 241
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 242
| Title | **Required** | Title of the entity. | String **Recommended text size: Max 50 chars** | | Localized Start time - Timestamp | **Required** | The epoch timestamp when the event is expected to start. | Joda-Time Instant | | Localized - Network accessline 242
| Title | **Required** | Title of the entity. | String **Recommended text size: Max 50 chars** | | Localized Start time - Timestamp | **Required** | The epoch timestamp when the event is expected to start. | Joda-Time Instant | | Localized - Network accessline 243
| Localized Start time - Timestamp | **Required** | The epoch timestamp when the event is expected to start. | Joda-Time Instant | | Localized Start time - Timezone | **Required** | The timezone in which the event is expected to start. | Jo - Network accessline 243
| Localized Start time - Timestamp | **Required** | The epoch timestamp when the event is expected to start. | Joda-Time Instant | | Localized Start time - Timezone | **Required** | The timezone in which the event is expected to start. | Jo - Network accessline 244
| Localized Start time - Timezone | **Required** | The timezone in which the event is expected to start. | Joda-Time DateTimeZone See [Timezone Specifications](https://developer.android.com/guide/playcore/engage/travel#tz-specs) for guidanc - Network accessline 244
| Localized Start time - Timezone | **Required** | The timezone in which the event is expected to start. | Joda-Time DateTimeZone See [Timezone Specifications](https://developer.android.com/guide/playcore/engage/travel#tz-specs) for guidanc - Network accessline 245
| Event mode | **Required** | A field to indicate whether the event will be virtual, in-person or both. | Enum: VIRTUAL, IN_PERSON, or HYBRID | | Poster images | **Required** | We will show only 1 image when multiple images are provided. Re - Network accessline 245
| Event mode | **Required** | A field to indicate whether the event will be virtual, in-person or both. | Enum: VIRTUAL, IN_PERSON, or HYBRID | | Poster images | **Required** | We will show only 1 image when multiple images are provided. Re - Network accessline 246
| Poster images | **Required** | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** Image is highly recommended. If a badge is provided, ensure safe space of 24 dps at both the top and bo - Network accessline 246
| Poster images | **Required** | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** Image is highly recommended. If a badge is provided, ensure safe space of 24 dps at both the top and bo - Network accessline 257
| Badges | Optional | Each badge is either free text (max 15 chars) or small image. | | | Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 c - Network accessline 257
| Badges | Optional | Each badge is either free text (max 15 chars) or small image. | | | Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 c - Network accessline 258
| Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 chars** | | Badge - Image | Optional | Small image Special UX treatment, for example as bad - Network accessline 258
| Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 chars** | | Badge - Image | Optional | Small image Special UX treatment, for example as bad - Network accessline 259
| Badge - Image | Optional | Small image Special UX treatment, for example as badge overlay on the image/video thumbnail. **Note:** Either text or image is required for the badge | See [Image Specifications](https://developer.android.com/gu - Network accessline 259
| Badge - Image | Optional | Small image Special UX treatment, for example as badge overlay on the image/video thumbnail. **Note:** Either text or image is required for the badge | See [Image Specifications](https://developer.android.com/gu - Network accessline 261
| Price - StrikethroughPrice | Optional | The original price of the ticket/pass for the event. | Free text | | Price Callout | Optional | Price callout to feature a promo, event, member discount, if available. | Free text **Recommended text - Network accessline 261
| Price - StrikethroughPrice | Optional | The original price of the ticket/pass for the event. | Free text | | Price Callout | Optional | Price callout to feature a promo, event, member discount, if available. | Free text **Recommended text - Network accessline 262
| Price Callout | Optional | Price callout to feature a promo, event, member discount, if available. | Free text **Recommended text size: under 45 chars (Text that is too long may show ellipses)** | | Content Categories | Optional | Describ - Network accessline 262
| Price Callout | Optional | Price callout to feature a promo, event, member discount, if available. | Free text **Recommended text size: under 45 chars (Text that is too long may show ellipses)** | | Content Categories | Optional | Describ - Network accessline 263
| Content Categories | Optional | Describe the category of the content in the entity. | List of Eligible Enums - TYPE_MOVIES_AND_TV_SHOWS (Example - Cinema) - TYPE_DIGITAL_GAMES (Example - eSports) - TYPE_MUSIC (Example - Concert) - TYPE_TR - Network accessline 263
| Content Categories | Optional | Describe the category of the content in the entity. | List of Eligible Enums - TYPE_MOVIES_AND_TV_SHOWS (Example - Cinema) - TYPE_DIGITAL_GAMES (Example - eSports) - TYPE_MUSIC (Example - Concert) - TYPE_TR - Network accessline 270
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 270
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 271
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 271
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 272
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 272
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 273
| Title | **Required** | Title of the entity. | String **Recommended text size: Max 50 chars** | | Poster images | **Required** | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** If a b - Network accessline 273
| Title | **Required** | Title of the entity. | String **Recommended text size: Max 50 chars** | | Poster images | **Required** | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** If a b - Network accessline 274
| Poster images | **Required** | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** If a badge is provided, ensure safe space of 24 dps at both the top and bottom of the image | See [Imag - Network accessline 274
| Poster images | **Required** | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** If a badge is provided, ensure safe space of 24 dps at both the top and bottom of the image | See [Imag - Network accessline 282
| Badges | Optional | Each badge is either free text (max 15 chars) or small image. | | | Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 c - Network accessline 282
| Badges | Optional | Each badge is either free text (max 15 chars) or small image. | | | Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 c - Network accessline 283
| Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 chars** | | Badge - Image | Optional | Small image Special UX treatment, for example as bad - Network accessline 283
| Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 chars** | | Badge - Image | Optional | Small image Special UX treatment, for example as bad - Network accessline 284
| Badge - Image | Optional | Small image Special UX treatment, for example as badge overlay on the image/video thumbnail. **Note:** Either text or image is required for the badge | See [Image Specifications](https://developer.android.com/gu - Network accessline 284
| Badge - Image | Optional | Small image Special UX treatment, for example as badge overlay on the image/video thumbnail. **Note:** Either text or image is required for the badge | See [Image Specifications](https://developer.android.com/gu - Network accessline 286
| Subtitle list | Optional | Up to 3 subtitles, with each subtitle a single line of text. **Note:** Either description or subtitle list will be displayed to the user, not both. | Free text **Recommended text size for each subtitle: max 50 c - Network accessline 286
| Subtitle list | Optional | Up to 3 subtitles, with each subtitle a single line of text. **Note:** Either description or subtitle list will be displayed to the user, not both. | Free text **Recommended text size for each subtitle: max 50 c - Network accessline 287
| AvailabilityTimeWindow - Localized Start Time - Timestamp | Optional | The epoch timestamp when the lodging is expected to be open/available. | Joda-Time Instant | | AvailabilityTimeWindow - Localized Start Time - Timezone | Optional | Th - Network accessline 287
| AvailabilityTimeWindow - Localized Start Time - Timestamp | Optional | The epoch timestamp when the lodging is expected to be open/available. | Joda-Time Instant | | AvailabilityTimeWindow - Localized Start Time - Timezone | Optional | Th - Network accessline 288
| AvailabilityTimeWindow - Localized Start Time - Timezone | Optional | The timezone in which the lodging is expected to be open/available. | Joda-Time DateTimeZone See [Timezone Specifications](https://developer.android.com/guide/playcore/ - Network accessline 288
| AvailabilityTimeWindow - Localized Start Time - Timezone | Optional | The timezone in which the lodging is expected to be open/available. | Joda-Time DateTimeZone See [Timezone Specifications](https://developer.android.com/guide/playcore/ - Network accessline 289
| AvailabilityTimeWindow - Localized End Time - Timestamp | Optional | The epoch timestamp until which the lodging is expected to be open/available. | Joda-Time Instant | | AvailabilityTimeWindow - Localized End Time - Timezone | Optional | - Network accessline 289
| AvailabilityTimeWindow - Localized End Time - Timestamp | Optional | The epoch timestamp until which the lodging is expected to be open/available. | Joda-Time Instant | | AvailabilityTimeWindow - Localized End Time - Timezone | Optional | - Network accessline 290
| AvailabilityTimeWindow - Localized End Time - Timezone | Optional | The timezone in which the lodging is expected to be open/available. | Joda-Time DateTimeZone See [Timezone Specifications](https://developer.android.com/guide/playcore/en - Network accessline 290
| AvailabilityTimeWindow - Localized End Time - Timezone | Optional | The timezone in which the lodging is expected to be open/available. | Joda-Time DateTimeZone See [Timezone Specifications](https://developer.android.com/guide/playcore/en - Network accessline 308
| Attribute | Requirement | Description | Format | |---|---|---|---| | Poster images | **Required** | At least one image must be provided. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/travel#image-specs) - Network accessline 308
| Attribute | Requirement | Description | Format | |---|---|---|---| | Poster images | **Required** | At least one image must be provided. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/travel#image-specs) - Network accessline 309
|---|---|---|---| | Poster images | **Required** | At least one image must be provided. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/travel#image-specs) for guidance. | | Action Uri | **Required** | Deep - Network accessline 309
|---|---|---|---| | Poster images | **Required** | At least one image must be provided. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/travel#image-specs) for guidance. | | Action Uri | **Required** | Deep - Network accessline 310
| Poster images | **Required** | At least one image must be provided. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/travel#image-specs) for guidance. | - Network accessline 310
| Poster images | **Required** | At least one image must be provided. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/travel#image-specs) for guidance. | - Network accessline 311
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 311
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 328
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 328
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 329
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 329
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 330
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 330
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 331
| Title | **Required** | Title of the entity. | String **Recommended text size: Max 50 chars** | | Poster images | Conditionally required | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note - Network accessline 331
| Title | **Required** | Title of the entity. | String **Recommended text size: Max 50 chars** | | Poster images | Conditionally required | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note - Network accessline 332
| Poster images | Conditionally required | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** Image is required if the entity is part of recommendation cluster. If a badge is provided, en - Network accessline 332
| Poster images | Conditionally required | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** Image is required if the entity is part of recommendation cluster. If a badge is provided, en - Network accessline 340
| Location - Neighborhood | Optional | The neighborhood (if applicable) of the point of interest. | Free text **Recommended text size: max \~20 chars** | | AvailabilityTimeWindow - Localized Start Time - Timestamp | Optional | The epoch tim - Network accessline 340
| Location - Neighborhood | Optional | The neighborhood (if applicable) of the point of interest. | Free text **Recommended text size: max \~20 chars** | | AvailabilityTimeWindow - Localized Start Time - Timestamp | Optional | The epoch tim - Network accessline 341
| AvailabilityTimeWindow - Localized Start Time - Timestamp | Optional | The epoch timestamp when the point of interest is expected to be open/available. | Joda-Time Instant | | AvailabilityTimeWindow - Localized Start Time - Timezone | Opt - Network accessline 341
| AvailabilityTimeWindow - Localized Start Time - Timestamp | Optional | The epoch timestamp when the point of interest is expected to be open/available. | Joda-Time Instant | | AvailabilityTimeWindow - Localized Start Time - Timezone | Opt - Network accessline 342
| AvailabilityTimeWindow - Localized Start Time - Timezone | Optional | The timezone in which the point of interest is expected to be open/available. | Joda-Time DateTimeZone See [Timezone Specifications](https://developer.android.com/guide - Network accessline 342
| AvailabilityTimeWindow - Localized Start Time - Timezone | Optional | The timezone in which the point of interest is expected to be open/available. | Joda-Time DateTimeZone See [Timezone Specifications](https://developer.android.com/guide - Network accessline 343
| AvailabilityTimeWindow - Localized End Time - Timestamp | Optional | The epoch timestamp until which the point of interest is expected to be open/available. | Joda-Time Instant | | AvailabilityTimeWindow - Localized End Time - Timezone | - Network accessline 343
| AvailabilityTimeWindow - Localized End Time - Timestamp | Optional | The epoch timestamp until which the point of interest is expected to be open/available. | Joda-Time Instant | | AvailabilityTimeWindow - Localized End Time - Timezone | - Network accessline 344
| AvailabilityTimeWindow - Localized End Time - Timezone | Optional | The timezone in which the point of interest is expected to be open/available. | Joda-Time DateTimeZone See [Timezone Specifications](https://developer.android.com/guide/p - Network accessline 344
| AvailabilityTimeWindow - Localized End Time - Timezone | Optional | The timezone in which the point of interest is expected to be open/available. | Joda-Time DateTimeZone See [Timezone Specifications](https://developer.android.com/guide/p - Network accessline 345
| Badges | Optional | Each badge is either free text (max 15 chars) or small image. | | | Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 c - Network accessline 345
| Badges | Optional | Each badge is either free text (max 15 chars) or small image. | | | Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 c - Network accessline 346
| Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 chars** | | Badge - Image | Optional | Small image Special UX treatment, for example as bad - Network accessline 346
| Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 chars** | | Badge - Image | Optional | Small image Special UX treatment, for example as bad - Network accessline 347
| Badge - Image | Optional | Small image Special UX treatment, for example as badge overlay on the image/video thumbnail. **Note:** Either text or image is required for the badge | See [Image Specifications](https://developer.android.com/gu - Network accessline 347
| Badge - Image | Optional | Small image Special UX treatment, for example as badge overlay on the image/video thumbnail. **Note:** Either text or image is required for the badge | See [Image Specifications](https://developer.android.com/gu - Network accessline 355
| Price - StrikethroughPrice | Optional | The original price of the tickets/entry pass for the point of interest. | Free text | | Price Callout | Optional | Price callout to feature a promo, event, member discount, if available. | Free text - Network accessline 355
| Price - StrikethroughPrice | Optional | The original price of the tickets/entry pass for the point of interest. | Free text | | Price Callout | Optional | Price callout to feature a promo, event, member discount, if available. | Free text - Network accessline 356
| Price Callout | Optional | Price callout to feature a promo, event, member discount, if available. | Free text **Recommended text size: under 45 chars (Text that is too long may show ellipses)** | | Content Categories | Optional | Describ - Network accessline 356
| Price Callout | Optional | Price callout to feature a promo, event, member discount, if available. | Free text **Recommended text size: under 45 chars (Text that is too long may show ellipses)** | | Content Categories | Optional | Describ - Network accessline 357
| Content Categories | Optional | Describe the category of the content in the entity. | List of Eligible Enums - TYPE_TRAVEL_AND_LOCAL - TYPE_MOVIES_AND_TV_SHOWS (Example - theater) - TYPE_MEDICAL (Example - hospital) - TYPE_EDUCATION (Exam - Network accessline 357
| Content Categories | Optional | Describe the category of the content in the entity. | List of Eligible Enums - TYPE_TRAVEL_AND_LOCAL - TYPE_MOVIES_AND_TV_SHOWS (Example - theater) - TYPE_MEDICAL (Example - hospital) - TYPE_EDUCATION (Exam - Network accessline 364
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 364
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 365
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 365
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 366
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 366
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 367
| Title | **Required** | Title of the entity. | String **Recommended text size: Max 50 chars** | | Localized Reservation Start Time - Timestamp | **Required** | The epoch timestamp when the reservation is expected to start. | Joda-Time Inst - Network accessline 367
| Title | **Required** | Title of the entity. | String **Recommended text size: Max 50 chars** | | Localized Reservation Start Time - Timestamp | **Required** | The epoch timestamp when the reservation is expected to start. | Joda-Time Inst - Network accessline 368
| Localized Reservation Start Time - Timestamp | **Required** | The epoch timestamp when the reservation is expected to start. | Joda-Time Instant | | Localized Reservation Start Time - Timezone | **Required** | The timezone in which the re - Network accessline 368
| Localized Reservation Start Time - Timestamp | **Required** | The epoch timestamp when the reservation is expected to start. | Joda-Time Instant | | Localized Reservation Start Time - Timezone | **Required** | The timezone in which the re - Network accessline 369
| Localized Reservation Start Time - Timezone | **Required** | The timezone in which the reservation is expected to start. | Joda-Time DateTimeZone See [Timezone Specifications](https://developer.android.com/guide/playcore/engage/travel#tz- - Network accessline 369
| Localized Reservation Start Time - Timezone | **Required** | The timezone in which the reservation is expected to start. | Joda-Time DateTimeZone See [Timezone Specifications](https://developer.android.com/guide/playcore/engage/travel#tz- - Network accessline 375
| Location - Zip code | Optional | The zip code (if applicable) of the restaurant. | Free text **Recommended text size: max \~20 chars** | | Location - Neighborhood | Optional | The neighborhood (if applicable) of the restaurant. | Free tex - Network accessline 375
| Location - Zip code | Optional | The zip code (if applicable) of the restaurant. | Free text **Recommended text size: max \~20 chars** | | Location - Neighborhood | Optional | The neighborhood (if applicable) of the restaurant. | Free tex - Network accessline 376
| Location - Neighborhood | Optional | The neighborhood (if applicable) of the restaurant. | Free text **Recommended text size: max \~20 chars** | | Poster images | Optional | We will show only 1 image when multiple images are provided. Rec - Network accessline 376
| Location - Neighborhood | Optional | The neighborhood (if applicable) of the restaurant. | Free text **Recommended text size: max \~20 chars** | | Poster images | Optional | We will show only 1 image when multiple images are provided. Rec - Network accessline 377
| Poster images | Optional | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 | See [Image Specifications](https://developer.android.com/guide/playcore/engage/travel#image-specs) for guidance. | - Network accessline 377
| Poster images | Optional | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 | See [Image Specifications](https://developer.android.com/guide/playcore/engage/travel#image-specs) for guidance. | - Network accessline 387
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 387
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 388
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 388
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 389
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 389
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 390
| Title | **Required** | Title of the entity. | String **Recommended text size: Max 50 chars** | | Localized Start time - Timestamp | **Required** | The epoch timestamp when the event is expected to start. | Joda-Time Instant | | Localized - Network accessline 390
| Title | **Required** | Title of the entity. | String **Recommended text size: Max 50 chars** | | Localized Start time - Timestamp | **Required** | The epoch timestamp when the event is expected to start. | Joda-Time Instant | | Localized - Network accessline 391
| Localized Start time - Timestamp | **Required** | The epoch timestamp when the event is expected to start. | Joda-Time Instant | | Localized Start time - Timezone | **Required** | The timezone in which the event is expected to start. | Jo - Network accessline 391
| Localized Start time - Timestamp | **Required** | The epoch timestamp when the event is expected to start. | Joda-Time Instant | | Localized Start time - Timezone | **Required** | The timezone in which the event is expected to start. | Jo - Network accessline 392
| Localized Start time - Timezone | **Required** | The timezone in which the event is expected to start. | Joda-Time DateTimeZone See [Timezone Specifications](https://developer.android.com/guide/playcore/engage/travel#tz-specs) for guidanc - Network accessline 392
| Localized Start time - Timezone | **Required** | The timezone in which the event is expected to start. | Joda-Time DateTimeZone See [Timezone Specifications](https://developer.android.com/guide/playcore/engage/travel#tz-specs) for guidanc - Network accessline 399
| Location - Zip code | Optional | The zip code (if applicable) of the location in which the event is being hosted. | Free text **Recommended text size: max \~20 chars** | | Location - Neighborhood | Optional | The neighborhood (if applicab - Network accessline 399
| Location - Zip code | Optional | The zip code (if applicable) of the location in which the event is being hosted. | Free text **Recommended text size: max \~20 chars** | | Location - Neighborhood | Optional | The neighborhood (if applicab - Network accessline 400
| Location - Neighborhood | Optional | The neighborhood (if applicable) in which the event is being hosted. | Free text **Recommended text size: max \~20 chars** | | Poster images | Optional | We will show only 1 image when multiple images - Network accessline 400
| Location - Neighborhood | Optional | The neighborhood (if applicable) in which the event is being hosted. | Free text **Recommended text size: max \~20 chars** | | Poster images | Optional | We will show only 1 image when multiple images - Network accessline 401
| Poster images | Optional | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** Image is highly recommended. If a badge is provided, ensure safe space of 24 dps at both the top and bottom - Network accessline 401
| Poster images | Optional | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** Image is highly recommended. If a badge is provided, ensure safe space of 24 dps at both the top and bottom - Network accessline 402
| Localized End time - Timestamp | Optional | The epoch timestamp when the event is expected to end. | Joda-Time Instant | | Localized End time - Timezone | Optional | The timezone in which the event is expected to end. | Joda-Time DateTime - Network accessline 402
| Localized End time - Timestamp | Optional | The epoch timestamp when the event is expected to end. | Joda-Time Instant | | Localized End time - Timezone | Optional | The timezone in which the event is expected to end. | Joda-Time DateTime - Network accessline 403
| Localized End time - Timezone | Optional | The timezone in which the event is expected to end. | Joda-Time DateTimeZone See [Timezone Specifications](https://developer.android.com/guide/playcore/engage/travel#tz-specs) for guidance. | - Network accessline 403
| Localized End time - Timezone | Optional | The timezone in which the event is expected to end. | Joda-Time DateTimeZone See [Timezone Specifications](https://developer.android.com/guide/playcore/engage/travel#tz-specs) for guidance. | - Network accessline 404
| Service Provider - Name | Optional | The name of the service provider. **Note:**Either text or image is required for the service provider. | Free text. For example, name of the event organizer/tour | | Service Provider - Image | Optional - Network accessline 404
| Service Provider - Name | Optional | The name of the service provider. **Note:**Either text or image is required for the service provider. | Free text. For example, name of the event organizer/tour | | Service Provider - Image | Optional - Network accessline 405
| Service Provider - Image | Optional | The logo/image of the service provider. **Note:**Either text or image is required for the service provider. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/travel#imag - Network accessline 405
| Service Provider - Image | Optional | The logo/image of the service provider. **Note:**Either text or image is required for the service provider. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/travel#imag - Network accessline 408
| Badges | Optional | Each badge is either free text (max 15 chars) or small image. | | | Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 c - Network accessline 408
| Badges | Optional | Each badge is either free text (max 15 chars) or small image. | | | Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 c - Network accessline 409
| Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 chars** | | Badge - Image | Optional | Small image Special UX treatment, for example as bad - Network accessline 409
| Badge - Text | Optional | Title for the badge **Note:** Either text or image is required for the badge | Free text **Recommended text size: max 15 chars** | | Badge - Image | Optional | Small image Special UX treatment, for example as bad - Network accessline 410
| Badge - Image | Optional | Small image Special UX treatment, for example as badge overlay on the image/video thumbnail. **Note:** Either text or image is required for the badge | See [Image Specifications](https://developer.android.com/gu - Network accessline 410
| Badge - Image | Optional | Small image Special UX treatment, for example as badge overlay on the image/video thumbnail. **Note:** Either text or image is required for the badge | See [Image Specifications](https://developer.android.com/gu - Network accessline 417
| Rating - Count | Optional | The count of the ratings for the event. **Note:** Provide this field if your app wants to control how this is displayed to the users. Provide the concise string that can be displayed to the user. For example, i - Network accessline 417
| Rating - Count | Optional | The count of the ratings for the event. **Note:** Provide this field if your app wants to control how this is displayed to the users. Provide the concise string that can be displayed to the user. For example, i - Network accessline 418
| Rating - Count Value | Optional | The count of the ratings for the event. **Note:** Provide this field if you don't want to handle the display abbreviation logic yourself. If both Count and Count Value are present, we will use the Count t - Network accessline 418
| Rating - Count Value | Optional | The count of the ratings for the event. **Note:** Provide this field if you don't want to handle the display abbreviation logic yourself. If both Count and Count Value are present, we will use the Count t - Network accessline 419
| Content Categories | Optional | Describe the category of the content in the entity. | List of Eligible Enums - TYPE_MOVIES_AND_TV_SHOWS (Example - Cinema) - TYPE_DIGITAL_GAMES (Example - eSports) - TYPE_MUSIC (Example - Concert) - TYPE_TR - Network accessline 419
| Content Categories | Optional | Describe the category of the content in the entity. | List of Eligible Enums - TYPE_MOVIES_AND_TV_SHOWS (Example - Cinema) - TYPE_DIGITAL_GAMES (Example - eSports) - TYPE_MUSIC (Example - Concert) - TYPE_TR - Network accessline 426
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 426
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 427
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 427
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 428
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 428
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 429
| Title | **Required** | Title of the entity. | Free text. For example, "Your Stay from Dec 12th" **Recommended text size: Max 50 chars** | | Localized Check-in Time - Timestamp | **Required** | The epoch timestamp that represents the check - Network accessline 429
| Title | **Required** | Title of the entity. | Free text. For example, "Your Stay from Dec 12th" **Recommended text size: Max 50 chars** | | Localized Check-in Time - Timestamp | **Required** | The epoch timestamp that represents the check - Network accessline 430
| Localized Check-in Time - Timestamp | **Required** | The epoch timestamp that represents the check in time for the reservation. | Joda-Time Instant | | Localized Check-in Time - Timezone | **Required** | The timezone in which the check in - Network accessline 430
| Localized Check-in Time - Timestamp | **Required** | The epoch timestamp that represents the check in time for the reservation. | Joda-Time Instant | | Localized Check-in Time - Timezone | **Required** | The timezone in which the check in - Network accessline 431
| Localized Check-in Time - Timezone | **Required** | The timezone in which the check in time exists for the reservation. | Joda-Time DateTimeZone See [Timezone Specifications](https://developer.android.com/guide/playcore/engage/travel#tz-s - Network accessline 431
| Localized Check-in Time - Timezone | **Required** | The timezone in which the check in time exists for the reservation. | Joda-Time DateTimeZone See [Timezone Specifications](https://developer.android.com/guide/playcore/engage/travel#tz-s - Network accessline 432
| Localized Check-out Time - Timestamp | **Required** | The epoch timestamp that represents the check out time for the reservation. | Joda-Time Instant | | Localized Check-out Time - Timezone | **Required** | The timezone in which the check - Network accessline 432
| Localized Check-out Time - Timestamp | **Required** | The epoch timestamp that represents the check out time for the reservation. | Joda-Time Instant | | Localized Check-out Time - Timezone | **Required** | The timezone in which the check - Network accessline 433
| Localized Check-out Time - Timezone | **Required** | The timezone in which the check out time exists for the reservation. | Joda-Time DateTimeZone See [Timezone Specifications](https://developer.android.com/guide/playcore/engage/travel#tz - Network accessline 433
| Localized Check-out Time - Timezone | **Required** | The timezone in which the check out time exists for the reservation. | Joda-Time DateTimeZone See [Timezone Specifications](https://developer.android.com/guide/playcore/engage/travel#tz - Network accessline 439
| Location - Zip code | Optional | The zip code (if applicable) of the lodging. | Free text **Recommended text size: max \~20 chars** | | Location - Neighborhood | Optional | The neighborhood (if applicable) of the lodging. | Free text **Re - Network accessline 439
| Location - Zip code | Optional | The zip code (if applicable) of the lodging. | Free text **Recommended text size: max \~20 chars** | | Location - Neighborhood | Optional | The neighborhood (if applicable) of the lodging. | Free text **Re - Network accessline 440
| Location - Neighborhood | Optional | The neighborhood (if applicable) of the lodging. | Free text **Recommended text size: max \~20 chars** | | Poster images | Optional | We will show only 1 image when multiple images are provided. Recomm - Network accessline 440
| Location - Neighborhood | Optional | The neighborhood (if applicable) of the lodging. | Free text **Recommended text size: max \~20 chars** | | Poster images | Optional | We will show only 1 image when multiple images are provided. Recomm - Network accessline 441
| Poster images | Optional | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** If a badge is provided, ensure safe space of 24 dps at both the top and bottom of the image | See [Image Sp - Network accessline 441
| Poster images | Optional | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 **Note:** If a badge is provided, ensure safe space of 24 dps at both the top and bottom of the image | See [Image Sp - Network accessline 458
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 458
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 459
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 459
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 460
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 460
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 462
| Transportation Type | **Required** | The mode/type of transportation for the reservation. | Enum: FLIGHT, TRAIN, BUS, or FERRY | | Localized Departure Time - Timestamp | **Required** | The epoch timestamp that represents the departure tim - Network accessline 462
| Transportation Type | **Required** | The mode/type of transportation for the reservation. | Enum: FLIGHT, TRAIN, BUS, or FERRY | | Localized Departure Time - Timestamp | **Required** | The epoch timestamp that represents the departure tim - Network accessline 463
| Localized Departure Time - Timestamp | **Required** | The epoch timestamp that represents the departure time. | Joda-Time Instant | | Localized Departure Time - Timezone | **Required** | The timezone of the departure time. | Joda-Time Dat - Network accessline 463
| Localized Departure Time - Timestamp | **Required** | The epoch timestamp that represents the departure time. | Joda-Time Instant | | Localized Departure Time - Timezone | **Required** | The timezone of the departure time. | Joda-Time Dat - Network accessline 464
| Localized Departure Time - Timezone | **Required** | The timezone of the departure time. | Joda-Time DateTimeZone See [Timezone Specifications](https://developer.android.com/guide/playcore/engage/travel#tz-specs) for guidance. | - Network accessline 464
| Localized Departure Time - Timezone | **Required** | The timezone of the departure time. | Joda-Time DateTimeZone See [Timezone Specifications](https://developer.android.com/guide/playcore/engage/travel#tz-specs) for guidance. | - Network accessline 465
| Localized Arrival Time - Timestamp | **Required** | The epoch timestamp that represents the arrival time. | Joda-Time Instant | | Localized Arrival Time - Timezone | **Required** | The timezone of the arrival time. | Joda-Time DateTimeZon - Network accessline 465
| Localized Arrival Time - Timestamp | **Required** | The epoch timestamp that represents the arrival time. | Joda-Time Instant | | Localized Arrival Time - Timezone | **Required** | The timezone of the arrival time. | Joda-Time DateTimeZon - Network accessline 466
| Localized Arrival Time - Timezone | **Required** | The timezone of the arrival time. | Joda-Time DateTimeZone See [Timezone Specifications](https://developer.android.com/guide/playcore/engage/travel#tz-specs) for guidance. | - Network accessline 466
| Localized Arrival Time - Timezone | **Required** | The timezone of the arrival time. | Joda-Time DateTimeZone See [Timezone Specifications](https://developer.android.com/guide/playcore/engage/travel#tz-specs) for guidance. | - Network accessline 467
| Transportation Number | **Required** | The flight number, bus number, train number, or ferry/cruise number. | Free text | | Localized Boarding Time - Timestamp | **Required** | The epoch timestamp that represents the boarding time for the - Network accessline 467
| Transportation Number | **Required** | The flight number, bus number, train number, or ferry/cruise number. | Free text | | Localized Boarding Time - Timestamp | **Required** | The epoch timestamp that represents the boarding time for the - Network accessline 468
| Localized Boarding Time - Timestamp | **Required** | The epoch timestamp that represents the boarding time for the reservation (if applicable) | Joda-Time Instant | | Localized Boarding Time - Timezone | **Required** | The timezone of the - Network accessline 468
| Localized Boarding Time - Timestamp | **Required** | The epoch timestamp that represents the boarding time for the reservation (if applicable) | Joda-Time Instant | | Localized Boarding Time - Timezone | **Required** | The timezone of the - Network accessline 469
| Localized Boarding Time - Timezone | **Required** | The timezone of the boarding time for the reservation (if applicable) | Joda-Time DateTimeZone See [Timezone Specifications](https://developer.android.com/guide/playcore/engage/travel#tz - Network accessline 469
| Localized Boarding Time - Timezone | **Required** | The timezone of the boarding time for the reservation (if applicable) | Joda-Time DateTimeZone See [Timezone Specifications](https://developer.android.com/guide/playcore/engage/travel#tz - Network accessline 483
| Arrival Location - Neighborhood | Optional | The neighborhood (if applicable) of the arrival location. | Free text **Recommended text size: max \~20 chars** | | Service Provider - Name | Optional | The name of the service provider. **Note - Network accessline 483
| Arrival Location - Neighborhood | Optional | The neighborhood (if applicable) of the arrival location. | Free text **Recommended text size: max \~20 chars** | | Service Provider - Name | Optional | The name of the service provider. **Note - Network accessline 484
| Service Provider - Name | Optional | The name of the service provider. **Note:**Either text or image is required for the service provider. | Free text. For example, Airline name | | Service Provider - Image | Optional | The logo/image of - Network accessline 484
| Service Provider - Name | Optional | The name of the service provider. **Note:**Either text or image is required for the service provider. | Free text. For example, Airline name | | Service Provider - Image | Optional | The logo/image of - Network accessline 485
| Service Provider - Image | Optional | The logo/image of the service provider. **Note:**Either text or image is required for the service provider. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/travel#imag - Network accessline 485
| Service Provider - Image | Optional | The logo/image of the service provider. **Note:**Either text or image is required for the service provider. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/travel#imag - Network accessline 486
| Poster images | Optional | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 | See [Image Specifications](https://developer.android.com/guide/playcore/engage/travel#image-specs) for guidance. | - Network accessline 486
| Poster images | Optional | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 | See [Image Specifications](https://developer.android.com/guide/playcore/engage/travel#image-specs) for guidance. | - Network accessline 499
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 499
| Attribute | Requirement | Description | Format | |---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/ - Network accessline 500
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 500
|---|---|---|---| | Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 501
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 501
| Action Uri | **Required** | Deep Link to the entity in the provider app. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | Uri | - Network accessline 502
| Title | **Required** | Title of the entity. | Free text. For example, "Avis Union Square SF" **Recommended text size: Max 50 chars** | | Localized Pickup Time - Timestamp | **Required** | The epoch timestamp that represents the pick up ti - Network accessline 502
| Title | **Required** | Title of the entity. | Free text. For example, "Avis Union Square SF" **Recommended text size: Max 50 chars** | | Localized Pickup Time - Timestamp | **Required** | The epoch timestamp that represents the pick up ti - Network accessline 503
| Localized Pickup Time - Timestamp | **Required** | The epoch timestamp that represents the pick up time for the reservation. | Joda-Time Instant | | Localized Pickup Time - Timezone | **Required** | The timezone of the pick up time for th - Network accessline 503
| Localized Pickup Time - Timestamp | **Required** | The epoch timestamp that represents the pick up time for the reservation. | Joda-Time Instant | | Localized Pickup Time - Timezone | **Required** | The timezone of the pick up time for th - Network accessline 504
| Localized Pickup Time - Timezone | **Required** | The timezone of the pick up time for the reservation. | Joda-Time DateTimeZone See [Timezone Specifications](https://developer.android.com/guide/playcore/engage/travel#tz-specs) for guidan - Network accessline 504
| Localized Pickup Time - Timezone | **Required** | The timezone of the pick up time for the reservation. | Joda-Time DateTimeZone See [Timezone Specifications](https://developer.android.com/guide/playcore/engage/travel#tz-specs) for guidan - Network accessline 505
| Localized Return Time - Timestamp | Optional | The epoch timestamp that represents the check out time for the reservation. | Joda-Time Instant | | Localized Return Time - Timezone | Optional | The timezone of the check out time for the re - Network accessline 505
| Localized Return Time - Timestamp | Optional | The epoch timestamp that represents the check out time for the reservation. | Joda-Time Instant | | Localized Return Time - Timezone | Optional | The timezone of the check out time for the re - Network accessline 506
| Localized Return Time - Timezone | Optional | The timezone of the check out time for the reservation. | Joda-Time DateTimeZone See [Timezone Specifications](https://developer.android.com/guide/playcore/engage/travel#tz-specs) for guidance - Network accessline 506
| Localized Return Time - Timezone | Optional | The timezone of the check out time for the reservation. | Joda-Time DateTimeZone See [Timezone Specifications](https://developer.android.com/guide/playcore/engage/travel#tz-specs) for guidance - Network accessline 520
| Return Address - Neighborhood | Optional | The neighborhood (if applicable) of the return location. | Free text **Recommended text size: max \~20 chars** | | Service Provider - Name | Optional | The name of the service provider. **Note:** - Network accessline 520
| Return Address - Neighborhood | Optional | The neighborhood (if applicable) of the return location. | Free text **Recommended text size: max \~20 chars** | | Service Provider - Name | Optional | The name of the service provider. **Note:** - Network accessline 521
| Service Provider - Name | Optional | The name of the service provider. **Note:**Either text or image is required for the service provider. | Free text. For example, "Avis Car Rental" | | Service Provider - Image | Optional | The logo/imag - Network accessline 521
| Service Provider - Name | Optional | The name of the service provider. **Note:**Either text or image is required for the service provider. | Free text. For example, "Avis Car Rental" | | Service Provider - Image | Optional | The logo/imag - Network accessline 522
| Service Provider - Image | Optional | The logo/image of the service provider. **Note:**Either text or image is required for the service provider. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/travel#imag - Network accessline 522
| Service Provider - Image | Optional | The logo/image of the service provider. **Note:**Either text or image is required for the service provider. | See [Image Specifications](https://developer.android.com/guide/playcore/engage/travel#imag - Network accessline 523
| Poster images | Optional | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 | See [Image Specifications](https://developer.android.com/guide/playcore/engage/travel#image-specs) for guidance. | - Network accessline 523
| Poster images | Optional | We will show only 1 image when multiple images are provided. Recommended aspect ratio is 16:9 | See [Image Specifications](https://developer.android.com/guide/playcore/engage/travel#image-specs) for guidance. | - Network accessline 599
- TYPE_MOVIES_AND_TV_SHOWS - Check out the entities from [Watch integration guide](https://developer.android.com/guide/playcore/engage/watch) before using the generic entities. - Network accessline 599
- TYPE_MOVIES_AND_TV_SHOWS - Check out the entities from [Watch integration guide](https://developer.android.com/guide/playcore/engage/watch) before using the generic entities. - Network accessline 600
- TYPE_BOOKS - Check out the [EbookEntity](https://developer.android.com/guide/playcore/engage/read#ebookentity) before using the generic entities. - Network accessline 600
- TYPE_BOOKS - Check out the [EbookEntity](https://developer.android.com/guide/playcore/engage/read#ebookentity) before using the generic entities. - Network accessline 601
- TYPE_AUDIOBOOKS - Check out [AudiobookEntity](https://developer.android.com/guide/playcore/engage/read#audiobookentity) before using the generic entities. - Network accessline 601
- TYPE_AUDIOBOOKS - Check out [AudiobookEntity](https://developer.android.com/guide/playcore/engage/read#audiobookentity) before using the generic entities. - Network accessline 602
- TYPE_SHOPPING - Check out [ShoppingEntity](https://developer.android.com/guide/playcore/engage/shopping#shoppingEntity) before using the generic entities. - Network accessline 602
- TYPE_SHOPPING - Check out [ShoppingEntity](https://developer.android.com/guide/playcore/engage/shopping#shoppingEntity) before using the generic entities. - Network accessline 603
- TYPE_FOOD_AND_DRINK - Check out entities from [Food Integration guide](https://developer.android.com/guide/playcore/engage/food) before using the generic entities. - Network accessline 603
- TYPE_FOOD_AND_DRINK - Check out entities from [Food Integration guide](https://developer.android.com/guide/playcore/engage/food) before using the generic entities. - Network accessline 613
It is recommended to have the content publish job executed in the background (for example, using [WorkManager](https://developer.android.com/topic/libraries/architecture/workmanager)) - Network accessline 613
It is recommended to have the content publish job executed in the background (for example, using [WorkManager](https://developer.android.com/topic/libraries/architecture/workmanager)) - Network accessline 614
(for example, using [WorkManager](https://developer.android.com/topic/libraries/architecture/workmanager)) - Network accessline 614
(for example, using [WorkManager](https://developer.android.com/topic/libraries/architecture/workmanager)) - Network accessline 646
[View on GitHub](https://github.com/android/skills/tree/main/play/engage-sdk-integration) - Network accessline 646
[View on GitHub](https://github.com/android/skills/tree/main/play/engage-sdk-integration) - Network accessline 650
To install the skill from the [Android CLI](https://developer.android.com/tools/agents/android-cli), run: - Network accessline 650
To install the skill from the [Android CLI](https://developer.android.com/tools/agents/android-cli), run: - Network accessline 962
.addPosterImage( Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 962
.addPosterImage( Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 963
Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(500) - Network accessline 963
Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(500) - Network accessline 964
.setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 964
.setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 967
.build()) .setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 967
.build()) .setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 968
.setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) .build() - Network accessline 968
.setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) .build() - Network accessline 969
.setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 969
.setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 981
.addPosterImage( new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 981
.addPosterImage( new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 982
new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(500) - Network accessline 982
new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(500) - Network accessline 983
.setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 983
.setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 986
.build()) .setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 986
.build()) .setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 987
.setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) .build(); - Network accessline 987
.setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) .build(); - Network accessline 988
.setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 988
.setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 1273
In addition to making publish content API calls through a job, it is also required to set up a [`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive - Network accessline 1273
In addition to making publish content API calls through a job, it is also required to set up a [`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive - Network accessline 1274
required to set up a [`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive the request for a content publish. - Network accessline 1274
required to set up a [`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive the request for a content publish. - Network accessline 1275
[`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive - Network accessline 1275
[`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive - Network accessline 1403
The following [intents](https://developer.android.com/reference/android/content/Intent) is sent by the - Network accessline 1403
The following [intents](https://developer.android.com/reference/android/content/Intent) is sent by the - Network accessline 1413
For a step-by-step guide on verifying your integration after it is complete, see [Engage developer integration workflow](https://developer.android.com/guide/playcore/engage/workflow). - Network accessline 1413
For a step-by-step guide on verifying your integration after it is complete, see [Engage developer integration workflow](https://developer.android.com/guide/playcore/engage/workflow). - Network accessline 1414
[Engage developer integration workflow](https://developer.android.com/guide/playcore/engage/workflow). - Network accessline 1414
[Engage developer integration workflow](https://developer.android.com/guide/playcore/engage/workflow). - Network accessline 1418
See [Engage SDK Frequently Asked Questions](https://developer.android.com/guide/playcore/engage/faq) for - Network accessline 1418
See [Engage SDK Frequently Asked Questions](https://developer.android.com/guide/playcore/engage/faq) for
play/engage-sdk-integration/references/android/guide/playcore/engage/tv/continue-watching/index.md
- Network accessline 3
apps in one UI grouping. You can feature your entities in this continuation cluster. Follow this guide to learn how to enhance user engagement through the continue watching experience using [Engage SDK](https://developer.android.com/guide/p - Network accessline 3
apps in one UI grouping. You can feature your entities in this continuation cluster. Follow this guide to learn how to enhance user engagement through the continue watching experience using [Engage SDK](https://developer.android.com/guide/p - Network accessline 5
continue watching experience using [Engage SDK](https://developer.android.com/guide/playcore/engage). - Network accessline 5
continue watching experience using [Engage SDK](https://developer.android.com/guide/playcore/engage). - Network accessline 10
- [Integrate continue watching on Android TV](https://developer.android.com/guide/playcore/engage/tv/continue-watching/client) - Network accessline 10
- [Integrate continue watching on Android TV](https://developer.android.com/guide/playcore/engage/tv/continue-watching/client) - Network accessline 11
- [Integrate continue watching using REST API](https://developer.android.com/guide/playcore/engage/tv/continue-watching/rest) - Network accessline 11
- [Integrate continue watching using REST API](https://developer.android.com/guide/playcore/engage/tv/continue-watching/rest) - Network accessline 15
This [sample app](https://github.com/googlesamples/tv-video-discovery-samples) demonstrates how you can integrate with Engage SDK - Network accessline 15
This [sample app](https://github.com/googlesamples/tv-video-discovery-samples) demonstrates how you can integrate with Engage SDK
play/engage-sdk-integration/references/android/guide/playcore/engage/tv/entitlements.md
- Network accessline 1
This guide contains instructions for developers to share app subscription and entitlement data with Google TV using [Engage SDK](https://developer.android.com/guide/playcore/engage). Users can find - Network accessline 1
This guide contains instructions for developers to share app subscription and entitlement data with Google TV using [Engage SDK](https://developer.android.com/guide/playcore/engage). Users can find - Network accessline 2
entitlement data with Google TV using [Engage SDK](https://developer.android.com/guide/playcore/engage). Users can find - Network accessline 2
entitlement data with Google TV using [Engage SDK](https://developer.android.com/guide/playcore/engage). Users can find - Network accessline 9
> [!IMPORTANT] > **Important:** [Express interest in developing with Engage](http://g.co/tv/vda). - Network accessline 9
> [!IMPORTANT] > **Important:** [Express interest in developing with Engage](http://g.co/tv/vda). - Network accessline 10
> **Important:** [Express interest in developing with Engage](http://g.co/tv/vda). - Network accessline 10
> **Important:** [Express interest in developing with Engage](http://g.co/tv/vda). - Network accessline 12
Onboarding the media actions feed is required before you can use the device entitlement API. If you haven't already done so, complete the [media actions feed](https://developers.google.com/actions/media?authuser=0) onboarding process. - Network accessline 12
Onboarding the media actions feed is required before you can use the device entitlement API. If you haven't already done so, complete the [media actions feed](https://developers.google.com/actions/media?authuser=0) onboarding process. - Network accessline 14
feed](https://developers.google.com/actions/media?authuser=0) onboarding process. - Network accessline 14
feed](https://developers.google.com/actions/media?authuser=0) onboarding process. - Network accessline 18
Complete the [Pre-work](https://developer.android.com/guide/playcore/engage/tv/getting-started#pre-work) instructions in the Getting Started guide. - Network accessline 18
Complete the [Pre-work](https://developer.android.com/guide/playcore/engage/tv/getting-started#pre-work) instructions in the Getting Started guide. - Network accessline 64
// Don't match this string, // ID is only used to for reconciliation purpose "@id": "https://www.example.com/971bfc78-d13a-4419", - Network accessline 64
// Don't match this string, // ID is only used to for reconciliation purpose "@id": "https://www.example.com/971bfc78-d13a-4419", - Network accessline 65
// ID is only used to for reconciliation purpose "@id": "https://www.example.com/971bfc78-d13a-4419", // Don't match this, as name is only used for displaying purpose - Network accessline 65
// ID is only used to for reconciliation purpose "@id": "https://www.example.com/971bfc78-d13a-4419", // Don't match this, as name is only used for displaying purpose - Network accessline 66
"@id": "https://www.example.com/971bfc78-d13a-4419", - Network accessline 66
"@id": "https://www.example.com/971bfc78-d13a-4419", - Network accessline 92
1. `Identifier`: Required identifier string for this entitlement. This must match one of the [entitlement identifiers](https://developers.google.com/actions/media/concepts/access-requirements#entitlement-identifier) (note that this isn't th - Network accessline 92
1. `Identifier`: Required identifier string for this entitlement. This must match one of the [entitlement identifiers](https://developers.google.com/actions/media/concepts/access-requirements#entitlement-identifier) (note that this isn't th - Network accessline 106
// Don't match this string, // ID is only used to for reconciliation purpose "@id": "https://www.example.com/971bfc78-d13a-4419", - Network accessline 106
// Don't match this string, // ID is only used to for reconciliation purpose "@id": "https://www.example.com/971bfc78-d13a-4419", - Network accessline 108
"@id": "https://www.example.com/971bfc78-d13a-4419", - Network accessline 108
"@id": "https://www.example.com/971bfc78-d13a-4419", - Network accessline 217
Make sure to initialize the client and check for service availability as described in the [Getting Started guide](https://developer.android.com/guide/playcore/engage/tv/getting-started#common-integration). - Network accessline 217
Make sure to initialize the client and check for service availability as described in the [Getting Started guide](https://developer.android.com/guide/playcore/engage/tv/getting-started#common-integration). - Network accessline 218
described in the [Getting Started guide](https://developer.android.com/guide/playcore/engage/tv/getting-started#common-integration). - Network accessline 218
described in the [Getting Started guide](https://developer.android.com/guide/playcore/engage/tv/getting-started#common-integration). - Network accessline 253
`client.deleteClusters` method. This deletes all existing Engage data for the account profile, or for the entire account depending on the given [`DeleteReason`](https://developer.android.com/reference/com/google/android/engage/service - Network accessline 253
`client.deleteClusters` method. This deletes all existing Engage data for the account profile, or for the entire account depending on the given [`DeleteReason`](https://developer.android.com/reference/com/google/android/engage/service - Network accessline 255
given [`DeleteReason`](https://developer.android.com/reference/com/google/android/engage/service/DeleteReason). - Network accessline 255
given [`DeleteReason`](https://developer.android.com/reference/com/google/android/engage/service/DeleteReason). - Network accessline 318
> [!IMPORTANT] > **Important:** Verify that the [Engage Service Flag](https://developer.android.com/guide/playcore/engage/workflow#switch-to-prod) is **not** set to production. - Network accessline 318
> [!IMPORTANT] > **Important:** Verify that the [Engage Service Flag](https://developer.android.com/guide/playcore/engage/workflow#switch-to-prod) is **not** set to production. - Network accessline 319
> **Important:** Verify that the [Engage Service Flag](https://developer.android.com/guide/playcore/engage/workflow#switch-to-prod) is **not** set to production. - Network accessline 319
> **Important:** Verify that the [Engage Service Flag](https://developer.android.com/guide/playcore/engage/workflow#switch-to-prod) is **not** set to production. - Network accessline 331
To test your integration, use the [verification app](https://developer.android.com/guide/playcore/engage/tv/getting-started#testing). - Network accessline 331
To test your integration, use the [verification app](https://developer.android.com/guide/playcore/engage/tv/getting-started#testing). - Network accessline 337
 **Figure 1.** Successful subscription - Network accessline 337
 **Figure 1.** Successful subscription - Network accessline 340
 **Figure 2.**Subscription unsuccessful - Network accessline 340
 **Figure 2.**Subscription unsuccessful - Network accessline 348
 **Figure 3.**Subscription Errors - Network accessline 348
 **Figure 3.**Subscription Errors - Network accessline 353
 **Figure 4.**Subscription Error Details - Network accessline 353
 **Figure 4.**Subscription Error Details
play/engage-sdk-integration/references/android/guide/playcore/engage/tv/getting-started.md
- Network accessline 3
[Engage SDK](https://developer.android.com/guide/playcore/engage) lets you deliver personalized recommendations - Network accessline 3
[Engage SDK](https://developer.android.com/guide/playcore/engage) lets you deliver personalized recommendations - Network accessline 10
- [Publish continue watching data](https://developer.android.com/guide/playcore/engage/tv/continue-watching) - Network accessline 10
- [Publish continue watching data](https://developer.android.com/guide/playcore/engage/tv/continue-watching) - Network accessline 11
- [Publish device entitlements](https://developer.android.com/guide/playcore/engage/tv/entitlements) - Network accessline 11
- [Publish device entitlements](https://developer.android.com/guide/playcore/engage/tv/entitlements) - Network accessline 12
- [Publish recommendations](https://developer.android.com/guide/playcore/engage/tv/recommendations) - Network accessline 12
- [Publish recommendations](https://developer.android.com/guide/playcore/engage/tv/recommendations) - Network accessline 18
1. [Express interest in developing with Engage SDK](http://g.co/tv/engage) to enroll in - Network accessline 18
1. [Express interest in developing with Engage SDK](http://g.co/tv/engage) to enroll in - Network accessline 48
6. Test your implementation using the verification app as outlined in the [Testing section](https://developer.android.com/guide/playcore/engage/tv/getting-started#testing). - Network accessline 48
6. Test your implementation using the verification app as outlined in the [Testing section](https://developer.android.com/guide/playcore/engage/tv/getting-started#testing). - Network accessline 49
[Testing section](https://developer.android.com/guide/playcore/engage/tv/getting-started#testing). - Network accessline 49
[Testing section](https://developer.android.com/guide/playcore/engage/tv/getting-started#testing). - Network accessline 118
An `AccountProfile` must be provided with an account ID in order for content to be synchronized between devices. See [Cross-device syncing](https://developer.android.com/guide/playcore/engage/tv/continue-watching/client#cross-device_syncing - Network accessline 118
An `AccountProfile` must be provided with an account ID in order for content to be synchronized between devices. See [Cross-device syncing](https://developer.android.com/guide/playcore/engage/tv/continue-watching/client#cross-device_syncing - Network accessline 119
be synchronized between devices. See [Cross-device syncing](https://developer.android.com/guide/playcore/engage/tv/continue-watching/client#cross-device_syncing). - Network accessline 119
be synchronized between devices. See [Cross-device syncing](https://developer.android.com/guide/playcore/engage/tv/continue-watching/client#cross-device_syncing). - Network accessline 125
[Download verification app](https://developer.android.com/guide/playcore/engage/tv/getting-started#lightbox-trigger) - Network accessline 125
[Download verification app](https://developer.android.com/guide/playcore/engage/tv/getting-started#lightbox-trigger) - Network accessline 126
app](https://developer.android.com/guide/playcore/engage/tv/getting-started#lightbox-trigger) - Network accessline 126
app](https://developer.android.com/guide/playcore/engage/tv/getting-started#lightbox-trigger) - Network accessline 148
1.1 The Android Software Development Kit (referred to in the License Agreement as the "SDK" and specifically including the Android system files, packaged APIs, and Google APIs add-ons) is licensed to you subject to the terms of the License - Network accessline 148
1.1 The Android Software Development Kit (referred to in the License Agreement as the "SDK" and specifically including the Android system files, packaged APIs, and Google APIs add-ons) is licensed to you subject to the terms of the License - Network accessline 168
6.1 In order to continually innovate and improve the SDK, Google may collect certain usage statistics from the software including but not limited to a unique identifier, associated IP address, version number of the software, and information - Network accessline 168
6.1 In order to continually innovate and improve the SDK, Google may collect certain usage statistics from the software including but not limited to a unique identifier, associated IP address, version number of the software, and information - Network accessline 176
8.1 Google Data APIs 8.1.1 If you use any API to retrieve data from Google, you acknowledge that the data may be protected by intellectual property rights which are owned by Google or those parties that provide the data (or by other persons - Network accessline 176
8.1 Google Data APIs 8.1.1 If you use any API to retrieve data from Google, you acknowledge that the data may be protected by intellectual property rights which are owned by Google or those parties that provide the data (or by other persons - Network accessline 200
14.1 The License Agreement constitutes the whole legal agreement between you and Google and governs your use of the SDK (excluding any services which Google may provide to you under a separate written agreement), and completely replaces any - Network accessline 200
14.1 The License Agreement constitutes the whole legal agreement between you and Google and governs your use of the SDK (excluding any services which Google may provide to you under a separate written agreement), and completely replaces any
play/engage-sdk-integration/references/android/guide/playcore/engage/tv/recommendations.md
- Network accessline 1
This guide contains instructions for developers to integrate their recommended video content, using the [Engage SDK](https://developer.android.com/guide/playcore/engage), to populate recommendations - Network accessline 1
This guide contains instructions for developers to integrate their recommended video content, using the [Engage SDK](https://developer.android.com/guide/playcore/engage), to populate recommendations - Network accessline 2
video content, using the [Engage SDK](https://developer.android.com/guide/playcore/engage), to populate recommendations - Network accessline 2
video content, using the [Engage SDK](https://developer.android.com/guide/playcore/engage), to populate recommendations - Network accessline 12
> [!IMPORTANT] > **Important:** [Express interest in developing with Engage](http://g.co/tv/vda). - Network accessline 12
> [!IMPORTANT] > **Important:** [Express interest in developing with Engage](http://g.co/tv/vda). - Network accessline 13
> **Important:** [Express interest in developing with Engage](http://g.co/tv/vda). - Network accessline 13
> **Important:** [Express interest in developing with Engage](http://g.co/tv/vda). - Network accessline 15
Complete the [Pre-work](https://developer.android.com/guide/playcore/engage/tv/getting-started#pre-work) instructions in the Getting Started guide. - Network accessline 15
Complete the [Pre-work](https://developer.android.com/guide/playcore/engage/tv/getting-started#pre-work) instructions in the Getting Started guide. - Network accessline 27
Make sure to initialize the client and check for service availability as described in the [Getting Started guide](https://developer.android.com/guide/playcore/engage/tv/getting-started#common-integration). - Network accessline 27
Make sure to initialize the client and check for service availability as described in the [Getting Started guide](https://developer.android.com/guide/playcore/engage/tv/getting-started#common-integration). - Network accessline 28
described in the [Getting Started guide](https://developer.android.com/guide/playcore/engage/tv/getting-started#common-integration). - Network accessline 28
described in the [Getting Started guide](https://developer.android.com/guide/playcore/engage/tv/getting-started#common-integration). - Network accessline 38
The [`RecommendationClusterType`](https://developer.android.com/reference/com/google/android/engage/common/datamodel/RecommendationClusterType) determines how the - Network accessline 38
The [`RecommendationClusterType`](https://developer.android.com/reference/com/google/android/engage/common/datamodel/RecommendationClusterType) determines how the - Network accessline 106
The [`DeleteReason`](https://developer.android.com/reference/com/google/android/engage/service/DeleteReason) enum defines the reason for data deletion. - Network accessline 106
The [`DeleteReason`](https://developer.android.com/reference/com/google/android/engage/service/DeleteReason) enum defines the reason for data deletion. - Network accessline 135
1. [`MediaActionFeedEntity`](https://developer.android.com/reference/com/google/android/engage/video/datamodel/MediaActionFeedEntity) - Network accessline 135
1. [`MediaActionFeedEntity`](https://developer.android.com/reference/com/google/android/engage/video/datamodel/MediaActionFeedEntity) - Network accessline 136
2. [`MovieEntity`](https://developer.android.com/reference/com/google/android/engage/video/datamodel/MovieEntity) - Network accessline 136
2. [`MovieEntity`](https://developer.android.com/reference/com/google/android/engage/video/datamodel/MovieEntity) - Network accessline 137
3. [`TvShowEntity`](https://developer.android.com/reference/com/google/android/engage/video/datamodel/TvShowEntity) - Network accessline 137
3. [`TvShowEntity`](https://developer.android.com/reference/com/google/android/engage/video/datamodel/TvShowEntity) - Network accessline 138
4. [`LiveTvChannelEntity`](https://developer.android.com/reference/com/google/android/engage/video/datamodel/LiveTvChannelEntity) - Network accessline 138
4. [`LiveTvChannelEntity`](https://developer.android.com/reference/com/google/android/engage/video/datamodel/LiveTvChannelEntity) - Network accessline 139
5. [`LiveTvProgramEntity`](https://developer.android.com/reference/com/google/android/engage/video/datamodel/LiveTvProgramEntity) - Network accessline 139
5. [`LiveTvProgramEntity`](https://developer.android.com/reference/com/google/android/engage/video/datamodel/LiveTvProgramEntity) - Network accessline 168
.Builder() .setPlatformType(PlatformType.TYPE_ANDROID_TV) .setActionUri(Uri.parse("https://www.example.com/entity_uri_for_tv")) - Network accessline 168
.Builder() .setPlatformType(PlatformType.TYPE_ANDROID_TV) .setActionUri(Uri.parse("https://www.example.com/entity_uri_for_tv")) - Network accessline 169
.setPlatformType(PlatformType.TYPE_ANDROID_TV) .setActionUri(Uri.parse("https://www.example.com/entity_uri_for_tv")) .build() - Network accessline 169
.setPlatformType(PlatformType.TYPE_ANDROID_TV) .setActionUri(Uri.parse("https://www.example.com/entity_uri_for_tv")) .build() - Network accessline 170
.setActionUri(Uri.parse("https://www.example.com/entity_uri_for_tv")) - Network accessline 170
.setActionUri(Uri.parse("https://www.example.com/entity_uri_for_tv")) - Network accessline 176
.Builder() .setPlatformType(PlatformType.TYPE_ANDROID_MOBILE) .setActionUri(Uri.parse("https://www.example.com/entity_uri_for_android")) - Network accessline 176
.Builder() .setPlatformType(PlatformType.TYPE_ANDROID_MOBILE) .setActionUri(Uri.parse("https://www.example.com/entity_uri_for_android")) - Network accessline 177
.setPlatformType(PlatformType.TYPE_ANDROID_MOBILE) .setActionUri(Uri.parse("https://www.example.com/entity_uri_for_android")) .build() - Network accessline 177
.setPlatformType(PlatformType.TYPE_ANDROID_MOBILE) .setActionUri(Uri.parse("https://www.example.com/entity_uri_for_android")) .build() - Network accessline 178
.setActionUri(Uri.parse("https://www.example.com/entity_uri_for_android")) - Network accessline 178
.setActionUri(Uri.parse("https://www.example.com/entity_uri_for_android")) - Network accessline 184
.Builder() .setPlatformType(PlatformType.TYPE_IOS) .setActionUri(Uri.parse("https://www.example.com/entity_uri_for_ios")) - Network accessline 184
.Builder() .setPlatformType(PlatformType.TYPE_IOS) .setActionUri(Uri.parse("https://www.example.com/entity_uri_for_ios")) - Network accessline 185
.setPlatformType(PlatformType.TYPE_IOS) .setActionUri(Uri.parse("https://www.example.com/entity_uri_for_ios")) .build() - Network accessline 185
.setPlatformType(PlatformType.TYPE_IOS) .setActionUri(Uri.parse("https://www.example.com/entity_uri_for_ios")) .build() - Network accessline 186
.setActionUri(Uri.parse("https://www.example.com/entity_uri_for_ios")) - Network accessline 186
.setActionUri(Uri.parse("https://www.example.com/entity_uri_for_ios")) - Network accessline 203
images maintain a 16:9 aspect ratio and a minimum height of 200 pixels for correct display of the "Recommendations" entity, especially within Google's [Entertainment Space](https://support.google.com/entertainmentspace/answer/10346911). Ima - Network accessline 203
images maintain a 16:9 aspect ratio and a minimum height of 200 pixels for correct display of the "Recommendations" entity, especially within Google's [Entertainment Space](https://support.google.com/entertainmentspace/answer/10346911). Ima - Network accessline 204
correct display of the "Recommendations" entity, especially within Google's [Entertainment Space](https://support.google.com/entertainmentspace/answer/10346911). Images with a height less than 200 pixels may not be shown. - Network accessline 204
correct display of the "Recommendations" entity, especially within Google's [Entertainment Space](https://support.google.com/entertainmentspace/answer/10346911). Images with a height less than 200 pixels may not be shown. - Network accessline 205
[Entertainment Space](https://support.google.com/entertainmentspace/answer/10346911). Images with a height less than 200 - Network accessline 205
[Entertainment Space](https://support.google.com/entertainmentspace/answer/10346911). Images with a height less than 200 - Network accessline 208
val image1 = Image.Builder() .setImageUri(Uri.parse("http://www.example.com/entity_image1.png")) - Network accessline 208
val image1 = Image.Builder() .setImageUri(Uri.parse("http://www.example.com/entity_image1.png")) - Network accessline 209
.setImageUri(Uri.parse("http://www.example.com/entity_image1.png")) - Network accessline 209
.setImageUri(Uri.parse("http://www.example.com/entity_image1.png")) - Network accessline 214
val image2 = Image.Builder() .setImageUri(Uri.parse("http://www.example.com/entity_image2.png")) - Network accessline 214
val image2 = Image.Builder() .setImageUri(Uri.parse("http://www.example.com/entity_image2.png")) - Network accessline 215
.setImageUri(Uri.parse("http://www.example.com/entity_image2.png")) - Network accessline 215
.setImageUri(Uri.parse("http://www.example.com/entity_image2.png")) - Network accessline 295
If you have integrated your Media catalogue or Media action feed with Google TV, you need not create separate entities for Movie or TV Show and instead you can create a [`MediaActionFeedEntity`](https://developer.android.com/reference/com/g - Network accessline 295
If you have integrated your Media catalogue or Media action feed with Google TV, you need not create separate entities for Movie or TV Show and instead you can create a [`MediaActionFeedEntity`](https://developer.android.com/reference/com/g - Network accessline 296
you need not create separate entities for Movie or TV Show and instead you can create a [`MediaActionFeedEntity`](https://developer.android.com/reference/com/google/android/engage/video/datamodel/MediaActionFeedEntity) which includes the re - Network accessline 296
you need not create separate entities for Movie or TV Show and instead you can create a [`MediaActionFeedEntity`](https://developer.android.com/reference/com/google/android/engage/video/datamodel/MediaActionFeedEntity) which includes the re - Network accessline 297
create a [`MediaActionFeedEntity`](https://developer.android.com/reference/com/google/android/engage/video/datamodel/MediaActionFeedEntity) which includes the - Network accessline 297
create a [`MediaActionFeedEntity`](https://developer.android.com/reference/com/google/android/engage/video/datamodel/MediaActionFeedEntity) which includes the - Network accessline 403
.setName("Channel Name") // ID of the live TV channel .setEntityId("https://www.example.com/channel/12345") - Network accessline 403
.setName("Channel Name") // ID of the live TV channel .setEntityId("https://www.example.com/channel/12345") - Network accessline 404
// ID of the live TV channel .setEntityId("https://www.example.com/channel/12345") .setDescription("A sentence describing this live TV channel.") - Network accessline 404
// ID of the live TV channel .setEntityId("https://www.example.com/channel/12345") .setDescription("A sentence describing this live TV channel.") - Network accessline 405
.setEntityId("https://www.example.com/channel/12345") - Network accessline 405
.setEntityId("https://www.example.com/channel/12345") - Network accessline 436
// First set the channel information .setChannelName("Channel Name") .setChannelId("https://www.example.com/channel/12345") - Network accessline 436
// First set the channel information .setChannelName("Channel Name") .setChannelId("https://www.example.com/channel/12345") - Network accessline 437
.setChannelName("Channel Name") .setChannelId("https://www.example.com/channel/12345") // channel playback uri must contain at least PlatformType.TYPE_ANDROID_TV - Network accessline 437
.setChannelName("Channel Name") .setChannelId("https://www.example.com/channel/12345") // channel playback uri must contain at least PlatformType.TYPE_ANDROID_TV - Network accessline 438
.setChannelId("https://www.example.com/channel/12345") - Network accessline 438
.setChannelId("https://www.example.com/channel/12345") - Network accessline 442
// Then set the program or card specific information. .setName("Program Name") .setEntityId("https://www.example.com/schedule/123") - Network accessline 442
// Then set the program or card specific information. .setName("Program Name") .setEntityId("https://www.example.com/schedule/123") - Network accessline 443
.setName("Program Name") .setEntityId("https://www.example.com/schedule/123") .setDescription("Program Description") - Network accessline 443
.setName("Program Name") .setEntityId("https://www.example.com/schedule/123") .setDescription("Program Description") - Network accessline 444
.setEntityId("https://www.example.com/schedule/123") - Network accessline 444
.setEntityId("https://www.example.com/schedule/123")
play/engage-sdk-integration/references/android/guide/playcore/engage/watch.md
- Network accessline 5
SDK to deliver Continue Watching content and personalized recommendations directly to users across multiple on-device surfaces **[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.h - Network accessline 5
SDK to deliver Continue Watching content and personalized recommendations directly to users across multiple on-device surfaces **[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.h - Network accessline 6
directly to users across multiple on-device surfaces **[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html)** , **[Entertainment Space](https://blog.google/products/android/ente - Network accessline 6
directly to users across multiple on-device surfaces **[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html)** , **[Entertainment Space](https://blog.google/products/android/ente - Network accessline 7
**[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html)** , - Network accessline 7
**[Collections](https://android-developers.googleblog.com/2024/07/introducing-collections-powered-by-engage-sdk.html)** , - Network accessline 8
**[Entertainment Space](https://blog.google/products/android/entertainment-space/)** , and the Play Store. The - Network accessline 8
**[Entertainment Space](https://blog.google/products/android/entertainment-space/)** , and the Play Store. The - Network accessline 9
integration adds less than 50 KB (compressed) to the average APK and takes most apps about a week of developer time. Learn more at our **[business site](http://play.google.com/console/about/programs/EngageSDK)**. - Network accessline 9
integration adds less than 50 KB (compressed) to the average APK and takes most apps about a week of developer time. Learn more at our **[business site](http://play.google.com/console/about/programs/EngageSDK)**. - Network accessline 11
**[business site](http://play.google.com/console/about/programs/EngageSDK)**. - Network accessline 11
**[business site](http://play.google.com/console/about/programs/EngageSDK)**. - Network accessline 17
> [!NOTE] > **Note:** Check the [TV integration guide](https://developer.android.com/guide/playcore/engage/tv) to learn more about the Continue Watching experience on Google TV. - Network accessline 17
> [!NOTE] > **Note:** Check the [TV integration guide](https://developer.android.com/guide/playcore/engage/tv) to learn more about the Continue Watching experience on Google TV. - Network accessline 18
> **Note:** Check the [TV integration guide](https://developer.android.com/guide/playcore/engage/tv) to learn more about the Continue Watching experience on Google TV. - Network accessline 18
> **Note:** Check the [TV integration guide](https://developer.android.com/guide/playcore/engage/tv) to learn more about the Continue Watching experience on Google TV. - Network accessline 34
[View on GitHub](https://github.com/android/skills/tree/main/play/engage-sdk-integration) - Network accessline 34
[View on GitHub](https://github.com/android/skills/tree/main/play/engage-sdk-integration) - Network accessline 38
Use the Engage SDK [Android skill](https://developer.android.com/tools/agents/android-skills) to integrate, debug, and resolve implementation issues. To install the skill from the [Android CLI](https://developer.android.com/tools/agents/and - Network accessline 38
Use the Engage SDK [Android skill](https://developer.android.com/tools/agents/android-skills) to integrate, debug, and resolve implementation issues. To install the skill from the [Android CLI](https://developer.android.com/tools/agents/and - Network accessline 61
 **Figure 1.** Entertainment Space UI showing a Recommendation Cluster from a single partner. - Network accessline 61
 **Figure 1.** Entertainment Space UI showing a Recommendation Cluster from a single partner. - Network accessline 62
- **Entity:** An object representing a single item in a cluster. An entity can be a movie, a TV show, a TV series, live video, and more. See the [Provide entity data](https://developer.android.com/guide/playcore/engage/watch#provide - Network accessline 62
- **Entity:** An object representing a single item in a cluster. An entity can be a movie, a TV show, a TV series, live video, and more. See the [Provide entity data](https://developer.android.com/guide/playcore/engage/watch#provide - Network accessline 63
can be a movie, a TV show, a TV series, live video, and more. See the [Provide entity data](https://developer.android.com/guide/playcore/engage/watch#provide-entity-data) section for a list of supported entity types. - Network accessline 63
can be a movie, a TV show, a TV series, live video, and more. See the [Provide entity data](https://developer.android.com/guide/playcore/engage/watch#provide-entity-data) section for a list of supported entity types. - Network accessline 64
[Provide entity data](https://developer.android.com/guide/playcore/engage/watch#provide-entity-data) section for a list of - Network accessline 64
[Provide entity data](https://developer.android.com/guide/playcore/engage/watch#provide-entity-data) section for a list of - Network accessline 67
 **Figure 2.** Entertainment Space UI showing a single Entity within a single partner's Recommendation Cluster. - Network accessline 67
 **Figure 2.** Entertainment Space UI showing a single Entity within a single partner's Recommendation Cluster. - Network accessline 74
 **Figure 3.** Entertainment Space UI showing a Continuation cluster with unfinished recommendations from multiple partners (only one recommendation is c - Network accessline 74
 **Figure 3.** Entertainment Space UI showing a Continuation cluster with unfinished recommendations from multiple partners (only one recommendation is c - Network accessline 81
 **Figure 4.** Entertainment Space UI showing a Featured cluster with recommendations from multiple partners (only one recommendation is currently visibl - Network accessline 81
 **Figure 4.** Entertainment Space UI showing a Featured cluster with recommendations from multiple partners (only one recommendation is currently visibl - Network accessline 94
For more information, see [Package visibility in Android 11](https://developer.android.com/about/versions/11/privacy/package-visibility). - Network accessline 94
For more information, see [Package visibility in Android 11](https://developer.android.com/about/versions/11/privacy/package-visibility). - Network accessline 95
11](https://developer.android.com/about/versions/11/privacy/package-visibility). - Network accessline 95
11](https://developer.android.com/about/versions/11/privacy/package-visibility). - Network accessline 99
The design is based on an implementation of a [bound service](https://developer.android.com/guide/components/bound-services). - Network accessline 99
The design is based on an implementation of a [bound service](https://developer.android.com/guide/components/bound-services). - Network accessline 100
service](https://developer.android.com/guide/components/bound-services). - Network accessline 100
service](https://developer.android.com/guide/components/bound-services). - Network accessline 111
> [!IMPORTANT] > **Important:** Engage SDK has superseded Media Home, which is now deprecated. If you have an existing Media Home integration, follow the instructions in [Step > 0](https://developer.android.com/guide/playcore/engage/watch#m - Network accessline 111
> [!IMPORTANT] > **Important:** Engage SDK has superseded Media Home, which is now deprecated. If you have an existing Media Home integration, follow the instructions in [Step > 0](https://developer.android.com/guide/playcore/engage/watch#m - Network accessline 112
> **Important:** Engage SDK has superseded Media Home, which is now deprecated. If you have an existing Media Home integration, follow the instructions in [Step > 0](https://developer.android.com/guide/playcore/engage/watch#migration) to mi - Network accessline 112
> **Important:** Engage SDK has superseded Media Home, which is now deprecated. If you have an existing Media Home integration, follow the instructions in [Step > 0](https://developer.android.com/guide/playcore/engage/watch#migration) to mi - Network accessline 113
> 0](https://developer.android.com/guide/playcore/engage/watch#migration) to migrate your content to Engage SDK, which allows your content to be published to more devices and form factors. Contact [`engage-developers@google.com`](mailto:eng - Network accessline 113
> 0](https://developer.android.com/guide/playcore/engage/watch#migration) to migrate your content to Engage SDK, which allows your content to be published to more devices and form factors. Contact [`engage-developers@google.com`](mailto:eng - Network accessline 114
> 1](https://developer.android.com/guide/playcore/engage/watch#provide-entity-data). - Network accessline 114
> 1](https://developer.android.com/guide/playcore/engage/watch#provide-entity-data). - Network accessline 183
1. [`MovieEntity`](https://developer.android.com/guide/playcore/engage/watch#movieentity) - Network accessline 183
1. [`MovieEntity`](https://developer.android.com/guide/playcore/engage/watch#movieentity) - Network accessline 184
2. [`TvShowEntity`](https://developer.android.com/guide/playcore/engage/watch#tvshowentity) - Network accessline 184
2. [`TvShowEntity`](https://developer.android.com/guide/playcore/engage/watch#tvshowentity) - Network accessline 185
3. [`TvSeasonEntity`](https://developer.android.com/guide/playcore/engage/watch#tvseasonentity) - Network accessline 185
3. [`TvSeasonEntity`](https://developer.android.com/guide/playcore/engage/watch#tvseasonentity) - Network accessline 186
4. [`TvEpisodeEntity`](https://developer.android.com/guide/playcore/engage/watch#tvepisodeentity) - Network accessline 186
4. [`TvEpisodeEntity`](https://developer.android.com/guide/playcore/engage/watch#tvepisodeentity) - Network accessline 187
5. [`LiveStreamingVideoEntity`](https://developer.android.com/guide/playcore/engage/watch#livestreamingvideoentity) - Network accessline 187
5. [`LiveStreamingVideoEntity`](https://developer.android.com/guide/playcore/engage/watch#livestreamingvideoentity) - Network accessline 188
6. [`VideoClipEntity`](https://developer.android.com/guide/playcore/engage/watch#videoclipentity) - Network accessline 188
6. [`VideoClipEntity`](https://developer.android.com/guide/playcore/engage/watch#videoclipentity) - Network accessline 195
|---|---|---| | Name | **Required** | | | Poster images | **Required** | At least one image is required, and must be provided with an aspect ratio. (Landscape is preferred but passing both portrait and landscape images for different scena - Network accessline 195
|---|---|---| | Name | **Required** | | | Poster images | **Required** | At least one image is required, and must be provided with an aspect ratio. (Landscape is preferred but passing both portrait and landscape images for different scena - Network accessline 196
| Name | **Required** | | | Poster images | **Required** | At least one image is required, and must be provided with an aspect ratio. (Landscape is preferred but passing both portrait and landscape images for different scenarios is recomm - Network accessline 196
| Name | **Required** | | | Poster images | **Required** | At least one image is required, and must be provided with an aspect ratio. (Landscape is preferred but passing both portrait and landscape images for different scenarios is recomm - Network accessline 197
| Poster images | **Required** | At least one image is required, and must be provided with an aspect ratio. (Landscape is preferred but passing both portrait and landscape images for different scenarios is recommended.) See [Image Specifica - Network accessline 197
| Poster images | **Required** | At least one image is required, and must be provided with an aspect ratio. (Landscape is preferred but passing both portrait and landscape images for different scenarios is recommended.) See [Image Specifica - Network accessline 198
| Playback uri | **Required** for mobile | The deep link to the provider app to start playing the movie. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-att - Network accessline 198
| Playback uri | **Required** for mobile | The deep link to the provider app to start playing the movie. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-att - Network accessline 199
| Platform specific playback URIs | Optional for mobile; required for Google TV | Platform-specific deep links to the provider app to start playing the movie. | | Info page uri | Optional | The deep link to the provider app to show details - Network accessline 199
| Platform specific playback URIs | Optional for mobile; required for Google TV | Platform-specific deep links to the provider app to start playing the movie. | | Info page uri | Optional | The deep link to the provider app to show details - Network accessline 200
| Info page uri | Optional | The deep link to the provider app to show details about the movie. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) - Network accessline 200
| Info page uri | Optional | The deep link to the provider app to show details about the movie. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) - Network accessline 204
| Duration | **Required** | In milliseconds. | | Genre | Optional | Free text | | Content ratings | Optional | Free text, follow the industry standard. ([Example](https://www.spectrum.net/support/tv/tv-and-movie-ratings-descriptions)) | - Network accessline 204
| Duration | **Required** | In milliseconds. | | Genre | Optional | Free text | | Content ratings | Optional | Free text, follow the industry standard. ([Example](https://www.spectrum.net/support/tv/tv-and-movie-ratings-descriptions)) | - Network accessline 205
| Genre | Optional | Free text | | Content ratings | Optional | Free text, follow the industry standard. ([Example](https://www.spectrum.net/support/tv/tv-and-movie-ratings-descriptions)) | | Call to action text | Optional | Free text to be - Network accessline 205
| Genre | Optional | Free text | | Content ratings | Optional | Free text, follow the industry standard. ([Example](https://www.spectrum.net/support/tv/tv-and-movie-ratings-descriptions)) | | Call to action text | Optional | Free text to be - Network accessline 206
| Content ratings | Optional | Free text, follow the industry standard. ([Example](https://www.spectrum.net/support/tv/tv-and-movie-ratings-descriptions)) | - Network accessline 206
| Content ratings | Optional | Free text, follow the industry standard. ([Example](https://www.spectrum.net/support/tv/tv-and-movie-ratings-descriptions)) | - Network accessline 216
|---|---|---| | Name | **Required** | | | Poster images | **Required** | At least one image is required, and must be provided with an aspect ratio. (Landscape is preferred but passing both portrait and landscape images for different scena - Network accessline 216
|---|---|---| | Name | **Required** | | | Poster images | **Required** | At least one image is required, and must be provided with an aspect ratio. (Landscape is preferred but passing both portrait and landscape images for different scena - Network accessline 217
| Name | **Required** | | | Poster images | **Required** | At least one image is required, and must be provided with an aspect ratio. (Landscape is preferred but passing both portrait and landscape images for different scenarios is recomm - Network accessline 217
| Name | **Required** | | | Poster images | **Required** | At least one image is required, and must be provided with an aspect ratio. (Landscape is preferred but passing both portrait and landscape images for different scenarios is recomm - Network accessline 218
| Poster images | **Required** | At least one image is required, and must be provided with an aspect ratio. (Landscape is preferred but passing both portrait and landscape images for different scenarios is recommended.) See [Image Specifica - Network accessline 218
| Poster images | **Required** | At least one image is required, and must be provided with an aspect ratio. (Landscape is preferred but passing both portrait and landscape images for different scenarios is recommended.) See [Image Specifica - Network accessline 219
| Info page uri | **Required** | The deep link to the provider app to show the details of the TV show. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attri - Network accessline 219
| Info page uri | **Required** | The deep link to the provider app to show the details of the TV show. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attri - Network accessline 220
| Playback uri | Optional | The deep link to the provider app to start playing the TV show. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 220
| Playback uri | Optional | The deep link to the provider app to start playing the TV show. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attribution) | - Network accessline 226
| Season count | Optional | Positive integer | | Genre | Optional | Free text | | Content ratings | Optional | Free text, follow the industry standard. ([Example](https://www.spectrum.net/support/tv/tv-and-movie-ratings-descriptions)) | - Network accessline 226
| Season count | Optional | Positive integer | | Genre | Optional | Free text | | Content ratings | Optional | Free text, follow the industry standard. ([Example](https://www.spectrum.net/support/tv/tv-and-movie-ratings-descriptions)) | - Network accessline 227
| Genre | Optional | Free text | | Content ratings | Optional | Free text, follow the industry standard. ([Example](https://www.spectrum.net/support/tv/tv-and-movie-ratings-descriptions)) | | Call to action text | Optional | Free text to be - Network accessline 227
| Genre | Optional | Free text | | Content ratings | Optional | Free text, follow the industry standard. ([Example](https://www.spectrum.net/support/tv/tv-and-movie-ratings-descriptions)) | | Call to action text | Optional | Free text to be - Network accessline 228
| Content ratings | Optional | Free text, follow the industry standard. ([Example](https://www.spectrum.net/support/tv/tv-and-movie-ratings-descriptions)) | - Network accessline 228
| Content ratings | Optional | Free text, follow the industry standard. ([Example](https://www.spectrum.net/support/tv/tv-and-movie-ratings-descriptions)) | - Network accessline 238
|---|---|---| | Name | **Required** | | | Poster images | **Required** | At least one image is required, and must be provided with an aspect ratio. (Landscape is preferred but passing both portrait and landscape images for different scena - Network accessline 238
|---|---|---| | Name | **Required** | | | Poster images | **Required** | At least one image is required, and must be provided with an aspect ratio. (Landscape is preferred but passing both portrait and landscape images for different scena - Network accessline 239
| Name | **Required** | | | Poster images | **Required** | At least one image is required, and must be provided with an aspect ratio. (Landscape is preferred but passing both portrait and landscape images for different scenarios is recomm - Network accessline 239
| Name | **Required** | | | Poster images | **Required** | At least one image is required, and must be provided with an aspect ratio. (Landscape is preferred but passing both portrait and landscape images for different scenarios is recomm - Network accessline 240
| Poster images | **Required** | At least one image is required, and must be provided with an aspect ratio. (Landscape is preferred but passing both portrait and landscape images for different scenarios is recommended.) See [Image Specifica - Network accessline 240
| Poster images | **Required** | At least one image is required, and must be provided with an aspect ratio. (Landscape is preferred but passing both portrait and landscape images for different scenarios is recommended.) See [Image Specifica - Network accessline 241
| Info page uri | **Required** | The deep link to the provider app to show the details of the TV show season. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplink - Network accessline 241
| Info page uri | **Required** | The deep link to the provider app to show the details of the TV show season. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplink - Network accessline 242
| Playback uri | Optional | The deep link to the provider app to start playing the TV show season. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attributi - Network accessline 242
| Playback uri | Optional | The deep link to the provider app to start playing the TV show season. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-attributi - Network accessline 248
| Episode count | Optional | Positive integer | | Genre | Optional | Free text | | Content ratings | Optional | Free text, follow the industry standard. ([Example](https://www.spectrum.net/support/tv/tv-and-movie-ratings-descriptions)) | - Network accessline 248
| Episode count | Optional | Positive integer | | Genre | Optional | Free text | | Content ratings | Optional | Free text, follow the industry standard. ([Example](https://www.spectrum.net/support/tv/tv-and-movie-ratings-descriptions)) | - Network accessline 249
| Genre | Optional | Free text | | Content ratings | Optional | Free text, follow the industry standard. ([Example](https://www.spectrum.net/support/tv/tv-and-movie-ratings-descriptions)) | | Call to action text | Optional | Free text to be - Network accessline 249
| Genre | Optional | Free text | | Content ratings | Optional | Free text, follow the industry standard. ([Example](https://www.spectrum.net/support/tv/tv-and-movie-ratings-descriptions)) | | Call to action text | Optional | Free text to be - Network accessline 250
| Content ratings | Optional | Free text, follow the industry standard. ([Example](https://www.spectrum.net/support/tv/tv-and-movie-ratings-descriptions)) | - Network accessline 250
| Content ratings | Optional | Free text, follow the industry standard. ([Example](https://www.spectrum.net/support/tv/tv-and-movie-ratings-descriptions)) | - Network accessline 260
|---|---|---| | Name | **Required** | | | Poster images | **Required** | At least one image is required, and must be provided with an aspect ratio. (Landscape is preferred but passing both portrait and landscape images for different scena - Network accessline 260
|---|---|---| | Name | **Required** | | | Poster images | **Required** | At least one image is required, and must be provided with an aspect ratio. (Landscape is preferred but passing both portrait and landscape images for different scena - Network accessline 261
| Name | **Required** | | | Poster images | **Required** | At least one image is required, and must be provided with an aspect ratio. (Landscape is preferred but passing both portrait and landscape images for different scenarios is recomm - Network accessline 261
| Name | **Required** | | | Poster images | **Required** | At least one image is required, and must be provided with an aspect ratio. (Landscape is preferred but passing both portrait and landscape images for different scenarios is recomm - Network accessline 262
| Poster images | **Required** | At least one image is required, and must be provided with an aspect ratio. (Landscape is preferred but passing both portrait and landscape images for different scenarios is recommended.) See [Image Specifica - Network accessline 262
| Poster images | **Required** | At least one image is required, and must be provided with an aspect ratio. (Landscape is preferred but passing both portrait and landscape images for different scenarios is recommended.) See [Image Specifica - Network accessline 263
| Playback uri | **Required** for mobile | The deep link to the provider app to start playing the episode. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-a - Network accessline 263
| Playback uri | **Required** for mobile | The deep link to the provider app to start playing the episode. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-a - Network accessline 264
| Platform specific playback URIs | Optional for mobile; required for Google TV | Platform-specific deep links to the provider app to start playing the episode. | | Info page uri | Optional | The deep link to the provider app to show detail - Network accessline 264
| Platform specific playback URIs | Optional for mobile; required for Google TV | Platform-specific deep links to the provider app to start playing the episode. | | Info page uri | Optional | The deep link to the provider app to show detail - Network accessline 265
| Info page uri | Optional | The deep link to the provider app to show details about the TV show episode. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-at - Network accessline 265
| Info page uri | Optional | The deep link to the provider app to show details about the TV show episode. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-at - Network accessline 272
| Duration | **Required** | Must be a positive value in milliseconds. | | Genre | Optional | Free text | | Content ratings | Optional | Free text, follow the industry standard. ([Example](https://www.spectrum.net/support/tv/tv-and-movie-rat - Network accessline 272
| Duration | **Required** | Must be a positive value in milliseconds. | | Genre | Optional | Free text | | Content ratings | Optional | Free text, follow the industry standard. ([Example](https://www.spectrum.net/support/tv/tv-and-movie-rat - Network accessline 273
| Genre | Optional | Free text | | Content ratings | Optional | Free text, follow the industry standard. ([Example](https://www.spectrum.net/support/tv/tv-and-movie-ratings-descriptions)) | | Call to action text | Optional | Free text to be - Network accessline 273
| Genre | Optional | Free text | | Content ratings | Optional | Free text, follow the industry standard. ([Example](https://www.spectrum.net/support/tv/tv-and-movie-ratings-descriptions)) | | Call to action text | Optional | Free text to be - Network accessline 274
| Content ratings | Optional | Free text, follow the industry standard. ([Example](https://www.spectrum.net/support/tv/tv-and-movie-ratings-descriptions)) | - Network accessline 274
| Content ratings | Optional | Free text, follow the industry standard. ([Example](https://www.spectrum.net/support/tv/tv-and-movie-ratings-descriptions)) | - Network accessline 284
|---|---|---| | Name | **Required** | | | Poster images | **Required** | At least one image is required, and must be provided with an aspect ratio. (Landscape is preferred but passing both portrait and landscape images for different scena - Network accessline 284
|---|---|---| | Name | **Required** | | | Poster images | **Required** | At least one image is required, and must be provided with an aspect ratio. (Landscape is preferred but passing both portrait and landscape images for different scena - Network accessline 285
| Name | **Required** | | | Poster images | **Required** | At least one image is required, and must be provided with an aspect ratio. (Landscape is preferred but passing both portrait and landscape images for different scenarios is recomm - Network accessline 285
| Name | **Required** | | | Poster images | **Required** | At least one image is required, and must be provided with an aspect ratio. (Landscape is preferred but passing both portrait and landscape images for different scenarios is recomm - Network accessline 286
| Poster images | **Required** | At least one image is required, and must be provided with an aspect ratio. (Landscape is preferred but passing both portrait and landscape images for different scenarios is recommended.) See [Image Specifica - Network accessline 286
| Poster images | **Required** | At least one image is required, and must be provided with an aspect ratio. (Landscape is preferred but passing both portrait and landscape images for different scenarios is recommended.) See [Image Specifica - Network accessline 287
| Playback uri | **Required** for mobile | The deep link to the provider app to start playing the video. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-att - Network accessline 287
| Playback uri | **Required** for mobile | The deep link to the provider app to start playing the video. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-att - Network accessline 305
|---|---|---| | Name | **Required** | | | Poster images | **Required** | At least one image is required, and must be provided with an aspect ratio. (Landscape is preferred but passing both portrait and landscape images for different scena - Network accessline 305
|---|---|---| | Name | **Required** | | | Poster images | **Required** | At least one image is required, and must be provided with an aspect ratio. (Landscape is preferred but passing both portrait and landscape images for different scena - Network accessline 306
| Name | **Required** | | | Poster images | **Required** | At least one image is required, and must be provided with an aspect ratio. (Landscape is preferred but passing both portrait and landscape images for different scenarios is recomm - Network accessline 306
| Name | **Required** | | | Poster images | **Required** | At least one image is required, and must be provided with an aspect ratio. (Landscape is preferred but passing both portrait and landscape images for different scenarios is recomm - Network accessline 307
| Poster images | **Required** | At least one image is required, and must be provided with an aspect ratio. (Landscape is preferred but passing both portrait and landscape images for different scenarios is recommended.) See [Image Specifica - Network accessline 307
| Poster images | **Required** | At least one image is required, and must be provided with an aspect ratio. (Landscape is preferred but passing both portrait and landscape images for different scenarios is recommended.) See [Image Specifica - Network accessline 308
| Playback uri | **Required** for mobile | The deep link to the provider app to start playing the video. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-att - Network accessline 308
| Playback uri | **Required** for mobile | The deep link to the provider app to start playing the video. Note: You can use deep links for attribution. [Refer to this FAQ](https://developer.android.com/guide/playcore/engage/faq#deeplinks-att - Network accessline 342
.setName("Avengers") .addPosterImage(Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 342
.setName("Avengers") .addPosterImage(Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 343
.addPosterImage(Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(960) - Network accessline 343
.addPosterImage(Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(960) - Network accessline 344
.setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 344
.setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 346
.setImageWidthInPixel(408) .build()) .setPlayBackUri(Uri.parse("http://tv.com/playback/1")) - Network accessline 346
.setImageWidthInPixel(408) .build()) .setPlayBackUri(Uri.parse("http://tv.com/playback/1")) - Network accessline 347
.build()) .setPlayBackUri(Uri.parse("http://tv.com/playback/1")) .setReleaseDateEpochMillis(1633032895L) - Network accessline 347
.build()) .setPlayBackUri(Uri.parse("http://tv.com/playback/1")) .setReleaseDateEpochMillis(1633032895L) - Network accessline 348
.setPlayBackUri(Uri.parse("http://tv.com/playback/1")) - Network accessline 348
.setPlayBackUri(Uri.parse("http://tv.com/playback/1")) - Network accessline 364
.addPosterImage( new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 364
.addPosterImage( new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 365
new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(960) - Network accessline 365
new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(960) - Network accessline 366
.setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 366
.setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 368
.setImageWidthInPixel(408) .build()) .setPlayBackUri(Uri.parse("http://tv.com/playback/1")) - Network accessline 368
.setImageWidthInPixel(408) .build()) .setPlayBackUri(Uri.parse("http://tv.com/playback/1")) - Network accessline 369
.build()) .setPlayBackUri(Uri.parse("http://tv.com/playback/1")) .setReleaseDateEpochMillis(1633032895L) - Network accessline 369
.build()) .setPlayBackUri(Uri.parse("http://tv.com/playback/1")) .setReleaseDateEpochMillis(1633032895L) - Network accessline 370
.setPlayBackUri(Uri.parse("http://tv.com/playback/1")) - Network accessline 370
.setPlayBackUri(Uri.parse("http://tv.com/playback/1")) - Network accessline 384
It's recommended to have the content publish job executed in the background (for example, using [WorkManager](https://developer.android.com/topic/libraries/architecture/workmanager)) - Network accessline 384
It's recommended to have the content publish job executed in the background (for example, using [WorkManager](https://developer.android.com/topic/libraries/architecture/workmanager)) - Network accessline 385
(for example, using [WorkManager](https://developer.android.com/topic/libraries/architecture/workmanager)) - Network accessline 385
(for example, using [WorkManager](https://developer.android.com/topic/libraries/architecture/workmanager)) - Network accessline 414
[View on GitHub](https://github.com/android/skills/tree/main/play/engage-sdk-integration) - Network accessline 414
[View on GitHub](https://github.com/android/skills/tree/main/play/engage-sdk-integration) - Network accessline 418
To install the skill from the [Android CLI](https://developer.android.com/tools/agents/android-cli), run: - Network accessline 418
To install the skill from the [Android CLI](https://developer.android.com/tools/agents/android-cli), run: - Network accessline 684
.addPosterImage( Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 684
.addPosterImage( Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 685
Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(500) - Network accessline 685
Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(500) - Network accessline 686
.setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 686
.setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 689
.build()) .setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 689
.build()) .setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 690
.setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) .build() - Network accessline 690
.setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) .build() - Network accessline 691
.setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 691
.setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 703
.addPosterImage( new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 703
.addPosterImage( new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 704
new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(500) - Network accessline 704
new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(500) - Network accessline 705
.setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 705
.setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 708
.build()) .setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 708
.build()) .setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 709
.setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) .build(); - Network accessline 709
.setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) .build(); - Network accessline 710
.setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 710
.setActionUri(Uri.parse("http://xx.com/signin")) - Network accessline 972
In addition to making publish content API calls through a job, it is also required to set up a [`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive - Network accessline 972
In addition to making publish content API calls through a job, it is also required to set up a [`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive - Network accessline 973
required to set up a [`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive the request for a content publish. - Network accessline 973
required to set up a [`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive the request for a content publish. - Network accessline 974
[`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive - Network accessline 974
[`BroadcastReceiver`](https://developer.android.com/reference/android/content/BroadcastReceiver) to receive - Network accessline 1082
The following [intents](https://developer.android.com/reference/android/content/Intent) is sent by the - Network accessline 1082
The following [intents](https://developer.android.com/reference/android/content/Intent) is sent by the - Network accessline 1091
For a step-by-step guide on verifying your integration after it is complete, see [Engage developer integration workflow](https://developer.android.com/guide/playcore/engage/workflow). - Network accessline 1091
For a step-by-step guide on verifying your integration after it is complete, see [Engage developer integration workflow](https://developer.android.com/guide/playcore/engage/workflow). - Network accessline 1092
[Engage developer integration workflow](https://developer.android.com/guide/playcore/engage/workflow). - Network accessline 1092
[Engage developer integration workflow](https://developer.android.com/guide/playcore/engage/workflow). - Network accessline 1096
See [Engage SDK Frequently Asked Questions](https://developer.android.com/guide/playcore/engage/faq) for - Network accessline 1096
See [Engage SDK Frequently Asked Questions](https://developer.android.com/guide/playcore/engage/faq) for
play/engage-sdk-integration/references/patterns.md
- Network accessline 311
.addPosterImage( com.google.android.engage.common.datamodel.Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 311
.addPosterImage( com.google.android.engage.common.datamodel.Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 312
com.google.android.engage.common.datamodel.Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(500) - Network accessline 312
com.google.android.engage.common.datamodel.Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(500) - Network accessline 313
.setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 313
.setImageUri(Uri.parse("http://www.x.com/image.png")) - Network accessline 317
) .setActionText(signInCardAction) .setActionUri(Uri.parse("https://xyz.com/signin")) - Network accessline 317
) .setActionText(signInCardAction) .setActionUri(Uri.parse("https://xyz.com/signin")) - Network accessline 318
.setActionText(signInCardAction) .setActionUri(Uri.parse("https://xyz.com/signin")) .build() - Network accessline 318
.setActionText(signInCardAction) .setActionUri(Uri.parse("https://xyz.com/signin")) .build() - Network accessline 319
.setActionUri(Uri.parse("https://xyz.com/signin")) - Network accessline 319
.setActionUri(Uri.parse("https://xyz.com/signin")) - Network accessline 501
com.google.android.engage.common.datamodel.PlatformSpecificUri.Builder() .setPlatformType(com.google.android.engage.common.datamodel.PlatformType.TYPE_ANDROID_TV) .setActionUri(Uri.parse("https://www.example.com/tv/play/123" - Network accessline 501
com.google.android.engage.common.datamodel.PlatformSpecificUri.Builder() .setPlatformType(com.google.android.engage.common.datamodel.PlatformType.TYPE_ANDROID_TV) .setActionUri(Uri.parse("https://www.example.com/tv/play/123" - Network accessline 502
.setPlatformType(com.google.android.engage.common.datamodel.PlatformType.TYPE_ANDROID_TV) .setActionUri(Uri.parse("https://www.example.com/tv/play/123")) .build(), - Network accessline 502
.setPlatformType(com.google.android.engage.common.datamodel.PlatformType.TYPE_ANDROID_TV) .setActionUri(Uri.parse("https://www.example.com/tv/play/123")) .build(), - Network accessline 503
.setActionUri(Uri.parse("https://www.example.com/tv/play/123")) - Network accessline 503
.setActionUri(Uri.parse("https://www.example.com/tv/play/123")) - Network accessline 505
com.google.android.engage.common.datamodel.PlatformSpecificUri.Builder() .setPlatformType(com.google.android.engage.common.datamodel.PlatformType.TYPE_ANDROID_MOBILE) .setActionUri(Uri.parse("https://www.example.com/mobile/p - Network accessline 505
com.google.android.engage.common.datamodel.PlatformSpecificUri.Builder() .setPlatformType(com.google.android.engage.common.datamodel.PlatformType.TYPE_ANDROID_MOBILE) .setActionUri(Uri.parse("https://www.example.com/mobile/p - Network accessline 506
.setPlatformType(com.google.android.engage.common.datamodel.PlatformType.TYPE_ANDROID_MOBILE) .setActionUri(Uri.parse("https://www.example.com/mobile/play/123")) .build() - Network accessline 506
.setPlatformType(com.google.android.engage.common.datamodel.PlatformType.TYPE_ANDROID_MOBILE) .setActionUri(Uri.parse("https://www.example.com/mobile/play/123")) .build() - Network accessline 507
.setActionUri(Uri.parse("https://www.example.com/mobile/play/123")) - Network accessline 507
.setActionUri(Uri.parse("https://www.example.com/mobile/play/123"))
play/play-billing-library-version-upgrade/SKILL.md
- Network accessline 49
- **[Migration Guide](https://developer.android.com/google/play/billing/migrate-gpblv%5BX%5D)** (where `[X]` is the target major version). - Network accessline 49
- **[Migration Guide](https://developer.android.com/google/play/billing/migrate-gpblv%5BX%5D)** (where `[X]` is the target major version).
play/play-billing-library-version-upgrade/references/android/google/play/billing/release-notes.md
- Network accessline 6
[View on GitHub](https://github.com/android/skills/tree/main/play/play-billing-library-version-upgrade) - Network accessline 6
[View on GitHub](https://github.com/android/skills/tree/main/play/play-billing-library-version-upgrade) - Network accessline 10
Use the Play Billing Library [Android skill](https://developer.android.com/tools/agents/android-skills) to automate your upgrade to the latest version. To install the skill from the [Android CLI](https://developer.android.com/tools/agents/a - Network accessline 10
Use the Play Billing Library [Android skill](https://developer.android.com/tools/agents/android-skills) to automate your upgrade to the latest version. To install the skill from the [Android CLI](https://developer.android.com/tools/agents/a - Network accessline 26
- New APIs for [Billing Choice](https://developer.android.com/google/play/billing/billingchoice): - Network accessline 26
- New APIs for [Billing Choice](https://developer.android.com/google/play/billing/billingchoice): - Network accessline 27
- Added [`BillingClient.getBillingChoiceInfoAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#getBillingChoiceInfoAsync(com.android.billingclient.api.GetBillingChoiceInfoParams,com.android.billing - Network accessline 27
- Added [`BillingClient.getBillingChoiceInfoAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#getBillingChoiceInfoAsync(com.android.billingclient.api.GetBillingChoiceInfoParams,com.android.billing - Network accessline 28
- Added [`BillingChoiceInfo`](https://developer.android.com/reference/com/android/billingclient/api/BillingChoiceInfo) class which contains the response details, including image URLs and loyalty information. - Network accessline 28
- Added [`BillingChoiceInfo`](https://developer.android.com/reference/com/android/billingclient/api/BillingChoiceInfo) class which contains the response details, including image URLs and loyalty information. - Network accessline 29
- Added [`GetBillingChoiceInfoParams`](https://developer.android.com/reference/com/android/billingclient/api/GetBillingChoiceInfoParams) to configure the request. - Network accessline 29
- Added [`GetBillingChoiceInfoParams`](https://developer.android.com/reference/com/android/billingclient/api/GetBillingChoiceInfoParams) to configure the request. - Network accessline 30
- Added [`BillingChoiceInfoResponseListener`](https://developer.android.com/reference/com/android/billingclient/api/BillingChoiceInfoResponseListener) to receive the callback. - Network accessline 30
- Added [`BillingChoiceInfoResponseListener`](https://developer.android.com/reference/com/android/billingclient/api/BillingChoiceInfoResponseListener) to receive the callback. - Network accessline 31
- Added Kotlin extension `BillingClient.getBillingChoiceInfo()` suspend function. - Added [`BillingClient.showBillingProgramInformationDialog()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#showBill - Network accessline 31
- Added Kotlin extension `BillingClient.getBillingChoiceInfo()` suspend function. - Added [`BillingClient.showBillingProgramInformationDialog()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#showBill - Network accessline 32
- Added [`BillingClient.showBillingProgramInformationDialog()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#showBillingProgramInformationDialog(android.app.Activity,com.android.billingclient.api.Billi - Network accessline 32
- Added [`BillingClient.showBillingProgramInformationDialog()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#showBillingProgramInformationDialog(android.app.Activity,com.android.billingclient.api.Billi - Network accessline 33
- Added [`BillingProgramInformationDialogParams`](https://developer.android.com/reference/com/android/billingclient/api/BillingProgramInformationDialogParams) to configure the dialog. - Network accessline 33
- Added [`BillingProgramInformationDialogParams`](https://developer.android.com/reference/com/android/billingclient/api/BillingProgramInformationDialogParams) to configure the dialog. - Network accessline 34
- Added [`BillingProgramInformationDialogListener`](https://developer.android.com/reference/com/android/billingclient/api/BillingProgramInformationDialogListener) to receive the callback. - Network accessline 34
- Added [`BillingProgramInformationDialogListener`](https://developer.android.com/reference/com/android/billingclient/api/BillingProgramInformationDialogListener) to receive the callback. - Network accessline 35
- Added [`BillingProgramAvailabilityDetails.BillingChoiceAvailabilityDetails`](https://developer.android.com/reference/com/android/billingclient/api/BillingProgramAvailabilityDetails.BillingChoiceAvailabilityDetails) to provide details abou - Network accessline 35
- Added [`BillingProgramAvailabilityDetails.BillingChoiceAvailabilityDetails`](https://developer.android.com/reference/com/android/billingclient/api/BillingProgramAvailabilityDetails.BillingChoiceAvailabilityDetails) to provide details abou - Network accessline 36
- Added [`ChoiceScreenType`](https://developer.android.com/reference/com/android/billingclient/api/BillingProgramAvailabilityDetails.BillingChoiceAvailabilityDetails.ChoiceScreenType) to specify the type of choice screen. - Network accessline 36
- Added [`ChoiceScreenType`](https://developer.android.com/reference/com/android/billingclient/api/BillingProgramAvailabilityDetails.BillingChoiceAvailabilityDetails.ChoiceScreenType) to specify the type of choice screen. - Network accessline 40
Version 9.0.0 of the Google Play Billing Library and Kotlin extensions are now available. See the [PBL 9 migration guide](https://developer.android.com/google/play/billing/migrate-pbl-latest) if you want to migrate from - Network accessline 40
Version 9.0.0 of the Google Play Billing Library and Kotlin extensions are now available. See the [PBL 9 migration guide](https://developer.android.com/google/play/billing/migrate-pbl-latest) if you want to migrate from - Network accessline 41
now available. See the [PBL 9 migration guide](https://developer.android.com/google/play/billing/migrate-pbl-latest) if you want to migrate from - Network accessline 41
now available. See the [PBL 9 migration guide](https://developer.android.com/google/play/billing/migrate-pbl-latest) if you want to migrate from - Network accessline 54
> [!NOTE] > **Note:** For this feature to work, you need [AndroidX.core library](https://developer.android.com/jetpack/androidx/releases/core#1.9.0) version 1.9 or later. - Network accessline 54
> [!NOTE] > **Note:** For this feature to work, you need [AndroidX.core library](https://developer.android.com/jetpack/androidx/releases/core#1.9.0) version 1.9 or later. - Network accessline 55
> **Note:** For this feature to work, you need [AndroidX.core library](https://developer.android.com/jetpack/androidx/releases/core#1.9.0) version 1.9 or later. - Network accessline 55
> **Note:** For this feature to work, you need [AndroidX.core library](https://developer.android.com/jetpack/androidx/releases/core#1.9.0) version 1.9 or later. - Network accessline 57
- **Nullability update for developer-provided billing** : The [`DeveloperProvidedBillingDetails.getLinkUri()`](https://developer.android.com/reference/com/android/billingclient/api/DeveloperProvidedBillingDetails#getLinkUri()) method has - Network accessline 57
- **Nullability update for developer-provided billing** : The [`DeveloperProvidedBillingDetails.getLinkUri()`](https://developer.android.com/reference/com/android/billingclient/api/DeveloperProvidedBillingDetails#getLinkUri()) method has - Network accessline 58
[`DeveloperProvidedBillingDetails.getLinkUri()`](https://developer.android.com/reference/com/android/billingclient/api/DeveloperProvidedBillingDetails#getLinkUri()) method has - Network accessline 58
[`DeveloperProvidedBillingDetails.getLinkUri()`](https://developer.android.com/reference/com/android/billingclient/api/DeveloperProvidedBillingDetails#getLinkUri()) method has - Network accessline 63
To handle this change safely, ensure your integration code handles both `null` and empty string (`""`) values from the [`DeveloperProvidedBillingDetails.getLinkUri()`](https://developer.android.com/reference/com/android/billingclient/ap - Network accessline 63
To handle this change safely, ensure your integration code handles both `null` and empty string (`""`) values from the [`DeveloperProvidedBillingDetails.getLinkUri()`](https://developer.android.com/reference/com/android/billingclient/ap - Network accessline 64
`null` and empty string (`""`) values from the [`DeveloperProvidedBillingDetails.getLinkUri()`](https://developer.android.com/reference/com/android/billingclient/api/DeveloperProvidedBillingDetails#getLinkUri()) method before parsing or - Network accessline 64
`null` and empty string (`""`) values from the [`DeveloperProvidedBillingDetails.getLinkUri()`](https://developer.android.com/reference/com/android/billingclient/api/DeveloperProvidedBillingDetails#getLinkUri()) method before parsing or - Network accessline 65
[`DeveloperProvidedBillingDetails.getLinkUri()`](https://developer.android.com/reference/com/android/billingclient/api/DeveloperProvidedBillingDetails#getLinkUri()) method before parsing - Network accessline 65
[`DeveloperProvidedBillingDetails.getLinkUri()`](https://developer.android.com/reference/com/android/billingclient/api/DeveloperProvidedBillingDetails#getLinkUri()) method before parsing - Network accessline 69
- You can now use [in-app messaging](https://developer.android.com/google/play/billing/subscriptions#in-app-messaging) to notify users - Network accessline 69
- You can now use [in-app messaging](https://developer.android.com/google/play/billing/subscriptions#in-app-messaging) to notify users - Network accessline 78
- New APIs for [external payments](https://developer.android.com/google/play/billing/externalpaymentlinks): - Network accessline 78
- New APIs for [external payments](https://developer.android.com/google/play/billing/externalpaymentlinks): - Network accessline 80
- Added classes to support external payments flow: - [`BillingProgram.EXTERNAL_PAYMENTS`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.BillingProgram#EXTERNAL_PAYMENTS()) - Network accessline 80
- Added classes to support external payments flow: - [`BillingProgram.EXTERNAL_PAYMENTS`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.BillingProgram#EXTERNAL_PAYMENTS()) - Network accessline 81
- [`BillingProgram.EXTERNAL_PAYMENTS`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.BillingProgram#EXTERNAL_PAYMENTS()) - Network accessline 81
- [`BillingProgram.EXTERNAL_PAYMENTS`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.BillingProgram#EXTERNAL_PAYMENTS()) - Network accessline 82
- [`EnableBillingProgramParams`](https://developer.android.com/reference/com/android/billingclient/api/EnableBillingProgramParams) - Network accessline 82
- [`EnableBillingProgramParams`](https://developer.android.com/reference/com/android/billingclient/api/EnableBillingProgramParams) - Network accessline 83
- [`DeveloperBillingOptionParams`](https://developer.android.com/reference/com/android/billingclient/api/DeveloperBillingOptionParams) - Network accessline 83
- [`DeveloperBillingOptionParams`](https://developer.android.com/reference/com/android/billingclient/api/DeveloperBillingOptionParams) - Network accessline 84
- [`DeveloperProvidedBillingDetails`](https://developer.android.com/reference/com/android/billingclient/api/DeveloperProvidedBillingDetails) - Network accessline 84
- [`DeveloperProvidedBillingDetails`](https://developer.android.com/reference/com/android/billingclient/api/DeveloperProvidedBillingDetails) - Network accessline 85
- [`DeveloperProvidedBillingListener`](https://developer.android.com/reference/com/android/billingclient/api/DeveloperProvidedBillingListener) - Network accessline 85
- [`DeveloperProvidedBillingListener`](https://developer.android.com/reference/com/android/billingclient/api/DeveloperProvidedBillingListener) - Network accessline 86
- Added [`enableBillingProgram(EnableBillingProgramParams)`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.Builder#enableBillingProgram(com.android.billingclient.api.EnableBillingProgramParams)) to enab - Network accessline 86
- Added [`enableBillingProgram(EnableBillingProgramParams)`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.Builder#enableBillingProgram(com.android.billingclient.api.EnableBillingProgramParams)) to enab - Network accessline 87
- Added [`BillingFlowParams.Builder.enableDeveloperBillingOption`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.Builder#enableDeveloperBillingOption(com.android.billingclient.api.DeveloperBillingOp - Network accessline 87
- Added [`BillingFlowParams.Builder.enableDeveloperBillingOption`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.Builder#enableDeveloperBillingOption(com.android.billingclient.api.DeveloperBillingOp - Network accessline 99
- Fixed a bug in [`isBillingProgramAvailableAsync`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#isBillingProgramAvailableAsync(int,com.android.billingclient.api.BillingProgramAvailabilityListener)) an - Network accessline 99
- Fixed a bug in [`isBillingProgramAvailableAsync`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#isBillingProgramAvailableAsync(int,com.android.billingclient.api.BillingProgramAvailabilityListener)) an - Network accessline 107
- New APIs for [external content links](https://developer.android.com/google/play/billing/externalcontentlinks) and [external offers](https://developer.android.com/google/play/billing/external): - Network accessline 107
- New APIs for [external content links](https://developer.android.com/google/play/billing/externalcontentlinks) and [external offers](https://developer.android.com/google/play/billing/external): - Network accessline 109
- Added [`enableBillingProgram`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.Builder#enableBillingProgram(int)) to setup the `BillingClient` for these programs. - Network accessline 109
- Added [`enableBillingProgram`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.Builder#enableBillingProgram(int)) to setup the `BillingClient` for these programs. - Network accessline 110
- Added [`isBillingProgramAvailableAsync`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#isBillingProgramAvailableAsync(int,com.android.billingclient.api.BillingProgramAvailabilityListener)) to determin - Network accessline 110
- Added [`isBillingProgramAvailableAsync`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#isBillingProgramAvailableAsync(int,com.android.billingclient.api.BillingProgramAvailabilityListener)) to determin - Network accessline 111
- Added [`createBillingProgramReportingDetailsAsync`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#createBillingProgramReportingDetailsAsync(com.android.billingclient.api.BillingProgramReportingDetails - Network accessline 111
- Added [`createBillingProgramReportingDetailsAsync`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#createBillingProgramReportingDetailsAsync(com.android.billingclient.api.BillingProgramReportingDetails - Network accessline 112
- Added [`launchExternalLink`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#launchExternalLink(android.app.Activity,com.android.billingclient.api.LaunchExternalLinkParams,com.android.billingclient.api. - Network accessline 112
- Added [`launchExternalLink`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#launchExternalLink(android.app.Activity,com.android.billingclient.api.LaunchExternalLinkParams,com.android.billingclient.api. - Network accessline 113
- Changes to the [external offers program](https://developer.android.com/google/play/billing/external): - Network accessline 113
- Changes to the [external offers program](https://developer.android.com/google/play/billing/external): - Network accessline 115
- There are policy changes for the external offers program. See [program changes](https://support.google.com/googleplay/android-developer/answer/16505463) for details. To understand how to launch external offer flows with the new APIs, see - Network accessline 115
- There are policy changes for the external offers program. See [program changes](https://support.google.com/googleplay/android-developer/answer/16505463) for details. To understand how to launch external offer flows with the new APIs, see - Network accessline 116
- Deprecated the [`BillingClient.Builder.enableExternalOffer`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.Builder#enableExternalOffer()) API. - Network accessline 116
- Deprecated the [`BillingClient.Builder.enableExternalOffer`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.Builder#enableExternalOffer()) API. - Network accessline 117
- Deprecated the [`isExternalOfferAvailableAsync`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#isExternalOfferAvailableAsync(com.android.billingclient.api.ExternalOfferAvailabilityListener)) API. - Network accessline 117
- Deprecated the [`isExternalOfferAvailableAsync`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#isExternalOfferAvailableAsync(com.android.billingclient.api.ExternalOfferAvailabilityListener)) API. - Network accessline 118
- Deprecated the [`createExternalOfferReportingDetailsAsync`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#createExternalOfferReportingDetailsAsync(com.android.billingclient.api.ExternalOfferReportingD - Network accessline 118
- Deprecated the [`createExternalOfferReportingDetailsAsync`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#createExternalOfferReportingDetailsAsync(com.android.billingclient.api.ExternalOfferReportingD - Network accessline 119
- Deprecated the [`showExternalOfferInformationDialog`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#showExternalOfferInformationDialog(android.app.Activity,com.android.billingclient.api.ExternalOfferI - Network accessline 119
- Deprecated the [`showExternalOfferInformationDialog`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#showExternalOfferInformationDialog(android.app.Activity,com.android.billingclient.api.ExternalOfferI - Network accessline 129
A new parameter has been added to the [`BillingClient.queryPurchasesAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#queryPurchasesAsync(com.android.billingclient.api.QueryPurchasesParams,com.a - Network accessline 129
A new parameter has been added to the [`BillingClient.queryPurchasesAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#queryPurchasesAsync(com.android.billingclient.api.QueryPurchasesParams,com.a - Network accessline 130
[`BillingClient.queryPurchasesAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#queryPurchasesAsync(com.android.billingclient.api.QueryPurchasesParams,com.android.billingclient.api.PurchasesRespon - Network accessline 130
[`BillingClient.queryPurchasesAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#queryPurchasesAsync(com.android.billingclient.api.QueryPurchasesParams,com.android.billingclient.api.PurchasesRespon - Network accessline 136
The [`Purchase`](https://developer.android.com/reference/com/android/billingclient/api/Purchase) object returned in the listener will return `isSuspended() = true` - Network accessline 136
The [`Purchase`](https://developer.android.com/reference/com/android/billingclient/api/Purchase) object returned in the listener will return `isSuspended() = true` - Network accessline 137
for any suspended subscriptions. In this case, you shouldn't grant access to the purchased subscription, and instead guide the user to the [subscriptions center](https://play.google.com/store/account/subscriptions) - Network accessline 137
for any suspended subscriptions. In this case, you shouldn't grant access to the purchased subscription, and instead guide the user to the [subscriptions center](https://play.google.com/store/account/subscriptions) - Network accessline 138
to the purchased subscription, and instead guide the user to the [subscriptions center](https://play.google.com/store/account/subscriptions) where the user can manage their payment methods - Network accessline 138
to the purchased subscription, and instead guide the user to the [subscriptions center](https://play.google.com/store/account/subscriptions) where the user can manage their payment methods - Network accessline 139
[subscriptions center](https://play.google.com/store/account/subscriptions) - Network accessline 139
[subscriptions center](https://play.google.com/store/account/subscriptions) - Network accessline 140
where the user can manage their payment methods or pause state to re-activate their subscription. - Updates to [subscriptions](https://developer.android.com/google/play/billing/subscriptions): - Network accessline 140
where the user can manage their payment methods or pause state to re-activate their subscription. - Updates to [subscriptions](https://developer.android.com/google/play/billing/subscriptions): - Network accessline 142
- Updates to [subscriptions](https://developer.android.com/google/play/billing/subscriptions): - Network accessline 142
- Updates to [subscriptions](https://developer.android.com/google/play/billing/subscriptions): - Network accessline 144
- The [`BillingFlowParams.ProductDetailsParams`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.ProductDetailsParams) - Network accessline 144
- The [`BillingFlowParams.ProductDetailsParams`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.ProductDetailsParams) - Network accessline 151
- `setOldProductId`: The old product that needs to be replaced by the product in current [`ProductDetails`](https://developer.android.com/reference/com/android/billingclient/api/ProductDetails). - Network accessline 151
- `setOldProductId`: The old product that needs to be replaced by the product in current [`ProductDetails`](https://developer.android.com/reference/com/android/billingclient/api/ProductDetails). - Network accessline 152
- `setReplacementMode`: This is the item level replacement mode. The modes are essentially the same as SubscriptionUpdateParams, but the value mapping has been updated. A new replacement mode `KEEP_EXISTING` is introduced that lets you keep - Network accessline 152
- `setReplacementMode`: This is the item level replacement mode. The modes are essentially the same as SubscriptionUpdateParams, but the value mapping has been updated. A new replacement mode `KEEP_EXISTING` is introduced that lets you keep - Network accessline 153
- [SubscriptionUpdateParams setSubscriptionReplacementMode](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.SubscriptionUpdateParams.Builder#setSubscriptionReplacementMode(int)) will be - Network accessline 153
- [SubscriptionUpdateParams setSubscriptionReplacementMode](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.SubscriptionUpdateParams.Builder#setSubscriptionReplacementMode(int)) will be - Network accessline 159
- Enabled [pre-order APIs for one-time products](https://developer.android.com/google/play/billing/one-time-product-multi-purchase-options-offers#pre-order) - Network accessline 159
- Enabled [pre-order APIs for one-time products](https://developer.android.com/google/play/billing/one-time-product-multi-purchase-options-offers#pre-order) - Network accessline 161
The `ProductDetails.oneTimePurchaseOfferDetails.getPreorderDetails()` API that gets the pre-order details is now available for use. - Google Play Billing Library now supports [Kotlin version 2.2.0](https://kotlinlang.org/docs/whatsnew22.h - Network accessline 161
The `ProductDetails.oneTimePurchaseOfferDetails.getPreorderDetails()` API that gets the pre-order details is now available for use. - Google Play Billing Library now supports [Kotlin version 2.2.0](https://kotlinlang.org/docs/whatsnew22.h - Network accessline 163
- Google Play Billing Library now supports [Kotlin version 2.2.0](https://kotlinlang.org/docs/whatsnew22.html). - Network accessline 163
- Google Play Billing Library now supports [Kotlin version 2.2.0](https://kotlinlang.org/docs/whatsnew22.html). - Network accessline 177
products. This provides you flexibility in how you sell your products and reduces the complexity of managing them. - Improved the [`queryProductDetailsAsync()`](https://developer.android.com/reference/com/android/billingclient/api/Billing - Network accessline 177
products. This provides you flexibility in how you sell your products and reduces the complexity of managing them. - Improved the [`queryProductDetailsAsync()`](https://developer.android.com/reference/com/android/billingclient/api/Billing - Network accessline 179
- Improved the [`queryProductDetailsAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#queryProductDetailsAsync(com.android.billingclient.api.QueryProductDetailsParams,com.android.billingclient.api - Network accessline 179
- Improved the [`queryProductDetailsAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#queryProductDetailsAsync(com.android.billingclient.api.QueryProductDetailsParams,com.android.billingclient.api - Network accessline 181
Prior to PBL 8.0.0, the [`queryProductDetailsAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#queryProductDetailsAsync(com.android.billingclient.api.QueryProductDetailsParams,com.android.billingc - Network accessline 181
Prior to PBL 8.0.0, the [`queryProductDetailsAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#queryProductDetailsAsync(com.android.billingclient.api.QueryProductDetailsParams,com.android.billingc - Network accessline 185
that provides information about unfetched products. Note that there is a change in the signature of the [`ProductDetailsResponseListener.onProductDetailsResponse()`](https://developer.android.com/reference/com/android/billingclient/api/ - Network accessline 185
that provides information about unfetched products. Note that there is a change in the signature of the [`ProductDetailsResponseListener.onProductDetailsResponse()`](https://developer.android.com/reference/com/android/billingclient/api/ - Network accessline 186
change in the signature of the [`ProductDetailsResponseListener.onProductDetailsResponse()`](https://developer.android.com/reference/com/android/billingclient/api/ProductDetailsResponseListener#onProductDetailsResponse(com.android.billing - Network accessline 186
change in the signature of the [`ProductDetailsResponseListener.onProductDetailsResponse()`](https://developer.android.com/reference/com/android/billingclient/api/ProductDetailsResponseListener#onProductDetailsResponse(com.android.billing - Network accessline 187
[`ProductDetailsResponseListener.onProductDetailsResponse()`](https://developer.android.com/reference/com/android/billingclient/api/ProductDetailsResponseListener#onProductDetailsResponse(com.android.billingclient.api.BillingResult,com.andr - Network accessline 187
[`ProductDetailsResponseListener.onProductDetailsResponse()`](https://developer.android.com/reference/com/android/billingclient/api/ProductDetailsResponseListener#onProductDetailsResponse(com.android.billingclient.api.BillingResult,com.andr - Network accessline 188
requires changes in your app. For more information, see [process the result](https://developer.android.com/google/play/billing/integrate#process-the-result). - Automatic service reconnection. - Network accessline 188
requires changes in your app. For more information, see [process the result](https://developer.android.com/google/play/billing/integrate#process-the-result). - Automatic service reconnection. - Network accessline 189
result](https://developer.android.com/google/play/billing/integrate#process-the-result). - Network accessline 189
result](https://developer.android.com/google/play/billing/integrate#process-the-result). - Network accessline 195
the Play Billing Service automatically and eliminating the need to manually call `startConnection()` in the event of a service disconnection. For more information, see [Automatically Re-establish a Connection](https://developer.android. - Network accessline 195
the Play Billing Service automatically and eliminating the need to manually call `startConnection()` in the event of a service disconnection. For more information, see [Automatically Re-establish a Connection](https://developer.android. - Network accessline 196
call `startConnection()` in the event of a service disconnection. For more information, see [Automatically Re-establish a Connection](https://developer.android.com/google/play/billing/integrate#automatic-service-reconnection). - Sub-respo - Network accessline 196
call `startConnection()` in the event of a service disconnection. For more information, see [Automatically Re-establish a Connection](https://developer.android.com/google/play/billing/integrate#automatic-service-reconnection). - Sub-respo - Network accessline 197
For more information, see [Automatically Re-establish a Connection](https://developer.android.com/google/play/billing/integrate#automatic-service-reconnection). - Network accessline 197
For more information, see [Automatically Re-establish a Connection](https://developer.android.com/google/play/billing/integrate#automatic-service-reconnection). - Network accessline 198
- Sub-response codes for the [`launchBillingFlow()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#launchBillingFlow(android.app.Activity,com.android.billingclient.api.BillingFlowParams)) method. - Network accessline 198
- Sub-response codes for the [`launchBillingFlow()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#launchBillingFlow(android.app.Activity,com.android.billingclient.api.BillingFlowParams)) method. - Network accessline 200
The [BillingResult](https://developer.android.com/reference/com/android/billingclient/api/BillingResult) returned from [`launchBillingFlow()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#launchBilling - Network accessline 200
The [BillingResult](https://developer.android.com/reference/com/android/billingclient/api/BillingResult) returned from [`launchBillingFlow()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#launchBilling - Network accessline 209
The `queryPurchaseHistory()` method that was previously marked as deprecated has now been removed. See [Query Purchase History](https://developer.android.com/google/play/billing/query-purchase-history) for - Network accessline 209
The `queryPurchaseHistory()` method that was previously marked as deprecated has now been removed. See [Query Purchase History](https://developer.android.com/google/play/billing/query-purchase-history) for - Network accessline 210
deprecated has now been removed. See [Query Purchase History](https://developer.android.com/google/play/billing/query-purchase-history) for - Network accessline 210
deprecated has now been removed. See [Query Purchase History](https://developer.android.com/google/play/billing/query-purchase-history) for - Network accessline 214
The `querySkuDetailsAsync()` method that was previously marked as deprecated has now been removed. You should use [queryProductDetailsAsync](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#queryProductD - Network accessline 214
The `querySkuDetailsAsync()` method that was previously marked as deprecated has now been removed. You should use [queryProductDetailsAsync](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#queryProductD - Network accessline 215
has now been removed. You should use [queryProductDetailsAsync](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#queryProductDetailsAsync(com.android.billingclient.api.QueryProductDetailsParams,com.android - Network accessline 215
has now been removed. You should use [queryProductDetailsAsync](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#queryProductDetailsAsync(com.android.billingclient.api.QueryProductDetailsParams,com.android - Network accessline 221
the deprecated `enablePendingPurchases()` is functionally equivalent to `enablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build())`. - Removed the overloaded `queryPurchasesAsync()` method that takes a [s - Network accessline 221
the deprecated `enablePendingPurchases()` is functionally equivalent to `enablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build())`. - Removed the overloaded `queryPurchasesAsync()` method that takes a [s - Network accessline 223
- Removed the overloaded `queryPurchasesAsync()` method that takes a [skuType](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.SkuType). - Network accessline 223
- Removed the overloaded `queryPurchasesAsync()` method that takes a [skuType](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.SkuType). - Network accessline 227
deprecated has now been removed. Alternately, use [`queryPurchasesAsync(QueryPurchasesParams queryPurchasesParams, PurchasesResponseListener listener)`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient - Network accessline 227
deprecated has now been removed. Alternately, use [`queryPurchasesAsync(QueryPurchasesParams queryPurchasesParams, PurchasesResponseListener listener)`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient - Network accessline 229
PurchasesResponseListener listener)`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#queryPurchasesAsync(com.android.billingclient.api.QueryPurchasesParams,com.android.billingclient.api.PurchasesResponse - Network accessline 229
PurchasesResponseListener listener)`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#queryPurchasesAsync(com.android.billingclient.api.QueryPurchasesParams,com.android.billingclient.api.PurchasesResponse - Network accessline 238
- Fixed a bug in Play Billing Library 7.1.0 related to [testing `BillingResult` response codes](https://developer.android.com/google/play/billing/test-response-codes). - Network accessline 238
- Fixed a bug in Play Billing Library 7.1.0 related to [testing `BillingResult` response codes](https://developer.android.com/google/play/billing/test-response-codes). - Network accessline 239
`BillingResult` response codes](https://developer.android.com/google/play/billing/test-response-codes). - Network accessline 239
`BillingResult` response codes](https://developer.android.com/google/play/billing/test-response-codes). - Network accessline 248
- Improved thread safety related to connection status and management. - Introduced partial changes for testing [`BillingResult`](https://developer.android.com/reference/com/android/billingclient/api/BillingResult) response codes which is fu - Network accessline 248
- Improved thread safety related to connection status and management. - Introduced partial changes for testing [`BillingResult`](https://developer.android.com/reference/com/android/billingclient/api/BillingResult) response codes which is fu - Network accessline 249
- Introduced partial changes for testing [`BillingResult`](https://developer.android.com/reference/com/android/billingclient/api/BillingResult) response codes which is fully released in Play Billing Library 7.1.1. To test your integration u - Network accessline 249
- Introduced partial changes for testing [`BillingResult`](https://developer.android.com/reference/com/android/billingclient/api/BillingResult) response codes which is fully released in Play Billing Library 7.1.1. To test your integration u - Network accessline 250
response codes](https://developer.android.com/google/play/billing/test-response-codes). - Network accessline 250
response codes](https://developer.android.com/google/play/billing/test-response-codes). - Network accessline 261
- Added [`ProductDetails.InstallmentPlanDetails`](https://developer.android.com/reference/com/android/billingclient/api/ProductDetails.InstallmentPlanDetails) for installment base plans that users are eligible to purchase. This API helps yo - Network accessline 261
- Added [`ProductDetails.InstallmentPlanDetails`](https://developer.android.com/reference/com/android/billingclient/api/ProductDetails.InstallmentPlanDetails) for installment base plans that users are eligible to purchase. This API helps yo - Network accessline 262
- Added [`PendingPurchasesParams`](https://developer.android.com/reference/com/android/billingclient/api/PendingPurchasesParams) and - Network accessline 262
- Added [`PendingPurchasesParams`](https://developer.android.com/reference/com/android/billingclient/api/PendingPurchasesParams) and - Network accessline 263
[`BillingClient.Builder.enablePendingPurchases(PendingPurchaseParams)`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.Builder#enablePendingPurchases(com.android.billingclient.api.PendingPurchasesParams) - Network accessline 263
[`BillingClient.Builder.enablePendingPurchases(PendingPurchaseParams)`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.Builder#enablePendingPurchases(com.android.billingclient.api.PendingPurchasesParams) - Network accessline 264
to replace [`BillingClient.Builder.enablePendingPurchases()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.Builder#enablePendingPurchases()), which has been deprecated in this release. - Network accessline 264
to replace [`BillingClient.Builder.enablePendingPurchases()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.Builder#enablePendingPurchases()), which has been deprecated in this release. - Network accessline 265
[`BillingClient.Builder.enablePendingPurchases()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.Builder#enablePendingPurchases()), - Network accessline 265
[`BillingClient.Builder.enablePendingPurchases()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.Builder#enablePendingPurchases()), - Network accessline 271
- Use [`PendingPurchasesParams.Builder.enablePrepaidPlans()`](https://developer.android.com/reference/com/android/billingclient/api/PendingPurchasesParams.Builder#enablePrepaidPlans()) along with [`BillingClient.Builder.enablePendingPurchas - Network accessline 271
- Use [`PendingPurchasesParams.Builder.enablePrepaidPlans()`](https://developer.android.com/reference/com/android/billingclient/api/PendingPurchasesParams.Builder#enablePrepaidPlans()) along with [`BillingClient.Builder.enablePendingPurchas - Network accessline 272
guide](https://developer.android.com/google/play/billing/subscriptions#pending). - Network accessline 272
guide](https://developer.android.com/google/play/billing/subscriptions#pending). - Network accessline 273
- Added [`Purchase.PendingPurchaseUpdate`](https://developer.android.com/reference/com/android/billingclient/api/Purchase.PendingPurchaseUpdate) and [`Purchase.getPendingPurchaseUpdate()`](https://developer.android.com/reference/com/android - Network accessline 273
- Added [`Purchase.PendingPurchaseUpdate`](https://developer.android.com/reference/com/android/billingclient/api/Purchase.PendingPurchaseUpdate) and [`Purchase.getPendingPurchaseUpdate()`](https://developer.android.com/reference/com/android - Network accessline 274
- Removed [`BillingClient.Builder.enableAlternativeBilling()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.Builder#enableAlternativeBilling(com.android.billingclient.api.AlternativeBillingListener)) - Network accessline 274
- Removed [`BillingClient.Builder.enableAlternativeBilling()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.Builder#enableAlternativeBilling(com.android.billingclient.api.AlternativeBillingListener)) - Network accessline 275
[`BillingClient.Builder.enableAlternativeBilling()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.Builder#enableAlternativeBilling(com.android.billingclient.api.AlternativeBillingListener)), - Network accessline 275
[`BillingClient.Builder.enableAlternativeBilling()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.Builder#enableAlternativeBilling(com.android.billingclient.api.AlternativeBillingListener)), - Network accessline 276
[`AlternativeBillingListener`](https://developer.android.com/reference/com/android/billingclient/api/AlternativeBillingListener), and - Network accessline 276
[`AlternativeBillingListener`](https://developer.android.com/reference/com/android/billingclient/api/AlternativeBillingListener), and - Network accessline 277
[`AlternativeChoiceDetails`](https://developer.android.com/reference/com/android/billingclient/api/AlternativeChoiceDetails). - Network accessline 277
[`AlternativeChoiceDetails`](https://developer.android.com/reference/com/android/billingclient/api/AlternativeChoiceDetails). - Network accessline 279
- Developers should use [`BillingClient.Builder.enableUserChoiceBilling()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.Builder#enableUserChoiceBilling(com.android.billingclient.api.UserChoiceBillingL - Network accessline 279
- Developers should use [`BillingClient.Builder.enableUserChoiceBilling()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.Builder#enableUserChoiceBilling(com.android.billingclient.api.UserChoiceBillingL - Network accessline 280
- Removed [`BillingFlowParams.ProrationMode`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.ProrationMode), - Network accessline 280
- Removed [`BillingFlowParams.ProrationMode`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.ProrationMode), - Network accessline 281
[`BillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceProrationMode()`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.SubscriptionUpdateParams.Builder#setReplaceProrationMode(int)), - Network accessline 281
[`BillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceProrationMode()`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.SubscriptionUpdateParams.Builder#setReplaceProrationMode(int)), - Network accessline 283
[`BillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceSkusProrationMode()`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.SubscriptionUpdateParams.Builder#setReplaceSkusProrationMode(int)). - Network accessline 283
[`BillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceSkusProrationMode()`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.SubscriptionUpdateParams.Builder#setReplaceSkusProrationMode(int)). - Network accessline 285
- Developers should use [`BillingFlowParams.SubscriptionUpdateParams.ReplacementMode`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.SubscriptionUpdateParams.ReplacementMode) with [`BillingFlowParam - Network accessline 285
- Developers should use [`BillingFlowParams.SubscriptionUpdateParams.ReplacementMode`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.SubscriptionUpdateParams.ReplacementMode) with [`BillingFlowParam - Network accessline 287
[`BillingFlowParams.SubscriptionUpdateParams.Builder#setOldSkuPurchaseToken()`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.SubscriptionUpdateParams.Builder#setOldSkuPurchaseToken(java.lang.String - Network accessline 287
[`BillingFlowParams.SubscriptionUpdateParams.Builder#setOldSkuPurchaseToken()`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.SubscriptionUpdateParams.Builder#setOldSkuPurchaseToken(java.lang.String - Network accessline 289
- Developers should use [`BillingFlowParams.SubscriptionUpdateParams.Builder#setOldPurchaseToken(java.lang.String)`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.SubscriptionUpdateParams.Builder#se - Network accessline 289
- Developers should use [`BillingFlowParams.SubscriptionUpdateParams.Builder#setOldPurchaseToken(java.lang.String)`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.SubscriptionUpdateParams.Builder#se - Network accessline 290
- [`BillingClient.queryPurchaseHistoryAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#queryPurchaseHistoryAsync(com.android.billingclient.api.QueryPurchaseHistoryParams,com.android.billingclient - Network accessline 290
- [`BillingClient.queryPurchaseHistoryAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#queryPurchaseHistoryAsync(com.android.billingclient.api.QueryPurchaseHistoryParams,com.android.billingclient - Network accessline 294
- Acknowledged and pending purchases: Use [`BillingClient.queryPurchasesAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#queryPurchasesAsync(com.android.billingclient.api.QueryPurchasesParams,%20 - Network accessline 294
- Acknowledged and pending purchases: Use [`BillingClient.queryPurchasesAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#queryPurchasesAsync(com.android.billingclient.api.QueryPurchasesParams,%20 - Network accessline 295
- Consumed purchases: Developers should keep track of consumed purchases on their own servers. - Canceled purchases: Use the [voided-purchases](https://developers.google.com/android-publisher/voided-purchases) developer API. - For more - Network accessline 295
- Consumed purchases: Developers should keep track of consumed purchases on their own servers. - Canceled purchases: Use the [voided-purchases](https://developers.google.com/android-publisher/voided-purchases) developer API. - For more - Network accessline 296
- Canceled purchases: Use the [voided-purchases](https://developers.google.com/android-publisher/voided-purchases) developer API. - Network accessline 296
- Canceled purchases: Use the [voided-purchases](https://developers.google.com/android-publisher/voided-purchases) developer API. - Network accessline 297
- For more details, see [Query Purchase History](https://developer.android.com/google/play/billing/query-purchase-history) - Network accessline 297
- For more details, see [Query Purchase History](https://developer.android.com/google/play/billing/query-purchase-history) - Network accessline 298
- [`BillingFlowParams.ProductDetailsParams.setOfferToken()`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.ProductDetailsParams.Builder#setOfferToken(java.lang.String)) - Network accessline 298
- [`BillingFlowParams.ProductDetailsParams.setOfferToken()`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.ProductDetailsParams.Builder#setOfferToken(java.lang.String)) - Network accessline 310
- Fixed a bug in [`BillingClient.showAlternativeBillingOnlyInformationDialog()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#showAlternativeBillingOnlyInformationDialog(android.app.Activity,%20com.and - Network accessline 310
- Fixed a bug in [`BillingClient.showAlternativeBillingOnlyInformationDialog()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#showAlternativeBillingOnlyInformationDialog(android.app.Activity,%20com.and - Network accessline 319
- Added APIs to support [external offers](https://developer.android.com/google/play/billing/external) - Network accessline 319
- Added APIs to support [external offers](https://developer.android.com/google/play/billing/external) - Network accessline 320
- Added [`BillingClient.Builder.enableExternalOffer()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.Builder#enableExternalOffer()) to enable the ability to provide external offers. - Network accessline 320
- Added [`BillingClient.Builder.enableExternalOffer()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.Builder#enableExternalOffer()) to enable the ability to provide external offers. - Network accessline 321
- Added [`BillingClient.isExternalOfferAvailableAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#isExternalOfferAvailableAsync(com.android.billingclient.api.ExternalOfferAvailabilityListener)) to - Network accessline 321
- Added [`BillingClient.isExternalOfferAvailableAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#isExternalOfferAvailableAsync(com.android.billingclient.api.ExternalOfferAvailabilityListener)) to - Network accessline 322
- Added [`BillingClient.showExternalOfferInformationDialog()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#showExternalOfferInformationDialog(android.app.Activity,%20com.android.billingclient.api.Exte - Network accessline 322
- Added [`BillingClient.showExternalOfferInformationDialog()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#showExternalOfferInformationDialog(android.app.Activity,%20com.android.billingclient.api.Exte - Network accessline 323
- Added [`BillingClient.createExternalOfferReportingDetailsAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#createExternalOfferReportingDetailsAsync(com.android.billingclient.api.ExternalOfferRep - Network accessline 323
- Added [`BillingClient.createExternalOfferReportingDetailsAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#createExternalOfferReportingDetailsAsync(com.android.billingclient.api.ExternalOfferRep - Network accessline 332
- Added APIs to support [alternative billing only (i.e. without user choice)](https://developer.android.com/google/play/billing/alternative) - Network accessline 332
- Added APIs to support [alternative billing only (i.e. without user choice)](https://developer.android.com/google/play/billing/alternative) - Network accessline 333
- Added [`BillingClient.Builder.enableAlternativeBillingOnly()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.Builder#enableAlternativeBillingOnly()) to functionally enable the ability to offer alterna - Network accessline 333
- Added [`BillingClient.Builder.enableAlternativeBillingOnly()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.Builder#enableAlternativeBillingOnly()) to functionally enable the ability to offer alterna - Network accessline 334
- Added [`BillingClient.isAlternativeBillingOnlyAvailableAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#isAlternativeBillingOnlyAvailableAsync(com.android.billingclient.api.AlternativeBillingOn - Network accessline 334
- Added [`BillingClient.isAlternativeBillingOnlyAvailableAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#isAlternativeBillingOnlyAvailableAsync(com.android.billingclient.api.AlternativeBillingOn - Network accessline 335
- Added [`BillingClient.showAlternativeBillingOnlyInformationDialog()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#showAlternativeBillingOnlyInformationDialog(android.app.Activity,%20com.android.bill - Network accessline 335
- Added [`BillingClient.showAlternativeBillingOnlyInformationDialog()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#showAlternativeBillingOnlyInformationDialog(android.app.Activity,%20com.android.bill - Network accessline 336
- Added [`BillingClient.createAlternativeBillingOnlyReportingDetailsAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#createAlternativeBillingOnlyReportingDetailsAsync(com.android.billingclient.ap - Network accessline 336
- Added [`BillingClient.createAlternativeBillingOnlyReportingDetailsAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#createAlternativeBillingOnlyReportingDetailsAsync(com.android.billingclient.ap - Network accessline 337
- Updated the user choice billing APIs - Added [`UserChoiceBillingListener`](https://developer.android.com/reference/com/android/billingclient/api/UserChoiceBillingListener) to replace [AlternativeBillingListener](https://developer.androi - Network accessline 337
- Updated the user choice billing APIs - Added [`UserChoiceBillingListener`](https://developer.android.com/reference/com/android/billingclient/api/UserChoiceBillingListener) to replace [AlternativeBillingListener](https://developer.androi - Network accessline 338
- Added [`UserChoiceBillingListener`](https://developer.android.com/reference/com/android/billingclient/api/UserChoiceBillingListener) to replace [AlternativeBillingListener](https://developer.android.com/reference/com/android/billingclient - Network accessline 338
- Added [`UserChoiceBillingListener`](https://developer.android.com/reference/com/android/billingclient/api/UserChoiceBillingListener) to replace [AlternativeBillingListener](https://developer.android.com/reference/com/android/billingclient - Network accessline 339
- Added [`UserChoiceDetails`](https://developer.android.com/reference/com/android/billingclient/api/UserChoiceDetails) to replace [`AlternativeChoiceDetails`](https://developer.android.com/reference/com/android/billingclient/api/Alternative - Network accessline 339
- Added [`UserChoiceDetails`](https://developer.android.com/reference/com/android/billingclient/api/UserChoiceDetails) to replace [`AlternativeChoiceDetails`](https://developer.android.com/reference/com/android/billingclient/api/Alternative - Network accessline 340
- Added [`BillingClient.Builder.enableUserChoiceBilling()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.Builder#enableUserChoiceBilling(com.android.billingclient.api.UserChoiceBillingListener)) to rep - Network accessline 340
- Added [`BillingClient.Builder.enableUserChoiceBilling()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.Builder#enableUserChoiceBilling(com.android.billingclient.api.UserChoiceBillingListener)) to rep - Network accessline 341
- Added [`BillingClient.getBillingConfigAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#getBillingConfigAsync(com.android.billingclient.api.GetBillingConfigParams,%20com.android.billingclient.ap - Network accessline 341
- Added [`BillingClient.getBillingConfigAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#getBillingConfigAsync(com.android.billingclient.api.GetBillingConfigParams,%20com.android.billingclient.ap - Network accessline 359
- Added new [`ReplacementMode`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.SubscriptionUpdateParams.ReplacementMode) - Network accessline 359
- Added new [`ReplacementMode`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.SubscriptionUpdateParams.ReplacementMode) - Network accessline 361
[`ProrationMode`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.ProrationMode). - Network accessline 361
[`ProrationMode`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.ProrationMode). - Network accessline 363
Note that `ProrationMode` is still available for backward compatibility reasons. - Removed order ID for [`PENDING`](https://developer.android.com/reference/com/android/billingclient/api/Purchase.PurchaseState#PENDING()) - Network accessline 363
Note that `ProrationMode` is still available for backward compatibility reasons. - Removed order ID for [`PENDING`](https://developer.android.com/reference/com/android/billingclient/api/Purchase.PurchaseState#PENDING()) - Network accessline 364
reasons. - Removed order ID for [`PENDING`](https://developer.android.com/reference/com/android/billingclient/api/Purchase.PurchaseState#PENDING()) purchases. - Network accessline 364
reasons. - Removed order ID for [`PENDING`](https://developer.android.com/reference/com/android/billingclient/api/Purchase.PurchaseState#PENDING()) purchases. - Network accessline 365
- Removed order ID for [`PENDING`](https://developer.android.com/reference/com/android/billingclient/api/Purchase.PurchaseState#PENDING()) - Network accessline 365
- Removed order ID for [`PENDING`](https://developer.android.com/reference/com/android/billingclient/api/Purchase.PurchaseState#PENDING()) - Network accessline 370
pending purchases, and for these purchases, the order ID will be populated after the purchase is moved to the [`PURCHASED`](https://developer.android.com/reference/com/android/billingclient/api/Purchase.PurchaseState#PURCHASED()) - Network accessline 370
pending purchases, and for these purchases, the order ID will be populated after the purchase is moved to the [`PURCHASED`](https://developer.android.com/reference/com/android/billingclient/api/Purchase.PurchaseState#PURCHASED()) - Network accessline 371
after the purchase is moved to the [`PURCHASED`](https://developer.android.com/reference/com/android/billingclient/api/Purchase.PurchaseState#PURCHASED()) state. - Network accessline 371
after the purchase is moved to the [`PURCHASED`](https://developer.android.com/reference/com/android/billingclient/api/Purchase.PurchaseState#PURCHASED()) state. - Network accessline 372
[`PURCHASED`](https://developer.android.com/reference/com/android/billingclient/api/Purchase.PurchaseState#PURCHASED()) - Network accessline 372
[`PURCHASED`](https://developer.android.com/reference/com/android/billingclient/api/Purchase.PurchaseState#PURCHASED()) - Network accessline 377
previously been marked as deprecated have now been removed in Play Billing Library 6.0.0. Developers should use [`queryPurchasesAsync`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#queryPurchasesAs - Network accessline 377
previously been marked as deprecated have now been removed in Play Billing Library 6.0.0. Developers should use [`queryPurchasesAsync`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#queryPurchasesAs - Network accessline 378
Library 6.0.0. Developers should use [`queryPurchasesAsync`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#queryPurchasesAsync(com.android.billingclient.api.QueryPurchasesParams,%20com.android.billing - Network accessline 378
Library 6.0.0. Developers should use [`queryPurchasesAsync`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#queryPurchasesAsync(com.android.billingclient.api.QueryPurchasesParams,%20com.android.billing - Network accessline 379
[`queryPurchasesAsync`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#queryPurchasesAsync(com.android.billingclient.api.QueryPurchasesParams,%20com.android.billingclient.api.PurchasesResponseListener)) - Network accessline 379
[`queryPurchasesAsync`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#queryPurchasesAsync(com.android.billingclient.api.QueryPurchasesParams,%20com.android.billingclient.api.PurchasesResponseListener)) - Network accessline 380
instead of `queryPurchases`. For `launchPriceConfirmationFlow` alternatives, see [Price changes](https://developer.android.com/google/play/billing/price-changes). - Added new network error response code. - Network accessline 380
instead of `queryPurchases`. For `launchPriceConfirmationFlow` alternatives, see [Price changes](https://developer.android.com/google/play/billing/price-changes). - Added new network error response code. - Network accessline 381
see [Price changes](https://developer.android.com/google/play/billing/price-changes). - Network accessline 381
see [Price changes](https://developer.android.com/google/play/billing/price-changes). - Network accessline 384
A new network error response code, [`NETWORK_ERROR`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.BillingResponseCode#NETWORK_ERROR()), - Network accessline 384
A new network error response code, [`NETWORK_ERROR`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.BillingResponseCode#NETWORK_ERROR()), - Network accessline 385
[`NETWORK_ERROR`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.BillingResponseCode#NETWORK_ERROR()), - Network accessline 385
[`NETWORK_ERROR`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.BillingResponseCode#NETWORK_ERROR()), - Network accessline 387
an error occurs due to a network connection issue. These network connection errors were previously reported as `SERVICE_UNAVAILABLE`. - Updated [`SERVICE_UNAVAILABLE`](https://developer.android.com/reference/com/android/billingclient/api/ - Network accessline 387
an error occurs due to a network connection issue. These network connection errors were previously reported as `SERVICE_UNAVAILABLE`. - Updated [`SERVICE_UNAVAILABLE`](https://developer.android.com/reference/com/android/billingclient/api/ - Network accessline 388
errors were previously reported as `SERVICE_UNAVAILABLE`. - Updated [`SERVICE_UNAVAILABLE`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.BillingResponseCode#SERVICE_UNAVAILABLE()) and - Network accessline 388
errors were previously reported as `SERVICE_UNAVAILABLE`. - Updated [`SERVICE_UNAVAILABLE`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.BillingResponseCode#SERVICE_UNAVAILABLE()) and - Network accessline 389
- Updated [`SERVICE_UNAVAILABLE`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.BillingResponseCode#SERVICE_UNAVAILABLE()) - Network accessline 389
- Updated [`SERVICE_UNAVAILABLE`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.BillingResponseCode#SERVICE_UNAVAILABLE()) - Network accessline 391
[`SERVICE_TIMEOUT`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.BillingResponseCode#SERVICE_TIMEOUT()). - Network accessline 391
[`SERVICE_TIMEOUT`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.BillingResponseCode#SERVICE_TIMEOUT()). - Network accessline 396
The behavior does not change in earlier versions of PBL. - Removed [`SERVICE_TIMEOUT`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.BillingResponseCode#SERVICE_TIMEOUT()). - Network accessline 396
The behavior does not change in earlier versions of PBL. - Removed [`SERVICE_TIMEOUT`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.BillingResponseCode#SERVICE_TIMEOUT()). - Network accessline 398
[`SERVICE_TIMEOUT`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.BillingResponseCode#SERVICE_TIMEOUT()). - Network accessline 398
[`SERVICE_TIMEOUT`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.BillingResponseCode#SERVICE_TIMEOUT()). - Network accessline 425
- Added classes to support alternative billing flows on mobile/tablet for users in South Korea: - [`AlternativeBillingListener`](https://developer.android.com/reference/com/android/billingclient/api/AlternativeBillingListener) - Network accessline 425
- Added classes to support alternative billing flows on mobile/tablet for users in South Korea: - [`AlternativeBillingListener`](https://developer.android.com/reference/com/android/billingclient/api/AlternativeBillingListener) - Network accessline 426
- [`AlternativeBillingListener`](https://developer.android.com/reference/com/android/billingclient/api/AlternativeBillingListener) - Network accessline 426
- [`AlternativeBillingListener`](https://developer.android.com/reference/com/android/billingclient/api/AlternativeBillingListener) - Network accessline 427
- [`AlternativeChoiceDetails`](https://developer.android.com/reference/com/android/billingclient/api/AlternativeChoiceDetails) - Network accessline 427
- [`AlternativeChoiceDetails`](https://developer.android.com/reference/com/android/billingclient/api/AlternativeChoiceDetails) - Network accessline 428
- [`AlternativeChoiceDetails.Product`](https://developer.android.com/reference/com/android/billingclient/api/AlternativeChoiceDetails.Product) - Network accessline 428
- [`AlternativeChoiceDetails.Product`](https://developer.android.com/reference/com/android/billingclient/api/AlternativeChoiceDetails.Product) - Network accessline 429
- Added [`BillingFlowParams.SubscriptionUpdateParams.Builder.setOriginalExternalTransactionId()`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.SubscriptionUpdateParams.Builder#setOriginalExternalTr - Network accessline 429
- Added [`BillingFlowParams.SubscriptionUpdateParams.Builder.setOriginalExternalTransactionId()`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.SubscriptionUpdateParams.Builder#setOriginalExternalTr - Network accessline 430
- Added [`BillingClient.Builder.enableAlternativeBilling()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.Builder#enableAlternativeBilling(com.android.billingclient.api.AlternativeBillingListener)) met - Network accessline 430
- Added [`BillingClient.Builder.enableAlternativeBilling()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.Builder#enableAlternativeBilling(com.android.billingclient.api.AlternativeBillingListener)) met - Network accessline 441
- Added [`ProductDetails.SubscriptionOfferDetails.getOfferId()`](https://developer.android.com/reference/com/android/billingclient/api/ProductDetails.SubscriptionOfferDetails#getOfferId()) method to retrieve the offer ID. - Network accessline 441
- Added [`ProductDetails.SubscriptionOfferDetails.getOfferId()`](https://developer.android.com/reference/com/android/billingclient/api/ProductDetails.SubscriptionOfferDetails#getOfferId()) method to retrieve the offer ID. - Network accessline 442
- Added [`ProductDetails.SubscriptionOfferDetails.getBasePlanId()`](https://developer.android.com/reference/com/android/billingclient/api/ProductDetails.SubscriptionOfferDetails#getBasePlanId()) method to retrieve the base plan ID. - Network accessline 442
- Added [`ProductDetails.SubscriptionOfferDetails.getBasePlanId()`](https://developer.android.com/reference/com/android/billingclient/api/ProductDetails.SubscriptionOfferDetails#getBasePlanId()) method to retrieve the base plan ID. - Network accessline 454
- Introduced a new model for subscriptions, including new entities that enable you to create multiple offers for a single subscription product. For more information, see the [migration guide](https://developer.android.com/google/play/billin - Network accessline 454
- Introduced a new model for subscriptions, including new entities that enable you to create multiple offers for a single subscription product. For more information, see the [migration guide](https://developer.android.com/google/play/billin - Network accessline 455
- Added [`BillingClient.queryProductDetailsAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#queryProductDetailsAsync(com.android.billingclient.api.QueryProductDetailsParams,%20com.android.billing - Network accessline 455
- Added [`BillingClient.queryProductDetailsAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#queryProductDetailsAsync(com.android.billingclient.api.QueryProductDetailsParams,%20com.android.billing - Network accessline 456
- Added `setIsOfferPersonalized()` method for EU personalized pricing disclosure requirements. To learn more about how to use this method, see [Indicate a personalized price](https://developer.android.com/google/play/billing/integrate#per - Network accessline 456
- Added `setIsOfferPersonalized()` method for EU personalized pricing disclosure requirements. To learn more about how to use this method, see [Indicate a personalized price](https://developer.android.com/google/play/billing/integrate#per - Network accessline 457
price](https://developer.android.com/google/play/billing/integrate#personalized-price). - Network accessline 457
price](https://developer.android.com/google/play/billing/integrate#personalized-price). - Network accessline 458
- Removed `queryPurchases()`, which was previously deprecated and replaced by queryPurchasesAsync introduced in Google Play Billing Library 4.0.0. - `launchPriceChangeFlow` has been deprecated and will be removed in a future release. To lea - Network accessline 458
- Removed `queryPurchases()`, which was previously deprecated and replaced by queryPurchasesAsync introduced in Google Play Billing Library 4.0.0. - `launchPriceChangeFlow` has been deprecated and will be removed in a future release. To lea - Network accessline 459
- `launchPriceChangeFlow` has been deprecated and will be removed in a future release. To learn more about alternatives, see [Launch a price change confirmation flow](https://developer.android.com/google/play/billing/price-changes). - Rem - Network accessline 459
- `launchPriceChangeFlow` has been deprecated and will be removed in a future release. To learn more about alternatives, see [Launch a price change confirmation flow](https://developer.android.com/google/play/billing/price-changes). - Rem - Network accessline 460
confirmation flow](https://developer.android.com/google/play/billing/price-changes). - Network accessline 460
confirmation flow](https://developer.android.com/google/play/billing/price-changes). - Network accessline 461
- Removed [`setVrPurchaseFlow()`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.Builder#setVrPurchaseFlow(boolean)), which was previously used when instantiating a purchase flow. In previous version - Network accessline 461
- Removed [`setVrPurchaseFlow()`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.Builder#setVrPurchaseFlow(boolean)), which was previously used when instantiating a purchase flow. In previous version - Network accessline 472
- Added [`BillingClient.showInAppMessages()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#showInAppMessages(android.app.Activity,%20com.android.billingclient.api.InAppMessageParams,%20com.android.bill - Network accessline 472
- Added [`BillingClient.showInAppMessages()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#showInAppMessages(android.app.Activity,%20com.android.billingclient.api.InAppMessageParams,%20com.android.bill - Network accessline 473
declines](https://developer.android.com/google/play/billing/subscriptions#payment-declines). - Network accessline 473
declines](https://developer.android.com/google/play/billing/subscriptions#payment-declines). - Network accessline 482
- Added [`BillingClient.queryPurchasesAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#queryPurchasesAsync(java.lang.String,%20com.android.billingclient.api.PurchasesResponseListener)) - Network accessline 482
- Added [`BillingClient.queryPurchasesAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#queryPurchasesAsync(java.lang.String,%20com.android.billingclient.api.PurchasesResponseListener)) - Network accessline 483
[`BillingClient.queryPurchasesAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#queryPurchasesAsync(java.lang.String,%20com.android.billingclient.api.PurchasesResponseListener)) - Network accessline 483
[`BillingClient.queryPurchasesAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#queryPurchasesAsync(java.lang.String,%20com.android.billingclient.api.PurchasesResponseListener)) - Network accessline 484
to replace [`BillingClient.queryPurchases()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#queryPurchases(java.lang.String)) which will be removed in a future release. - Network accessline 484
to replace [`BillingClient.queryPurchases()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#queryPurchases(java.lang.String)) which will be removed in a future release. - Network accessline 485
[`BillingClient.queryPurchases()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#queryPurchases(java.lang.String)) - Network accessline 485
[`BillingClient.queryPurchases()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#queryPurchases(java.lang.String)) - Network accessline 488
- Added new subscription replacement mode [`IMMEDIATE_AND_CHARGE_FULL_PRICE`](https://developer.android.com/google/play/billing/subscriptions#replacement-modes). - Network accessline 488
- Added new subscription replacement mode [`IMMEDIATE_AND_CHARGE_FULL_PRICE`](https://developer.android.com/google/play/billing/subscriptions#replacement-modes). - Network accessline 489
[`IMMEDIATE_AND_CHARGE_FULL_PRICE`](https://developer.android.com/google/play/billing/subscriptions#replacement-modes). - Network accessline 489
[`IMMEDIATE_AND_CHARGE_FULL_PRICE`](https://developer.android.com/google/play/billing/subscriptions#replacement-modes). - Network accessline 491
- Added [`BillingClient.getConnectionState()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#getConnectionState()) - Network accessline 491
- Added [`BillingClient.getConnectionState()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#getConnectionState()) - Network accessline 492
[`BillingClient.getConnectionState()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#getConnectionState()) - Network accessline 492
[`BillingClient.getConnectionState()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#getConnectionState()) - Network accessline 498
- Added [`BillingFlowParams.Builder.setSubscriptionUpdateParams()`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.Builder#setSubscriptionUpdateParams(com.android.billingclient.api.BillingFlowParam - Network accessline 498
- Added [`BillingFlowParams.Builder.setSubscriptionUpdateParams()`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.Builder#setSubscriptionUpdateParams(com.android.billingclient.api.BillingFlowParam - Network accessline 499
[`BillingFlowParams.Builder.setSubscriptionUpdateParams()`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.Builder#setSubscriptionUpdateParams(com.android.billingclient.api.BillingFlowParams.Subscrip - Network accessline 499
[`BillingFlowParams.Builder.setSubscriptionUpdateParams()`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.Builder#setSubscriptionUpdateParams(com.android.billingclient.api.BillingFlowParams.Subscrip - Network accessline 506
- Added [`Purchase.getQuantity()`](https://developer.android.com/reference/com/android/billingclient/api/Purchase#getQuantity()) - Network accessline 506
- Added [`Purchase.getQuantity()`](https://developer.android.com/reference/com/android/billingclient/api/Purchase#getQuantity()) - Network accessline 507
[`Purchase.getQuantity()`](https://developer.android.com/reference/com/android/billingclient/api/Purchase#getQuantity()) - Network accessline 507
[`Purchase.getQuantity()`](https://developer.android.com/reference/com/android/billingclient/api/Purchase#getQuantity()) - Network accessline 509
[`PurchaseHistoryRecord.getQuantity()`](https://developer.android.com/reference/com/android/billingclient/api/PurchaseHistoryRecord#getQuantity()). - Network accessline 509
[`PurchaseHistoryRecord.getQuantity()`](https://developer.android.com/reference/com/android/billingclient/api/PurchaseHistoryRecord#getQuantity()). - Network accessline 511
- Added [`Purchase#getSkus()`](https://developer.android.com/reference/com/android/billingclient/api/Purchase#getSkus()) - Network accessline 511
- Added [`Purchase#getSkus()`](https://developer.android.com/reference/com/android/billingclient/api/Purchase#getSkus()) - Network accessline 512
[`Purchase#getSkus()`](https://developer.android.com/reference/com/android/billingclient/api/Purchase#getSkus()) - Network accessline 512
[`Purchase#getSkus()`](https://developer.android.com/reference/com/android/billingclient/api/Purchase#getSkus()) - Network accessline 513
and [`PurchaseHistoryRecord#getSkus()`](https://developer.android.com/reference/com/android/billingclient/api/PurchaseHistoryRecord#getSkus()). These replace `Purchase#getSku` and `PurchaseHistoryRecord#getSku` which - Network accessline 513
and [`PurchaseHistoryRecord#getSkus()`](https://developer.android.com/reference/com/android/billingclient/api/PurchaseHistoryRecord#getSkus()). These replace `Purchase#getSku` and `PurchaseHistoryRecord#getSku` which - Network accessline 514
[`PurchaseHistoryRecord#getSkus()`](https://developer.android.com/reference/com/android/billingclient/api/PurchaseHistoryRecord#getSkus()). - Network accessline 514
[`PurchaseHistoryRecord#getSkus()`](https://developer.android.com/reference/com/android/billingclient/api/PurchaseHistoryRecord#getSkus()). - Network accessline 528
- Fix memory leak when [`endConnection()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#endConnection()) is called. - Network accessline 528
- Fix memory leak when [`endConnection()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#endConnection()) is called. - Network accessline 529
- Fix issue when the Google Play Billing Library is used by apps which use the single task launch mode. A [`onPurchasesUpdated()`](https://developer.android.com/reference/com/android/billingclient/api/PurchasesUpdatedListener#onpurchasesupd - Network accessline 529
- Fix issue when the Google Play Billing Library is used by apps which use the single task launch mode. A [`onPurchasesUpdated()`](https://developer.android.com/reference/com/android/billingclient/api/PurchasesUpdatedListener#onpurchasesupd - Network accessline 570
- [`SkuDetails.getIntroductoryPriceCycles()`](https://developer.android.com/reference/com/android/billingclient/api/SkuDetails#getIntroductoryPriceCycles()) now returns `int` instead of `String`. - Network accessline 570
- [`SkuDetails.getIntroductoryPriceCycles()`](https://developer.android.com/reference/com/android/billingclient/api/SkuDetails#getIntroductoryPriceCycles()) now returns `int` instead of `String`. - Network accessline 586
of this update, the developer payload functionality has been deprecated and will be removed in a future release. For more information, including recommended alternatives, see [Developer payload](https://developer.android.com/google/play/bil - Network accessline 586
of this update, the developer payload functionality has been deprecated and will be removed in a future release. For more information, including recommended alternatives, see [Developer payload](https://developer.android.com/google/play/bil - Network accessline 588
alternatives, see [Developer payload](https://developer.android.com/google/play/billing/developer-payload). - Network accessline 588
alternatives, see [Developer payload](https://developer.android.com/google/play/billing/developer-payload). - Network accessline 598
To learn more, see [Use Google Play Billing with Unity](https://developer.android.com/google/play/billing/unity). - Network accessline 598
To learn more, see [Use Google Play Billing with Unity](https://developer.android.com/google/play/billing/unity). - Network accessline 599
Unity](https://developer.android.com/google/play/billing/unity). - Network accessline 599
Unity](https://developer.android.com/google/play/billing/unity). - Network accessline 603
- Java Google Play Billing Library - In [`AcknowledgePurchaseParams`](https://developer.android.com/reference/com/android/billingclient/api/AcknowledgePurchaseParams), deprecated [`setDeveloperPayload()`](https://developer.android.com/ref - Network accessline 603
- Java Google Play Billing Library - In [`AcknowledgePurchaseParams`](https://developer.android.com/reference/com/android/billingclient/api/AcknowledgePurchaseParams), deprecated [`setDeveloperPayload()`](https://developer.android.com/ref - Network accessline 604
- In [`AcknowledgePurchaseParams`](https://developer.android.com/reference/com/android/billingclient/api/AcknowledgePurchaseParams), deprecated [`setDeveloperPayload()`](https://developer.android.com/reference/com/android/billingclient/api/ - Network accessline 604
- In [`AcknowledgePurchaseParams`](https://developer.android.com/reference/com/android/billingclient/api/AcknowledgePurchaseParams), deprecated [`setDeveloperPayload()`](https://developer.android.com/reference/com/android/billingclient/api/ - Network accessline 605
- In [`ConsumeParams`](https://developer.android.com/reference/com/android/billingclient/api/ConsumeParams), deprecated [`setDeveloperPayload()`](https://developer.android.com/reference/com/android/billingclient/api/ConsumeParams.Builder#se - Network accessline 605
- In [`ConsumeParams`](https://developer.android.com/reference/com/android/billingclient/api/ConsumeParams), deprecated [`setDeveloperPayload()`](https://developer.android.com/reference/com/android/billingclient/api/ConsumeParams.Builder#se - Network accessline 606
- In [`BillingFlowParams`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.Builder), renamed [`setAccountId()`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams. - Network accessline 606
- In [`BillingFlowParams`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.Builder), renamed [`setAccountId()`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams. - Network accessline 607
- In `BillingFlowParams`, added [`setObfuscatedProfileId()`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.Builder#setobfuscatedprofileid) which works similarly to [`setObfuscatedAccountId()`](https - Network accessline 607
- In `BillingFlowParams`, added [`setObfuscatedProfileId()`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.Builder#setobfuscatedprofileid) which works similarly to [`setObfuscatedAccountId()`](https - Network accessline 608
alternatives](https://developer.android.com/google/play/billing/developer-payload). - Network accessline 608
alternatives](https://developer.android.com/google/play/billing/developer-payload). - Network accessline 609
- In [`Purchase`](https://developer.android.com/reference/com/android/billingclient/api/Purchase), added the [`getAccountIdentifiers()`](https://developer.android.com/reference/com/android/billingclient/api/Purchase#getAccountIdentifiers()) - Network accessline 609
- In [`Purchase`](https://developer.android.com/reference/com/android/billingclient/api/Purchase), added the [`getAccountIdentifiers()`](https://developer.android.com/reference/com/android/billingclient/api/Purchase#getAccountIdentifiers()) - Network accessline 610
- In [`BillingClient`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient), the [`loadRewardedSku()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#loadRewardedSku(com.a - Network accessline 610
- In [`BillingClient`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient), the [`loadRewardedSku()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#loadRewardedSku(com.a - Network accessline 616
API alternatives for Kotlin consumption, featuring better null-safety and coroutines. For code examples, see [Use the Google Play Billing Library](https://developer.android.com/google/play/billing/billing_library_overview). - Network accessline 616
API alternatives for Kotlin consumption, featuring better null-safety and coroutines. For code examples, see [Use the Google Play Billing Library](https://developer.android.com/google/play/billing/billing_library_overview). - Network accessline 618
Library](https://developer.android.com/google/play/billing/billing_library_overview). - Network accessline 618
Library](https://developer.android.com/google/play/billing/billing_library_overview). - Network accessline 624
- In [`BillingFlowParams`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams), deprecated `setOldSku(String oldSku)` and replaced with `setOldSku(String - Network accessline 624
- In [`BillingFlowParams`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams), deprecated `setOldSku(String oldSku)` and replaced with `setOldSku(String - Network accessline 669
you don't acknowledge a purchase within three days, the user automatically receives a refund, and Google Play revokes the purchase. For [pending transactions](https://developer.android.com/google/play/billing/release-notes#2_0_pending) (new - Network accessline 669
you don't acknowledge a purchase within three days, the user automatically receives a refund, and Google Play revokes the purchase. For [pending transactions](https://developer.android.com/google/play/billing/release-notes#2_0_pending) (new - Network accessline 670
receives a refund, and Google Play revokes the purchase. For [pending transactions](https://developer.android.com/google/play/billing/release-notes#2_0_pending) (new in version 2.0), the three-day window starts when the purchase has moved t - Network accessline 670
receives a refund, and Google Play revokes the purchase. For [pending transactions](https://developer.android.com/google/play/billing/release-notes#2_0_pending) (new in version 2.0), the three-day window starts when the purchase has moved t - Network accessline 671
transactions](https://developer.android.com/google/play/billing/release-notes#2_0_pending) (new in version 2.0), the three-day window starts - Network accessline 671
transactions](https://developer.android.com/google/play/billing/release-notes#2_0_pending) (new in version 2.0), the three-day window starts - Network accessline 681
The `Purchase` object now includes an [`isAcknowledged()`](https://developer.android.com/reference/com/android/billingclient/api/Purchase#isacknowledged) - Network accessline 681
The `Purchase` object now includes an [`isAcknowledged()`](https://developer.android.com/reference/com/android/billingclient/api/Purchase#isacknowledged) - Network accessline 682
[`isAcknowledged()`](https://developer.android.com/reference/com/android/billingclient/api/Purchase#isacknowledged) - Network accessline 682
[`isAcknowledged()`](https://developer.android.com/reference/com/android/billingclient/api/Purchase#isacknowledged) - Network accessline 683
method that indicates whether a purchase has been acknowledged. In addition, the Google Play Developer API includes acknowledgement boolean values for both [`Purchases.products`](https://developers.google.com/android-publisher/api-ref/purch - Network accessline 683
method that indicates whether a purchase has been acknowledged. In addition, the Google Play Developer API includes acknowledgement boolean values for both [`Purchases.products`](https://developers.google.com/android-publisher/api-ref/purch - Network accessline 684
Google Play Developer API includes acknowledgement boolean values for both [`Purchases.products`](https://developers.google.com/android-publisher/api-ref/purchases/products) and - Network accessline 684
Google Play Developer API includes acknowledgement boolean values for both [`Purchases.products`](https://developers.google.com/android-publisher/api-ref/purchases/products) and - Network accessline 685
[`Purchases.products`](https://developers.google.com/android-publisher/api-ref/purchases/products) - Network accessline 685
[`Purchases.products`](https://developers.google.com/android-publisher/api-ref/purchases/products) - Network accessline 686
and [`Purchases.subscriptions`](https://developers.google.com/android-publisher/api-ref/purchases/subscriptions). Before acknowledging a purchase, be sure to use these methods to determine if - Network accessline 686
and [`Purchases.subscriptions`](https://developers.google.com/android-publisher/api-ref/purchases/subscriptions). Before acknowledging a purchase, be sure to use these methods to determine if - Network accessline 687
[`Purchases.subscriptions`](https://developers.google.com/android-publisher/api-ref/purchases/subscriptions). - Network accessline 687
[`Purchases.subscriptions`](https://developers.google.com/android-publisher/api-ref/purchases/subscriptions). - Network accessline 699
The previously-deprecated `BillingFlowParams#setSku()` method has been removed in this release. Before rendering products in a purchase flow, you must now call [`BillingClient.querySkuDetailsAsync()`](https://developer.android.com/reference - Network accessline 699
The previously-deprecated `BillingFlowParams#setSku()` method has been removed in this release. Before rendering products in a purchase flow, you must now call [`BillingClient.querySkuDetailsAsync()`](https://developer.android.com/reference - Network accessline 700
in this release. Before rendering products in a purchase flow, you must now call [`BillingClient.querySkuDetailsAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#queryskudetailsasync), passing the - Network accessline 700
in this release. Before rendering products in a purchase flow, you must now call [`BillingClient.querySkuDetailsAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#queryskudetailsasync), passing the - Network accessline 701
[`BillingClient.querySkuDetailsAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#queryskudetailsasync), - Network accessline 701
[`BillingClient.querySkuDetailsAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#queryskudetailsasync), - Network accessline 702
passing the resulting [`SkuDetails`](https://developer.android.com/reference/com/android/billingclient/api/SkuDetails) object to [`BillingFlowParams.Builder.setSkuDetails()`](https://developer.android.com/reference/com/android/billingclient - Network accessline 702
passing the resulting [`SkuDetails`](https://developer.android.com/reference/com/android/billingclient/api/SkuDetails) object to [`BillingFlowParams.Builder.setSkuDetails()`](https://developer.android.com/reference/com/android/billingclient - Network accessline 703
[`SkuDetails`](https://developer.android.com/reference/com/android/billingclient/api/SkuDetails) object to - Network accessline 703
[`SkuDetails`](https://developer.android.com/reference/com/android/billingclient/api/SkuDetails) object to - Network accessline 704
[`BillingFlowParams.Builder.setSkuDetails()`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.Builder#setskudetails). - Network accessline 704
[`BillingFlowParams.Builder.setSkuDetails()`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.Builder#setskudetails). - Network accessline 709
For code examples, see [Use the Google Play Billing Library](https://developer.android.com/google/play/billing/billing_library_overview). - Network accessline 709
For code examples, see [Use the Google Play Billing Library](https://developer.android.com/google/play/billing/billing_library_overview). - Network accessline 710
Library](https://developer.android.com/google/play/billing/billing_library_overview). - Network accessline 710
Library](https://developer.android.com/google/play/billing/billing_library_overview). - Network accessline 717
is acknowledged or consumed. This is unlike developer payload in AIDL, where the payload could be specified when launching the purchase flow. Because purchases can now be initiated [from outside of your app](https://developer.android.com/go - Network accessline 717
is acknowledged or consumed. This is unlike developer payload in AIDL, where the payload could be specified when launching the purchase flow. Because purchases can now be initiated [from outside of your app](https://developer.android.com/go - Network accessline 718
payload could be specified when launching the purchase flow. Because purchases can now be initiated [from outside of your app](https://developer.android.com/google/play/billing/release-notes#2_0_acknowledge), this change ensures that you al - Network accessline 718
payload could be specified when launching the purchase flow. Because purchases can now be initiated [from outside of your app](https://developer.android.com/google/play/billing/release-notes#2_0_acknowledge), this change ensures that you al - Network accessline 719
can now be initiated [from outside of your app](https://developer.android.com/google/play/billing/release-notes#2_0_acknowledge), this change - Network accessline 719
can now be initiated [from outside of your app](https://developer.android.com/google/play/billing/release-notes#2_0_acknowledge), this change - Network accessline 722
To access the payload in the new library, `Purchase` objects now include a [`getDeveloperPayload()`](https://developer.android.com/reference/com/android/billingclient/api/Purchase#getdeveloperpayload) - Network accessline 722
To access the payload in the new library, `Purchase` objects now include a [`getDeveloperPayload()`](https://developer.android.com/reference/com/android/billingclient/api/Purchase#getdeveloperpayload) - Network accessline 723
[`getDeveloperPayload()`](https://developer.android.com/reference/com/android/billingclient/api/Purchase#getdeveloperpayload) - Network accessline 723
[`getDeveloperPayload()`](https://developer.android.com/reference/com/android/billingclient/api/Purchase#getdeveloperpayload) - Network accessline 737
[`SkuDetails`](https://developer.android.com/reference/com/android/billingclient/api/SkuDetails) contains two - Network accessline 737
[`SkuDetails`](https://developer.android.com/reference/com/android/billingclient/api/SkuDetails) contains two - Network accessline 740
- [`getOriginalPriceAmountMicros()`](https://developer.android.com/reference/com/android/billingclient/api/SkuDetails#getOriginalPriceAmountMicros()) - Network accessline 740
- [`getOriginalPriceAmountMicros()`](https://developer.android.com/reference/com/android/billingclient/api/SkuDetails#getOriginalPriceAmountMicros()) - Network accessline 741
- returns the unformatted original price of the SKU before discount. - [`getOriginalPrice()`](https://developer.android.com/reference/com/android/billingclient/api/SkuDetails#getOriginalPrice()) - returns the original price with additiona - Network accessline 741
- returns the unformatted original price of the SKU before discount. - [`getOriginalPrice()`](https://developer.android.com/reference/com/android/billingclient/api/SkuDetails#getOriginalPrice()) - returns the original price with additiona - Network accessline 742
- [`getOriginalPrice()`](https://developer.android.com/reference/com/android/billingclient/api/SkuDetails#getOriginalPrice()) - Network accessline 742
- [`getOriginalPrice()`](https://developer.android.com/reference/com/android/billingclient/api/SkuDetails#getOriginalPrice()) - Network accessline 754
To enable pending purchases, call [`enablePendingPurchases()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.Builder#enablependingpurchases) - Network accessline 754
To enable pending purchases, call [`enablePendingPurchases()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.Builder#enablependingpurchases) - Network accessline 755
[`enablePendingPurchases()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.Builder#enablependingpurchases) - Network accessline 755
[`enablePendingPurchases()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.Builder#enablependingpurchases) - Network accessline 758
Use [`Purchase.getPurchaseState()`](https://developer.android.com/reference/com/android/billingclient/api/Purchase#getpurchasestate) - Network accessline 758
Use [`Purchase.getPurchaseState()`](https://developer.android.com/reference/com/android/billingclient/api/Purchase#getpurchasestate) - Network accessline 759
[`Purchase.getPurchaseState()`](https://developer.android.com/reference/com/android/billingclient/api/Purchase#getpurchasestate) - Network accessline 759
[`Purchase.getPurchaseState()`](https://developer.android.com/reference/com/android/billingclient/api/Purchase#getpurchasestate) - Network accessline 764
1. When starting your app, call [`BillingClient.queryPurchases()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#querypurchases) to retrieve the list of unconsumed products associated with the user. - Network accessline 764
1. When starting your app, call [`BillingClient.queryPurchases()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#querypurchases) to retrieve the list of unconsumed products associated with the user. - Network accessline 766
3. Implement the [`onPurchasesUpdated()`](https://developer.android.com/reference/com/android/billingclient/api/PurchasesUpdatedListener#onpurchasesupdated) method to respond to changes to `Purchase` objects. - Network accessline 766
3. Implement the [`onPurchasesUpdated()`](https://developer.android.com/reference/com/android/billingclient/api/PurchasesUpdatedListener#onpurchasesupdated) method to respond to changes to `Purchase` objects. - Network accessline 768
In addition, the Google Play Developer API includes a `PENDING` state for [`Purchases.products`](https://developers.google.com/android-publisher/api-ref/purchases/products). - Network accessline 768
In addition, the Google Play Developer API includes a `PENDING` state for [`Purchases.products`](https://developers.google.com/android-publisher/api-ref/purchases/products). - Network accessline 769
[`Purchases.products`](https://developers.google.com/android-publisher/api-ref/purchases/products). - Network accessline 769
[`Purchases.products`](https://developers.google.com/android-publisher/api-ref/purchases/products). - Network accessline 791
[`consumeAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#consumeasync) - Network accessline 791
[`consumeAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#consumeasync) - Network accessline 792
now takes a [`ConsumeParams`](https://developer.android.com/reference/com/android/billingclient/api/ConsumeParams) object instead of a `purchaseToken`. `ConsumeParams` contains the `purchaseToken` as - Network accessline 792
now takes a [`ConsumeParams`](https://developer.android.com/reference/com/android/billingclient/api/ConsumeParams) object instead of a `purchaseToken`. `ConsumeParams` contains the `purchaseToken` as - Network accessline 793
[`ConsumeParams`](https://developer.android.com/reference/com/android/billingclient/api/ConsumeParams) object - Network accessline 793
[`ConsumeParams`](https://developer.android.com/reference/com/android/billingclient/api/ConsumeParams) object - Network accessline 801
To minimize confusion, [`queryPurchaseHistoryAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#queryPurchaseHistoryAsync(java.lang.String,%20com.android.billingclient.api.PurchaseHistoryResponseLi - Network accessline 801
To minimize confusion, [`queryPurchaseHistoryAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#queryPurchaseHistoryAsync(java.lang.String,%20com.android.billingclient.api.PurchaseHistoryResponseLi - Network accessline 802
[`queryPurchaseHistoryAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#queryPurchaseHistoryAsync(java.lang.String,%20com.android.billingclient.api.PurchaseHistoryResponseListener)) - Network accessline 802
[`queryPurchaseHistoryAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#queryPurchaseHistoryAsync(java.lang.String,%20com.android.billingclient.api.PurchaseHistoryResponseListener)) - Network accessline 803
now returns a [`PurchaseHistoryRecord`](https://developer.android.com/reference/com/android/billingclient/api/PurchaseHistoryRecord) object instead of a `Purchase` object. The `PurchaseHistoryRecord` object is the - Network accessline 803
now returns a [`PurchaseHistoryRecord`](https://developer.android.com/reference/com/android/billingclient/api/PurchaseHistoryRecord) object instead of a `Purchase` object. The `PurchaseHistoryRecord` object is the - Network accessline 804
[`PurchaseHistoryRecord`](https://developer.android.com/reference/com/android/billingclient/api/PurchaseHistoryRecord) - Network accessline 804
[`PurchaseHistoryRecord`](https://developer.android.com/reference/com/android/billingclient/api/PurchaseHistoryRecord) - Network accessline 814
APIs that previously returned a `BillingResponse` integer value now return a [`BillingResult`](https://developer.android.com/reference/com/android/billingclient/api/BillingResult) - Network accessline 814
APIs that previously returned a `BillingResponse` integer value now return a [`BillingResult`](https://developer.android.com/reference/com/android/billingclient/api/BillingResult) - Network accessline 815
[`BillingResult`](https://developer.android.com/reference/com/android/billingclient/api/BillingResult) - Network accessline 815
[`BillingResult`](https://developer.android.com/reference/com/android/billingclient/api/BillingResult) - Network accessline 822
- [`SkuDetails.getIntroductoryPriceAmountMicros()`](https://developer.android.com/reference/com/android/billingclient/api/SkuDetails#getIntroductoryPriceAmountMicros()) now returns a `long` instead of a `String`. - Network accessline 822
- [`SkuDetails.getIntroductoryPriceAmountMicros()`](https://developer.android.com/reference/com/android/billingclient/api/SkuDetails#getIntroductoryPriceAmountMicros()) now returns a `long` instead of a `String`. - Network accessline 845
- Added support for [rewarded products](https://developer.android.com/google/play/billing/billing_rewarded_products). For more information on monetization options, see [Add rewarded-product-specific - Network accessline 845
- Added support for [rewarded products](https://developer.android.com/google/play/billing/billing_rewarded_products). For more information on monetization options, see [Add rewarded-product-specific - Network accessline 846
products](https://developer.android.com/google/play/billing/billing_rewarded_products). For more information on monetization options, see [Add rewarded-product-specific - Network accessline 846
products](https://developer.android.com/google/play/billing/billing_rewarded_products). For more information on monetization options, see [Add rewarded-product-specific - Network accessline 847
features](https://developer.android.com/distribute/best-practices/earn/monetization-options). - Network accessline 847
features](https://developer.android.com/distribute/best-practices/earn/monetization-options). - Network accessline 866
- The Google Play Billing Library is now licensed under the [Android Software Development Kit License Agreement](https://developer.android.com/studio/terms). - Network accessline 866
- The Google Play Billing Library is now licensed under the [Android Software Development Kit License Agreement](https://developer.android.com/studio/terms). - Network accessline 867
Development Kit License Agreement](https://developer.android.com/studio/terms). - Network accessline 867
Development Kit License Agreement](https://developer.android.com/studio/terms). - Network accessline 919
information, asking users to accept the new price. This flow returns a response code of type [`BillingClient.BillingResponse`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.BillingResponseCode). - Network accessline 919
information, asking users to accept the new price. This flow returns a response code of type [`BillingClient.BillingResponse`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.BillingResponseCode). - Network accessline 921
[`BillingClient.BillingResponse`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.BillingResponseCode). - Network accessline 921
[`BillingClient.BillingResponse`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.BillingResponseCode). - Network accessline 926
mode, `DEFERRED`. This mode updates the user's subscription when it next renews. To learn more about how to set this proration mode, see [Set proration mode](https://developer.android.com/google/play/billing/subscriptions#replacement-modes) - Network accessline 926
mode, `DEFERRED`. This mode updates the user's subscription when it next renews. To learn more about how to set this proration mode, see [Set proration mode](https://developer.android.com/google/play/billing/subscriptions#replacement-modes) - Network accessline 928
mode](https://developer.android.com/google/play/billing/subscriptions#replacement-modes). - Network accessline 928
mode](https://developer.android.com/google/play/billing/subscriptions#replacement-modes). - Network accessline 940
deprecated. Instead, use the `setSkuDetails()` method, as shown in the following code snippet. The object passed into `setSkuDetails()` object comes from the [`querySkuDetailsAsync()`](https://developer.android.com/reference/com/android/bil - Network accessline 940
deprecated. Instead, use the `setSkuDetails()` method, as shown in the following code snippet. The object passed into `setSkuDetails()` object comes from the [`querySkuDetailsAsync()`](https://developer.android.com/reference/com/android/bil - Network accessline 941
code snippet. The object passed into `setSkuDetails()` object comes from the [`querySkuDetailsAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#querySkuDetailsAsync(com.android.billingclient.api.S - Network accessline 941
code snippet. The object passed into `setSkuDetails()` object comes from the [`querySkuDetailsAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#querySkuDetailsAsync(com.android.billingclient.api.S - Network accessline 942
[`querySkuDetailsAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#querySkuDetailsAsync(com.android.billingclient.api.SkuDetailsParams,%20com.android.billingclient.api.SkuDetailsResponseListener)) - Network accessline 942
[`querySkuDetailsAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#querySkuDetailsAsync(com.android.billingclient.api.SkuDetailsParams,%20com.android.billingclient.api.SkuDetailsResponseListener)) - Network accessline 1007
- Added support to specify a proration mode in [`BillingFlowParams`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams) when upgrading/downgrading an existing subscription. - Network accessline 1007
- Added support to specify a proration mode in [`BillingFlowParams`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams) when upgrading/downgrading an existing subscription. - Network accessline 1008
- The `replaceSkusProration` boolean flag in [`BillingFlowParams`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams) is no longer supported. Use `replaceSkusProrationMode` instead. - Network accessline 1008
- The `replaceSkusProration` boolean flag in [`BillingFlowParams`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams) is no longer supported. Use `replaceSkusProrationMode` instead. - Network accessline 1009
- [`launchBillingFlow()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#launchBillingFlow(android.app.Activity,com.android.billingclient.api.BillingFlowParams)) now triggers a callback for failed respon - Network accessline 1009
- [`launchBillingFlow()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#launchBillingFlow(android.app.Activity,com.android.billingclient.api.BillingFlowParams)) now triggers a callback for failed respon - Network accessline 1016
#### Developers can set `replaceSkusProrationMode` in [`BillingFlowParams`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams) class - Network accessline 1016
#### Developers can set `replaceSkusProrationMode` in [`BillingFlowParams`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams) class - Network accessline 1056
### `replaceSkusProration` is no longer supported in [`BillingFlowParams`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.html) class - Network accessline 1056
### `replaceSkusProration` is no longer supported in [`BillingFlowParams`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.html) class - Network accessline 1063
### [`launchBillingFlow()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.html#launchBillingFlow(android.app.Activity,%20com.android.billingclient.api.BillingFlowParams)) now triggers a callback for fai - Network accessline 1063
### [`launchBillingFlow()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.html#launchBillingFlow(android.app.Activity,%20com.android.billingclient.api.BillingFlowParams)) now triggers a callback for fai - Network accessline 1065
The Billing Library will always trigger the [`PurhcasesUpdatedListener`](https://developer.android.com/reference/com/android/billingclient/api/PurchasesUpdatedListener) - Network accessline 1065
The Billing Library will always trigger the [`PurhcasesUpdatedListener`](https://developer.android.com/reference/com/android/billingclient/api/PurchasesUpdatedListener) - Network accessline 1066
[`PurhcasesUpdatedListener`](https://developer.android.com/reference/com/android/billingclient/api/PurchasesUpdatedListener) - Network accessline 1066
[`PurhcasesUpdatedListener`](https://developer.android.com/reference/com/android/billingclient/api/PurchasesUpdatedListener) - Network accessline 1067
callback and return a [`BillingResponse`](https://developer.android.com/reference/com/android/billingclient/api/BillingResult) asynchronously. The synchronous return value of - Network accessline 1067
callback and return a [`BillingResponse`](https://developer.android.com/reference/com/android/billingclient/api/BillingResult) asynchronously. The synchronous return value of - Network accessline 1068
[`BillingResponse`](https://developer.android.com/reference/com/android/billingclient/api/BillingResult) - Network accessline 1068
[`BillingResponse`](https://developer.android.com/reference/com/android/billingclient/api/BillingResult) - Network accessline 1069
asynchronously. The synchronous return value of [`BillingResponse`](https://developer.android.com/reference/com/android/billingclient/api/BillingResult) is kept as well. - Network accessline 1069
asynchronously. The synchronous return value of [`BillingResponse`](https://developer.android.com/reference/com/android/billingclient/api/BillingResult) is kept as well. - Network accessline 1070
[`BillingResponse`](https://developer.android.com/reference/com/android/billingclient/api/BillingResult) - Network accessline 1070
[`BillingResponse`](https://developer.android.com/reference/com/android/billingclient/api/BillingResult) - Network accessline 1075
- Properly exits early in async methods when service is disconnected. - [`Builder`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.Builder) param objects no longer mutates built objects. - Network accessline 1075
- Properly exits early in async methods when service is disconnected. - [`Builder`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.Builder) param objects no longer mutates built objects. - Network accessline 1076
- [`Builder`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.Builder) param objects no longer mutates built objects. - Network accessline 1076
- [`Builder`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.Builder) param objects no longer mutates built objects. - Network accessline 1077
- Issue [68087141](https://issuetracker.google.com/issues/68087141): [`launchBillingFlow()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#launchBillingFlow(android.app.Activity,com.android.billingclien - Network accessline 1077
- Issue [68087141](https://issuetracker.google.com/issues/68087141): [`launchBillingFlow()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#launchBillingFlow(android.app.Activity,com.android.billingclien - Network accessline 1079
## Google Play Billing Library 1.0 Release (2017-09-19, [Announcement](https://android-developers.googleblog.com/2017/09/google-play-billing-library-10-released.html)) - Network accessline 1079
## Google Play Billing Library 1.0 Release (2017-09-19, [Announcement](https://android-developers.googleblog.com/2017/09/google-play-billing-library-10-released.html)) - Network accessline 1086
- Embedded billing permission inside library's manifest. It's not necessary to add the `com.android.vending.BILLING` permission inside Android manifest anymore. - New builder added to [`BillingClient.Builder`](https://developer.android.com/ - Network accessline 1086
- Embedded billing permission inside library's manifest. It's not necessary to add the `com.android.vending.BILLING` permission inside Android manifest anymore. - New builder added to [`BillingClient.Builder`](https://developer.android.com/ - Network accessline 1087
- New builder added to [`BillingClient.Builder`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.Builder.html) class. - Network accessline 1087
- New builder added to [`BillingClient.Builder`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.Builder.html) class. - Network accessline 1088
- Introduced builder pattern for [`SkuDetailsParams`](https://developer.android.com/reference/com/android/billingclient/api/SkuDetailsParams.html) class to be used on methods to query SKUs. - Network accessline 1088
- Introduced builder pattern for [`SkuDetailsParams`](https://developer.android.com/reference/com/android/billingclient/api/SkuDetailsParams.html) class to be used on methods to query SKUs. - Network accessline 1098
[`BillingClient.Builder`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.Builder.html) - Network accessline 1098
[`BillingClient.Builder`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.Builder.html) - Network accessline 1115
To initiate the billing flow for a purchase or subscription, the [`launchBillingFlow()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#launchBillingFlow(android.app.Activity,com.android.billingclient.ap - Network accessline 1115
To initiate the billing flow for a purchase or subscription, the [`launchBillingFlow()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#launchBillingFlow(android.app.Activity,com.android.billingclient.ap - Network accessline 1116
[`launchBillingFlow()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#launchBillingFlow(android.app.Activity,com.android.billingclient.api.BillingFlowParams)) method receives a - Network accessline 1116
[`launchBillingFlow()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient#launchBillingFlow(android.app.Activity,com.android.billingclient.api.BillingFlowParams)) method receives a - Network accessline 1117
[`BillingFlowParams`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.html) - Network accessline 1117
[`BillingFlowParams`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.html) - Network accessline 1146
Arguments for [`queryPurchaseHistoryAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.html#queryPurchaseHistoryAsync(java.lang.String,%0Acom.android.billingclient.api.PurchaseHistoryResponseListen - Network accessline 1146
Arguments for [`queryPurchaseHistoryAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.html#queryPurchaseHistoryAsync(java.lang.String,%0Acom.android.billingclient.api.PurchaseHistoryResponseListen - Network accessline 1147
[`queryPurchaseHistoryAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.html#queryPurchaseHistoryAsync(java.lang.String,%0Acom.android.billingclient.api.PurchaseHistoryResponseListener)) and - Network accessline 1147
[`queryPurchaseHistoryAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.html#queryPurchaseHistoryAsync(java.lang.String,%0Acom.android.billingclient.api.PurchaseHistoryResponseListener)) and - Network accessline 1148
[`querySkuDetailsAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.html#querySkuDetailsAsync(com.android.billingclient.api.SkuDetailsParams,%0Acom.android.billingclient.api.SkuDetailsResponseListe - Network accessline 1148
[`querySkuDetailsAsync()`](https://developer.android.com/reference/com/android/billingclient/api/BillingClient.html#querySkuDetailsAsync(com.android.billingclient.api.SkuDetailsParams,%0Acom.android.billingclient.api.SkuDetailsResponseListe - Network accessline 1171
The result is now returned via result code and a list of [`SkuDetails`](https://developer.android.com/reference/com/android/billingclient/api/SkuDetails.html) - Network accessline 1171
The result is now returned via result code and a list of [`SkuDetails`](https://developer.android.com/reference/com/android/billingclient/api/SkuDetails.html) - Network accessline 1172
[`SkuDetails`](https://developer.android.com/reference/com/android/billingclient/api/SkuDetails.html) - Network accessline 1172
[`SkuDetails`](https://developer.android.com/reference/com/android/billingclient/api/SkuDetails.html) - Network accessline 1190
The order of arguments for [`onConsumeResponse`](https://developer.android.com/reference/com/android/billingclient/api/ConsumeResponseListener#onConsumeResponse(com.android.billingclient.api.BillingResult,java.lang.String)) from the - Network accessline 1190
The order of arguments for [`onConsumeResponse`](https://developer.android.com/reference/com/android/billingclient/api/ConsumeResponseListener#onConsumeResponse(com.android.billingclient.api.BillingResult,java.lang.String)) from the - Network accessline 1191
[`onConsumeResponse`](https://developer.android.com/reference/com/android/billingclient/api/ConsumeResponseListener#onConsumeResponse(com.android.billingclient.api.BillingResult,java.lang.String)) from the - Network accessline 1191
[`onConsumeResponse`](https://developer.android.com/reference/com/android/billingclient/api/ConsumeResponseListener#onConsumeResponse(com.android.billingclient.api.BillingResult,java.lang.String)) from the - Network accessline 1192
[`ConsumeResponseListener`](https://developer.android.com/reference/com/android/billingclient/api/ConsumeResponseListener.html) - Network accessline 1192
[`ConsumeResponseListener`](https://developer.android.com/reference/com/android/billingclient/api/ConsumeResponseListener.html) - Network accessline 1209
[`PurchaseResult`](https://developer.android.com/reference/com/android/billingclient/api/Purchase.PurchasesResult.html) - Network accessline 1209
[`PurchaseResult`](https://developer.android.com/reference/com/android/billingclient/api/Purchase.PurchasesResult.html) - Network accessline 1226
- [No response code in PURCHASES_UPDATED Bundle](https://issuetracker.google.com/issues/64075043) - Network accessline 1226
- [No response code in PURCHASES_UPDATED Bundle](https://issuetracker.google.com/issues/64075043) - Network accessline 1228
rotation](https://issuetracker.google.com/issues/63266562) - Network accessline 1228
rotation](https://issuetracker.google.com/issues/63266562) - Network accessline 1230
## Developer Preview 1 Release (2017-06-12, [Announcement](https://android-developers.googleblog.com/2017/06/money-made-easily-with-new-google-play.html)) - Network accessline 1230
## Developer Preview 1 Release (2017-06-12, [Announcement](https://android-developers.googleblog.com/2017/06/money-made-easily-with-new-google-play.html))
play/play-billing-library-version-upgrade/references/version-checklist.md
- Network accessline 53
- \[ \] **Dynamic Checklist Generation** : For any version \>=10.0.0, you **MUST** synthesize a new checklist for each new version header found in the [Release Notes](https://developer.android.com/google/play/billing/release-notes). - Network accessline 53
- \[ \] **Dynamic Checklist Generation** : For any version \>=10.0.0, you **MUST** synthesize a new checklist for each new version header found in the [Release Notes](https://developer.android.com/google/play/billing/release-notes).
play/play-policy-insights/resources/policies.json
- Network accessline 4
"category": "User Data", "urls": [ "https://support.google.com/googleplay/android-developer/answer/10144311#safetysection", - Network accessline 4
"category": "User Data", "urls": [ "https://support.google.com/googleplay/android-developer/answer/10144311#safetysection", - Network accessline 5
"urls": [ "https://support.google.com/googleplay/android-developer/answer/10144311#safetysection", "https://developer.android.com/privacy-and-security/declare-data-use", - Network accessline 5
"urls": [ "https://support.google.com/googleplay/android-developer/answer/10144311#safetysection", "https://developer.android.com/privacy-and-security/declare-data-use", - Network accessline 6
"https://support.google.com/googleplay/android-developer/answer/10144311#safetysection", - Network accessline 6
"https://support.google.com/googleplay/android-developer/answer/10144311#safetysection", - Network accessline 7
"https://developer.android.com/privacy-and-security/declare-data-use", - Network accessline 7
"https://developer.android.com/privacy-and-security/declare-data-use", - Network accessline 8
"https://support.google.com/googleplay/android-developer/answer/10787469" - Network accessline 8
"https://support.google.com/googleplay/android-developer/answer/10787469" - Network accessline 205
"category": "Play Console Requirements", "urls": [ "https://support.google.com/googleplay/android-developer/answer/15748846" - Network accessline 205
"category": "Play Console Requirements", "urls": [ "https://support.google.com/googleplay/android-developer/answer/15748846" - Network accessline 206
"urls": [ "https://support.google.com/googleplay/android-developer/answer/15748846" ] - Network accessline 206
"urls": [ "https://support.google.com/googleplay/android-developer/answer/15748846" ] - Network accessline 207
"https://support.google.com/googleplay/android-developer/answer/15748846" - Network accessline 207
"https://support.google.com/googleplay/android-developer/answer/15748846" - Network accessline 212
"category": "Permissions", "urls": [ "https://support.google.com/googleplay/android-developer/answer/16558241#sms-call-permissions", - Network accessline 212
"category": "Permissions", "urls": [ "https://support.google.com/googleplay/android-developer/answer/16558241#sms-call-permissions", - Network accessline 213
"urls": [ "https://support.google.com/googleplay/android-developer/answer/16558241#sms-call-permissions", "https://support.google.com/googleplay/android-developer/answer/10208820" - Network accessline 213
"urls": [ "https://support.google.com/googleplay/android-developer/answer/16558241#sms-call-permissions", "https://support.google.com/googleplay/android-developer/answer/10208820" - Network accessline 214
"https://support.google.com/googleplay/android-developer/answer/16558241#sms-call-permissions", - Network accessline 214
"https://support.google.com/googleplay/android-developer/answer/16558241#sms-call-permissions", - Network accessline 215
"https://support.google.com/googleplay/android-developer/answer/10208820" - Network accessline 215
"https://support.google.com/googleplay/android-developer/answer/10208820" - Network accessline 220
"category": "Permissions", "urls": [ "https://support.google.com/googleplay/android-developer/answer/16558241#package-vis", - Network accessline 220
"category": "Permissions", "urls": [ "https://support.google.com/googleplay/android-developer/answer/16558241#package-vis", - Network accessline 221
"urls": [ "https://support.google.com/googleplay/android-developer/answer/16558241#package-vis", "https://support.google.com/googleplay/android-developer/answer/10158779" - Network accessline 221
"urls": [ "https://support.google.com/googleplay/android-developer/answer/16558241#package-vis", "https://support.google.com/googleplay/android-developer/answer/10158779" - Network accessline 222
"https://support.google.com/googleplay/android-developer/answer/16558241#package-vis", - Network accessline 222
"https://support.google.com/googleplay/android-developer/answer/16558241#package-vis", - Network accessline 223
"https://support.google.com/googleplay/android-developer/answer/10158779" - Network accessline 223
"https://support.google.com/googleplay/android-developer/answer/10158779" - Network accessline 228
"category": "Permissions", "urls": [ "https://support.google.com/googleplay/android-developer/answer/16558241#all-files-access", - Network accessline 228
"category": "Permissions", "urls": [ "https://support.google.com/googleplay/android-developer/answer/16558241#all-files-access", - Network accessline 229
"urls": [ "https://support.google.com/googleplay/android-developer/answer/16558241#all-files-access", "https://developer.android.com/training/data-storage/manage-all-files", - Network accessline 229
"urls": [ "https://support.google.com/googleplay/android-developer/answer/16558241#all-files-access", "https://developer.android.com/training/data-storage/manage-all-files", - Network accessline 230
"https://support.google.com/googleplay/android-developer/answer/16558241#all-files-access", - Network accessline 230
"https://support.google.com/googleplay/android-developer/answer/16558241#all-files-access", - Network accessline 231
"https://developer.android.com/training/data-storage/manage-all-files", - Network accessline 231
"https://developer.android.com/training/data-storage/manage-all-files", - Network accessline 232
"https://support.google.com/googleplay/android-developer/answer/10467955" - Network accessline 232
"https://support.google.com/googleplay/android-developer/answer/10467955" - Network accessline 237
"category": "Permissions", "urls": [ "https://support.google.com/googleplay/android-developer/answer/16558241#photo-and-video-permissions", - Network accessline 237
"category": "Permissions", "urls": [ "https://support.google.com/googleplay/android-developer/answer/16558241#photo-and-video-permissions", - Network accessline 238
"urls": [ "https://support.google.com/googleplay/android-developer/answer/16558241#photo-and-video-permissions", "https://support.google.com/googleplay/android-developer/answer/16935362", - Network accessline 238
"urls": [ "https://support.google.com/googleplay/android-developer/answer/16558241#photo-and-video-permissions", "https://support.google.com/googleplay/android-developer/answer/16935362", - Network accessline 239
"https://support.google.com/googleplay/android-developer/answer/16558241#photo-and-video-permissions", - Network accessline 239
"https://support.google.com/googleplay/android-developer/answer/16558241#photo-and-video-permissions", - Network accessline 240
"https://support.google.com/googleplay/android-developer/answer/16935362", - Network accessline 240
"https://support.google.com/googleplay/android-developer/answer/16935362", - Network accessline 241
"https://developer.android.com/training/data-storage/shared/media" - Network accessline 241
"https://developer.android.com/training/data-storage/shared/media" - Network accessline 246
"category": "Permissions", "urls": [ "https://support.google.com/googleplay/android-developer/answer/16558241", - Network accessline 246
"category": "Permissions", "urls": [ "https://support.google.com/googleplay/android-developer/answer/16558241", - Network accessline 247
"urls": [ "https://support.google.com/googleplay/android-developer/answer/16558241", "https://support.google.com/googleplay/android-developer/answer/9799150" - Network accessline 247
"urls": [ "https://support.google.com/googleplay/android-developer/answer/16558241", "https://support.google.com/googleplay/android-developer/answer/9799150" - Network accessline 248
"https://support.google.com/googleplay/android-developer/answer/16558241", - Network accessline 248
"https://support.google.com/googleplay/android-developer/answer/16558241", - Network accessline 249
"https://support.google.com/googleplay/android-developer/answer/9799150" - Network accessline 249
"https://support.google.com/googleplay/android-developer/answer/9799150" - Network accessline 254
"category": "Permissions", "urls": [ "https://support.google.com/googleplay/android-developer/answer/16909972#contacts-permissions", - Network accessline 254
"category": "Permissions", "urls": [ "https://support.google.com/googleplay/android-developer/answer/16909972#contacts-permissions", - Network accessline 255
"urls": [ "https://support.google.com/googleplay/android-developer/answer/16909972#contacts-permissions", "https://support.google.com/googleplay/android-developer/answer/16935362" - Network accessline 255
"urls": [ "https://support.google.com/googleplay/android-developer/answer/16909972#contacts-permissions", "https://support.google.com/googleplay/android-developer/answer/16935362" - Network accessline 256
"https://support.google.com/googleplay/android-developer/answer/16909972#contacts-permissions", - Network accessline 256
"https://support.google.com/googleplay/android-developer/answer/16909972#contacts-permissions", - Network accessline 257
"https://support.google.com/googleplay/android-developer/answer/16935362" - Network accessline 257
"https://support.google.com/googleplay/android-developer/answer/16935362" - Network accessline 262
"category": "Permissions", "urls": [ "https://support.google.com/googleplay/android-developer/answer/10144311", - Network accessline 262
"category": "Permissions", "urls": [ "https://support.google.com/googleplay/android-developer/answer/10144311", - Network accessline 263
"urls": [ "https://support.google.com/googleplay/android-developer/answer/10144311", "https://support.google.com/googleplay/android-developer/answer/16558241" - Network accessline 263
"urls": [ "https://support.google.com/googleplay/android-developer/answer/10144311", "https://support.google.com/googleplay/android-developer/answer/16558241" - Network accessline 264
"https://support.google.com/googleplay/android-developer/answer/10144311", - Network accessline 264
"https://support.google.com/googleplay/android-developer/answer/10144311", - Network accessline 265
"https://support.google.com/googleplay/android-developer/answer/16558241" - Network accessline 265
"https://support.google.com/googleplay/android-developer/answer/16558241" - Network accessline 270
"category": "Permissions", "urls": [ "https://support.google.com/googleplay/android-developer/answer/10467955", - Network accessline 270
"category": "Permissions", "urls": [ "https://support.google.com/googleplay/android-developer/answer/10467955", - Network accessline 271
"urls": [ "https://support.google.com/googleplay/android-developer/answer/10467955", "https://support.google.com/googleplay/android-developer/answer/16558241" - Network accessline 271
"urls": [ "https://support.google.com/googleplay/android-developer/answer/10467955", "https://support.google.com/googleplay/android-developer/answer/16558241" - Network accessline 272
"https://support.google.com/googleplay/android-developer/answer/10467955", - Network accessline 272
"https://support.google.com/googleplay/android-developer/answer/10467955", - Network accessline 273
"https://support.google.com/googleplay/android-developer/answer/16558241" - Network accessline 273
"https://support.google.com/googleplay/android-developer/answer/16558241" - Network accessline 278
"category": "User Data", "urls": [ "https://support.google.com/googleplay/android-developer/answer/10144311" - Network accessline 278
"category": "User Data", "urls": [ "https://support.google.com/googleplay/android-developer/answer/10144311" - Network accessline 279
"urls": [ "https://support.google.com/googleplay/android-developer/answer/10144311" ] - Network accessline 279
"urls": [ "https://support.google.com/googleplay/android-developer/answer/10144311" ] - Network accessline 280
"https://support.google.com/googleplay/android-developer/answer/10144311" - Network accessline 280
"https://support.google.com/googleplay/android-developer/answer/10144311" - Network accessline 285
"category": "User Data", "urls": [ "https://support.google.com/googleplay/android-developer/answer/10144311#account_deletion", - Network accessline 285
"category": "User Data", "urls": [ "https://support.google.com/googleplay/android-developer/answer/10144311#account_deletion", - Network accessline 286
"urls": [ "https://support.google.com/googleplay/android-developer/answer/10144311#account_deletion", "https://support.google.com/googleplay/android-developer/answer/13327111" - Network accessline 286
"urls": [ "https://support.google.com/googleplay/android-developer/answer/10144311#account_deletion", "https://support.google.com/googleplay/android-developer/answer/13327111" - Network accessline 287
"https://support.google.com/googleplay/android-developer/answer/10144311#account_deletion", - Network accessline 287
"https://support.google.com/googleplay/android-developer/answer/10144311#account_deletion", - Network accessline 288
"https://support.google.com/googleplay/android-developer/answer/13327111" - Network accessline 288
"https://support.google.com/googleplay/android-developer/answer/13327111" - Network accessline 293
"category": "Privacy, Deception and Device Abuse", "urls": [ "https://support.google.com/googleplay/android-developer/answer/16561298", - Network accessline 293
"category": "Privacy, Deception and Device Abuse", "urls": [ "https://support.google.com/googleplay/android-developer/answer/16561298", - Network accessline 294
"urls": [ "https://support.google.com/googleplay/android-developer/answer/16561298", "https://support.google.com/googleplay/android-developer/answer/11926878" - Network accessline 294
"urls": [ "https://support.google.com/googleplay/android-developer/answer/16561298", "https://support.google.com/googleplay/android-developer/answer/11926878" - Network accessline 295
"https://support.google.com/googleplay/android-developer/answer/16561298", - Network accessline 295
"https://support.google.com/googleplay/android-developer/answer/16561298", - Network accessline 296
"https://support.google.com/googleplay/android-developer/answer/11926878" - Network accessline 296
"https://support.google.com/googleplay/android-developer/answer/11926878" - Network accessline 301
"category": "Permissions", "urls": [ "https://support.google.com/googleplay/android-developer/answer/16558241#accessibility" - Network accessline 301
"category": "Permissions", "urls": [ "https://support.google.com/googleplay/android-developer/answer/16558241#accessibility" - Network accessline 302
"urls": [ "https://support.google.com/googleplay/android-developer/answer/16558241#accessibility" ] - Network accessline 302
"urls": [ "https://support.google.com/googleplay/android-developer/answer/16558241#accessibility" ] - Network accessline 303
"https://support.google.com/googleplay/android-developer/answer/16558241#accessibility" - Network accessline 303
"https://support.google.com/googleplay/android-developer/answer/16558241#accessibility" - Network accessline 308
"category": "Permissions", "urls": [ "https://support.google.com/googleplay/android-developer/answer/16558241#exact_alarm" - Network accessline 308
"category": "Permissions", "urls": [ "https://support.google.com/googleplay/android-developer/answer/16558241#exact_alarm" - Network accessline 309
"urls": [ "https://support.google.com/googleplay/android-developer/answer/16558241#exact_alarm" ] - Network accessline 309
"urls": [ "https://support.google.com/googleplay/android-developer/answer/16558241#exact_alarm" ] - Network accessline 310
"https://support.google.com/googleplay/android-developer/answer/16558241#exact_alarm" - Network accessline 310
"https://support.google.com/googleplay/android-developer/answer/16558241#exact_alarm" - Network accessline 315
"category": "Privacy, Deception and Device Abuse", "urls": [ "https://support.google.com/googleplay/android-developer/answer/13392821", - Network accessline 315
"category": "Privacy, Deception and Device Abuse", "urls": [ "https://support.google.com/googleplay/android-developer/answer/13392821", - Network accessline 316
"urls": [ "https://support.google.com/googleplay/android-developer/answer/13392821", "https://support.google.com/googleplay/android-developer/answer/16559646#foreground_service" - Network accessline 316
"urls": [ "https://support.google.com/googleplay/android-developer/answer/13392821", "https://support.google.com/googleplay/android-developer/answer/16559646#foreground_service" - Network accessline 317
"https://support.google.com/googleplay/android-developer/answer/13392821", - Network accessline 317
"https://support.google.com/googleplay/android-developer/answer/13392821", - Network accessline 318
"https://support.google.com/googleplay/android-developer/answer/16559646#foreground_service" - Network accessline 318
"https://support.google.com/googleplay/android-developer/answer/16559646#foreground_service"
play/play-policy-insights/resources/scanner_config.json
play/play-policy-insights/scripts/generate_report.py
- Executable scriptline 1
#!/usr/bin/env python3 - Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 7
# You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
# You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
# # https://www.apache.org/licenses/LICENSE-2.0 # - Network accessline 8
# # https://www.apache.org/licenses/LICENSE-2.0 # - Network accessline 9
# https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
# https://www.apache.org/licenses/LICENSE-2.0
play/play-policy-insights/scripts/orchestrator.py
- Executable scriptline 1
#!/usr/bin/env python3 - Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 7
# You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
# You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
# # https://www.apache.org/licenses/LICENSE-2.0 # - Network accessline 8
# # https://www.apache.org/licenses/LICENSE-2.0 # - Network accessline 9
# https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
# https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 582
root = ET.fromstring(xml_content.lstrip("\ufeff")) ns = {"android": "http://schemas.android.com/apk/res/android"} - Network accessline 582
root = ET.fromstring(xml_content.lstrip("\ufeff")) ns = {"android": "http://schemas.android.com/apk/res/android"} - Network accessline 583
ns = {"android": "http://schemas.android.com/apk/res/android"} - Network accessline 583
ns = {"android": "http://schemas.android.com/apk/res/android"} - Network accessline 589
if uses_sdk is not None: details["target_sdk"] = uses_sdk.get( "{http://schemas.android.com/apk/res/android}targetSdkVersion" - Network accessline 589
if uses_sdk is not None: details["target_sdk"] = uses_sdk.get( "{http://schemas.android.com/apk/res/android}targetSdkVersion" - Network accessline 590
details["target_sdk"] = uses_sdk.get( "{http://schemas.android.com/apk/res/android}targetSdkVersion" ) - Network accessline 590
details["target_sdk"] = uses_sdk.get( "{http://schemas.android.com/apk/res/android}targetSdkVersion" ) - Network accessline 591
"{http://schemas.android.com/apk/res/android}targetSdkVersion" - Network accessline 591
"{http://schemas.android.com/apk/res/android}targetSdkVersion" - Network accessline 596
if application is not None: label = application.get( "{http://schemas.android.com/apk/res/android}label" - Network accessline 596
if application is not None: label = application.get( "{http://schemas.android.com/apk/res/android}label" - Network accessline 597
label = application.get( "{http://schemas.android.com/apk/res/android}label" ) - Network accessline 597
label = application.get( "{http://schemas.android.com/apk/res/android}label" ) - Network accessline 598
"{http://schemas.android.com/apk/res/android}label" - Network accessline 598
"{http://schemas.android.com/apk/res/android}label" - Network accessline 606
for tag in ["uses-permission", "uses-permission-sdk-23"]: for perm in root.findall(tag, ns): name = perm.get("{http://schemas.android.com/apk/res/android}name") - Network accessline 606
for tag in ["uses-permission", "uses-permission-sdk-23"]: for perm in root.findall(tag, ns): name = perm.get("{http://schemas.android.com/apk/res/android}name") - Network accessline 607
for perm in root.findall(tag, ns): name = perm.get("{http://schemas.android.com/apk/res/android}name") if name: - Network accessline 607
for perm in root.findall(tag, ns): name = perm.get("{http://schemas.android.com/apk/res/android}name") if name: - Network accessline 608
name = perm.get("{http://schemas.android.com/apk/res/android}name") - Network accessline 608
name = perm.get("{http://schemas.android.com/apk/res/android}name") - Network accessline 620
for component in root.findall(f".//{tag}", ns): perm = component.get( "{http://schemas.android.com/apk/res/android}permission" - Network accessline 620
for component in root.findall(f".//{tag}", ns): perm = component.get( "{http://schemas.android.com/apk/res/android}permission" - Network accessline 621
perm = component.get( "{http://schemas.android.com/apk/res/android}permission" ) - Network accessline 621
perm = component.get( "{http://schemas.android.com/apk/res/android}permission" ) - Network accessline 622
"{http://schemas.android.com/apk/res/android}permission" - Network accessline 622
"{http://schemas.android.com/apk/res/android}permission" - Network accessline 627
if tag == "provider": read_perm = component.get( "{http://schemas.android.com/apk/res/android}readPermission" - Network accessline 627
if tag == "provider": read_perm = component.get( "{http://schemas.android.com/apk/res/android}readPermission" - Network accessline 628
read_perm = component.get( "{http://schemas.android.com/apk/res/android}readPermission" ) - Network accessline 628
read_perm = component.get( "{http://schemas.android.com/apk/res/android}readPermission" ) - Network accessline 629
"{http://schemas.android.com/apk/res/android}readPermission" - Network accessline 629
"{http://schemas.android.com/apk/res/android}readPermission" - Network accessline 632
details["permissions"].append(read_perm) write_perm = component.get( "{http://schemas.android.com/apk/res/android}writePermission" - Network accessline 632
details["permissions"].append(read_perm) write_perm = component.get( "{http://schemas.android.com/apk/res/android}writePermission" - Network accessline 633
write_perm = component.get( "{http://schemas.android.com/apk/res/android}writePermission" ) - Network accessline 633
write_perm = component.get( "{http://schemas.android.com/apk/res/android}writePermission" ) - Network accessline 634
"{http://schemas.android.com/apk/res/android}writePermission" - Network accessline 634
"{http://schemas.android.com/apk/res/android}writePermission" - Network accessline 642
fgs_type = service.get( "{http://schemas.android.com/apk/res/android}foregroundServiceType" - Network accessline 642
fgs_type = service.get( "{http://schemas.android.com/apk/res/android}foregroundServiceType" - Network accessline 643
"{http://schemas.android.com/apk/res/android}foregroundServiceType" - Network accessline 643
"{http://schemas.android.com/apk/res/android}foregroundServiceType" - Network accessline 646
details["foreground_services"].append({ "name": service.get( "{http://schemas.android.com/apk/res/android}name" - Network accessline 646
details["foreground_services"].append({ "name": service.get( "{http://schemas.android.com/apk/res/android}name" - Network accessline 647
"name": service.get( "{http://schemas.android.com/apk/res/android}name" ), - Network accessline 647
"name": service.get( "{http://schemas.android.com/apk/res/android}name" ), - Network accessline 648
"{http://schemas.android.com/apk/res/android}name" - Network accessline 648
"{http://schemas.android.com/apk/res/android}name"
play/play-policy-insights/scripts/play_store_scraper.py
- Executable scriptline 1
#!/usr/bin/env python3 - Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 7
# You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
# You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
# # https://www.apache.org/licenses/LICENSE-2.0 # - Network accessline 8
# # https://www.apache.org/licenses/LICENSE-2.0 # - Network accessline 9
# https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
# https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 36
"Accept-Language": "en-US,en;q=0.9", } req = urllib.request.Request(url, headers=headers) - Network accessline 36
"Accept-Language": "en-US,en;q=0.9", } req = urllib.request.Request(url, headers=headers) - Network accessline 37
} req = urllib.request.Request(url, headers=headers) if verify_ssl: - Network accessline 37
} req = urllib.request.Request(url, headers=headers) if verify_ssl: - Network accessline 38
req = urllib.request.Request(url, headers=headers) - Network accessline 38
req = urllib.request.Request(url, headers=headers) - Network accessline 42
context = ssl._create_unverified_context() try: with urllib.request.urlopen(req, timeout=10, context=context) as resp: - Network accessline 42
context = ssl._create_unverified_context() try: with urllib.request.urlopen(req, timeout=10, context=context) as resp: - Network accessline 43
try: with urllib.request.urlopen(req, timeout=10, context=context) as resp: return resp.read().decode("utf-8") - Network accessline 43
try: with urllib.request.urlopen(req, timeout=10, context=context) as resp: return resp.read().decode("utf-8") - Network accessline 44
with urllib.request.urlopen(req, timeout=10, context=context) as resp: - Network accessline 44
with urllib.request.urlopen(req, timeout=10, context=context) as resp: - Network accessline 386
details_url = ( f"https://play.google.com/store/apps/details?id={pkg_name}&hl=en&gl=US" - Network accessline 386
details_url = ( f"https://play.google.com/store/apps/details?id={pkg_name}&hl=en&gl=US" - Network accessline 387
f"https://play.google.com/store/apps/details?id={pkg_name}&hl=en&gl=US" - Network accessline 387
f"https://play.google.com/store/apps/details?id={pkg_name}&hl=en&gl=US" - Network accessline 388
) ds_url = ( f"https://play.google.com/store/apps/datasafety?id={pkg_name}&hl=en&gl=US" - Network accessline 388
) ds_url = ( f"https://play.google.com/store/apps/datasafety?id={pkg_name}&hl=en&gl=US" - Network accessline 389
ds_url = ( f"https://play.google.com/store/apps/datasafety?id={pkg_name}&hl=en&gl=US" ) - Network accessline 389
ds_url = ( f"https://play.google.com/store/apps/datasafety?id={pkg_name}&hl=en&gl=US" ) - Network accessline 390
f"https://play.google.com/store/apps/datasafety?id={pkg_name}&hl=en&gl=US" - Network accessline 390
f"https://play.google.com/store/apps/datasafety?id={pkg_name}&hl=en&gl=US"
play/play-policy-insights/scripts/scanner.py
- Executable scriptline 1
#!/usr/bin/env python3 - Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 7
# You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
# You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
# # https://www.apache.org/licenses/LICENSE-2.0 # - Network accessline 8
# # https://www.apache.org/licenses/LICENSE-2.0 # - Network accessline 9
# https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
# https://www.apache.org/licenses/LICENSE-2.0
play/play-policy-insights/scripts/template_engine.py
- Executable scriptline 1
#!/usr/bin/env python3 - Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 7
# You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
# You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
# # https://www.apache.org/licenses/LICENSE-2.0 # - Network accessline 8
# # https://www.apache.org/licenses/LICENSE-2.0 # - Network accessline 9
# https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
# https://www.apache.org/licenses/LICENSE-2.0
profilers/android-profiler/recording/workflows/perfetto-trace-recording/perfetto_trace_recording.md
- Network accessline 12
> \[!IMPORTANT\] **Scope:** This guide is **strictly for recording traces on > Android devices** . For other platforms (Linux, macOS, or Chrome), refer to the > platform documentation on [perfetto.dev/docs](https://perfetto.dev/docs/). - Network accessline 12
> \[!IMPORTANT\] **Scope:** This guide is **strictly for recording traces on > Android devices** . For other platforms (Linux, macOS, or Chrome), refer to the > platform documentation on [perfetto.dev/docs](https://perfetto.dev/docs/). - Network accessline 14
> platform documentation on [perfetto.dev/docs](https://perfetto.dev/docs/). - Network accessline 14
> platform documentation on [perfetto.dev/docs](https://perfetto.dev/docs/). - Network accessline 29
TOOLS_URL="https://raw.githubusercontent.com/google/perfetto/main/tools" - Network accessline 29
TOOLS_URL="https://raw.githubusercontent.com/google/perfetto/main/tools" - Network accessline 31
# Java Heap Dump (ART) curl -O "$TOOLS_URL/java_heap_dump" && chmod +x java_heap_dump - Network accessline 31
# Java Heap Dump (ART) curl -O "$TOOLS_URL/java_heap_dump" && chmod +x java_heap_dump - Network accessline 32
curl -O "$TOOLS_URL/java_heap_dump" && chmod +x java_heap_dump - Network accessline 32
curl -O "$TOOLS_URL/java_heap_dump" && chmod +x java_heap_dump - Network accessline 34
# Native Heap Profiling (heapprofd) curl -O "$TOOLS_URL/heap_profile" && chmod +x heap_profile - Network accessline 34
# Native Heap Profiling (heapprofd) curl -O "$TOOLS_URL/heap_profile" && chmod +x heap_profile - Network accessline 35
curl -O "$TOOLS_URL/heap_profile" && chmod +x heap_profile - Network accessline 35
curl -O "$TOOLS_URL/heap_profile" && chmod +x heap_profile - Network accessline 37
# CPU Stack Sampling (traced_perf) curl -O "$TOOLS_URL/cpu_profile" && chmod +x cpu_profile - Network accessline 37
# CPU Stack Sampling (traced_perf) curl -O "$TOOLS_URL/cpu_profile" && chmod +x cpu_profile - Network accessline 38
curl -O "$TOOLS_URL/cpu_profile" && chmod +x cpu_profile - Network accessline 38
curl -O "$TOOLS_URL/cpu_profile" && chmod +x cpu_profile - Network accessline 40
# General Tracing (Ftrace, ATrace, custom configs) curl -O "$TOOLS_URL/record_android_trace" && chmod +x record_android_trace - Network accessline 40
# General Tracing (Ftrace, ATrace, custom configs) curl -O "$TOOLS_URL/record_android_trace" && chmod +x record_android_trace - Network accessline 41
curl -O "$TOOLS_URL/record_android_trace" && chmod +x record_android_trace - Network accessline 41
curl -O "$TOOLS_URL/record_android_trace" && chmod +x record_android_trace - Network accessline 52
Capture a snapshot of all Java objects in a process to investigate memory leaks. Reference docs: <https://perfetto.dev/docs/data-sources/java-heap-profiler>. - Network accessline 52
Capture a snapshot of all Java objects in a process to investigate memory leaks. Reference docs: <https://perfetto.dev/docs/data-sources/java-heap-profiler>. - Network accessline 53
Reference docs: <https://perfetto.dev/docs/data-sources/java-heap-profiler>. - Network accessline 53
Reference docs: <https://perfetto.dev/docs/data-sources/java-heap-profiler>. - Network accessline 60
Track C/C++ memory allocations (malloc/free) to find native leaks. Reference docs: <https://perfetto.dev/docs/data-sources/native-heap-profiler>. - Network accessline 60
Track C/C++ memory allocations (malloc/free) to find native leaks. Reference docs: <https://perfetto.dev/docs/data-sources/native-heap-profiler>. - Network accessline 61
docs: <https://perfetto.dev/docs/data-sources/native-heap-profiler>. - Network accessline 61
docs: <https://perfetto.dev/docs/data-sources/native-heap-profiler>. - Network accessline 71
Track RSS, Swap, and process stats over time. Reference docs: <https://perfetto.dev/docs/data-sources/memory-counters-sys-stats>. - Network accessline 71
Track RSS, Swap, and process stats over time. Reference docs: <https://perfetto.dev/docs/data-sources/memory-counters-sys-stats>. - Network accessline 72
<https://perfetto.dev/docs/data-sources/memory-counters-sys-stats>. - Network accessline 72
<https://perfetto.dev/docs/data-sources/memory-counters-sys-stats>. - Network accessline 81
Identify CPU hotspots in C/C++ or Rust code by periodically sampling callstacks. Reference docs: <https://perfetto.dev/docs/data-sources/cpu-profiler>. - Network accessline 81
Identify CPU hotspots in C/C++ or Rust code by periodically sampling callstacks. Reference docs: <https://perfetto.dev/docs/data-sources/cpu-profiler>. - Network accessline 82
Reference docs: <https://perfetto.dev/docs/data-sources/cpu-profiler>. - Network accessline 82
Reference docs: <https://perfetto.dev/docs/data-sources/cpu-profiler>. - Network accessline 94
Investigate jank, slow transitions, CPU scheduling, and system calls. Reference docs: <https://perfetto.dev/docs/data-sources/ftrace>. - Network accessline 94
Investigate jank, slow transitions, CPU scheduling, and system calls. Reference docs: <https://perfetto.dev/docs/data-sources/ftrace>. - Network accessline 95
docs: <https://perfetto.dev/docs/data-sources/ftrace>. - Network accessline 95
docs: <https://perfetto.dev/docs/data-sources/ftrace>. - Network accessline 115
1. **Read the config reference:** `$SKILL_ROOT/recording/workflows/perfetto-trace-recording/references/trace_config_reference.md` explains config structure and data sources, pointing to exemplar configs in `$SKILL_ROOT/recording/workflows/p - Network accessline 115
1. **Read the config reference:** `$SKILL_ROOT/recording/workflows/perfetto-trace-recording/references/trace_config_reference.md` explains config structure and data sources, pointing to exemplar configs in `$SKILL_ROOT/recording/workflows/p
profilers/android-profiler/recording/workflows/perfetto-trace-recording/references/trace_config_reference.md
- Network accessline 8
A config is a `TraceConfig` protobuf - authoritative schema: <https://raw.githubusercontent.com/google/perfetto/main/protos/perfetto/config/trace_config.proto> - Network accessline 8
A config is a `TraceConfig` protobuf - authoritative schema: <https://raw.githubusercontent.com/google/perfetto/main/protos/perfetto/config/trace_config.proto> - Network accessline 9
<https://raw.githubusercontent.com/google/perfetto/main/protos/perfetto/config/trace_config.proto> - Network accessline 9
<https://raw.githubusercontent.com/google/perfetto/main/protos/perfetto/config/trace_config.proto> - Network accessline 69
The full, authoritative field list for every data source is the generated [TraceConfig reference](https://perfetto.dev/docs/reference/trace-config-proto); - Network accessline 69
The full, authoritative field list for every data source is the generated [TraceConfig reference](https://perfetto.dev/docs/reference/trace-config-proto); - Network accessline 70
[TraceConfig reference](https://perfetto.dev/docs/reference/trace-config-proto); - Network accessline 70
[TraceConfig reference](https://perfetto.dev/docs/reference/trace-config-proto); - Network accessline 72
[perfetto.dev/docs/data-sources](https://perfetto.dev/docs/data-sources/). - Network accessline 72
[perfetto.dev/docs/data-sources](https://perfetto.dev/docs/data-sources/).
profilers/android-profiler/references/perfetto/bin/trace_processor
- Executable scriptline 1
#!/usr/bin/env python3 - Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 6
# You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 6
# You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
# # http://www.apache.org/licenses/LICENSE-2.0 # - Network accessline 7
# # http://www.apache.org/licenses/LICENSE-2.0 # - Network accessline 8
# http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
# http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 38
'file_size': 14854504, 'url': ( 'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/mac-amd64/trace_processor_shell' - Network accessline 38
'file_size': 14854504, 'url': ( 'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/mac-amd64/trace_processor_shell' - Network accessline 39
'url': ( 'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/mac-amd64/trace_processor_shell' ), - Network accessline 39
'url': ( 'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/mac-amd64/trace_processor_shell' ), - Network accessline 40
'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/mac-amd64/trace_processor_shell' - Network accessline 40
'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/mac-amd64/trace_processor_shell' - Network accessline 51
'file_size': 13597976, 'url': ( 'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/mac-arm64/trace_processor_shell' - Network accessline 51
'file_size': 13597976, 'url': ( 'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/mac-arm64/trace_processor_shell' - Network accessline 52
'url': ( 'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/mac-arm64/trace_processor_shell' ), - Network accessline 52
'url': ( 'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/mac-arm64/trace_processor_shell' ), - Network accessline 53
'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/mac-arm64/trace_processor_shell' - Network accessline 53
'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/mac-arm64/trace_processor_shell' - Network accessline 64
'file_size': 14897560, 'url': ( 'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/linux-amd64/trace_processor_shell' - Network accessline 64
'file_size': 14897560, 'url': ( 'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/linux-amd64/trace_processor_shell' - Network accessline 65
'url': ( 'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/linux-amd64/trace_processor_shell' ), - Network accessline 65
'url': ( 'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/linux-amd64/trace_processor_shell' ), - Network accessline 66
'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/linux-amd64/trace_processor_shell' - Network accessline 66
'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/linux-amd64/trace_processor_shell' - Network accessline 77
'file_size': 10962664, 'url': ( 'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/linux-arm/trace_processor_shell' - Network accessline 77
'file_size': 10962664, 'url': ( 'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/linux-arm/trace_processor_shell' - Network accessline 78
'url': ( 'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/linux-arm/trace_processor_shell' ), - Network accessline 78
'url': ( 'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/linux-arm/trace_processor_shell' ), - Network accessline 79
'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/linux-arm/trace_processor_shell' - Network accessline 79
'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/linux-arm/trace_processor_shell' - Network accessline 90
'file_size': 14086160, 'url': ( 'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/linux-arm64/trace_processor_shell' - Network accessline 90
'file_size': 14086160, 'url': ( 'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/linux-arm64/trace_processor_shell' - Network accessline 91
'url': ( 'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/linux-arm64/trace_processor_shell' ), - Network accessline 91
'url': ( 'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/linux-arm64/trace_processor_shell' ), - Network accessline 92
'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/linux-arm64/trace_processor_shell' - Network accessline 92
'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/linux-arm64/trace_processor_shell' - Network accessline 103
'file_size': 10935412, 'url': ( 'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/android-arm/trace_processor_shell' - Network accessline 103
'file_size': 10935412, 'url': ( 'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/android-arm/trace_processor_shell' - Network accessline 104
'url': ( 'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/android-arm/trace_processor_shell' ), - Network accessline 104
'url': ( 'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/android-arm/trace_processor_shell' ), - Network accessline 105
'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/android-arm/trace_processor_shell' - Network accessline 105
'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/android-arm/trace_processor_shell' - Network accessline 114
'file_size': 13838680, 'url': ( 'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/android-arm64/trace_processor_shell' - Network accessline 114
'file_size': 13838680, 'url': ( 'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/android-arm64/trace_processor_shell' - Network accessline 115
'url': ( 'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/android-arm64/trace_processor_shell' ), - Network accessline 115
'url': ( 'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/android-arm64/trace_processor_shell' ), - Network accessline 116
'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/android-arm64/trace_processor_shell' - Network accessline 116
'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/android-arm64/trace_processor_shell' - Network accessline 125
'file_size': 15814036, 'url': ( 'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/android-x86/trace_processor_shell' - Network accessline 125
'file_size': 15814036, 'url': ( 'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/android-x86/trace_processor_shell' - Network accessline 126
'url': ( 'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/android-x86/trace_processor_shell' ), - Network accessline 126
'url': ( 'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/android-x86/trace_processor_shell' ), - Network accessline 127
'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/android-x86/trace_processor_shell' - Network accessline 127
'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/android-x86/trace_processor_shell' - Network accessline 136
'file_size': 14611448, 'url': ( 'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/android-x64/trace_processor_shell' - Network accessline 136
'file_size': 14611448, 'url': ( 'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/android-x64/trace_processor_shell' - Network accessline 137
'url': ( 'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/android-x64/trace_processor_shell' ), - Network accessline 137
'url': ( 'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/android-x64/trace_processor_shell' ), - Network accessline 138
'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/android-x64/trace_processor_shell' - Network accessline 138
'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/android-x64/trace_processor_shell' - Network accessline 147
'file_size': 14439936, 'url': ( 'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/windows-amd64/trace_processor_shell.exe' - Network accessline 147
'file_size': 14439936, 'url': ( 'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/windows-amd64/trace_processor_shell.exe' - Network accessline 148
'url': ( 'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/windows-amd64/trace_processor_shell.exe' ), - Network accessline 148
'url': ( 'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/windows-amd64/trace_processor_shell.exe' ), - Network accessline 149
'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/windows-amd64/trace_processor_shell.exe' - Network accessline 149
'https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v58.3/windows-amd64/trace_processor_shell.exe' - Network accessline 166
# You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 166
# You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 167
# # http://www.apache.org/licenses/LICENSE-2.0 # - Network accessline 167
# # http://www.apache.org/licenses/LICENSE-2.0 # - Network accessline 168
# http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 168
# http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 188
'file_name': 'traceconv', 'file_size': 7087080, 'url': https://commondatastorage.googleapis.com/.../trace_to_text', - Network accessline 188
'file_name': 'traceconv', 'file_size': 7087080, 'url': https://commondatastorage.googleapis.com/.../trace_to_text', - Network accessline 189
'file_size': 7087080, 'url': https://commondatastorage.googleapis.com/.../trace_to_text', 'sha256': 7d957c005b0dc130f5bd855d6cec27e060d38841b320d04840afc569f9087490', - Network accessline 189
'file_size': 7087080, 'url': https://commondatastorage.googleapis.com/.../trace_to_text', 'sha256': 7d957c005b0dc130f5bd855d6cec27e060d38841b320d04840afc569f9087490', - Network accessline 190
'url': https://commondatastorage.googleapis.com/.../trace_to_text', - Network accessline 190
'url': https://commondatastorage.googleapis.com/.../trace_to_text', - Network accessline 242
# Use a unique random file to guard against concurrent executions. # See https://github.com/google/perfetto/issues/786 . - Network accessline 242
# Use a unique random file to guard against concurrent executions. # See https://github.com/google/perfetto/issues/786 . - Network accessline 243
# See https://github.com/google/perfetto/issues/786 . - Network accessline 243
# See https://github.com/google/perfetto/issues/786 . - Network accessline 278
raise Exception( 'No prebuilts available for %s-%s\n' % (plat, machine) + 'See https://perfetto.dev/docs/contributing/build-instructions' - Network accessline 278
raise Exception( 'No prebuilts available for %s-%s\n' % (plat, machine) + 'See https://perfetto.dev/docs/contributing/build-instructions' - Network accessline 279
'No prebuilts available for %s-%s\n' % (plat, machine) + 'See https://perfetto.dev/docs/contributing/build-instructions' ) - Network accessline 279
'No prebuilts available for %s-%s\n' % (plat, machine) + 'See https://perfetto.dev/docs/contributing/build-instructions' ) - Network accessline 280
+ 'See https://perfetto.dev/docs/contributing/build-instructions' - Network accessline 280
+ 'See https://perfetto.dev/docs/contributing/build-instructions'
profilers/android-profiler/references/perfetto/sql.md
- Network accessline 7
The `trace_processor` binary is what every other Perfetto analysis tool runs on top of, including the Perfetto UI. Reference docs: <https://perfetto.dev/docs/analysis/trace-processor>. - Network accessline 7
The `trace_processor` binary is what every other Perfetto analysis tool runs on top of, including the Perfetto UI. Reference docs: <https://perfetto.dev/docs/analysis/trace-processor>. - Network accessline 8
runs on top of, including the Perfetto UI. Reference docs: <https://perfetto.dev/docs/analysis/trace-processor>. > **Prerequisite --- `trace_processor` must be invokable.** Before - Network accessline 8
runs on top of, including the Perfetto UI. Reference docs: <https://perfetto.dev/docs/analysis/trace-processor>. > **Prerequisite --- `trace_processor` must be invokable.** Before - Network accessline 9
<https://perfetto.dev/docs/analysis/trace-processor>. - Network accessline 9
<https://perfetto.dev/docs/analysis/trace-processor>. - Network accessline 44
`TRACE_FILE` can be a local path, an `http(s)://` URL, or a Perfetto UI share link (`https://ui.perfetto.dev/#!/?s=<hash>`) --- in the last two - Network accessline 44
`TRACE_FILE` can be a local path, an `http(s)://` URL, or a Perfetto UI share link (`https://ui.perfetto.dev/#!/?s=<hash>`) --- in the last two - Network accessline 45
share link (`https://ui.perfetto.dev/#!/?s=<hash>`) --- in the last two - Network accessline 45
share link (`https://ui.perfetto.dev/#!/?s=<hash>`) --- in the last two - Network accessline 110
Static reference for the public surface (does not require a running trace_processor): <https://perfetto.dev/docs/analysis/sql-tables>. - Network accessline 110
Static reference for the public surface (does not require a running trace_processor): <https://perfetto.dev/docs/analysis/sql-tables>. - Network accessline 111
trace_processor): <https://perfetto.dev/docs/analysis/sql-tables>. - Network accessline 111
trace_processor): <https://perfetto.dev/docs/analysis/sql-tables>. - Network accessline 115
Most useful queries are *much* shorter when you build on stdlib modules instead of joining raw tables yourself. Generated stdlib reference: <https://perfetto.dev/docs/analysis/stdlib-docs>. - Network accessline 115
Most useful queries are *much* shorter when you build on stdlib modules instead of joining raw tables yourself. Generated stdlib reference: <https://perfetto.dev/docs/analysis/stdlib-docs>. - Network accessline 117
<https://perfetto.dev/docs/analysis/stdlib-docs>. - Network accessline 117
<https://perfetto.dev/docs/analysis/stdlib-docs>. - Network accessline 236
- Language tour: <https://perfetto.dev/docs/analysis/perfetto-sql-getting-started> - Network accessline 236
- Language tour: <https://perfetto.dev/docs/analysis/perfetto-sql-getting-started> - Network accessline 237
- Trace processor reference: <https://perfetto.dev/docs/analysis/trace-processor> - Network accessline 237
- Trace processor reference: <https://perfetto.dev/docs/analysis/trace-processor> - Network accessline 238
- Generated table reference: <https://perfetto.dev/docs/analysis/sql-tables> - Network accessline 238
- Generated table reference: <https://perfetto.dev/docs/analysis/sql-tables> - Network accessline 239
- Generated stdlib reference: <https://perfetto.dev/docs/analysis/stdlib-docs> - Network accessline 239
- Generated stdlib reference: <https://perfetto.dev/docs/analysis/stdlib-docs>
security/android-permissions-security/SKILL.md
- Network accessline 113
<resources xmlns:tools="http://schemas.android.com/tools"> - Network accessline 113
<resources xmlns:tools="http://schemas.android.com/tools"> - Network accessline 426
When implementing photo or media selection, you must follow the instructions in the [Photo Picker API guide](https://developer.android.com/training/data-storage/shared/photopicker) to avoid requesting broad storage permissions. - Network accessline 426
When implementing photo or media selection, you must follow the instructions in the [Photo Picker API guide](https://developer.android.com/training/data-storage/shared/photopicker) to avoid requesting broad storage permissions. - Network accessline 427
the [Photo Picker API guide](https://developer.android.com/training/data-storage/shared/photopicker) to avoid requesting broad storage permissions. - Network accessline 427
the [Photo Picker API guide](https://developer.android.com/training/data-storage/shared/photopicker) to avoid requesting broad storage permissions.
security/android-permissions-security/references/android/guide/topics/manifest/permission-element.md
- Network accessline 14
contained in: : `https://developer.android.com/guide/topics/manifest/manifest-element` - Network accessline 14
contained in: : `https://developer.android.com/guide/topics/manifest/manifest-element` - Network accessline 15
: `https://developer.android.com/guide/topics/manifest/manifest-element` - Network accessline 15
: `https://developer.android.com/guide/topics/manifest/manifest-element` - Network accessline 18
: Declares a security permission used to limit access to specific components or features of this or other applications. For more information about how permissions work, see the [Permissions](https://developer.android.com/guide/top - Network accessline 18
: Declares a security permission used to limit access to specific components or features of this or other applications. For more information about how permissions work, see the [Permissions](https://developer.android.com/guide/top - Network accessline 20
For more information about how permissions work, see the [Permissions](https://developer.android.com/guide/topics/manifest/manifest-intro#perms) section in the app manifest overview and [Security tips](https://developer.android.com/guide/to - Network accessline 20
For more information about how permissions work, see the [Permissions](https://developer.android.com/guide/topics/manifest/manifest-intro#perms) section in the app manifest overview and [Security tips](https://developer.android.com/guide/to - Network accessline 49
: The name to be used in code to refer to the permission, such as in a `https://developer.android.com/guide/topics/manifest/uses-permission-element` element or the - Network accessline 49
: The name to be used in code to refer to the permission, such as in a `https://developer.android.com/guide/topics/manifest/uses-permission-element` element or the - Network accessline 50
code to refer to the permission, such as in a `https://developer.android.com/guide/topics/manifest/uses-permission-element` element or the `permission` attributes of application components. - Network accessline 50
code to refer to the permission, such as in a `https://developer.android.com/guide/topics/manifest/uses-permission-element` element or the `permission` attributes of application components. - Network accessline 51
`https://developer.android.com/guide/topics/manifest/uses-permission-element` element or the - Network accessline 51
`https://developer.android.com/guide/topics/manifest/uses-permission-element` element or the - Network accessline 71
: Assigns this permission to a group. The value of this attribute is the name of the group, which is declared with the `https://developer.android.com/guide/topics/manifest/permission-group-element` element in this - Network accessline 71
: Assigns this permission to a group. The value of this attribute is the name of the group, which is declared with the `https://developer.android.com/guide/topics/manifest/permission-group-element` element in this - Network accessline 72
the name of the group, which is declared with the `https://developer.android.com/guide/topics/manifest/permission-group-element` element in this or another application. If this attribute isn't set, the permission - Network accessline 72
the name of the group, which is declared with the `https://developer.android.com/guide/topics/manifest/permission-group-element` element in this or another application. If this attribute isn't set, the permission - Network accessline 73
`https://developer.android.com/guide/topics/manifest/permission-group-element` element in this - Network accessline 73
`https://developer.android.com/guide/topics/manifest/permission-group-element` element in this - Network accessline 92
The following table shows all base permission types. For a list of flags, see `https://developer.android.com/reference/android/R.attr#protectionLevel`. - Network accessline 92
The following table shows all base permission types. For a list of flags, see `https://developer.android.com/reference/android/R.attr#protectionLevel`. - Network accessline 93
`https://developer.android.com/reference/android/R.attr#protectionLevel`. - Network accessline 93
`https://developer.android.com/reference/android/R.attr#protectionLevel`. - Network accessline 98
| `"dangerous"` | A higher-risk permission that gives a requesting application access to private user data or control over the device that can negatively impact the user. Because this type of permission introduces potential risk, the system - Network accessline 98
| `"dangerous"` | A higher-risk permission that gives a requesting application access to private user data or control over the device that can negatively impact the user. Because this type of permission introduces potential risk, the system - Network accessline 99
| `"signature"` | A permission that the system grants only if the requesting application is signed with the same certificate as the application that declared the permission. If the certificates match, the system automatically grants the per - Network accessline 99
| `"signature"` | A permission that the system grants only if the requesting application is signed with the same certificate as the application that declared the permission. If the certificates match, the system automatically grants the per - Network accessline 100
| `"knownSigner"` | A permission that the system grants only if the requesting application is signed with [an allowed certificate](https://developer.android.com/guide/topics/permissions/defining#grant-signature-permissions). If the requeste - Network accessline 100
| `"knownSigner"` | A permission that the system grants only if the requesting application is signed with [an allowed certificate](https://developer.android.com/guide/topics/permissions/defining#grant-signature-permissions). If the requeste - Network accessline 106
see also: : `https://developer.android.com/guide/topics/manifest/uses-permission-element` - Network accessline 106
see also: : `https://developer.android.com/guide/topics/manifest/uses-permission-element` - Network accessline 107
: `https://developer.android.com/guide/topics/manifest/uses-permission-element` - Network accessline 107
: `https://developer.android.com/guide/topics/manifest/uses-permission-element` - Network accessline 109
`https://developer.android.com/guide/topics/manifest/permission-tree-element` - Network accessline 109
`https://developer.android.com/guide/topics/manifest/permission-tree-element` - Network accessline 111
`https://developer.android.com/guide/topics/manifest/permission-group-element` - Network accessline 111
`https://developer.android.com/guide/topics/manifest/permission-group-element`
security/android-permissions-security/references/android/guide/topics/permissions/overview.md
- Network accessline 6
[Video](https://www.youtube.com/watch?v=zCAx4WZ98rs) - Network accessline 6
[Video](https://www.youtube.com/watch?v=zCAx4WZ98rs) - Network accessline 10
permissions, and some best practices for using permissions in your app. Other pages explain how to [minimize your app's requests for permissions](https://developer.android.com/training/permissions/evaluating), [declare - Network accessline 10
permissions, and some best practices for using permissions in your app. Other pages explain how to [minimize your app's requests for permissions](https://developer.android.com/training/permissions/evaluating), [declare - Network accessline 11
pages explain how to [minimize your app's requests for permissions](https://developer.android.com/training/permissions/evaluating), [declare permissions](https://developer.android.com/training/permissions/declaring), [request runtime - Network accessline 11
pages explain how to [minimize your app's requests for permissions](https://developer.android.com/training/permissions/evaluating), [declare permissions](https://developer.android.com/training/permissions/declaring), [request runtime - Network accessline 12
permissions](https://developer.android.com/training/permissions/evaluating), [declare - Network accessline 12
permissions](https://developer.android.com/training/permissions/evaluating), [declare - Network accessline 13
permissions](https://developer.android.com/training/permissions/declaring), [request runtime - Network accessline 13
permissions](https://developer.android.com/training/permissions/declaring), [request runtime - Network accessline 14
permissions](https://developer.android.com/training/permissions/requesting), and [restrict how other apps can - Network accessline 14
permissions](https://developer.android.com/training/permissions/requesting), and [restrict how other apps can - Network accessline 15
interact](https://developer.android.com/training/permissions/restrict-interactions) with your app's - Network accessline 15
interact](https://developer.android.com/training/permissions/restrict-interactions) with your app's - Network accessline 18
To view a complete list of Android app permissions, visit the [permissions API reference page](https://developer.android.com/reference/android/Manifest.permission). - Network accessline 18
To view a complete list of Android app permissions, visit the [permissions API reference page](https://developer.android.com/reference/android/Manifest.permission). - Network accessline 19
reference page](https://developer.android.com/reference/android/Manifest.permission). - Network accessline 19
reference page](https://developer.android.com/reference/android/Manifest.permission). - Network accessline 21
To view some sample apps that demonstrate the permissions workflow, visit the [Android permissions samples repository](https://github.com/android/platform-samples/tree/main/samples/privacy/permissions) - Network accessline 21
To view some sample apps that demonstrate the permissions workflow, visit the [Android permissions samples repository](https://github.com/android/platform-samples/tree/main/samples/privacy/permissions) - Network accessline 22
[Android permissions samples repository](https://github.com/android/platform-samples/tree/main/samples/privacy/permissions) on GitHub. - Network accessline 22
[Android permissions samples repository](https://github.com/android/platform-samples/tree/main/samples/privacy/permissions) on GitHub. - Network accessline 23
repository](https://github.com/android/platform-samples/tree/main/samples/privacy/permissions) - Network accessline 23
repository](https://github.com/android/platform-samples/tree/main/samples/privacy/permissions) - Network accessline 29
restricted actions, determine whether you can get the information or perform the actions [without needing to declare permissions](https://developer.android.com/training/permissions/evaluating). You can fulfill many use cases - Network accessline 29
restricted actions, determine whether you can get the information or perform the actions [without needing to declare permissions](https://developer.android.com/training/permissions/evaluating). You can fulfill many use cases - Network accessline 30
actions [without needing to declare permissions](https://developer.android.com/training/permissions/evaluating). You can fulfill many use cases in your app, such as taking photos, pausing media playback, and displaying - Network accessline 30
actions [without needing to declare permissions](https://developer.android.com/training/permissions/evaluating). You can fulfill many use cases in your app, such as taking photos, pausing media playback, and displaying - Network accessline 31
permissions](https://developer.android.com/training/permissions/evaluating). You can fulfill many use cases - Network accessline 31
permissions](https://developer.android.com/training/permissions/evaluating). You can fulfill many use cases - Network accessline 35
If you decide that your app must access restricted data or perform restricted actions to fulfill a use case, declare the appropriate permissions. Some permissions, known as [install-time permissions](https://developer.android.com/guide/topi - Network accessline 35
If you decide that your app must access restricted data or perform restricted actions to fulfill a use case, declare the appropriate permissions. Some permissions, known as [install-time permissions](https://developer.android.com/guide/topi - Network accessline 36
actions to fulfill a use case, declare the appropriate permissions. Some permissions, known as [install-time permissions](https://developer.android.com/guide/topics/permissions/overview#install-time), are automatically granted when your app - Network accessline 36
actions to fulfill a use case, declare the appropriate permissions. Some permissions, known as [install-time permissions](https://developer.android.com/guide/topics/permissions/overview#install-time), are automatically granted when your app - Network accessline 37
permissions, known as [install-time permissions](https://developer.android.com/guide/topics/permissions/overview#install-time), are - Network accessline 37
permissions, known as [install-time permissions](https://developer.android.com/guide/topics/permissions/overview#install-time), are - Network accessline 38
automatically granted when your app is installed. Other permissions, known as [runtime permissions](https://developer.android.com/guide/topics/permissions/overview#runtime), require your app to go a step further and request the permission a - Network accessline 38
automatically granted when your app is installed. Other permissions, known as [runtime permissions](https://developer.android.com/guide/topics/permissions/overview#runtime), require your app to go a step further and request the permission a - Network accessline 39
[runtime permissions](https://developer.android.com/guide/topics/permissions/overview#runtime), require your app to go a step further and - Network accessline 39
[runtime permissions](https://developer.android.com/guide/topics/permissions/overview#runtime), require your app to go a step further and - Network accessline 42
Figure 1 illustrates the workflow for using app permissions:  **Figure 1.** High-level workflow for using permissions on Android. - Network accessline 42
Figure 1 illustrates the workflow for using app permissions:  **Figure 1.** High-level workflow for using permissions on Android. - Network accessline 43
 **Figure 1.** High-level workflow for using permissions on Android. - Network accessline 43
 **Figure 1.** High-level workflow for using permissions on Android. - Network accessline 51
your app that permission. The protection level for each permission is based on its type and is shown on the [permissions API reference](https://developer.android.com/reference/android/Manifest.permission) page. - Network accessline 51
your app that permission. The protection level for each permission is based on its type and is shown on the [permissions API reference](https://developer.android.com/reference/android/Manifest.permission) page. - Network accessline 53
[permissions API reference](https://developer.android.com/reference/android/Manifest.permission) page. - Network accessline 53
[permissions API reference](https://developer.android.com/reference/android/Manifest.permission) page. - Network accessline 57
 **Figure - Network accessline 57
 **Figure - Network accessline 58
right image shows a pop-up dialog that contains 2 options: allow and deny.](https://developer.android.com/static/images/training/permissions/install-time.svg) **Figure 2.** The list of an app's install-time permissions, which appears in an - Network accessline 58
right image shows a pop-up dialog that contains 2 options: allow and deny.](https://developer.android.com/static/images/training/permissions/install-time.svg) **Figure 2.** The list of an app's install-time permissions, which appears in an - Network accessline 96
 **Figure 3.** The system permission prompt that appears when your app requests a runtime permission. - Network accessline 96
 **Figure 3.** The system permission prompt that appears when your app requests a runtime permission. - Network accessline 100
restricted actions that more substantially affect the system and other apps. Therefore, you need to [request runtime permissions](https://developer.android.com/training/permissions/requesting) in your app before you can access - Network accessline 100
restricted actions that more substantially affect the system and other apps. Therefore, you need to [request runtime permissions](https://developer.android.com/training/permissions/requesting) in your app before you can access - Network accessline 101
Therefore, you need to [request runtime permissions](https://developer.android.com/training/permissions/requesting) in your app before you can access the restricted data or perform restricted actions. Don't assume - Network accessline 101
Therefore, you need to [request runtime permissions](https://developer.android.com/training/permissions/requesting) in your app before you can access the restricted data or perform restricted actions. Don't assume - Network accessline 102
permissions](https://developer.android.com/training/permissions/requesting) in your app before you can access - Network accessline 102
permissions](https://developer.android.com/training/permissions/requesting) in your app before you can access - Network accessline 115
The microphone and camera provide access to particularly sensitive information. Therefore, the system helps you [explain why your app accesses this information](https://developer.android.com/training/permissions/explaining-access). - Network accessline 115
The microphone and camera provide access to particularly sensitive information. Therefore, the system helps you [explain why your app accesses this information](https://developer.android.com/training/permissions/explaining-access). - Network accessline 117
information](https://developer.android.com/training/permissions/explaining-access). - Network accessline 117
information](https://developer.android.com/training/permissions/explaining-access). - Network accessline 132
Learn more about how to [request special permissions](https://developer.android.com/training/permissions/requesting-special). - Network accessline 132
Learn more about how to [request special permissions](https://developer.android.com/training/permissions/requesting-special). - Network accessline 133
permissions](https://developer.android.com/training/permissions/requesting-special). - Network accessline 133
permissions](https://developer.android.com/training/permissions/requesting-special). - Network accessline 139
Permissions can belong to [permission groups](https://developer.android.com/guide/topics/manifest/permission-group-element.html). - Network accessline 139
Permissions can belong to [permission groups](https://developer.android.com/guide/topics/manifest/permission-group-element.html). - Network accessline 153
App permissions build on [system security features](https://source.android.com/security/features) and help Android support - Network accessline 153
App permissions build on [system security features](https://source.android.com/security/features) and help Android support - Network accessline 154
features](https://source.android.com/security/features) and help Android support - Network accessline 154
features](https://source.android.com/security/features) and help Android support - Network accessline 162
effectively in your app. For more details on how you can work with permissions on Android, visit the [app permissions best practices](https://developer.android.com/training/permissions/usage-notes) page. - Network accessline 162
effectively in your app. For more details on how you can work with permissions on Android, visit the [app permissions best practices](https://developer.android.com/training/permissions/usage-notes) page. - Network accessline 164
practices](https://developer.android.com/training/permissions/usage-notes) page. - Network accessline 164
practices](https://developer.android.com/training/permissions/usage-notes) page. - Network accessline 169
only the permissions that it needs to complete that action. Depending on how you are using the permissions, there might be an [alternative way to fulfill your app's use case](https://developer.android.com/training/permissions/evaluating) wi - Network accessline 169
only the permissions that it needs to complete that action. Depending on how you are using the permissions, there might be an [alternative way to fulfill your app's use case](https://developer.android.com/training/permissions/evaluating) wi - Network accessline 170
are using the permissions, there might be an [alternative way to fulfill your app's use case](https://developer.android.com/training/permissions/evaluating) without relying on access to sensitive information. - Network accessline 170
are using the permissions, there might be an [alternative way to fulfill your app's use case](https://developer.android.com/training/permissions/evaluating) without relying on access to sensitive information. - Network accessline 171
app's use case](https://developer.android.com/training/permissions/evaluating) without relying on access to - Network accessline 171
app's use case](https://developer.android.com/training/permissions/evaluating) without relying on access to - Network accessline 196
When you access sensitive data or hardware, such as the camera or microphone, provide a continuous indication in your app if the system doesn't already [provide these indicators](https://developer.android.com/training/permissions/explaining - Network accessline 196
When you access sensitive data or hardware, such as the camera or microphone, provide a continuous indication in your app if the system doesn't already [provide these indicators](https://developer.android.com/training/permissions/explaining - Network accessline 197
provide a continuous indication in your app if the system doesn't already [provide these indicators](https://developer.android.com/training/permissions/explaining-access#indicators). This reminder helps users understand exactly when your ap - Network accessline 197
provide a continuous indication in your app if the system doesn't already [provide these indicators](https://developer.android.com/training/permissions/explaining-access#indicators). This reminder helps users understand exactly when your ap - Network accessline 198
[provide these indicators](https://developer.android.com/training/permissions/explaining-access#indicators). - Network accessline 198
[provide these indicators](https://developer.android.com/training/permissions/explaining-access#indicators). - Network accessline 205
components can restrict which other apps can interact with your app, as described on the page about how to [restrict interactions with other apps](https://developer.android.com/training/permissions/restrict-interactions). - Network accessline 205
components can restrict which other apps can interact with your app, as described on the page about how to [restrict interactions with other apps](https://developer.android.com/training/permissions/restrict-interactions). - Network accessline 207
apps](https://developer.android.com/training/permissions/restrict-interactions). - Network accessline 207
apps](https://developer.android.com/training/permissions/restrict-interactions).
security/android-permissions-security/references/android/privacy-and-security/risks/sender-of-pending-intents.md
- Network accessline 3
**OWASP category:** [MASVS-CODE: Code Quality](https://mas.owasp.org/MASVS/10-MASVS-CODE) - Network accessline 3
**OWASP category:** [MASVS-CODE: Code Quality](https://mas.owasp.org/MASVS/10-MASVS-CODE) - Network accessline 7
Using [`PendingIntent.getCreator*()`](https://developer.android.com/reference/android/app/PendingIntent#public-methods_1) or [`PendingIntent.getTarget*()`](https://developer.android.com/reference/android/app/PendingIntent#public-methods_1) - Network accessline 7
Using [`PendingIntent.getCreator*()`](https://developer.android.com/reference/android/app/PendingIntent#public-methods_1) or [`PendingIntent.getTarget*()`](https://developer.android.com/reference/android/app/PendingIntent#public-methods_1) - Network accessline 10
[`PendingIntent.getCreator*()`](https://developer.android.com/reference/android/app/PendingIntent#public-methods_1) or - Network accessline 10
[`PendingIntent.getCreator*()`](https://developer.android.com/reference/android/app/PendingIntent#public-methods_1) or - Network accessline 11
[`PendingIntent.getTarget*()`](https://developer.android.com/reference/android/app/PendingIntent#public-methods_1) returns the PendingIntent's - Network accessline 11
[`PendingIntent.getTarget*()`](https://developer.android.com/reference/android/app/PendingIntent#public-methods_1) returns the PendingIntent's - Network accessline 17
- from [`NotificationListenerService`](https://developer.android.com/reference/android/service/notification/NotificationListenerService) - Network accessline 17
- from [`NotificationListenerService`](https://developer.android.com/reference/android/service/notification/NotificationListenerService) - Network accessline 20
An example of a legitimate use of [`PendingIntent.getCreator*()`](https://developer.android.com/reference/android/app/PendingIntent#public-methods_1) or [`PendingIntent.getTarget*()`](https://developer.android.com/reference/android/app/Pend - Network accessline 20
An example of a legitimate use of [`PendingIntent.getCreator*()`](https://developer.android.com/reference/android/app/PendingIntent#public-methods_1) or [`PendingIntent.getTarget*()`](https://developer.android.com/reference/android/app/Pend - Network accessline 37
Any type of authentication or authorization logic performed when receiving a PendingIntent must not be based on assumptions regarding the PendingIntent's creator identified using either [`PendingIntent.getCreator*()`](https://developer.andr - Network accessline 37
Any type of authentication or authorization logic performed when receiving a PendingIntent must not be based on assumptions regarding the PendingIntent's creator identified using either [`PendingIntent.getCreator*()`](https://developer.andr - Network accessline 38
PendingIntent must not be based on assumptions regarding the PendingIntent's creator identified using either [`PendingIntent.getCreator*()`](https://developer.android.com/reference/android/app/PendingIntent#public-methods_1) or [`PendingInt - Network accessline 38
PendingIntent must not be based on assumptions regarding the PendingIntent's creator identified using either [`PendingIntent.getCreator*()`](https://developer.android.com/reference/android/app/PendingIntent#public-methods_1) or [`PendingInt - Network accessline 39
creator identified using either [`PendingIntent.getCreator*()`](https://developer.android.com/reference/android/app/PendingIntent#public-methods_1) - Network accessline 39
creator identified using either [`PendingIntent.getCreator*()`](https://developer.android.com/reference/android/app/PendingIntent#public-methods_1) - Network accessline 40
or [`PendingIntent.getTarget*()`](https://developer.android.com/reference/android/app/PendingIntent#public-methods_1). - Network accessline 40
or [`PendingIntent.getTarget*()`](https://developer.android.com/reference/android/app/PendingIntent#public-methods_1). - Network accessline 44
If you need to authenticate the caller, instead of using PendingIntent, you should use a Service or ContentProvider -- both allow fetching the caller UID with [Binder.getCallingUid()](https://developer.android.com/reference/android/os/Binde - Network accessline 44
If you need to authenticate the caller, instead of using PendingIntent, you should use a Service or ContentProvider -- both allow fetching the caller UID with [Binder.getCallingUid()](https://developer.android.com/reference/android/os/Binde - Network accessline 45
should use a Service or ContentProvider -- both allow fetching the caller UID with [Binder.getCallingUid()](https://developer.android.com/reference/android/os/Binder#getCallingUid()) when you are in the context of dispatching an incoming IP - Network accessline 45
should use a Service or ContentProvider -- both allow fetching the caller UID with [Binder.getCallingUid()](https://developer.android.com/reference/android/os/Binder#getCallingUid()) when you are in the context of dispatching an incoming IP - Network accessline 46
with [Binder.getCallingUid()](https://developer.android.com/reference/android/os/Binder#getCallingUid()) when you are in the context of dispatching an - Network accessline 46
with [Binder.getCallingUid()](https://developer.android.com/reference/android/os/Binder#getCallingUid()) when you are in the context of dispatching an - Network accessline 48
[PackageManager.getPackagesForUid()](https://developer.android.com/reference/android/content/pm/PackageManager#getPackagesForUid(int)). - Network accessline 48
[PackageManager.getPackagesForUid()](https://developer.android.com/reference/android/content/pm/PackageManager#getPackagesForUid(int)). - Network accessline 50
Another approach, available from API level 34, would be to use [BroadcastReceiver.getSentFromUid()](https://developer.android.com/reference/android/content/BroadcastReceiver#getSentFromUid()) or - Network accessline 50
Another approach, available from API level 34, would be to use [BroadcastReceiver.getSentFromUid()](https://developer.android.com/reference/android/content/BroadcastReceiver#getSentFromUid()) or - Network accessline 51
[BroadcastReceiver.getSentFromUid()](https://developer.android.com/reference/android/content/BroadcastReceiver#getSentFromUid()) or - Network accessline 51
[BroadcastReceiver.getSentFromUid()](https://developer.android.com/reference/android/content/BroadcastReceiver#getSentFromUid()) or - Network accessline 52
[BroadcastReceiver.getSentFromPackage()](https://developer.android.com/reference/android/content/BroadcastReceiver#getSentFromPackage()) if the sender opted in to sharing - Network accessline 52
[BroadcastReceiver.getSentFromPackage()](https://developer.android.com/reference/android/content/BroadcastReceiver#getSentFromPackage()) if the sender opted in to sharing - Network accessline 53
identity during broadcast using [BroadcastOptions.isShareIdentityEnabled()](https://developer.android.com/reference/android/app/BroadcastOptions#isShareIdentityEnabled()). - Network accessline 53
identity during broadcast using [BroadcastOptions.isShareIdentityEnabled()](https://developer.android.com/reference/android/app/BroadcastOptions#isShareIdentityEnabled()). - Network accessline 61
- [Pending Intent](https://developer.android.com/reference/android/app/PendingIntent) - Network accessline 61
- [Pending Intent](https://developer.android.com/reference/android/app/PendingIntent)
security/android-permissions-security/references/android/training/permissions/requesting.md
- Network accessline 1
[Video](https://www.youtube.com/watch?v=x38dYUm7tCY) - Network accessline 1
[Video](https://www.youtube.com/watch?v=x38dYUm7tCY) - Network accessline 3
Every Android app runs in a limited-access sandbox. If your app needs to use resources or information outside of its own sandbox, you can [declare a runtime permission](https://developer.android.com/training/permissions/declaring) and set u - Network accessline 3
Every Android app runs in a limited-access sandbox. If your app needs to use resources or information outside of its own sandbox, you can [declare a runtime permission](https://developer.android.com/training/permissions/declaring) and set u - Network accessline 4
resources or information outside of its own sandbox, you can [declare a runtime permission](https://developer.android.com/training/permissions/declaring) and set up a permission request that provides this access. These steps are part of the - Network accessline 4
resources or information outside of its own sandbox, you can [declare a runtime permission](https://developer.android.com/training/permissions/declaring) and set up a permission request that provides this access. These steps are part of the - Network accessline 5
runtime permission](https://developer.android.com/training/permissions/declaring) and set up a permission request that provides this - Network accessline 5
runtime permission](https://developer.android.com/training/permissions/declaring) and set up a permission request that provides this - Network accessline 6
access. These steps are part of the [workflow for using permissions](https://developer.android.com/training/basics/permissions#workflow). - Network accessline 6
access. These steps are part of the [workflow for using permissions](https://developer.android.com/training/basics/permissions#workflow). - Network accessline 8
If you declare any [dangerous permissions](https://developer.android.com/guide/topics/permissions/overview#dangerous_permissions), and if your app is installed on - Network accessline 8
If you declare any [dangerous permissions](https://developer.android.com/guide/topics/permissions/overview#dangerous_permissions), and if your app is installed on - Network accessline 17
> [!NOTE] > **Note:** Some permissions guard access to system resources that are particularly sensitive or are not directly related to user privacy. There's a [different > process for requesting these special permissions](https://developer. - Network accessline 17
> [!NOTE] > **Note:** Some permissions guard access to system resources that are particularly sensitive or are not directly related to user privacy. There's a [different > process for requesting these special permissions](https://developer. - Network accessline 19
> process for requesting these special permissions](https://developer.android.com/training/permissions/requesting-special). - Network accessline 19
> process for requesting these special permissions](https://developer.android.com/training/permissions/requesting-special). - Network accessline 32
Before you declare and request runtime permissions in your app, [evaluate whether your app needs to do so](https://developer.android.com/training/permissions/evaluating). You can fulfill many use cases in your - Network accessline 32
Before you declare and request runtime permissions in your app, [evaluate whether your app needs to do so](https://developer.android.com/training/permissions/evaluating). You can fulfill many use cases in your - Network accessline 33
whether your app needs to do so](https://developer.android.com/training/permissions/evaluating). You can fulfill many use cases in your - Network accessline 33
whether your app needs to do so](https://developer.android.com/training/permissions/evaluating). You can fulfill many use cases in your - Network accessline 40
1. [**Declare** the permissions](https://developer.android.com/training/permissions/declaring) your app might need to request in your app's manifest file. - Network accessline 40
1. [**Declare** the permissions](https://developer.android.com/training/permissions/declaring) your app might need to request in your app's manifest file. - Network accessline 41
2. **Design** your app's user experience (UX) so that specific actions in your app are associated with specific runtime permissions. Let users know which actions might require them to grant permission for your app to access private user dat - Network accessline 41
2. **Design** your app's user experience (UX) so that specific actions in your app are associated with specific runtime permissions. Let users know which actions might require them to grant permission for your app to access private user dat - Network accessline 42
3. [**Wait** for the user](https://developer.android.com/training/permissions/requesting#principles) to invoke the task or action in your app that requires access to specific private user data. At that time, your app can request the runtime - Network accessline 42
3. [**Wait** for the user](https://developer.android.com/training/permissions/requesting#principles) to invoke the task or action in your app that requires access to specific private user data. At that time, your app can request the runtime - Network accessline 43
4. [**Check** whether the user has already granted](https://developer.android.com/training/permissions/declaring) - Network accessline 43
4. [**Check** whether the user has already granted](https://developer.android.com/training/permissions/declaring) - Network accessline 48
You must check whether you have a permission every time you perform an operation that requires that permission. 5. [**Check** whether your app should show a rationale](https://developer.android.com/training/permissions/requesting#explain - Network accessline 48
You must check whether you have a permission every time you perform an operation that requires that permission. 5. [**Check** whether your app should show a rationale](https://developer.android.com/training/permissions/requesting#explain - Network accessline 49
operation that requires that permission. 5. [**Check** whether your app should show a rationale](https://developer.android.com/training/permissions/requesting#explain) to the user, explaining why your app needs the user to grant a partic - Network accessline 49
operation that requires that permission. 5. [**Check** whether your app should show a rationale](https://developer.android.com/training/permissions/requesting#explain) to the user, explaining why your app needs the user to grant a partic - Network accessline 50
5. [**Check** whether your app should show a rationale](https://developer.android.com/training/permissions/requesting#explain) to the user, - Network accessline 50
5. [**Check** whether your app should show a rationale](https://developer.android.com/training/permissions/requesting#explain) to the user, - Network accessline 58
app can provide to the user if they grant the runtime permission. After the user acknowledges the rationale, continue to the next step. 6. [**Request** the runtime permission](https://developer.android.com/training/permissions/requesting - Network accessline 58
app can provide to the user if they grant the runtime permission. After the user acknowledges the rationale, continue to the next step. 6. [**Request** the runtime permission](https://developer.android.com/training/permissions/requesting - Network accessline 59
user acknowledges the rationale, continue to the next step. 6. [**Request** the runtime permission](https://developer.android.com/training/permissions/requesting#request-permission) your app requires to access the private user data. The - Network accessline 59
user acknowledges the rationale, continue to the next step. 6. [**Request** the runtime permission](https://developer.android.com/training/permissions/requesting#request-permission) your app requires to access the private user data. The - Network accessline 60
6. [**Request** the runtime permission](https://developer.android.com/training/permissions/requesting#request-permission) your app requires - Network accessline 60
6. [**Request** the runtime permission](https://developer.android.com/training/permissions/requesting#request-permission) your app requires - Network accessline 62
prompt, such as the one shown on the [permissions overview page](https://developer.android.com/guide/topics/permissions/overview#fig-runtime). - Network accessline 62
prompt, such as the one shown on the [permissions overview page](https://developer.android.com/guide/topics/permissions/overview#fig-runtime). - Network accessline 67
8. If the user granted the permission to your app, you can **access** the private user data. If the user denied the permission instead, [gracefully degrade your app experience](https://developer.android.com/training/permissions/reques - Network accessline 67
8. If the user granted the permission to your app, you can **access** the private user data. If the user denied the permission instead, [gracefully degrade your app experience](https://developer.android.com/training/permissions/reques - Network accessline 68
private user data. If the user denied the permission instead, [gracefully degrade your app experience](https://developer.android.com/training/permissions/requesting#handle-denial) so that it provides functionality to the user without - Network accessline 68
private user data. If the user denied the permission instead, [gracefully degrade your app experience](https://developer.android.com/training/permissions/requesting#handle-denial) so that it provides functionality to the user without - Network accessline 69
degrade your app experience](https://developer.android.com/training/permissions/requesting#handle-denial) so that it provides - Network accessline 69
degrade your app experience](https://developer.android.com/training/permissions/requesting#handle-denial) so that it provides - Network accessline 73
Figure 1 illustrates the workflow and set of decisions associated with this process: `](https://developer.android.com/reference/androidx/core/content/ContextCompat#checkSelfPermissio - Network accessline 79
To check whether the user already granted your app a particular permission, pass that permission into the [`ContextCompat.checkSelfPermission()`](https://developer.android.com/reference/androidx/core/content/ContextCompat#checkSelfPermissio - Network accessline 80
that permission into the [`ContextCompat.checkSelfPermission()`](https://developer.android.com/reference/androidx/core/content/ContextCompat#checkSelfPermission(android.content.Context,%20java.lang.String)) method. - Network accessline 80
that permission into the [`ContextCompat.checkSelfPermission()`](https://developer.android.com/reference/androidx/core/content/ContextCompat#checkSelfPermission(android.content.Context,%20java.lang.String)) method. - Network accessline 81
This method returns either [`PERMISSION_GRANTED`](https://developer.android.com/reference/android/content/pm/PackageManager#PERMISSION_GRANTED) or - Network accessline 81
This method returns either [`PERMISSION_GRANTED`](https://developer.android.com/reference/android/content/pm/PackageManager#PERMISSION_GRANTED) or - Network accessline 82
[`PERMISSION_DENIED`](https://developer.android.com/reference/android/content/pm/PackageManager#PERMISSION_DENIED), depending on whether your app has the permission. - Network accessline 82
[`PERMISSION_DENIED`](https://developer.android.com/reference/android/content/pm/PackageManager#PERMISSION_DENIED), depending on whether your app has the permission. - Network accessline 86
The permissions dialog shown by the system when you call [`requestPermissions()`](https://developer.android.com/reference/androidx/core/app/ActivityCompat#requestPermissions(android.app.Activity,%20java.lang.String%5B%5D,%20int)) says what - Network accessline 86
The permissions dialog shown by the system when you call [`requestPermissions()`](https://developer.android.com/reference/androidx/core/app/ActivityCompat#requestPermissions(android.app.Activity,%20java.lang.String%5B%5D,%20int)) says what - Network accessline 87
[`requestPermissions()`](https://developer.android.com/reference/androidx/core/app/ActivityCompat#requestPermissions(android.app.Activity,%20java.lang.String%5B%5D,%20int)) says what permission your app wants, but doesn't - Network accessline 87
[`requestPermissions()`](https://developer.android.com/reference/androidx/core/app/ActivityCompat#requestPermissions(android.app.Activity,%20java.lang.String%5B%5D,%20int)) says what permission your app wants, but doesn't - Network accessline 107
> [!NOTE] > **Note:** Starting in Android 12 (API level 31), [privacy indicators](https://developer.android.com/training/permissions/explaining-access#indicators) notify the user whenever applications access the microphone or camera. - Network accessline 107
> [!NOTE] > **Note:** Starting in Android 12 (API level 31), [privacy indicators](https://developer.android.com/training/permissions/explaining-access#indicators) notify the user whenever applications access the microphone or camera. - Network accessline 108
> **Note:** Starting in Android 12 (API level 31), [privacy indicators](https://developer.android.com/training/permissions/explaining-access#indicators) notify the user whenever applications access the microphone or camera. - Network accessline 108
> **Note:** Starting in Android 12 (API level 31), [privacy indicators](https://developer.android.com/training/permissions/explaining-access#indicators) notify the user whenever applications access the microphone or camera. - Network accessline 113
If the `ContextCompat.checkSelfPermission()` method returns `PERMISSION_DENIED`, call [`shouldShowRequestPermissionRationale()`](https://developer.android.com/reference/androidx/core/app/ActivityCompat#shouldShowRequestPermissionRationale(a - Network accessline 113
If the `ContextCompat.checkSelfPermission()` method returns `PERMISSION_DENIED`, call [`shouldShowRequestPermissionRationale()`](https://developer.android.com/reference/androidx/core/app/ActivityCompat#shouldShowRequestPermissionRationale(a - Network accessline 114
call [`shouldShowRequestPermissionRationale()`](https://developer.android.com/reference/androidx/core/app/ActivityCompat#shouldShowRequestPermissionRationale(android.app.Activity,%20java.lang.String)). If this method returns - Network accessline 114
call [`shouldShowRequestPermissionRationale()`](https://developer.android.com/reference/androidx/core/app/ActivityCompat#shouldShowRequestPermissionRationale(android.app.Activity,%20java.lang.String)). If this method returns - Network accessline 118
Additionally, if your app requests a permission related to location, microphone, or camera, consider [explaining why your app needs access](https://developer.android.com/training/permissions/explaining-access) to this - Network accessline 118
Additionally, if your app requests a permission related to location, microphone, or camera, consider [explaining why your app needs access](https://developer.android.com/training/permissions/explaining-access) to this - Network accessline 119
or camera, consider [explaining why your app needs access](https://developer.android.com/training/permissions/explaining-access) to this - Network accessline 119
or camera, consider [explaining why your app needs access](https://developer.android.com/training/permissions/explaining-access) to this - Network accessline 130
To do this, use the [`RequestPermission`](https://developer.android.com/reference/androidx/activity/result/contract/ActivityResultContracts.RequestPermission) contract, included in an AndroidX - Network accessline 130
To do this, use the [`RequestPermission`](https://developer.android.com/reference/androidx/activity/result/contract/ActivityResultContracts.RequestPermission) contract, included in an AndroidX - Network accessline 131
library, where you [allow the system to manage the permission request code](https://developer.android.com/training/permissions/requesting#allow-system-manage-request-code) - Network accessline 131
library, where you [allow the system to manage the permission request code](https://developer.android.com/training/permissions/requesting#allow-system-manage-request-code) - Network accessline 132
for you. Because using the `RequestPermission` contract simplifies your logic, it is the recommended solution when possible. However, if needed you can also [manage a request code yourself](https://developer.android.com/training/permissions - Network accessline 132
for you. Because using the `RequestPermission` contract simplifies your logic, it is the recommended solution when possible. However, if needed you can also [manage a request code yourself](https://developer.android.com/training/permissions - Network accessline 133
it is the recommended solution when possible. However, if needed you can also [manage a request code yourself](https://developer.android.com/training/permissions/requesting#manage-request-code-yourself) as part of the permission request and - Network accessline 133
it is the recommended solution when possible. However, if needed you can also [manage a request code yourself](https://developer.android.com/training/permissions/requesting#manage-request-code-yourself) as part of the permission request and - Network accessline 134
[manage a request code yourself](https://developer.android.com/training/permissions/requesting#manage-request-code-yourself) as part of the permission request and - Network accessline 134
[manage a request code yourself](https://developer.android.com/training/permissions/requesting#manage-request-code-yourself) as part of the permission request and - Network accessline 143
- [`androidx.activity`](https://developer.android.com/jetpack/androidx/releases/activity#declaring_dependencies), version 1.2.0 or later - Network accessline 143
- [`androidx.activity`](https://developer.android.com/jetpack/androidx/releases/activity#declaring_dependencies), version 1.2.0 or later - Network accessline 144
- [`androidx.fragment`](https://developer.android.com/jetpack/androidx/releases/fragment#declaring_dependencies), version 1.3.0 or later - Network accessline 144
- [`androidx.fragment`](https://developer.android.com/jetpack/androidx/releases/fragment#declaring_dependencies), version 1.3.0 or later - Network accessline 148
- To request a single permission, use [`RequestPermission`](https://developer.android.com/reference/androidx/activity/result/contract/ActivityResultContracts.RequestPermission). - Network accessline 148
- To request a single permission, use [`RequestPermission`](https://developer.android.com/reference/androidx/activity/result/contract/ActivityResultContracts.RequestPermission). - Network accessline 149
- To request multiple permissions at the same time, use [`RequestMultiplePermissions`](https://developer.android.com/reference/androidx/activity/result/contract/ActivityResultContracts.RequestMultiplePermissions). - Network accessline 149
- To request multiple permissions at the same time, use [`RequestMultiplePermissions`](https://developer.android.com/reference/androidx/activity/result/contract/ActivityResultContracts.RequestMultiplePermissions). - Network accessline 154
1. In your activity or fragment's initialization logic, pass in an implementation of [`ActivityResultCallback`](https://developer.android.com/reference/androidx/activity/result/ActivityResultCallback) into a call to - Network accessline 154
1. In your activity or fragment's initialization logic, pass in an implementation of [`ActivityResultCallback`](https://developer.android.com/reference/androidx/activity/result/ActivityResultCallback) into a call to - Network accessline 155
implementation of [`ActivityResultCallback`](https://developer.android.com/reference/androidx/activity/result/ActivityResultCallback) into a call to - Network accessline 155
implementation of [`ActivityResultCallback`](https://developer.android.com/reference/androidx/activity/result/ActivityResultCallback) into a call to - Network accessline 156
[`registerForActivityResult()`](https://developer.android.com/reference/androidx/activity/result/ActivityResultCaller#registerForActivityResult(androidx.activity.result.contract.ActivityResultContract%3CI,%20O%3E,%20androidx.activity.result - Network accessline 156
[`registerForActivityResult()`](https://developer.android.com/reference/androidx/activity/result/ActivityResultCaller#registerForActivityResult(androidx.activity.result.contract.ActivityResultContract%3CI,%20O%3E,%20androidx.activity.result - Network accessline 159
Keep a reference to the return value of `registerForActivityResult()`, which is of type [`ActivityResultLauncher`](https://developer.android.com/reference/androidx/activity/result/ActivityResultLauncher). - Network accessline 159
Keep a reference to the return value of `registerForActivityResult()`, which is of type [`ActivityResultLauncher`](https://developer.android.com/reference/androidx/activity/result/ActivityResultLauncher). - Network accessline 160
is of type [`ActivityResultLauncher`](https://developer.android.com/reference/androidx/activity/result/ActivityResultLauncher). - Network accessline 160
is of type [`ActivityResultLauncher`](https://developer.android.com/reference/androidx/activity/result/ActivityResultLauncher). - Network accessline 161
2. To display the system permissions dialog when necessary, call the [`launch()`](https://developer.android.com/reference/androidx/activity/result/ActivityResultLauncher#launch(I)) method on the instance of `ActivityResultLauncher` that - Network accessline 161
2. To display the system permissions dialog when necessary, call the [`launch()`](https://developer.android.com/reference/androidx/activity/result/ActivityResultLauncher#launch(I)) method on the instance of `ActivityResultLauncher` that - Network accessline 162
[`launch()`](https://developer.android.com/reference/androidx/activity/result/ActivityResultLauncher#launch(I)) method on the instance of `ActivityResultLauncher` that - Network accessline 162
[`launch()`](https://developer.android.com/reference/androidx/activity/result/ActivityResultLauncher#launch(I)) method on the instance of `ActivityResultLauncher` that - Network accessline 175
Also, the text in the system permission dialog references the [permission group](https://developer.android.com/guide/topics/permissions/overview#group) associated with the permission that you requested. This - Network accessline 175
Also, the text in the system permission dialog references the [permission group](https://developer.android.com/guide/topics/permissions/overview#group) associated with the permission that you requested. This - Network accessline 176
[permission group](https://developer.android.com/guide/topics/permissions/overview#group) associated with the permission that you requested. This permission grouping is designed for system ease-of-use, and your app - Network accessline 176
[permission group](https://developer.android.com/guide/topics/permissions/overview#group) associated with the permission that you requested. This permission grouping is designed for system ease-of-use, and your app - Network accessline 177
group](https://developer.android.com/guide/topics/permissions/overview#group) associated with the permission that you requested. This - Network accessline 177
group](https://developer.android.com/guide/topics/permissions/overview#group) associated with the permission that you requested. This - Network accessline 294
As an alternative to [allowing the system to manage the permission request code](https://developer.android.com/training/permissions/requesting#allow-system-manage-request-code), you can manage the permission request code yourself. To do so, - Network accessline 294
As an alternative to [allowing the system to manage the permission request code](https://developer.android.com/training/permissions/requesting#allow-system-manage-request-code), you can manage the permission request code yourself. To do so, - Network accessline 295
code](https://developer.android.com/training/permissions/requesting#allow-system-manage-request-code), you can manage the permission request code yourself. To do so, - Network accessline 295
code](https://developer.android.com/training/permissions/requesting#allow-system-manage-request-code), you can manage the permission request code yourself. To do so, - Network accessline 296
include the request code in a call to [`requestPermissions()`](https://developer.android.com/reference/androidx/core/app/ActivityCompat#requestPermissions(android.app.Activity,%20java.lang.String%5B%5D,%20int)). - Network accessline 296
include the request code in a call to [`requestPermissions()`](https://developer.android.com/reference/androidx/core/app/ActivityCompat#requestPermissions(android.app.Activity,%20java.lang.String%5B%5D,%20int)). - Network accessline 298
> [!NOTE] > **Note:** Your app cannot customize the dialog that appears when you call `requestPermissions()`. The text in the system permission dialog references a [permission group](https://developer.android.com/guide/topics/permissions/ov - Network accessline 298
> [!NOTE] > **Note:** Your app cannot customize the dialog that appears when you call `requestPermissions()`. The text in the system permission dialog references a [permission group](https://developer.android.com/guide/topics/permissions/ov - Network accessline 299
> **Note:** Your app cannot customize the dialog that appears when you call `requestPermissions()`. The text in the system permission dialog references a [permission group](https://developer.android.com/guide/topics/permissions/overview#per - Network accessline 299
> **Note:** Your app cannot customize the dialog that appears when you call `requestPermissions()`. The text in the system permission dialog references a [permission group](https://developer.android.com/guide/topics/permissions/overview#per - Network accessline 357
After the user responds to the system permissions dialog, the system then invokes your app's implementation of [`onRequestPermissionsResult()`](https://developer.android.com/reference/androidx/core/app/ActivityCompat.OnRequestPermissionsRes - Network accessline 357
After the user responds to the system permissions dialog, the system then invokes your app's implementation of [`onRequestPermissionsResult()`](https://developer.android.com/reference/androidx/core/app/ActivityCompat.OnRequestPermissionsRes - Network accessline 358
invokes your app's implementation of [`onRequestPermissionsResult()`](https://developer.android.com/reference/androidx/core/app/ActivityCompat.OnRequestPermissionsResultCallback#onRequestPermissionsResult(int,%20java.lang.String%5B%5D,%20in - Network accessline 358
invokes your app's implementation of [`onRequestPermissionsResult()`](https://developer.android.com/reference/androidx/core/app/ActivityCompat.OnRequestPermissionsResultCallback#onRequestPermissionsResult(int,%20java.lang.String%5B%5D,%20in - Network accessline 423
When you request location permissions, follow the same best practices as for any other [runtime permission](https://developer.android.com/training/permissions/requesting). One important difference when it comes - Network accessline 423
When you request location permissions, follow the same best practices as for any other [runtime permission](https://developer.android.com/training/permissions/requesting). One important difference when it comes - Network accessline 424
for any other [runtime permission](https://developer.android.com/training/permissions/requesting). One important difference when it comes - Network accessline 424
for any other [runtime permission](https://developer.android.com/training/permissions/requesting). One important difference when it comes - Network accessline 449
On Android 10 (API level 29) and higher, you must declare a [foreground service type](https://developer.android.com/guide/topics/manifest/service-element#foregroundservicetype) of `location`, as shown in the following code snippet. On - Network accessline 449
On Android 10 (API level 29) and higher, you must declare a [foreground service type](https://developer.android.com/guide/topics/manifest/service-element#foregroundservicetype) of `location`, as shown in the following code snippet. On - Network accessline 450
service type](https://developer.android.com/guide/topics/manifest/service-element#foregroundservicetype) of `location`, as shown in the following code snippet. On - Network accessline 450
service type](https://developer.android.com/guide/topics/manifest/service-element#foregroundservicetype) of `location`, as shown in the following code snippet. On - Network accessline 464
You declare a need for foreground location when your app requests either the [`ACCESS_COARSE_LOCATION`](https://developer.android.com/reference/android/Manifest.permission#ACCESS_COARSE_LOCATION) permission or the - Network accessline 464
You declare a need for foreground location when your app requests either the [`ACCESS_COARSE_LOCATION`](https://developer.android.com/reference/android/Manifest.permission#ACCESS_COARSE_LOCATION) permission or the - Network accessline 465
[`ACCESS_COARSE_LOCATION`](https://developer.android.com/reference/android/Manifest.permission#ACCESS_COARSE_LOCATION) permission or the - Network accessline 465
[`ACCESS_COARSE_LOCATION`](https://developer.android.com/reference/android/Manifest.permission#ACCESS_COARSE_LOCATION) permission or the - Network accessline 466
[`ACCESS_FINE_LOCATION`](https://developer.android.com/reference/android/Manifest.permission#ACCESS_FINE_LOCATION) permission, as shown in the following snippet: - Network accessline 466
[`ACCESS_FINE_LOCATION`](https://developer.android.com/reference/android/Manifest.permission#ACCESS_FINE_LOCATION) permission, as shown in the following snippet: - Network accessline 480
An app requires background location access if a feature within the app constantly shares location with other users or uses the [Geofencing API](https://developer.android.com/training/location/geofencing). - Network accessline 480
An app requires background location access if a feature within the app constantly shares location with other users or uses the [Geofencing API](https://developer.android.com/training/location/geofencing). - Network accessline 481
constantly shares location with other users or uses the [Geofencing API](https://developer.android.com/training/location/geofencing). - Network accessline 481
constantly shares location with other users or uses the [Geofencing API](https://developer.android.com/training/location/geofencing). - Network accessline 487
The system considers your app to be using background location if it accesses the device's current location in any situation other than the ones described in the [foreground location](https://developer.android.com/training/permissions/reques - Network accessline 487
The system considers your app to be using background location if it accesses the device's current location in any situation other than the ones described in the [foreground location](https://developer.android.com/training/permissions/reques - Network accessline 488
the device's current location in any situation other than the ones described in the [foreground location](https://developer.android.com/training/permissions/requesting#foreground-location) section. The background location accuracy is the sa - Network accessline 488
the device's current location in any situation other than the ones described in the [foreground location](https://developer.android.com/training/permissions/requesting#foreground-location) section. The background location accuracy is the sa - Network accessline 489
the [foreground location](https://developer.android.com/training/permissions/requesting#foreground-location) section. The background - Network accessline 489
the [foreground location](https://developer.android.com/training/permissions/requesting#foreground-location) section. The background - Network accessline 490
location accuracy is the same as the [foreground location accuracy](https://developer.android.com/training/location/permissions#accuracy), which - Network accessline 490
location accuracy is the same as the [foreground location accuracy](https://developer.android.com/training/location/permissions#accuracy), which - Network accessline 493
On Android 10 (API level 29) and higher, you must declare the [`ACCESS_BACKGROUND_LOCATION`](https://developer.android.com/reference/android/Manifest.permission#ACCESS_BACKGROUND_LOCATION) permission in your app's manifest to request - Network accessline 493
On Android 10 (API level 29) and higher, you must declare the [`ACCESS_BACKGROUND_LOCATION`](https://developer.android.com/reference/android/Manifest.permission#ACCESS_BACKGROUND_LOCATION) permission in your app's manifest to request - Network accessline 494
[`ACCESS_BACKGROUND_LOCATION`](https://developer.android.com/reference/android/Manifest.permission#ACCESS_BACKGROUND_LOCATION) permission in your app's manifest to request - Network accessline 494
[`ACCESS_BACKGROUND_LOCATION`](https://developer.android.com/reference/android/Manifest.permission#ACCESS_BACKGROUND_LOCATION) permission in your app's manifest to request - Network accessline 505
> [!NOTE] > **Note:** The Google Play Store has a [location policy](https://support.google.com/googleplay/android-developer/answer/9799150) concerning device location, restricting background location access to apps that need it for their co - Network accessline 505
> [!NOTE] > **Note:** The Google Play Store has a [location policy](https://support.google.com/googleplay/android-developer/answer/9799150) concerning device location, restricting background location access to apps that need it for their co - Network accessline 506
> **Note:** The Google Play Store has a [location policy](https://support.google.com/googleplay/android-developer/answer/9799150) concerning device location, restricting background location access to apps that need it for their core functio - Network accessline 506
> **Note:** The Google Play Store has a [location policy](https://support.google.com/googleplay/android-developer/answer/9799150) concerning device location, restricting background location access to apps that need it for their core functio - Network accessline 528
Additionally, if the user taps Deny for a specific permission more than once during your app's lifetime of installation on a device, the user will no longer see the system permissions dialog if your app requests that permission again. The u - Network accessline 528
Additionally, if the user taps Deny for a specific permission more than once during your app's lifetime of installation on a device, the user will no longer see the system permissions dialog if your app requests that permission again. The u - Network accessline 530
To provide the best user experience when asking for app permissions, also see [App permissions best practices](https://developer.android.com/training/permissions/usage-notes). - Network accessline 530
To provide the best user experience when asking for app permissions, also see [App permissions best practices](https://developer.android.com/training/permissions/usage-notes). - Network accessline 570
To view a complete list of Android app permissions, visit the [permissions API reference page](https://developer.android.com/reference/android/Manifest.permission#constants_1). - Network accessline 570
To view a complete list of Android app permissions, visit the [permissions API reference page](https://developer.android.com/reference/android/Manifest.permission#constants_1). - Network accessline 571
reference page](https://developer.android.com/reference/android/Manifest.permission#constants_1). - Network accessline 571
reference page](https://developer.android.com/reference/android/Manifest.permission#constants_1). - Network accessline 575
 **Figure 2.** System dialog that appears when an app requests a one-ti - Network accessline 575
 **Figure 2.** System dialog that appears when an app requests a one-ti - Network accessline 576
the dialog.](https://developer.android.com/static/images/training/permissions/one-time-prompt.svg) **Figure 2.** System dialog that appears when an app requests a one-time permission. - Network accessline 576
the dialog.](https://developer.android.com/static/images/training/permissions/one-time-prompt.svg) **Figure 2.** System dialog that appears when an app requests a one-time permission. - Network accessline 601
> [!NOTE] > **Note:** If your app already follows [best practices](https://developer.android.com/training/permissions/usage-notes) when it requests runtime permissions, you don't need to add or change any logic in your app to support one-ti - Network accessline 601
> [!NOTE] > **Note:** If your app already follows [best practices](https://developer.android.com/training/permissions/usage-notes) when it requests runtime permissions, you don't need to add or change any logic in your app to support one-ti - Network accessline 602
> **Note:** If your app already follows [best practices](https://developer.android.com/training/permissions/usage-notes) when it requests runtime permissions, you don't need to add or change any logic in your app to support one-time permiss - Network accessline 602
> **Note:** If your app already follows [best practices](https://developer.android.com/training/permissions/usage-notes) when it requests runtime permissions, you don't need to add or change any logic in your app to support one-time permiss - Network accessline 609
- An API where you can proactively [remove your app's access](https://developer.android.com/training/permissions/requesting#remove-app-access) to an unused runtime permission. - Network accessline 609
- An API where you can proactively [remove your app's access](https://developer.android.com/training/permissions/requesting#remove-app-access) to an unused runtime permission. - Network accessline 611
apps](https://developer.android.com/training/permissions/requesting#auto-reset-permissions-unused-apps). - Network accessline 611
apps](https://developer.android.com/training/permissions/requesting#auto-reset-permissions-unused-apps). - Network accessline 621
To remove access to a runtime permission, pass the name of that permission into [`revokeSelfPermissionOnKill()`](https://developer.android.com/reference/android/content/Context#revokeSelfPermissionOnKill(java.lang.String)). To remove access - Network accessline 621
To remove access to a runtime permission, pass the name of that permission into [`revokeSelfPermissionOnKill()`](https://developer.android.com/reference/android/content/Context#revokeSelfPermissionOnKill(java.lang.String)). To remove access - Network accessline 622
[`revokeSelfPermissionOnKill()`](https://developer.android.com/reference/android/content/Context#revokeSelfPermissionOnKill(java.lang.String)). To remove access to a group of runtime - Network accessline 622
[`revokeSelfPermissionOnKill()`](https://developer.android.com/reference/android/content/Context#revokeSelfPermissionOnKill(java.lang.String)). To remove access to a group of runtime - Network accessline 623
permissions at the same time, pass a collection of permission names into [`revokeSelfPermissionsOnKill()`](https://developer.android.com/reference/android/content/Context#revokeSelfPermissionsOnKill(java.util.Collection%3Cjava.lang.String%3 - Network accessline 623
permissions at the same time, pass a collection of permission names into [`revokeSelfPermissionsOnKill()`](https://developer.android.com/reference/android/content/Context#revokeSelfPermissionsOnKill(java.util.Collection%3Cjava.lang.String%3 - Network accessline 624
[`revokeSelfPermissionsOnKill()`](https://developer.android.com/reference/android/content/Context#revokeSelfPermissionsOnKill(java.util.Collection%3Cjava.lang.String%3E)). The permission removal process happens - Network accessline 624
[`revokeSelfPermissionsOnKill()`](https://developer.android.com/reference/android/content/Context#revokeSelfPermissionsOnKill(java.util.Collection%3Cjava.lang.String%3E)). The permission removal process happens - Network accessline 627
> [!NOTE] > **Note:** For system settings to show that your app doesn't access data in a particular [permission group](https://developer.android.com/reference/android/Manifest.permission_group), you must remove access to **all** permissions - Network accessline 627
> [!NOTE] > **Note:** For system settings to show that your app doesn't access data in a particular [permission group](https://developer.android.com/reference/android/Manifest.permission_group), you must remove access to **all** permissions - Network accessline 628
> **Note:** For system settings to show that your app doesn't access data in a particular [permission group](https://developer.android.com/reference/android/Manifest.permission_group), you must remove access to **all** permissions in that p - Network accessline 628
> **Note:** For system settings to show that your app doesn't access data in a particular [permission group](https://developer.android.com/reference/android/Manifest.permission_group), you must remove access to **all** permissions in that p - Network accessline 643
few months, the system protects user data by automatically resetting the sensitive runtime permissions that the user had granted your app. Learn more in the guide about [app hibernation](https://developer.android.com/topic/performance/app-h - Network accessline 643
few months, the system protects user data by automatically resetting the sensitive runtime permissions that the user had granted your app. Learn more in the guide about [app hibernation](https://developer.android.com/topic/performance/app-h - Network accessline 645
the guide about [app hibernation](https://developer.android.com/topic/performance/app-hibernation). - Network accessline 645
the guide about [app hibernation](https://developer.android.com/topic/performance/app-hibernation). - Network accessline 655
For more information on default handlers, including guidance on showing a default handler prompt to users, [see the guide about permissions used only in default handlers](https://developer.android.com/guide/topics/permissions/default-handle - Network accessline 655
For more information on default handlers, including guidance on showing a default handler prompt to users, [see the guide about permissions used only in default handlers](https://developer.android.com/guide/topics/permissions/default-handle - Network accessline 657
default handlers](https://developer.android.com/guide/topics/permissions/default-handlers). - Network accessline 657
default handlers](https://developer.android.com/guide/topics/permissions/default-handlers). - Network accessline 671
- [Permissions overview](https://developer.android.com/guide/topics/permissions/overview) - Network accessline 671
- [Permissions overview](https://developer.android.com/guide/topics/permissions/overview) - Network accessline 672
- [App permissions best practices](https://developer.android.com/training/permissions/usage-notes) - Network accessline 672
- [App permissions best practices](https://developer.android.com/training/permissions/usage-notes) - Network accessline 674
To learn more about requesting permissions, review the [permissions samples](https://github.com/android/platform-samples/tree/main/samples/privacy/permissions). - Network accessline 674
To learn more about requesting permissions, review the [permissions samples](https://github.com/android/platform-samples/tree/main/samples/privacy/permissions). - Network accessline 676
You can also complete this [codelab that demonstrates privacy best practices](https://developer.android.com/codelabs/android-privacy-codelab). - Network accessline 676
You can also complete this [codelab that demonstrates privacy best practices](https://developer.android.com/codelabs/android-privacy-codelab). - Network accessline 677
practices](https://developer.android.com/codelabs/android-privacy-codelab). - Network accessline 677
practices](https://developer.android.com/codelabs/android-privacy-codelab).
system/glance-appwidget-updates-and-memory/references/AndroidManifest.xml
system/glance-appwidget-updates-and-memory/references/android/about/versions/17/behavior-changes-17.md
- Network accessline 8
Be sure to also review the list of [behavior changes that affect all apps running on Android 17](https://developer.android.com/about/versions/17/behavior-changes-all) regardless of your app's [`targetSdkVersion`](https://developer.android.c - Network accessline 8
Be sure to also review the list of [behavior changes that affect all apps running on Android 17](https://developer.android.com/about/versions/17/behavior-changes-all) regardless of your app's [`targetSdkVersion`](https://developer.android.c - Network accessline 9
running on Android 17](https://developer.android.com/about/versions/17/behavior-changes-all) regardless of your app's [`targetSdkVersion`](https://developer.android.com/guide/topics/manifest/uses-sdk-element#target). - Network accessline 9
running on Android 17](https://developer.android.com/about/versions/17/behavior-changes-all) regardless of your app's [`targetSdkVersion`](https://developer.android.com/guide/topics/manifest/uses-sdk-element#target). - Network accessline 11
> [!NOTE] > **Note:** This page lists some of the more important changes. For more detailed information, see the [Android 17 release notes](https://developer.android.com/about/versions/17/release-notes). - Network accessline 11
> [!NOTE] > **Note:** This page lists some of the more important changes. For more detailed information, see the [Android 17 release notes](https://developer.android.com/about/versions/17/release-notes). - Network accessline 12
> **Note:** This page lists some of the more important changes. For more detailed information, see the [Android 17 release notes](https://developer.android.com/about/versions/17/release-notes). - Network accessline 12
> **Note:** This page lists some of the more important changes. For more detailed information, see the [Android 17 release notes](https://developer.android.com/about/versions/17/release-notes). - Network accessline 22
`RemoteViews` updates for apps targeting Android 17 (API level 37) or higher. When an app passes a `RemoteViews` object to [`AppWidgetManager.updateAppWidget`](https://developer.android.com/reference/android/appwidget/AppWidgetManager#updat - Network accessline 22
`RemoteViews` updates for apps targeting Android 17 (API level 37) or higher. When an app passes a `RemoteViews` object to [`AppWidgetManager.updateAppWidget`](https://developer.android.com/reference/android/appwidget/AppWidgetManager#updat - Network accessline 23
higher. When an app passes a `RemoteViews` object to [`AppWidgetManager.updateAppWidget`](https://developer.android.com/reference/android/appwidget/AppWidgetManager#updateAppWidget(int,%20android.widget.RemoteViews)), `system_server` calcul - Network accessline 23
higher. When an app passes a `RemoteViews` object to [`AppWidgetManager.updateAppWidget`](https://developer.android.com/reference/android/appwidget/AppWidgetManager#updateAppWidget(int,%20android.widget.RemoteViews)), `system_server` calcul - Network accessline 24
[`AppWidgetManager.updateAppWidget`](https://developer.android.com/reference/android/appwidget/AppWidgetManager#updateAppWidget(int,%20android.widget.RemoteViews)), - Network accessline 24
[`AppWidgetManager.updateAppWidget`](https://developer.android.com/reference/android/appwidget/AppWidgetManager#updateAppWidget(int,%20android.widget.RemoteViews)), - Network accessline 42
- In-memory [`Bitmap`](https://developer.android.com/reference/android/graphics/Bitmap) and bitmap-backed [`Icon`](https://developer.android.com/reference/android/graphics/drawable/Icon) objects (`Icon.TYPE_BITMAP` and `Icon.TYPE_ADAPTIVE_B - Network accessline 42
- In-memory [`Bitmap`](https://developer.android.com/reference/android/graphics/Bitmap) and bitmap-backed [`Icon`](https://developer.android.com/reference/android/graphics/drawable/Icon) objects (`Icon.TYPE_BITMAP` and `Icon.TYPE_ADAPTIVE_B - Network accessline 91
5. **Provide an error fallback layout:** In Jetpack Glance, override [`onCompositionError`](https://developer.android.com/develop/ui/compose/glance/error-handling) - Network accessline 91
5. **Provide an error fallback layout:** In Jetpack Glance, override [`onCompositionError`](https://developer.android.com/develop/ui/compose/glance/error-handling) - Network accessline 92
[`onCompositionError`](https://developer.android.com/develop/ui/compose/glance/error-handling) - Network accessline 92
[`onCompositionError`](https://developer.android.com/develop/ui/compose/glance/error-handling) - Network accessline 107
Beginning with Android 17, apps targeting Android 17 (API level 37) or higher receive a new lock-free implementation of [`android.os.MessageQueue`](https://developer.android.com/reference/android/os/MessageQueue). The new implementation imp - Network accessline 107
Beginning with Android 17, apps targeting Android 17 (API level 37) or higher receive a new lock-free implementation of [`android.os.MessageQueue`](https://developer.android.com/reference/android/os/MessageQueue). The new implementation imp - Network accessline 108
or higher receive a new lock-free implementation of [`android.os.MessageQueue`](https://developer.android.com/reference/android/os/MessageQueue). The new implementation improves performance and reduces missed frames, but may break clients t - Network accessline 108
or higher receive a new lock-free implementation of [`android.os.MessageQueue`](https://developer.android.com/reference/android/os/MessageQueue). The new implementation improves performance and reduces missed frames, but may break clients t - Network accessline 109
[`android.os.MessageQueue`](https://developer.android.com/reference/android/os/MessageQueue). The new implementation improves performance and - Network accessline 109
[`android.os.MessageQueue`](https://developer.android.com/reference/android/os/MessageQueue). The new implementation improves performance and - Network accessline 113
For more information, including mitigation strategies, see [MessageQueue behavior change guidance](https://developer.android.com/about/versions/17/changes/messagequeue). - Network accessline 113
For more information, including mitigation strategies, see [MessageQueue behavior change guidance](https://developer.android.com/about/versions/17/changes/messagequeue). - Network accessline 114
behavior change guidance](https://developer.android.com/about/versions/17/changes/messagequeue). - Network accessline 114
behavior change guidance](https://developer.android.com/about/versions/17/changes/messagequeue). - Network accessline 130
This feature introduces new [`AccessibilityEvent`](https://developer.android.com/reference/android/view/accessibility/AccessibilityEvent) and [`TextAttribute`](https://developer.android.com/reference/android/view/inputmethod/TextAttribute) - Network accessline 130
This feature introduces new [`AccessibilityEvent`](https://developer.android.com/reference/android/view/accessibility/AccessibilityEvent) and [`TextAttribute`](https://developer.android.com/reference/android/view/inputmethod/TextAttribute) - Network accessline 176
remote server also supports the ECH protocol. If ECH cannot be negotiated, the client sends an ECH extension with randomized contents (a mechanism called ECH GREASE). See [RFC 9849](https://www.rfc-editor.org/rfc/rfc9849.html#name-grease-ec - Network accessline 176
remote server also supports the ECH protocol. If ECH cannot be negotiated, the client sends an ECH extension with randomized contents (a mechanism called ECH GREASE). See [RFC 9849](https://www.rfc-editor.org/rfc/rfc9849.html#name-grease-ec - Network accessline 178
GREASE). See [RFC 9849](https://www.rfc-editor.org/rfc/rfc9849.html#name-grease-ech) for more details on how ECH GREASE works. - Network accessline 178
GREASE). See [RFC 9849](https://www.rfc-editor.org/rfc/rfc9849.html#name-grease-ech) for more details on how ECH GREASE works. - Network accessline 180
To allow apps to customize this behavior, Android 17 adds a new [`<domainEncryption>`](https://developer.android.com/privacy-and-security/security-config#domainEncryption) element to the Network Security Configuration file. - Network accessline 180
To allow apps to customize this behavior, Android 17 adds a new [`<domainEncryption>`](https://developer.android.com/privacy-and-security/security-config#domainEncryption) element to the Network Security Configuration file. - Network accessline 181
[`<domainEncryption>`](https://developer.android.com/privacy-and-security/security-config#domainEncryption) element to the Network Security Configuration file. - Network accessline 181
[`<domainEncryption>`](https://developer.android.com/privacy-and-security/security-config#domainEncryption) element to the Network Security Configuration file. - Network accessline 186
For more information, see the [Encrypted Client Hello](https://developer.android.com/privacy-and-security/security-config#EncryptedClientHelloSummary) documentation. - Network accessline 186
For more information, see the [Encrypted Client Hello](https://developer.android.com/privacy-and-security/security-config#EncryptedClientHelloSummary) documentation. - Network accessline 190
Android 17 introduces the [`ACCESS_LOCAL_NETWORK`](https://developer.android.com/reference/android/Manifest.permission#ACCESS_LOCAL_NETWORK) runtime permission - Network accessline 190
Android 17 introduces the [`ACCESS_LOCAL_NETWORK`](https://developer.android.com/reference/android/Manifest.permission#ACCESS_LOCAL_NETWORK) runtime permission - Network accessline 204
For more information, see the [Local network permission](https://developer.android.com/privacy-and-security/local-network-permission) documentation. - Network accessline 204
For more information, see the [Local network permission](https://developer.android.com/privacy-and-security/local-network-permission) documentation. - Network accessline 232
available until three hours after receipt. This delay is intended to help prevent OTP hijacking. During this three hour delay, the [`SMS_RECEIVED_ACTION`](https://developer.android.com/reference/android/provider/Telephony.Sms.Intents#SMS_RE - Network accessline 232
available until three hours after receipt. This delay is intended to help prevent OTP hijacking. During this three hour delay, the [`SMS_RECEIVED_ACTION`](https://developer.android.com/reference/android/provider/Telephony.Sms.Intents#SMS_RE - Network accessline 233
prevent OTP hijacking. During this three hour delay, the [`SMS_RECEIVED_ACTION`](https://developer.android.com/reference/android/provider/Telephony.Sms.Intents#SMS_RECEIVED_ACTION) broadcast is withheld and [SMS provider](https://developer. - Network accessline 233
prevent OTP hijacking. During this three hour delay, the [`SMS_RECEIVED_ACTION`](https://developer.android.com/reference/android/provider/Telephony.Sms.Intents#SMS_RECEIVED_ACTION) broadcast is withheld and [SMS provider](https://developer. - Network accessline 234
[`SMS_RECEIVED_ACTION`](https://developer.android.com/reference/android/provider/Telephony.Sms.Intents#SMS_RECEIVED_ACTION) broadcast is withheld and - Network accessline 234
[`SMS_RECEIVED_ACTION`](https://developer.android.com/reference/android/provider/Telephony.Sms.Intents#SMS_RECEIVED_ACTION) broadcast is withheld and - Network accessline 235
[SMS provider](https://developer.android.com/reference/android/provider/Telephony.Sms) database queries are filtered. The SMS message is - Network accessline 235
[SMS provider](https://developer.android.com/reference/android/provider/Telephony.Sms) database queries are filtered. The SMS message is - Network accessline 238
Certain apps such as the default SMS assistant app, connected device companion apps, etc., are exempted from this delay. All apps that rely on reading SMS messages for OTP extraction should transition to using [SMS Retriever](https://develo - Network accessline 238
Certain apps such as the default SMS assistant app, connected device companion apps, etc., are exempted from this delay. All apps that rely on reading SMS messages for OTP extraction should transition to using [SMS Retriever](https://develo - Network accessline 239
apps, etc., are exempted from this delay. All apps that rely on reading SMS messages for OTP extraction should transition to using [SMS Retriever](https://developer.android.com/identity/sms-retriever) or [SMS User Consent](https://developer - Network accessline 239
apps, etc., are exempted from this delay. All apps that rely on reading SMS messages for OTP extraction should transition to using [SMS Retriever](https://developer.android.com/identity/sms-retriever) or [SMS User Consent](https://developer - Network accessline 240
messages for OTP extraction should transition to using [SMS Retriever](https://developer.android.com/identity/sms-retriever) or [SMS - Network accessline 240
messages for OTP extraction should transition to using [SMS Retriever](https://developer.android.com/identity/sms-retriever) or [SMS - Network accessline 241
User Consent](https://developers.google.com/identity/sms-retriever/user-consent/overview) APIs to ensure continued functionality. - Network accessline 241
User Consent](https://developers.google.com/identity/sms-retriever/user-consent/overview) APIs to ensure continued functionality. - Network accessline 243
> [!NOTE] > **Note:** Additional SMS OTP protections for WebOTP and SMS Retriever format messages apply to all apps, regardless of their target API level. For more information, see [SMS OTP protection](https://developer.android.com/about/ve - Network accessline 243
> [!NOTE] > **Note:** Additional SMS OTP protections for WebOTP and SMS Retriever format messages apply to all apps, regardless of their target API level. For more information, see [SMS OTP protection](https://developer.android.com/about/ve - Network accessline 244
> **Note:** Additional SMS OTP protections for WebOTP and SMS Retriever format messages apply to all apps, regardless of their target API level. For more information, see [SMS OTP protection](https://developer.android.com/about/versions/17/ - Network accessline 244
> **Note:** Additional SMS OTP protections for WebOTP and SMS Retriever format messages apply to all apps, regardless of their target API level. For more information, see [SMS OTP protection](https://developer.android.com/about/versions/17/ - Network accessline 245
> apps](https://developer.android.com/about/versions/17/behavior-changes-all) documentation. - Network accessline 245
> apps](https://developer.android.com/about/versions/17/behavior-changes-all) documentation. - Network accessline 261
- **BAL hardening \& improved opt-in:** We are refining Background Activity Launch (BAL) restrictions by extending protections to [`IntentSender`](https://developer.android.com/reference/android/content/IntentSender). Developers must migrat - Network accessline 261
- **BAL hardening \& improved opt-in:** We are refining Background Activity Launch (BAL) restrictions by extending protections to [`IntentSender`](https://developer.android.com/reference/android/content/IntentSender). Developers must migrat - Network accessline 266
If an app targets Android 17 (API level 37) or higher, [certificate transparency (CT)](https://developer.android.com/privacy-and-security/security-config#CertificateTransparencySummary) is enabled by default. (On Android 16, CT is - Network accessline 266
If an app targets Android 17 (API level 37) or higher, [certificate transparency (CT)](https://developer.android.com/privacy-and-security/security-config#CertificateTransparencySummary) is enabled by default. (On Android 16, CT is - Network accessline 267
[certificate transparency (CT)](https://developer.android.com/privacy-and-security/security-config#CertificateTransparencySummary) is enabled by default. (On Android 16, CT is - Network accessline 267
[certificate transparency (CT)](https://developer.android.com/privacy-and-security/security-config#CertificateTransparencySummary) is enabled by default. (On Android 16, CT is - Network accessline 268
available but apps had to [opt in](https://developer.android.com/privacy-and-security/security-config#certificateTransparency).) - Network accessline 268
available but apps had to [opt in](https://developer.android.com/privacy-and-security/security-config#certificateTransparency).) - Network accessline 292
- [`ACCOUNT_NAME`](https://developer.android.com/reference/android/provider/ContactsContract.SyncColumns#ACCOUNT_NAME) - Network accessline 292
- [`ACCOUNT_NAME`](https://developer.android.com/reference/android/provider/ContactsContract.SyncColumns#ACCOUNT_NAME) - Network accessline 293
- [`ACCOUNT_TYPE`](https://developer.android.com/reference/android/provider/ContactsContract.SyncColumns#ACCOUNT_TYPE) - Network accessline 293
- [`ACCOUNT_TYPE`](https://developer.android.com/reference/android/provider/ContactsContract.SyncColumns#ACCOUNT_TYPE) - Network accessline 294
- [`ACCOUNT_TYPE_AND_DATA_SET`](https://developer.android.com/reference/android/provider/ContactsContract.RawContactsColumns#ACCOUNT_TYPE_AND_DATA_SET) - Network accessline 294
- [`ACCOUNT_TYPE_AND_DATA_SET`](https://developer.android.com/reference/android/provider/ContactsContract.RawContactsColumns#ACCOUNT_TYPE_AND_DATA_SET) - Network accessline 296
Apps that are using these columns from [`ContactsContract.Data`](https://developer.android.com/reference/android/provider/ContactsContract.Data) - Network accessline 296
Apps that are using these columns from [`ContactsContract.Data`](https://developer.android.com/reference/android/provider/ContactsContract.Data) - Network accessline 297
can extract them from [`ContactsContract.RawContacts`](https://developer.android.com/reference/android/provider/ContactsContract.RawContacts) - Network accessline 297
can extract them from [`ContactsContract.RawContacts`](https://developer.android.com/reference/android/provider/ContactsContract.RawContacts) - Network accessline 298
instead, by joining with [`RAW_CONTACT_ID`](https://developer.android.com/reference/android/provider/ContactsContract.DataColumns#RAW_CONTACT_ID). - Network accessline 298
instead, by joining with [`RAW_CONTACT_ID`](https://developer.android.com/reference/android/provider/ContactsContract.DataColumns#RAW_CONTACT_ID). - Network accessline 302
For apps targeting Android 17 (API level 37) and higher, Contacts Provider 2 (CP2) enforces strict SQL query validation when the [`ContactsContract.Data`](https://developer.android.com/reference/android/provider/ContactsContract.Data) table - Network accessline 302
For apps targeting Android 17 (API level 37) and higher, Contacts Provider 2 (CP2) enforces strict SQL query validation when the [`ContactsContract.Data`](https://developer.android.com/reference/android/provider/ContactsContract.Data) table - Network accessline 303
higher, Contacts Provider 2 (CP2) enforces strict SQL query validation when the [`ContactsContract.Data`](https://developer.android.com/reference/android/provider/ContactsContract.Data) table is accessed without [`READ_CONTACTS`](https://de - Network accessline 303
higher, Contacts Provider 2 (CP2) enforces strict SQL query validation when the [`ContactsContract.Data`](https://developer.android.com/reference/android/provider/ContactsContract.Data) table is accessed without [`READ_CONTACTS`](https://de - Network accessline 304
the [`ContactsContract.Data`](https://developer.android.com/reference/android/provider/ContactsContract.Data) table is accessed without - Network accessline 304
the [`ContactsContract.Data`](https://developer.android.com/reference/android/provider/ContactsContract.Data) table is accessed without - Network accessline 305
[`READ_CONTACTS`](https://developer.android.com/reference/android/Manifest.permission#READ_CONTACTS) permission. - Network accessline 305
[`READ_CONTACTS`](https://developer.android.com/reference/android/Manifest.permission#READ_CONTACTS) permission. - Network accessline 307
With this change, if an app doesn't have [`READ_CONTACTS`](https://developer.android.com/reference/android/Manifest.permission#READ_CONTACTS) - Network accessline 307
With this change, if an app doesn't have [`READ_CONTACTS`](https://developer.android.com/reference/android/Manifest.permission#READ_CONTACTS) - Network accessline 308
permission, [`StrictColumns`](https://developer.android.com/reference/android/database/sqlite/SQLiteQueryBuilder#setStrictColumns(boolean)) and - Network accessline 308
permission, [`StrictColumns`](https://developer.android.com/reference/android/database/sqlite/SQLiteQueryBuilder#setStrictColumns(boolean)) and - Network accessline 309
[`StrictGrammar`](https://developer.android.com/reference/android/database/sqlite/SQLiteQueryBuilder#setStrictGrammar(boolean)) options are set when querying - Network accessline 309
[`StrictGrammar`](https://developer.android.com/reference/android/database/sqlite/SQLiteQueryBuilder#setStrictGrammar(boolean)) options are set when querying - Network accessline 310
the [`ContactsContract.Data`](https://developer.android.com/reference/android/provider/ContactsContract.Data) table. If a query - Network accessline 310
the [`ContactsContract.Data`](https://developer.android.com/reference/android/provider/ContactsContract.Data) table. If a query - Network accessline 323
Starting in Android 17, the [`ContentCaptureManager.setContentCaptureEnabled(boolean)`](https://developer.android.com/reference/android/view/contentcapture/ContentCaptureManager#setContentCaptureEnabled(boolean)) - Network accessline 323
Starting in Android 17, the [`ContentCaptureManager.setContentCaptureEnabled(boolean)`](https://developer.android.com/reference/android/view/contentcapture/ContentCaptureManager#setContentCaptureEnabled(boolean)) - Network accessline 324
[`ContentCaptureManager.setContentCaptureEnabled(boolean)`](https://developer.android.com/reference/android/view/contentcapture/ContentCaptureManager#setContentCaptureEnabled(boolean)) - Network accessline 324
[`ContentCaptureManager.setContentCaptureEnabled(boolean)`](https://developer.android.com/reference/android/view/contentcapture/ContentCaptureManager#setContentCaptureEnabled(boolean)) - Network accessline 329
If your app needs to continue disabling Content Capture or restrict screen contents from being captured by the system, you must transition to using the [`FLAG_SECURE`](https://developer.android.com/reference/android/view/WindowManager.Layou - Network accessline 329
If your app needs to continue disabling Content Capture or restrict screen contents from being captured by the system, you must transition to using the [`FLAG_SECURE`](https://developer.android.com/reference/android/view/WindowManager.Layou - Network accessline 331
[`FLAG_SECURE`](https://developer.android.com/reference/android/view/WindowManager.LayoutParams#FLAG_SECURE) window layout parameter. - Network accessline 331
[`FLAG_SECURE`](https://developer.android.com/reference/android/view/WindowManager.LayoutParams#FLAG_SECURE) window layout parameter. - Network accessline 350
For more details, see the [`WindowManager.LayoutParams.FLAG_SECURE`](https://developer.android.com/reference/android/view/WindowManager.LayoutParams#FLAG_SECURE) reference - Network accessline 350
For more details, see the [`WindowManager.LayoutParams.FLAG_SECURE`](https://developer.android.com/reference/android/view/WindowManager.LayoutParams#FLAG_SECURE) reference - Network accessline 351
[`WindowManager.LayoutParams.FLAG_SECURE`](https://developer.android.com/reference/android/view/WindowManager.LayoutParams#FLAG_SECURE) reference - Network accessline 351
[`WindowManager.LayoutParams.FLAG_SECURE`](https://developer.android.com/reference/android/view/WindowManager.LayoutParams#FLAG_SECURE) reference - Network accessline 371
- The foreground service must have while-in-use (WIU) capabilities. - The app must have the [exact alarm](https://developer.android.com/develop/background-work/services/alarms#exact) permission and be interacting with [`USAGE_ALARM`](https: - Network accessline 371
- The foreground service must have while-in-use (WIU) capabilities. - The app must have the [exact alarm](https://developer.android.com/develop/background-work/services/alarms#exact) permission and be interacting with [`USAGE_ALARM`](https: - Network accessline 372
- The app must have the [exact alarm](https://developer.android.com/develop/background-work/services/alarms#exact) permission and be interacting with [`USAGE_ALARM`](https://developer.android.com/reference/android/media/AudioAttributes#USAG - Network accessline 372
- The app must have the [exact alarm](https://developer.android.com/develop/background-work/services/alarms#exact) permission and be interacting with [`USAGE_ALARM`](https://developer.android.com/reference/android/media/AudioAttributes#USAG - Network accessline 374
For more information, including mitigation strategies, see [Background audio hardening](https://developer.android.com/about/versions/17/changes/bg-audio). - Network accessline 374
For more information, including mitigation strategies, see [Background audio hardening](https://developer.android.com/about/versions/17/changes/bg-audio). - Network accessline 375
hardening](https://developer.android.com/about/versions/17/changes/bg-audio). - Network accessline 375
hardening](https://developer.android.com/about/versions/17/changes/bg-audio). - Network accessline 384
We introduced Platform API changes in Android 16 to [ignore orientation, resizability, and aspect ratio restrictions on large screens (sw \>= 600dp)](https://developer.android.com/about/versions/16/behavior-changes-16#ignore-orientation) fo - Network accessline 384
We introduced Platform API changes in Android 16 to [ignore orientation, resizability, and aspect ratio restrictions on large screens (sw \>= 600dp)](https://developer.android.com/about/versions/16/behavior-changes-16#ignore-orientation) fo - Network accessline 385
resizability, and aspect ratio restrictions on large screens (sw \>= 600dp)](https://developer.android.com/about/versions/16/behavior-changes-16#ignore-orientation) for apps targeting API level 36 or higher. Developers have the option to op - Network accessline 385
resizability, and aspect ratio restrictions on large screens (sw \>= 600dp)](https://developer.android.com/about/versions/16/behavior-changes-16#ignore-orientation) for apps targeting API level 36 or higher. Developers have the option to op - Network accessline 386
600dp)](https://developer.android.com/about/versions/16/behavior-changes-16#ignore-orientation) for apps targeting API level - Network accessline 386
600dp)](https://developer.android.com/about/versions/16/behavior-changes-16#ignore-orientation) for apps targeting API level - Network accessline 391
For more information, see [Restrictions on orientation and resizability are ignored](https://developer.android.com/about/versions/17/changes/ff-restrictions-ignored). - Network accessline 391
For more information, see [Restrictions on orientation and resizability are ignored](https://developer.android.com/about/versions/17/changes/ff-restrictions-ignored). - Network accessline 392
ignored](https://developer.android.com/about/versions/17/changes/ff-restrictions-ignored). - Network accessline 392
ignored](https://developer.android.com/about/versions/17/changes/ff-restrictions-ignored). - Network accessline 401
For apps targeting Android 17 (API level 37), the [`read()`](https://developer.android.com/reference/java/io/InputStream#read(byte%5B%5D)) method of the `InputStream` obtained from an - Network accessline 401
For apps targeting Android 17 (API level 37), the [`read()`](https://developer.android.com/reference/java/io/InputStream#read(byte%5B%5D)) method of the `InputStream` obtained from an - Network accessline 402
[`read()`](https://developer.android.com/reference/java/io/InputStream#read(byte%5B%5D)) method of the `InputStream` obtained from an RFCOMM-based [`BluetoothSocket`](https://developer.android.com/reference/android/bluetooth/BluetoothSocket - Network accessline 402
[`read()`](https://developer.android.com/reference/java/io/InputStream#read(byte%5B%5D)) method of the `InputStream` obtained from an RFCOMM-based [`BluetoothSocket`](https://developer.android.com/reference/android/bluetooth/BluetoothSocket - Network accessline 403
RFCOMM-based [`BluetoothSocket`](https://developer.android.com/reference/android/bluetooth/BluetoothSocket) now returns `-1` when the - Network accessline 403
RFCOMM-based [`BluetoothSocket`](https://developer.android.com/reference/android/bluetooth/BluetoothSocket) now returns `-1` when the - Network accessline 406
This change makes RFCOMM socket behavior consistent with LE CoC sockets and aligns with the standard [`InputStream.read()`](https://developer.android.com/reference/java/io/InputStream#read(byte%5B%5D)) - Network accessline 406
This change makes RFCOMM socket behavior consistent with LE CoC sockets and aligns with the standard [`InputStream.read()`](https://developer.android.com/reference/java/io/InputStream#read(byte%5B%5D)) - Network accessline 407
aligns with the standard [`InputStream.read()`](https://developer.android.com/reference/java/io/InputStream#read(byte%5B%5D)) - Network accessline 407
aligns with the standard [`InputStream.read()`](https://developer.android.com/reference/java/io/InputStream#read(byte%5B%5D)) - Network accessline 414
correctly when the remote device disconnects or the socket is closed. For an example of the recommended implementation, see the [code snippet](https://developer.android.com/develop/connectivity/bluetooth/transfer-data#example) in the [Trans - Network accessline 414
correctly when the remote device disconnects or the socket is closed. For an example of the recommended implementation, see the [code snippet](https://developer.android.com/develop/connectivity/bluetooth/transfer-data#example) in the [Trans - Network accessline 415
example of the recommended implementation, see the [code snippet](https://developer.android.com/develop/connectivity/bluetooth/transfer-data#example) in the [Transfer Bluetooth data](https://developer.android.com/develop/connectivity/blueto - Network accessline 415
example of the recommended implementation, see the [code snippet](https://developer.android.com/develop/connectivity/bluetooth/transfer-data#example) in the [Transfer Bluetooth data](https://developer.android.com/develop/connectivity/blueto - Network accessline 416
[code snippet](https://developer.android.com/develop/connectivity/bluetooth/transfer-data#example) in the [Transfer Bluetooth data](https://developer.android.com/develop/connectivity/bluetooth/transfer-data) - Network accessline 416
[code snippet](https://developer.android.com/develop/connectivity/bluetooth/transfer-data#example) in the [Transfer Bluetooth data](https://developer.android.com/develop/connectivity/bluetooth/transfer-data)
system/glance-appwidget-updates-and-memory/references/android/develop/ui/compose/glance/create-app-widget.md
- Network accessline 8
After completing the [setup steps](https://developer.android.com/develop/ui/compose/glance#get-started), declare the [`AppWidget`](https://developer.android.com/guide/topics/appwidgets) and its - Network accessline 8
After completing the [setup steps](https://developer.android.com/develop/ui/compose/glance#get-started), declare the [`AppWidget`](https://developer.android.com/guide/topics/appwidgets) and its - Network accessline 37
Next, follow the [Create a widget](https://developer.android.com/guide/topics/appwidgets#MetaData) guide to create and define the app - Network accessline 37
Next, follow the [Create a widget](https://developer.android.com/guide/topics/appwidgets#MetaData) guide to create and define the app - Network accessline 44
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 44
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 54
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 54
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 101
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 101
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 132
> [!NOTE] > **Note:** Jetpack Glance handles layout changes inside `provideGlance` responding to dynamic cell scaling if you use `SizeMode.Responsive` or `SizeMode.Exact`. See the [Build UI with Glance guide](https://developer.android.com/d - Network accessline 132
> [!NOTE] > **Note:** Jetpack Glance handles layout changes inside `provideGlance` responding to dynamic cell scaling if you use `SizeMode.Responsive` or `SizeMode.Exact`. See the [Build UI with Glance guide](https://developer.android.com/d - Network accessline 133
> **Note:** Jetpack Glance handles layout changes inside `provideGlance` responding to dynamic cell scaling if you use `SizeMode.Responsive` or `SizeMode.Exact`. See the [Build UI with Glance guide](https://developer.android.com/develop/ui/ - Network accessline 133
> **Note:** Jetpack Glance handles layout changes inside `provideGlance` responding to dynamic cell scaling if you use `SizeMode.Responsive` or `SizeMode.Exact`. See the [Build UI with Glance guide](https://developer.android.com/develop/ui/ - Network accessline 140
| Attributes and description || |---|---| | `updatePeriodMillis` | Defines how often the widget framework requests an update from the `GlanceAppWidgetReceiver` by calling the `onUpdate()` callback method. We recommend updating as infrequent - Network accessline 140
| Attributes and description || |---|---| | `updatePeriodMillis` | Defines how often the widget framework requests an update from the `GlanceAppWidgetReceiver` by calling the `onUpdate()` callback method. We recommend updating as infrequent - Network accessline 141
|---|---| | `updatePeriodMillis` | Defines how often the widget framework requests an update from the `GlanceAppWidgetReceiver` by calling the `onUpdate()` callback method. We recommend updating as infrequently as possible---no more than on - Network accessline 141
|---|---| | `updatePeriodMillis` | Defines how often the widget framework requests an update from the `GlanceAppWidgetReceiver` by calling the `onUpdate()` callback method. We recommend updating as infrequently as possible---no more than on - Network accessline 142
| `updatePeriodMillis` | Defines how often the widget framework requests an update from the `GlanceAppWidgetReceiver` by calling the `onUpdate()` callback method. We recommend updating as infrequently as possible---no more than once an hour - Network accessline 142
| `updatePeriodMillis` | Defines how often the widget framework requests an update from the `GlanceAppWidgetReceiver` by calling the `onUpdate()` callback method. We recommend updating as infrequently as possible---no more than once an hour - Network accessline 143
| `initialLayout` | Points to the layout resource that defines the loading layout of the widget before the Glance UI compositions render. You can use the predefined loading layout provided in the library: `@layout/glance_default_loading_lay - Network accessline 143
| `initialLayout` | Points to the layout resource that defines the loading layout of the widget before the Glance UI compositions render. You can use the predefined loading layout provided in the library: `@layout/glance_default_loading_lay - Network accessline 144
| `configure` | Defines the configuration activity that launches when the user adds the widget. See the [Enable users to configure app widgets](https://developer.android.com/develop/ui/compose/glance/configuration) guide. | - Network accessline 144
| `configure` | Defines the configuration activity that launches when the user adds the widget. See the [Enable users to configure app widgets](https://developer.android.com/develop/ui/compose/glance/configuration) guide. | - Network accessline 145
| `description` | Specifies the description for the widget picker to display for your widget. Introduced in Android 12. | | `previewLayout` (Android 12) and `previewImage` (Android 11 and lower) | - Starting in Android 12, the `previewLayou - Network accessline 145
| `description` | Specifies the description for the widget picker to display for your widget. Introduced in Android 12. | | `previewLayout` (Android 12) and `previewImage` (Android 11 and lower) | - Starting in Android 12, the `previewLayou - Network accessline 146
| `previewLayout` (Android 12) and `previewImage` (Android 11 and lower) | - Starting in Android 12, the `previewLayout` attribute specifies a scalable preview, which you provide as an XML layout set to the widget's default size. Ideally, t - Network accessline 146
| `previewLayout` (Android 12) and `previewImage` (Android 11 and lower) | - Starting in Android 12, the `previewLayout` attribute specifies a scalable preview, which you provide as an XML layout set to the widget's default size. Ideally, t - Network accessline 153
1. Create a new class that extends from [`GlanceAppWidget`](https://developer.android.com/reference/kotlin/androidx/glance/appwidget/GlanceAppWidget) and overrides - Network accessline 153
1. Create a new class that extends from [`GlanceAppWidget`](https://developer.android.com/reference/kotlin/androidx/glance/appwidget/GlanceAppWidget) and overrides - Network accessline 157
> [!NOTE] > **Note:** `provideGlance` runs on the main thread. To perform any long running operations in `provideGlance`, switch to another thread using `withContext`. See [Use coroutines for main-safety](https://developer.android.com/ko - Network accessline 157
> [!NOTE] > **Note:** `provideGlance` runs on the main thread. To perform any long running operations in `provideGlance`, switch to another thread using `withContext`. See [Use coroutines for main-safety](https://developer.android.com/ko - Network accessline 158
> **Note:** `provideGlance` runs on the main thread. To perform any long running operations in `provideGlance`, switch to another thread using `withContext`. See [Use coroutines for main-safety](https://developer.android.com/kotlin/coroutin - Network accessline 158
> **Note:** `provideGlance` runs on the main thread. To perform any long running operations in `provideGlance`, switch to another thread using `withContext`. See [Use coroutines for main-safety](https://developer.android.com/kotlin/coroutin - Network accessline 214
The `GlanceAppWidgetReceiver` coordinates widget broadcasts and platform state updates by extending the underlying [`AppWidgetProvider`](https://developer.android.com/guide/topics/appwidgets). It receives - Network accessline 214
The `GlanceAppWidgetReceiver` coordinates widget broadcasts and platform state updates by extending the underlying [`AppWidgetProvider`](https://developer.android.com/guide/topics/appwidgets). It receives - Network accessline 215
updates by extending the underlying [`AppWidgetProvider`](https://developer.android.com/guide/topics/appwidgets). It receives platform events when your widget is updated, deleted, enabled, or disabled, translating them into Compose lifecycl - Network accessline 215
updates by extending the underlying [`AppWidgetProvider`](https://developer.android.com/guide/topics/appwidgets). It receives platform events when your widget is updated, deleted, enabled, or disabled, translating them into Compose lifecycl - Network accessline 266
- [`ACTION_APPWIDGET_UPDATE`](https://developer.android.com/reference/android/appwidget/AppWidgetManager#ACTION_APPWIDGET_UPDATE) - Network accessline 266
- [`ACTION_APPWIDGET_UPDATE`](https://developer.android.com/reference/android/appwidget/AppWidgetManager#ACTION_APPWIDGET_UPDATE) - Network accessline 267
- [`ACTION_APPWIDGET_DELETED`](https://developer.android.com/reference/android/appwidget/AppWidgetManager#ACTION_APPWIDGET_DELETED) - Network accessline 267
- [`ACTION_APPWIDGET_DELETED`](https://developer.android.com/reference/android/appwidget/AppWidgetManager#ACTION_APPWIDGET_DELETED) - Network accessline 268
- [`ACTION_APPWIDGET_ENABLED`](https://developer.android.com/reference/android/appwidget/AppWidgetManager#ACTION_APPWIDGET_ENABLED) - Network accessline 268
- [`ACTION_APPWIDGET_ENABLED`](https://developer.android.com/reference/android/appwidget/AppWidgetManager#ACTION_APPWIDGET_ENABLED) - Network accessline 269
- [`ACTION_APPWIDGET_DISABLED`](https://developer.android.com/reference/android/appwidget/AppWidgetManager#ACTION_APPWIDGET_DISABLED) - Network accessline 269
- [`ACTION_APPWIDGET_DISABLED`](https://developer.android.com/reference/android/appwidget/AppWidgetManager#ACTION_APPWIDGET_DISABLED) - Network accessline 270
- [`ACTION_APPWIDGET_OPTIONS_CHANGED`](https://developer.android.com/reference/android/appwidget/AppWidgetManager#ACTION_APPWIDGET_OPTIONS_CHANGED) - Network accessline 270
- [`ACTION_APPWIDGET_OPTIONS_CHANGED`](https://developer.android.com/reference/android/appwidget/AppWidgetManager#ACTION_APPWIDGET_OPTIONS_CHANGED) - Network accessline 278
/* Import Glance Composables In the event there is a name clash with the Compose classes of the same name, you may rename the imports per https://kotlinlang.org/docs/packages.html#imports - Network accessline 278
/* Import Glance Composables In the event there is a name clash with the Compose classes of the same name, you may rename the imports per https://kotlinlang.org/docs/packages.html#imports - Network accessline 279
In the event there is a name clash with the Compose classes of the same name, you may rename the imports per https://kotlinlang.org/docs/packages.html#imports using the `as` keyword. - Network accessline 279
In the event there is a name clash with the Compose classes of the same name, you may rename the imports per https://kotlinlang.org/docs/packages.html#imports using the `as` keyword. - Network accessline 280
you may rename the imports per https://kotlinlang.org/docs/packages.html#imports - Network accessline 280
you may rename the imports per https://kotlinlang.org/docs/packages.html#imports - Network accessline 328
- In the top level [`Column`](https://developer.android.com/reference/kotlin/androidx/glance/layout/package-summary#column), items are placed vertically one after each other. - Network accessline 328
- In the top level [`Column`](https://developer.android.com/reference/kotlin/androidx/glance/layout/package-summary#column), items are placed vertically one after each other. - Network accessline 329
- The `Column` expands its size to match the available space (via the [`GlanceModifier`](https://developer.android.com/reference/kotlin/androidx/glance/GlanceModifier) and aligns its content to the top (`verticalAlignment`) and centers it h - Network accessline 329
- The `Column` expands its size to match the available space (via the [`GlanceModifier`](https://developer.android.com/reference/kotlin/androidx/glance/GlanceModifier) and aligns its content to the top (`verticalAlignment`) and centers it h - Network accessline 330
- The `Column`'s content is defined using the lambda. The order matters. - The first item in the `Column` is a `Text` component with `12.dp` of padding. - The second item is a [`Row`](https://developer.android.com/reference/kotlin/andro - Network accessline 330
- The `Column`'s content is defined using the lambda. The order matters. - The first item in the `Column` is a `Text` component with `12.dp` of padding. - The second item is a [`Row`](https://developer.android.com/reference/kotlin/andro - Network accessline 332
- The second item is a [`Row`](https://developer.android.com/reference/kotlin/androidx/glance/layout/package-summary#row), where items are placed horizontally one after each other, with two [`Buttons`](https://developer.android.com/referenc - Network accessline 332
- The second item is a [`Row`](https://developer.android.com/reference/kotlin/androidx/glance/layout/package-summary#row), where items are placed horizontally one after each other, with two [`Buttons`](https://developer.android.com/referenc - Network accessline 334
 **Figure 1.** An example UI. - Network accessline 334
 **Figure 1.** An example UI. - Network accessline 336
You can change the alignment values or apply different modifier values (such as padding) to change the placement and size of the components. See the [reference documentation](https://developer.android.com/reference/kotlin/androidx/glance/pa - Network accessline 336
You can change the alignment values or apply different modifier values (such as padding) to change the placement and size of the components. See the [reference documentation](https://developer.android.com/reference/kotlin/androidx/glance/pa - Network accessline 337
padding) to change the placement and size of the components. See the [reference documentation](https://developer.android.com/reference/kotlin/androidx/glance/package-summary) for a full list of components, parameters, and available modifier - Network accessline 337
padding) to change the placement and size of the components. See the [reference documentation](https://developer.android.com/reference/kotlin/androidx/glance/package-summary) for a full list of components, parameters, and available modifier - Network accessline 338
documentation](https://developer.android.com/reference/kotlin/androidx/glance/package-summary) for a full list of components, parameters, and available - Network accessline 338
documentation](https://developer.android.com/reference/kotlin/androidx/glance/package-summary) for a full list of components, parameters, and available - Network accessline 346
- [`system_app_widget_background_radius`](https://developer.android.com/reference/android/R.dimen#system_app_widget_background_radius): Specifies the corner radius of the widget background container (never larger than 28 dp). - Network accessline 346
- [`system_app_widget_background_radius`](https://developer.android.com/reference/android/R.dimen#system_app_widget_background_radius): Specifies the corner radius of the widget background container (never larger than 28 dp). - Network accessline 380
<shape xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 380
<shape xmlns:android="http://schemas.android.com/apk/res/android"
system/glance-appwidget-updates-and-memory/references/android/develop/ui/views/appwidgets/index.md
- Network accessline 1
Try the Compose way Jetpack Compose is the recommended UI toolkit for Android. Learn how to build widgets using Compose-style APIs. [Jetpack Glance →](https://developer.android.com/develop/ui/compose/glance/create-app-widget)  . Figure 1 shows a sample music widget:  **Figure 1.** Example of a music widget. - Network accessline 9
widgets is called an app widget host (or *widget host*). Figure 1 shows a sample music widget:  **Figure 1.** Example of a music widget. - Network accessline 11
 **Figure 1.** Example of a music widget. - Network accessline 11
 **Figure 1.** Example of a music widget. - Network accessline 13
This document describes how to publish a widget using a widget provider. For details about creating your own [`AppWidgetHost`](https://developer.android.com/reference/android/appwidget/AppWidgetHost) to host - Network accessline 13
This document describes how to publish a widget using a widget provider. For details about creating your own [`AppWidgetHost`](https://developer.android.com/reference/android/appwidget/AppWidgetHost) to host - Network accessline 14
details about creating your own [`AppWidgetHost`](https://developer.android.com/reference/android/appwidget/AppWidgetHost) to host - Network accessline 14
details about creating your own [`AppWidgetHost`](https://developer.android.com/reference/android/appwidget/AppWidgetHost) to host - Network accessline 15
app widgets, see [Build a widget host](https://developer.android.com/develop/ui/views/appwidgets/host). - Network accessline 15
app widgets, see [Build a widget host](https://developer.android.com/develop/ui/views/appwidgets/host). - Network accessline 17
For information about how to design your widget, see [App widgets overview](https://developer.android.com/develop/ui/views/appwidgets/overview). - Network accessline 17
For information about how to design your widget, see [App widgets overview](https://developer.android.com/develop/ui/views/appwidgets/overview). - Network accessline 23
[`AppWidgetProviderInfo`](https://developer.android.com/reference/android/appwidget/AppWidgetProviderInfo) object - Network accessline 23
[`AppWidgetProviderInfo`](https://developer.android.com/reference/android/appwidget/AppWidgetProviderInfo) object - Network accessline 24
: Describes the metadata for a widget, such as the widget's layout, update frequency, and [`AppWidgetProvider`](https://developer.android.com/reference/android/appwidget/AppWidgetProvider) class. `AppWidgetProviderInfo` is [define - Network accessline 24
: Describes the metadata for a widget, such as the widget's layout, update frequency, and [`AppWidgetProvider`](https://developer.android.com/reference/android/appwidget/AppWidgetProvider) class. `AppWidgetProviderInfo` is [define - Network accessline 25
as the widget's layout, update frequency, and [`AppWidgetProvider`](https://developer.android.com/reference/android/appwidget/AppWidgetProvider) - Network accessline 25
as the widget's layout, update frequency, and [`AppWidgetProvider`](https://developer.android.com/reference/android/appwidget/AppWidgetProvider) - Network accessline 27
XML](https://developer.android.com/develop/ui/views/appwidgets#AppWidgetProviderInfo), as described in this document. - Network accessline 27
XML](https://developer.android.com/develop/ui/views/appwidgets#AppWidgetProviderInfo), as described in this document. - Network accessline 29
[`AppWidgetProvider`](https://developer.android.com/reference/android/appwidget/AppWidgetProvider) class - Network accessline 29
[`AppWidgetProvider`](https://developer.android.com/reference/android/appwidget/AppWidgetProvider) class - Network accessline 31
that let you programmatically interface with the widget. Through it, you receive broadcasts when the widget is updated, enabled, disabled, or deleted. You [declare `AppWidgetProvider` in the manifest](https://developer.android.com/d - Network accessline 31
that let you programmatically interface with the widget. Through it, you receive broadcasts when the widget is updated, enabled, disabled, or deleted. You [declare `AppWidgetProvider` in the manifest](https://developer.android.com/d - Network accessline 32
receive broadcasts when the widget is updated, enabled, disabled, or deleted. You [declare `AppWidgetProvider` in the manifest](https://developer.android.com/develop/ui/views/appwidgets#widget-broadcasts) and then [implement](https: - Network accessline 32
receive broadcasts when the widget is updated, enabled, disabled, or deleted. You [declare `AppWidgetProvider` in the manifest](https://developer.android.com/develop/ui/views/appwidgets#widget-broadcasts) and then [implement](https: - Network accessline 33
deleted. You [declare `AppWidgetProvider` in the manifest](https://developer.android.com/develop/ui/views/appwidgets#widget-broadcasts) and then - Network accessline 33
deleted. You [declare `AppWidgetProvider` in the manifest](https://developer.android.com/develop/ui/views/appwidgets#widget-broadcasts) and then - Network accessline 34
[implement](https://developer.android.com/develop/ui/views/appwidgets#widget-broadcasts) it, as described in this document. - Network accessline 34
[implement](https://developer.android.com/develop/ui/views/appwidgets#widget-broadcasts) it, as described in this document. - Network accessline 36
View layout : Defines the initial layout for the widget. The layout is [defined in XML](https://developer.android.com/develop/ui/views/appwidgets#layout), as described in this document. - Network accessline 36
View layout : Defines the initial layout for the widget. The layout is [defined in XML](https://developer.android.com/develop/ui/views/appwidgets#layout), as described in this document. - Network accessline 38
in XML](https://developer.android.com/develop/ui/views/appwidgets#layout), as described in this document. - Network accessline 38
in XML](https://developer.android.com/develop/ui/views/appwidgets#layout), as described in this document. - Network accessline 40
Figure 2 shows how these components fit into the overall app widget processing flow.  **Figure 2.** App widget processing flow. - Network accessline 40
Figure 2 shows how these components fit into the overall app widget processing flow.  **Figure 2.** App widget processing flow. - Network accessline 42
 **Figure 2.** App widget processing flow. - Network accessline 42
 **Figure 2.** App widget processing flow. - Network accessline 51
- Starting in Android 12 (API level 31), you can provide a default configuration and let users reconfigure the widget later. See [Use the widget's default configuration](https://developer.android.com/develop/ui/views/appwidgets/configurat - Network accessline 51
- Starting in Android 12 (API level 31), you can provide a default configuration and let users reconfigure the widget later. See [Use the widget's default configuration](https://developer.android.com/develop/ui/views/appwidgets/configurat - Network accessline 52
widget's default configuration](https://developer.android.com/develop/ui/views/appwidgets/configuration#use-default) and [Enable users to reconfigure placed - Network accessline 52
widget's default configuration](https://developer.android.com/develop/ui/views/appwidgets/configuration#use-default) and [Enable users to reconfigure placed - Network accessline 53
widgets](https://developer.android.com/develop/ui/views/appwidgets/configuration#reconfigure-widgets) for more details. - Network accessline 53
widgets](https://developer.android.com/develop/ui/views/appwidgets/configuration#reconfigure-widgets) for more details. - Network accessline 56
We also recommend the following improvements: [flexible widget layouts](https://developer.android.com/develop/ui/views/appwidgets/layouts), - Network accessline 56
We also recommend the following improvements: [flexible widget layouts](https://developer.android.com/develop/ui/views/appwidgets/layouts), - Network accessline 57
[miscellaneous enhancements](https://developer.android.com/develop/ui/views/appwidgets/enhance), [advanced widgets](https://developer.android.com/develop/ui/views/appwidgets/advanced), [collection - Network accessline 57
[miscellaneous enhancements](https://developer.android.com/develop/ui/views/appwidgets/enhance), [advanced widgets](https://developer.android.com/develop/ui/views/appwidgets/advanced), [collection - Network accessline 58
widgets](https://developer.android.com/develop/ui/views/appwidgets/collections), and [building a widget host](https://developer.android.com/develop/ui/views/appwidgets/host). - Network accessline 58
widgets](https://developer.android.com/develop/ui/views/appwidgets/collections), and [building a widget host](https://developer.android.com/develop/ui/views/appwidgets/host). - Network accessline 66
To learn how to define and configure your metadata XML file, see the Compose-first [Declare the AppWidgetProviderInfo XML section](https://developer.android.com/develop/ui/compose/glance/create-app-widget#AppWidgetProviderInfo) in the Glanc - Network accessline 66
To learn how to define and configure your metadata XML file, see the Compose-first [Declare the AppWidgetProviderInfo XML section](https://developer.android.com/develop/ui/compose/glance/create-app-widget#AppWidgetProviderInfo) in the Glanc - Network accessline 67
Compose-first [Declare the AppWidgetProviderInfo XML section](https://developer.android.com/develop/ui/compose/glance/create-app-widget#AppWidgetProviderInfo) in the Glance - Network accessline 67
Compose-first [Declare the AppWidgetProviderInfo XML section](https://developer.android.com/develop/ui/compose/glance/create-app-widget#AppWidgetProviderInfo) in the Glance - Network accessline 77
To understand how to register your receiver in the manifest and implement Hilt-compatible lifecycle overrides, see the Compose-first [Use the AppWidgetProvider class to handle broadcasts section](https://developer.android.com/develop/ui/com - Network accessline 77
To understand how to register your receiver in the manifest and implement Hilt-compatible lifecycle overrides, see the Compose-first [Use the AppWidgetProvider class to handle broadcasts section](https://developer.android.com/develop/ui/com - Network accessline 78
Hilt-compatible lifecycle overrides, see the Compose-first [Use the AppWidgetProvider class to handle broadcasts section](https://developer.android.com/develop/ui/compose/glance/create-app-widget#widget-broadcasts) in the Glance documentati - Network accessline 78
Hilt-compatible lifecycle overrides, see the Compose-first [Use the AppWidgetProvider class to handle broadcasts section](https://developer.android.com/develop/ui/compose/glance/create-app-widget#widget-broadcasts) in the Glance documentati - Network accessline 79
AppWidgetProvider class to handle broadcasts section](https://developer.android.com/develop/ui/compose/glance/create-app-widget#widget-broadcasts) in the Glance - Network accessline 79
AppWidgetProvider class to handle broadcasts section](https://developer.android.com/develop/ui/compose/glance/create-app-widget#widget-broadcasts) in the Glance - Network accessline 84
You must define an initial layout for your widget in XML and save it in the project's `res/layout/` directory. Refer to [Design guidelines](https://developer.android.com/develop/ui/views/appwidgets/overview#design) for details. - Network accessline 84
You must define an initial layout for your widget in XML and save it in the project's `res/layout/` directory. Refer to [Design guidelines](https://developer.android.com/develop/ui/views/appwidgets/overview#design) for details. - Network accessline 85
project's `res/layout/` directory. Refer to [Design guidelines](https://developer.android.com/develop/ui/views/appwidgets/overview#design) for details. - Network accessline 85
project's `res/layout/` directory. Refer to [Design guidelines](https://developer.android.com/develop/ui/views/appwidgets/overview#design) for details. - Network accessline 87
Creating the widget layout is straightforward if you're familiar with [layouts](https://developer.android.com/guide/topics/ui/declaring-layout). However, be aware that widget layouts are based on - Network accessline 87
Creating the widget layout is straightforward if you're familiar with [layouts](https://developer.android.com/guide/topics/ui/declaring-layout). However, be aware that widget layouts are based on - Network accessline 88
[layouts](https://developer.android.com/guide/topics/ui/declaring-layout). However, be aware that widget layouts are based on - Network accessline 88
[layouts](https://developer.android.com/guide/topics/ui/declaring-layout). However, be aware that widget layouts are based on - Network accessline 89
[`RemoteViews`](https://developer.android.com/reference/android/widget/RemoteViews), which doesn't support every kind of layout or view widget. - Network accessline 89
[`RemoteViews`](https://developer.android.com/reference/android/widget/RemoteViews), which doesn't support every kind of layout or view widget. - Network accessline 93
`RemoteViews` also supports [`ViewStub`](https://developer.android.com/reference/android/view/ViewStub), which is an invisible, zero-sized - Network accessline 93
`RemoteViews` also supports [`ViewStub`](https://developer.android.com/reference/android/view/ViewStub), which is an invisible, zero-sized - Network accessline 101
- [`CheckBox`](https://developer.android.com/reference/kotlin/android/widget/CheckBox) - Network accessline 101
- [`CheckBox`](https://developer.android.com/reference/kotlin/android/widget/CheckBox) - Network accessline 103
- [`Switch`](https://developer.android.com/reference/android/widget/Switch) - Network accessline 103
- [`Switch`](https://developer.android.com/reference/android/widget/Switch) - Network accessline 105
- [`RadioButton`](https://developer.android.com/reference/android/widget/RadioButton) - Network accessline 105
- [`RadioButton`](https://developer.android.com/reference/android/widget/RadioButton) - Network accessline 107
The widget is still stateless. Your app must store the state and register for state change events.  **Figure 3.** E - Network accessline 107
The widget is still stateless. Your app must store the state and register for state change events.  **Figure 3.** E - Network accessline 109
 **Figure 3.** Example of stateful behavior. - Network accessline 109
 **Figure 3.** Example of stateful behavior. - Network accessline 144
To implement corner radii or set up dynamic styles for older Android devices, see the Compose-first [Implement rounded corners section](https://developer.android.com/develop/ui/compose/glance/create-app-widget#rounded-corner) in the Glance - Network accessline 144
To implement corner radii or set up dynamic styles for older Android devices, see the Compose-first [Implement rounded corners section](https://developer.android.com/develop/ui/compose/glance/create-app-widget#rounded-corner) in the Glance - Network accessline 145
see the Compose-first [Implement rounded corners section](https://developer.android.com/develop/ui/compose/glance/create-app-widget#rounded-corner) in the Glance - Network accessline 145
see the Compose-first [Implement rounded corners section](https://developer.android.com/develop/ui/compose/glance/create-app-widget#rounded-corner) in the Glance - Network accessline 150
Widgets run inside the home screen launcher process, and `system_server` enforces a per-widget bitmap memory ceiling (`6 * width * height` bytes; see the [Android 17 widget memory limit behavior change](https://developer.android.com/about/v - Network accessline 150
Widgets run inside the home screen launcher process, and `system_server` enforces a per-widget bitmap memory ceiling (`6 * width * height` bytes; see the [Android 17 widget memory limit behavior change](https://developer.android.com/about/v - Network accessline 151
enforces a per-widget bitmap memory ceiling (`6 * width * height` bytes; see the [Android 17 widget memory limit behavior change](https://developer.android.com/about/versions/17/behavior-changes-17#memory-limit-widget)). When building class - Network accessline 151
enforces a per-widget bitmap memory ceiling (`6 * width * height` bytes; see the [Android 17 widget memory limit behavior change](https://developer.android.com/about/versions/17/behavior-changes-17#memory-limit-widget)). When building class - Network accessline 152
[Android 17 widget memory limit behavior change](https://developer.android.com/about/versions/17/behavior-changes-17#memory-limit-widget)). When building classic - Network accessline 152
[Android 17 widget memory limit behavior change](https://developer.android.com/about/versions/17/behavior-changes-17#memory-limit-widget)). When building classic
system/glance-appwidget-updates-and-memory/references/res/xml/sample_widget_info.xml
- Network accessline 1
<?xml version="1.0" encoding="utf-8"?> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 1
<?xml version="1.0" encoding="utf-8"?> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 2
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 2
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
system/glance-canonical-layouts/SKILL.md
- Network accessline 84
- **Dimensions** : [dimens.xml](references/res/values/dimens.xml) - **Strings** : [strings.xml](references/res/values/strings.xml) - **Drawables** : [sample_action_list_preview.png](https://developer.android.com/static/agents/skills/system/ - Network accessline 84
- **Dimensions** : [dimens.xml](references/res/values/dimens.xml) - **Strings** : [strings.xml](references/res/values/strings.xml) - **Drawables** : [sample_action_list_preview.png](https://developer.android.com/static/agents/skills/system/ - Network accessline 85
- **Strings** : [strings.xml](references/res/values/strings.xml) - **Drawables** : [sample_action_list_preview.png](https://developer.android.com/static/agents/skills/system/glance-canonical-layouts/references/res/drawable-nodpi/sample_acti - Network accessline 85
- **Strings** : [strings.xml](references/res/values/strings.xml) - **Drawables** : [sample_action_list_preview.png](https://developer.android.com/static/agents/skills/system/glance-canonical-layouts/references/res/drawable-nodpi/sample_acti - Network accessline 86
- **Drawables** : [sample_action_list_preview.png](https://developer.android.com/static/agents/skills/system/glance-canonical-layouts/references/res/drawable-nodpi/sample_action_list_preview.png), [sample_home_icon.xml](references/res/drawa - Network accessline 86
- **Drawables** : [sample_action_list_preview.png](https://developer.android.com/static/agents/skills/system/glance-canonical-layouts/references/res/drawable-nodpi/sample_action_list_preview.png), [sample_home_icon.xml](references/res/drawa - Network accessline 100
- **Dimensions** : [dimens.xml](references/res/values/dimens.xml) - **Strings** : [strings.xml](references/res/values/strings.xml) - **Drawables** : [sample_check_list_preview.png](https://developer.android.com/static/agents/skills/system/g - Network accessline 100
- **Dimensions** : [dimens.xml](references/res/values/dimens.xml) - **Strings** : [strings.xml](references/res/values/strings.xml) - **Drawables** : [sample_check_list_preview.png](https://developer.android.com/static/agents/skills/system/g - Network accessline 101
- **Strings** : [strings.xml](references/res/values/strings.xml) - **Drawables** : [sample_check_list_preview.png](https://developer.android.com/static/agents/skills/system/glance-canonical-layouts/references/res/drawable-nodpi/sample_check - Network accessline 101
- **Strings** : [strings.xml](references/res/values/strings.xml) - **Drawables** : [sample_check_list_preview.png](https://developer.android.com/static/agents/skills/system/glance-canonical-layouts/references/res/drawable-nodpi/sample_check - Network accessline 102
- **Drawables** : [sample_check_list_preview.png](https://developer.android.com/static/agents/skills/system/glance-canonical-layouts/references/res/drawable-nodpi/sample_check_list_preview.png), [sample_pin_icon.xml](references/res/drawable - Network accessline 102
- **Drawables** : [sample_check_list_preview.png](https://developer.android.com/static/agents/skills/system/glance-canonical-layouts/references/res/drawable-nodpi/sample_check_list_preview.png), [sample_pin_icon.xml](references/res/drawable - Network accessline 115
- **Dimensions** : [dimens.xml](references/res/values/dimens.xml) - **Strings** : [strings.xml](references/res/values/strings.xml) - **Drawables** : [sample_expressive_toolbar_preview.png](https://developer.android.com/static/agents/skills/ - Network accessline 115
- **Dimensions** : [dimens.xml](references/res/values/dimens.xml) - **Strings** : [strings.xml](references/res/values/strings.xml) - **Drawables** : [sample_expressive_toolbar_preview.png](https://developer.android.com/static/agents/skills/ - Network accessline 116
- **Strings** : [strings.xml](references/res/values/strings.xml) - **Drawables** : [sample_expressive_toolbar_preview.png](https://developer.android.com/static/agents/skills/system/glance-canonical-layouts/references/res/drawable-nodpi/samp - Network accessline 116
- **Strings** : [strings.xml](references/res/values/strings.xml) - **Drawables** : [sample_expressive_toolbar_preview.png](https://developer.android.com/static/agents/skills/system/glance-canonical-layouts/references/res/drawable-nodpi/samp - Network accessline 117
- **Drawables** : [sample_expressive_toolbar_preview.png](https://developer.android.com/static/agents/skills/system/glance-canonical-layouts/references/res/drawable-nodpi/sample_expressive_toolbar_preview.png), [four_side_cookie_background. - Network accessline 117
- **Drawables** : [sample_expressive_toolbar_preview.png](https://developer.android.com/static/agents/skills/system/glance-canonical-layouts/references/res/drawable-nodpi/sample_expressive_toolbar_preview.png), [four_side_cookie_background. - Network accessline 131
- **Dimensions** : [dimens.xml](references/res/values/dimens.xml) - **Strings** : [strings.xml](references/res/values/strings.xml) - **Drawables** : [sample_image_grid_preview.png](https://developer.android.com/static/agents/skills/system/g - Network accessline 131
- **Dimensions** : [dimens.xml](references/res/values/dimens.xml) - **Strings** : [strings.xml](references/res/values/strings.xml) - **Drawables** : [sample_image_grid_preview.png](https://developer.android.com/static/agents/skills/system/g - Network accessline 132
- **Strings** : [strings.xml](references/res/values/strings.xml) - **Drawables** : [sample_image_grid_preview.png](https://developer.android.com/static/agents/skills/system/glance-canonical-layouts/references/res/drawable-nodpi/sample_image - Network accessline 132
- **Strings** : [strings.xml](references/res/values/strings.xml) - **Drawables** : [sample_image_grid_preview.png](https://developer.android.com/static/agents/skills/system/glance-canonical-layouts/references/res/drawable-nodpi/sample_image - Network accessline 133
- **Drawables** : [sample_image_grid_preview.png](https://developer.android.com/static/agents/skills/system/glance-canonical-layouts/references/res/drawable-nodpi/sample_image_grid_preview.png), [sample_placeholder_image.png](https://develo - Network accessline 133
- **Drawables** : [sample_image_grid_preview.png](https://developer.android.com/static/agents/skills/system/glance-canonical-layouts/references/res/drawable-nodpi/sample_image_grid_preview.png), [sample_placeholder_image.png](https://develo - Network accessline 146
- **Dimensions** : [dimens.xml](references/res/values/dimens.xml) - **Strings** : [strings.xml](references/res/values/strings.xml) - **Drawables** : [sample_image_text_list_preview.png](https://developer.android.com/static/agents/skills/sys - Network accessline 146
- **Dimensions** : [dimens.xml](references/res/values/dimens.xml) - **Strings** : [strings.xml](references/res/values/strings.xml) - **Drawables** : [sample_image_text_list_preview.png](https://developer.android.com/static/agents/skills/sys - Network accessline 147
- **Strings** : [strings.xml](references/res/values/strings.xml) - **Drawables** : [sample_image_text_list_preview.png](https://developer.android.com/static/agents/skills/system/glance-canonical-layouts/references/res/drawable-nodpi/sample_ - Network accessline 147
- **Strings** : [strings.xml](references/res/values/strings.xml) - **Drawables** : [sample_image_text_list_preview.png](https://developer.android.com/static/agents/skills/system/glance-canonical-layouts/references/res/drawable-nodpi/sample_ - Network accessline 148
- **Drawables** : [sample_image_text_list_preview.png](https://developer.android.com/static/agents/skills/system/glance-canonical-layouts/references/res/drawable-nodpi/sample_image_text_list_preview.png), [sample_placeholder_image.png](http - Network accessline 148
- **Drawables** : [sample_image_text_list_preview.png](https://developer.android.com/static/agents/skills/system/glance-canonical-layouts/references/res/drawable-nodpi/sample_image_text_list_preview.png), [sample_placeholder_image.png](http - Network accessline 162
- **Dimensions** : [dimens.xml](references/res/values/dimens.xml) - **Strings** : [strings.xml](references/res/values/strings.xml) - **Drawables** : [sample_long_text_preview.png](https://developer.android.com/static/agents/skills/system/gl - Network accessline 162
- **Dimensions** : [dimens.xml](references/res/values/dimens.xml) - **Strings** : [strings.xml](references/res/values/strings.xml) - **Drawables** : [sample_long_text_preview.png](https://developer.android.com/static/agents/skills/system/gl - Network accessline 163
- **Strings** : [strings.xml](references/res/values/strings.xml) - **Drawables** : [sample_long_text_preview.png](https://developer.android.com/static/agents/skills/system/glance-canonical-layouts/references/res/drawable-nodpi/sample_long_t - Network accessline 163
- **Strings** : [strings.xml](references/res/values/strings.xml) - **Drawables** : [sample_long_text_preview.png](https://developer.android.com/static/agents/skills/system/glance-canonical-layouts/references/res/drawable-nodpi/sample_long_t - Network accessline 164
- **Drawables** : [sample_long_text_preview.png](https://developer.android.com/static/agents/skills/system/glance-canonical-layouts/references/res/drawable-nodpi/sample_long_text_preview.png), [sample_text_icon.xml](references/res/drawable/ - Network accessline 164
- **Drawables** : [sample_long_text_preview.png](https://developer.android.com/static/agents/skills/system/glance-canonical-layouts/references/res/drawable-nodpi/sample_long_text_preview.png), [sample_text_icon.xml](references/res/drawable/ - Network accessline 176
- **Dimensions** : [dimens.xml](references/res/values/dimens.xml) - **Strings** : [strings.xml](references/res/values/strings.xml) - **Drawables** : [sample_search_toolbar_preview.png](https://developer.android.com/static/agents/skills/syst - Network accessline 176
- **Dimensions** : [dimens.xml](references/res/values/dimens.xml) - **Strings** : [strings.xml](references/res/values/strings.xml) - **Drawables** : [sample_search_toolbar_preview.png](https://developer.android.com/static/agents/skills/syst - Network accessline 177
- **Strings** : [strings.xml](references/res/values/strings.xml) - **Drawables** : [sample_search_toolbar_preview.png](https://developer.android.com/static/agents/skills/system/glance-canonical-layouts/references/res/drawable-nodpi/sample_s - Network accessline 177
- **Strings** : [strings.xml](references/res/values/strings.xml) - **Drawables** : [sample_search_toolbar_preview.png](https://developer.android.com/static/agents/skills/system/glance-canonical-layouts/references/res/drawable-nodpi/sample_s - Network accessline 178
- **Drawables** : [sample_search_toolbar_preview.png](https://developer.android.com/static/agents/skills/system/glance-canonical-layouts/references/res/drawable-nodpi/sample_search_toolbar_preview.png), [sample_search_icon.xml](references/r - Network accessline 178
- **Drawables** : [sample_search_toolbar_preview.png](https://developer.android.com/static/agents/skills/system/glance-canonical-layouts/references/res/drawable-nodpi/sample_search_toolbar_preview.png), [sample_search_icon.xml](references/r - Network accessline 191
- **Dimensions** : [dimens.xml](references/res/values/dimens.xml) - **Strings** : [strings.xml](references/res/values/strings.xml) - **Drawables** : [sample_full_bleed_image_preview.png](https://developer.android.com/static/agents/skills/sy - Network accessline 191
- **Dimensions** : [dimens.xml](references/res/values/dimens.xml) - **Strings** : [strings.xml](references/res/values/strings.xml) - **Drawables** : [sample_full_bleed_image_preview.png](https://developer.android.com/static/agents/skills/sy - Network accessline 192
- **Strings** : [strings.xml](references/res/values/strings.xml) - **Drawables** : [sample_full_bleed_image_preview.png](https://developer.android.com/static/agents/skills/system/glance-canonical-layouts/references/res/drawable-nodpi/sample - Network accessline 192
- **Strings** : [strings.xml](references/res/values/strings.xml) - **Drawables** : [sample_full_bleed_image_preview.png](https://developer.android.com/static/agents/skills/system/glance-canonical-layouts/references/res/drawable-nodpi/sample - Network accessline 193
- **Drawables** : [sample_full_bleed_image_preview.png](https://developer.android.com/static/agents/skills/system/glance-canonical-layouts/references/res/drawable-nodpi/sample_full_bleed_image_preview.png), [sample_scrim_gradient.xml](refer - Network accessline 193
- **Drawables** : [sample_full_bleed_image_preview.png](https://developer.android.com/static/agents/skills/system/glance-canonical-layouts/references/res/drawable-nodpi/sample_full_bleed_image_preview.png), [sample_scrim_gradient.xml](refer - Network accessline 207
- **Dimensions** : [dimens.xml](references/res/values/dimens.xml) - **Strings** : [strings.xml](references/res/values/strings.xml) - **Drawables** : [sample_toolbar_preview.png](https://developer.android.com/static/agents/skills/system/glan - Network accessline 207
- **Dimensions** : [dimens.xml](references/res/values/dimens.xml) - **Strings** : [strings.xml](references/res/values/strings.xml) - **Drawables** : [sample_toolbar_preview.png](https://developer.android.com/static/agents/skills/system/glan - Network accessline 208
- **Strings** : [strings.xml](references/res/values/strings.xml) - **Drawables** : [sample_toolbar_preview.png](https://developer.android.com/static/agents/skills/system/glance-canonical-layouts/references/res/drawable-nodpi/sample_toolbar_ - Network accessline 208
- **Strings** : [strings.xml](references/res/values/strings.xml) - **Drawables** : [sample_toolbar_preview.png](https://developer.android.com/static/agents/skills/system/glance-canonical-layouts/references/res/drawable-nodpi/sample_toolbar_ - Network accessline 209
- **Drawables** : [sample_toolbar_preview.png](https://developer.android.com/static/agents/skills/system/glance-canonical-layouts/references/res/drawable-nodpi/sample_toolbar_preview.png), [sample_app_logo.xml](references/res/drawable/sampl - Network accessline 209
- **Drawables** : [sample_toolbar_preview.png](https://developer.android.com/static/agents/skills/system/glance-canonical-layouts/references/res/drawable-nodpi/sample_toolbar_preview.png), [sample_app_logo.xml](references/res/drawable/sampl - Network accessline 224
- **Dimensions** : [dimens.xml](references/res/values/dimens.xml) - **Strings** : [strings.xml](references/res/values/strings.xml) - **Drawables** : [sample_text_image_preview.png](https://developer.android.com/static/agents/skills/system/g - Network accessline 224
- **Dimensions** : [dimens.xml](references/res/values/dimens.xml) - **Strings** : [strings.xml](references/res/values/strings.xml) - **Drawables** : [sample_text_image_preview.png](https://developer.android.com/static/agents/skills/system/g - Network accessline 225
- **Strings** : [strings.xml](references/res/values/strings.xml) - **Drawables** : [sample_text_image_preview.png](https://developer.android.com/static/agents/skills/system/glance-canonical-layouts/references/res/drawable-nodpi/sample_text_ - Network accessline 225
- **Strings** : [strings.xml](references/res/values/strings.xml) - **Drawables** : [sample_text_image_preview.png](https://developer.android.com/static/agents/skills/system/glance-canonical-layouts/references/res/drawable-nodpi/sample_text_ - Network accessline 226
- **Drawables** : [sample_text_image_preview.png](https://developer.android.com/static/agents/skills/system/glance-canonical-layouts/references/res/drawable-nodpi/sample_text_image_preview.png), [sample_text_icon.xml](references/res/drawabl - Network accessline 226
- **Drawables** : [sample_text_image_preview.png](https://developer.android.com/static/agents/skills/system/glance-canonical-layouts/references/res/drawable-nodpi/sample_text_image_preview.png), [sample_text_icon.xml](references/res/drawabl
system/glance-canonical-layouts/references/ActionDemonstrationActivity.kt
- Network accessline 6
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 6
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 7
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* http://www.apache.org/licenses/LICENSE-2.0
system/glance-canonical-layouts/references/CanonicalLayoutActivity.kt
- Network accessline 6
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 6
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 7
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 180
fun Description(modifier: Modifier = Modifier) { val linkColor = MaterialTheme.colorScheme.primary val url = "https://developer.android.com/design/ui/mobile/guides/widgets/layouts" - Network accessline 180
fun Description(modifier: Modifier = Modifier) { val linkColor = MaterialTheme.colorScheme.primary val url = "https://developer.android.com/design/ui/mobile/guides/widgets/layouts" - Network accessline 182
val url = "https://developer.android.com/design/ui/mobile/guides/widgets/layouts" - Network accessline 182
val url = "https://developer.android.com/design/ui/mobile/guides/widgets/layouts"
system/glance-canonical-layouts/references/CollectionsKtx.kt
- Network accessline 6
* You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 6
* You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* * https://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 7
* * https://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* https://www.apache.org/licenses/LICENSE-2.0
system/glance-canonical-layouts/references/collections/data/FakeImageGridDataRepository.kt
- Network accessline 6
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 6
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 7
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 137
// Courtesy of https://unsplash.com/@iamliam - Network accessline 137
// Courtesy of https://unsplash.com/@iamliam - Network accessline 140
ImageGridItemBackendData( key = "1", imageUrl = "https://images.unsplash.com/photo-1531306760863-7fb02a41db12", - Network accessline 140
ImageGridItemBackendData( key = "1", imageUrl = "https://images.unsplash.com/photo-1531306760863-7fb02a41db12", - Network accessline 141
key = "1", imageUrl = "https://images.unsplash.com/photo-1531306760863-7fb02a41db12", imageContentDescription = "Flowers at a wedding reception", - Network accessline 141
key = "1", imageUrl = "https://images.unsplash.com/photo-1531306760863-7fb02a41db12", imageContentDescription = "Flowers at a wedding reception", - Network accessline 142
imageUrl = "https://images.unsplash.com/photo-1531306760863-7fb02a41db12", - Network accessline 142
imageUrl = "https://images.unsplash.com/photo-1531306760863-7fb02a41db12", - Network accessline 147
ImageGridItemBackendData( key = "2", imageUrl = "https://images.unsplash.com/photo-1566964423430-3e52903303a5", - Network accessline 147
ImageGridItemBackendData( key = "2", imageUrl = "https://images.unsplash.com/photo-1566964423430-3e52903303a5", - Network accessline 148
key = "2", imageUrl = "https://images.unsplash.com/photo-1566964423430-3e52903303a5", imageContentDescription = "An up-close look at a Blushing Bride Protea flower.", - Network accessline 148
key = "2", imageUrl = "https://images.unsplash.com/photo-1566964423430-3e52903303a5", imageContentDescription = "An up-close look at a Blushing Bride Protea flower.", - Network accessline 149
imageUrl = "https://images.unsplash.com/photo-1566964423430-3e52903303a5", - Network accessline 149
imageUrl = "https://images.unsplash.com/photo-1566964423430-3e52903303a5", - Network accessline 154
ImageGridItemBackendData( key = "3", imageUrl = "https://images.unsplash.com/photo-1685540466252-8c21e7c37624", - Network accessline 154
ImageGridItemBackendData( key = "3", imageUrl = "https://images.unsplash.com/photo-1685540466252-8c21e7c37624", - Network accessline 155
key = "3", imageUrl = "https://images.unsplash.com/photo-1685540466252-8c21e7c37624", imageContentDescription = "A single water droplet rests in a budding red pansy.", - Network accessline 155
key = "3", imageUrl = "https://images.unsplash.com/photo-1685540466252-8c21e7c37624", imageContentDescription = "A single water droplet rests in a budding red pansy.", - Network accessline 156
imageUrl = "https://images.unsplash.com/photo-1685540466252-8c21e7c37624", - Network accessline 156
imageUrl = "https://images.unsplash.com/photo-1685540466252-8c21e7c37624", - Network accessline 161
ImageGridItemBackendData( key = "4", imageUrl = "https://images.unsplash.com/photo-1582817954171-c3533fffde89", - Network accessline 161
ImageGridItemBackendData( key = "4", imageUrl = "https://images.unsplash.com/photo-1582817954171-c3533fffde89", - Network accessline 162
key = "4", imageUrl = "https://images.unsplash.com/photo-1582817954171-c3533fffde89", imageContentDescription = "Blossom, petal, flower", - Network accessline 162
key = "4", imageUrl = "https://images.unsplash.com/photo-1582817954171-c3533fffde89", imageContentDescription = "Blossom, petal, flower", - Network accessline 163
imageUrl = "https://images.unsplash.com/photo-1582817954171-c3533fffde89", - Network accessline 163
imageUrl = "https://images.unsplash.com/photo-1582817954171-c3533fffde89", - Network accessline 168
ImageGridItemBackendData( key = "5", imageUrl = "https://images.unsplash.com/photo-1565314912546-0d18918fdc8f", - Network accessline 168
ImageGridItemBackendData( key = "5", imageUrl = "https://images.unsplash.com/photo-1565314912546-0d18918fdc8f", - Network accessline 169
key = "5", imageUrl = "https://images.unsplash.com/photo-1565314912546-0d18918fdc8f", imageContentDescription = "Green plant, sky and flowers", - Network accessline 169
key = "5", imageUrl = "https://images.unsplash.com/photo-1565314912546-0d18918fdc8f", imageContentDescription = "Green plant, sky and flowers", - Network accessline 170
imageUrl = "https://images.unsplash.com/photo-1565314912546-0d18918fdc8f", - Network accessline 170
imageUrl = "https://images.unsplash.com/photo-1565314912546-0d18918fdc8f", - Network accessline 175
ImageGridItemBackendData( key = "6", imageUrl = "https://images.unsplash.com/photo-1671525784444-392a8f8daa3f", - Network accessline 175
ImageGridItemBackendData( key = "6", imageUrl = "https://images.unsplash.com/photo-1671525784444-392a8f8daa3f", - Network accessline 176
key = "6", imageUrl = "https://images.unsplash.com/photo-1671525784444-392a8f8daa3f", imageContentDescription = "A snow-shoer walking up Strelapass", - Network accessline 176
key = "6", imageUrl = "https://images.unsplash.com/photo-1671525784444-392a8f8daa3f", imageContentDescription = "A snow-shoer walking up Strelapass", - Network accessline 177
imageUrl = "https://images.unsplash.com/photo-1671525784444-392a8f8daa3f", - Network accessline 177
imageUrl = "https://images.unsplash.com/photo-1671525784444-392a8f8daa3f", - Network accessline 182
ImageGridItemBackendData( key = "7", imageUrl = "https://images.unsplash.com/photo-1671525737370-1d490286372e", - Network accessline 182
ImageGridItemBackendData( key = "7", imageUrl = "https://images.unsplash.com/photo-1671525737370-1d490286372e", - Network accessline 183
key = "7", imageUrl = "https://images.unsplash.com/photo-1671525737370-1d490286372e", imageContentDescription = "Davos at sunrise, viewed from Schatzalp", - Network accessline 183
key = "7", imageUrl = "https://images.unsplash.com/photo-1671525737370-1d490286372e", imageContentDescription = "Davos at sunrise, viewed from Schatzalp", - Network accessline 184
imageUrl = "https://images.unsplash.com/photo-1671525737370-1d490286372e", - Network accessline 184
imageUrl = "https://images.unsplash.com/photo-1671525737370-1d490286372e", - Network accessline 189
ImageGridItemBackendData( key = "8", imageUrl = "https://images.unsplash.com/photo-1629027272726-2eed15f90e8e", - Network accessline 189
ImageGridItemBackendData( key = "8", imageUrl = "https://images.unsplash.com/photo-1629027272726-2eed15f90e8e", - Network accessline 190
key = "8", imageUrl = "https://images.unsplash.com/photo-1629027272726-2eed15f90e8e", imageContentDescription = "Nasturtium plants", - Network accessline 190
key = "8", imageUrl = "https://images.unsplash.com/photo-1629027272726-2eed15f90e8e", imageContentDescription = "Nasturtium plants", - Network accessline 191
imageUrl = "https://images.unsplash.com/photo-1629027272726-2eed15f90e8e", - Network accessline 191
imageUrl = "https://images.unsplash.com/photo-1629027272726-2eed15f90e8e",
system/glance-canonical-layouts/references/collections/data/FakeImageTextListDataRepository.kt
- Network accessline 133
// Courtesy of https://unsplash.com/@iamliam - Network accessline 133
// Courtesy of https://unsplash.com/@iamliam - Network accessline 137
title = "Flowers at a wedding reception", supportingText = "33,822 views", supportingImageUrl = "https://images.unsplash.com/photo-1531306760863-7fb02a41db12" - Network accessline 137
title = "Flowers at a wedding reception", supportingText = "33,822 views", supportingImageUrl = "https://images.unsplash.com/photo-1531306760863-7fb02a41db12" - Network accessline 138
supportingText = "33,822 views", supportingImageUrl = "https://images.unsplash.com/photo-1531306760863-7fb02a41db12" ), - Network accessline 138
supportingText = "33,822 views", supportingImageUrl = "https://images.unsplash.com/photo-1531306760863-7fb02a41db12" ), - Network accessline 139
supportingImageUrl = "https://images.unsplash.com/photo-1531306760863-7fb02a41db12" - Network accessline 139
supportingImageUrl = "https://images.unsplash.com/photo-1531306760863-7fb02a41db12" - Network accessline 143
title = "An up-close look at a Blushing Bride Protea flower.", supportingText = "31,072 views", supportingImageUrl = "https://images.unsplash.com/photo-1566964423430-3e52903303a5", - Network accessline 143
title = "An up-close look at a Blushing Bride Protea flower.", supportingText = "31,072 views", supportingImageUrl = "https://images.unsplash.com/photo-1566964423430-3e52903303a5", - Network accessline 144
supportingText = "31,072 views", supportingImageUrl = "https://images.unsplash.com/photo-1566964423430-3e52903303a5", ), - Network accessline 144
supportingText = "31,072 views", supportingImageUrl = "https://images.unsplash.com/photo-1566964423430-3e52903303a5", ), - Network accessline 145
supportingImageUrl = "https://images.unsplash.com/photo-1566964423430-3e52903303a5", - Network accessline 145
supportingImageUrl = "https://images.unsplash.com/photo-1566964423430-3e52903303a5", - Network accessline 147
DemoDataItem( key = "3", supportingImageUrl = "https://images.unsplash.com/photo-1685540466252-8c21e7c37624", - Network accessline 147
DemoDataItem( key = "3", supportingImageUrl = "https://images.unsplash.com/photo-1685540466252-8c21e7c37624", - Network accessline 148
key = "3", supportingImageUrl = "https://images.unsplash.com/photo-1685540466252-8c21e7c37624", title = "A single water droplet rests in a budding red pansy.", - Network accessline 148
key = "3", supportingImageUrl = "https://images.unsplash.com/photo-1685540466252-8c21e7c37624", title = "A single water droplet rests in a budding red pansy.", - Network accessline 149
supportingImageUrl = "https://images.unsplash.com/photo-1685540466252-8c21e7c37624", - Network accessline 149
supportingImageUrl = "https://images.unsplash.com/photo-1685540466252-8c21e7c37624", - Network accessline 155
title = "Blossom, petal, flower", supportingText = "23,815 views", supportingImageUrl = "https://images.unsplash.com/photo-1582817954171-c3533fffde89", - Network accessline 155
title = "Blossom, petal, flower", supportingText = "23,815 views", supportingImageUrl = "https://images.unsplash.com/photo-1582817954171-c3533fffde89", - Network accessline 156
supportingText = "23,815 views", supportingImageUrl = "https://images.unsplash.com/photo-1582817954171-c3533fffde89", ), - Network accessline 156
supportingText = "23,815 views", supportingImageUrl = "https://images.unsplash.com/photo-1582817954171-c3533fffde89", ), - Network accessline 157
supportingImageUrl = "https://images.unsplash.com/photo-1582817954171-c3533fffde89", - Network accessline 157
supportingImageUrl = "https://images.unsplash.com/photo-1582817954171-c3533fffde89", - Network accessline 161
title = "Orchids at New York Botanical Garden", supportingText = "205,481 views", supportingImageUrl = "https://images.unsplash.com/photo-1565357153781-98bf8686488a", - Network accessline 161
title = "Orchids at New York Botanical Garden", supportingText = "205,481 views", supportingImageUrl = "https://images.unsplash.com/photo-1565357153781-98bf8686488a", - Network accessline 162
supportingText = "205,481 views", supportingImageUrl = "https://images.unsplash.com/photo-1565357153781-98bf8686488a", ), - Network accessline 162
supportingText = "205,481 views", supportingImageUrl = "https://images.unsplash.com/photo-1565357153781-98bf8686488a", ), - Network accessline 163
supportingImageUrl = "https://images.unsplash.com/photo-1565357153781-98bf8686488a", - Network accessline 163
supportingImageUrl = "https://images.unsplash.com/photo-1565357153781-98bf8686488a", - Network accessline 167
title = "Tabletop composition with flower", supportingText = "85,060 views", supportingImageUrl = "https://images.unsplash.com/photo-1591404789216-d03646c78f73", - Network accessline 167
title = "Tabletop composition with flower", supportingText = "85,060 views", supportingImageUrl = "https://images.unsplash.com/photo-1591404789216-d03646c78f73", - Network accessline 168
supportingText = "85,060 views", supportingImageUrl = "https://images.unsplash.com/photo-1591404789216-d03646c78f73", ), - Network accessline 168
supportingText = "85,060 views", supportingImageUrl = "https://images.unsplash.com/photo-1591404789216-d03646c78f73", ), - Network accessline 169
supportingImageUrl = "https://images.unsplash.com/photo-1591404789216-d03646c78f73", - Network accessline 169
supportingImageUrl = "https://images.unsplash.com/photo-1591404789216-d03646c78f73", - Network accessline 173
title = "Wild bee on flower", supportingText = "6,692 views", supportingImageUrl = "https://images.unsplash.com/photo-1653927050791-5fc981435d12", - Network accessline 173
title = "Wild bee on flower", supportingText = "6,692 views", supportingImageUrl = "https://images.unsplash.com/photo-1653927050791-5fc981435d12", - Network accessline 174
supportingText = "6,692 views", supportingImageUrl = "https://images.unsplash.com/photo-1653927050791-5fc981435d12", ), - Network accessline 174
supportingText = "6,692 views", supportingImageUrl = "https://images.unsplash.com/photo-1653927050791-5fc981435d12", ), - Network accessline 175
supportingImageUrl = "https://images.unsplash.com/photo-1653927050791-5fc981435d12", - Network accessline 175
supportingImageUrl = "https://images.unsplash.com/photo-1653927050791-5fc981435d12", - Network accessline 179
title = "Flowers on a vine", supportingText = "31,862 views", supportingImageUrl = "https://images.unsplash.com/photo-1531307119710-accdb402fe03", - Network accessline 179
title = "Flowers on a vine", supportingText = "31,862 views", supportingImageUrl = "https://images.unsplash.com/photo-1531307119710-accdb402fe03", - Network accessline 180
supportingText = "31,862 views", supportingImageUrl = "https://images.unsplash.com/photo-1531307119710-accdb402fe03", ), - Network accessline 180
supportingText = "31,862 views", supportingImageUrl = "https://images.unsplash.com/photo-1531307119710-accdb402fe03", ), - Network accessline 181
supportingImageUrl = "https://images.unsplash.com/photo-1531307119710-accdb402fe03", - Network accessline 181
supportingImageUrl = "https://images.unsplash.com/photo-1531307119710-accdb402fe03",
system/glance-canonical-layouts/references/res/drawable/four_side_cookie_background.xml
- Network accessline 7
~ You may obtain a copy of the License at ~ ~ https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
~ You may obtain a copy of the License at ~ ~ https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
~ ~ https://www.apache.org/licenses/LICENSE-2.0 ~ - Network accessline 8
~ ~ https://www.apache.org/licenses/LICENSE-2.0 ~ - Network accessline 9
~ https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
~ https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 18
<vector xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 18
<vector xmlns:android="http://schemas.android.com/apk/res/android"
system/glance-canonical-layouts/references/res/drawable/sample_ac_icon.xml
system/glance-canonical-layouts/references/res/drawable/sample_add_icon.xml
- Network accessline 1
<vector android:height="24dp" android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> - Network accessline 1
<vector android:height="24dp" android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> - Network accessline 2
android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> <path android:fillColor="@android:color/white" android:pathData="M19,13h-6v6h-2v-6H5v-2h6V5h2v6h - Network accessline 2
android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> <path android:fillColor="@android:color/white" android:pathData="M19,13h-6v6h-2v-6H5v-2h6V5h2v6h - Network accessline 3
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> - Network accessline 3
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
system/glance-canonical-layouts/references/res/drawable/sample_app_logo.xml
- Network accessline 8
http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 14
limitations under the License. --> <vector xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 14
limitations under the License. --> <vector xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 15
--> <vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" - Network accessline 15
--> <vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" - Network accessline 16
<vector xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 16
<vector xmlns:android="http://schemas.android.com/apk/res/android"
system/glance-canonical-layouts/references/res/drawable/sample_arrow_right_icon.xml
- Network accessline 1
<vector android:autoMirrored="true" android:height="24dp" android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> - Network accessline 1
<vector android:autoMirrored="true" android:height="24dp" android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> - Network accessline 2
android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> <path android:fillColor="@android:color/white" android:pathData="M8.59,16 - Network accessline 2
android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> <path android:fillColor="@android:color/white" android:pathData="M8.59,16 - Network accessline 3
android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> - Network accessline 3
android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
system/glance-canonical-layouts/references/res/drawable/sample_bulb_icon.xml
system/glance-canonical-layouts/references/res/drawable/sample_camera_icon.xml
- Network accessline 6
~ You may obtain a copy of the License at ~ ~ https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 6
~ You may obtain a copy of the License at ~ ~ https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
~ ~ https://www.apache.org/licenses/LICENSE-2.0 ~ - Network accessline 7
~ ~ https://www.apache.org/licenses/LICENSE-2.0 ~ - Network accessline 8
~ https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
~ https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 14
~ limitations under the License. --> <vector xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 14
~ limitations under the License. --> <vector xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 15
--> <vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" - Network accessline 15
--> <vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" - Network accessline 16
<vector xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 16
<vector xmlns:android="http://schemas.android.com/apk/res/android"
system/glance-canonical-layouts/references/res/drawable/sample_checked_circle_icon.xml
- Network accessline 1
<vector android:height="24dp" android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> - Network accessline 1
<vector android:height="24dp" android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> - Network accessline 2
android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> <path android:fillColor="@android:color/white" android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,1 - Network accessline 2
android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> <path android:fillColor="@android:color/white" android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,1 - Network accessline 3
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> - Network accessline 3
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
system/glance-canonical-layouts/references/res/drawable/sample_circle_icon.xml
- Network accessline 1
<vector android:height="24dp" android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> - Network accessline 1
<vector android:height="24dp" android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> - Network accessline 2
android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> <path android:fillColor="@android:color/white" android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,1 - Network accessline 2
android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> <path android:fillColor="@android:color/white" android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,1 - Network accessline 3
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> - Network accessline 3
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
system/glance-canonical-layouts/references/res/drawable/sample_delete_icon.xml
- Network accessline 1
<vector android:height="24dp" android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> - Network accessline 1
<vector android:height="24dp" android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> - Network accessline 2
android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> <path android:fillColor="@android:color/white" android:pathData="M6,19c0,1.1 0.9,2 2,2h8c1.1,0 2 - Network accessline 2
android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> <path android:fillColor="@android:color/white" android:pathData="M6,19c0,1.1 0.9,2 2,2h8c1.1,0 2 - Network accessline 3
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> - Network accessline 3
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
system/glance-canonical-layouts/references/res/drawable/sample_door_icon.xml
system/glance-canonical-layouts/references/res/drawable/sample_edit_icon.xml
- Network accessline 1
<vector android:height="24dp" android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> - Network accessline 1
<vector android:height="24dp" android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> - Network accessline 2
android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> <path android:fillColor="@android:color/white" android:pathData="M3,17.25l0,3.75l3.75,0l11.06,-1 - Network accessline 2
android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> <path android:fillColor="@android:color/white" android:pathData="M3,17.25l0,3.75l3.75,0l11.06,-1 - Network accessline 3
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> - Network accessline 3
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
system/glance-canonical-layouts/references/res/drawable/sample_file_upload_icon.xml
- Network accessline 6
~ You may obtain a copy of the License at ~ ~ https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 6
~ You may obtain a copy of the License at ~ ~ https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
~ ~ https://www.apache.org/licenses/LICENSE-2.0 ~ - Network accessline 7
~ ~ https://www.apache.org/licenses/LICENSE-2.0 ~ - Network accessline 8
~ https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
~ https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 17
<vector xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 17
<vector xmlns:android="http://schemas.android.com/apk/res/android"
system/glance-canonical-layouts/references/res/drawable/sample_grid_icon.xml
- Network accessline 1
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:tint="#000000" android:viewportHeight="960" android:viewportWidth="960" android:width="24dp"> - Network accessline 1
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:tint="#000000" android:viewportHeight="960" android:viewportWidth="960" android:width="24dp">
system/glance-canonical-layouts/references/res/drawable/sample_heart_icon.xml
- Network accessline 1
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="960" android:viewportHeight="960" android:tint="#000000"> - Network accessline 1
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="960" android:viewportHeight="960" android:tint="#000000">
system/glance-canonical-layouts/references/res/drawable/sample_home_icon.xml
- Network accessline 1
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:tint="#000000" android:viewportHeight="960" android:viewportWidth="960" android:width="24dp"> - Network accessline 1
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:tint="#000000" android:viewportHeight="960" android:viewportWidth="960" android:width="24dp">
system/glance-canonical-layouts/references/res/drawable/sample_image_icon.xml
- Network accessline 1
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:tint="#000000" android:viewportHeight="960" android:viewportWidth="960" android:width="24dp"> - Network accessline 1
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:tint="#000000" android:viewportHeight="960" android:viewportWidth="960" android:width="24dp">
system/glance-canonical-layouts/references/res/drawable/sample_info_icon.xml
- Network accessline 1
<vector android:height="24dp" android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> - Network accessline 1
<vector android:height="24dp" android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> - Network accessline 2
android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> <path android:fillColor="@android:color/white" android:pathData="M11,7h2v2h-2V7zM11,11h2v6h-2V11 - Network accessline 2
android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> <path android:fillColor="@android:color/white" android:pathData="M11,7h2v2h-2V7zM11,11h2v6h-2V11 - Network accessline 3
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> - Network accessline 3
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
system/glance-canonical-layouts/references/res/drawable/sample_mic_icon.xml
- Network accessline 6
~ You may obtain a copy of the License at ~ ~ https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 6
~ You may obtain a copy of the License at ~ ~ https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
~ ~ https://www.apache.org/licenses/LICENSE-2.0 ~ - Network accessline 7
~ ~ https://www.apache.org/licenses/LICENSE-2.0 ~ - Network accessline 8
~ https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
~ https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 14
~ limitations under the License. --> <vector xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 14
~ limitations under the License. --> <vector xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 15
--> <vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" - Network accessline 15
--> <vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" - Network accessline 16
<vector xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 16
<vector xmlns:android="http://schemas.android.com/apk/res/android"
system/glance-canonical-layouts/references/res/drawable/sample_no_data_icon.xml
- Network accessline 1
<vector android:height="24dp" android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> - Network accessline 1
<vector android:height="24dp" android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> - Network accessline 2
android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> <path android:fillColor="@android:color/white" android:pathData="M19,6v10.5l1.95,1.95C20.98,18.3 - Network accessline 2
android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> <path android:fillColor="@android:color/white" android:pathData="M19,6v10.5l1.95,1.95C20.98,18.3 - Network accessline 3
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> - Network accessline 3
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
system/glance-canonical-layouts/references/res/drawable/sample_pin_icon.xml
- Network accessline 1
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp"> - Network accessline 1
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp">
system/glance-canonical-layouts/references/res/drawable/sample_power_settings_icon.xml
- Network accessline 1
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp"> - Network accessline 1
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp">
system/glance-canonical-layouts/references/res/drawable/sample_refresh_icon.xml
- Network accessline 1
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp"> - Network accessline 1
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp">
system/glance-canonical-layouts/references/res/drawable/sample_scrim_gradient.xml
- Network accessline 9
http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 15
limitations under the License. --> <vector xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 15
limitations under the License. --> <vector xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 16
--> <vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:aapt="http://schemas.android.com/aapt" - Network accessline 16
--> <vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:aapt="http://schemas.android.com/aapt" - Network accessline 17
<vector xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 17
<vector xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 18
xmlns:aapt="http://schemas.android.com/aapt" - Network accessline 18
xmlns:aapt="http://schemas.android.com/aapt"
system/glance-canonical-layouts/references/res/drawable/sample_search_icon.xml
- Network accessline 6
~ You may obtain a copy of the License at ~ ~ https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 6
~ You may obtain a copy of the License at ~ ~ https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
~ ~ https://www.apache.org/licenses/LICENSE-2.0 ~ - Network accessline 7
~ ~ https://www.apache.org/licenses/LICENSE-2.0 ~ - Network accessline 8
~ https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
~ https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 14
~ limitations under the License. --> <vector xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 14
~ limitations under the License. --> <vector xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 15
--> <vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" - Network accessline 15
--> <vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" - Network accessline 16
<vector xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 16
<vector xmlns:android="http://schemas.android.com/apk/res/android"
system/glance-canonical-layouts/references/res/drawable/sample_share_icon.xml
- Network accessline 1
<vector android:height="24dp" android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> - Network accessline 1
<vector android:height="24dp" android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> - Network accessline 2
android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> <path android:fillColor="@android:color/white" android:pathData="M18,16.08c-0.76,0 -1.44,0.3 -1. - Network accessline 2
android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> <path android:fillColor="@android:color/white" android:pathData="M18,16.08c-0.76,0 -1.44,0.3 -1. - Network accessline 3
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> - Network accessline 3
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
system/glance-canonical-layouts/references/res/drawable/sample_snooze_icon.xml
- Network accessline 1
<vector android:height="24dp" android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> - Network accessline 1
<vector android:height="24dp" android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> - Network accessline 2
android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> <path android:fillColor="@android:color/white" android:pathData="M7.88,3.39L6.6,1.86 2,5.71l1.29 - Network accessline 2
android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> <path android:fillColor="@android:color/white" android:pathData="M7.88,3.39L6.6,1.86 2,5.71l1.29 - Network accessline 3
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> - Network accessline 3
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
system/glance-canonical-layouts/references/res/drawable/sample_text_icon.xml
- Network accessline 1
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:autoMirrored="true" android:height="24dp" android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp"> - Network accessline 1
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:autoMirrored="true" android:height="24dp" android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp">
system/glance-canonical-layouts/references/res/drawable/sample_thermostat_icon.xml
- Network accessline 1
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="960" android:viewportHeight="960" android:tint="#000000"> - Network accessline 1
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="960" android:viewportHeight="960" android:tint="#000000">
system/glance-canonical-layouts/references/res/drawable/sample_videocam_icon.xml
- Network accessline 6
~ You may obtain a copy of the License at ~ ~ https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 6
~ You may obtain a copy of the License at ~ ~ https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
~ ~ https://www.apache.org/licenses/LICENSE-2.0 ~ - Network accessline 7
~ ~ https://www.apache.org/licenses/LICENSE-2.0 ~ - Network accessline 8
~ https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
~ https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 14
~ limitations under the License. --> <vector xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 14
~ limitations under the License. --> <vector xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 15
--> <vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" - Network accessline 15
--> <vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" - Network accessline 16
<vector xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 16
<vector xmlns:android="http://schemas.android.com/apk/res/android"
system/glance-canonical-layouts/references/res/values/dimens.xml
- Network accessline 7
~ You may obtain a copy of the License at ~ ~ https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
~ You may obtain a copy of the License at ~ ~ https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
~ ~ https://www.apache.org/licenses/LICENSE-2.0 ~ - Network accessline 8
~ ~ https://www.apache.org/licenses/LICENSE-2.0 ~ - Network accessline 9
~ https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
~ https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 25
<!-- Reference: https://developer.android.com/design/ui/mobile/guides/widgets/sizing#handheld - Network accessline 25
<!-- Reference: https://developer.android.com/design/ui/mobile/guides/widgets/sizing#handheld - Network accessline 26
https://developer.android.com/design/ui/mobile/guides/widgets/sizing#handheld - Network accessline 26
https://developer.android.com/design/ui/mobile/guides/widgets/sizing#handheld
system/glance-canonical-layouts/references/res/values/strings.xml
- Network accessline 6
~ You may obtain a copy of the License at ~ ~ https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 6
~ You may obtain a copy of the License at ~ ~ https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
~ ~ https://www.apache.org/licenses/LICENSE-2.0 ~ - Network accessline 7
~ ~ https://www.apache.org/licenses/LICENSE-2.0 ~ - Network accessline 8
~ https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
~ https://www.apache.org/licenses/LICENSE-2.0
system/glance-canonical-layouts/references/res/xml/sample_action_list_widget_info.xml
- Network accessline 8
http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 19
* no max limits as we turn list to a grid to support larger screens --> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 19
* no max limits as we turn list to a grid to support larger screens --> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 20
--> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:initialLayout="@layout/glance_default_loading_layout" - Network accessline 20
--> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:initialLayout="@layout/glance_default_loading_layout" - Network accessline 21
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 21
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
system/glance-canonical-layouts/references/res/xml/sample_check_list_widget_info.xml
- Network accessline 8
http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 20
--> <!-- For a checklist, a small size widget suffices for default drop. --> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 20
--> <!-- For a checklist, a small size widget suffices for default drop. --> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 21
<!-- For a checklist, a small size widget suffices for default drop. --> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:initialLayout="@layout/glance_default_loading_layout" - Network accessline 21
<!-- For a checklist, a small size widget suffices for default drop. --> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:initialLayout="@layout/glance_default_loading_layout" - Network accessline 22
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 22
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
system/glance-canonical-layouts/references/res/xml/sample_expressive_toolbar_widget_info.xml
- Network accessline 6
~ You may obtain a copy of the License at ~ ~ https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 6
~ You may obtain a copy of the License at ~ ~ https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
~ ~ https://www.apache.org/licenses/LICENSE-2.0 ~ - Network accessline 7
~ ~ https://www.apache.org/licenses/LICENSE-2.0 ~ - Network accessline 8
~ https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
~ https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 14
~ limitations under the License. --> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 14
~ limitations under the License. --> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 15
--> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:initialLayout="@layout/glance_default_loading_layout" - Network accessline 15
--> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:initialLayout="@layout/glance_default_loading_layout" - Network accessline 16
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 16
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
system/glance-canonical-layouts/references/res/xml/sample_full_bleed_image_widget_info.xml
- Network accessline 8
http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 14
limitations under the License. --> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 14
limitations under the License. --> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 15
--> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:initialLayout="@layout/glance_default_loading_layout" - Network accessline 15
--> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:initialLayout="@layout/glance_default_loading_layout" - Network accessline 16
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 16
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
system/glance-canonical-layouts/references/res/xml/sample_image_grid_widget_info.xml
- Network accessline 8
http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 19
* no max limits as we turn list to a grid to support larger screens --> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 19
* no max limits as we turn list to a grid to support larger screens --> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 20
--> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:initialLayout="@layout/glance_default_loading_layout" - Network accessline 20
--> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:initialLayout="@layout/glance_default_loading_layout" - Network accessline 21
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 21
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
system/glance-canonical-layouts/references/res/xml/sample_image_text_list_widget_info.xml
- Network accessline 8
http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 19
* no max limits as we turn list to a grid to support larger screens --> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 19
* no max limits as we turn list to a grid to support larger screens --> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 20
--> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:initialLayout="@layout/glance_default_loading_layout" - Network accessline 20
--> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:initialLayout="@layout/glance_default_loading_layout" - Network accessline 21
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 21
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
system/glance-canonical-layouts/references/res/xml/sample_long_text_widget_info.xml
- Network accessline 8
http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 14
limitations under the License. --> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 14
limitations under the License. --> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 15
--> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:initialLayout="@layout/glance_default_loading_layout" - Network accessline 15
--> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:initialLayout="@layout/glance_default_loading_layout" - Network accessline 16
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 16
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
system/glance-canonical-layouts/references/res/xml/sample_search_toolbar_widget_info.xml
- Network accessline 8
http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 14
limitations under the License. --> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 14
limitations under the License. --> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 15
--> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:initialLayout="@layout/glance_default_loading_layout" - Network accessline 15
--> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:initialLayout="@layout/glance_default_loading_layout" - Network accessline 16
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 16
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
system/glance-canonical-layouts/references/res/xml/sample_text_with_image_widget_info.xml
- Network accessline 8
http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 14
limitations under the License. --> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 14
limitations under the License. --> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 15
--> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:initialLayout="@layout/glance_default_loading_layout" - Network accessline 15
--> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:initialLayout="@layout/glance_default_loading_layout" - Network accessline 16
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 16
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
system/glance-canonical-layouts/references/res/xml/sample_toolbar_widget_info.xml
- Network accessline 6
~ You may obtain a copy of the License at ~ ~ https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 6
~ You may obtain a copy of the License at ~ ~ https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
~ ~ https://www.apache.org/licenses/LICENSE-2.0 ~ - Network accessline 7
~ ~ https://www.apache.org/licenses/LICENSE-2.0 ~ - Network accessline 8
~ https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
~ https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 14
~ limitations under the License. --> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 14
~ limitations under the License. --> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 15
--> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:initialLayout="@layout/glance_default_loading_layout" - Network accessline 15
--> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:initialLayout="@layout/glance_default_loading_layout" - Network accessline 16
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 16
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
system/glance-canonical-layouts/references/text/FullBleedImageAppWidget.kt
- Network accessline 6
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 6
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 7
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* http://www.apache.org/licenses/LICENSE-2.0
system/glance-canonical-layouts/references/text/LongTextAppWidget.kt
- Network accessline 6
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 6
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 7
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* http://www.apache.org/licenses/LICENSE-2.0
system/glance-canonical-layouts/references/text/TextWithImageAppWidget.kt
- Network accessline 6
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 6
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 7
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* http://www.apache.org/licenses/LICENSE-2.0
system/glance-canonical-layouts/references/text/data/FakeLongTextRespository.kt
system/glance-canonical-layouts/references/text/data/FakeTextWithImageRepository.kt
- Network accessline 121
// Courtesy of https://unsplash.com/@iamliam - Network accessline 121
// Courtesy of https://unsplash.com/@iamliam - Network accessline 125
secondary = "Golden light washes over the alpine village of Davos, a breathtaking view unfolding from Schatzalp's vantage point.", caption = "33,822 views", url = "https://images.unsplash.com/photo-1671525737370- - Network accessline 125
secondary = "Golden light washes over the alpine village of Davos, a breathtaking view unfolding from Schatzalp's vantage point.", caption = "33,822 views", url = "https://images.unsplash.com/photo-1671525737370- - Network accessline 126
caption = "33,822 views", url = "https://images.unsplash.com/photo-1671525737370-1d490286372e", imageContentDescription = "Davos at sunrise, viewed from Schatzalp", - Network accessline 126
caption = "33,822 views", url = "https://images.unsplash.com/photo-1671525737370-1d490286372e", imageContentDescription = "Davos at sunrise, viewed from Schatzalp", - Network accessline 127
url = "https://images.unsplash.com/photo-1671525737370-1d490286372e", - Network accessline 127
url = "https://images.unsplash.com/photo-1671525737370-1d490286372e", - Network accessline 132
secondary = "I took this photo at a wedding reception. The flowers were in a vase next to a window", caption = "33,822 views", url = "https://images.unsplash.com/photo-1531306760863-7fb02a41db12", - Network accessline 132
secondary = "I took this photo at a wedding reception. The flowers were in a vase next to a window", caption = "33,822 views", url = "https://images.unsplash.com/photo-1531306760863-7fb02a41db12", - Network accessline 133
caption = "33,822 views", url = "https://images.unsplash.com/photo-1531306760863-7fb02a41db12", imageContentDescription = "Flowers at a wedding reception", - Network accessline 133
caption = "33,822 views", url = "https://images.unsplash.com/photo-1531306760863-7fb02a41db12", imageContentDescription = "Flowers at a wedding reception", - Network accessline 134
url = "https://images.unsplash.com/photo-1531306760863-7fb02a41db12", - Network accessline 134
url = "https://images.unsplash.com/photo-1531306760863-7fb02a41db12", - Network accessline 139
secondary = "An up-close look at a Blushing Bride Protea flower, native to South Africa", caption = "31,072 views", url = "https://images.unsplash.com/photo-1566964423430-3e52903303a5", - Network accessline 139
secondary = "An up-close look at a Blushing Bride Protea flower, native to South Africa", caption = "31,072 views", url = "https://images.unsplash.com/photo-1566964423430-3e52903303a5", - Network accessline 140
caption = "31,072 views", url = "https://images.unsplash.com/photo-1566964423430-3e52903303a5", imageContentDescription = "Blushing Bride flower", - Network accessline 140
caption = "31,072 views", url = "https://images.unsplash.com/photo-1566964423430-3e52903303a5", imageContentDescription = "Blushing Bride flower", - Network accessline 141
url = "https://images.unsplash.com/photo-1566964423430-3e52903303a5", - Network accessline 141
url = "https://images.unsplash.com/photo-1566964423430-3e52903303a5", - Network accessline 146
secondary = "A snow-shoer walking up Strelapass on snow lined with deep trails from skiiers", caption = "15 min", url = "https://images.unsplash.com/photo-1671525784444-392a8f8daa3f", - Network accessline 146
secondary = "A snow-shoer walking up Strelapass on snow lined with deep trails from skiiers", caption = "15 min", url = "https://images.unsplash.com/photo-1671525784444-392a8f8daa3f", - Network accessline 147
caption = "15 min", url = "https://images.unsplash.com/photo-1671525784444-392a8f8daa3f", imageContentDescription = "A snow-shoer walking up Strelapass on snow lined with deep trails from skiiers", - Network accessline 147
caption = "15 min", url = "https://images.unsplash.com/photo-1671525784444-392a8f8daa3f", imageContentDescription = "A snow-shoer walking up Strelapass on snow lined with deep trails from skiiers", - Network accessline 148
url = "https://images.unsplash.com/photo-1671525784444-392a8f8daa3f", - Network accessline 148
url = "https://images.unsplash.com/photo-1671525784444-392a8f8daa3f", - Network accessline 153
secondary = "Secrets held within a drop: A microcosm of beauty in a world of red.", caption = "193 views", url = "https://images.unsplash.com/photo-1685540466252-8c21e7c37624", - Network accessline 153
secondary = "Secrets held within a drop: A microcosm of beauty in a world of red.", caption = "193 views", url = "https://images.unsplash.com/photo-1685540466252-8c21e7c37624", - Network accessline 154
caption = "193 views", url = "https://images.unsplash.com/photo-1685540466252-8c21e7c37624", imageContentDescription = "A single water droplet rests in a budding red pansy.", - Network accessline 154
caption = "193 views", url = "https://images.unsplash.com/photo-1685540466252-8c21e7c37624", imageContentDescription = "A single water droplet rests in a budding red pansy.", - Network accessline 155
url = "https://images.unsplash.com/photo-1685540466252-8c21e7c37624", - Network accessline 155
url = "https://images.unsplash.com/photo-1685540466252-8c21e7c37624",
system/glance-canonical-layouts/references/text/layout/FullBleedImageLayout.kt
- Network accessline 6
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 6
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 7
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* http://www.apache.org/licenses/LICENSE-2.0
system/glance-canonical-layouts/references/text/layout/LongTextLayout.kt
- Network accessline 6
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 6
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 7
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* http://www.apache.org/licenses/LICENSE-2.0
system/glance-canonical-layouts/references/toolbars/ExpressiveToolbarAppWidget.kt
- Network accessline 6
* You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 6
* You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* * https://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 7
* * https://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* https://www.apache.org/licenses/LICENSE-2.0
system/glance-canonical-layouts/references/toolbars/SearchToolBarAppWidget.kt
- Network accessline 6
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 6
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 7
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* http://www.apache.org/licenses/LICENSE-2.0
system/glance-canonical-layouts/references/toolbars/ToolBarAppWidget.kt
- Network accessline 6
* You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 6
* You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* * https://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 7
* * https://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* https://www.apache.org/licenses/LICENSE-2.0
system/glance-canonical-layouts/references/toolbars/layout/Buttons.kt
- Network accessline 6
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 6
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 7
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 128
/** * Defines the roundness of a shape inline with the tokens used in M3 * https://m3.material.io/styles/shape/shape-scale-tokens - Network accessline 128
/** * Defines the roundness of a shape inline with the tokens used in M3 * https://m3.material.io/styles/shape/shape-scale-tokens - Network accessline 129
* Defines the roundness of a shape inline with the tokens used in M3 * https://m3.material.io/styles/shape/shape-scale-tokens */ - Network accessline 129
* Defines the roundness of a shape inline with the tokens used in M3 * https://m3.material.io/styles/shape/shape-scale-tokens */ - Network accessline 130
* https://m3.material.io/styles/shape/shape-scale-tokens - Network accessline 130
* https://m3.material.io/styles/shape/shape-scale-tokens
system/glance-canonical-layouts/references/toolbars/layout/ExpressiveToolbarLayout.kt
- Network accessline 6
* You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 6
* You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* * https://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 7
* * https://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 56
* Uses a 4-sided cookie cutout as the background shape of the widget - the shape fits at-least two * vertical or two horizontal edges to meet the quality criteria; see * https://developer.android.com/design/ui/mobile/guides/widgets/widget - Network accessline 56
* Uses a 4-sided cookie cutout as the background shape of the widget - the shape fits at-least two * vertical or two horizontal edges to meet the quality criteria; see * https://developer.android.com/design/ui/mobile/guides/widgets/widget - Network accessline 57
* vertical or two horizontal edges to meet the quality criteria; see * https://developer.android.com/design/ui/mobile/guides/widgets/widget_quality_guide * - Network accessline 57
* vertical or two horizontal edges to meet the quality criteria; see * https://developer.android.com/design/ui/mobile/guides/widgets/widget_quality_guide * - Network accessline 58
* https://developer.android.com/design/ui/mobile/guides/widgets/widget_quality_guide - Network accessline 58
* https://developer.android.com/design/ui/mobile/guides/widgets/widget_quality_guide
system/glance-canonical-layouts/references/toolbars/layout/LayoutComponents.kt
- Network accessline 6
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 6
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 7
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* http://www.apache.org/licenses/LICENSE-2.0
system/glance-canonical-layouts/references/toolbars/layout/SearchToolBarLayout.kt
- Network accessline 6
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 6
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 7
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* http://www.apache.org/licenses/LICENSE-2.0
system/glance-canonical-layouts/references/toolbars/layout/ToolBarLayout.kt
- Network accessline 6
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 6
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 7
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* http://www.apache.org/licenses/LICENSE-2.0
system/glance-canonical-layouts/references/utils/FontUtils.kt
- Network accessline 6
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 6
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 7
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 35
// An alternate implementation can extract the logic from following reference instead of using a // textView. // https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:appcompat/appcompat/src/main/java/androidx/appc - Network accessline 35
// An alternate implementation can extract the logic from following reference instead of using a // textView. // https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:appcompat/appcompat/src/main/java/androidx/appc - Network accessline 37
// https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatTextViewAutoSizeHelper.java;l=679;drc=573d69d7458c96885cdcbbf8471e24dd8d293997 - Network accessline 37
// https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatTextViewAutoSizeHelper.java;l=679;drc=573d69d7458c96885cdcbbf8471e24dd8d293997
system/glance-canonical-layouts/references/utils/ImageUtils.kt
- Network accessline 20
* Loads the image resource as bitmap by scaling for the requested size and enforcing * the per-image AppWidget memory ceiling. * https://developer.android.com/topic/performance/graphics/load-bitmap#load-bitmap - Network accessline 20
* Loads the image resource as bitmap by scaling for the requested size and enforcing * the per-image AppWidget memory ceiling. * https://developer.android.com/topic/performance/graphics/load-bitmap#load-bitmap - Network accessline 21
* the per-image AppWidget memory ceiling. * https://developer.android.com/topic/performance/graphics/load-bitmap#load-bitmap */ - Network accessline 21
* the per-image AppWidget memory ceiling. * https://developer.android.com/topic/performance/graphics/load-bitmap#load-bitmap */ - Network accessline 22
* https://developer.android.com/topic/performance/graphics/load-bitmap#load-bitmap - Network accessline 22
* https://developer.android.com/topic/performance/graphics/load-bitmap#load-bitmap
system/glance-canonical-layouts/references/utils/PreviewAnnotations.kt
- Network accessline 6
* You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 6
* You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* * https://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 7
* * https://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* https://www.apache.org/licenses/LICENSE-2.0 - Network accessline 23
* Previews for 2x2 sized widgets in handheld and tablets. * * https://developer.android.com/design/ui/mobile/guides/widgets/sizing - Network accessline 23
* Previews for 2x2 sized widgets in handheld and tablets. * * https://developer.android.com/design/ui/mobile/guides/widgets/sizing - Network accessline 24
* * https://developer.android.com/design/ui/mobile/guides/widgets/sizing */ - Network accessline 24
* * https://developer.android.com/design/ui/mobile/guides/widgets/sizing */ - Network accessline 25
* https://developer.android.com/design/ui/mobile/guides/widgets/sizing - Network accessline 25
* https://developer.android.com/design/ui/mobile/guides/widgets/sizing - Network accessline 40
* Previews for 4x2 handheld and 3x2 tablet widgets. * * https://developer.android.com/design/ui/mobile/guides/widgets/sizing - Network accessline 40
* Previews for 4x2 handheld and 3x2 tablet widgets. * * https://developer.android.com/design/ui/mobile/guides/widgets/sizing - Network accessline 41
* * https://developer.android.com/design/ui/mobile/guides/widgets/sizing */ - Network accessline 41
* * https://developer.android.com/design/ui/mobile/guides/widgets/sizing */ - Network accessline 42
* https://developer.android.com/design/ui/mobile/guides/widgets/sizing - Network accessline 42
* https://developer.android.com/design/ui/mobile/guides/widgets/sizing - Network accessline 57
* Previews for 4x3 handheld and 3x3 tablet widgets. * * https://developer.android.com/design/ui/mobile/guides/widgets/sizing - Network accessline 57
* Previews for 4x3 handheld and 3x3 tablet widgets. * * https://developer.android.com/design/ui/mobile/guides/widgets/sizing - Network accessline 58
* * https://developer.android.com/design/ui/mobile/guides/widgets/sizing */ - Network accessline 58
* * https://developer.android.com/design/ui/mobile/guides/widgets/sizing */ - Network accessline 59
* https://developer.android.com/design/ui/mobile/guides/widgets/sizing - Network accessline 59
* https://developer.android.com/design/ui/mobile/guides/widgets/sizing
testing/testing-setup/SKILL.md
- Network accessline 50
> [!IMPORTANT] > **Important:** Always consult the documentation of the applicable framework to learn about testing (for example: [Hilt testing guide](references/android/training/dependency-injection/hilt-testing.md), [Koin Instrumented tes - Network accessline 50
> [!IMPORTANT] > **Important:** Always consult the documentation of the applicable framework to learn about testing (for example: [Hilt testing guide](references/android/training/dependency-injection/hilt-testing.md), [Koin Instrumented tes - Network accessline 51
> **Important:** Always consult the documentation of the applicable framework to learn about testing (for example: [Hilt testing guide](references/android/training/dependency-injection/hilt-testing.md), [Koin Instrumented tests](https://ins - Network accessline 51
> **Important:** Always consult the documentation of the applicable framework to learn about testing (for example: [Hilt testing guide](references/android/training/dependency-injection/hilt-testing.md), [Koin Instrumented tests](https://ins - Network accessline 180
If you need to take screenshots of the app running in a device, use [Dropshots](https://raw.githubusercontent.com/dropbox/dropshots/refs/heads/main/README.md). You need a device for screenshot tests when verifying - Network accessline 180
If you need to take screenshots of the app running in a device, use [Dropshots](https://raw.githubusercontent.com/dropbox/dropshots/refs/heads/main/README.md). You need a device for screenshot tests when verifying - Network accessline 181
[Dropshots](https://raw.githubusercontent.com/dropbox/dropshots/refs/heads/main/README.md). You need a device for screenshot tests when verifying - Network accessline 181
[Dropshots](https://raw.githubusercontent.com/dropbox/dropshots/refs/heads/main/README.md). You need a device for screenshot tests when verifying
testing/testing-setup/references/android/develop/ui/compose/testing/common-patterns.md
- Network accessline 1
[Video](https://www.youtube.com/watch?v=Y9GWnwi9D0I) - Network accessline 1
[Video](https://www.youtube.com/watch?v=Y9GWnwi9D0I) - Network accessline 7
[`ComposeTestRule`](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/junit4/ComposeTestRule) lets you start an activity displaying any composable: - Network accessline 7
[`ComposeTestRule`](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/junit4/ComposeTestRule) lets you start an activity displaying any composable: - Network accessline 23
A common pattern to achieve this is to create an `AndroidComposeTestRule` using an empty activity such as [`ComponentActivity`](https://developer.android.com/reference/androidx/activity/ComponentActivity). - Network accessline 23
A common pattern to achieve this is to create an `AndroidComposeTestRule` using an empty activity such as [`ComponentActivity`](https://developer.android.com/reference/androidx/activity/ComponentActivity). - Network accessline 24
an empty activity such as [`ComponentActivity`](https://developer.android.com/reference/androidx/activity/ComponentActivity). - Network accessline 24
an empty activity such as [`ComponentActivity`](https://developer.android.com/reference/androidx/activity/ComponentActivity). - Network accessline 52
You can create custom [semantics](https://developer.android.com/develop/ui/compose/testing/semantics) properties to expose information to tests. - Network accessline 52
You can create custom [semantics](https://developer.android.com/develop/ui/compose/testing/semantics) properties to expose information to tests. - Network accessline 79
Verify that the state of your Compose elements is correctly restored when the activity or process is recreated. Perform such checks without relying on activity recreation with the [`StateRestorationTester`](https://developer.android.com/ref - Network accessline 79
Verify that the state of your Compose elements is correctly restored when the activity or process is recreated. Perform such checks without relying on activity recreation with the [`StateRestorationTester`](https://developer.android.com/ref - Network accessline 81
activity recreation with the [`StateRestorationTester`](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/junit4/StateRestorationTester) class. - Network accessline 81
activity recreation with the [`StateRestorationTester`](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/junit4/StateRestorationTester) class. - Network accessline 83
This class lets you simulate the recreation of a composable. It's especially useful to verify the implementation of [`rememberSaveable`](https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/rememberSaveable.compo - Network accessline 83
This class lets you simulate the recreation of a composable. It's especially useful to verify the implementation of [`rememberSaveable`](https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/rememberSaveable.compo - Network accessline 84
useful to verify the implementation of [`rememberSaveable`](https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/rememberSaveable.composable#rememberSaveable(kotlin.Array,androidx.compose.runtime.saveable.Saver,k - Network accessline 84
useful to verify the implementation of [`rememberSaveable`](https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/rememberSaveable.composable#rememberSaveable(kotlin.Array,androidx.compose.runtime.saveable.Saver,k - Network accessline 110
font sizes, dark and light themes, and more. Most of these conditions are derived from device-level values controlled by the user and exposed with the current [`Configuration`](https://developer.android.com/reference/android/content/res/Con - Network accessline 110
font sizes, dark and light themes, and more. Most of these conditions are derived from device-level values controlled by the user and exposed with the current [`Configuration`](https://developer.android.com/reference/android/content/res/Con - Network accessline 111
derived from device-level values controlled by the user and exposed with the current [`Configuration`](https://developer.android.com/reference/android/content/res/Configuration) instance. Testing different configurations directly in a test - Network accessline 111
derived from device-level values controlled by the user and exposed with the current [`Configuration`](https://developer.android.com/reference/android/content/res/Configuration) instance. Testing different configurations directly in a test - Network accessline 112
current [`Configuration`](https://developer.android.com/reference/android/content/res/Configuration) instance. Testing different configurations - Network accessline 112
current [`Configuration`](https://developer.android.com/reference/android/content/res/Configuration) instance. Testing different configurations - Network accessline 116
[`DeviceConfigurationOverride`](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/DeviceConfigurationOverride) is a test-only API that lets you simulate - Network accessline 116
[`DeviceConfigurationOverride`](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/DeviceConfigurationOverride) is a test-only API that lets you simulate - Network accessline 123
- [`DeviceConfigurationOverride.DarkMode()`](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/DeviceConfigurationOverride.Companion#(androidx.compose.ui.test.DeviceConfigurationOverride.Companion).DarkMode(kotlin.Bool - Network accessline 123
- [`DeviceConfigurationOverride.DarkMode()`](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/DeviceConfigurationOverride.Companion#(androidx.compose.ui.test.DeviceConfigurationOverride.Companion).DarkMode(kotlin.Bool - Network accessline 124
- [`DeviceConfigurationOverride.FontScale()`](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/DeviceConfigurationOverride.Companion#(androidx.compose.ui.test.DeviceConfigurationOverride.Companion).FontScale(kotlin.Fl - Network accessline 124
- [`DeviceConfigurationOverride.FontScale()`](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/DeviceConfigurationOverride.Companion#(androidx.compose.ui.test.DeviceConfigurationOverride.Companion).FontScale(kotlin.Fl - Network accessline 125
scale](https://developer.android.com/training/multiscreen/screendensities#TaskUseDP). - Network accessline 125
scale](https://developer.android.com/training/multiscreen/screendensities#TaskUseDP). - Network accessline 126
- [`DeviceConfigurationOverride.FontWeightAdjustment()`](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/DeviceConfigurationOverride.Companion#(androidx.compose.ui.test.DeviceConfigurationOverride.Companion).FontWeig - Network accessline 126
- [`DeviceConfigurationOverride.FontWeightAdjustment()`](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/DeviceConfigurationOverride.Companion#(androidx.compose.ui.test.DeviceConfigurationOverride.Companion).FontWeig - Network accessline 127
- [`DeviceConfigurationOverride.ForcedSize()`](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/DeviceConfigurationOverride.Companion#(androidx.compose.ui.test.DeviceConfigurationOverride.Companion).ForcedSize(android - Network accessline 127
- [`DeviceConfigurationOverride.ForcedSize()`](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/DeviceConfigurationOverride.Companion#(androidx.compose.ui.test.DeviceConfigurationOverride.Companion).ForcedSize(android - Network accessline 128
- [`DeviceConfigurationOverride.LayoutDirection()`](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/DeviceConfigurationOverride.Companion#(androidx.compose.ui.test.DeviceConfigurationOverride.Companion).LayoutDirecti - Network accessline 128
- [`DeviceConfigurationOverride.LayoutDirection()`](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/DeviceConfigurationOverride.Companion#(androidx.compose.ui.test.DeviceConfigurationOverride.Companion).LayoutDirecti - Network accessline 129
direction](https://developer.android.com/training/basics/supporting-devices/languages#SupportLayoutMirroring) (left-to-right or right-to-left). - Network accessline 129
direction](https://developer.android.com/training/basics/supporting-devices/languages#SupportLayoutMirroring) (left-to-right or right-to-left). - Network accessline 130
- [`DeviceConfigurationOverride.Locales()`](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/DeviceConfigurationOverride.Companion#(androidx.compose.ui.test.DeviceConfigurationOverride.Companion).Locales(androidx.comp - Network accessline 130
- [`DeviceConfigurationOverride.Locales()`](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/DeviceConfigurationOverride.Companion#(androidx.compose.ui.test.DeviceConfigurationOverride.Companion).Locales(androidx.comp - Network accessline 131
- [`DeviceConfigurationOverride.RoundScreen()`](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/DeviceConfigurationOverride.Companion#(androidx.compose.ui.test.DeviceConfigurationOverride.Companion).RoundScreen(kotli - Network accessline 131
- [`DeviceConfigurationOverride.RoundScreen()`](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/DeviceConfigurationOverride.Companion#(androidx.compose.ui.test.DeviceConfigurationOverride.Companion).RoundScreen(kotli - Network accessline 133
To apply a specific override, wrap the content under test in a call to the [`DeviceConfigurationOverride()`](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/DeviceConfigurationOverride.composable#DeviceConfigurationO - Network accessline 133
To apply a specific override, wrap the content under test in a call to the [`DeviceConfigurationOverride()`](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/DeviceConfigurationOverride.composable#DeviceConfigurationO - Network accessline 134
[`DeviceConfigurationOverride()`](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/DeviceConfigurationOverride.composable#DeviceConfigurationOverride(androidx.compose.ui.test.DeviceConfigurationOverride,kotlin.Functio - Network accessline 134
[`DeviceConfigurationOverride()`](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/DeviceConfigurationOverride.composable#DeviceConfigurationOverride(androidx.compose.ui.test.DeviceConfigurationOverride,kotlin.Functio - Network accessline 156
To apply multiple overrides together, use [`DeviceConfigurationOverride.then()`](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/DeviceConfigurationOverride#(androidx.compose.ui.test.DeviceConfigurationOverride).then - Network accessline 156
To apply multiple overrides together, use [`DeviceConfigurationOverride.then()`](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/DeviceConfigurationOverride#(androidx.compose.ui.test.DeviceConfigurationOverride).then - Network accessline 157
[`DeviceConfigurationOverride.then()`](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/DeviceConfigurationOverride#(androidx.compose.ui.test.DeviceConfigurationOverride).then(androidx.compose.ui.test.DeviceConfigurat - Network accessline 157
[`DeviceConfigurationOverride.then()`](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/DeviceConfigurationOverride#(androidx.compose.ui.test.DeviceConfigurationOverride).then(androidx.compose.ui.test.DeviceConfigurat - Network accessline 182
> [!NOTE] > **Note:** The APIs associated with the failure handler pipeline ([`TestFailurePolicy`](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/TestFailurePolicy), [`TestFailureHandler`](https://developer.android. - Network accessline 182
> [!NOTE] > **Note:** The APIs associated with the failure handler pipeline ([`TestFailurePolicy`](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/TestFailurePolicy), [`TestFailureHandler`](https://developer.android. - Network accessline 183
> **Note:** The APIs associated with the failure handler pipeline ([`TestFailurePolicy`](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/TestFailurePolicy), [`TestFailureHandler`](https://developer.android.com/refere - Network accessline 183
> **Note:** The APIs associated with the failure handler pipeline ([`TestFailurePolicy`](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/TestFailurePolicy), [`TestFailureHandler`](https://developer.android.com/refere - Network accessline 187
To configure failure handling, pass a [`TestFailurePolicy`](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/TestFailurePolicy) object to - Network accessline 187
To configure failure handling, pass a [`TestFailurePolicy`](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/TestFailurePolicy) object to - Network accessline 188
[`ComposeUiTestConfig`](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/ComposeUiTestConfig). - Network accessline 188
[`ComposeUiTestConfig`](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/ComposeUiTestConfig). - Network accessline 192
To capture screenshots and UI hierarchies upon test failure, set the [`screenshotCaptureMode`](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/TestFailurePolicy#screenshotCaptureMode()) and [`uiHierarchyCaptureMode`] - Network accessline 192
To capture screenshots and UI hierarchies upon test failure, set the [`screenshotCaptureMode`](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/TestFailurePolicy#screenshotCaptureMode()) and [`uiHierarchyCaptureMode`] - Network accessline 193
[`screenshotCaptureMode`](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/TestFailurePolicy#screenshotCaptureMode()) and [`uiHierarchyCaptureMode`](https://developer.android.com/reference/kotlin/androidx/compose/ui/t - Network accessline 193
[`screenshotCaptureMode`](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/TestFailurePolicy#screenshotCaptureMode()) and [`uiHierarchyCaptureMode`](https://developer.android.com/reference/kotlin/androidx/compose/ui/t - Network accessline 217
To define custom behavior for test failures, add a [`TestFailureHandler`](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/TestFailureHandler) to the [`failureHandlers` list](https://developer.android.com/reference/ko - Network accessline 217
To define custom behavior for test failures, add a [`TestFailureHandler`](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/TestFailureHandler) to the [`failureHandlers` list](https://developer.android.com/reference/ko - Network accessline 218
[`TestFailureHandler`](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/TestFailureHandler) to the [`failureHandlers` list](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/TestFailurePolicy#fai - Network accessline 218
[`TestFailureHandler`](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/TestFailureHandler) to the [`failureHandlers` list](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/TestFailurePolicy#fai - Network accessline 219
receives a [`FailureContext`](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/FailureContext) object that contains the original error and a - Network accessline 219
receives a [`FailureContext`](https://developer.android.com/reference/kotlin/androidx/compose/ui/test/FailureContext) object that contains the original error and a - Network accessline 273
- **[Test apps on Android](https://developer.android.com/training/testing)**: The main Android testing landing page provides a broader view of testing fundamentals and techniques. - Network accessline 273
- **[Test apps on Android](https://developer.android.com/training/testing)**: The main Android testing landing page provides a broader view of testing fundamentals and techniques. - Network accessline 274
- **[Fundamentals of testing](https://developer.android.com/training/testing/fundamentals):** Learn more about the core concepts behind testing an Android app. - Network accessline 274
- **[Fundamentals of testing](https://developer.android.com/training/testing/fundamentals):** Learn more about the core concepts behind testing an Android app. - Network accessline 275
- **[Local tests](https://developer.android.com/training/testing/local-tests):** You can run some tests locally, on your own workstation. - Network accessline 275
- **[Local tests](https://developer.android.com/training/testing/local-tests):** You can run some tests locally, on your own workstation. - Network accessline 276
- **[Instrumented tests](https://developer.android.com/training/testing/instrumented-tests):** It is good practice to also run instrumented tests. That is, tests that run directly on-device. - Network accessline 276
- **[Instrumented tests](https://developer.android.com/training/testing/instrumented-tests):** It is good practice to also run instrumented tests. That is, tests that run directly on-device. - Network accessline 277
- **[Continuous integration](https://developer.android.com/training/testing/continuous-integration):** Continuous integration lets you integrate your tests into your deployment pipeline. - Network accessline 277
- **[Continuous integration](https://developer.android.com/training/testing/continuous-integration):** Continuous integration lets you integrate your tests into your deployment pipeline. - Network accessline 278
- **[Test different screen sizes](https://developer.android.com/training/testing/different-screens):** With some many devices available to users, you should test for different screen sizes. - Network accessline 278
- **[Test different screen sizes](https://developer.android.com/training/testing/different-screens):** With some many devices available to users, you should test for different screen sizes. - Network accessline 279
- **[Espresso](https://developer.android.com/training/testing/espresso)**: While intended for View-based UIs, Espresso knowledge can still be helpful for some aspects of Compose testing. - Network accessline 279
- **[Espresso](https://developer.android.com/training/testing/espresso)**: While intended for View-based UIs, Espresso knowledge can still be helpful for some aspects of Compose testing.
testing/testing-setup/references/android/studio/preview/compose-screenshot-testing-with-testsuites.md
- Network accessline 1
> [!WARNING] > **Experimental:** Compose Preview Screenshot Testing with AGP test suites is in active development. APIs and DSL syntax are subject to change. Report feedback and issues through the [issue tracker](https://issuetracker.google - Network accessline 1
> [!WARNING] > **Experimental:** Compose Preview Screenshot Testing with AGP test suites is in active development. APIs and DSL syntax are subject to change. Report feedback and issues through the [issue tracker](https://issuetracker.google - Network accessline 2
> **Experimental:** Compose Preview Screenshot Testing with AGP test suites is in active development. APIs and DSL syntax are subject to change. Report feedback and issues through the [issue tracker](https://issuetracker.google.com/issues/n - Network accessline 2
> **Experimental:** Compose Preview Screenshot Testing with AGP test suites is in active development. APIs and DSL syntax are subject to change. Report feedback and issues through the [issue tracker](https://issuetracker.google.com/issues/n - Network accessline 4
Starting with Android Gradle Plugin (AGP) 9.5.0-alpha03 and Compose Preview Screenshot Testing engine `0.0.1-alpha16`, screenshot testing is integrated with AGP's native [test suites](https://developer.android.com/reference/tools/gradle-api - Network accessline 4
Starting with Android Gradle Plugin (AGP) 9.5.0-alpha03 and Compose Preview Screenshot Testing engine `0.0.1-alpha16`, screenshot testing is integrated with AGP's native [test suites](https://developer.android.com/reference/tools/gradle-api - Network accessline 6
AGP's native [test suites](https://developer.android.com/reference/tools/gradle-api/9.5/com/android/build/api/dsl/AgpTestSuite) framework. - Network accessline 6
AGP's native [test suites](https://developer.android.com/reference/tools/gradle-api/9.5/com/android/build/api/dsl/AgpTestSuite) framework. - Network accessline 19
[View on GitHub](https://github.com/android/skills/blob/main/testing/testing-setup) - Network accessline 19
[View on GitHub](https://github.com/android/skills/blob/main/testing/testing-setup) - Network accessline 23
Use the `testing-setup` [Android skill](https://developer.android.com/tools/agents/android-skills) to develop a testing strategy and create screenshot tests. To install the skill from the [Android CLI](https://developer.android.com/tools/ag - Network accessline 23
Use the `testing-setup` [Android skill](https://developer.android.com/tools/agents/android-skills) to develop a testing strategy and create screenshot tests. To install the skill from the [Android CLI](https://developer.android.com/tools/ag - Network accessline 36
- Compose Screenshot Engine version 0.0.1-alpha16 or higher. - JDK version 17 or higher. - Compose enabled for your project. We recommend enabling Compose using the [Compose Compiler Gradle plugin](https://developer.android.com/develop/ui/c - Network accessline 36
- Compose Screenshot Engine version 0.0.1-alpha16 or higher. - JDK version 17 or higher. - Compose enabled for your project. We recommend enabling Compose using the [Compose Compiler Gradle plugin](https://developer.android.com/develop/ui/c - Network accessline 38
- Compose enabled for your project. We recommend enabling Compose using the [Compose Compiler Gradle plugin](https://developer.android.com/develop/ui/compose/compiler). - Network accessline 38
- Compose enabled for your project. We recommend enabling Compose using the [Compose Compiler Gradle plugin](https://developer.android.com/develop/ui/compose/compiler).
testing/testing-setup/references/android/studio/preview/compose-screenshot-testing.md
- Network accessline 1
> [!CAUTION] > **Caution:** The standalone `com.android.compose.screenshot` plugin described on this page is no longer maintained. We recommend setting up screenshot tests with [AGP test suites](https://developer.android.com/studio/preview/ - Network accessline 1
> [!CAUTION] > **Caution:** The standalone `com.android.compose.screenshot` plugin described on this page is no longer maintained. We recommend setting up screenshot tests with [AGP test suites](https://developer.android.com/studio/preview/ - Network accessline 2
> **Caution:** The standalone `com.android.compose.screenshot` plugin described on this page is no longer maintained. We recommend setting up screenshot tests with [AGP test suites](https://developer.android.com/studio/preview/compose-scree - Network accessline 2
> **Caution:** The standalone `com.android.compose.screenshot` plugin described on this page is no longer maintained. We recommend setting up screenshot tests with [AGP test suites](https://developer.android.com/studio/preview/compose-scree - Network accessline 4
Screenshot testing is an effective way to verify how your UI looks to users. The Compose Preview Screenshot Testing tool combines the simplicity and features of [composable previews](https://developer.android.com/develop/ui/compose/tooling/ - Network accessline 4
Screenshot testing is an effective way to verify how your UI looks to users. The Compose Preview Screenshot Testing tool combines the simplicity and features of [composable previews](https://developer.android.com/develop/ui/compose/tooling/ - Network accessline 5
The Compose Preview Screenshot Testing tool combines the simplicity and features of [composable previews](https://developer.android.com/develop/ui/compose/tooling/previews) with the productivity gains of running host-side screenshot tests. - Network accessline 5
The Compose Preview Screenshot Testing tool combines the simplicity and features of [composable previews](https://developer.android.com/develop/ui/compose/tooling/previews) with the productivity gains of running host-side screenshot tests. - Network accessline 6
features of [composable previews](https://developer.android.com/develop/ui/compose/tooling/previews) with the productivity - Network accessline 6
features of [composable previews](https://developer.android.com/develop/ui/compose/tooling/previews) with the productivity - Network accessline 13
[View on GitHub](https://github.com/android/skills/blob/main/testing/testing-setup) - Network accessline 13
[View on GitHub](https://github.com/android/skills/blob/main/testing/testing-setup) - Network accessline 17
Use the `testing-setup` [Android skill](https://developer.android.com/tools/agents/android-skills) to develop a testing strategy and create screenshot tests. To install the skill from the [Android CLI](https://developer.android.com/tools/ag - Network accessline 17
Use the `testing-setup` [Android skill](https://developer.android.com/tools/agents/android-skills) to develop a testing strategy and create screenshot tests. To install the skill from the [Android CLI](https://developer.android.com/tools/ag - Network accessline 36
 **Figure 1.** Example HTML report. - Network accessline 36
 **Figure 1.** Example HTML report. - Network accessline 63
> [!NOTE] > **Note:** For requirements and setup instructions for AGP test suites, see [AGP test suites](https://developer.android.com/studio/preview/compose-screenshot-testing-with-testsuites). - Network accessline 63
> [!NOTE] > **Note:** For requirements and setup instructions for AGP test suites, see [AGP test suites](https://developer.android.com/studio/preview/compose-screenshot-testing-with-testsuites). - Network accessline 64
> **Note:** For requirements and setup instructions for AGP test suites, see [AGP test suites](https://developer.android.com/studio/preview/compose-screenshot-testing-with-testsuites). - Network accessline 64
> **Note:** For requirements and setup instructions for AGP test suites, see [AGP test suites](https://developer.android.com/studio/preview/compose-screenshot-testing-with-testsuites). - Network accessline 69
- Android Studio Panda 1 Canary 4 or higher. - Android Gradle Plugin (AGP) version 9.0 or higher. - Compose Preview Screenshot Testing plugin version [0.0.1-alpha16](https://developer.android.com/studio/preview/compose-screenshot-testing-re - Network accessline 69
- Android Studio Panda 1 Canary 4 or higher. - Android Gradle Plugin (AGP) version 9.0 or higher. - Compose Preview Screenshot Testing plugin version [0.0.1-alpha16](https://developer.android.com/studio/preview/compose-screenshot-testing-re - Network accessline 70
- Android Gradle Plugin (AGP) version 9.0 or higher. - Compose Preview Screenshot Testing plugin version [0.0.1-alpha16](https://developer.android.com/studio/preview/compose-screenshot-testing-release-notes#alpha16) or higher. - Kotlin vers - Network accessline 70
- Android Gradle Plugin (AGP) version 9.0 or higher. - Compose Preview Screenshot Testing plugin version [0.0.1-alpha16](https://developer.android.com/studio/preview/compose-screenshot-testing-release-notes#alpha16) or higher. - Kotlin vers - Network accessline 71
- Compose Preview Screenshot Testing plugin version [0.0.1-alpha16](https://developer.android.com/studio/preview/compose-screenshot-testing-release-notes#alpha16) or higher. - Network accessline 71
- Compose Preview Screenshot Testing plugin version [0.0.1-alpha16](https://developer.android.com/studio/preview/compose-screenshot-testing-release-notes#alpha16) or higher. - Network accessline 72
- Kotlin version 2.2.10 or higher. - JDK version 17 or higher. - Compose enabled for your project. We recommend enabling Compose using the [Compose Compiler Gradle plugin](https://developer.android.com/develop/ui/compose/compiler). - Network accessline 72
- Kotlin version 2.2.10 or higher. - JDK version 17 or higher. - Compose enabled for your project. We recommend enabling Compose using the [Compose Compiler Gradle plugin](https://developer.android.com/develop/ui/compose/compiler). - Network accessline 74
- Compose enabled for your project. We recommend enabling Compose using the [Compose Compiler Gradle plugin](https://developer.android.com/develop/ui/compose/compiler). - Network accessline 74
- Compose enabled for your project. We recommend enabling Compose using the [Compose Compiler Gradle plugin](https://developer.android.com/develop/ui/compose/compiler). - Network accessline 79
- Android Gradle Plugin (AGP) version 8.5.0 or higher. - Compose Preview Screenshot Testing plugin version [0.0.1-alpha16](https://developer.android.com/studio/preview/compose-screenshot-testing-release-notes#alpha16) or higher. - Network accessline 79
- Android Gradle Plugin (AGP) version 8.5.0 or higher. - Compose Preview Screenshot Testing plugin version [0.0.1-alpha16](https://developer.android.com/studio/preview/compose-screenshot-testing-release-notes#alpha16) or higher. - Network accessline 80
- Compose Preview Screenshot Testing plugin version [0.0.1-alpha16](https://developer.android.com/studio/preview/compose-screenshot-testing-release-notes#alpha16) or higher. - Network accessline 80
- Compose Preview Screenshot Testing plugin version [0.0.1-alpha16](https://developer.android.com/studio/preview/compose-screenshot-testing-release-notes#alpha16) or higher. - Network accessline 81
- Kotlin version 1.9.20 or higher. We recommend using Kotlin 2.0 or higher so you can use the Compose Compiler Gradle plugin. - JDK version 17 or higher. - Compose enabled for your project. We recommend enabling Compose using the [Compose C - Network accessline 81
- Kotlin version 1.9.20 or higher. We recommend using Kotlin 2.0 or higher so you can use the Compose Compiler Gradle plugin. - JDK version 17 or higher. - Compose enabled for your project. We recommend enabling Compose using the [Compose C - Network accessline 83
- Compose enabled for your project. We recommend enabling Compose using the [Compose Compiler Gradle plugin](https://developer.android.com/develop/ui/compose/compiler). - Network accessline 83
- Compose enabled for your project. We recommend enabling Compose using the [Compose Compiler Gradle plugin](https://developer.android.com/develop/ui/compose/compiler). - Network accessline 85
> [!NOTE] > **Note:** If you can't use the Compose Compiler Gradle plugin, you can enable Compose by [declaring a dependency on the Compose Compiler directly](https://developer.android.com/jetpack/androidx/releases/compose-kotlin#kts). Make - Network accessline 85
> [!NOTE] > **Note:** If you can't use the Compose Compiler Gradle plugin, you can enable Compose by [declaring a dependency on the Compose Compiler directly](https://developer.android.com/jetpack/androidx/releases/compose-kotlin#kts). Make - Network accessline 86
> **Note:** If you can't use the Compose Compiler Gradle plugin, you can enable Compose by [declaring a dependency on the Compose Compiler directly](https://developer.android.com/jetpack/androidx/releases/compose-kotlin#kts). Make sure you - Network accessline 86
> **Note:** If you can't use the Compose Compiler Gradle plugin, you can enable Compose by [declaring a dependency on the Compose Compiler directly](https://developer.android.com/jetpack/androidx/releases/compose-kotlin#kts). Make sure you - Network accessline 124
4. Add the [`screenshot-validation-api`](https://maven.google.com/web/index.html?q=screenshot-validation-api#com.android.tools.screenshot:screenshot-validation-api) - Network accessline 124
4. Add the [`screenshot-validation-api`](https://maven.google.com/web/index.html?q=screenshot-validation-api#com.android.tools.screenshot:screenshot-validation-api) - Network accessline 125
and [`ui-tooling`](https://maven.google.com/web/index.html?q=tooling#androidx.compose.ui:ui-tooling) - Network accessline 125
and [`ui-tooling`](https://maven.google.com/web/index.html?q=tooling#androidx.compose.ui:ui-tooling) - Network accessline 180
[Download the Android CLI](https://developer.android.com/tools/agents) - Network accessline 180
[Download the Android CLI](https://developer.android.com/tools/agents) - Network accessline 184
Try [Android CLI](https://developer.android.com/tools/agents) if you're not using Android Studio or prefer to do things from the command line. - Network accessline 184
Try [Android CLI](https://developer.android.com/tools/agents) if you're not using Android Studio or prefer to do things from the command line. - Network accessline 186
For example, use the [`android studio render-compose-preview`](https://developer.android.com/tools/agents/android-cli/commands/studio_render-compose-preview) command when you need to render a Compose preview for visual testing. - Network accessline 186
For example, use the [`android studio render-compose-preview`](https://developer.android.com/tools/agents/android-cli/commands/studio_render-compose-preview) command when you need to render a Compose preview for visual testing. - Network accessline 225
> [!NOTE] > **Note:** Renaming a function annotated with `@PreviewTest` breaks the association with existing reference images. In that case, you must [regenerate reference images](https://developer.android.com/studio/preview/compose-screens - Network accessline 225
> [!NOTE] > **Note:** Renaming a function annotated with `@PreviewTest` breaks the association with existing reference images. In that case, you must [regenerate reference images](https://developer.android.com/studio/preview/compose-screens - Network accessline 226
> **Note:** Renaming a function annotated with `@PreviewTest` breaks the association with existing reference images. In that case, you must [regenerate reference images](https://developer.android.com/studio/preview/compose-screenshot-testin - Network accessline 226
> **Note:** Renaming a function annotated with `@PreviewTest` breaks the association with existing reference images. In that case, you must [regenerate reference images](https://developer.android.com/studio/preview/compose-screenshot-testin - Network accessline 251
You can find the complete list of current known issues in the tool's [issue tracker component](https://issuetracker.google.com/issues?q=status:open+componentid:1581441&s=created_time:desc). Report any other feedback and issues - Network accessline 251
You can find the complete list of current known issues in the tool's [issue tracker component](https://issuetracker.google.com/issues?q=status:open+componentid:1581441&s=created_time:desc). Report any other feedback and issues - Network accessline 252
[issue tracker component](https://issuetracker.google.com/issues?q=status:open+componentid:1581441&s=created_time:desc). Report any other feedback and issues - Network accessline 252
[issue tracker component](https://issuetracker.google.com/issues?q=status:open+componentid:1581441&s=created_time:desc). Report any other feedback and issues - Network accessline 253
through the [issue tracker](https://issuetracker.google.com/issues/new?component=192708&template=840533). - Network accessline 253
through the [issue tracker](https://issuetracker.google.com/issues/new?component=192708&template=840533). - Network accessline 257
For a full list of release updates, see the [release notes](https://developer.android.com/studio/preview/compose-screenshot-testing-release-notes). - Network accessline 257
For a full list of release updates, see the [release notes](https://developer.android.com/studio/preview/compose-screenshot-testing-release-notes). - Network accessline 258
[release notes](https://developer.android.com/studio/preview/compose-screenshot-testing-release-notes). - Network accessline 258
[release notes](https://developer.android.com/studio/preview/compose-screenshot-testing-release-notes).
testing/testing-setup/references/android/training/dependency-injection/hilt-testing.md
- Network accessline 30
your composables. In unit tests, construct the ViewModel directly with fakes. For information on how state flows from a ViewModel into composables, see [State and Jetpack Compose](https://developer.android.com/develop/ui/compose/state) and - Network accessline 30
your composables. In unit tests, construct the ViewModel directly with fakes. For information on how state flows from a ViewModel into composables, see [State and Jetpack Compose](https://developer.android.com/develop/ui/compose/state) and - Network accessline 32
[State and Jetpack Compose](https://developer.android.com/develop/ui/compose/state) and [Where to hoist state](https://developer.android.com/develop/ui/compose/state-hoisting). - Network accessline 32
[State and Jetpack Compose](https://developer.android.com/develop/ui/compose/state) and [Where to hoist state](https://developer.android.com/develop/ui/compose/state-hoisting). - Network accessline 62
> [!NOTE] > **Note:** If you use [Jetpack integrations](https://developer.android.com/training/dependency-injection/hilt-jetpack) (like `hilt-navigation-compose` to obtain a ViewModel through `hiltViewModel()`), you must also add their anno - Network accessline 62
> [!NOTE] > **Note:** If you use [Jetpack integrations](https://developer.android.com/training/dependency-injection/hilt-jetpack) (like `hilt-navigation-compose` to obtain a ViewModel through `hiltViewModel()`), you must also add their anno - Network accessline 63
> **Note:** If you use [Jetpack integrations](https://developer.android.com/training/dependency-injection/hilt-jetpack) (like `hilt-navigation-compose` to obtain a ViewModel through `hiltViewModel()`), you must also add their annotation pro - Network accessline 63
> **Note:** If you use [Jetpack integrations](https://developer.android.com/training/dependency-injection/hilt-jetpack) (like `hilt-navigation-compose` to obtain a ViewModel through `hiltViewModel()`), you must also add their annotation pro - Network accessline 87
> [!NOTE] > **Note:** If you have other rules in your test, see [Multiple TestRule objects in > your instrumented test](https://developer.android.com/training/dependency-injection/hilt-testing#multiple-testrules). - Network accessline 87
> [!NOTE] > **Note:** If you have other rules in your test, see [Multiple TestRule objects in > your instrumented test](https://developer.android.com/training/dependency-injection/hilt-testing#multiple-testrules). - Network accessline 89
> your instrumented test](https://developer.android.com/training/dependency-injection/hilt-testing#multiple-testrules). - Network accessline 89
> your instrumented test](https://developer.android.com/training/dependency-injection/hilt-testing#multiple-testrules). - Network accessline 102
that supports Hilt. The library provides `HiltTestApplication` for use in tests. If your tests need a different base application, see [Custom application for tests](https://developer.android.com/training/dependency-injection/hilt-testing#cu - Network accessline 102
that supports Hilt. The library provides `HiltTestApplication` for use in tests. If your tests need a different base application, see [Custom application for tests](https://developer.android.com/training/dependency-injection/hilt-testing#cu - Network accessline 104
tests](https://developer.android.com/training/dependency-injection/hilt-testing#custom-application). - Network accessline 104
tests](https://developer.android.com/training/dependency-injection/hilt-testing#custom-application). - Network accessline 106
You must set your test application to run in your [instrumented tests](https://developer.android.com/training/testing/ui-testing) or [Robolectric - Network accessline 106
You must set your test application to run in your [instrumented tests](https://developer.android.com/training/testing/ui-testing) or [Robolectric - Network accessline 107
tests](https://developer.android.com/training/testing/ui-testing) or [Robolectric - Network accessline 107
tests](https://developer.android.com/training/testing/ui-testing) or [Robolectric - Network accessline 108
tests](http://robolectric.org/). The following instructions aren't - Network accessline 108
tests](http://robolectric.org/). The following instructions aren't - Network accessline 114
To use the Hilt test application in [instrumented tests](https://developer.android.com/training/testing/ui-testing), you need to configure a new test runner. - Network accessline 114
To use the Hilt test application in [instrumented tests](https://developer.android.com/training/testing/ui-testing), you need to configure a new test runner. - Network accessline 115
tests](https://developer.android.com/training/testing/ui-testing), you need to configure a new test runner. - Network accessline 115
tests](https://developer.android.com/training/testing/ui-testing), you need to configure a new test runner. - Network accessline 119
1. Create a custom class that extends [`AndroidJUnitRunner`](https://developer.android.com/reference/kotlin/androidx/test/runner/AndroidJUnitRunner) in the `androidTest` folder. - Network accessline 119
1. Create a custom class that extends [`AndroidJUnitRunner`](https://developer.android.com/reference/kotlin/androidx/test/runner/AndroidJUnitRunner) in the `androidTest` folder. - Network accessline 132
Next, configure this test runner in your Gradle file as described in the [instrumented unit test guide](https://developer.android.com/training/testing/unit-testing/instrumented-unit-tests#setup). Make sure - Network accessline 132
Next, configure this test runner in your Gradle file as described in the [instrumented unit test guide](https://developer.android.com/training/testing/unit-testing/instrumented-unit-tests#setup). Make sure - Network accessline 133
[instrumented unit test guide](https://developer.android.com/training/testing/unit-testing/instrumented-unit-tests#setup). Make sure you use the full classpath: - Network accessline 133
[instrumented unit test guide](https://developer.android.com/training/testing/unit-testing/instrumented-unit-tests#setup). Make sure you use the full classpath: - Network accessline 134
guide](https://developer.android.com/training/testing/unit-testing/instrumented-unit-tests#setup). Make sure - Network accessline 134
guide](https://developer.android.com/training/testing/unit-testing/instrumented-unit-tests#setup). Make sure - Network accessline 336
`@BindValue` works with qualifiers and other testing annotations. For example, if you use testing libraries such as [Mockito](https://site.mockito.org/), you could use it in a - Network accessline 336
`@BindValue` works with qualifiers and other testing annotations. For example, if you use testing libraries such as [Mockito](https://site.mockito.org/), you could use it in a - Network accessline 337
if you use testing libraries such as [Mockito](https://site.mockito.org/), you could use it in a Robolectric test as follows: - Network accessline 337
if you use testing libraries such as [Mockito](https://site.mockito.org/), you could use it in a Robolectric test as follows: - Network accessline 338
[Mockito](https://site.mockito.org/), you could use it in a - Network accessline 338
[Mockito](https://site.mockito.org/), you could use it in a - Network accessline 353
If you need to add a [multibinding](https://dagger.dev/dev-guide/multibindings), - Network accessline 353
If you need to add a [multibinding](https://dagger.dev/dev-guide/multibindings), - Network accessline 379
general, the name of the generated application is the name of the annotated class appended with `_Application`. You must set the generated Hilt test application to run in your [instrumented tests](https://developer.android.com/training/test - Network accessline 379
general, the name of the generated application is the name of the annotated class appended with `_Application`. You must set the generated Hilt test application to run in your [instrumented tests](https://developer.android.com/training/test - Network accessline 380
class appended with `_Application`. You must set the generated Hilt test application to run in your [instrumented tests](https://developer.android.com/training/testing/ui-testing) or [Robolectric tests](http://robolectric.org/) as described - Network accessline 380
class appended with `_Application`. You must set the generated Hilt test application to run in your [instrumented tests](https://developer.android.com/training/testing/ui-testing) or [Robolectric tests](http://robolectric.org/) as described - Network accessline 381
application to run in your [instrumented tests](https://developer.android.com/training/testing/ui-testing) or - Network accessline 381
application to run in your [instrumented tests](https://developer.android.com/training/testing/ui-testing) or - Network accessline 382
[Robolectric tests](http://robolectric.org/) as described in [Test - Network accessline 382
[Robolectric tests](http://robolectric.org/) as described in [Test - Network accessline 383
application](https://developer.android.com/training/dependency-injection/hilt-testing#test-application). - Network accessline 383
application](https://developer.android.com/training/dependency-injection/hilt-testing#test-application). - Network accessline 433
More information about `@EarlyEntryPoint` in the [Hilt documentation](https://dagger.dev/hilt/early-entry-point). - Network accessline 433
More information about `@EarlyEntryPoint` in the [Hilt documentation](https://dagger.dev/hilt/early-entry-point). - Network accessline 434
[Hilt documentation](https://dagger.dev/hilt/early-entry-point). - Network accessline 434
[Hilt documentation](https://dagger.dev/hilt/early-entry-point). - Network accessline 442
- [Test your Compose layout](https://developer.android.com/develop/ui/compose/testing) - Network accessline 442
- [Test your Compose layout](https://developer.android.com/develop/ui/compose/testing) - Network accessline 443
- [Testing cheatsheet](https://developer.android.com/develop/ui/compose/testing/testing-cheatsheet) - Network accessline 443
- [Testing cheatsheet](https://developer.android.com/develop/ui/compose/testing/testing-cheatsheet) - Network accessline 447
- [Hilt testing guide (Views)](https://developer.android.com/topic/architecture/views/dependency-injection/hilt-testing-views) - Network accessline 447
- [Hilt testing guide (Views)](https://developer.android.com/topic/architecture/views/dependency-injection/hilt-testing-views)
tv/leanback-to-compose-tv-migration/references/android/training/tv/get-started/navigation.md
- Network accessline 35
complex game controllers. All controllers include a directional pad (D-pad) plus select, home, and back buttons. Other buttons vary by model.  plus select, home, and back buttons. Other buttons vary by model.  **Figure 1.** Example of a TV remote. - Network accessline 37
 **Figure 1.** Example of a TV remote. - Network accessline 64
> [!NOTE] > **Note:** The remote control shown in figure 1 is for reference only. There are many layouts and styles of remotes and controllers, though all of them have the basic functionality described here. For more information, see [Manag - Network accessline 64
> [!NOTE] > **Note:** The remote control shown in figure 1 is for reference only. There are many layouts and styles of remotes and controllers, though all of them have the basic functionality described here. For more information, see [Manag - Network accessline 65
> **Note:** The remote control shown in figure 1 is for reference only. There are many layouts and styles of remotes and controllers, though all of them have the basic functionality described here. For more information, see [Manage TV contr - Network accessline 65
> **Note:** The remote control shown in figure 1 is for reference only. There are many layouts and styles of remotes and controllers, though all of them have the basic functionality described here. For more information, see [Manage TV contr - Network accessline 105
| Attribute | Function | |---|---| | [`nextFocusDown`](https://developer.android.com/reference/android/R.attr#nextFocusDown) | Defines the next view to receive focus when the user navigates down. | - Network accessline 105
| Attribute | Function | |---|---| | [`nextFocusDown`](https://developer.android.com/reference/android/R.attr#nextFocusDown) | Defines the next view to receive focus when the user navigates down. | - Network accessline 106
|---|---| | [`nextFocusDown`](https://developer.android.com/reference/android/R.attr#nextFocusDown) | Defines the next view to receive focus when the user navigates down. | | [`nextFocusLeft`](https://developer.android.com/reference/android - Network accessline 106
|---|---| | [`nextFocusDown`](https://developer.android.com/reference/android/R.attr#nextFocusDown) | Defines the next view to receive focus when the user navigates down. | | [`nextFocusLeft`](https://developer.android.com/reference/android - Network accessline 107
| [`nextFocusDown`](https://developer.android.com/reference/android/R.attr#nextFocusDown) | Defines the next view to receive focus when the user navigates down. | - Network accessline 107
| [`nextFocusDown`](https://developer.android.com/reference/android/R.attr#nextFocusDown) | Defines the next view to receive focus when the user navigates down. | - Network accessline 108
| [`nextFocusLeft`](https://developer.android.com/reference/android/R.attr#nextFocusLeft) | Defines the next view to receive focus when the user navigates left. | - Network accessline 108
| [`nextFocusLeft`](https://developer.android.com/reference/android/R.attr#nextFocusLeft) | Defines the next view to receive focus when the user navigates left. | - Network accessline 109
| [`nextFocusRight`](https://developer.android.com/reference/android/R.attr#nextFocusRight) | Defines the next view to receive focus when the user navigates right. | - Network accessline 109
| [`nextFocusRight`](https://developer.android.com/reference/android/R.attr#nextFocusRight) | Defines the next view to receive focus when the user navigates right. | - Network accessline 110
| [`nextFocusUp`](https://developer.android.com/reference/android/R.attr#nextFocusUp) | Defines the next view to receive focus when the user navigates up. | - Network accessline 110
| [`nextFocusUp`](https://developer.android.com/reference/android/R.attr#nextFocusUp) | Defines the next view to receive focus when the user navigates up. | - Network accessline 132
Android provides [Drawable state list resources](https://developer.android.com/guide/topics/resources/drawable-resource#StateList) - Network accessline 132
Android provides [Drawable state list resources](https://developer.android.com/guide/topics/resources/drawable-resource#StateList) - Network accessline 139
<!-- res/drawable/button.xml --> <selector xmlns:android="http://schemas.android.com/apk/res/android"> - Network accessline 139
<!-- res/drawable/button.xml --> <selector xmlns:android="http://schemas.android.com/apk/res/android"> - Network accessline 140
<selector xmlns:android="http://schemas.android.com/apk/res/android"> - Network accessline 140
<selector xmlns:android="http://schemas.android.com/apk/res/android"> - Network accessline 171
To create a straightforward and predictable navigation experience, when the user presses the remote's back button, take them to the previous destination.  **Figure 2.** Flow using top navigation.  **Figure 2.** Flow using top navigation.  **Figure 4.** - Network accessline 182
Ensure that the back button isn't gated by confirmation screens or part of an infinite loop.  **Figure 4.** - Network accessline 183
infinite loop.  **Figure 4.** Exit gating Don't. - Network accessline 183
infinite loop.  **Figure 4.** Exit gating Don't. - Network accessline 184
 **Figure 4.** Exit gating - Network accessline 184
 **Figure 4.** Exit gating - Network accessline 192
 **Figure 5.** Navigation loop - Network accessline 192
 **Figure 5.** Navigation loop - Network accessline 203
backward on a TV. It's not necessary to show a virtual back button on the screen:  **Figure 6.** Soft back butt - Network accessline 203
backward on a TV. It's not necessary to show a virtual back button on the screen:  **Figure 6.** Soft back butt - Network accessline 205
 **Figure 6.** Soft back button - Network accessline 205
 **Figure 6.** Soft back button - Network accessline 216
it's good practice to have a **Cancel** button that returns to the previous destination:  **Figure 7.** Sof - Network accessline 216
it's good practice to have a **Cancel** button that returns to the previous destination:  **Figure 7.** Sof - Network accessline 218
 **Figure 7.** Soft cancel button. - Network accessline 218
 **Figure 7.** Soft cancel button. - Network accessline 226
The Android framework generally handles back navigation well, as it does for the D-pad. If you use the [Navigation component](https://developer.android.com/guide/navigation), you can support a variety of navigation graphs. - Network accessline 226
The Android framework generally handles back navigation well, as it does for the D-pad. If you use the [Navigation component](https://developer.android.com/guide/navigation), you can support a variety of navigation graphs. - Network accessline 227
navigation well, as it does for the D-pad. If you use the [Navigation component](https://developer.android.com/guide/navigation), you can support a variety of navigation graphs. Occasionally, you might need to implement some custom behavior - Network accessline 227
navigation well, as it does for the D-pad. If you use the [Navigation component](https://developer.android.com/guide/navigation), you can support a variety of navigation graphs. Occasionally, you might need to implement some custom behavior - Network accessline 228
[Navigation component](https://developer.android.com/guide/navigation), you can support a variety of navigation graphs. - Network accessline 228
[Navigation component](https://developer.android.com/guide/navigation), you can support a variety of navigation graphs. - Network accessline 232
[`ComponentActivity`](https://developer.android.com/reference/androidx/activity/ComponentActivity), - Network accessline 232
[`ComponentActivity`](https://developer.android.com/reference/androidx/activity/ComponentActivity), - Network accessline 233
the base class for [`FragmentActivity`](https://developer.android.com/reference/androidx/fragment/app/FragmentActivity) - Network accessline 233
the base class for [`FragmentActivity`](https://developer.android.com/reference/androidx/fragment/app/FragmentActivity) - Network accessline 234
and [`AppCompatActivity`](https://developer.android.com/reference/androidx/appcompat/app/AppCompatActivity), - Network accessline 234
and [`AppCompatActivity`](https://developer.android.com/reference/androidx/appcompat/app/AppCompatActivity), - Network accessline 235
lets you control the behavior of the back button by using its [`OnBackPressedDispatcher`](https://developer.android.com/reference/androidx/activity/OnBackPressedDispatcher), which you can retrieve by calling `getOnBackPressedDispatcher()`. - Network accessline 235
lets you control the behavior of the back button by using its [`OnBackPressedDispatcher`](https://developer.android.com/reference/androidx/activity/OnBackPressedDispatcher), which you can retrieve by calling `getOnBackPressedDispatcher()`. - Network accessline 236
[`OnBackPressedDispatcher`](https://developer.android.com/reference/androidx/activity/OnBackPressedDispatcher), - Network accessline 236
[`OnBackPressedDispatcher`](https://developer.android.com/reference/androidx/activity/OnBackPressedDispatcher), - Network accessline 239
For more information, see [Provide custom back navigation](https://developer.android.com/guide/navigation/navigation-custom-back). - Network accessline 239
For more information, see [Provide custom back navigation](https://developer.android.com/guide/navigation/navigation-custom-back). - Network accessline 240
information, see [Provide custom back navigation](https://developer.android.com/guide/navigation/navigation-custom-back). - Network accessline 240
information, see [Provide custom back navigation](https://developer.android.com/guide/navigation/navigation-custom-back). - Network accessline 244
Video playback is one of the most important features on TV. It's important that video players in apps across Android TV behave the same. Refer to the [playback controls guidelines for TV](https://developer.android.com/training/tv/playback/c - Network accessline 244
Video playback is one of the most important features on TV. It's important that video players in apps across Android TV behave the same. Refer to the [playback controls guidelines for TV](https://developer.android.com/training/tv/playback/c - Network accessline 246
controls guidelines for TV](https://developer.android.com/training/tv/playback/controls). - Network accessline 246
controls guidelines for TV](https://developer.android.com/training/tv/playback/controls). - Network accessline 250
In addition to complying with the [TV app quality requirements](https://developer.android.com/docs/quality-guidelines/tv-app-quality), apps - Network accessline 250
In addition to complying with the [TV app quality requirements](https://developer.android.com/docs/quality-guidelines/tv-app-quality), apps - Network accessline 251
[TV app quality requirements](https://developer.android.com/docs/quality-guidelines/tv-app-quality), apps - Network accessline 251
[TV app quality requirements](https://developer.android.com/docs/quality-guidelines/tv-app-quality), apps - Network accessline 285
first button press after the deep link, then the direct-back requirement doesn't apply, and only the standard [back button behavior](https://developer.android.com/training/tv/get-started/controllers#back-button) is required. - Network accessline 285
first button press after the deep link, then the direct-back requirement doesn't apply, and only the standard [back button behavior](https://developer.android.com/training/tv/get-started/controllers#back-button) is required. - Network accessline 287
behavior](https://developer.android.com/training/tv/get-started/controllers#back-button) is required. - Network accessline 287
behavior](https://developer.android.com/training/tv/get-started/controllers#back-button) is required. - Network accessline 297
and then back to Google TV or Android TV, without any infinite loops. For more information, see the [Predictable back button behavior](https://developer.android.com/training/tv/get-started/navigation#predictable_back_button_behavior) - Network accessline 297
and then back to Google TV or Android TV, without any infinite loops. For more information, see the [Predictable back button behavior](https://developer.android.com/training/tv/get-started/navigation#predictable_back_button_behavior) - Network accessline 298
information, see the [Predictable back button behavior](https://developer.android.com/training/tv/get-started/navigation#predictable_back_button_behavior) section. - Network accessline 298
information, see the [Predictable back button behavior](https://developer.android.com/training/tv/get-started/navigation#predictable_back_button_behavior) section. - Network accessline 299
behavior](https://developer.android.com/training/tv/get-started/navigation#predictable_back_button_behavior) - Network accessline 299
behavior](https://developer.android.com/training/tv/get-started/navigation#predictable_back_button_behavior) - Network accessline 322
 **Figure 8.** Deep linking to a details page. - Network accessline 324
returns to the original screen.](https://developer.android.com/static/training/tv/images/tv-nav-deeplink.png) **Figure 8.** Deep linking to a details page. - Network accessline 333
> [!NOTE] > **Note:** This does not apply when launching from the Live Tab for direct playback. See the [Live Tab navigation](https://developer.android.com/training/tv/get-started/navigation#live-tab-navigation) section for details. - Network accessline 333
> [!NOTE] > **Note:** This does not apply when launching from the Live Tab for direct playback. See the [Live Tab navigation](https://developer.android.com/training/tv/get-started/navigation#live-tab-navigation) section for details. - Network accessline 334
> **Note:** This does not apply when launching from the Live Tab for direct playback. See the [Live Tab navigation](https://developer.android.com/training/tv/get-started/navigation#live-tab-navigation) section for details. - Network accessline 334
> **Note:** This does not apply when launching from the Live Tab for direct playback. See the [Live Tab navigation](https://developer.android.com/training/tv/get-started/navigation#live-tab-navigation) section for details. - Network accessline 338
Let users navigate your UI with clear direction. If there isn't a straight path to get to a control, consider relocating it.  **Figure 9.** Control focusability. - Network accessline 340
 **Figure 9.** Control focusability. - Network accessline 345
Place controls, like the search action shown here, in locations that don't overlap with other clickable elements.  **Figure 10.** Control focusability. - Network accessline 347
 **Figure 10.** Control focusability. - Network accessline 358
Give each direction a specific function, making it fast to navigate large hierarchies.  **Figure 11.** Trav - Network accessline 358
Give each direction a specific function, making it fast to navigate large hierarchies.  **Figure 11.** Trav - Network accessline 360
 **Figure 11.** Traversal. - Network accessline 360
 **Figure 11.** Traversal. - Network accessline 365
Categories can be traversed on the vertical axis, and items within each category can be browsed on the horizontal axis.  **Fi - Network accessline 365
Categories can be traversed on the vertical axis, and items within each category can be browsed on the horizontal axis.  **Fi - Network accessline 367
 **Figure 12.** Traversal. - Network accessline 367
 **Figure 12.** Traversal.
tv/leanback-to-compose-tv-migration/references/android/training/tv/playback/compose/browse.md
- Network accessline 7
has a list of media content. Examples of sections in a media catalog include: playlists, featured content, recommended categories.  **Figure 1.** - Network accessline 7
has a list of media content. Examples of sections in a media catalog include: playlists, featured content, recommended categories.  **Figure 1.** - Network accessline 9
 **Figure 1.** Typical catalog screen. Users are able to browse video catalog data. - Network accessline 9
 **Figure 1.** Typical catalog screen. Users are able to browse video catalog data. - Network accessline 45
Compose for TV offers lazy lists, a component to display a large number of items (or a list of an unknown length). Call [`LazyColumn`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/lazy/package-summary#LazyColum - Network accessline 45
Compose for TV offers lazy lists, a component to display a large number of items (or a list of an unknown length). Call [`LazyColumn`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/lazy/package-summary#LazyColum - Network accessline 46
number of items (or a list of an unknown length). Call [`LazyColumn`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/lazy/package-summary#LazyColumn(androidx.compose.ui.Modifier,androidx.compose.foundation.lazy.L - Network accessline 46
number of items (or a list of an unknown length). Call [`LazyColumn`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/lazy/package-summary#LazyColumn(androidx.compose.ui.Modifier,androidx.compose.foundation.lazy.L - Network accessline 47
[`LazyColumn`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/lazy/package-summary#LazyColumn(androidx.compose.ui.Modifier,androidx.compose.foundation.lazy.LazyListState,androidx.compose.foundation.layout.Padding - Network accessline 47
[`LazyColumn`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/lazy/package-summary#LazyColumn(androidx.compose.ui.Modifier,androidx.compose.foundation.lazy.LazyListState,androidx.compose.foundation.layout.Padding - Network accessline 48
to place sections vertically. `LazyColumn` provides a [`LazyListScope.() -> Unit`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/lazy/LazyListScope) block, which offers a DSL to define item contents. In the foll - Network accessline 48
to place sections vertically. `LazyColumn` provides a [`LazyListScope.() -> Unit`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/lazy/LazyListScope) block, which offers a DSL to define item contents. In the foll - Network accessline 49
[`LazyListScope.() -> Unit`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/lazy/LazyListScope) - Network accessline 49
[`LazyListScope.() -> Unit`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/lazy/LazyListScope) - Network accessline 76
In the example, `SectionRow` composable function defines how to display sections. In the following function, [`LazyRow`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/lazy/package-summary#LazyRow(androidx.compos - Network accessline 76
In the example, `SectionRow` composable function defines how to display sections. In the following function, [`LazyRow`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/lazy/package-summary#LazyRow(androidx.compos - Network accessline 77
sections. In the following function, [`LazyRow`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/lazy/package-summary#LazyRow(androidx.compose.ui.Modifier,androidx.compose.foundation.lazy.LazyListState,androidx.co - Network accessline 77
sections. In the following function, [`LazyRow`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/lazy/package-summary#LazyRow(androidx.compose.ui.Modifier,androidx.compose.foundation.lazy.LazyListState,androidx.co - Network accessline 78
In the following function, [`LazyRow`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/lazy/package-summary#LazyRow(androidx.compose.ui.Modifier,androidx.compose.foundation.lazy.LazyListState,androidx.compose.foun - Network accessline 78
In the following function, [`LazyRow`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/lazy/package-summary#LazyRow(androidx.compose.ui.Modifier,androidx.compose.foundation.lazy.LazyListState,androidx.compose.foun - Network accessline 79
horizontal version of [`LazyColumn`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/lazy/package-summary#LazyColumn(androidx.compose.ui.Modifier,androidx.compose.foundation.lazy.LazyListState,androidx.compose.fou - Network accessline 79
horizontal version of [`LazyColumn`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/lazy/package-summary#LazyColumn(androidx.compose.ui.Modifier,androidx.compose.foundation.lazy.LazyListState,androidx.compose.fou - Network accessline 130
In the `SectionRow` composable, the [`Text`](https://developer.android.com/reference/kotlin/androidx/tv/material3/package-summary#Text(androidx.compose.ui.text.AnnotatedString,androidx.compose.ui.Modifier,androidx.compose.ui.graphics.Color, - Network accessline 130
In the `SectionRow` composable, the [`Text`](https://developer.android.com/reference/kotlin/androidx/tv/material3/package-summary#Text(androidx.compose.ui.text.AnnotatedString,androidx.compose.ui.Modifier,androidx.compose.ui.graphics.Color, - Network accessline 132
defined in Material Design are offered in the tv-material library . You can change the texts' style as defined in Material Design by referring to the [`MaterialTheme`](https://developer.android.com/reference/kotlin/androidx/tv/material3/Mat - Network accessline 132
defined in Material Design are offered in the tv-material library . You can change the texts' style as defined in Material Design by referring to the [`MaterialTheme`](https://developer.android.com/reference/kotlin/androidx/tv/material3/Mat - Network accessline 133
change the texts' style as defined in Material Design by referring to the [`MaterialTheme`](https://developer.android.com/reference/kotlin/androidx/tv/material3/MaterialTheme) object. This object is also provided by the tv-material library. - Network accessline 133
change the texts' style as defined in Material Design by referring to the [`MaterialTheme`](https://developer.android.com/reference/kotlin/androidx/tv/material3/MaterialTheme) object. This object is also provided by the tv-material library. - Network accessline 134
[`MaterialTheme`](https://developer.android.com/reference/kotlin/androidx/tv/material3/MaterialTheme) object. - Network accessline 134
[`MaterialTheme`](https://developer.android.com/reference/kotlin/androidx/tv/material3/MaterialTheme) object. - Network accessline 135
This object is also provided by the tv-material library. [`Card`](https://developer.android.com/reference/kotlin/androidx/tv/material3/package-summary#Card(kotlin.Function0,androidx.compose.ui.Modifier,androidx.tv.material3.CardShape,androi - Network accessline 135
This object is also provided by the tv-material library. [`Card`](https://developer.android.com/reference/kotlin/androidx/tv/material3/package-summary#Card(kotlin.Function0,androidx.compose.ui.Modifier,androidx.tv.material3.CardShape,androi - Network accessline 136
[`Card`](https://developer.android.com/reference/kotlin/androidx/tv/material3/package-summary#Card(kotlin.Function0,androidx.compose.ui.Modifier,androidx.tv.material3.CardShape,androidx.tv.material3.CardColors,androidx.tv.material3.CardScal - Network accessline 136
[`Card`](https://developer.android.com/reference/kotlin/androidx/tv/material3/package-summary#Card(kotlin.Function0,androidx.compose.ui.Modifier,androidx.tv.material3.CardShape,androidx.tv.material3.CardColors,androidx.tv.material3.CardScal - Network accessline 163
> [!NOTE] > **Note:** `AsyncImage` is a composable that loads an image from the internet. See [Loading Images](https://developer.android.com/develop/ui/compose/graphics/images/loading#internet-loading) for details. - Network accessline 163
> [!NOTE] > **Note:** `AsyncImage` is a composable that loads an image from the internet. See [Loading Images](https://developer.android.com/develop/ui/compose/graphics/images/loading#internet-loading) for details. - Network accessline 164
> **Note:** `AsyncImage` is a composable that loads an image from the internet. See [Loading Images](https://developer.android.com/develop/ui/compose/graphics/images/loading#internet-loading) for details. - Network accessline 164
> **Note:** `AsyncImage` is a composable that loads an image from the internet. See [Loading Images](https://developer.android.com/develop/ui/compose/graphics/images/loading#internet-loading) for details. - Network accessline 168
In the example described earlier, all movies are displayed equally. They have the same area, no visual difference between them. You can highlight some of them with [`Carousel`](https://developer.android.com/reference/kotlin/androidx/tv/mate - Network accessline 168
In the example described earlier, all movies are displayed equally. They have the same area, no visual difference between them. You can highlight some of them with [`Carousel`](https://developer.android.com/reference/kotlin/androidx/tv/mate - Network accessline 170
You can highlight some of them with [`Carousel`](https://developer.android.com/reference/kotlin/androidx/tv/material3/Carousel.composable#Carousel(kotlin.Int,androidx.compose.ui.Modifier,androidx.tv.material3.CarouselState,kotlin.Long,andro - Network accessline 170
You can highlight some of them with [`Carousel`](https://developer.android.com/reference/kotlin/androidx/tv/material3/Carousel.composable#Carousel(kotlin.Int,androidx.compose.ui.Modifier,androidx.tv.material3.CarouselState,kotlin.Long,andro - Network accessline 176
[`Carousel`](https://developer.android.com/reference/kotlin/androidx/tv/material3/Carousel.composable#Carousel(kotlin.Int,androidx.compose.ui.Modifier,androidx.tv.material3.CarouselState,kotlin.Long,androidx.compose.animation.ContentTransfo - Network accessline 176
[`Carousel`](https://developer.android.com/reference/kotlin/androidx/tv/material3/Carousel.composable#Carousel(kotlin.Int,androidx.compose.ui.Modifier,androidx.tv.material3.CarouselState,kotlin.Long,androidx.compose.animation.ContentTransfo
tv/leanback-to-compose-tv-migration/references/android/training/tv/playback/compose/index.md
- Network accessline 1
[Video](https://www.youtube.com/watch?v=_X4tswgV67Y) - Network accessline 1
[Video](https://www.youtube.com/watch?v=_X4tswgV67Y) - Network accessline 15
If you are unfamiliar with using the Jetpack Compose toolkit, check out the [Compose pathway](https://developer.android.com/courses/pathways/compose). Many of the development principles for mobile Compose - Network accessline 15
If you are unfamiliar with using the Jetpack Compose toolkit, check out the [Compose pathway](https://developer.android.com/courses/pathways/compose). Many of the development principles for mobile Compose - Network accessline 16
[Compose pathway](https://developer.android.com/courses/pathways/compose). Many of the development principles for mobile Compose - Network accessline 16
[Compose pathway](https://developer.android.com/courses/pathways/compose). Many of the development principles for mobile Compose - Network accessline 17
apply to TV as well. See [Why Compose](https://developer.android.com/jetpack/compose/why-adopt) for more information about the general - Network accessline 17
apply to TV as well. See [Why Compose](https://developer.android.com/jetpack/compose/why-adopt) for more information about the general - Network accessline 19
for TV samples repository on GitHub](https://github.com/android/tv-samples/). - Network accessline 19
for TV samples repository on GitHub](https://github.com/android/tv-samples/). - Network accessline 44
Learn more about Gemini in Studio here: [https://developer.android.com/studio/gemini/overview](https://developer.android.com/studio/gemini/overview) - Network accessline 44
Learn more about Gemini in Studio here: [https://developer.android.com/studio/gemini/overview](https://developer.android.com/studio/gemini/overview) - Network accessline 51
Compose for TV works on Android TVs with Android 5.0 (API level 21) or higher. Using version 1.0 of Compose for TV requires version 1.3.0 of [androidx.compose](https://developer.android.com/jetpack/androidx/releases/compose) libraries and K - Network accessline 51
Compose for TV works on Android TVs with Android 5.0 (API level 21) or higher. Using version 1.0 of Compose for TV requires version 1.3.0 of [androidx.compose](https://developer.android.com/jetpack/androidx/releases/compose) libraries and K - Network accessline 53
1.3.0 of [androidx.compose](https://developer.android.com/jetpack/androidx/releases/compose) libraries and Kotlin 1.7.10. - Network accessline 53
1.3.0 of [androidx.compose](https://developer.android.com/jetpack/androidx/releases/compose) libraries and Kotlin 1.7.10. - Network accessline 59
adds libraries that offer TV-optimized components and make it easier to create user interfaces tailored to TV. In some cases those components share the same name as their non-TV counterparts, such as [`androidx.tv.material3.Button`](https:/ - Network accessline 59
adds libraries that offer TV-optimized components and make it easier to create user interfaces tailored to TV. In some cases those components share the same name as their non-TV counterparts, such as [`androidx.tv.material3.Button`](https:/ - Network accessline 60
user interfaces tailored to TV. In some cases those components share the same name as their non-TV counterparts, such as [`androidx.tv.material3.Button`](https://developer.android.com/reference/kotlin/androidx/tv/material3/package-summary#B - Network accessline 60
user interfaces tailored to TV. In some cases those components share the same name as their non-TV counterparts, such as [`androidx.tv.material3.Button`](https://developer.android.com/reference/kotlin/androidx/tv/material3/package-summary#B - Network accessline 61
name as their non-TV counterparts, such as [`androidx.tv.material3.Button`](https://developer.android.com/reference/kotlin/androidx/tv/material3/package-summary#Button(kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Boolean,androidx.tv - Network accessline 61
name as their non-TV counterparts, such as [`androidx.tv.material3.Button`](https://developer.android.com/reference/kotlin/androidx/tv/material3/package-summary#Button(kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Boolean,androidx.tv - Network accessline 62
and [`androidx.compose.material3.Button`](https://developer.android.com/reference/kotlin/androidx/compose/material3/Button.composable#Button(kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Boolean,androidx.compose.ui.graphics.Shape,and - Network accessline 62
and [`androidx.compose.material3.Button`](https://developer.android.com/reference/kotlin/androidx/compose/material3/Button.composable#Button(kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Boolean,androidx.compose.ui.graphics.Shape,and - Network accessline 103
The TV material components are designed for the living room, with **clear focus indicators** and **remote-friendly input behavior** . For details on how to use these specific components, check the [TV UI design guides](https://developer.and - Network accessline 103
The TV material components are designed for the living room, with **clear focus indicators** and **remote-friendly input behavior** . For details on how to use these specific components, check the [TV UI design guides](https://developer.and - Network accessline 104
indicators** and **remote-friendly input behavior** . For details on how to use these specific components, check the [TV UI design guides](https://developer.android.com/design/ui/tv/guides/components). . . - Network accessline 105
to use these specific components, check the [TV UI design guides](https://developer.android.com/design/ui/tv/guides/components). - Network accessline 106
 **Figure 1.** Sample components from the TV material library. - Network accessline 106
 **Figure 1.** Sample components from the TV material library. - Network accessline 108
Use the [TV version](https://developer.android.com/reference/kotlin/androidx/tv/material3/package-summary) of APIs wherever possible to benefit from - Network accessline 108
Use the [TV version](https://developer.android.com/reference/kotlin/androidx/tv/material3/package-summary) of APIs wherever possible to benefit from - Network accessline 121
| **TV Dependency** (androidx.tv.\*) | **Comparison** | **Mobile Dependency** (androidx.compose.\*) | |---|---|---| | [androidx.tv:tv-material](https://developer.android.com/reference/kotlin/androidx/tv/material3/package-summary) | ***inste - Network accessline 121
| **TV Dependency** (androidx.tv.\*) | **Comparison** | **Mobile Dependency** (androidx.compose.\*) | |---|---|---| | [androidx.tv:tv-material](https://developer.android.com/reference/kotlin/androidx/tv/material3/package-summary) | ***inste - Network accessline 123
| [androidx.tv:tv-material](https://developer.android.com/reference/kotlin/androidx/tv/material3/package-summary) | ***instead of*** | androidx.compose.material3:material3 | - Network accessline 123
| [androidx.tv:tv-material](https://developer.android.com/reference/kotlin/androidx/tv/material3/package-summary) | ***instead of*** | androidx.compose.material3:material3 | - Network accessline 127
- [TV design guides](https://developer.android.com/design/ui/tv/guides/components) - Network accessline 127
- [TV design guides](https://developer.android.com/design/ui/tv/guides/components) - Network accessline 132
- [TV Material Catalog sample](https://github.com/android/tv-samples/tree/main/TvMaterialCatalog) - Network accessline 132
- [TV Material Catalog sample](https://github.com/android/tv-samples/tree/main/TvMaterialCatalog) - Network accessline 134
A catalog app that demonstrates how to implement [Material Design](https://www.material.io) principles using Compose for TV. - Network accessline 134
A catalog app that demonstrates how to implement [Material Design](https://www.material.io) principles using Compose for TV. - Network accessline 135
[Material Design](https://www.material.io) principles using Compose for TV. - Network accessline 135
[Material Design](https://www.material.io) principles using Compose for TV. - Network accessline 137
- [JetStream sample](https://github.com/android/tv-samples/tree/main/JetStreamCompose) - Network accessline 137
- [JetStream sample](https://github.com/android/tv-samples/tree/main/JetStreamCompose) - Network accessline 142
- [Introduction to Compose for TV](https://developer.android.com/codelabs/compose-for-tv-introduction) - Network accessline 142
- [Introduction to Compose for TV](https://developer.android.com/codelabs/compose-for-tv-introduction) - Network accessline 151
- [Create a catalog browser](https://developer.android.com/training/tv/playback/compose/browse) - Network accessline 151
- [Create a catalog browser](https://developer.android.com/training/tv/playback/compose/browse) - Network accessline 152
- [Build a details screen](https://developer.android.com/training/tv/playback/compose/details) - Network accessline 152
- [Build a details screen](https://developer.android.com/training/tv/playback/compose/details) - Network accessline 153
- [Create scrollable layouts](https://developer.android.com/training/tv/playback/compose/lists) - Network accessline 153
- [Create scrollable layouts](https://developer.android.com/training/tv/playback/compose/lists)
wear/wear-compose-m3/SKILL.md
- Network accessline 29
1. **Current Wear OS Compose version in-use:** To find the installed library version, read `gradle/libs.versions.toml` or `build.gradle.kts` directly. Don't run `./gradlew dependencies` or other shell commands to resolve versions. 2. **Wear - Network accessline 29
1. **Current Wear OS Compose version in-use:** To find the installed library version, read `gradle/libs.versions.toml` or `build.gradle.kts` directly. Don't run `./gradlew dependencies` or other shell commands to resolve versions. 2. **Wear - Network accessline 30
2. **Wear OS Compose Material3 version:** If an internal tool is available to establish the **latest stable version** `{VERSION}` of `androidx.wear.compose:compose-material3`, use that tool. - Otherwise, fetch the [official Maven metadat - Network accessline 30
2. **Wear OS Compose Material3 version:** If an internal tool is available to establish the **latest stable version** `{VERSION}` of `androidx.wear.compose:compose-material3`, use that tool. - Otherwise, fetch the [official Maven metadat - Network accessline 31
- Otherwise, fetch the [official Maven metadata XML](https://dl.google.com/dl/android/maven2/androidx/wear/compose/compose-material3/maven-metadata.xml) to identify `{VERSION}` (highest number, ignoring `-alpha`, `-beta`, or `-rc`). - Network accessline 31
- Otherwise, fetch the [official Maven metadata XML](https://dl.google.com/dl/android/maven2/androidx/wear/compose/compose-material3/maven-metadata.xml) to identify `{VERSION}` (highest number, ignoring `-alpha`, `-beta`, or `-rc`).
wear/wear-compose-m3/references/android/training/wearables/compose/migrate-to-material3.md
- Network accessline 1
[Material 3 Expressive](https://developer.android.com/design/ui/wear/guides/get-started) is the next evolution of Material Design. It includes - Network accessline 1
[Material 3 Expressive](https://developer.android.com/design/ui/wear/guides/get-started) is the next evolution of Material Design. It includes - Network accessline 4
This guide focuses on migrating from the [Wear Compose Material 2.5 (androidx.wear.compose)](https://developer.android.com/jetpack/androidx/releases/wear-compose#wear_compose_version_15_2) Jetpack library to the [Wear Compose Material 3 - Network accessline 4
This guide focuses on migrating from the [Wear Compose Material 2.5 (androidx.wear.compose)](https://developer.android.com/jetpack/androidx/releases/wear-compose#wear_compose_version_15_2) Jetpack library to the [Wear Compose Material 3 - Network accessline 5
(androidx.wear.compose)](https://developer.android.com/jetpack/androidx/releases/wear-compose#wear_compose_version_15_2) Jetpack library to the [Wear Compose Material 3 - Network accessline 5
(androidx.wear.compose)](https://developer.android.com/jetpack/androidx/releases/wear-compose#wear_compose_version_15_2) Jetpack library to the [Wear Compose Material 3 - Network accessline 6
(androidx.wear.compose.material3)](https://developer.android.com/jetpack/androidx/releases/wear-compose) Jetpack library for apps. - Network accessline 6
(androidx.wear.compose.material3)](https://developer.android.com/jetpack/androidx/releases/wear-compose) Jetpack library for apps. - Network accessline 13
For migrating your app code from M2.5 to M3, follow the same approach described in the [Compose Material migration phone guidance](https://developer.android.com/develop/ui/compose/designsystems/material2-material3), in particular: - Network accessline 13
For migrating your app code from M2.5 to M3, follow the same approach described in the [Compose Material migration phone guidance](https://developer.android.com/develop/ui/compose/designsystems/material2-material3), in particular: - Network accessline 14
in the [Compose Material migration phone guidance](https://developer.android.com/develop/ui/compose/designsystems/material2-material3), in particular: - Network accessline 14
in the [Compose Material migration phone guidance](https://developer.android.com/develop/ui/compose/designsystems/material2-material3), in particular: - Network accessline 16
- You shouldn't use both [M2.5 and M3 in a single app long-term](https://developer.android.com/develop/ui/compose/designsystems/material2-material3#approaches). - Network accessline 16
- You shouldn't use both [M2.5 and M3 in a single app long-term](https://developer.android.com/develop/ui/compose/designsystems/material2-material3#approaches). - Network accessline 18
- Adopt a [phased approach](https://developer.android.com/develop/ui/compose/designsystems/material2-material3#phased-approach). - Network accessline 18
- Adopt a [phased approach](https://developer.android.com/develop/ui/compose/designsystems/material2-material3#phased-approach). - Network accessline 32
See the latest M3 versions on the [Wear Compose releases page](https://developer.android.com/jetpack/androidx/releases/wear-compose). - Network accessline 32
See the latest M3 versions on the [Wear Compose releases page](https://developer.android.com/jetpack/androidx/releases/wear-compose). - Network accessline 46
In both M2.5 and M3, the theme composable is named [`MaterialTheme`](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#MaterialTheme(androidx.wear.compose.material3.ColorScheme,androidx.wear.comp - Network accessline 46
In both M2.5 and M3, the theme composable is named [`MaterialTheme`](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#MaterialTheme(androidx.wear.compose.material3.ColorScheme,androidx.wear.comp - Network accessline 81
The color system in M3 is significantly different from M2.5. The number of color parameters has increased, they have different names, and they map differently to M3 components. In Compose, this applies to the M2.5 [`Colors`](https://develop - Network accessline 81
The color system in M3 is significantly different from M2.5. The number of color parameters has increased, they have different names, and they map differently to M3 components. In Compose, this applies to the M2.5 [`Colors`](https://develop - Network accessline 82
parameters has increased, they have different names, and they map differently to M3 components. In Compose, this applies to the M2.5 [`Colors`](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/Colors) class, the - Network accessline 82
parameters has increased, they have different names, and they map differently to M3 components. In Compose, this applies to the M2.5 [`Colors`](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/Colors) class, the - Network accessline 83
M3 components. In Compose, this applies to the M2.5 [`Colors`](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/Colors) class, the M3 - Network accessline 83
M3 components. In Compose, this applies to the M2.5 [`Colors`](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/Colors) class, the M3 - Network accessline 84
[`ColorScheme`](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/ColorScheme) class, and related functions: - Network accessline 84
[`ColorScheme`](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/ColorScheme) class, and related functions: - Network accessline 118
A new feature in M3 is [dynamic color theming](https://m3.material.io/styles/color/dynamic-color/overview). If users change - Network accessline 118
A new feature in M3 is [dynamic color theming](https://m3.material.io/styles/color/dynamic-color/overview). If users change - Network accessline 121
Use the [`dynamicColorScheme`](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#dynamicColorScheme(android.content.Context)) function to implement dynamic color scheme - Network accessline 121
Use the [`dynamicColorScheme`](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#dynamicColorScheme(android.content.Context)) function to implement dynamic color scheme - Network accessline 140
The [typography system](https://m3.material.io/styles/typography/overview) in M3 is different from M2.5 and it includes - Network accessline 140
The [typography system](https://m3.material.io/styles/typography/overview) in M3 is different from M2.5 and it includes - Network accessline 143
- Nine new [text styles](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/Typography#public-properties_1) - Network accessline 143
- Nine new [text styles](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/Typography#public-properties_1) - Network accessline 175
The following [TextStyles](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/Typography.kt;l=115?q=displayLarge&ss=androidx/platform/fram - Network accessline 175
The following [TextStyles](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/Typography.kt;l=115?q=displayLarge&ss=androidx/platform/fram - Network accessline 189
The [shape system](https://m3.material.io/styles/shape) in M3 is different from M2.5. The number of shape - Network accessline 189
The [shape system](https://m3.material.io/styles/shape) in M3 is different from M2.5. The number of shape - Network accessline 199
In Compose, this applies to the M2.5 [`Shapes`](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/Shapes) class and the M3 - Network accessline 199
In Compose, this applies to the M2.5 [`Shapes`](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/Shapes) class and the M3 - Network accessline 200
[`Shapes`](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/Shapes) class: - Network accessline 200
[`Shapes`](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/Shapes) class: - Network accessline 226
Use the Shapes parameter mapping from [Migrate from Material 2 to Material 3 in Compose](https://developer.android.com/develop/ui/compose/designsystems/material2-material3#shape) as a starting point. - Network accessline 226
Use the Shapes parameter mapping from [Migrate from Material 2 to Material 3 in Compose](https://developer.android.com/develop/ui/compose/designsystems/material2-material3#shape) as a starting point. - Network accessline 227
Compose](https://developer.android.com/develop/ui/compose/designsystems/material2-material3#shape) as a starting point. - Network accessline 227
Compose](https://developer.android.com/develop/ui/compose/designsystems/material2-material3#shape) as a starting point. - Network accessline 236
| Buttons | Shape morphing function | |---|---| | `IconButton` | [IconButtonDefaults.animatedShapes](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/IconButtonDefaults#animatedShapes(androidx.compose.foundatio - Network accessline 236
| Buttons | Shape morphing function | |---|---| | `IconButton` | [IconButtonDefaults.animatedShapes](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/IconButtonDefaults#animatedShapes(androidx.compose.foundatio - Network accessline 237
|---|---| | `IconButton` | [IconButtonDefaults.animatedShapes](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/IconButtonDefaults#animatedShapes(androidx.compose.foundation.shape.CornerBasedShape,androidx.comp - Network accessline 237
|---|---| | `IconButton` | [IconButtonDefaults.animatedShapes](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/IconButtonDefaults#animatedShapes(androidx.compose.foundation.shape.CornerBasedShape,androidx.comp - Network accessline 238
| `IconButton` | [IconButtonDefaults.animatedShapes](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/IconButtonDefaults#animatedShapes(androidx.compose.foundation.shape.CornerBasedShape,androidx.compose.founda - Network accessline 238
| `IconButton` | [IconButtonDefaults.animatedShapes](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/IconButtonDefaults#animatedShapes(androidx.compose.foundation.shape.CornerBasedShape,androidx.compose.founda - Network accessline 239
| `IconToggleButton` | [IconToggleButtonDefaults.animatedShapes](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/IconToggleButtonDefaults#animatedShapes(androidx.compose.foundation.shape.CornerBasedShape,andro - Network accessline 239
| `IconToggleButton` | [IconToggleButtonDefaults.animatedShapes](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/IconToggleButtonDefaults#animatedShapes(androidx.compose.foundation.shape.CornerBasedShape,andro - Network accessline 240
| `TextButton` | [TextButtonDefaults.animatedShapes](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/TextButtonDefaults#animatedShapes(androidx.compose.foundation.shape.CornerBasedShape,androidx.compose.founda - Network accessline 240
| `TextButton` | [TextButtonDefaults.animatedShapes](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/TextButtonDefaults#animatedShapes(androidx.compose.foundation.shape.CornerBasedShape,androidx.compose.founda - Network accessline 241
| `TextToggleButton` | [TextToggleButtonDefaults.animatedShapes](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/TextToggleButtonDefaults#animatedShapes(androidx.compose.foundation.shape.CornerBasedShape,andro - Network accessline 241
| `TextToggleButton` | [TextToggleButtonDefaults.animatedShapes](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/TextToggleButtonDefaults#animatedShapes(androidx.compose.foundation.shape.CornerBasedShape,andro - Network accessline 252
| Material 2.5 | Material 3 | |---|---| | [androidx.wear.compose.material.dialog.Alert](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/dialog/package-summary#Alert(kotlin.Function1,androidx.compose.ui.Modifier - Network accessline 252
| Material 2.5 | Material 3 | |---|---| | [androidx.wear.compose.material.dialog.Alert](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/dialog/package-summary#Alert(kotlin.Function1,androidx.compose.ui.Modifier - Network accessline 253
|---|---| | [androidx.wear.compose.material.dialog.Alert](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/dialog/package-summary#Alert(kotlin.Function1,androidx.compose.ui.Modifier,kotlin.Function1,kotlin.Funct - Network accessline 253
|---|---| | [androidx.wear.compose.material.dialog.Alert](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/dialog/package-summary#Alert(kotlin.Function1,androidx.compose.ui.Modifier,kotlin.Function1,kotlin.Funct - Network accessline 254
| [androidx.wear.compose.material.dialog.Alert](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/dialog/package-summary#Alert(kotlin.Function1,androidx.compose.ui.Modifier,kotlin.Function1,kotlin.Function1,andro - Network accessline 254
| [androidx.wear.compose.material.dialog.Alert](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/dialog/package-summary#Alert(kotlin.Function1,androidx.compose.ui.Modifier,kotlin.Function1,kotlin.Function1,andro - Network accessline 255
| [androidx.wear.compose.material.Button](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/package-summary#Button(kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Boolean,androidx.wear.compose.material.Butto - Network accessline 255
| [androidx.wear.compose.material.Button](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/package-summary#Button(kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Boolean,androidx.wear.compose.material.Butto - Network accessline 256
| [androidx.wear.compose.material.Card](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/package-summary#Card(kotlin.Function0,androidx.compose.ui.Modifier,androidx.compose.ui.graphics.painter.Painter,androidx.c - Network accessline 256
| [androidx.wear.compose.material.Card](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/package-summary#Card(kotlin.Function0,androidx.compose.ui.Modifier,androidx.compose.ui.graphics.painter.Painter,androidx.c - Network accessline 257
| [androidx.wear.compose.material.TitleCard](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/package-summary#TitleCard(kotlin.Function0,kotlin.Function1,androidx.compose.ui.Modifier,kotlin.Boolean,kotlin.Functi - Network accessline 257
| [androidx.wear.compose.material.TitleCard](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/package-summary#TitleCard(kotlin.Function0,kotlin.Function1,androidx.compose.ui.Modifier,kotlin.Boolean,kotlin.Functi - Network accessline 258
| [androidx.wear.compose.material.AppCard](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/package-summary#AppCard(kotlin.Function0,kotlin.Function1,kotlin.Function1,kotlin.Function1,androidx.compose.ui.Modifie - Network accessline 258
| [androidx.wear.compose.material.AppCard](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/package-summary#AppCard(kotlin.Function0,kotlin.Function1,kotlin.Function1,kotlin.Function1,androidx.compose.ui.Modifie - Network accessline 259
| [androidx.wear.compose.material.Checkbox](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/package-summary#Checkbox(kotlin.Boolean,androidx.compose.ui.Modifier,androidx.wear.compose.material.CheckboxColors,kot - Network accessline 259
| [androidx.wear.compose.material.Checkbox](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/package-summary#Checkbox(kotlin.Boolean,androidx.compose.ui.Modifier,androidx.wear.compose.material.CheckboxColors,kot - Network accessline 260
| [androidx.wear.compose.material.Chip](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/package-summary#Chip(kotlin.Function0,androidx.wear.compose.material.ChipColors,androidx.wear.compose.material.ChipBorder, - Network accessline 260
| [androidx.wear.compose.material.Chip](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/package-summary#Chip(kotlin.Function0,androidx.wear.compose.material.ChipColors,androidx.wear.compose.material.ChipBorder, - Network accessline 261
| [androidx.wear.compose.material.CompactChip](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/package-summary#CompactChip(kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Function1,kotlin.Function1,android - Network accessline 261
| [androidx.wear.compose.material.CompactChip](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/package-summary#CompactChip(kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Function1,kotlin.Function1,android - Network accessline 262
| [androidx.wear.compose.material.InlineSlider](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/package-summary#InlineSlider(kotlin.Int,kotlin.Function1,kotlin.ranges.IntProgression,kotlin.Function0,kotlin.Func - Network accessline 262
| [androidx.wear.compose.material.InlineSlider](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/package-summary#InlineSlider(kotlin.Int,kotlin.Function1,kotlin.ranges.IntProgression,kotlin.Function0,kotlin.Func - Network accessline 263
| [androidx.wear.compose.material.LocalContentAlpha()](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/package-summary#LocalContentAlpha()) | Has been removed as not used by `Text` or `Icon` in Material 3 | - Network accessline 263
| [androidx.wear.compose.material.LocalContentAlpha()](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/package-summary#LocalContentAlpha()) | Has been removed as not used by `Text` or `Icon` in Material 3 | - Network accessline 264
| [androidx.wear.compose.material.PositionIndicator](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/package-summary#PositionIndicator(androidx.compose.foundation.lazy.LazyListState,androidx.compose.ui.Modifier - Network accessline 264
| [androidx.wear.compose.material.PositionIndicator](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/package-summary#PositionIndicator(androidx.compose.foundation.lazy.LazyListState,androidx.compose.ui.Modifier - Network accessline 265
| [androidx.wear.compose.material.RadioButton](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/package-summary#RadioButton(kotlin.Boolean,androidx.compose.ui.Modifier,androidx.wear.compose.material.RadioButtonC - Network accessline 265
| [androidx.wear.compose.material.RadioButton](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/package-summary#RadioButton(kotlin.Boolean,androidx.compose.ui.Modifier,androidx.wear.compose.material.RadioButtonC - Network accessline 266
| [androidx.wear.compose.material.SwipeToRevealCard](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#Stepper(kotlin.Int,kotlin.Function1,kotlin.ranges.IntProgression,kotlin.Function0,kotlin.Fun - Network accessline 266
| [androidx.wear.compose.material.SwipeToRevealCard](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#Stepper(kotlin.Int,kotlin.Function1,kotlin.ranges.IntProgression,kotlin.Function0,kotlin.Fun - Network accessline 267
| [androidx.wear.compose.material.SwipeToRevealChip](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/package-summary#SwipeToRevealChip(kotlin.Function1,androidx.wear.compose.foundation.RevealState,kotlin.Functi - Network accessline 267
| [androidx.wear.compose.material.SwipeToRevealChip](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/package-summary#SwipeToRevealChip(kotlin.Function1,androidx.wear.compose.foundation.RevealState,kotlin.Functi - Network accessline 268
| [androidx.wear.compose.material.Scaffold](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/package-summary#Scaffold(androidx.compose.ui.Modifier,kotlin.Function0,kotlin.Function0,kotlin.Function0,kotlin.Functi - Network accessline 268
| [androidx.wear.compose.material.Scaffold](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/package-summary#Scaffold(androidx.compose.ui.Modifier,kotlin.Function0,kotlin.Function0,kotlin.Function0,kotlin.Functi - Network accessline 269
| [androidx.wear.compose.material.SplitToggleChip](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/package-summary#SplitToggleChip(kotlin.Boolean,kotlin.Function1,kotlin.Function1,kotlin.Function0,kotlin.Functi - Network accessline 269
| [androidx.wear.compose.material.SplitToggleChip](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/package-summary#SplitToggleChip(kotlin.Boolean,kotlin.Function1,kotlin.Function1,kotlin.Function0,kotlin.Functi - Network accessline 270
| [androidx.wear.compose.material.Switch](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/package-summary#Switch(kotlin.Boolean,androidx.compose.ui.Modifier,androidx.wear.compose.material.SwitchColors,kotlin.Bo - Network accessline 270
| [androidx.wear.compose.material.Switch](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/package-summary#Switch(kotlin.Boolean,androidx.compose.ui.Modifier,androidx.wear.compose.material.SwitchColors,kotlin.Bo - Network accessline 271
| [androidx.wear.compose.material.ToggleButton](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/package-summary#ToggleButton(kotlin.Boolean,kotlin.Function1,androidx.compose.ui.Modifier,kotlin.Boolean,androidx. - Network accessline 271
| [androidx.wear.compose.material.ToggleButton](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/package-summary#ToggleButton(kotlin.Boolean,kotlin.Function1,androidx.compose.ui.Modifier,kotlin.Boolean,androidx. - Network accessline 272
| [androidx.wear.compose.material.ToggleChip](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/package-summary#ToggleChip(kotlin.Boolean,kotlin.Function1,kotlin.Function1,kotlin.Function0,androidx.compose.ui.Mod - Network accessline 272
| [androidx.wear.compose.material.ToggleChip](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/package-summary#ToggleChip(kotlin.Boolean,kotlin.Function1,kotlin.Function1,kotlin.Function0,androidx.compose.ui.Mod - Network accessline 273
| [androidx.wear.compose.material.Vignette](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/package-summary#Vignette(androidx.wear.compose.material.VignettePosition,androidx.compose.ui.Modifier)) | Removed as n - Network accessline 273
| [androidx.wear.compose.material.Vignette](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/package-summary#Vignette(androidx.wear.compose.material.VignettePosition,androidx.compose.ui.Modifier)) | Removed as n - Network accessline 278
| Material 3 | Material 2.5 equivalent component (if not new in M3) | |---|---| | [androidx.wear.compose.material3.AlertDialog](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#AlertDialog(kotli - Network accessline 278
| Material 3 | Material 2.5 equivalent component (if not new in M3) | |---|---| | [androidx.wear.compose.material3.AlertDialog](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#AlertDialog(kotli - Network accessline 279
|---|---| | [androidx.wear.compose.material3.AlertDialog](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#AlertDialog(kotlin.Boolean,kotlin.Function0,kotlin.Function0,androidx.compose.ui.Modifi - Network accessline 279
|---|---| | [androidx.wear.compose.material3.AlertDialog](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#AlertDialog(kotlin.Boolean,kotlin.Function0,kotlin.Function0,androidx.compose.ui.Modifi - Network accessline 280
| [androidx.wear.compose.material3.AlertDialog](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#AlertDialog(kotlin.Boolean,kotlin.Function0,kotlin.Function0,androidx.compose.ui.Modifier,kotlin. - Network accessline 280
| [androidx.wear.compose.material3.AlertDialog](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#AlertDialog(kotlin.Boolean,kotlin.Function0,kotlin.Function0,androidx.compose.ui.Modifier,kotlin. - Network accessline 281
| [androidx.wear.compose.material3.AnimatedPage](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#AnimatedPage(kotlin.Int,androidx.wear.compose.foundation.pager.PagerState,androidx.compose.ui.gr - Network accessline 281
| [androidx.wear.compose.material3.AnimatedPage](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#AnimatedPage(kotlin.Int,androidx.wear.compose.foundation.pager.PagerState,androidx.compose.ui.gr - Network accessline 282
| [androidx.wear.compose.material3.AnimatedText](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#AnimatedText(kotlin.String,androidx.wear.compose.material3.AnimatedTextFontRegistry,kotlin.Funct - Network accessline 282
| [androidx.wear.compose.material3.AnimatedText](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#AnimatedText(kotlin.String,androidx.wear.compose.material3.AnimatedTextFontRegistry,kotlin.Funct - Network accessline 283
| [androidx.wear.compose.material3.AppScaffold](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#AppScaffold(androidx.compose.ui.Modifier,kotlin.Function0,kotlin.Function1)) | [androidx.wear.com - Network accessline 283
| [androidx.wear.compose.material3.AppScaffold](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#AppScaffold(androidx.compose.ui.Modifier,kotlin.Function0,kotlin.Function1)) | [androidx.wear.com - Network accessline 284
| [androidx.wear.compose.material3.Button](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#Button(kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Function0,kotlin.String,kotlin.Boolean,and - Network accessline 284
| [androidx.wear.compose.material3.Button](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#Button(kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Function0,kotlin.String,kotlin.Boolean,and - Network accessline 285
| [androidx.wear.compose.material3.ButtonGroup](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#ButtonGroup(androidx.compose.ui.Modifier,androidx.compose.ui.unit.Dp,androidx.compose.ui.unit.Dp, - Network accessline 285
| [androidx.wear.compose.material3.ButtonGroup](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#ButtonGroup(androidx.compose.ui.Modifier,androidx.compose.ui.unit.Dp,androidx.compose.ui.unit.Dp, - Network accessline 286
| [androidx.wear.compose.material3.Card](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#Card(kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Function0,kotlin.String,kotlin.Boolean,android - Network accessline 286
| [androidx.wear.compose.material3.Card](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#Card(kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Function0,kotlin.String,kotlin.Boolean,android - Network accessline 287
| [androidx.wear.compose.material3.CheckboxButton](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#CheckboxButton(kotlin.Boolean,kotlin.Function1,androidx.compose.ui.Modifier,kotlin.Boolean,and - Network accessline 287
| [androidx.wear.compose.material3.CheckboxButton](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#CheckboxButton(kotlin.Boolean,kotlin.Function1,androidx.compose.ui.Modifier,kotlin.Boolean,and - Network accessline 288
| [androidx.wear.compose.material3.ChildButton](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#ChildButton(kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Function0,kotlin.String,kotlin.B - Network accessline 288
| [androidx.wear.compose.material3.ChildButton](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#ChildButton(kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Function0,kotlin.String,kotlin.B - Network accessline 289
| [androidx.wear.compose.material3.CircularProgressIndicator](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#CircularProgressIndicator(androidx.compose.ui.Modifier,androidx.wear.compose.materi - Network accessline 289
| [androidx.wear.compose.material3.CircularProgressIndicator](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#CircularProgressIndicator(androidx.compose.ui.Modifier,androidx.wear.compose.materi - Network accessline 290
| [androidx.wear.compose.material3.CompactButton](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#CompactButton(kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Function0,kotlin.String,kotl - Network accessline 290
| [androidx.wear.compose.material3.CompactButton](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#CompactButton(kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Function0,kotlin.String,kotl - Network accessline 291
| [androidx.wear.compose.material3.ConfirmationDialog](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#ConfirmationDialog(kotlin.Boolean,kotlin.Function0,kotlin.Function1,androidx.compose.ui.Mo - Network accessline 291
| [androidx.wear.compose.material3.ConfirmationDialog](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#ConfirmationDialog(kotlin.Boolean,kotlin.Function0,kotlin.Function1,androidx.compose.ui.Mo - Network accessline 292
| [androidx.wear.compose.material3.curvedText](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#(androidx.wear.compose.foundation.CurvedScope).curvedText(kotlin.String,androidx.wear.compose.foun - Network accessline 292
| [androidx.wear.compose.material3.curvedText](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#(androidx.wear.compose.foundation.CurvedScope).curvedText(kotlin.String,androidx.wear.compose.foun - Network accessline 293
| [androidx.wear.compose.material3.DatePicker](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#DatePicker(java.time.LocalDate,kotlin.Function1,androidx.compose.ui.Modifier,java.time.LocalDate,j - Network accessline 293
| [androidx.wear.compose.material3.DatePicker](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#DatePicker(java.time.LocalDate,kotlin.Function1,androidx.compose.ui.Modifier,java.time.LocalDate,j - Network accessline 294
| [androidx.wear.compose.material3.Dialog](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#Dialog(kotlin.Boolean,kotlin.Function0,androidx.compose.ui.Modifier,androidx.compose.ui.window.DialogP - Network accessline 294
| [androidx.wear.compose.material3.Dialog](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#Dialog(kotlin.Boolean,kotlin.Function0,androidx.compose.ui.Modifier,androidx.compose.ui.window.DialogP - Network accessline 295
| [androidx.wear.compose.material3.EdgeButton](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#EdgeButton(kotlin.Function0,androidx.compose.ui.Modifier,androidx.wear.compose.material3.EdgeButto - Network accessline 295
| [androidx.wear.compose.material3.EdgeButton](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#EdgeButton(kotlin.Function0,androidx.compose.ui.Modifier,androidx.wear.compose.material3.EdgeButto - Network accessline 296
| [androidx.wear.compose.material3.FadingExpandingLabel](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#FadingExpandingLabel(kotlin.String,androidx.compose.ui.Modifier,androidx.compose.ui.grap - Network accessline 296
| [androidx.wear.compose.material3.FadingExpandingLabel](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#FadingExpandingLabel(kotlin.String,androidx.compose.ui.Modifier,androidx.compose.ui.grap - Network accessline 297
| [androidx.wear.compose.material3.FilledTonalButton](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#FilledTonalButton(kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Function0,kotlin.Str - Network accessline 297
| [androidx.wear.compose.material3.FilledTonalButton](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#FilledTonalButton(kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Function0,kotlin.Str - Network accessline 298
| [androidx.wear.compose.material3.HorizontalPageIndicator](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#HorizontalPageIndicator(androidx.wear.compose.foundation.pager.PagerState,androidx.co - Network accessline 298
| [androidx.wear.compose.material3.HorizontalPageIndicator](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#HorizontalPageIndicator(androidx.wear.compose.foundation.pager.PagerState,androidx.co - Network accessline 299
| [androidx.wear.compose.material3.HorizontalPagerScaffold](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#HorizontalPagerScaffold(androidx.wear.compose.foundation.pager.PagerState,androidx.co - Network accessline 299
| [androidx.wear.compose.material3.HorizontalPagerScaffold](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#HorizontalPagerScaffold(androidx.wear.compose.foundation.pager.PagerState,androidx.co - Network accessline 300
| [androidx.wear.compose.material3.Icon](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#Icon(androidx.compose.ui.graphics.ImageBitmap,kotlin.String,androidx.compose.ui.Modifier,androidx.compos - Network accessline 300
| [androidx.wear.compose.material3.Icon](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#Icon(androidx.compose.ui.graphics.ImageBitmap,kotlin.String,androidx.compose.ui.Modifier,androidx.compos - Network accessline 301
| [androidx.wear.compose.material3.IconButton](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#IconButton(kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Function0,kotlin.String,kotlin.Boo - Network accessline 301
| [androidx.wear.compose.material3.IconButton](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#IconButton(kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Function0,kotlin.String,kotlin.Boo - Network accessline 302
| [androidx.wear.compose.material3.IconToggleButton](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#IconToggleButton(kotlin.Boolean,kotlin.Function1,androidx.compose.ui.Modifier,kotlin.Boolean - Network accessline 302
| [androidx.wear.compose.material3.IconToggleButton](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#IconToggleButton(kotlin.Boolean,kotlin.Function1,androidx.compose.ui.Modifier,kotlin.Boolean - Network accessline 303
| [androidx.wear.compose.material3.LevelIndicator](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#LevelIndicator(kotlin.Function0,androidx.compose.ui.Modifier,kotlin.ranges.ClosedFloatingPoint - Network accessline 303
| [androidx.wear.compose.material3.LevelIndicator](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#LevelIndicator(kotlin.Function0,androidx.compose.ui.Modifier,kotlin.ranges.ClosedFloatingPoint - Network accessline 304
| [androidx.wear.compose.material3.LinearProgressIndicator](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#LinearProgressIndicator(kotlin.Function0,androidx.compose.ui.Modifier,androidx.wear.c - Network accessline 304
| [androidx.wear.compose.material3.LinearProgressIndicator](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#LinearProgressIndicator(kotlin.Function0,androidx.compose.ui.Modifier,androidx.wear.c - Network accessline 305
| [androidx.wear.compose.material3.ListHeader](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#ListHeader(androidx.compose.ui.Modifier,androidx.compose.ui.graphics.Color,androidx.compose.ui.gra - Network accessline 305
| [androidx.wear.compose.material3.ListHeader](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#ListHeader(androidx.compose.ui.Modifier,androidx.compose.ui.graphics.Color,androidx.compose.ui.gra - Network accessline 306
| [androidx.wear.compose.material3.ListSubHeader](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#ListSubHeader(androidx.compose.ui.Modifier,androidx.compose.ui.graphics.Color,androidx.compose. - Network accessline 306
| [androidx.wear.compose.material3.ListSubHeader](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#ListSubHeader(androidx.compose.ui.Modifier,androidx.compose.ui.graphics.Color,androidx.compose. - Network accessline 307
| [androidx.wear.compose.material3.MaterialTheme](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#MaterialTheme(androidx.wear.compose.material3.ColorScheme,androidx.wear.compose.material3.Typog - Network accessline 307
| [androidx.wear.compose.material3.MaterialTheme](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#MaterialTheme(androidx.wear.compose.material3.ColorScheme,androidx.wear.compose.material3.Typog - Network accessline 308
| [androidx.wear.compose.material3.OpenOnPhoneDialog](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#OpenOnPhoneDialog(kotlin.Boolean,kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Funct - Network accessline 308
| [androidx.wear.compose.material3.OpenOnPhoneDialog](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#OpenOnPhoneDialog(kotlin.Boolean,kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Funct - Network accessline 309
| [androidx.wear.compose.material3.Picker](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#Picker(androidx.wear.compose.material3.PickerState,kotlin.String,androidx.compose.ui.Modifier,kotlin.B - Network accessline 309
| [androidx.wear.compose.material3.Picker](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#Picker(androidx.wear.compose.material3.PickerState,kotlin.String,androidx.compose.ui.Modifier,kotlin.B - Network accessline 310
| [androidx.wear.compose.material3.PickerGroup](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#PickerGroup(kotlin.Int,kotlin.Function1,androidx.compose.ui.Modifier,kotlin.Boolean,kotlin.Functi - Network accessline 310
| [androidx.wear.compose.material3.PickerGroup](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#PickerGroup(kotlin.Int,kotlin.Function1,androidx.compose.ui.Modifier,kotlin.Boolean,kotlin.Functi - Network accessline 311
| [androidx.wear.compose.material3.RadioButton](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#RadioButton(kotlin.Boolean,kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Boolean,androidx. - Network accessline 311
| [androidx.wear.compose.material3.RadioButton](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#RadioButton(kotlin.Boolean,kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Boolean,androidx. - Network accessline 312
| [androidx.wear.compose.material3.ScreenScaffold](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#ScreenScaffold(androidx.compose.ui.Modifier,kotlin.Function0,androidx.wear.compose.foundation. - Network accessline 312
| [androidx.wear.compose.material3.ScreenScaffold](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#ScreenScaffold(androidx.compose.ui.Modifier,kotlin.Function0,androidx.wear.compose.foundation. - Network accessline 313
| [androidx.wear.compose.material3.ScrollIndicator](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#ScrollIndicator(androidx.compose.foundation.lazy.LazyListState,androidx.compose.ui.Modifier,k - Network accessline 313
| [androidx.wear.compose.material3.ScrollIndicator](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#ScrollIndicator(androidx.compose.foundation.lazy.LazyListState,androidx.compose.ui.Modifier,k - Network accessline 314
| [androidx.wear.compose.material3.scrollAway](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#(androidx.compose.ui.Modifier).scrollAway(androidx.wear.compose.foundation.ScrollInfoProvider,kotl - Network accessline 314
| [androidx.wear.compose.material3.scrollAway](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#(androidx.compose.ui.Modifier).scrollAway(androidx.wear.compose.foundation.ScrollInfoProvider,kotl - Network accessline 315
| [androidx.wear.compose.material3.SegmentedCircularProgressIndicator](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#SegmentedCircularProgressIndicator(kotlin.Int,kotlin.Function1,androidx.co - Network accessline 315
| [androidx.wear.compose.material3.SegmentedCircularProgressIndicator](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#SegmentedCircularProgressIndicator(kotlin.Int,kotlin.Function1,androidx.co - Network accessline 316
| [androidx.wear.compose.material3.Slider](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#Slider(kotlin.Int,kotlin.Function1,kotlin.ranges.IntProgression,androidx.compose.ui.Modifier,kotlin.Fu - Network accessline 316
| [androidx.wear.compose.material3.Slider](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#Slider(kotlin.Int,kotlin.Function1,kotlin.ranges.IntProgression,androidx.compose.ui.Modifier,kotlin.Fu - Network accessline 317
| [androidx.wear.compose.material3.SplitRadioButton](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#SplitRadioButton(kotlin.Boolean,kotlin.Function0,kotlin.String,kotlin.Function0,androidx.com - Network accessline 317
| [androidx.wear.compose.material3.SplitRadioButton](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#SplitRadioButton(kotlin.Boolean,kotlin.Function0,kotlin.String,kotlin.Function0,androidx.com - Network accessline 318
| [androidx.wear.compose.material3.SplitCheckboxButton](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#SplitCheckboxButton(kotlin.Boolean,kotlin.Function1,kotlin.String,kotlin.Function0,androi - Network accessline 318
| [androidx.wear.compose.material3.SplitCheckboxButton](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#SplitCheckboxButton(kotlin.Boolean,kotlin.Function1,kotlin.String,kotlin.Function0,androi - Network accessline 319
| [androidx.wear.compose.material3.SplitSwitchButton](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#SplitSwitchButton(kotlin.Boolean,kotlin.Function1,kotlin.String,kotlin.Function0,androidx.c - Network accessline 319
| [androidx.wear.compose.material3.SplitSwitchButton](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#SplitSwitchButton(kotlin.Boolean,kotlin.Function1,kotlin.String,kotlin.Function0,androidx.c - Network accessline 320
| [androidx.wear.compose.material3.Stepper](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#Stepper(kotlin.Int,kotlin.Function1,kotlin.ranges.IntProgression,kotlin.Function0,kotlin.Function0,an - Network accessline 320
| [androidx.wear.compose.material3.Stepper](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#Stepper(kotlin.Int,kotlin.Function1,kotlin.ranges.IntProgression,kotlin.Function0,kotlin.Function0,an - Network accessline 321
| [androidx.wear.compose.material3.SwipeToDismissBox](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#SwipeToDismissBox(androidx.wear.compose.foundation.SwipeToDismissBoxState,androidx.compose. - Network accessline 321
| [androidx.wear.compose.material3.SwipeToDismissBox](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#SwipeToDismissBox(androidx.wear.compose.foundation.SwipeToDismissBoxState,androidx.compose. - Network accessline 322
| [androidx.wear.compose.material3.SwipeToReveal](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#SwipeToReveal(kotlin.Function1,androidx.compose.ui.Modifier,androidx.wear.compose.foundation.Re - Network accessline 322
| [androidx.wear.compose.material3.SwipeToReveal](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#SwipeToReveal(kotlin.Function1,androidx.compose.ui.Modifier,androidx.wear.compose.foundation.Re - Network accessline 323
| [androidx.wear.compose.material3.SwitchButton](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#SwitchButton(kotlin.Boolean,kotlin.Function1,androidx.compose.ui.Modifier,kotlin.Boolean,android - Network accessline 323
| [androidx.wear.compose.material3.SwitchButton](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#SwitchButton(kotlin.Boolean,kotlin.Function1,androidx.compose.ui.Modifier,kotlin.Boolean,android - Network accessline 324
| [androidx.wear.compose.material3.Text](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#Text(kotlin.String,androidx.compose.ui.Modifier,androidx.compose.ui.graphics.Color,androidx.compose.ui.u - Network accessline 324
| [androidx.wear.compose.material3.Text](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#Text(kotlin.String,androidx.compose.ui.Modifier,androidx.compose.ui.graphics.Color,androidx.compose.ui.u - Network accessline 325
| [androidx.wear.compose.material3.TextButton](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#TextButton(kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Function0,kotlin.String,kotlin.Boo - Network accessline 325
| [androidx.wear.compose.material3.TextButton](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#TextButton(kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Function0,kotlin.String,kotlin.Boo - Network accessline 326
| [androidx.wear.compose.material3.TextToggleButton](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#TextToggleButton(kotlin.Boolean,kotlin.Function1,androidx.compose.ui.Modifier,kotlin.Boolean - Network accessline 326
| [androidx.wear.compose.material3.TextToggleButton](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#TextToggleButton(kotlin.Boolean,kotlin.Function1,androidx.compose.ui.Modifier,kotlin.Boolean - Network accessline 327
| [androidx.wear.compose.material3.TimeText](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#TimeText(androidx.compose.ui.Modifier,androidx.wear.compose.foundation.CurvedModifier,kotlin.Float,a - Network accessline 327
| [androidx.wear.compose.material3.TimeText](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#TimeText(androidx.compose.ui.Modifier,androidx.wear.compose.foundation.CurvedModifier,kotlin.Float,a - Network accessline 328
| [androidx.wear.compose.material3.VerticalPagerScaffold](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#VerticalPagerScaffold(androidx.wear.compose.foundation.pager.PagerState,androidx.compos - Network accessline 328
| [androidx.wear.compose.material3.VerticalPagerScaffold](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#VerticalPagerScaffold(androidx.wear.compose.foundation.pager.PagerState,androidx.compos - Network accessline 333
| Wear Compose Foundation 1.8.0-alpha02 | | |---|---| | [androidx.wear.compose.foundation.hierarchicalFocusGroup](https://developer.android.com/reference/kotlin/androidx/wear/compose/foundation/package-summary#(androidx.compose.ui.Modifie - Network accessline 333
| Wear Compose Foundation 1.8.0-alpha02 | | |---|---| | [androidx.wear.compose.foundation.hierarchicalFocusGroup](https://developer.android.com/reference/kotlin/androidx/wear/compose/foundation/package-summary#(androidx.compose.ui.Modifie - Network accessline 334
|---|---| | [androidx.wear.compose.foundation.hierarchicalFocusGroup](https://developer.android.com/reference/kotlin/androidx/wear/compose/foundation/package-summary#(androidx.compose.ui.Modifier).hierarchicalFocusGroup(kotlin.Boolean)) | U - Network accessline 334
|---|---| | [androidx.wear.compose.foundation.hierarchicalFocusGroup](https://developer.android.com/reference/kotlin/androidx/wear/compose/foundation/package-summary#(androidx.compose.ui.Modifier).hierarchicalFocusGroup(kotlin.Boolean)) | U - Network accessline 335
| [androidx.wear.compose.foundation.hierarchicalFocusGroup](https://developer.android.com/reference/kotlin/androidx/wear/compose/foundation/package-summary#(androidx.compose.ui.Modifier).hierarchicalFocusGroup(kotlin.Boolean)) | Used to ann - Network accessline 335
| [androidx.wear.compose.foundation.hierarchicalFocusGroup](https://developer.android.com/reference/kotlin/androidx/wear/compose/foundation/package-summary#(androidx.compose.ui.Modifier).hierarchicalFocusGroup(kotlin.Boolean)) | Used to ann - Network accessline 336
| [androidx.wear.compose.foundation.pager.HorizontalPager](https://developer.android.com/reference/kotlin/androidx/wear/compose/foundation/pager/package-summary#HorizontalPager(androidx.wear.compose.foundation.pager.PagerState,androidx.comp - Network accessline 336
| [androidx.wear.compose.foundation.pager.HorizontalPager](https://developer.android.com/reference/kotlin/androidx/wear/compose/foundation/pager/package-summary#HorizontalPager(androidx.wear.compose.foundation.pager.PagerState,androidx.comp - Network accessline 337
| [androidx.wear.compose.foundation.pager.VerticalPager](https://developer.android.com/reference/kotlin/androidx/wear/compose/foundation/pager/package-summary#VerticalPager(androidx.wear.compose.foundation.pager.PagerState,androidx.compose. - Network accessline 337
| [androidx.wear.compose.foundation.pager.VerticalPager](https://developer.android.com/reference/kotlin/androidx/wear/compose/foundation/pager/package-summary#VerticalPager(androidx.wear.compose.foundation.pager.PagerState,androidx.compose. - Network accessline 338
| [androidx.wear.compose.foundation.lazy.TransformingLazyColumn](https://developer.android.com/reference/kotlin/androidx/wear/compose/foundation/lazy/package-summary#TransformingLazyColumn(androidx.compose.ui.Modifier,androidx.wear.compose. - Network accessline 338
| [androidx.wear.compose.foundation.lazy.TransformingLazyColumn](https://developer.android.com/reference/kotlin/androidx/wear/compose/foundation/lazy/package-summary#TransformingLazyColumn(androidx.compose.ui.Modifier,androidx.wear.compose. - Network accessline 343
Buttons in M3 are different from M2.5. The M2.5 Chip has been replaced by Button. [`Button`](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#Button(kotlin.Function0,androidx.compose.ui.Modifier - Network accessline 343
Buttons in M3 are different from M2.5. The M2.5 Chip has been replaced by Button. [`Button`](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#Button(kotlin.Function0,androidx.compose.ui.Modifier - Network accessline 344
Button. [`Button`](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#Button(kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Function0,kotlin.String,kotlin.Boolean,androidx.compose.ui.graphic - Network accessline 344
Button. [`Button`](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#Button(kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Function0,kotlin.String,kotlin.Boolean,androidx.compose.ui.graphic - Network accessline 370
M3 also includes new button variations. Check them out on the [Compose Material 3 API reference overview](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary). - Network accessline 370
M3 also includes new button variations. Check them out on the [Compose Material 3 API reference overview](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary). - Network accessline 371
3 API reference overview](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary). - Network accessline 371
3 API reference overview](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary). - Network accessline 373
M3 introduces a new button: [`EdgeButton`](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#EdgeButton(kotlin.Function0,androidx.compose.ui.Modifier,androidx.wear.compose.material3.EdgeButtonSiz - Network accessline 373
M3 introduces a new button: [`EdgeButton`](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#EdgeButton(kotlin.Function0,androidx.compose.ui.Modifier,androidx.wear.compose.material3.EdgeButtonSiz - Network accessline 474
> [!NOTE] > **Note:** `AppScaffold` and `ScreenScaffold` from [Horologist](https://github.com/google/horologist) haven't been migrated to M3. To maintain correct scrolling behavior and `TimeText` elements, migrate to the `AppScaffold` and ` - Network accessline 474
> [!NOTE] > **Note:** `AppScaffold` and `ScreenScaffold` from [Horologist](https://github.com/google/horologist) haven't been migrated to M3. To maintain correct scrolling behavior and `TimeText` elements, migrate to the `AppScaffold` and ` - Network accessline 475
> **Note:** `AppScaffold` and `ScreenScaffold` from [Horologist](https://github.com/google/horologist) haven't been migrated to M3. To maintain correct scrolling behavior and `TimeText` elements, migrate to the `AppScaffold` and `ScreenScaf - Network accessline 475
> **Note:** `AppScaffold` and `ScreenScaffold` from [Horologist](https://github.com/google/horologist) haven't been migrated to M3. To maintain correct scrolling behavior and `TimeText` elements, migrate to the `AppScaffold` and `ScreenScaf - Network accessline 477
If you are using a `HorizontalPager` with [`HorizontalPageIndicator`](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/package-summary#HorizontalPageIndicator(androidx.wear.compose.material.PageIndicatorState,an - Network accessline 477
If you are using a `HorizontalPager` with [`HorizontalPageIndicator`](https://developer.android.com/reference/kotlin/androidx/wear/compose/material/package-summary#HorizontalPageIndicator(androidx.wear.compose.material.PageIndicatorState,an - Network accessline 478
can migrate to `HorizontalPagerScaffold`. [`HorizontalPagerScaffold`](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#HorizontalPagerScaffold(androidx.wear.compose.foundation.pager.PagerState,a - Network accessline 478
can migrate to `HorizontalPagerScaffold`. [`HorizontalPagerScaffold`](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#HorizontalPagerScaffold(androidx.wear.compose.foundation.pager.PagerState,a - Network accessline 555
Finally, M3 introduces a [`VerticalPagerScaffold`](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#VerticalPagerScaffold(androidx.wear.compose.foundation.pager.PagerState,androidx.compose.ui.Mo - Network accessline 555
Finally, M3 introduces a [`VerticalPagerScaffold`](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#VerticalPagerScaffold(androidx.wear.compose.foundation.pager.PagerState,androidx.compose.ui.Mo - Network accessline 599
- [`Modifier.placeholder`](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#(androidx.compose.ui.Modifier).placeholder(androidx.wear.compose.material3.PlaceholderState,androidx.compose.ui.graphi - Network accessline 599
- [`Modifier.placeholder`](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#(androidx.compose.ui.Modifier).placeholder(androidx.wear.compose.material3.PlaceholderState,androidx.compose.ui.graphi - Network accessline 600
- A placeholder shimmer effect [`Modifier.placeholderShimmer`](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#(androidx.compose.ui.Modifier).placeholderShimmer(androidx.wear.compose.material3. - Network accessline 600
- A placeholder shimmer effect [`Modifier.placeholderShimmer`](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary#(androidx.compose.ui.Modifier).placeholderShimmer(androidx.wear.compose.material3. - Network accessline 698
- [Wear OS samples on GitHub](https://github.com/android/wear-os-samples/) - Network accessline 698
- [Wear OS samples on GitHub](https://github.com/android/wear-os-samples/) - Network accessline 699
- [Compose for Wear OS codelab](https://developer.android.com/codelabs/compose-for-wear-os#0) - Network accessline 699
- [Compose for Wear OS codelab](https://developer.android.com/codelabs/compose-for-wear-os#0) - Network accessline 700
- [Jetcaster sample](https://github.com/android/compose-samples/tree/main/Jetcaster) - Network accessline 700
- [Jetcaster sample](https://github.com/android/compose-samples/tree/main/Jetcaster) - Network accessline 704
- [Compose Material 3 API reference](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary) - Network accessline 704
- [Compose Material 3 API reference](https://developer.android.com/reference/kotlin/androidx/wear/compose/material3/package-summary) - Network accessline 705
- [Compose Material 3 samples in source code](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:wear/compose/compose-material3/samples/src/main/java/androidx/wear/compose/material3/samples/) - Network accessline 705
- [Compose Material 3 samples in source code](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:wear/compose/compose-material3/samples/src/main/java/androidx/wear/compose/material3/samples/) - Network accessline 709
- [Design guidance](https://developer.android.com/design/ui/wear/guides/get-started) - Network accessline 709
- [Design guidance](https://developer.android.com/design/ui/wear/guides/get-started)
wear/wear-compose-m3/references/foundation/AmbientModeSample.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/foundation/CurvedWorldSample.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/foundation/ExpandableSample.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/foundation/HierarchicalFocusSample.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/foundation/PagerSamples.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/foundation/RotarySamples.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/foundation/SwipeToDismissBoxSample.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/foundation/TransformingLazyColumnSample.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/material3/AlertDialogSample.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/material3/AnimatedTextSample.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/material3/ButtonGroupSample.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/material3/ButtonSample.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/material3/CardSample.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/material3/CheckboxButtonSample.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/material3/ConfirmationDialogSample.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/material3/CurvedTextSamples.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/material3/DatePickerSample.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/material3/DynamicColorSchemeSample.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/material3/EdgeButtonSample.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/material3/FadingExpandingLabelSample.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/material3/IconButtonSample.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/material3/IconToggleButtonSample.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/material3/LevelIndicatorSample.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/material3/LinearProgressIndicatorSample.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/material3/ListHeaderSample.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/material3/OneHandedGestureSamples.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/material3/OpenOnPhoneDialogSample.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/material3/PageIndicatorSample.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/material3/PagerScaffoldSample.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/material3/PickerGroupSample.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/material3/PickerSample.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/material3/PlaceholderSample.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/material3/ProgressIndicatorSample.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/material3/RadioButtonSample.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/material3/ScaffoldSample.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/material3/ScrollAwaySample.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/material3/ScrollIndicatorSample.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/material3/SliderSample.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/material3/StepperSample.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/material3/SurfaceTransformationSample.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/material3/SwipeToDismissBoxSample.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/material3/SwipeToRevealSample.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/material3/SwitchButtonSample.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/material3/TextButtonSample.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/material3/TextToggleButtonSample.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/material3/TimePickerSample.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/material3/TimeTextSample.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/material3/TransformationSpecSample.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/material3/TransformingLazyColumnNotificationsSample.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/material3/TransformingLazyColumnSample.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-compose-m3/references/navigation3/SwipeDismissableSceneStrategySample.kt.md
- Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 7
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 8
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 9
* http://www.apache.org/licenses/LICENSE-2.0
wear/wear-widgets/SKILL.md
- Network accessline 30
1. **Resolve library versions** : Resolve the latest versions for `{GLANCE_WEAR_VERSION}` (`androidx.glance.wear`), `{COMPOSE_REMOTE_VERSION}` (`androidx.compose.remote`), and `{WEAR_COMPOSE_REMOTE_VERSION}` (`androidx.wear.compose.remote`) - Network accessline 30
1. **Resolve library versions** : Resolve the latest versions for `{GLANCE_WEAR_VERSION}` (`androidx.glance.wear`), `{COMPOSE_REMOTE_VERSION}` (`androidx.compose.remote`), and `{WEAR_COMPOSE_REMOTE_VERSION}` (`androidx.wear.compose.remote`) - Network accessline 31
- Use an available dependency lookup tool if present. - Otherwise, fetch the latest version from Google Maven metadata ([Glance Wear metadata](https://dl.google.com/dl/android/maven2/androidx/glance/wear/wear/maven-metadata.xml), [Compos - Network accessline 31
- Use an available dependency lookup tool if present. - Otherwise, fetch the latest version from Google Maven metadata ([Glance Wear metadata](https://dl.google.com/dl/android/maven2/androidx/glance/wear/wear/maven-metadata.xml), [Compos - Network accessline 32
- Otherwise, fetch the latest version from Google Maven metadata ([Glance Wear metadata](https://dl.google.com/dl/android/maven2/androidx/glance/wear/wear/maven-metadata.xml), [Compose Remote metadata](https://dl.google.com/dl/android/maven - Network accessline 32
- Otherwise, fetch the latest version from Google Maven metadata ([Glance Wear metadata](https://dl.google.com/dl/android/maven2/androidx/glance/wear/wear/maven-metadata.xml), [Compose Remote metadata](https://dl.google.com/dl/android/maven
wear/wear-widgets/references/widget-service-and-manifest.md
- Network accessline 73
<wearwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 73
<wearwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 74
xmlns:android="http://schemas.android.com/apk/res/android" - Network accessline 74
xmlns:android="http://schemas.android.com/apk/res/android"
xr/display-glasses-with-jetpack-compose-glimmer/SKILL.md
- Network accessline 40
= release(37) }`). Update `compileSdk` to 37 if lower. - When adding dependencies, follow the instructions in [Create your first activity for intelligent eyewear](https://developer.android.com/develop/xr/jetpack-xr-sdk/ai-glasses/first-ac - Network accessline 40
= release(37) }`). Update `compileSdk` to 37 if lower. - When adding dependencies, follow the instructions in [Create your first activity for intelligent eyewear](https://developer.android.com/develop/xr/jetpack-xr-sdk/ai-glasses/first-ac - Network accessline 41
- When adding dependencies, follow the instructions in [Create your first activity for intelligent eyewear](https://developer.android.com/develop/xr/jetpack-xr-sdk/ai-glasses/first-activity): - `androidx.xr.glimmer:glimmer` (minimum `1. - Network accessline 41
- When adding dependencies, follow the instructions in [Create your first activity for intelligent eyewear](https://developer.android.com/develop/xr/jetpack-xr-sdk/ai-glasses/first-activity): - `androidx.xr.glimmer:glimmer` (minimum `1. - Network accessline 42
activity for intelligent eyewear](https://developer.android.com/develop/xr/jetpack-xr-sdk/ai-glasses/first-activity): - Network accessline 42
activity for intelligent eyewear](https://developer.android.com/develop/xr/jetpack-xr-sdk/ai-glasses/first-activity): - Network accessline 59
- **Set up projected activity** : When creating a projected activity, follow [Create your first activity for intelligent eyewear](https://developer.android.com/develop/xr/jetpack-xr-sdk/ai-glasses/first-activity) and - Network accessline 59
- **Set up projected activity** : When creating a projected activity, follow [Create your first activity for intelligent eyewear](https://developer.android.com/develop/xr/jetpack-xr-sdk/ai-glasses/first-activity) and - Network accessline 60
[Create your first activity for intelligent eyewear](https://developer.android.com/develop/xr/jetpack-xr-sdk/ai-glasses/first-activity) and - Network accessline 60
[Create your first activity for intelligent eyewear](https://developer.android.com/develop/xr/jetpack-xr-sdk/ai-glasses/first-activity) and - Network accessline 98
- **UI library and font** : When declaring the Glimmer, Google Fonts, and Projected artifacts in `app/build.gradle.kts`, follow [Declaring Jetpack Compose Glimmer Dependencies](https://developer.android.com/jetpack/androidx/releases/xr- - Network accessline 98
- **UI library and font** : When declaring the Glimmer, Google Fonts, and Projected artifacts in `app/build.gradle.kts`, follow [Declaring Jetpack Compose Glimmer Dependencies](https://developer.android.com/jetpack/androidx/releases/xr- - Network accessline 99
Projected artifacts in `app/build.gradle.kts`, follow [Declaring Jetpack Compose Glimmer Dependencies](https://developer.android.com/jetpack/androidx/releases/xr-glimmer), and follow [glimmersansflextypography-source.md](references/glim - Network accessline 99
Projected artifacts in `app/build.gradle.kts`, follow [Declaring Jetpack Compose Glimmer Dependencies](https://developer.android.com/jetpack/androidx/releases/xr-glimmer), and follow [glimmersansflextypography-source.md](references/glim - Network accessline 100
Compose Glimmer Dependencies](https://developer.android.com/jetpack/androidx/releases/xr-glimmer), and follow - Network accessline 100
Compose Glimmer Dependencies](https://developer.android.com/jetpack/androidx/releases/xr-glimmer), and follow - Network accessline 167
- **Hardware capabilities, permissions, and access** : When checking hardware capabilities, requesting permissions, or accessing glasses hardware, follow [Check device capabilities at runtime](https://developer.android.com/develop/xr/je - Network accessline 167
- **Hardware capabilities, permissions, and access** : When checking hardware capabilities, requesting permissions, or accessing glasses hardware, follow [Check device capabilities at runtime](https://developer.android.com/develop/xr/je - Network accessline 168
capabilities, requesting permissions, or accessing glasses hardware, follow [Check device capabilities at runtime](https://developer.android.com/develop/xr/jetpack-xr-sdk/ai-glasses/check-capabilities), [Request hardware permissions](re - Network accessline 168
capabilities, requesting permissions, or accessing glasses hardware, follow [Check device capabilities at runtime](https://developer.android.com/develop/xr/jetpack-xr-sdk/ai-glasses/check-capabilities), [Request hardware permissions](re - Network accessline 169
[Check device capabilities at runtime](https://developer.android.com/develop/xr/jetpack-xr-sdk/ai-glasses/check-capabilities), [Request hardware - Network accessline 169
[Check device capabilities at runtime](https://developer.android.com/develop/xr/jetpack-xr-sdk/ai-glasses/check-capabilities), [Request hardware - Network accessline 345
- **Sizing and interactivity** : Size icons with `GlimmerTheme.iconSizes` (`small`, `medium`, `large`). Use `IconButton` or `IconToggleButton` for triggers and `Icon` for status indicators. - **Contrast and library** : **Never** use pure bl - Network accessline 345
- **Sizing and interactivity** : Size icons with `GlimmerTheme.iconSizes` (`small`, `medium`, `large`). Use `IconButton` or `IconToggleButton` for triggers and `Icon` for status indicators. - **Contrast and library** : **Never** use pure bl - Network accessline 346
- **Contrast and library** : **Never** use pure black (`Color.Black`) for icon tints; black renders as transparent. Use [Material Symbols](https://fonts.google.com/icons?icon.style=Rounded) (600 weight, Rounded, Unfilled). If `androidx.comp - Network accessline 346
- **Contrast and library** : **Never** use pure black (`Color.Black`) for icon tints; black renders as transparent. Use [Material Symbols](https://fonts.google.com/icons?icon.style=Rounded) (600 weight, Rounded, Unfilled). If `androidx.comp - Network accessline 596
- When handling notifications or starting a projected activity from a notification, follow the instructions in [Understand notification behavior for intelligent eyewear](https://developer.android.com/develop/xr/jetpack-xr-sdk/ai-glasses/n - Network accessline 596
- When handling notifications or starting a projected activity from a notification, follow the instructions in [Understand notification behavior for intelligent eyewear](https://developer.android.com/develop/xr/jetpack-xr-sdk/ai-glasses/n - Network accessline 597
for intelligent eyewear](https://developer.android.com/develop/xr/jetpack-xr-sdk/ai-glasses/notifications/behavior) and [Start a glasses activity on display - Network accessline 597
for intelligent eyewear](https://developer.android.com/develop/xr/jetpack-xr-sdk/ai-glasses/notifications/behavior) and [Start a glasses activity on display - Network accessline 598
glasses from a notification](https://developer.android.com/develop/xr/jetpack-xr-sdk/ai-glasses/notifications/start-activity). - Network accessline 598
glasses from a notification](https://developer.android.com/develop/xr/jetpack-xr-sdk/ai-glasses/notifications/start-activity).
xr/display-glasses-with-jetpack-compose-glimmer/references/android/design/ui/ai-glasses/guides/interaction/inputs.md
- Network accessline 29
 - Network accessline 29
 - Network accessline 30
frame.](https://developer.android.com/static/images/design/ui/glasses/guides/glasses_ixd_inputs_hardware.png) - Network accessline 30
frame.](https://developer.android.com/static/images/design/ui/glasses/guides/glasses_ixd_inputs_hardware.png) - Network accessline 66
 On - Network accessline 66
 On - Network accessline 67
frame.](https://developer.android.com/static/images/design/ui/glasses/guides/glasses_ixd_inputs_focus.png) On - Network accessline 67
frame.](https://developer.android.com/static/images/design/ui/glasses/guides/glasses_ixd_inputs_focus.png) On - Network accessline 77
than complex and precise controls.  - Network accessline 77
than complex and precise controls.  - Network accessline 79
 - Network accessline 79
 - Network accessline 83
Design around fast gestures that don't feel out of place while a user is out and about.  - Network accessline 83
Design around fast gestures that don't feel out of place while a user is out and about.  - Network accessline 91
Limit the number of gestures that the user needs to remember, and take advantage of existing user mental models.  - Network accessline 91
Limit the number of gestures that the user needs to remember, and take advantage of existing user mental models.  - Network accessline 93
 - Network accessline 93
 - Network accessline 97
Provide UI elements for users to complete actions when the display is available.  - Network accessline 97
Provide UI elements for users to complete actions when the display is available.  - Network accessline 125
 - Network accessline 125
 - Network accessline 129
Put initial focus on a lower-cost action, like accepting a call.  - Network accessline 129
Put initial focus on a lower-cost action, like accepting a call. 
xr/display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/access-hardware-projected-context.md
- Network accessline 1
Applicable XR devices This guidance helps you build experiences for these types of XR devices. [Learn about XR device types →](https://developer.android.com/develop/xr/devices)   [Learn about XR device types →](https://developer.android.com/develop/xr/devices) - Network accessline 2
Display Glasses [](https://developer.android.com/develop/xr/devices#audio-display) [Learn about XR device types →](https://developer.android.com/develop/xr/devices) - Network accessline 6
After you've [requested and been granted the necessary permissions](https://developer.android.com/develop/xr/jetpack-xr-sdk/request-hardware-permissions), your app - Network accessline 6
After you've [requested and been granted the necessary permissions](https://developer.android.com/develop/xr/jetpack-xr-sdk/request-hardware-permissions), your app - Network accessline 7
can access the hardware on the audio glasses or display glasses. The key to accessing the glasses' hardware (instead of the phone's hardware), is to use a [projected context](https://developer.android.com/develop/xr/jetpack-xr-sdk/glasses/s - Network accessline 7
can access the hardware on the audio glasses or display glasses. The key to accessing the glasses' hardware (instead of the phone's hardware), is to use a [projected context](https://developer.android.com/develop/xr/jetpack-xr-sdk/glasses/s - Network accessline 9
[projected context](https://developer.android.com/develop/xr/jetpack-xr-sdk/glasses/support-different-types#projected-context). - Network accessline 9
[projected context](https://developer.android.com/develop/xr/jetpack-xr-sdk/glasses/support-different-types#projected-context). - Network accessline 16
If your app's code is running from within your [projected activity](https://developer.android.com/develop/xr/jetpack-xr-sdk/glasses/support-different-types#activity-lifecycle), its own - Network accessline 16
If your app's code is running from within your [projected activity](https://developer.android.com/develop/xr/jetpack-xr-sdk/glasses/support-different-types#activity-lifecycle), its own - Network accessline 17
activity context is already a [projected context](https://developer.android.com/develop/xr/jetpack-xr-sdk/glasses/support-different-types#projected-context). In this scenario, calls - Network accessline 17
activity context is already a [projected context](https://developer.android.com/develop/xr/jetpack-xr-sdk/glasses/support-different-types#projected-context). In this scenario, calls - Network accessline 23
activity or a service) needs to access the glasses' hardware, it must explicitly obtain a projected context. To do this, use the [`createProjectedDeviceContext`](https://developer.android.com/reference/kotlin/androidx/xr/projected/Projected - Network accessline 23
activity or a service) needs to access the glasses' hardware, it must explicitly obtain a projected context. To do this, use the [`createProjectedDeviceContext`](https://developer.android.com/reference/kotlin/androidx/xr/projected/Projected - Network accessline 25
[`createProjectedDeviceContext`](https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedContext#createProjectedDeviceContext(android.content.Context)) method: - Network accessline 25
[`createProjectedDeviceContext`](https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedContext#createProjectedDeviceContext(android.content.Context)) method: - Network accessline 63
Wrap the [`createProjectedDeviceContext`](https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedContext#createProjectedDeviceContext(android.content.Context)) call within the - Network accessline 63
Wrap the [`createProjectedDeviceContext`](https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedContext#createProjectedDeviceContext(android.content.Context)) call within the - Network accessline 64
[`ProjectedContext.isProjectedDeviceConnected`](https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedContext#isProjectedDeviceConnected(android.content.Context,kotlin.coroutines.CoroutineContext)). While this method - Network accessline 64
[`ProjectedContext.isProjectedDeviceConnected`](https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedContext#isProjectedDeviceConnected(android.content.Context,kotlin.coroutines.CoroutineContext)). While this method - Network accessline 71
The projected context is tied to the lifecycle of the connected device, so it is destroyed when the device disconnects. When the device disconnects, [`ProjectedContext.isProjectedDeviceConnected`](https://developer.android.com/reference/kot - Network accessline 71
The projected context is tied to the lifecycle of the connected device, so it is destroyed when the device disconnects. When the device disconnects, [`ProjectedContext.isProjectedDeviceConnected`](https://developer.android.com/reference/kot - Network accessline 72
destroyed when the device disconnects. When the device disconnects, [`ProjectedContext.isProjectedDeviceConnected`](https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedContext#isProjectedDeviceConnected(android.con - Network accessline 72
destroyed when the device disconnects. When the device disconnects, [`ProjectedContext.isProjectedDeviceConnected`](https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedContext#isProjectedDeviceConnected(android.con - Network accessline 73
[`ProjectedContext.isProjectedDeviceConnected`](https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedContext#isProjectedDeviceConnected(android.content.Context,kotlin.coroutines.CoroutineContext)) returns `false`. Y - Network accessline 73
[`ProjectedContext.isProjectedDeviceConnected`](https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedContext#isProjectedDeviceConnected(android.content.Context,kotlin.coroutines.CoroutineContext)) returns `false`. Y - Network accessline 80
When the glasses reconnect, your app can obtain another projected context instance using [`createProjectedDeviceContext`](https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedContext#createProjectedDeviceContext(and - Network accessline 80
When the glasses reconnect, your app can obtain another projected context instance using [`createProjectedDeviceContext`](https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedContext#createProjectedDeviceContext(and - Network accessline 81
instance using [`createProjectedDeviceContext`](https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedContext#createProjectedDeviceContext(android.content.Context)), and then re-initialize any - Network accessline 81
instance using [`createProjectedDeviceContext`](https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedContext#createProjectedDeviceContext(android.content.Context)), and then re-initialize any - Network accessline 95
To record audio using Bluetooth HFP, first request the required runtime permissions, and then record the audio using the [`AudioManager`](https://developer.android.com/reference/kotlin/android/media/AudioManager) API, as - Network accessline 95
To record audio using Bluetooth HFP, first request the required runtime permissions, and then record the audio using the [`AudioManager`](https://developer.android.com/reference/kotlin/android/media/AudioManager) API, as - Network accessline 96
permissions, and then record the audio using the [`AudioManager`](https://developer.android.com/reference/kotlin/android/media/AudioManager) API, as - Network accessline 96
permissions, and then record the audio using the [`AudioManager`](https://developer.android.com/reference/kotlin/android/media/AudioManager) API, as - Network accessline 101
As with any standard Bluetooth audio device, the [`RECORD_AUDIO`](https://developer.android.com/reference/kotlin/android/Manifest.permission#record_audio), - Network accessline 101
As with any standard Bluetooth audio device, the [`RECORD_AUDIO`](https://developer.android.com/reference/kotlin/android/Manifest.permission#record_audio), - Network accessline 102
[`BLUETOOTH_CONNECT`](https://developer.android.com/reference/kotlin/android/Manifest.permission#bluetooth_connect), and other related permissions are controlled by the - Network accessline 102
[`BLUETOOTH_CONNECT`](https://developer.android.com/reference/kotlin/android/Manifest.permission#bluetooth_connect), and other related permissions are controlled by the - Network accessline 107
1. [Declare following permissions](https://developer.android.com/develop/xr/jetpack-xr-sdk/request-hardware-permissions#declare-permissions) in your app's manifest file: - Network accessline 107
1. [Declare following permissions](https://developer.android.com/develop/xr/jetpack-xr-sdk/request-hardware-permissions#declare-permissions) in your app's manifest file: - Network accessline 109
- [`RECORD_AUDIO`](https://developer.android.com/reference/kotlin/android/Manifest.permission#record_audio) - Network accessline 109
- [`RECORD_AUDIO`](https://developer.android.com/reference/kotlin/android/Manifest.permission#record_audio) - Network accessline 110
- [`BLUETOOTH_CONNECT`](https://developer.android.com/reference/kotlin/android/Manifest.permission#bluetooth_connect) - Network accessline 110
- [`BLUETOOTH_CONNECT`](https://developer.android.com/reference/kotlin/android/Manifest.permission#bluetooth_connect) - Network accessline 111
- [`MODIFY_AUDIO_SETTINGS`](https://developer.android.com/reference/kotlin/android/Manifest.permission#modify_audio_settings) - Network accessline 111
- [`MODIFY_AUDIO_SETTINGS`](https://developer.android.com/reference/kotlin/android/Manifest.permission#modify_audio_settings) - Network accessline 113
runtime using the [standard Android permission flow](https://developer.android.com/training/permissions/requesting). - Network accessline 113
runtime using the [standard Android permission flow](https://developer.android.com/training/permissions/requesting). - Network accessline 117
After the user has granted your app the necessary runtime permissions, use the [`AudioManager`](https://developer.android.com/reference/kotlin/android/media/AudioManager) API to set the communication device to - Network accessline 117
After the user has granted your app the necessary runtime permissions, use the [`AudioManager`](https://developer.android.com/reference/kotlin/android/media/AudioManager) API to set the communication device to - Network accessline 118
[`AudioManager`](https://developer.android.com/reference/kotlin/android/media/AudioManager) API to set the communication device to - Network accessline 118
[`AudioManager`](https://developer.android.com/reference/kotlin/android/media/AudioManager) API to set the communication device to - Network accessline 119
[`TYPE_BLUETOOTH_SCO`](https://developer.android.com/reference/kotlin/android/media/AudioDeviceInfo#type_bluetooth_sco) to route the audio through Bluetooth HFP. This - Network accessline 119
[`TYPE_BLUETOOTH_SCO`](https://developer.android.com/reference/kotlin/android/media/AudioDeviceInfo#type_bluetooth_sco) to route the audio through Bluetooth HFP. This - Network accessline 144
> [!NOTE] > **Note:** To learn more about Bluetooth connectivity, refer to our [documentation](https://developer.android.com/develop/connectivity/bluetooth). - Network accessline 144
> [!NOTE] > **Note:** To learn more about Bluetooth connectivity, refer to our [documentation](https://developer.android.com/develop/connectivity/bluetooth). - Network accessline 145
> **Note:** To learn more about Bluetooth connectivity, refer to our [documentation](https://developer.android.com/develop/connectivity/bluetooth). - Network accessline 145
> **Note:** To learn more about Bluetooth connectivity, refer to our [documentation](https://developer.android.com/develop/connectivity/bluetooth). - Network accessline 149
To capture an image with the glasses' camera, set up and bind the CameraX's [`ImageCapture`](https://developer.android.com/reference/kotlin/androidx/camera/core/ImageCapture) [use case](https://developer.android.com/media/camera/camerax#eas - Network accessline 149
To capture an image with the glasses' camera, set up and bind the CameraX's [`ImageCapture`](https://developer.android.com/reference/kotlin/androidx/camera/core/ImageCapture) [use case](https://developer.android.com/media/camera/camerax#eas - Network accessline 150
[`ImageCapture`](https://developer.android.com/reference/kotlin/androidx/camera/core/ImageCapture) [use case](https://developer.android.com/media/camera/camerax#ease-of-use) to the glasses' camera using the correct - Network accessline 150
[`ImageCapture`](https://developer.android.com/reference/kotlin/androidx/camera/core/ImageCapture) [use case](https://developer.android.com/media/camera/camerax#ease-of-use) to the glasses' camera using the correct - Network accessline 236
- Obtains an instance of the [`ProcessCameraProvider`](https://developer.android.com/reference/kotlin/androidx/camera/lifecycle/ProcessCameraProvider) using the [**projected device context**](https://developer.android.com/develop/xr/jetpack - Network accessline 236
- Obtains an instance of the [`ProcessCameraProvider`](https://developer.android.com/reference/kotlin/androidx/camera/lifecycle/ProcessCameraProvider) using the [**projected device context**](https://developer.android.com/develop/xr/jetpack - Network accessline 237
- Within the projected context's scope, the glasses' primary, outward-pointing camera maps to the `DEFAULT_BACK_CAMERA` when selecting a camera. - A pre-binding check uses [`cameraProvider.hasCamera(cameraSelector)`](https://developer.andro - Network accessline 237
- Within the projected context's scope, the glasses' primary, outward-pointing camera maps to the `DEFAULT_BACK_CAMERA` when selecting a camera. - A pre-binding check uses [`cameraProvider.hasCamera(cameraSelector)`](https://developer.andro - Network accessline 238
- A pre-binding check uses [`cameraProvider.hasCamera(cameraSelector)`](https://developer.android.com/reference/kotlin/androidx/camera/lifecycle/ProcessCameraProvider#hasCamera(androidx.camera.core.CameraSelector)) to verify that the select - Network accessline 238
- A pre-binding check uses [`cameraProvider.hasCamera(cameraSelector)`](https://developer.android.com/reference/kotlin/androidx/camera/lifecycle/ProcessCameraProvider#hasCamera(androidx.camera.core.CameraSelector)) to verify that the select - Network accessline 239
- Uses **Camera2 Interop** with [`Camera2CameraInfo`](https://developer.android.com/reference/kotlin/androidx/camera/camera2/interop/Camera2CameraInfo) to read the underlying [`CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP`](https:/ - Network accessline 239
- Uses **Camera2 Interop** with [`Camera2CameraInfo`](https://developer.android.com/reference/kotlin/androidx/camera/camera2/interop/Camera2CameraInfo) to read the underlying [`CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP`](https:/ - Network accessline 240
- A custom [`ResolutionSelector`](https://developer.android.com/reference/kotlin/androidx/camera/core/resolutionselector/ResolutionSelector) is built to precisely control the output image resolution for [`ImageCapture`](https://developer.an - Network accessline 240
- A custom [`ResolutionSelector`](https://developer.android.com/reference/kotlin/androidx/camera/core/resolutionselector/ResolutionSelector) is built to precisely control the output image resolution for [`ImageCapture`](https://developer.an - Network accessline 241
- Creates an `ImageCapture` use case that is configured with a custom `ResolutionSelector`. - Binds the `ImageCapture` use case to the activity's lifecycle. This automatically manages the opening and closing of the camera based on the activ - Network accessline 241
- Creates an `ImageCapture` use case that is configured with a custom `ResolutionSelector`. - Binds the `ImageCapture` use case to the activity's lifecycle. This automatically manages the opening and closing of the camera based on the activ - Network accessline 243
- **Configuring for single-stream hardware:** The glasses camera pipeline is constrained to a single active stream at a time. When `ImageCapture` is bound alone, CameraX attaches an internal repeating stream (`MeteringRepeating`) for focus - Network accessline 243
- **Configuring for single-stream hardware:** The glasses camera pipeline is constrained to a single active stream at a time. When `ImageCapture` is bound alone, CameraX attaches an internal repeating stream (`MeteringRepeating`) for focus - Network accessline 245
After the glasses' camera is set up, you can capture an image with the CameraX's `ImageCapture` class. Refer to the CameraX's documentation to learn about using [`takePicture`](https://developer.android.com/media/camera/camerax/take-photo#t - Network accessline 245
After the glasses' camera is set up, you can capture an image with the CameraX's `ImageCapture` class. Refer to the CameraX's documentation to learn about using [`takePicture`](https://developer.android.com/media/camera/camerax/take-photo#t - Network accessline 247
[`takePicture`](https://developer.android.com/media/camera/camerax/take-photo#take_a_picture) to [capture an image](https://developer.android.com/media/camera/camerax/take-photo#take_a_picture). - Network accessline 247
[`takePicture`](https://developer.android.com/media/camera/camerax/take-photo#take_a_picture) to [capture an image](https://developer.android.com/media/camera/camerax/take-photo#take_a_picture). - Network accessline 251
To capture a video instead of an image with the glasses' camera, replace the `ImageCapture` components with the corresponding [`VideoCapture`](https://developer.android.com/reference/kotlin/androidx/camera/video/VideoCapture) components - Network accessline 251
To capture a video instead of an image with the glasses' camera, replace the `ImageCapture` components with the corresponding [`VideoCapture`](https://developer.android.com/reference/kotlin/androidx/camera/video/VideoCapture) components - Network accessline 252
`ImageCapture` components with the corresponding [`VideoCapture`](https://developer.android.com/reference/kotlin/androidx/camera/video/VideoCapture) components - Network accessline 252
`ImageCapture` components with the corresponding [`VideoCapture`](https://developer.android.com/reference/kotlin/androidx/camera/video/VideoCapture) components - Network accessline 256
file, and initiating the capture using the appropriate video recording method. For more information about the `VideoCapture` API and how to use it, see the [CameraX's video capture documentation](https://developer.android.com/media/camera/c - Network accessline 256
file, and initiating the capture using the appropriate video recording method. For more information about the `VideoCapture` API and how to use it, see the [CameraX's video capture documentation](https://developer.android.com/media/camera/c - Network accessline 258
[CameraX's video capture documentation](https://developer.android.com/media/camera/camerax/video-capture#using-videocapture-api). - Network accessline 258
[CameraX's video capture documentation](https://developer.android.com/media/camera/camerax/video-capture#using-videocapture-api). - Network accessline 274
An [projected activity](https://developer.android.com/develop/xr/jetpack-xr-sdk/glasses/support-different-types#activity-lifecycle) can also access the phone's hardware (such as the - Network accessline 274
An [projected activity](https://developer.android.com/develop/xr/jetpack-xr-sdk/glasses/support-different-types#activity-lifecycle) can also access the phone's hardware (such as the - Network accessline 275
camera or microphone) by using [`createHostDeviceContext(context)`](https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedContext#createHostDeviceContext(android.content.Context)) to get - Network accessline 275
camera or microphone) by using [`createHostDeviceContext(context)`](https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedContext#createHostDeviceContext(android.content.Context)) to get - Network accessline 299
- Use the [`Activity`](https://developer.android.com/reference/kotlin/android/app/Activity) context from the phone `Activity` or the [`ProjectedContext.createHostDeviceContext`](https://developer.android.com/reference/kotlin/androidx/xr/pro - Network accessline 299
- Use the [`Activity`](https://developer.android.com/reference/kotlin/android/app/Activity) context from the phone `Activity` or the [`ProjectedContext.createHostDeviceContext`](https://developer.android.com/reference/kotlin/androidx/xr/pro - Network accessline 300
- Don't use [`getApplicationContext`](https://developer.android.com/reference/kotlin/android/content/Context#getapplicationcontext) because the application context can incorrectly return the glasses' context if a projected activity was the - Network accessline 300
- Don't use [`getApplicationContext`](https://developer.android.com/reference/kotlin/android/content/Context#getapplicationcontext) because the application context can incorrectly return the glasses' context if a projected activity was the
xr/display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/buttons.md
- Network accessline 4
Applicable XR devices This guidance helps you build experiences for these types of XR devices. [Learn about XR device types →](https://developer.android.com/develop/xr/devices)   is an interactive component that's - Network accessline 8
In Jetpack Compose Glimmer, a [`Button`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/Button.composable) is an interactive component that's - Network accessline 12
Buttons are built on the Jetpack Compose Glimmer [surface system](https://developer.android.com/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/surface), which - Network accessline 12
Buttons are built on the Jetpack Compose Glimmer [surface system](https://developer.android.com/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/surface), which - Network accessline 15
The standard button contains a text label and optional icons. You can use it for primary or secondary actions. There are also specialized buttons, such as [icon buttons](https://developer.android.com/develop/xr/jetpack-xr-sdk/jetpack-compos - Network accessline 15
The standard button contains a text label and optional icons. You can use it for primary or secondary actions. There are also specialized buttons, such as [icon buttons](https://developer.android.com/develop/xr/jetpack-xr-sdk/jetpack-compos - Network accessline 16
primary or secondary actions. There are also specialized buttons, such as [icon buttons](https://developer.android.com/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/icon-buttons) and [toggle buttons](https://developer.android.com/develo - Network accessline 16
primary or secondary actions. There are also specialized buttons, such as [icon buttons](https://developer.android.com/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/icon-buttons) and [toggle buttons](https://developer.android.com/develo - Network accessline 17
buttons](https://developer.android.com/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/icon-buttons) and [toggle buttons](https://developer.android.com/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/toggle-buttons), which are defined a - Network accessline 17
buttons](https://developer.android.com/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/icon-buttons) and [toggle buttons](https://developer.android.com/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/toggle-buttons), which are defined a - Network accessline 22
 An example of some different styles of buttons in Jetpack Compose Glimmer. These examples show default, medium-sized bu - Network accessline 22
 An example of some different styles of buttons in Jetpack Compose Glimmer. These examples show default, medium-sized bu - Network accessline 26
 An example of some different styles of buttons in Jetpack Compose Glimmer. These examples show large-sized buttons with three but - Network accessline 26
 An example of some different styles of buttons in Jetpack Compose Glimmer. These examples show large-sized buttons with three but - Network accessline 54
- **Enabled**: The default state for an interactive button. - **Focused** : When focused, the button applies a [`GlimmerTheme.depthEffectLevels.level1`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/DepthEffectLevels#le - Network accessline 54
- **Enabled**: The default state for an interactive button. - **Focused** : When focused, the button applies a [`GlimmerTheme.depthEffectLevels.level1`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/DepthEffectLevels#le - Network accessline 55
- **Focused** : When focused, the button applies a [`GlimmerTheme.depthEffectLevels.level1`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/DepthEffectLevels#level1()) and a focused border highlight. - Network accessline 55
- **Focused** : When focused, the button applies a [`GlimmerTheme.depthEffectLevels.level1`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/DepthEffectLevels#level1()) and a focused border highlight. - Network accessline 63
- By default, buttons use [`GlimmerTheme.typography.bodySmall`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/Typography#bodySmall()). Make sure that text within buttons is concise and clearly describes the action. - Network accessline 63
- By default, buttons use [`GlimmerTheme.typography.bodySmall`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/Typography#bodySmall()). Make sure that text within buttons is concise and clearly describes the action. - Network accessline 64
- The default shape for a button is [`GlimmerTheme.shapes.large`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/Shapes#large()). This consistent rounding helps users identify buttons across the display glasses interface - Network accessline 64
- The default shape for a button is [`GlimmerTheme.shapes.large`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/Shapes#large()). This consistent rounding helps users identify buttons across the display glasses interface - Network accessline 66
> [!NOTE] > **Note:** Any modifier passed to the `Button` composable is applied to the outer layout. While [`ButtonSize`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/ButtonSize) sets the default minimum height, you ca - Network accessline 66
> [!NOTE] > **Note:** Any modifier passed to the `Button` composable is applied to the outer layout. While [`ButtonSize`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/ButtonSize) sets the default minimum height, you ca - Network accessline 67
> **Note:** Any modifier passed to the `Button` composable is applied to the outer layout. While [`ButtonSize`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/ButtonSize) sets the default minimum height, you can also app - Network accessline 67
> **Note:** Any modifier passed to the `Button` composable is applied to the outer layout. While [`ButtonSize`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/ButtonSize) sets the default minimum height, you can also app - Network accessline 92
The [`ButtonGroup`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/ButtonGroup.composable) composable lets you group buttons into a scrollable row - Network accessline 92
The [`ButtonGroup`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/ButtonGroup.composable) composable lets you group buttons into a scrollable row - Network accessline 93
that acts as a focus controller. As the user scrolls, focus automatically moves to highlight the button corresponding to the current scroll position.  An example of - Network accessline 93
that acts as a focus controller. As the user scrolls, focus automatically moves to highlight the button corresponding to the current scroll position.  An example of - Network accessline 95
 An example of a button group scrolling and focusing features. - Network accessline 95
 An example of a button group scrolling and focusing features. - Network accessline 119
1. Declare the state with `rememberButtonGroupState`. 2. Pass it to the `ButtonGroup` composable. 3. Call [`animateScrollToItem`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/ButtonGroupState#animateScrollToItem(kotlin - Network accessline 119
1. Declare the state with `rememberButtonGroupState`. 2. Pass it to the `ButtonGroup` composable. 3. Call [`animateScrollToItem`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/ButtonGroupState#animateScrollToItem(kotlin - Network accessline 121
3. Call [`animateScrollToItem`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/ButtonGroupState#animateScrollToItem(kotlin.Int,androidx.compose.animation.core.FiniteAnimationSpec)) (or [`scrollToItem`](https://developer. - Network accessline 121
3. Call [`animateScrollToItem`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/ButtonGroupState#animateScrollToItem(kotlin.Int,androidx.compose.animation.core.FiniteAnimationSpec)) (or [`scrollToItem`](https://developer. - Network accessline 143
In Jetpack Compose Glimmer, components are [designed and optimized for transparent displays](https://developer.android.com/design/ui/ai-glasses/guides/foundations/made-for-glasses#transparent-first), so they rely primarily on subtle translu - Network accessline 143
In Jetpack Compose Glimmer, components are [designed and optimized for transparent displays](https://developer.android.com/design/ui/ai-glasses/guides/foundations/made-for-glasses#transparent-first), so they rely primarily on subtle translu - Network accessline 144
transparent displays](https://developer.android.com/design/ui/ai-glasses/guides/foundations/made-for-glasses#transparent-first), so they rely primarily on subtle translucent - Network accessline 144
transparent displays](https://developer.android.com/design/ui/ai-glasses/guides/foundations/made-for-glasses#transparent-first), so they rely primarily on subtle translucent - Network accessline 146
against the real world. Because resting states favor neutral tones to avoid both visual fatigue and obstructing the user's field of view, the [`focusedColor`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/ButtonDefaults - Network accessline 146
against the real world. Because resting states favor neutral tones to avoid both visual fatigue and obstructing the user's field of view, the [`focusedColor`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/ButtonDefaults - Network accessline 147
visual fatigue and obstructing the user's field of view, the [`focusedColor`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/ButtonDefaults#focusedColor(androidx.compose.ui.graphics.Color)) parameter on [`Button`](https: - Network accessline 147
visual fatigue and obstructing the user's field of view, the [`focusedColor`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/ButtonDefaults#focusedColor(androidx.compose.ui.graphics.Color)) parameter on [`Button`](https: - Network accessline 148
[`focusedColor`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/ButtonDefaults#focusedColor(androidx.compose.ui.graphics.Color)) parameter on [`Button`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/ - Network accessline 148
[`focusedColor`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/ButtonDefaults#focusedColor(androidx.compose.ui.graphics.Color)) parameter on [`Button`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/
xr/display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/cards.md
- Network accessline 4
Applicable XR devices This guidance helps you build experiences for these types of XR devices. [Learn about XR device types →](https://developer.android.com/develop/xr/devices)   component serves as the primary - Network accessline 8
In Jetpack Compose Glimmer, the [`Card`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/Card.composable) component serves as the primary - Network accessline 16
Cards are built on the Jetpack Compose Glimmer [surface system](https://developer.android.com/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/surface), so they - Network accessline 16
Cards are built on the Jetpack Compose Glimmer [surface system](https://developer.android.com/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/surface), so they - Network accessline 17
inherit physical properties like depth effects, clipping, and consistent border highlights.  **Figure 1.** An example of some different st - Network accessline 17
inherit physical properties like depth effects, clipping, and consistent border highlights.  **Figure 1.** An example of some different st - Network accessline 19
 **Figure 1.** An example of some different styles of cards in Jetpack Compose Glimmer. - Network accessline 19
 **Figure 1.** An example of some different styles of cards in Jetpack Compose Glimmer. - Network accessline 28
| Header | The top section of the card, designed to hold an image. | | Title and subtitle | These text fields provide the main and secondary labels for the card. The title is placed above the subtitle. | | Leading icon | An optional icon (t - Network accessline 28
| Header | The top section of the card, designed to hold an image. | | Title and subtitle | These text fields provide the main and secondary labels for the card. The title is placed above the subtitle. | | Leading icon | An optional icon (t - Network accessline 29
| Title and subtitle | These text fields provide the main and secondary labels for the card. The title is placed above the subtitle. | | Leading icon | An optional icon (typically an [`Icon`](https://developer.android.com/reference/kotlin/a - Network accessline 29
| Title and subtitle | These text fields provide the main and secondary labels for the card. The title is placed above the subtitle. | | Leading icon | An optional icon (typically an [`Icon`](https://developer.android.com/reference/kotlin/a - Network accessline 30
| Leading icon | An optional icon (typically an [`Icon`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/Icon.composable)) that appears at the beginning of the card's content area. | - Network accessline 30
| Leading icon | An optional icon (typically an [`Icon`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/Icon.composable)) that appears at the beginning of the card's content area. | - Network accessline 32
| Main content | The core body of the card for primary [`Text`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/Text.composable) or content. | - Network accessline 32
| Main content | The core body of the card for primary [`Text`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/Text.composable) or content. | - Network accessline 39
- **Minimum height** : `80.dp` - **Text vertical spacing** : `3.dp` - **Header shape** : Uses [`RoundedCornerShape`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/shape/package-summary#RoundedCornerShape(android - Network accessline 39
- **Minimum height** : `80.dp` - **Text vertical spacing** : `3.dp` - **Header shape** : Uses [`RoundedCornerShape`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/shape/package-summary#RoundedCornerShape(android - Network accessline 40
- **Text vertical spacing** : `3.dp` - **Header shape** : Uses [`RoundedCornerShape`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/shape/package-summary#RoundedCornerShape(androidx.compose.ui.unit.Dp)) with `24 - Network accessline 40
- **Text vertical spacing** : `3.dp` - **Header shape** : Uses [`RoundedCornerShape`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/shape/package-summary#RoundedCornerShape(androidx.compose.ui.unit.Dp)) with `24 - Network accessline 41
- **Header shape** : Uses [`RoundedCornerShape`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/shape/package-summary#RoundedCornerShape(androidx.compose.ui.unit.Dp)) with `24.dp` corners - Network accessline 41
- **Header shape** : Uses [`RoundedCornerShape`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/shape/package-summary#RoundedCornerShape(androidx.compose.ui.unit.Dp)) with `24.dp` corners - Network accessline 42
- **Content padding** : Defaults to [`GlimmerTheme.componentSpacingValues.medium`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/ComponentSpacingValues#medium()). This affects the outermost padding around header images - Network accessline 42
- **Content padding** : Defaults to [`GlimmerTheme.componentSpacingValues.medium`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/ComponentSpacingValues#medium()). This affects the outermost padding around header images - Network accessline 43
- **Shape** : Defaults to [`GlimmerTheme.shapes.medium`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/Shapes#medium()). - Network accessline 43
- **Shape** : Defaults to [`GlimmerTheme.shapes.medium`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/Shapes#medium()). - Network accessline 45
[`GlimmerTheme.typography`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/GlimmerTheme#typography()) for the following slots: - Network accessline 45
[`GlimmerTheme.typography`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/GlimmerTheme#typography()) for the following slots: - Network accessline 47
- Title: [`bodyMedium`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/Typography#bodyMedium()) - Network accessline 47
- Title: [`bodyMedium`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/Typography#bodyMedium()) - Network accessline 48
- Subtitle: [`caption`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/Typography#caption()) - Network accessline 48
- Subtitle: [`caption`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/Typography#caption()) - Network accessline 49
- Main content: [`bodySmall`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/Typography#bodySmall()) - Network accessline 49
- Main content: [`bodySmall`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/Typography#bodySmall()) - Network accessline 82
- Shows how to use various card elements, such as [`title`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/Card.composable), [`subtitle`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/Card.composable - Network accessline 82
- Shows how to use various card elements, such as [`title`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/Card.composable), [`subtitle`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/Card.composable - Network accessline 83
- Uses the [`Card`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/Card.composable#Card(kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Function0,kotlin.Function0,kotlin.Function0,kotlin.Function0,kotlin.Function0,a - Network accessline 83
- Uses the [`Card`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/Card.composable#Card(kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Function0,kotlin.Function0,kotlin.Function0,kotlin.Function0,kotlin.Function0,a - Network accessline 87
If you want to include an action button with a card, use an [`ActionCard`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/ActionCard.composable). Action cards have the same elements as standard cards and - Network accessline 87
If you want to include an action button with a card, use an [`ActionCard`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/ActionCard.composable). Action cards have the same elements as standard cards and - Network accessline 88
[`ActionCard`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/ActionCard.composable). Action cards have the same elements as standard cards and - Network accessline 88
[`ActionCard`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/ActionCard.composable). Action cards have the same elements as standard cards and - Network accessline 90
 **Figure 2.** An example of an `ActionCard` in Jetpack Compose Glimmer. - Network accessline 90
 **Figure 2.** An example of an `ActionCard` in Jetpack Compose Glimmer.
xr/display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/focus.md
- Network accessline 4
Applicable XR devices This guidance helps you build experiences for these types of XR devices. [Learn about XR device types →](https://developer.android.com/develop/xr/devices)  .draggable(androidx.compose.foundation.gestures.DraggableState,androidx.compose.foundation.gestures.Orientation - Network accessline 17
[`Modifier.draggable`](https://developer.android.com/reference/kotlin/androidx/compose/ui/Modifier#(androidx.compose.ui.Modifier).draggable(androidx.compose.foundation.gestures.DraggableState,androidx.compose.foundation.gestures.Orientation - Network accessline 37
> This feature is still in development and isn't enabled by default. To activate > this feature, set the `isInitialFocusOnFocusableAvailable` flag to `true` in > your activity's [`onCreate()`](https://developer.android.com/reference/kotlin/ - Network accessline 37
> This feature is still in development and isn't enabled by default. To activate > this feature, set the `isInitialFocusOnFocusableAvailable` flag to `true` in > your activity's [`onCreate()`](https://developer.android.com/reference/kotlin/ - Network accessline 38
> this feature, set the `isInitialFocusOnFocusableAvailable` flag to `true` in > your activity's [`onCreate()`](https://developer.android.com/reference/kotlin/android/app/Activity#onCreate(android.os.Bundle)) method. > - Network accessline 38
> this feature, set the `isInitialFocusOnFocusableAvailable` flag to `true` in > your activity's [`onCreate()`](https://developer.android.com/reference/kotlin/android/app/Activity#onCreate(android.os.Bundle)) method. > - Network accessline 39
> your activity's [`onCreate()`](https://developer.android.com/reference/kotlin/android/app/Activity#onCreate(android.os.Bundle)) method. - Network accessline 39
> your activity's [`onCreate()`](https://developer.android.com/reference/kotlin/android/app/Activity#onCreate(android.os.Bundle)) method. - Network accessline 68
Just like in Jetpack Compose, Jetpack Compose Glimmer uses one-dimensional focus search. To learn more about the order of focus traversal, see [Change focus traversal order](https://developer.android.com/develop/ui/compose/touch-input/focus - Network accessline 68
Just like in Jetpack Compose, Jetpack Compose Glimmer uses one-dimensional focus search. To learn more about the order of focus traversal, see [Change focus traversal order](https://developer.android.com/develop/ui/compose/touch-input/focus - Network accessline 70
traversal order](https://developer.android.com/develop/ui/compose/touch-input/focus/change-focus-traversal-order#override-one-dimensional). - Network accessline 70
traversal order](https://developer.android.com/develop/ui/compose/touch-input/focus/change-focus-traversal-order#override-one-dimensional). - Network accessline 72
To change the initially-focused item, you can add a top-level [`Modifier.focusGroup()`](https://developer.android.com/reference/kotlin/androidx/compose/ui/Modifier#(androidx.compose.ui.Modifier).focusGroup()) and specify a custom `onEnter` - Network accessline 72
To change the initially-focused item, you can add a top-level [`Modifier.focusGroup()`](https://developer.android.com/reference/kotlin/androidx/compose/ui/Modifier#(androidx.compose.ui.Modifier).focusGroup()) and specify a custom `onEnter` - Network accessline 73
[`Modifier.focusGroup()`](https://developer.android.com/reference/kotlin/androidx/compose/ui/Modifier#(androidx.compose.ui.Modifier).focusGroup()) and specify a custom `onEnter` - Network accessline 73
[`Modifier.focusGroup()`](https://developer.android.com/reference/kotlin/androidx/compose/ui/Modifier#(androidx.compose.ui.Modifier).focusGroup()) and specify a custom `onEnter` - Network accessline 74
[`focusProperty`](https://developer.android.com/reference/kotlin/androidx/compose/ui/Modifier#(androidx.compose.ui.Modifier).focusProperties(kotlin.Function1)): - Network accessline 74
[`focusProperty`](https://developer.android.com/reference/kotlin/androidx/compose/ui/Modifier#(androidx.compose.ui.Modifier).focusProperties(kotlin.Function1)): - Network accessline 95
components, including surfaces, cards, and list items, promoting consistent and clear visual feedback during user interaction.  **Figure 1 - Network accessline 95
components, including surfaces, cards, and list items, promoting consistent and clear visual feedback during user interaction.  **Figure 1 - Network accessline 97
 **Figure 1.** Three focus states in Jetpack Compose Glimmer, which are differentiated using outline-based visual feedback. - Network accessline 97
 **Figure 1.** Three focus states in Jetpack Compose Glimmer, which are differentiated using outline-based visual feedback. - Network accessline 99
- **Default** : The button's background color is derived from [`GlimmerTheme.colors.surface`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/Colors#surface()), its main content calculates the content - Network accessline 99
- **Default** : The button's background color is derived from [`GlimmerTheme.colors.surface`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/Colors#surface()), its main content calculates the content - Network accessline 100
[`GlimmerTheme.colors.surface`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/Colors#surface()), its main content calculates the content - Network accessline 100
[`GlimmerTheme.colors.surface`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/Colors#surface()), its main content calculates the content
xr/display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/icons.md
- Network accessline 4
Applicable XR devices This guidance helps you build experiences for these types of XR devices. [Learn about XR device types →](https://developer.android.com/develop/xr/devices)   component is a UI element for - Network accessline 8
In Jetpack Compose Glimmer, the [`Icon`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/Icon.composable) component is a UI element for - Network accessline 10
that they remain legible and visually consistent with the [`GlimmerTheme`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/GlimmerTheme.composable). - Network accessline 10
that they remain legible and visually consistent with the [`GlimmerTheme`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/GlimmerTheme.composable). - Network accessline 14
While icons default to the size provided by [`LocalIconSize`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/package-summary#LocalIconSize()), you can also - Network accessline 14
While icons default to the size provided by [`LocalIconSize`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/package-summary#LocalIconSize()), you can also - Network accessline 26
Icons can accept [`ImageVector`](https://developer.android.com/reference/kotlin/androidx/compose/ui/graphics/vector/ImageVector), [`ImageBitmap`](https://developer.android.com/reference/kotlin/androidx/compose/ui/graphics/ImageBitmap), or [ - Network accessline 26
Icons can accept [`ImageVector`](https://developer.android.com/reference/kotlin/androidx/compose/ui/graphics/vector/ImageVector), [`ImageBitmap`](https://developer.android.com/reference/kotlin/androidx/compose/ui/graphics/ImageBitmap), or [ - Network accessline 32
- **Automatic tint** : The icon resolves its color based on the `LocalContentColor` provided by the parent surface `LocalContentColor` provided by the parent surface, such as a [`surface`](https://developer.android.com/reference/kotlin/andr - Network accessline 32
- **Automatic tint** : The icon resolves its color based on the `LocalContentColor` provided by the parent surface `LocalContentColor` provided by the parent surface, such as a [`surface`](https://developer.android.com/reference/kotlin/andr - Network accessline 33
- **Manual Tinting** : Use the `tint` parameter to apply a specific color. - **Multicolored Assets** : For icons that should not be tinted (like multicolored brand logos), set `tint = Color.Unspecified`. - **Generic Images** : For photograp - Network accessline 33
- **Manual Tinting** : Use the `tint` parameter to apply a specific color. - **Multicolored Assets** : For icons that should not be tinted (like multicolored brand logos), set `tint = Color.Unspecified`. - **Generic Images** : For photograp - Network accessline 35
- **Generic Images** : For photographs or generic images that don't follow icon sizing and tinting rules, use the standard [`androidx.compose.foundation.Image`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/Imag - Network accessline 35
- **Generic Images** : For photographs or generic images that don't follow icon sizing and tinting rules, use the standard [`androidx.compose.foundation.Image`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/Imag - Network accessline 89
- The icon's size is customized using [`GlimmerTheme.iconSizes`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/IconSizes) with a modifier. For icons, the default value is [`GlimmerTheme.iconSizes.medium`](https://develo - Network accessline 89
- The icon's size is customized using [`GlimmerTheme.iconSizes`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/IconSizes) with a modifier. For icons, the default value is [`GlimmerTheme.iconSizes.medium`](https://develo
xr/display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/text.md
- Network accessline 4
Applicable XR devices This guidance helps you build experiences for these types of XR devices. [Learn about XR device types →](https://developer.android.com/develop/xr/devices)   component lets you set various text - Network accessline 8
In Jetpack Compose Glimmer, the [`Text`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/Text.composable) component lets you set various text - Network accessline 53
[Google Sans Flex](https://fonts.google.com/specimen/Google+Sans+Flex?query=google+sans&preview.script=Latn) is a variable font specifically chosen for AI - Network accessline 53
[Google Sans Flex](https://fonts.google.com/specimen/Google+Sans+Flex?query=google+sans&preview.script=Latn) is a variable font specifically chosen for AI - Network accessline 60
To use Google Sans Flex, [add the `glimmer-google-fonts` library to your app's dependencies](https://developer.android.com/develop/xr/jetpack-xr-sdk/set-up-sdk#augmented), then apply the font globally to the `GlimmerTheme`: - Network accessline 60
To use Google Sans Flex, [add the `glimmer-google-fonts` library to your app's dependencies](https://developer.android.com/develop/xr/jetpack-xr-sdk/set-up-sdk#augmented), then apply the font globally to the `GlimmerTheme`: - Network accessline 61
dependencies](https://developer.android.com/develop/xr/jetpack-xr-sdk/set-up-sdk#augmented), then apply the font globally to the `GlimmerTheme`: - Network accessline 61
dependencies](https://developer.android.com/develop/xr/jetpack-xr-sdk/set-up-sdk#augmented), then apply the font globally to the `GlimmerTheme`:
xr/display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/title-chips.md
- Network accessline 4
Applicable XR devices This guidance helps you build experiences for these types of XR devices. [Learn about XR device types →](https://developer.android.com/develop/xr/devices)   component is a non-interactive - Network accessline 8
In Jetpack Compose Glimmer, the [`TitleChip`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/TitleChip.composable) component is a non-interactive - Network accessline 10
as a [`Card`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/Card.composable) or a [`VerticalList`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/list/VerticalList.composable). - Network accessline 10
as a [`Card`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/Card.composable) or a [`VerticalList`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/list/VerticalList.composable). - Network accessline 13
a status indicator. Normally, you should place title chips above the content they describe to establish a clear structural relationship.  **Figure 1.** An example of a default style title chip and sticky title chip in Jetpack Compose Glimmer. Each title chip has - Network accessline 15
 **Figure 1.** An example of a default style title chip and sticky title chip in Jetpack Compose Glimmer. Each title chip has - Network accessline 50
To use a title chip with another component, place the title chip [`TitleChipDefaults.associatedContentSpacing`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/TitleChipDefaults#associatedContentSpacing()) above the other - Network accessline 50
To use a title chip with another component, place the title chip [`TitleChipDefaults.associatedContentSpacing`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/TitleChipDefaults#associatedContentSpacing()) above the other - Network accessline 51
[`TitleChipDefaults.associatedContentSpacing`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/TitleChipDefaults#associatedContentSpacing()) above the other component in - Network accessline 51
[`TitleChipDefaults.associatedContentSpacing`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/TitleChipDefaults#associatedContentSpacing()) above the other component in - Network accessline 78
- The title chip is centered horizontally, which is the usual alignment for a title chip placed above a card. - The [`Spacer`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/Spacer.composable#Spacer(androi - Network accessline 78
- The title chip is centered horizontally, which is the usual alignment for a title chip placed above a card. - The [`Spacer`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/Spacer.composable#Spacer(androi - Network accessline 79
- The [`Spacer`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/Spacer.composable#Spacer(androidx.compose.ui.Modifier)) has a fixed height to provide the right amount of vertical spacing between the two co - Network accessline 79
- The [`Spacer`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/Spacer.composable#Spacer(androidx.compose.ui.Modifier)) has a fixed height to provide the right amount of vertical spacing between the two co - Network accessline 80
- Uses an optional `leadingIcon` to add additional visual context before the text content. - The title chip automatically uses the [`caption`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/Typography#caption()) style fo - Network accessline 80
- Uses an optional `leadingIcon` to add additional visual context before the text content. - The title chip automatically uses the [`caption`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/Typography#caption()) style fo - Network accessline 81
- The title chip automatically uses the [`caption`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/Typography#caption()) style for its text. - Network accessline 81
- The title chip automatically uses the [`caption`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/Typography#caption()) style for its text. - Network accessline 82
- The title chip isn't interactive. If you need a clickable label, use a [`Button`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/Button.composable) or another interactive component. - Network accessline 82
- The title chip isn't interactive. If you need a clickable label, use a [`Button`](https://developer.android.com/reference/kotlin/androidx/xr/glimmer/Button.composable) or another interactive component.
xr/display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/request-hardware-permissions.md
- Network accessline 4
Applicable XR devices This guidance helps you build experiences for these types of XR devices. [Learn about XR device types →](https://developer.android.com/develop/xr/devices)   [Learn about XR device types →](https://developer.android.com/develop/xr/devices) - Network accessline 5
Display Glasses [](https://developer.android.com/develop/xr/devices#audio-display) [Learn about XR device types →](https://developer.android.com/develop/xr/devices) - Network accessline 17
Before requesting permissions, you must [declare them in your app's manifest](https://developer.android.com/training/permissions/declaring) - Network accessline 17
Before requesting permissions, you must [declare them in your app's manifest](https://developer.android.com/training/permissions/declaring) - Network accessline 18
file using the [`<uses-permission>`](https://developer.android.com/guide/topics/manifest/uses-permission-element) element. This declaration remains the - Network accessline 18
file using the [`<uses-permission>`](https://developer.android.com/guide/topics/manifest/uses-permission-element) element. This declaration remains the - Network accessline 34
Review the [permission principles and workflows](https://developer.android.com/training/permissions/requesting#principles) to make sure you provide the - Network accessline 34
Review the [permission principles and workflows](https://developer.android.com/training/permissions/requesting#principles) to make sure you provide the - Network accessline 35
best experience for your users, like [checking whether the user has already granted the runtime permissions](https://developer.android.com/training/permissions/requesting#already-granted) your app requires and [whether your app should show - Network accessline 35
best experience for your users, like [checking whether the user has already granted the runtime permissions](https://developer.android.com/training/permissions/requesting#already-granted) your app requires and [whether your app should show - Network accessline 36
granted the runtime permissions](https://developer.android.com/training/permissions/requesting#already-granted) your app requires and [whether your app - Network accessline 36
granted the runtime permissions](https://developer.android.com/training/permissions/requesting#already-granted) your app requires and [whether your app - Network accessline 37
should show a rationale](https://developer.android.com/training/permissions/requesting#explain) to the user before requesting glasses-specific - Network accessline 37
should show a rationale](https://developer.android.com/training/permissions/requesting#explain) to the user before requesting glasses-specific - Network accessline 42
There are different scenarios you might encounter when requesting [dangerous runtime permissions](https://developer.android.com/guide/topics/permissions/requesting#normal-dangerous) on audio and display glasses: - Network accessline 42
There are different scenarios you might encounter when requesting [dangerous runtime permissions](https://developer.android.com/guide/topics/permissions/requesting#normal-dangerous) on audio and display glasses: - Network accessline 43
runtime permissions](https://developer.android.com/guide/topics/permissions/requesting#normal-dangerous) on audio and display glasses: - Network accessline 43
runtime permissions](https://developer.android.com/guide/topics/permissions/requesting#normal-dangerous) on audio and display glasses: - Network accessline 52
To request runtime permissions for audio or display glasses from a projected activity, use the [`ProjectedActivityCompat.requestPermissions`](https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedActivityCompat#reque - Network accessline 52
To request runtime permissions for audio or display glasses from a projected activity, use the [`ProjectedActivityCompat.requestPermissions`](https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedActivityCompat#reque - Network accessline 53
activity, use the [`ProjectedActivityCompat.requestPermissions`](https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedActivityCompat#requestPermissions(android.app.Activity,kotlin.Array,kotlin.Int)) method. - Network accessline 53
activity, use the [`ProjectedActivityCompat.requestPermissions`](https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedActivityCompat#requestPermissions(android.app.Activity,kotlin.Array,kotlin.Int)) method. - Network accessline 88
- Use `ProjectedActivityCompat.requestPermissions` instead of the standard [`ActivityCompat`](https://developer.android.com/reference/kotlin/androidx/core/app/ActivityCompat) method. This method explicitly targets the runtime permissions fo - Network accessline 88
- Use `ProjectedActivityCompat.requestPermissions` instead of the standard [`ActivityCompat`](https://developer.android.com/reference/kotlin/androidx/core/app/ActivityCompat) method. This method explicitly targets the runtime permissions fo - Network accessline 92
Once the user responds to the permission dialog on the phone, their decision is delivered to your app by invoking the [`onRequestPermissionsResult`](https://developer.android.com/reference/kotlin/androidx/core/app/ActivityCompat.OnRequestPe - Network accessline 92
Once the user responds to the permission dialog on the phone, their decision is delivered to your app by invoking the [`onRequestPermissionsResult`](https://developer.android.com/reference/kotlin/androidx/core/app/ActivityCompat.OnRequestPe - Network accessline 93
delivered to your app by invoking the [`onRequestPermissionsResult`](https://developer.android.com/reference/kotlin/androidx/core/app/ActivityCompat.OnRequestPermissionsResultCallback#onRequestPermissionsResult(int,java.lang.String%5B%5D,in - Network accessline 93
delivered to your app by invoking the [`onRequestPermissionsResult`](https://developer.android.com/reference/kotlin/androidx/core/app/ActivityCompat.OnRequestPermissionsResultCallback#onRequestPermissionsResult(int,java.lang.String%5B%5D,in - Network accessline 134
- Use the `deviceId` overload with the [`onRequestPermissionsResult`](https://developer.android.com/reference/kotlin/androidx/core/app/ActivityCompat.OnRequestPermissionsResultCallback#onRequestPermissionsResult(int,java.lang.String%5B%5D,i - Network accessline 134
- Use the `deviceId` overload with the [`onRequestPermissionsResult`](https://developer.android.com/reference/kotlin/androidx/core/app/ActivityCompat.OnRequestPermissionsResultCallback#onRequestPermissionsResult(int,java.lang.String%5B%5D,i - Network accessline 141
camera for a first-person point of view---request the permissions using the device-specific [`Activity#requestPermissions(permissions, requestCode, deviceId)`](https://developer.android.com/reference/kotlin/android/app/Activity#requestpermi - Network accessline 141
camera for a first-person point of view---request the permissions using the device-specific [`Activity#requestPermissions(permissions, requestCode, deviceId)`](https://developer.android.com/reference/kotlin/android/app/Activity#requestpermi - Network accessline 143
deviceId)`](https://developer.android.com/reference/kotlin/android/app/Activity#requestpermissions_1) method: - Network accessline 143
deviceId)`](https://developer.android.com/reference/kotlin/android/app/Activity#requestpermissions_1) method: - Network accessline 160
- To target audio and display glasses, obtain the appropriate device ID from a projected context that you've created using [`createProjectedDeviceContext`](https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedContex - Network accessline 160
- To target audio and display glasses, obtain the appropriate device ID from a projected context that you've created using [`createProjectedDeviceContext`](https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedContex - Network accessline 164
Once the user responds to the permission dialog on the phone, their decision is delivered to your app by invoking the [`onRequestPermissionsResult`](https://developer.android.com/reference/kotlin/androidx/core/app/ActivityCompat.OnRequestPe - Network accessline 164
Once the user responds to the permission dialog on the phone, their decision is delivered to your app by invoking the [`onRequestPermissionsResult`](https://developer.android.com/reference/kotlin/androidx/core/app/ActivityCompat.OnRequestPe - Network accessline 165
delivered to your app by invoking the [`onRequestPermissionsResult`](https://developer.android.com/reference/kotlin/androidx/core/app/ActivityCompat.OnRequestPermissionsResultCallback#onRequestPermissionsResult(int,java.lang.String%5B%5D,in - Network accessline 165
delivered to your app by invoking the [`onRequestPermissionsResult`](https://developer.android.com/reference/kotlin/androidx/core/app/ActivityCompat.OnRequestPermissionsResultCallback#onRequestPermissionsResult(int,java.lang.String%5B%5D,in
xr/display-glasses-with-jetpack-compose-glimmer/references/button-samples-source.md
- Network accessline 11
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 11
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 12
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 12
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 13
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 13
* http://www.apache.org/licenses/LICENSE-2.0
xr/display-glasses-with-jetpack-compose-glimmer/references/button-source.md
- Network accessline 11
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 11
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 12
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 12
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 13
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 13
* http://www.apache.org/licenses/LICENSE-2.0
xr/display-glasses-with-jetpack-compose-glimmer/references/card-samples-source.md
- Network accessline 11
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 11
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 12
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 12
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 13
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 13
* http://www.apache.org/licenses/LICENSE-2.0
xr/display-glasses-with-jetpack-compose-glimmer/references/card-source.md
- Network accessline 11
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 11
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 12
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 12
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 13
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 13
* http://www.apache.org/licenses/LICENSE-2.0
xr/display-glasses-with-jetpack-compose-glimmer/references/deptheffect-source.md
- Network accessline 11
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 11
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 12
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 12
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 13
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 13
* http://www.apache.org/licenses/LICENSE-2.0
xr/display-glasses-with-jetpack-compose-glimmer/references/deptheffectlevels-source.md
- Network accessline 11
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 11
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 12
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 12
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 13
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 13
* http://www.apache.org/licenses/LICENSE-2.0
xr/display-glasses-with-jetpack-compose-glimmer/references/glimmersansflextypography-source.md
- Network accessline 11
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 11
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 12
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 12
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 13
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 13
* http://www.apache.org/licenses/LICENSE-2.0
xr/display-glasses-with-jetpack-compose-glimmer/references/glimmertheme-source.md
- Network accessline 11
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 11
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 12
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 12
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 13
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 13
* http://www.apache.org/licenses/LICENSE-2.0
xr/display-glasses-with-jetpack-compose-glimmer/references/icon-source.md
- Network accessline 11
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 11
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 12
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 12
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 13
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 13
* http://www.apache.org/licenses/LICENSE-2.0
xr/display-glasses-with-jetpack-compose-glimmer/references/iconbutton-source.md
- Network accessline 11
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 11
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 12
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 12
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 13
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 13
* http://www.apache.org/licenses/LICENSE-2.0
xr/display-glasses-with-jetpack-compose-glimmer/references/iconsizes-source.md
- Network accessline 11
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 11
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 12
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 12
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 13
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 13
* http://www.apache.org/licenses/LICENSE-2.0
xr/display-glasses-with-jetpack-compose-glimmer/references/listitem-source.md
- Network accessline 11
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 11
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 12
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 12
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 13
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 13
* http://www.apache.org/licenses/LICENSE-2.0
xr/display-glasses-with-jetpack-compose-glimmer/references/liststate-source.md
- Network accessline 11
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 11
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 12
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 12
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 13
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 13
* http://www.apache.org/licenses/LICENSE-2.0
xr/display-glasses-with-jetpack-compose-glimmer/references/material-hct-source.md
- Network accessline 10
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 10
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 11
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 11
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 12
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 12
* http://www.apache.org/licenses/LICENSE-2.0
xr/display-glasses-with-jetpack-compose-glimmer/references/projectedcontext-source.md
- Network accessline 11
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 11
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 12
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 12
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 13
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 13
* http://www.apache.org/licenses/LICENSE-2.0
xr/display-glasses-with-jetpack-compose-glimmer/references/stack-source.md
- Network accessline 11
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 11
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 12
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 12
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 13
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 13
* http://www.apache.org/licenses/LICENSE-2.0
xr/display-glasses-with-jetpack-compose-glimmer/references/stackitemscope-source.md
- Network accessline 11
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 11
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 12
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 12
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 13
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 13
* http://www.apache.org/licenses/LICENSE-2.0
xr/display-glasses-with-jetpack-compose-glimmer/references/stackstate-source.md
- Network accessline 11
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 11
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 12
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 12
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 13
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 13
* http://www.apache.org/licenses/LICENSE-2.0
xr/display-glasses-with-jetpack-compose-glimmer/references/surface-source.md
- Network accessline 11
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 11
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 12
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 12
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 13
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 13
* http://www.apache.org/licenses/LICENSE-2.0
xr/display-glasses-with-jetpack-compose-glimmer/references/titlechip-samples-source.md
- Network accessline 11
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 11
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 12
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 12
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 13
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 13
* http://www.apache.org/licenses/LICENSE-2.0
xr/display-glasses-with-jetpack-compose-glimmer/references/titlechip-source.md
- Network accessline 11
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 11
* You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 12
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 12
* * http://www.apache.org/licenses/LICENSE-2.0 * - Network accessline 13
* http://www.apache.org/licenses/LICENSE-2.0 - Network accessline 13
* http://www.apache.org/licenses/LICENSE-2.0
xr/projected-hardware/references/android/develop/xr/jetpack-xr-sdk/access-hardware-projected-context.md
- Network accessline 1
Applicable XR devices This guidance helps you build experiences for these types of XR devices. [Learn about XR device types →](https://developer.android.com/develop/xr/devices)   [Learn about XR device types →](https://developer.android.com/develop/xr/devices) - Network accessline 2
Display Glasses [](https://developer.android.com/develop/xr/devices#audio-display) [Learn about XR device types →](https://developer.android.com/develop/xr/devices) - Network accessline 6
After you've [requested and been granted the necessary permissions](https://developer.android.com/develop/xr/jetpack-xr-sdk/request-hardware-permissions), your app - Network accessline 6
After you've [requested and been granted the necessary permissions](https://developer.android.com/develop/xr/jetpack-xr-sdk/request-hardware-permissions), your app - Network accessline 7
can access the hardware on the audio glasses or display glasses. The key to accessing the glasses' hardware (instead of the phone's hardware), is to use a [projected context](https://developer.android.com/develop/xr/jetpack-xr-sdk/glasses/s - Network accessline 7
can access the hardware on the audio glasses or display glasses. The key to accessing the glasses' hardware (instead of the phone's hardware), is to use a [projected context](https://developer.android.com/develop/xr/jetpack-xr-sdk/glasses/s - Network accessline 9
[projected context](https://developer.android.com/develop/xr/jetpack-xr-sdk/glasses/support-different-types#projected-context). - Network accessline 9
[projected context](https://developer.android.com/develop/xr/jetpack-xr-sdk/glasses/support-different-types#projected-context). - Network accessline 16
If your app's code is running from within your [projected activity](https://developer.android.com/develop/xr/jetpack-xr-sdk/glasses/support-different-types#activity-lifecycle), its own - Network accessline 16
If your app's code is running from within your [projected activity](https://developer.android.com/develop/xr/jetpack-xr-sdk/glasses/support-different-types#activity-lifecycle), its own - Network accessline 17
activity context is already a [projected context](https://developer.android.com/develop/xr/jetpack-xr-sdk/glasses/support-different-types#projected-context). In this scenario, calls - Network accessline 17
activity context is already a [projected context](https://developer.android.com/develop/xr/jetpack-xr-sdk/glasses/support-different-types#projected-context). In this scenario, calls - Network accessline 23
activity or a service) needs to access the glasses' hardware, it must explicitly obtain a projected context. To do this, use the [`createProjectedDeviceContext`](https://developer.android.com/reference/kotlin/androidx/xr/projected/Projected - Network accessline 23
activity or a service) needs to access the glasses' hardware, it must explicitly obtain a projected context. To do this, use the [`createProjectedDeviceContext`](https://developer.android.com/reference/kotlin/androidx/xr/projected/Projected - Network accessline 25
[`createProjectedDeviceContext`](https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedContext#createProjectedDeviceContext(android.content.Context)) method: - Network accessline 25
[`createProjectedDeviceContext`](https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedContext#createProjectedDeviceContext(android.content.Context)) method: - Network accessline 63
Wrap the [`createProjectedDeviceContext`](https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedContext#createProjectedDeviceContext(android.content.Context)) call within the - Network accessline 63
Wrap the [`createProjectedDeviceContext`](https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedContext#createProjectedDeviceContext(android.content.Context)) call within the - Network accessline 64
[`ProjectedContext.isProjectedDeviceConnected`](https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedContext#isProjectedDeviceConnected(android.content.Context,kotlin.coroutines.CoroutineContext)). While this method - Network accessline 64
[`ProjectedContext.isProjectedDeviceConnected`](https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedContext#isProjectedDeviceConnected(android.content.Context,kotlin.coroutines.CoroutineContext)). While this method - Network accessline 71
The projected context is tied to the lifecycle of the connected device, so it is destroyed when the device disconnects. When the device disconnects, [`ProjectedContext.isProjectedDeviceConnected`](https://developer.android.com/reference/kot - Network accessline 71
The projected context is tied to the lifecycle of the connected device, so it is destroyed when the device disconnects. When the device disconnects, [`ProjectedContext.isProjectedDeviceConnected`](https://developer.android.com/reference/kot - Network accessline 72
destroyed when the device disconnects. When the device disconnects, [`ProjectedContext.isProjectedDeviceConnected`](https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedContext#isProjectedDeviceConnected(android.con - Network accessline 72
destroyed when the device disconnects. When the device disconnects, [`ProjectedContext.isProjectedDeviceConnected`](https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedContext#isProjectedDeviceConnected(android.con - Network accessline 73
[`ProjectedContext.isProjectedDeviceConnected`](https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedContext#isProjectedDeviceConnected(android.content.Context,kotlin.coroutines.CoroutineContext)) returns `false`. Y - Network accessline 73
[`ProjectedContext.isProjectedDeviceConnected`](https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedContext#isProjectedDeviceConnected(android.content.Context,kotlin.coroutines.CoroutineContext)) returns `false`. Y - Network accessline 80
When the glasses reconnect, your app can obtain another projected context instance using [`createProjectedDeviceContext`](https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedContext#createProjectedDeviceContext(and - Network accessline 80
When the glasses reconnect, your app can obtain another projected context instance using [`createProjectedDeviceContext`](https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedContext#createProjectedDeviceContext(and - Network accessline 81
instance using [`createProjectedDeviceContext`](https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedContext#createProjectedDeviceContext(android.content.Context)), and then re-initialize any - Network accessline 81
instance using [`createProjectedDeviceContext`](https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedContext#createProjectedDeviceContext(android.content.Context)), and then re-initialize any - Network accessline 95
To record audio using Bluetooth HFP, first request the required runtime permissions, and then record the audio using the [`AudioManager`](https://developer.android.com/reference/kotlin/android/media/AudioManager) API, as - Network accessline 95
To record audio using Bluetooth HFP, first request the required runtime permissions, and then record the audio using the [`AudioManager`](https://developer.android.com/reference/kotlin/android/media/AudioManager) API, as - Network accessline 96
permissions, and then record the audio using the [`AudioManager`](https://developer.android.com/reference/kotlin/android/media/AudioManager) API, as - Network accessline 96
permissions, and then record the audio using the [`AudioManager`](https://developer.android.com/reference/kotlin/android/media/AudioManager) API, as - Network accessline 101
As with any standard Bluetooth audio device, the [`RECORD_AUDIO`](https://developer.android.com/reference/kotlin/android/Manifest.permission#record_audio), - Network accessline 101
As with any standard Bluetooth audio device, the [`RECORD_AUDIO`](https://developer.android.com/reference/kotlin/android/Manifest.permission#record_audio), - Network accessline 102
[`BLUETOOTH_CONNECT`](https://developer.android.com/reference/kotlin/android/Manifest.permission#bluetooth_connect), and other related permissions are controlled by the - Network accessline 102
[`BLUETOOTH_CONNECT`](https://developer.android.com/reference/kotlin/android/Manifest.permission#bluetooth_connect), and other related permissions are controlled by the - Network accessline 107
1. [Declare following permissions](https://developer.android.com/develop/xr/jetpack-xr-sdk/request-hardware-permissions#declare-permissions) in your app's manifest file: - Network accessline 107
1. [Declare following permissions](https://developer.android.com/develop/xr/jetpack-xr-sdk/request-hardware-permissions#declare-permissions) in your app's manifest file: - Network accessline 109
- [`RECORD_AUDIO`](https://developer.android.com/reference/kotlin/android/Manifest.permission#record_audio) - Network accessline 109
- [`RECORD_AUDIO`](https://developer.android.com/reference/kotlin/android/Manifest.permission#record_audio) - Network accessline 110
- [`BLUETOOTH_CONNECT`](https://developer.android.com/reference/kotlin/android/Manifest.permission#bluetooth_connect) - Network accessline 110
- [`BLUETOOTH_CONNECT`](https://developer.android.com/reference/kotlin/android/Manifest.permission#bluetooth_connect) - Network accessline 111
- [`MODIFY_AUDIO_SETTINGS`](https://developer.android.com/reference/kotlin/android/Manifest.permission#modify_audio_settings) - Network accessline 111
- [`MODIFY_AUDIO_SETTINGS`](https://developer.android.com/reference/kotlin/android/Manifest.permission#modify_audio_settings) - Network accessline 113
runtime using the [standard Android permission flow](https://developer.android.com/training/permissions/requesting). - Network accessline 113
runtime using the [standard Android permission flow](https://developer.android.com/training/permissions/requesting). - Network accessline 117
After the user has granted your app the necessary runtime permissions, use the [`AudioManager`](https://developer.android.com/reference/kotlin/android/media/AudioManager) API to set the communication device to - Network accessline 117
After the user has granted your app the necessary runtime permissions, use the [`AudioManager`](https://developer.android.com/reference/kotlin/android/media/AudioManager) API to set the communication device to - Network accessline 118
[`AudioManager`](https://developer.android.com/reference/kotlin/android/media/AudioManager) API to set the communication device to - Network accessline 118
[`AudioManager`](https://developer.android.com/reference/kotlin/android/media/AudioManager) API to set the communication device to - Network accessline 119
[`TYPE_BLUETOOTH_SCO`](https://developer.android.com/reference/kotlin/android/media/AudioDeviceInfo#type_bluetooth_sco) to route the audio through Bluetooth HFP. This - Network accessline 119
[`TYPE_BLUETOOTH_SCO`](https://developer.android.com/reference/kotlin/android/media/AudioDeviceInfo#type_bluetooth_sco) to route the audio through Bluetooth HFP. This - Network accessline 144
> [!NOTE] > **Note:** To learn more about Bluetooth connectivity, refer to our [documentation](https://developer.android.com/develop/connectivity/bluetooth). - Network accessline 144
> [!NOTE] > **Note:** To learn more about Bluetooth connectivity, refer to our [documentation](https://developer.android.com/develop/connectivity/bluetooth). - Network accessline 145
> **Note:** To learn more about Bluetooth connectivity, refer to our [documentation](https://developer.android.com/develop/connectivity/bluetooth). - Network accessline 145
> **Note:** To learn more about Bluetooth connectivity, refer to our [documentation](https://developer.android.com/develop/connectivity/bluetooth). - Network accessline 149
To capture an image with the glasses' camera, set up and bind the CameraX's [`ImageCapture`](https://developer.android.com/reference/kotlin/androidx/camera/core/ImageCapture) [use case](https://developer.android.com/media/camera/camerax#eas - Network accessline 149
To capture an image with the glasses' camera, set up and bind the CameraX's [`ImageCapture`](https://developer.android.com/reference/kotlin/androidx/camera/core/ImageCapture) [use case](https://developer.android.com/media/camera/camerax#eas - Network accessline 150
[`ImageCapture`](https://developer.android.com/reference/kotlin/androidx/camera/core/ImageCapture) [use case](https://developer.android.com/media/camera/camerax#ease-of-use) to the glasses' camera using the correct - Network accessline 150
[`ImageCapture`](https://developer.android.com/reference/kotlin/androidx/camera/core/ImageCapture) [use case](https://developer.android.com/media/camera/camerax#ease-of-use) to the glasses' camera using the correct - Network accessline 236
- Obtains an instance of the [`ProcessCameraProvider`](https://developer.android.com/reference/kotlin/androidx/camera/lifecycle/ProcessCameraProvider) using the [**projected device context**](https://developer.android.com/develop/xr/jetpack - Network accessline 236
- Obtains an instance of the [`ProcessCameraProvider`](https://developer.android.com/reference/kotlin/androidx/camera/lifecycle/ProcessCameraProvider) using the [**projected device context**](https://developer.android.com/develop/xr/jetpack - Network accessline 237
- Within the projected context's scope, the glasses' primary, outward-pointing camera maps to the `DEFAULT_BACK_CAMERA` when selecting a camera. - A pre-binding check uses [`cameraProvider.hasCamera(cameraSelector)`](https://developer.andro - Network accessline 237
- Within the projected context's scope, the glasses' primary, outward-pointing camera maps to the `DEFAULT_BACK_CAMERA` when selecting a camera. - A pre-binding check uses [`cameraProvider.hasCamera(cameraSelector)`](https://developer.andro - Network accessline 238
- A pre-binding check uses [`cameraProvider.hasCamera(cameraSelector)`](https://developer.android.com/reference/kotlin/androidx/camera/lifecycle/ProcessCameraProvider#hasCamera(androidx.camera.core.CameraSelector)) to verify that the select - Network accessline 238
- A pre-binding check uses [`cameraProvider.hasCamera(cameraSelector)`](https://developer.android.com/reference/kotlin/androidx/camera/lifecycle/ProcessCameraProvider#hasCamera(androidx.camera.core.CameraSelector)) to verify that the select - Network accessline 239
- Uses **Camera2 Interop** with [`Camera2CameraInfo`](https://developer.android.com/reference/kotlin/androidx/camera/camera2/interop/Camera2CameraInfo) to read the underlying [`CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP`](https:/ - Network accessline 239
- Uses **Camera2 Interop** with [`Camera2CameraInfo`](https://developer.android.com/reference/kotlin/androidx/camera/camera2/interop/Camera2CameraInfo) to read the underlying [`CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP`](https:/ - Network accessline 240
- A custom [`ResolutionSelector`](https://developer.android.com/reference/kotlin/androidx/camera/core/resolutionselector/ResolutionSelector) is built to precisely control the output image resolution for [`ImageCapture`](https://developer.an - Network accessline 240
- A custom [`ResolutionSelector`](https://developer.android.com/reference/kotlin/androidx/camera/core/resolutionselector/ResolutionSelector) is built to precisely control the output image resolution for [`ImageCapture`](https://developer.an - Network accessline 241
- Creates an `ImageCapture` use case that is configured with a custom `ResolutionSelector`. - Binds the `ImageCapture` use case to the activity's lifecycle. This automatically manages the opening and closing of the camera based on the activ - Network accessline 241
- Creates an `ImageCapture` use case that is configured with a custom `ResolutionSelector`. - Binds the `ImageCapture` use case to the activity's lifecycle. This automatically manages the opening and closing of the camera based on the activ - Network accessline 243
- **Configuring for single-stream hardware:** The glasses camera pipeline is constrained to a single active stream at a time. When `ImageCapture` is bound alone, CameraX attaches an internal repeating stream (`MeteringRepeating`) for focus - Network accessline 243
- **Configuring for single-stream hardware:** The glasses camera pipeline is constrained to a single active stream at a time. When `ImageCapture` is bound alone, CameraX attaches an internal repeating stream (`MeteringRepeating`) for focus - Network accessline 245
After the glasses' camera is set up, you can capture an image with the CameraX's `ImageCapture` class. Refer to the CameraX's documentation to learn about using [`takePicture`](https://developer.android.com/media/camera/camerax/take-photo#t - Network accessline 245
After the glasses' camera is set up, you can capture an image with the CameraX's `ImageCapture` class. Refer to the CameraX's documentation to learn about using [`takePicture`](https://developer.android.com/media/camera/camerax/take-photo#t - Network accessline 247
[`takePicture`](https://developer.android.com/media/camera/camerax/take-photo#take_a_picture) to [capture an image](https://developer.android.com/media/camera/camerax/take-photo#take_a_picture). - Network accessline 247
[`takePicture`](https://developer.android.com/media/camera/camerax/take-photo#take_a_picture) to [capture an image](https://developer.android.com/media/camera/camerax/take-photo#take_a_picture). - Network accessline 251
To capture a video instead of an image with the glasses' camera, replace the `ImageCapture` components with the corresponding [`VideoCapture`](https://developer.android.com/reference/kotlin/androidx/camera/video/VideoCapture) components - Network accessline 251
To capture a video instead of an image with the glasses' camera, replace the `ImageCapture` components with the corresponding [`VideoCapture`](https://developer.android.com/reference/kotlin/androidx/camera/video/VideoCapture) components - Network accessline 252
`ImageCapture` components with the corresponding [`VideoCapture`](https://developer.android.com/reference/kotlin/androidx/camera/video/VideoCapture) components - Network accessline 252
`ImageCapture` components with the corresponding [`VideoCapture`](https://developer.android.com/reference/kotlin/androidx/camera/video/VideoCapture) components - Network accessline 256
file, and initiating the capture using the appropriate video recording method. For more information about the `VideoCapture` API and how to use it, see the [CameraX's video capture documentation](https://developer.android.com/media/camera/c - Network accessline 256
file, and initiating the capture using the appropriate video recording method. For more information about the `VideoCapture` API and how to use it, see the [CameraX's video capture documentation](https://developer.android.com/media/camera/c - Network accessline 258
[CameraX's video capture documentation](https://developer.android.com/media/camera/camerax/video-capture#using-videocapture-api). - Network accessline 258
[CameraX's video capture documentation](https://developer.android.com/media/camera/camerax/video-capture#using-videocapture-api). - Network accessline 274
An [projected activity](https://developer.android.com/develop/xr/jetpack-xr-sdk/glasses/support-different-types#activity-lifecycle) can also access the phone's hardware (such as the - Network accessline 274
An [projected activity](https://developer.android.com/develop/xr/jetpack-xr-sdk/glasses/support-different-types#activity-lifecycle) can also access the phone's hardware (such as the - Network accessline 275
camera or microphone) by using [`createHostDeviceContext(context)`](https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedContext#createHostDeviceContext(android.content.Context)) to get - Network accessline 275
camera or microphone) by using [`createHostDeviceContext(context)`](https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedContext#createHostDeviceContext(android.content.Context)) to get - Network accessline 299
- Use the [`Activity`](https://developer.android.com/reference/kotlin/android/app/Activity) context from the phone `Activity` or the [`ProjectedContext.createHostDeviceContext`](https://developer.android.com/reference/kotlin/androidx/xr/pro - Network accessline 299
- Use the [`Activity`](https://developer.android.com/reference/kotlin/android/app/Activity) context from the phone `Activity` or the [`ProjectedContext.createHostDeviceContext`](https://developer.android.com/reference/kotlin/androidx/xr/pro - Network accessline 300
- Don't use [`getApplicationContext`](https://developer.android.com/reference/kotlin/android/content/Context#getapplicationcontext) because the application context can incorrectly return the glasses' context if a projected activity was the - Network accessline 300
- Don't use [`getApplicationContext`](https://developer.android.com/reference/kotlin/android/content/Context#getapplicationcontext) because the application context can incorrectly return the glasses' context if a projected activity was the
xr/projected-hardware/references/android/develop/xr/jetpack-xr-sdk/glasses/check-availability.md
- Network accessline 4
Applicable XR devices This guidance helps you build experiences for these types of XR devices. [Learn about XR device types →](https://developer.android.com/develop/xr/devices)   [Learn about XR device types →](https://developer.android.com/develop/xr/devices) - Network accessline 5
Display Glasses [](https://developer.android.com/develop/xr/devices#audio-display) [Learn about XR device types →](https://developer.android.com/develop/xr/devices) - Network accessline 12
account for these kinds of changes in device availability, your app can use the XR Device Availability API, which consolidates device availability signals into the standard Android [`Lifecycle.State`](https://developer.android.com/reference - Network accessline 12
account for these kinds of changes in device availability, your app can use the XR Device Availability API, which consolidates device availability signals into the standard Android [`Lifecycle.State`](https://developer.android.com/reference - Network accessline 13
XR Device Availability API, which consolidates device availability signals into the standard Android [`Lifecycle.State`](https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle.State) values. Use this API to help manage - Network accessline 13
XR Device Availability API, which consolidates device availability signals into the standard Android [`Lifecycle.State`](https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle.State) values. Use this API to help manage - Network accessline 14
the standard Android [`Lifecycle.State`](https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle.State) values. Use this API to help manage - Network accessline 14
the standard Android [`Lifecycle.State`](https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle.State) values. Use this API to help manage - Network accessline 73
- **Check for a connection** : Before accessing the device lifecycle, call [`ProjectedContext.isProjectedDeviceConnected`](https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedContext#isProjectedDeviceConnected(andr - Network accessline 73
- **Check for a connection** : Before accessing the device lifecycle, call [`ProjectedContext.isProjectedDeviceConnected`](https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedContext#isProjectedDeviceConnected(andr - Network accessline 74
- **Obtain a `ProjectedContext`** : Only call [`ProjectedContext.createProjectedDeviceContext`](https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedContext#createProjectedDeviceContext(android.content.Context)) aft - Network accessline 74
- **Obtain a `ProjectedContext`** : Only call [`ProjectedContext.createProjectedDeviceContext`](https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedContext#createProjectedDeviceContext(android.content.Context)) aft
xr/projected-hardware/references/android/develop/xr/jetpack-xr-sdk/glasses/support-different-types.md
- Network accessline 4
Applicable XR devices This guidance helps you build experiences for these types of XR devices. [Learn about XR device types →](https://developer.android.com/develop/xr/devices)   [Learn about XR device types →](https://developer.android.com/develop/xr/devices) - Network accessline 5
Display Glasses [](https://developer.android.com/develop/xr/devices#audio-display) [Learn about XR device types →](https://developer.android.com/develop/xr/devices) - Network accessline 10
capabilities. For example, while all audio glasses and display glasses feature audio experiences through voice, only display glasses have a display where your app can show [UIs built with Jetpack Compose Glimmer](https://developer.android.c - Network accessline 10
capabilities. For example, while all audio glasses and display glasses feature audio experiences through voice, only display glasses have a display where your app can show [UIs built with Jetpack Compose Glimmer](https://developer.android.c - Network accessline 12
app can show [UIs built with Jetpack Compose Glimmer](https://developer.android.com/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer). - Network accessline 12
app can show [UIs built with Jetpack Compose Glimmer](https://developer.android.com/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer). - Network accessline 14
To create a seamless user experience across a range of devices, plan your [`Activity`](https://developer.android.com/reference/kotlin/android/app/Activity) for glasses to check for different device capabilities. This - Network accessline 14
To create a seamless user experience across a range of devices, plan your [`Activity`](https://developer.android.com/reference/kotlin/android/app/Activity) for glasses to check for different device capabilities. This - Network accessline 15
[`Activity`](https://developer.android.com/reference/kotlin/android/app/Activity) for glasses to check for different device capabilities. This - Network accessline 15
[`Activity`](https://developer.android.com/reference/kotlin/android/app/Activity) for glasses to check for different device capabilities. This - Network accessline 23
device (such as user's phone). Dedicated activities that you build for this purpose are *projected activities* . The lifecycle of projected activities is built off the [standard activity lifecycle](https://developer.android.com/guide/compon - Network accessline 23
device (such as user's phone). Dedicated activities that you build for this purpose are *projected activities* . The lifecycle of projected activities is built off the [standard activity lifecycle](https://developer.android.com/guide/compon - Network accessline 24
purpose are *projected activities* . The lifecycle of projected activities is built off the [standard activity lifecycle](https://developer.android.com/guide/components/activities/activity-lifecycle), but it also includes several key differ - Network accessline 24
purpose are *projected activities* . The lifecycle of projected activities is built off the [standard activity lifecycle](https://developer.android.com/guide/components/activities/activity-lifecycle), but it also includes several key differ - Network accessline 25
built off the [standard activity lifecycle](https://developer.android.com/guide/components/activities/activity-lifecycle), but it also includes several key - Network accessline 25
built off the [standard activity lifecycle](https://developer.android.com/guide/components/activities/activity-lifecycle), but it also includes several key - Network accessline 26
differences that support the capabilities of different types of audio glasses and display glasses.  **Figure 1**. The key events in the lifecyc - Network accessline 26
differences that support the capabilities of different types of audio glasses and display glasses.  **Figure 1**. The key events in the lifecyc - Network accessline 28
 **Figure 1**. The key events in the lifecycle of projected activities. - Network accessline 28
 **Figure 1**. The key events in the lifecycle of projected activities. - Network accessline 33
- [`onCreate()`](https://developer.android.com/reference/kotlin/android/app/Activity#onCreate(android.os.Bundle)) - Network accessline 33
- [`onCreate()`](https://developer.android.com/reference/kotlin/android/app/Activity#onCreate(android.os.Bundle)) - Network accessline 34
- Called when the projected activity is created. - Initialize your app's Jetpack Compose Glimmer UI and other components here. - [`onStart()`](https://developer.android.com/reference/kotlin/android/app/Activity#onStart()) - Network accessline 34
- Called when the projected activity is created. - Initialize your app's Jetpack Compose Glimmer UI and other components here. - [`onStart()`](https://developer.android.com/reference/kotlin/android/app/Activity#onStart()) - Network accessline 35
- Initialize your app's Jetpack Compose Glimmer UI and other components here. - [`onStart()`](https://developer.android.com/reference/kotlin/android/app/Activity#onStart()) - Called when the projected activity is starting and the user is - Network accessline 35
- Initialize your app's Jetpack Compose Glimmer UI and other components here. - [`onStart()`](https://developer.android.com/reference/kotlin/android/app/Activity#onStart()) - Called when the projected activity is starting and the user is - Network accessline 36
- [`onStart()`](https://developer.android.com/reference/kotlin/android/app/Activity#onStart()) - Network accessline 36
- [`onStart()`](https://developer.android.com/reference/kotlin/android/app/Activity#onStart()) - Network accessline 37
- Called when the projected activity is starting and the user is [aware](https://developer.android.com/develop/xr/jetpack-xr-sdk/glasses/support-different-types#awareness) of the app. - Network accessline 37
- Called when the projected activity is starting and the user is [aware](https://developer.android.com/develop/xr/jetpack-xr-sdk/glasses/support-different-types#awareness) of the app. - Network accessline 38
- [`onResume()`](https://developer.android.com/reference/kotlin/android/app/Activity#onResume()) - Network accessline 38
- [`onResume()`](https://developer.android.com/reference/kotlin/android/app/Activity#onResume()) - Network accessline 39
- Called when the projected activity regains focus. While the activity is in focus, it is interactable and can consume touchpad or button input. - Called when the glasses are put back on (donned), after they were previously taken off the - Network accessline 39
- Called when the projected activity regains focus. While the activity is in focus, it is interactable and can consume touchpad or button input. - Called when the glasses are put back on (donned), after they were previously taken off the - Network accessline 40
- Called when the glasses are put back on (donned), after they were previously taken off the head (doffed). - [`onPause()`](https://developer.android.com/reference/kotlin/android/app/Activity#onPause()) - Called when the projected activit - Network accessline 40
- Called when the glasses are put back on (donned), after they were previously taken off the head (doffed). - [`onPause()`](https://developer.android.com/reference/kotlin/android/app/Activity#onPause()) - Called when the projected activit - Network accessline 41
- [`onPause()`](https://developer.android.com/reference/kotlin/android/app/Activity#onPause()) - Network accessline 41
- [`onPause()`](https://developer.android.com/reference/kotlin/android/app/Activity#onPause()) - Network accessline 42
- Called when the projected activity loses focus, but the user is still [aware](https://developer.android.com/develop/xr/jetpack-xr-sdk/glasses/support-different-types#awareness) of your app. While the activity is out of focus, it isn't int - Network accessline 42
- Called when the projected activity loses focus, but the user is still [aware](https://developer.android.com/develop/xr/jetpack-xr-sdk/glasses/support-different-types#awareness) of your app. While the activity is out of focus, it isn't int - Network accessline 43
- [`onStop()`](https://developer.android.com/reference/kotlin/android/app/Activity#onStop()) - Network accessline 43
- [`onStop()`](https://developer.android.com/reference/kotlin/android/app/Activity#onStop()) - Network accessline 44
- Called when the system believes the user is no longer [aware](https://developer.android.com/develop/xr/jetpack-xr-sdk/glasses/support-different-types#awareness) of your app. - Network accessline 44
- Called when the system believes the user is no longer [aware](https://developer.android.com/develop/xr/jetpack-xr-sdk/glasses/support-different-types#awareness) of your app. - Network accessline 45
- Called when the glasses are removed from the head (doffed). - [`onDestroy()`](https://developer.android.com/reference/kotlin/android/app/Activity#onDestroy()) - Called when the projected activity is about to be destroyed. When this is c - Network accessline 45
- Called when the glasses are removed from the head (doffed). - [`onDestroy()`](https://developer.android.com/reference/kotlin/android/app/Activity#onDestroy()) - Called when the projected activity is about to be destroyed. When this is c - Network accessline 46
- [`onDestroy()`](https://developer.android.com/reference/kotlin/android/app/Activity#onDestroy()) - Network accessline 46
- [`onDestroy()`](https://developer.android.com/reference/kotlin/android/app/Activity#onDestroy()) - Network accessline 51
In a standard [`Activity`](https://developer.android.com/reference/kotlin/android/app/Activity), the lifecycle state changes when the device's - Network accessline 51
In a standard [`Activity`](https://developer.android.com/reference/kotlin/android/app/Activity), the lifecycle state changes when the device's - Network accessline 52
screen turns off, typically moving to [`onPause()`](https://developer.android.com/reference/kotlin/android/app/Activity#onPause()) or [`onStop()`](https://developer.android.com/reference/kotlin/android/app/Activity#onStop()). In - Network accessline 52
screen turns off, typically moving to [`onPause()`](https://developer.android.com/reference/kotlin/android/app/Activity#onPause()) or [`onStop()`](https://developer.android.com/reference/kotlin/android/app/Activity#onStop()). In - Network accessline 58
Other [activity state changes](https://developer.android.com/guide/components/activities/state-changes) triggered by different system and user events - Network accessline 58
Other [activity state changes](https://developer.android.com/guide/components/activities/state-changes) triggered by different system and user events - Network accessline 73
- The [`onStart()`](https://developer.android.com/reference/kotlin/android/app/Activity#onStart()) state for projected activities means the activity is active. - Network accessline 73
- The [`onStart()`](https://developer.android.com/reference/kotlin/android/app/Activity#onStart()) state for projected activities means the activity is active. - Network accessline 74
- The [`onResume()`](https://developer.android.com/reference/kotlin/android/app/Activity#onResume()) state means the activity is interactable and can receive touchpad input, or is receiving primary input dispatch. - Network accessline 74
- The [`onResume()`](https://developer.android.com/reference/kotlin/android/app/Activity#onResume()) state means the activity is interactable and can receive touchpad input, or is receiving primary input dispatch. - Network accessline 77
the foreground. If the system doesn't detect any signals of awareness for a short period of time, the system removes the activity from the foreground and eventually triggers [`onStop()`](https://developer.android.com/reference/kotlin/androi - Network accessline 77
the foreground. If the system doesn't detect any signals of awareness for a short period of time, the system removes the activity from the foreground and eventually triggers [`onStop()`](https://developer.android.com/reference/kotlin/androi - Network accessline 79
eventually triggers [`onStop()`](https://developer.android.com/reference/kotlin/android/app/Activity#onStop()). - Network accessline 79
eventually triggers [`onStop()`](https://developer.android.com/reference/kotlin/android/app/Activity#onStop()). - Network accessline 83
Audio glasses and display glasses are treated as a connected device that extends the capabilities of a user's phone. A *projected context* is a device-aware [`Context`](https://developer.android.com/reference/kotlin/android/content/Context) - Network accessline 83
Audio glasses and display glasses are treated as a connected device that extends the capabilities of a user's phone. A *projected context* is a device-aware [`Context`](https://developer.android.com/reference/kotlin/android/content/Context) - Network accessline 84
the capabilities of a user's phone. A *projected context* is a device-aware [`Context`](https://developer.android.com/reference/kotlin/android/content/Context) that lets apps interact with the hardware on a connected glasses device---such a - Network accessline 84
the capabilities of a user's phone. A *projected context* is a device-aware [`Context`](https://developer.android.com/reference/kotlin/android/content/Context) that lets apps interact with the hardware on a connected glasses device---such a - Network accessline 85
[`Context`](https://developer.android.com/reference/kotlin/android/content/Context) that lets apps interact with the hardware on a connected glasses - Network accessline 85
[`Context`](https://developer.android.com/reference/kotlin/android/content/Context) that lets apps interact with the hardware on a connected glasses - Network accessline 99
projected activity (such as a phone activity or a service) needs to access the glasses' hardware, it must explicitly obtain a projected context. To do this, use the [`createProjectedDeviceContext()`](https://developer.android.com/develo - Network accessline 99
projected activity (such as a phone activity or a service) needs to access the glasses' hardware, it must explicitly obtain a projected context. To do this, use the [`createProjectedDeviceContext()`](https://developer.android.com/develo - Network accessline 101
this, use the [`createProjectedDeviceContext()`](https://developer.android.com/develop/xr/jetpack-xr-sdk/access-hardware-projected-context#phone-activity-service) method. - Network accessline 101
this, use the [`createProjectedDeviceContext()`](https://developer.android.com/develop/xr/jetpack-xr-sdk/access-hardware-projected-context#phone-activity-service) method. - Network accessline 103
For more information, see [Use a projected context to access hardware on audio glasses and display glasses](https://developer.android.com/develop/xr/jetpack-xr-sdk/access-hardware-projected-context). - Network accessline 103
For more information, see [Use a projected context to access hardware on audio glasses and display glasses](https://developer.android.com/develop/xr/jetpack-xr-sdk/access-hardware-projected-context). - Network accessline 104
glasses and display glasses](https://developer.android.com/develop/xr/jetpack-xr-sdk/access-hardware-projected-context). - Network accessline 104
glasses and display glasses](https://developer.android.com/develop/xr/jetpack-xr-sdk/access-hardware-projected-context). - Network accessline 113
- [`CameraManager`](https://developer.android.com/reference/kotlin/android/hardware/camera2/CameraManager): Accesses the camera on the glasses. - Network accessline 113
- [`CameraManager`](https://developer.android.com/reference/kotlin/android/hardware/camera2/CameraManager): Accesses the camera on the glasses. - Network accessline 114
- [`SensorManager`](https://developer.android.com/reference/kotlin/android/hardware/SensorManager): Retrieves sensor data (for example, gyroscope or accelerometer data) from the glasses. - Network accessline 114
- [`SensorManager`](https://developer.android.com/reference/kotlin/android/hardware/SensorManager): Retrieves sensor data (for example, gyroscope or accelerometer data) from the glasses. - Network accessline 115
- [`AudioManager`](https://developer.android.com/reference/kotlin/android/media/AudioManager): Manages audio streams, volume, and routing on the glasses. - Network accessline 115
- [`AudioManager`](https://developer.android.com/reference/kotlin/android/media/AudioManager): Manages audio streams, volume, and routing on the glasses. - Network accessline 116
- [`AudioRecord`](https://developer.android.com/reference/kotlin/android/media/AudioRecord): Captures audio using the glasses' microphone. - Network accessline 116
- [`AudioRecord`](https://developer.android.com/reference/kotlin/android/media/AudioRecord): Captures audio using the glasses' microphone.
xr/projected-hardware/references/android/develop/xr/jetpack-xr-sdk/request-hardware-permissions.md
- Network accessline 4
Applicable XR devices This guidance helps you build experiences for these types of XR devices. [Learn about XR device types →](https://developer.android.com/develop/xr/devices)   [Learn about XR device types →](https://developer.android.com/develop/xr/devices) - Network accessline 5
Display Glasses [](https://developer.android.com/develop/xr/devices#audio-display) [Learn about XR device types →](https://developer.android.com/develop/xr/devices) - Network accessline 17
Before requesting permissions, you must [declare them in your app's manifest](https://developer.android.com/training/permissions/declaring) - Network accessline 17
Before requesting permissions, you must [declare them in your app's manifest](https://developer.android.com/training/permissions/declaring) - Network accessline 18
file using the [`<uses-permission>`](https://developer.android.com/guide/topics/manifest/uses-permission-element) element. This declaration remains the - Network accessline 18
file using the [`<uses-permission>`](https://developer.android.com/guide/topics/manifest/uses-permission-element) element. This declaration remains the - Network accessline 34
Review the [permission principles and workflows](https://developer.android.com/training/permissions/requesting#principles) to make sure you provide the - Network accessline 34
Review the [permission principles and workflows](https://developer.android.com/training/permissions/requesting#principles) to make sure you provide the - Network accessline 35
best experience for your users, like [checking whether the user has already granted the runtime permissions](https://developer.android.com/training/permissions/requesting#already-granted) your app requires and [whether your app should show - Network accessline 35
best experience for your users, like [checking whether the user has already granted the runtime permissions](https://developer.android.com/training/permissions/requesting#already-granted) your app requires and [whether your app should show - Network accessline 36
granted the runtime permissions](https://developer.android.com/training/permissions/requesting#already-granted) your app requires and [whether your app - Network accessline 36
granted the runtime permissions](https://developer.android.com/training/permissions/requesting#already-granted) your app requires and [whether your app - Network accessline 37
should show a rationale](https://developer.android.com/training/permissions/requesting#explain) to the user before requesting glasses-specific - Network accessline 37
should show a rationale](https://developer.android.com/training/permissions/requesting#explain) to the user before requesting glasses-specific - Network accessline 42
There are different scenarios you might encounter when requesting [dangerous runtime permissions](https://developer.android.com/guide/topics/permissions/requesting#normal-dangerous) on audio and display glasses: - Network accessline 42
There are different scenarios you might encounter when requesting [dangerous runtime permissions](https://developer.android.com/guide/topics/permissions/requesting#normal-dangerous) on audio and display glasses: - Network accessline 43
runtime permissions](https://developer.android.com/guide/topics/permissions/requesting#normal-dangerous) on audio and display glasses: - Network accessline 43
runtime permissions](https://developer.android.com/guide/topics/permissions/requesting#normal-dangerous) on audio and display glasses: - Network accessline 52
To request runtime permissions for audio or display glasses from a projected activity, use the [`ProjectedActivityCompat.requestPermissions`](https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedActivityCompat#reque - Network accessline 52
To request runtime permissions for audio or display glasses from a projected activity, use the [`ProjectedActivityCompat.requestPermissions`](https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedActivityCompat#reque - Network accessline 53
activity, use the [`ProjectedActivityCompat.requestPermissions`](https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedActivityCompat#requestPermissions(android.app.Activity,kotlin.Array,kotlin.Int)) method. - Network accessline 53
activity, use the [`ProjectedActivityCompat.requestPermissions`](https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedActivityCompat#requestPermissions(android.app.Activity,kotlin.Array,kotlin.Int)) method. - Network accessline 88
- Use `ProjectedActivityCompat.requestPermissions` instead of the standard [`ActivityCompat`](https://developer.android.com/reference/kotlin/androidx/core/app/ActivityCompat) method. This method explicitly targets the runtime permissions fo - Network accessline 88
- Use `ProjectedActivityCompat.requestPermissions` instead of the standard [`ActivityCompat`](https://developer.android.com/reference/kotlin/androidx/core/app/ActivityCompat) method. This method explicitly targets the runtime permissions fo - Network accessline 92
Once the user responds to the permission dialog on the phone, their decision is delivered to your app by invoking the [`onRequestPermissionsResult`](https://developer.android.com/reference/kotlin/androidx/core/app/ActivityCompat.OnRequestPe - Network accessline 92
Once the user responds to the permission dialog on the phone, their decision is delivered to your app by invoking the [`onRequestPermissionsResult`](https://developer.android.com/reference/kotlin/androidx/core/app/ActivityCompat.OnRequestPe - Network accessline 93
delivered to your app by invoking the [`onRequestPermissionsResult`](https://developer.android.com/reference/kotlin/androidx/core/app/ActivityCompat.OnRequestPermissionsResultCallback#onRequestPermissionsResult(int,java.lang.String%5B%5D,in - Network accessline 93
delivered to your app by invoking the [`onRequestPermissionsResult`](https://developer.android.com/reference/kotlin/androidx/core/app/ActivityCompat.OnRequestPermissionsResultCallback#onRequestPermissionsResult(int,java.lang.String%5B%5D,in - Network accessline 134
- Use the `deviceId` overload with the [`onRequestPermissionsResult`](https://developer.android.com/reference/kotlin/androidx/core/app/ActivityCompat.OnRequestPermissionsResultCallback#onRequestPermissionsResult(int,java.lang.String%5B%5D,i - Network accessline 134
- Use the `deviceId` overload with the [`onRequestPermissionsResult`](https://developer.android.com/reference/kotlin/androidx/core/app/ActivityCompat.OnRequestPermissionsResultCallback#onRequestPermissionsResult(int,java.lang.String%5B%5D,i - Network accessline 141
camera for a first-person point of view---request the permissions using the device-specific [`Activity#requestPermissions(permissions, requestCode, deviceId)`](https://developer.android.com/reference/kotlin/android/app/Activity#requestpermi - Network accessline 141
camera for a first-person point of view---request the permissions using the device-specific [`Activity#requestPermissions(permissions, requestCode, deviceId)`](https://developer.android.com/reference/kotlin/android/app/Activity#requestpermi - Network accessline 143
deviceId)`](https://developer.android.com/reference/kotlin/android/app/Activity#requestpermissions_1) method: - Network accessline 143
deviceId)`](https://developer.android.com/reference/kotlin/android/app/Activity#requestpermissions_1) method: - Network accessline 160
- To target audio and display glasses, obtain the appropriate device ID from a projected context that you've created using [`createProjectedDeviceContext`](https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedContex - Network accessline 160
- To target audio and display glasses, obtain the appropriate device ID from a projected context that you've created using [`createProjectedDeviceContext`](https://developer.android.com/reference/kotlin/androidx/xr/projected/ProjectedContex - Network accessline 164
Once the user responds to the permission dialog on the phone, their decision is delivered to your app by invoking the [`onRequestPermissionsResult`](https://developer.android.com/reference/kotlin/androidx/core/app/ActivityCompat.OnRequestPe - Network accessline 164
Once the user responds to the permission dialog on the phone, their decision is delivered to your app by invoking the [`onRequestPermissionsResult`](https://developer.android.com/reference/kotlin/androidx/core/app/ActivityCompat.OnRequestPe - Network accessline 165
delivered to your app by invoking the [`onRequestPermissionsResult`](https://developer.android.com/reference/kotlin/androidx/core/app/ActivityCompat.OnRequestPermissionsResultCallback#onRequestPermissionsResult(int,java.lang.String%5B%5D,in - Network accessline 165
delivered to your app by invoking the [`onRequestPermissionsResult`](https://developer.android.com/reference/kotlin/androidx/core/app/ActivityCompat.OnRequestPermissionsResultCallback#onRequestPermissionsResult(int,java.lang.String%5B%5D,in
How the signals fit together
Facts from a static read of the files at the pinned commit. They describe what the code does, not why.
Some files could not be read; the facts below still hold.
Signal confidence: 500 facts
- Network access in prose of documentationagp-9-upgrade/references/android/build/migrate-to-built-in-kotlin.md:8Low confidence
- Network access in prose of documentationagp-9-upgrade/references/android/build/migrate-to-built-in-kotlin.md:9Low confidence
- Network access in prose of documentationagp-9-upgrade/references/android/build/migrate-to-built-in-kotlin.md:14Low confidence
- Network access in prose of documentationagp-9-upgrade/references/android/build/migrate-to-built-in-kotlin.md:15Low confidence
- Network access in prose of documentationagp-9-upgrade/references/android/build/migrate-to-built-in-kotlin.md:16Low confidence
- Network access in prose of documentationagp-9-upgrade/references/android/build/migrate-to-built-in-kotlin.md:20Low confidence
- Network access in prose of documentationagp-9-upgrade/references/android/build/migrate-to-built-in-kotlin.md:21Low confidence
- Network access in prose of documentationagp-9-upgrade/references/android/build/migrate-to-built-in-kotlin.md:28Low confidence
- Network access in prose of documentationagp-9-upgrade/references/android/build/migrate-to-built-in-kotlin.md:29Low confidence
- Network access in prose of documentationagp-9-upgrade/references/android/build/migrate-to-built-in-kotlin.md:43Low confidence
- Network access in prose of documentationagp-9-upgrade/references/android/build/migrate-to-built-in-kotlin.md:44Low confidence
- Network access in prose of documentationagp-9-upgrade/references/android/build/migrate-to-built-in-kotlin.md:46Low confidence
- Network access in prose of documentationagp-9-upgrade/references/android/build/migrate-to-built-in-kotlin.md:47Low confidence
- Network access in prose of documentationagp-9-upgrade/references/android/build/migrate-to-built-in-kotlin.md:48Low confidence
- Network access in prose of documentationagp-9-upgrade/references/android/build/migrate-to-built-in-kotlin.md:49Low confidence
- Network access in prose of documentationagp-9-upgrade/references/android/build/migrate-to-built-in-kotlin.md:54Low confidence
- Network access in prose of documentationagp-9-upgrade/references/android/build/migrate-to-built-in-kotlin.md:56Low confidence
- Network access in prose of documentationagp-9-upgrade/references/android/build/migrate-to-built-in-kotlin.md:150Low confidence
- Network access in prose of documentationagp-9-upgrade/references/android/build/migrate-to-built-in-kotlin.md:152Low confidence
- Network access in prose of documentationagp-9-upgrade/references/android/build/migrate-to-built-in-kotlin.md:219Low confidence
- Network access in prose of documentationagp-9-upgrade/references/android/build/migrate-to-built-in-kotlin.md:220Low confidence
- Network access in prose of documentationagp-9-upgrade/references/android/build/migrate-to-built-in-kotlin.md:277Low confidence
- Network access in prose of documentationagp-9-upgrade/references/android/build/migrate-to-built-in-kotlin.md:278Low confidence
- Network access in prose of documentationagp-9-upgrade/references/android/build/migrate-to-built-in-kotlin.md:279Low confidence
- Network access in prose of documentationagp-9-upgrade/references/android/build/migrate-to-built-in-kotlin.md:325Low confidence
- Network access in prose of documentationagp-9-upgrade/references/android/build/migrate-to-built-in-kotlin.md:326Low confidence
- Network access in prose of documentationagp-9-upgrade/references/android/build/migrate-to-built-in-kotlin.md:327Low confidence
- Network access in prose of documentationagp-9-upgrade/references/android/build/migrate-to-built-in-kotlin.md:328Low confidence
- Network access in prose of documentationagp-9-upgrade/references/android/build/migrate-to-built-in-kotlin.md:350Low confidence
- Network access in prose of documentationagp-9-upgrade/references/android/build/migrate-to-built-in-kotlin.md:351Low confidence
- Network access in prose of documentationagp-9-upgrade/references/android/build/migrate-to-built-in-kotlin.md:362Low confidence
- Network access in prose of documentationagp-9-upgrade/references/android/build/migrate-to-built-in-kotlin.md:363Low confidence
- Network access in prose of documentationagp-9-upgrade/references/android/build/migrate-to-built-in-kotlin.md:365Low confidence
- Network access in prose of documentationagp-9-upgrade/references/android/build/migrate-to-built-in-kotlin.md:366Low confidence
- Network access in prose of documentationagp-9-upgrade/references/android/build/migrate-to-built-in-kotlin.md:383Low confidence
- Network access in prose of documentationagp-9-upgrade/references/android/build/releases/agp-9-0-0-release-notes.md:6Low confidence
- Network access in prose of documentationagp-9-upgrade/references/android/build/releases/agp-9-0-0-release-notes.md:7Low confidence
- Network access in prose of documentationagp-9-upgrade/references/android/build/releases/agp-9-0-0-release-notes.md:12Low confidence
- Network access in prose of documentationagp-9-upgrade/references/android/build/releases/agp-9-0-0-release-notes.md:13Low confidence
- Network access in prose of documentationagp-9-upgrade/references/android/build/releases/agp-9-0-0-release-notes.md:14Low confidence
- Network access in prose of documentationagp-9-upgrade/references/android/build/releases/agp-9-0-0-release-notes.md:15Low confidence
- Network access in prose of documentationagp-9-upgrade/references/android/build/releases/agp-9-0-0-release-notes.md:16Low confidence
- Network access in prose of documentationagp-9-upgrade/references/android/build/releases/agp-9-0-0-release-notes.md:24Low confidence
- Network access in prose of documentationagp-9-upgrade/references/android/build/releases/agp-9-0-0-release-notes.md:25Low confidence
- Network access in prose of documentationagp-9-upgrade/references/android/build/releases/agp-9-0-0-release-notes.md:26Low confidence
- Network access in prose of documentationagp-9-upgrade/references/android/build/releases/agp-9-0-0-release-notes.md:27Low confidence
- Network access in prose of documentationagp-9-upgrade/references/android/build/releases/agp-9-0-0-release-notes.md:28Low confidence
- Network access in prose of documentationagp-9-upgrade/references/android/build/releases/agp-9-0-0-release-notes.md:29Low confidence
- Network access in prose of documentationagp-9-upgrade/references/android/build/releases/agp-9-0-0-release-notes.md:30Low confidence
- Network access in prose of documentationagp-9-upgrade/references/android/build/releases/agp-9-0-0-release-notes.md:36Low confidence
and 450 more
Only the first 500 facts are listed.
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Native | Manifest .claude-plugin/marketplace.json | .claude/skills/<skill-name>/ |
| Codex | Compatible | Standard SKILL.md build-system/agp/agp-9-upgrade/SKILL.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md build-system/agp/agp-9-upgrade/SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md build-system/agp/agp-9-upgrade/SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md build-system/agp/agp-9-upgrade/SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md build-system/agp/agp-9-upgrade/SKILL.md | .opencode/skills/<skill-name>/ |
- Native The repository ships a manifest, folder or frontmatter field for this agent.
- Compatible A standard SKILL.md that this agent can read.
- Unknown No evidence either way.
Derived automatically from paths, manifests and frontmatter. Not tested on each agent.
Explore alternatives and comparisons
Add this badge to your README
It updates every night and links to this page.
[](https://hotskills.dev/skill/android-skills/)