Merge "Make default compose fling animations uses constant MotionDurationScale" into androidx-main
diff --git a/.github/actions/build-single-project/action.yml b/.github/actions/build-single-project/action.yml
index e8c5f1d..ab4317f1 100644
--- a/.github/actions/build-single-project/action.yml
+++ b/.github/actions/build-single-project/action.yml
@@ -28,11 +28,11 @@
         set -x
         TOOLS_JAR=$JAVA_HOME/lib/tools.jar
         echo "::set-output name=toolsJar::$TOOLS_JAR"
-    - name: "Setup JDK 11"
+    - name: "Setup JDK 17"
       id: setup-java
       uses: actions/setup-java@v1
       with:
-        java-version: "11"
+        java-version: "17"
     # TODO b/216535050: Implement task to install the exact AndroidX ndk
     # version in case it is not available.
     - name: "Install Cmake"
diff --git a/.github/workflows/integration_tests.yml b/.github/workflows/integration_tests.yml
index 3321dd7..db2e46a 100644
--- a/.github/workflows/integration_tests.yml
+++ b/.github/workflows/integration_tests.yml
@@ -10,10 +10,10 @@
     if: ${{ !github.event.repository.fork && github.event.workflow_run.conclusion == 'success' }}
     name: Run integration tests on FTL
     steps:
-      - name: Set up JDK 11
+      - name: Set up JDK 17
         uses: actions/setup-java@v2
         with:
-          java-version: '11'
+          java-version: '17'
           distribution: 'zulu'
       - name: "set output directory"
         run: echo "::set-output name=output-dir::$(readlink -f .)/outputs"
diff --git a/.github/workflows/presubmit.yml b/.github/workflows/presubmit.yml
index 40ba42a..1382b85 100644
--- a/.github/workflows/presubmit.yml
+++ b/.github/workflows/presubmit.yml
@@ -47,11 +47,11 @@
           # Enforces a `Test: <stanza>` in the pull request
           checks: '["(.*)?Test:(.*)?"]'
 
-      - name: "Setup JDK 11"
+      - name: "Setup JDK 17"
         id: setup-java
         uses: actions/setup-java@v1
         with:
-          java-version: "11"
+          java-version: "17"
 
       - name: "Set environment variables"
         shell: bash
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 6586eb4..c4328ab 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -37,9 +37,9 @@
 
 - Click on the `Actions` tab in the forked `androidx` repository, and enable the use of `Workflows`.
 
-- Download and install JDK 11, if you don’t have it already.
+- Download and install JDK 17, if you don’t have it already.
 
-  Note the installation directory. If you already have JDK 11 installed and set as default, you can 
+  Note the installation directory. If you already have JDK 17 installed and set as default, you can 
   find this with `which javac`.
 
 - Download and install [Android Studio](https://developer.android.com/studio) if you don't have it
@@ -60,7 +60,7 @@
 
   ```bash
   # You could also add this to your .{bash|zsh}rc file.
-  export JAVA_HOME="location of JDK 11 directory"
+  export JAVA_HOME="location of JDK 17 directory"
   export ANDROID_SDK_ROOT="location of the Android SDK directory"
   ```
 
diff --git a/activity/activity/lint-baseline.xml b/activity/activity/lint-baseline.xml
new file mode 100644
index 0000000..7ac7250c
--- /dev/null
+++ b/activity/activity/lint-baseline.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 33 (current min is 19): `android.provider.MediaStore#getPickImagesMaxLimit`"
+        errorLine1="                    require(maxItems &lt;= MediaStore.getPickImagesMaxLimit()) {"
+        errorLine2="                                                   ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/activity/result/contract/ActivityResultContracts.kt"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 33 (current min is 19): `android.provider.MediaStore#getPickImagesMaxLimit`"
+        errorLine1="                MediaStore.getPickImagesMaxLimit()"
+        errorLine2="                           ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/activity/result/contract/ActivityResultContracts.kt"/>
+    </issue>
+
+    <issue
+        id="ClassVerificationFailure"
+        message="This call references a method added in API level 33; however, the containing class androidx.activity.result.contract.ActivityResultContracts.PickMultipleVisualMedia is reachable from earlier API levels and will fail run-time class verification."
+        errorLine1="                    require(maxItems &lt;= MediaStore.getPickImagesMaxLimit()) {"
+        errorLine2="                                                   ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/activity/result/contract/ActivityResultContracts.kt"/>
+    </issue>
+
+    <issue
+        id="ClassVerificationFailure"
+        message="This call references a method added in API level 33; however, the containing class androidx.activity.result.contract.ActivityResultContracts.PickMultipleVisualMedia.Companion is reachable from earlier API levels and will fail run-time class verification."
+        errorLine1="                MediaStore.getPickImagesMaxLimit()"
+        errorLine2="                           ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/activity/result/contract/ActivityResultContracts.kt"/>
+    </issue>
+
+</issues>
diff --git a/activity/activity/src/main/java/androidx/activity/result/contract/ActivityResultContracts.kt b/activity/activity/src/main/java/androidx/activity/result/contract/ActivityResultContracts.kt
index a71a414..47ef4d1 100644
--- a/activity/activity/src/main/java/androidx/activity/result/contract/ActivityResultContracts.kt
+++ b/activity/activity/src/main/java/androidx/activity/result/contract/ActivityResultContracts.kt
@@ -34,7 +34,6 @@
 import androidx.activity.result.contract.ActivityResultContracts.StartIntentSenderForResult.Companion.ACTION_INTENT_SENDER_REQUEST
 import androidx.activity.result.contract.ActivityResultContracts.StartIntentSenderForResult.Companion.EXTRA_SEND_INTENT_EXCEPTION
 import androidx.annotation.CallSuper
-import androidx.annotation.DoNotInline
 import androidx.annotation.RequiresApi
 import androidx.core.content.ContextCompat
 
@@ -740,10 +739,8 @@
             return if (PickVisualMedia.isPhotoPickerAvailable()) {
                 Intent(MediaStore.ACTION_PICK_IMAGES).apply {
                     type = PickVisualMedia.getVisualMimeType(input.mediaType)
-                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
-                        require(maxItems <= Api33Impl.getPickImagesMaxLimit()) {
-                            "Max items must be less or equals MediaStore.getPickImagesMaxLimit()"
-                        }
+                    require(maxItems <= MediaStore.getPickImagesMaxLimit()) {
+                        "Max items must be less or equals MediaStore.getPickImagesMaxLimit()"
                     }
 
                     putExtra(MediaStore.EXTRA_PICK_IMAGES_MAX, maxItems)
@@ -786,21 +783,11 @@
              *
              * @see MediaStore.EXTRA_PICK_IMAGES_MAX
              */
-            internal fun getMaxItems() = if (PickVisualMedia.isPhotoPickerAvailable() &&
-                Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
-                Api33Impl.getPickImagesMaxLimit()
+            internal fun getMaxItems() = if (PickVisualMedia.isPhotoPickerAvailable()) {
+                MediaStore.getPickImagesMaxLimit()
             } else {
                 Integer.MAX_VALUE
             }
         }
     }
-
-    @RequiresApi(Build.VERSION_CODES.TIRAMISU)
-    internal object Api33Impl {
-
-        @DoNotInline
-        fun getPickImagesMaxLimit(): Int {
-            return MediaStore.getPickImagesMaxLimit()
-        }
-    }
 }
diff --git a/annotation/annotation/src/jvmMain/kotlin/androidx/annotation/UiThread.kt b/annotation/annotation/src/commonMain/kotlin/androidx/annotation/UiThread.kt
similarity index 100%
rename from annotation/annotation/src/jvmMain/kotlin/androidx/annotation/UiThread.kt
rename to annotation/annotation/src/commonMain/kotlin/androidx/annotation/UiThread.kt
diff --git a/annotation/annotation/src/commonMain/kotlin/androidx/annotation/MainThread.kt b/annotation/annotation/src/jvmMain/kotlin/androidx/annotation/MainThread.kt
similarity index 100%
rename from annotation/annotation/src/commonMain/kotlin/androidx/annotation/MainThread.kt
rename to annotation/annotation/src/jvmMain/kotlin/androidx/annotation/MainThread.kt
diff --git a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Metric.kt b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Metric.kt
index f2440bb..db769c5 100644
--- a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Metric.kt
+++ b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Metric.kt
@@ -316,7 +316,7 @@
  * will also be generated for power and energy, as well as a metric which is the sum of all
  * unselected metrics.
  *
- * @param `type` - Either [Type.Energy] or [Type.Power], which can be configured to show components
+ * @param type Either [Type.Energy] or [Type.Power], which can be configured to show components
  * of system power usage, or [Type.Battery], which will halt charging of device to measure power
  * drain.
  *
@@ -389,7 +389,7 @@
     /**
      * Configures the PowerMetric request.
      *
-     * @param `categories` - A map which is used to configure which metrics are displayed.  The key
+     * @param categories A map which is used to configure which metrics are displayed.  The key
      * is a `PowerCategory` enum, which configures the subsystem category that will be displayed.
      * The value is a `PowerCategoryDisplayLevel`, which configures whether each subsystem in the
      * category will have metrics displayed independently or summed for a total metric of the
diff --git a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/perfetto/PowerQuery.kt b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/perfetto/PowerQuery.kt
index 2b9bc20..089b5a1 100644
--- a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/perfetto/PowerQuery.kt
+++ b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/perfetto/PowerQuery.kt
@@ -54,11 +54,11 @@
     /**
      * The ComponentMeasurement object are built with attributes:
      *
-     * @param `name` - The name of the subsystem associated with the power usage in camel case.
+     * @param name The name of the subsystem associated with the power usage in camel case.
      *
-     * @param `energyUws` - The energy used during the trace, measured in uWs.
+     * @param energyUws The energy used during the trace, measured in uWs.
      *
-     * @param `powerUw` - The energy used divided by the elapsed time, measured in uW.
+     * @param powerUw The energy used divided by the elapsed time, measured in uW.
      */
     data class ComponentMeasurement(
         var name: String,
@@ -73,13 +73,13 @@
     /**
      * The CategoryMeasurement object are built with attributes:
      *
-     * @param `energyUws` - The sum total energy used during the trace of all components in the
+     * @param energyUws The sum total energy used during the trace of all components in the
      * category, measured in uWs.
      *
-     * @param `powerUw` - The sum total energy used divided by the elapsed time of all components in
+     * @param powerUw The sum total energy used divided by the elapsed time of all components in
      * the category, measured in uW.
      *
-     * @param `components` - A list of all ComponentMeasurements under the same `PowerCategory`.
+     * @param components A list of all ComponentMeasurements under the same `PowerCategory`.
      */
     data class CategoryMeasurement(
         var energyUws: Double,
@@ -152,9 +152,9 @@
     /**
      * Checks if category contains rail, or is uncategorized.
      *
-     * @param `category` - A [PowerCategory] which maps to a list of subsystems.
+     * @param category A [PowerCategory] which maps to a list of subsystems.
      *
-     * @param `railName` - The name of a rail.
+     * @param railName The name of a rail.
      *
      */
     private fun railInCategory(
@@ -170,10 +170,10 @@
     /**
      * Checks if rail name contains subsystem.
      *
-     * @param `subsystems` - A list of subsystems to check against rail name.  If the rail is a
+     * @param subsystems A list of subsystems to check against rail name.  If the rail is a
      * part of the subsystem, the subsystem will be a substring of the rail name.
      *
-     * @param `railName` - The name of a rail.
+     * @param railName The name of a rail.
      */
     private fun filterRails(
         subsystems: List<String>,
diff --git a/biometric/biometric/src/main/res/values-pt-rPT/strings.xml b/biometric/biometric/src/main/res/values-pt-rPT/strings.xml
index aea0278..6e1bedd 100644
--- a/biometric/biometric/src/main/res/values-pt-rPT/strings.xml
+++ b/biometric/biometric/src/main/res/values-pt-rPT/strings.xml
@@ -23,7 +23,7 @@
     <string name="fingerprint_error_no_fingerprints" msgid="7520712796891883488">"Nenhuma impressão digital registada."</string>
     <string name="fingerprint_error_hw_not_present" msgid="6306988885793029438">"Este dispositivo não tem sensor de impressões digitais."</string>
     <string name="fingerprint_error_user_canceled" msgid="7627716295344353987">"Operação de impressão digital cancelada pelo utilizador."</string>
-    <string name="fingerprint_error_lockout" msgid="7291787166416782245">"Demasiadas tentativas. Tente novamente mais tarde."</string>
+    <string name="fingerprint_error_lockout" msgid="7291787166416782245">"Demasiadas tentativas. Tente mais tarde."</string>
     <string name="default_error_msg" msgid="4776854077120974966">"Erro desconhecido."</string>
     <string name="generic_error_user_canceled" msgid="7309881387583143581">"Autenticação cancelada pelo utilizador."</string>
     <string name="confirm_device_credential_password" msgid="5912733858573823945">"Utilizar palavra-passe"</string>
diff --git a/buildSrc-tests/build.gradle b/buildSrc-tests/build.gradle
index 30c2a30..443b0ef 100644
--- a/buildSrc-tests/build.gradle
+++ b/buildSrc-tests/build.gradle
@@ -62,6 +62,11 @@
 
 SdkResourceGenerator.generateForHostTest(project)
 
+tasks.withType(Test).configureEach {
+    // https://github.com/gradle/gradle/issues/22317
+    it.jvmArgs = ["--add-opens=java.base/java.lang=ALL-UNNAMED"]
+}
+
 // Also do style checking of the buildSrc project from within this project
 // We run that from this project so that it doesn't block other projects while it runs
 def ktlintDir = file("../buildSrc")
diff --git a/buildSrc/dependencies.gradle b/buildSrc/dependencies.gradle
index 5a1aaae..23c0358 100644
--- a/buildSrc/dependencies.gradle
+++ b/buildSrc/dependencies.gradle
@@ -31,10 +31,4 @@
     exclude group: "androidx.core"
 }
 
-excludes.mlkit = {
-    exclude group: "androidx.fragment"
-    exclude group: "androidx.core"
-    exclude group: "androidx.exifinterface"
-}
-
 rootProject.ext["excludes"] = excludes
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt
index 089addc..b8e6838 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt
@@ -77,6 +77,7 @@
 import org.gradle.api.tasks.bundling.Zip
 import org.gradle.api.tasks.compile.JavaCompile
 import org.gradle.api.tasks.javadoc.Javadoc
+import org.gradle.api.tasks.testing.AbstractTestTask
 import org.gradle.api.tasks.testing.Test
 import org.gradle.api.tasks.testing.logging.TestExceptionFormat
 import org.gradle.api.tasks.testing.logging.TestLogEvent
@@ -90,11 +91,10 @@
 import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
 import org.jetbrains.kotlin.gradle.plugin.KotlinBasePluginWrapper
 import org.jetbrains.kotlin.gradle.plugin.KotlinMultiplatformPluginWrapper
-import org.jetbrains.kotlin.gradle.targets.native.KotlinNativeHostTestRun
+import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTargetWithSimulatorTests
 import org.jetbrains.kotlin.gradle.tasks.CInteropProcess
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 import org.jetbrains.kotlin.gradle.tasks.KotlinNativeCompile
-import org.jetbrains.kotlin.gradle.testing.KotlinTaskTestRun
 
 /**
  * A plugin which enables all of the Gradle customizations for AndroidX.
@@ -132,7 +132,12 @@
         project.tasks.withType(Copy::class.java).configureEach { it.configureForHermeticBuild() }
 
         // copy host side test results to DIST
-        project.tasks.withType(Test::class.java) { task -> configureTestTask(project, task) }
+        project.tasks.withType(AbstractTestTask::class.java) {
+                task -> configureTestTask(project, task)
+        }
+        project.tasks.withType(Test::class.java) {
+                task -> configureJvmTestTask(project, task)
+        }
 
         project.configureTaskTimeouts()
         project.configureMavenArtifactUpload(extension, componentFactory)
@@ -186,7 +191,26 @@
         duplicatesStrategy = DuplicatesStrategy.FAIL
     }
 
-    private fun configureTestTask(project: Project, task: Test) {
+    private fun configureJvmTestTask(project: Project, task: Test) {
+        // Robolectric 1.7 increased heap size requirements, see b/207169653.
+        task.maxHeapSize = "3g"
+
+        // For non-playground setup use robolectric offline
+        if (!ProjectLayoutType.isPlayground(project)) {
+            task.systemProperty("robolectric.offline", "true")
+            val robolectricDependencies =
+                File(
+                    project.getPrebuiltsRoot(),
+                    "androidx/external/org/robolectric/android-all-instrumented"
+                )
+            task.systemProperty(
+                "robolectric.dependency.dir",
+                robolectricDependencies.relativeTo(project.projectDir)
+            )
+        }
+    }
+
+    private fun configureTestTask(project: Project, task: AbstractTestTask) {
         val ignoreFailuresProperty = project.providers.gradleProperty(
             TEST_FAILURES_DO_NOT_FAIL_TEST_TASK
         )
@@ -196,9 +220,6 @@
         }
         task.inputs.property("ignoreFailures", ignoreFailures)
 
-        // Robolectric 1.7 increased heap size requirements, see b/207169653.
-        task.maxHeapSize = "3g"
-
         val xmlReportDestDir = project.getHostTestResultDirectory()
         val archiveName = "${project.path}:${task.name}.zip"
         if (project.isDisplayTestOutput()) {
@@ -257,19 +278,6 @@
                 task.finalizedBy(zipXmlTask)
             }
         }
-        // For non-playground setup, use robolectric offline
-        if (!ProjectLayoutType.isPlayground(project)) {
-            task.systemProperty("robolectric.offline", "true")
-            val robolectricDependencies =
-                File(
-                    project.getPrebuiltsRoot(),
-                    "androidx/external/org/robolectric/android-all-instrumented"
-                )
-            task.systemProperty(
-                "robolectric.dependency.dir",
-                robolectricDependencies.relativeTo(project.projectDir)
-            )
-        }
     }
 
     private fun configureWithKotlinPlugin(
@@ -319,7 +327,7 @@
             project.extensions.findByType<LibraryExtension>()?.apply {
                 configureAndroidLibraryWithMultiplatformPluginOptions()
             }
-            project.configureKmpBuildOnServer()
+            project.configureKmpTests()
         }
     }
 
@@ -575,6 +583,16 @@
 
         testOptions.animationsDisabled = true
         testOptions.unitTests.isReturnDefaultValues = true
+        testOptions.unitTests.all { task ->
+            // https://github.com/robolectric/robolectric/issues/7456
+            task.jvmArgs = listOf(
+                "--add-opens=java.base/java.lang=ALL-UNNAMED",
+                "--add-opens=java.base/java.util=ALL-UNNAMED",
+                "--add-opens=java.base/java.io=ALL-UNNAMED",
+            )
+            // Robolectric 1.7 increased heap size requirements, see b/207169653.
+            task.maxHeapSize = "3g"
+        }
         testOptions.configureVirtualDevices()
 
         // Include resources in Robolectric tests as a workaround for b/184641296 and
@@ -767,7 +785,7 @@
         extensions.extraProperties["kotlin.native.distribution.baseDownloadUrl"] = url
     }
 
-    private fun Project.configureKmpBuildOnServer() {
+    private fun Project.configureKmpTests() {
         val kmpExtension = checkNotNull(
             project.extensions.findByType<KotlinMultiplatformExtension>()
         ) {
@@ -776,17 +794,12 @@
             KotlinMultiplatformExtension.
             """.trimIndent()
         }
-        // Add all "configured" native tests to the buildOnServer task.
-        // Note that we don't check if platform is enabled in flags because it wouldn't be
-        // configured in the first place if the target is not enabled
         kmpExtension.testableTargets.all { kotlinTarget ->
-            kotlinTarget.testRuns.all { kotlinTestRun ->
-                // Need to check for both KotlinNativeHostTest (to ensure it runs on host, not on
-                // an emulator or simulator) and also KotlinTaskTestRun to ensure it has a task.
-                // Unfortunately, there is no parent interface/class that covers both cases.
-                if (kotlinTestRun is KotlinNativeHostTestRun &&
-                    kotlinTestRun is KotlinTaskTestRun<*, *>) {
-                    project.addToBuildOnServer(kotlinTestRun.executionTask)
+            if (kotlinTarget is KotlinNativeTargetWithSimulatorTests) {
+                kotlinTarget.binaries.all {
+                    // Use std allocator to avoid the following warning:
+                    // w: Mimalloc allocator isn't supported on target <target>. Used standard mode.
+                    it.freeCompilerArgs += "-Xallocator=std"
                 }
             }
         }
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/ErrorProneConfiguration.kt b/buildSrc/private/src/main/kotlin/androidx/build/ErrorProneConfiguration.kt
index c677c36..82e28aa 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/ErrorProneConfiguration.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/ErrorProneConfiguration.kt
@@ -117,6 +117,20 @@
 
 // Given an existing JavaCompile task, reconfigures the task to use the ErrorProne compiler plugin
 private fun JavaCompile.configureWithErrorProne() {
+    options.isFork = true
+    options.forkOptions.jvmArgs!!.addAll(listOf(
+        "--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED",
+        "--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED",
+        "--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED",
+        "--add-exports=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED",
+        "--add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED",
+        "--add-exports=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED",
+        "--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED",
+        "--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED",
+        "--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED",
+        "--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED"
+        )
+    )
     val compilerArgs = this.options.compilerArgs
     compilerArgs += listOf(
         // Tell error-prone that we are running it on android compatible libraries
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/SourceJarTaskHelper.kt b/buildSrc/private/src/main/kotlin/androidx/build/SourceJarTaskHelper.kt
index cca0bf6..8b2d56d 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/SourceJarTaskHelper.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/SourceJarTaskHelper.kt
@@ -93,14 +93,14 @@
             // not to have "main".  Eventually, we should stop expecting to grab sourceSets by name
             // (b/235828421)
             extension.sourceSets.findByName("main")?.let {
-                task.from(it.allSource.srcDirs)
+                task.from(it.allSource.sourceDirectories)
             }
         }
 
         extensions.findByType(KotlinMultiplatformExtension::class.java)?.let { extension ->
             for (sourceSetName in listOf("commonMain", "jvmMain")) {
                 extension.sourceSets.findByName(sourceSetName)?.let { sourceSet ->
-                    task.from(sourceSet.kotlin.srcDirs)
+                    task.from(sourceSet.kotlin.sourceDirectories)
                 }
             }
         }
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/dokka/kmpDocs/DokkaCombinedDocsTask.kt b/buildSrc/private/src/main/kotlin/androidx/build/dokka/kmpDocs/DokkaCombinedDocsTask.kt
index b41071ec..8c132fd 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/dokka/kmpDocs/DokkaCombinedDocsTask.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/dokka/kmpDocs/DokkaCombinedDocsTask.kt
@@ -79,6 +79,10 @@
     @get:OutputDirectory
     abstract val outputDir: DirectoryProperty
 
+    @get:InputFiles
+    @get:PathSensitive(PathSensitivity.RELATIVE)
+    abstract val additionalDocumentation: Property<FileCollection>
+
     @TaskAction
     fun buildCombinedDocs() {
         // create output dir before calling dokka to make sure relative links work.
@@ -114,7 +118,7 @@
             metadata to exportDir
         }
         val input = MergeDocsInputs(
-            moduleName = "AndroidX KMP EAP Docs",
+            moduleName = "Jetpack Multiplatform Preview Reference Documentation",
             outputDir = outputDir,
             pluginsClasspath = pluginsClasspath.get(),
             modules = partialModules.map { (module, docsDir) ->
@@ -127,7 +131,8 @@
             },
             pluginsConfiguration = listOf(
                 PluginsConfiguration.ANDROIDX_COPYRIGHT
-            )
+            ),
+            includes = additionalDocumentation.get().files
         )
         docsJsonOutput.get().asFile.let {
             it.parentFile.mkdirs()
@@ -177,6 +182,9 @@
                 it.dokkaCliClasspath.set(
                     DokkaUtils.createCliJarConfiguration(project)
                 )
+                it.additionalDocumentation.set(
+                    project.files("homepage.md")
+                )
             }
         }
     }
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/dokka/kmpDocs/DokkaInputModels.kt b/buildSrc/private/src/main/kotlin/androidx/build/dokka/kmpDocs/DokkaInputModels.kt
index 4926781..26ce114 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/dokka/kmpDocs/DokkaInputModels.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/dokka/kmpDocs/DokkaInputModels.kt
@@ -42,7 +42,8 @@
         val moduleName: String,
         val pluginsClasspath: FileCollection,
         val modules: List<Module>,
-        val pluginsConfiguration: List<PluginsConfiguration>
+        val pluginsConfiguration: List<PluginsConfiguration>,
+        val includes: Set<File>
     )
 
     class Module(
diff --git a/busytown/androidx-native-mac.sh b/busytown/androidx-native-mac.sh
index b88496d..df2abf1 100755
--- a/busytown/androidx-native-mac.sh
+++ b/busytown/androidx-native-mac.sh
@@ -7,7 +7,7 @@
 # disable GCP cache, these machines don't have credentials.
 export USE_ANDROIDX_REMOTE_BUILD_CACHE=false
 
-impl/build.sh buildOnServer :docs-kmp:zipCombinedKmpDocs --no-configuration-cache
+impl/build.sh buildOnServer allTests :docs-kmp:zipCombinedKmpDocs --no-configuration-cache -Pandroidx.displayTestOutput=false
 
 # run a separate createArchive task to prepare a repository
 # folder in DIST.
diff --git a/busytown/androidx_sandbox.sh b/busytown/androidx_sandbox.sh
index c8917b3..386eb9a 100755
--- a/busytown/androidx_sandbox.sh
+++ b/busytown/androidx_sandbox.sh
@@ -9,4 +9,4 @@
 export USE_ANDROIDX_REMOTE_BUILD_CACHE=false
 
 # run build in a sandbox
-../development/sandbox/run-without-network.sh impl/build.sh buildOnServer --no-configuration-cache --no-daemon
+../development/sandbox/run-without-network.sh impl/build.sh buildOnServer allTests --no-configuration-cache --no-daemon -Pandroidx.displayTestOutput=false
diff --git a/camera/camera-camera2-pipe-integration/src/androidTest/java/androidx/camera/camera2/pipe/integration/UseCaseSurfaceManagerDeviceTest.kt b/camera/camera-camera2-pipe-integration/src/androidTest/java/androidx/camera/camera2/pipe/integration/UseCaseSurfaceManagerDeviceTest.kt
index 38dc5a0..c0cb37f 100644
--- a/camera/camera-camera2-pipe-integration/src/androidTest/java/androidx/camera/camera2/pipe/integration/UseCaseSurfaceManagerDeviceTest.kt
+++ b/camera/camera-camera2-pipe-integration/src/androidTest/java/androidx/camera/camera2/pipe/integration/UseCaseSurfaceManagerDeviceTest.kt
@@ -106,14 +106,14 @@
     }
 
     @After
-    fun tearDown() {
-        if (this::testSessionParameters.isInitialized) {
+    fun tearDown() = runBlocking {
+        if (::testSessionParameters.isInitialized) {
             testSessionParameters.cleanup()
         }
-        if (this::testUseCaseCamera.isInitialized) {
-            testUseCaseCamera.close()
+        if (::testUseCaseCamera.isInitialized) {
+            testUseCaseCamera.close().join()
         }
-        if (this::cameraHolder.isInitialized) {
+        if (::cameraHolder.isInitialized) {
             CameraUtil.releaseCameraDevice(cameraHolder)
             cameraHolder.closedFuture.get(3, TimeUnit.SECONDS)
         }
diff --git a/camera/camera-camera2-pipe-integration/src/androidTest/java/androidx/camera/camera2/pipe/testing/TestUseCaseCamera.kt b/camera/camera-camera2-pipe-integration/src/androidTest/java/androidx/camera/camera2/pipe/testing/TestUseCaseCamera.kt
index 1e81e83..8f93913 100644
--- a/camera/camera-camera2-pipe-integration/src/androidTest/java/androidx/camera/camera2/pipe/testing/TestUseCaseCamera.kt
+++ b/camera/camera-camera2-pipe-integration/src/androidTest/java/androidx/camera/camera2/pipe/testing/TestUseCaseCamera.kt
@@ -45,6 +45,8 @@
 import androidx.camera.core.UseCase
 import androidx.camera.core.impl.Config
 import kotlinx.coroutines.Deferred
+import kotlinx.coroutines.Job
+import kotlinx.coroutines.launch
 
 /**
  * Open a [CameraGraph] for the desired [cameraId] and [useCases]
@@ -122,8 +124,10 @@
         throw NotImplementedError("Not implemented")
     }
 
-    override fun close() {
-        useCaseSurfaceManager.stopAsync()
-        useCaseCameraGraphConfig.graph.close()
+    override fun close(): Job {
+        return threads.scope.launch {
+            useCaseCameraGraphConfig.graph.close()
+            useCaseSurfaceManager.stopAsync().await()
+        }
     }
 }
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraInternalAdapter.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraInternalAdapter.kt
index 5a44bc0..3043278 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraInternalAdapter.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/adapter/CameraInternalAdapter.kt
@@ -21,20 +21,20 @@
 import androidx.annotation.RequiresApi
 import androidx.camera.camera2.pipe.CameraPipe
 import androidx.camera.camera2.pipe.core.Log.debug
-import androidx.camera.camera2.pipe.core.Log.warn
 import androidx.camera.camera2.pipe.integration.config.CameraConfig
 import androidx.camera.camera2.pipe.integration.config.CameraScope
 import androidx.camera.camera2.pipe.integration.impl.UseCaseManager
+import androidx.camera.camera2.pipe.integration.impl.UseCaseThreads
 import androidx.camera.core.UseCase
 import androidx.camera.core.impl.CameraControlInternal
 import androidx.camera.core.impl.CameraInfoInternal
 import androidx.camera.core.impl.CameraInternal
 import androidx.camera.core.impl.LiveDataObservable
 import androidx.camera.core.impl.Observable
-import androidx.camera.core.impl.utils.futures.Futures
 import com.google.common.util.concurrent.ListenableFuture
 import javax.inject.Inject
 import kotlinx.atomicfu.atomic
+import kotlinx.coroutines.launch
 
 internal val cameraAdapterIds = atomic(0)
 
@@ -46,7 +46,8 @@
     config: CameraConfig,
     private val useCaseManager: UseCaseManager,
     private val cameraInfo: CameraInfoInternal,
-    private val cameraController: CameraControlInternal
+    private val cameraController: CameraControlInternal,
+    private val threads: UseCaseThreads,
 ) : CameraInternal {
     private val cameraId = config.cameraId
     private val debugId = cameraAdapterIds.incrementAndGet()
@@ -69,9 +70,8 @@
     }
 
     override fun release(): ListenableFuture<Void> {
-        warn { "$this#release is not yet implemented." }
-        // TODO: Determine what the correct way to invoke release is.
-        return Futures.immediateFuture(null)
+        // TODO(b/185207100): Implement when CameraState is ready.
+        return threads.scope.launch { useCaseManager.close() }.asListenableFuture()
     }
 
     override fun getCameraInfoInternal(): CameraInfoInternal = cameraInfo
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/MeteringRepeating.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/MeteringRepeating.kt
index c72f4d0..0f8323fa 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/MeteringRepeating.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/MeteringRepeating.kt
@@ -25,6 +25,7 @@
 import android.os.Build
 import android.util.Size
 import android.view.Surface
+import androidx.annotation.GuardedBy
 import androidx.annotation.RequiresApi
 import androidx.camera.camera2.pipe.core.Log.error
 import androidx.camera.camera2.pipe.integration.adapter.CameraUseCaseAdapter
@@ -57,6 +58,10 @@
 ) : UseCase(config) {
 
     private val meteringSurfaceSize = cameraProperties.getMinimumPreviewSize()
+
+    private val deferrableSurfaceLock = Any()
+
+    @GuardedBy("deferrableSurfaceLock")
     private var deferrableSurface: DeferrableSurface? = null
 
     override fun getDefaultConfig(applyDefaultConfig: Boolean, factory: UseCaseConfigFactory) =
@@ -71,8 +76,10 @@
     }
 
     override fun onDetached() {
-        deferrableSurface?.close()
-        deferrableSurface = null
+        synchronized(deferrableSurfaceLock) {
+            deferrableSurface?.close()
+            deferrableSurface = null
+        }
     }
 
     /** Sets up the use case's session configuration, mainly its [DeferrableSurface]. */
@@ -83,21 +90,23 @@
     }
 
     private fun createPipeline(): SessionConfig.Builder {
-        val surfaceTexture = SurfaceTexture(0).apply {
-            setDefaultBufferSize(meteringSurfaceSize.width, meteringSurfaceSize.height)
-        }
-        val surface = Surface(surfaceTexture)
+        synchronized(deferrableSurfaceLock) {
+            val surfaceTexture = SurfaceTexture(0).apply {
+                setDefaultBufferSize(meteringSurfaceSize.width, meteringSurfaceSize.height)
+            }
+            val surface = Surface(surfaceTexture)
 
-        deferrableSurface?.close()
-        deferrableSurface = ImmediateSurface(surface, meteringSurfaceSize, imageFormat)
-        deferrableSurface!!.terminationFuture
-            .addListener(
-                {
-                    surface.release()
-                    surfaceTexture.release()
-                },
-                CameraXExecutors.directExecutor()
-            )
+            deferrableSurface?.close()
+            deferrableSurface = ImmediateSurface(surface, meteringSurfaceSize, imageFormat)
+            deferrableSurface!!.terminationFuture
+                .addListener(
+                    {
+                        surface.release()
+                        surfaceTexture.release()
+                    },
+                    CameraXExecutors.directExecutor()
+                )
+        }
 
         return SessionConfig.Builder
             .createFrom(MeteringRepeatingConfig())
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/UseCaseCamera.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/UseCaseCamera.kt
index dace968..561805c 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/UseCaseCamera.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/UseCaseCamera.kt
@@ -36,6 +36,8 @@
 import javax.inject.Inject
 import kotlinx.atomicfu.atomic
 import kotlinx.coroutines.Deferred
+import kotlinx.coroutines.Job
+import kotlinx.coroutines.launch
 
 internal val useCaseCameraIds = atomic(0)
 internal val defaultOptionPriority = Config.OptionPriority.OPTIONAL
@@ -68,7 +70,7 @@
     ): Deferred<Result3A>
 
     // Lifecycle
-    fun close()
+    fun close(): Job
 }
 
 /**
@@ -79,6 +81,7 @@
     private val useCaseGraphConfig: UseCaseGraphConfig,
     private val useCases: java.util.ArrayList<UseCase>,
     private val useCaseSurfaceManager: UseCaseSurfaceManager,
+    private val threads: UseCaseThreads,
     override val requestControl: UseCaseCameraRequestControl,
 ) : UseCaseCamera {
     private val debugId = useCaseCameraIds.incrementAndGet()
@@ -104,10 +107,12 @@
         debug { "Configured $this for $useCases" }
     }
 
-    override fun close() {
-        debug { "Closing $this" }
-        useCaseSurfaceManager.stopAsync()
-        useCaseGraphConfig.graph.close()
+    override fun close(): Job {
+        return threads.scope.launch {
+            debug { "Closing $this" }
+            useCaseGraphConfig.graph.close()
+            useCaseSurfaceManager.stopAsync().await()
+        }
     }
 
     override suspend fun startFocusAndMeteringAsync(
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/UseCaseManager.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/UseCaseManager.kt
index 956ff2f..b4af3e0 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/UseCaseManager.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/UseCaseManager.kt
@@ -16,6 +16,7 @@
 
 package androidx.camera.camera2.pipe.integration.impl
 
+import androidx.annotation.GuardedBy
 import androidx.annotation.RequiresApi
 import androidx.camera.camera2.pipe.core.Log
 import androidx.camera.camera2.pipe.integration.config.CameraConfig
@@ -25,6 +26,8 @@
 import androidx.camera.core.ImageCapture
 import androidx.camera.core.UseCase
 import javax.inject.Inject
+import kotlinx.coroutines.Job
+import kotlinx.coroutines.joinAll
 
 /**
  * This class keeps track of the currently attached and active [UseCase]'s for a specific camera.
@@ -59,9 +62,14 @@
     private val builder: UseCaseCameraComponent.Builder,
     @Suppress("PLATFORM_CLASS_MAPPED_TO_KOTLIN") // Java version required for Dagger
     private val controls: java.util.Set<UseCaseCameraControl>,
-    cameraProperties: CameraProperties,
+    cameraProperties: CameraProperties
 ) {
+    private val lock = Any()
+
+    @GuardedBy("lock")
     private val attachedUseCases = mutableSetOf<UseCase>()
+
+    @GuardedBy("lock")
     private val activeUseCases = mutableSetOf<UseCase>()
 
     private val meteringRepeating by lazy { MeteringRepeating.Builder(cameraProperties).build() }
@@ -71,12 +79,14 @@
     val camera: UseCaseCamera?
         get() = _activeComponent?.getUseCaseCamera()
 
+    private val closingCameraJobs = mutableListOf<Job>()
+
     /**
      * This attaches the specified [useCases] to the current set of attached use cases. When any
      * changes are identified (i.e., a new use case is added), the subsequent actions would trigger
      * a recreation of the current CameraGraph if there is one.
      */
-    fun attach(useCases: List<UseCase>) {
+    fun attach(useCases: List<UseCase>) = synchronized(lock) {
         if (useCases.isEmpty()) {
             Log.warn { "Attach [] from $this (Ignored)" }
             return
@@ -91,6 +101,10 @@
         }
 
         if (attachedUseCases.addAll(useCases)) {
+            if (shouldAddRepeatingUseCase(getRunningUseCases())) {
+                addRepeatingUseCase()
+                return
+            }
             refreshAttachedUseCases(attachedUseCases)
         }
     }
@@ -100,7 +114,7 @@
      * changes are identified (i.e., an existing use case is removed), the subsequent actions would
      * trigger a recreation of the current CameraGraph.
      */
-    fun detach(useCases: List<UseCase>) {
+    fun detach(useCases: List<UseCase>) = synchronized(lock) {
         if (useCases.isEmpty()) {
             Log.warn { "Detaching [] from $this (Ignored)" }
             return
@@ -122,6 +136,10 @@
         // TODO: We might only want to tear down when the number of attached use cases goes to
         //  zero. If a single UseCase is removed, we could deactivate it?
         if (attachedUseCases.removeAll(useCases)) {
+            if (shouldRemoveRepeatingUseCase(getRunningUseCases())) {
+                removeRepeatingUseCase()
+                return
+            }
             refreshAttachedUseCases(attachedUseCases)
         }
     }
@@ -132,7 +150,7 @@
      * latest set of "running" (attached and active) use cases, which will in turn trigger actions
      * for SessionConfig updates.
      */
-    fun activate(useCase: UseCase) {
+    fun activate(useCase: UseCase) = synchronized(lock) {
         if (activeUseCases.add(useCase)) {
             refreshRunningUseCases()
         }
@@ -144,26 +162,38 @@
      * latest set of "running" (attached and active) use cases, which will in turn trigger actions
      * for SessionConfig updates.
      */
-    fun deactivate(useCase: UseCase) {
+    fun deactivate(useCase: UseCase) = synchronized(lock) {
         if (activeUseCases.remove(useCase)) {
             refreshRunningUseCases()
         }
     }
 
-    fun update(useCase: UseCase) {
+    fun update(useCase: UseCase) = synchronized(lock) {
         if (attachedUseCases.contains(useCase)) {
             refreshRunningUseCases()
         }
     }
 
-    fun reset(useCase: UseCase) {
+    fun reset(useCase: UseCase) = synchronized(lock) {
         if (attachedUseCases.contains(useCase)) {
             refreshAttachedUseCases(attachedUseCases)
         }
     }
 
+    suspend fun close() {
+        val closingJobs = synchronized(lock) {
+            if (attachedUseCases.isNotEmpty()) {
+                detach(attachedUseCases.toList())
+            }
+            meteringRepeating.onDetached()
+            closingCameraJobs.toList()
+        }
+        closingJobs.joinAll()
+    }
+
     override fun toString(): String = "UseCaseManager<${cameraConfig.cameraId}>"
 
+    @GuardedBy("lock")
     private fun refreshRunningUseCases() {
         val runningUseCases = getRunningUseCases()
         when {
@@ -173,13 +203,19 @@
         }
     }
 
+    @GuardedBy("lock")
     private fun refreshAttachedUseCases(newUseCases: Set<UseCase>) {
         val useCases = newUseCases.toList()
 
         // Close prior camera graph
         camera.let {
             _activeComponent = null
-            it?.close()
+            it?.close()?.let { closingJob ->
+                closingCameraJobs.add(closingJob)
+                closingJob.invokeOnCompletion {
+                    closingCameraJobs.remove(closingJob)
+                }
+            }
         }
 
         // Update list of active useCases
@@ -200,21 +236,25 @@
         refreshRunningUseCases()
     }
 
+    @GuardedBy("lock")
     private fun getRunningUseCases(): Set<UseCase> {
         return attachedUseCases.intersect(activeUseCases)
     }
 
+    @GuardedBy("lock")
     private fun shouldAddRepeatingUseCase(runningUseCases: Set<UseCase>): Boolean {
         return !attachedUseCases.contains(meteringRepeating) &&
             runningUseCases.only { it is ImageCapture }
     }
 
+    @GuardedBy("lock")
     private fun addRepeatingUseCase() {
         meteringRepeating.setupSession()
         attach(listOf(meteringRepeating))
         activate(meteringRepeating)
     }
 
+    @GuardedBy("lock")
     private fun shouldRemoveRepeatingUseCase(runningUseCases: Set<UseCase>): Boolean {
         val onlyMeteringRepeatingEnabled = runningUseCases.only { it is MeteringRepeating }
         val meteringRepeatingAndNonImageCaptureEnabled =
@@ -223,6 +263,7 @@
         return onlyMeteringRepeatingEnabled || meteringRepeatingAndNonImageCaptureEnabled
     }
 
+    @GuardedBy("lock")
     private fun removeRepeatingUseCase() {
         deactivate(meteringRepeating)
         detach(listOf(meteringRepeating))
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/UseCaseSurfaceManager.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/UseCaseSurfaceManager.kt
index 2a66c56..7079791 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/UseCaseSurfaceManager.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/UseCaseSurfaceManager.kt
@@ -29,6 +29,8 @@
 import androidx.camera.camera2.pipe.integration.adapter.SessionConfigAdapter
 import androidx.camera.camera2.pipe.integration.config.UseCaseCameraScope
 import androidx.camera.core.impl.DeferrableSurface
+import androidx.camera.core.impl.DeferrableSurface.SurfaceClosedException
+import androidx.camera.core.impl.DeferrableSurfaces
 import androidx.camera.core.impl.utils.futures.Futures
 import androidx.concurrent.futures.await
 import javax.inject.Inject
@@ -77,40 +79,37 @@
         return threads.scope.async {
             check(sessionConfigAdapter.isSessionConfigValid())
 
-            val deferrableSurfaces = sessionConfigAdapter.deferrableSurfaces
-
-            val surfaces = getSurfaces(deferrableSurfaces, timeoutMillis)
-
-            if (!isActive) return@async
-
-            if (surfaces.isEmpty()) {
-                Log.error { "Surface list is empty" }
-                return@async
-            }
-
-            if (areSurfacesValid(surfaces)) {
-                synchronized(lock) {
-                    configuredSurfaceMap = deferrableSurfaces.associateBy { deferrableSurface ->
-                        surfaces[deferrableSurfaces.indexOf(deferrableSurface)]!!
-                    }
-                    setSurfaceListener()
+            sessionConfigAdapter.useDeferrableSurfaces { deferrableSurfaces ->
+                val surfaces = getSurfaces(deferrableSurfaces, timeoutMillis)
+                if (!isActive) return@async
+                if (surfaces.isEmpty()) {
+                    Log.error { "Surface list is empty" }
+                    return@async
                 }
+                if (surfaces.areValid()) {
+                    synchronized(lock) {
+                        configuredSurfaceMap = deferrableSurfaces.associateBy { deferrableSurface ->
+                            surfaces[deferrableSurfaces.indexOf(deferrableSurface)]!!
+                        }
+                        setSurfaceListener()
+                    }
 
-                surfaceToStreamMap.forEach {
-                    val stream = it.value
-                    val surface = surfaces[deferrableSurfaces.indexOf(it.key)]
-                    Log.debug { "Configured $surface for $stream" }
-                    graph.setSurface(
-                        stream = stream, surface = surface
+                    surfaceToStreamMap.forEach {
+                        val stream = it.value
+                        val surface = surfaces[deferrableSurfaces.indexOf(it.key)]
+                        Log.debug { "Configured $surface for $stream" }
+                        graph.setSurface(
+                            stream = stream, surface = surface
+                        )
+                    }
+                } else {
+                    // Only handle the first failed Surface since subsequent calls to
+                    // CameraInternal#onUseCaseReset() will handle the other failed Surfaces if
+                    // there are any.
+                    sessionConfigAdapter.reportSurfaceInvalid(
+                        deferrableSurfaces[surfaces.indexOf(null)]
                     )
                 }
-            } else {
-                // Only handle the first failed Surface since subsequent calls to
-                // CameraInternal#onUseCaseReset() will handle the other failed Surfaces if there
-                // are any.
-                sessionConfigAdapter.reportSurfaceInvalid(
-                    deferrableSurfaces[surfaces.indexOf(null)]
-                )
             }
         }.also { completeDeferred ->
             setupSurfaceDeferred = completeDeferred
@@ -184,9 +183,28 @@
         }.orEmpty()
     }
 
-    private fun areSurfacesValid(surfaces: List<Surface?>): Boolean {
+    /**
+     * Set use count at the [DeferrableSurface]s when the specified function [block] is using the
+     * [DeferrableSurface].
+     *
+     * If it cannot set the use count to the [DeferrableSurface], the [block] will not be called.
+     */
+    private inline fun SessionConfigAdapter.useDeferrableSurfaces(
+        block: (List<DeferrableSurface>) -> Unit
+    ) = try {
+        DeferrableSurfaces.incrementAll(deferrableSurfaces)
+        try {
+            block(deferrableSurfaces)
+        } finally {
+            DeferrableSurfaces.decrementAll(deferrableSurfaces)
+        }
+    } catch (e: SurfaceClosedException) {
+        reportSurfaceInvalid(e.deferrableSurface)
+    }
+
+    private fun List<Surface?>.areValid(): Boolean {
         // If a Surface in configuredSurfaces is null it means the
         // Surface was not retrieved from the ListenableFuture.
-        return surfaces.isNotEmpty() && !surfaces.contains(null)
+        return isNotEmpty() && !contains(null)
     }
 }
\ No newline at end of file
diff --git a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/UseCaseCameraTest.kt b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/UseCaseCameraTest.kt
index 76187df..6126329 100644
--- a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/UseCaseCameraTest.kt
+++ b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/UseCaseCameraTest.kt
@@ -105,6 +105,7 @@
                 useCaseThreads,
                 CameraPipe(CameraPipe.Config(ApplicationProvider.getApplicationContext()))
             ),
+            threads = useCaseThreads,
             requestControl = requestControl
         ).also {
             it.runningUseCases = setOf(fakeUseCase)
diff --git a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/testing/FakeUseCaseCamera.kt b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/testing/FakeUseCaseCamera.kt
index ecfd0e3..c4c65e5 100644
--- a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/testing/FakeUseCaseCamera.kt
+++ b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/testing/FakeUseCaseCamera.kt
@@ -32,6 +32,7 @@
 import androidx.camera.core.impl.SessionConfig
 import kotlinx.coroutines.CompletableDeferred
 import kotlinx.coroutines.Deferred
+import kotlinx.coroutines.Job
 
 class FakeUseCaseCameraComponentBuilder : UseCaseCameraComponent.Builder {
     private var config: UseCaseCameraConfig = UseCaseCameraConfig(emptyList())
@@ -134,6 +135,7 @@
         return CompletableDeferred(Result3A(status = Result3A.Status.OK))
     }
 
-    override fun close() {
+    override fun close(): Job {
+        return CompletableDeferred(Unit)
     }
 }
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/CaptureSessionState.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/CaptureSessionState.kt
index b0c5afe..f75ddc2 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/CaptureSessionState.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/CaptureSessionState.kt
@@ -288,10 +288,19 @@
             Debug.traceStop()
         }
 
+        var shouldFinalizeSession: Boolean
         synchronized(lock) {
+            // If the CameraDevice is never opened, the session will never be created. For cleanup
+            // reasons, make sure the session is finalized after shutdown if the cameraDevice was
+            // never set.
+            shouldFinalizeSession = _cameraDevice == null
             _cameraDevice = null
             state = State.CLOSED
         }
+
+        if (shouldFinalizeSession) {
+            finalizeSession()
+        }
     }
 
     private fun finalizeSession() {
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/VirtualCameraManager.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/VirtualCameraManager.kt
index 75348ad..353d30f 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/VirtualCameraManager.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/VirtualCameraManager.kt
@@ -184,7 +184,12 @@
             var realCamera = activeCameras.firstOrNull { it.cameraId == cameraIdToOpen }
             if (realCamera == null) {
                 realCamera = openCameraWithRetry(cameraIdToOpen, scope = this)
-                activeCameras.add(realCamera)
+                if (realCamera != null) {
+                    activeCameras.add(realCamera)
+                } else {
+                    request.virtualCamera.disconnect()
+                    requests.remove(request)
+                }
                 continue
             }
 
@@ -213,7 +218,7 @@
     private suspend fun openCameraWithRetry(
         cameraId: CameraId,
         scope: CoroutineScope
-    ): ActiveCamera {
+    ): ActiveCamera? {
         val metadata = cameraMetadata.getMetadata(cameraId)
         val requestTimestamp = Timestamps.now()
 
@@ -292,6 +297,7 @@
                 } else {
                     cameraState.close()
                 }
+                return null
             }
 
             // Listen to availability - if we are notified that the cameraId is available then
diff --git a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/compat/CaptureSessionStateTest.kt b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/compat/CaptureSessionStateTest.kt
new file mode 100644
index 0000000..f5d2779
--- /dev/null
+++ b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/compat/CaptureSessionStateTest.kt
@@ -0,0 +1,242 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.camera.camera2.pipe.compat
+
+import android.graphics.SurfaceTexture
+import android.os.Build
+import android.view.Surface
+import androidx.camera.camera2.pipe.CameraSurfaceManager
+import androidx.camera.camera2.pipe.CaptureSequenceProcessor
+import androidx.camera.camera2.pipe.Request
+import androidx.camera.camera2.pipe.StreamId
+import androidx.camera.camera2.pipe.graph.GraphListener
+import androidx.camera.camera2.pipe.testing.FakeCaptureSequence
+import androidx.camera.camera2.pipe.testing.FakeCaptureSequenceProcessor
+import androidx.camera.camera2.pipe.testing.FakeCaptureSessionFactory
+import androidx.camera.camera2.pipe.testing.RobolectricCameraPipeTestRunner
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.test.advanceUntilIdle
+import kotlinx.coroutines.test.runTest
+import org.junit.After
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.kotlin.eq
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.never
+import org.mockito.kotlin.times
+import org.mockito.kotlin.verify
+import org.mockito.kotlin.verifyNoInteractions
+import org.robolectric.annotation.Config
+
+@OptIn(ExperimentalCoroutinesApi::class)
+@RunWith(RobolectricCameraPipeTestRunner::class)
+@Config(minSdk = Build.VERSION_CODES.LOLLIPOP)
+class CaptureSessionStateTest {
+    private val fakeGraphListener: GraphListener = mock()
+    private val fakeSurfaceListener: CameraSurfaceManager.SurfaceListener = mock()
+    private val cameraSurfaceManager = CameraSurfaceManager().also {
+        it.addListener(fakeSurfaceListener)
+    }
+    private val fakeCaptureSequenceProcessor = FakeCaptureSequenceProcessor()
+    private val captureSequenceProcessorFactory = object : Camera2CaptureSequenceProcessorFactory {
+        override fun create(
+            session: CameraCaptureSessionWrapper,
+            surfaceMap: Map<StreamId, Surface>
+        ): CaptureSequenceProcessor<Request, FakeCaptureSequence> =
+            fakeCaptureSequenceProcessor
+    }
+
+    private val surface1: Surface = Surface(SurfaceTexture(1))
+    private val surface2: Surface = Surface(SurfaceTexture(2))
+    private val stream1: StreamId = StreamId(1)
+    private val stream2: StreamId = StreamId(2)
+    private val stream3Deferred: StreamId = StreamId(3)
+
+    private val captureSessionFactory = FakeCaptureSessionFactory(
+        requiredStreams = setOf(stream1, stream2),
+        deferrableStreams = setOf(stream3Deferred)
+    )
+
+    private val fakeCameraDevice: CameraDeviceWrapper = mock()
+    private val fakeCaptureSession: CameraCaptureSessionWrapper = mock()
+
+    @After
+    fun teardown() {
+        surface1.release()
+        surface2.release()
+    }
+
+    @Test
+    fun disconnectBeforeCameraDoesNotAcceptCamera() = runTest {
+        val state = CaptureSessionState(
+            fakeGraphListener,
+            captureSessionFactory,
+            captureSequenceProcessorFactory,
+            cameraSurfaceManager,
+            this
+        )
+        // When disconnect is called first
+        state.disconnect()
+
+        // Setting a camera device has no effect
+        state.cameraDevice = fakeCameraDevice
+
+        // And a captureSession is never created
+        advanceUntilIdle()
+        verifyNoInteractions(fakeGraphListener)
+    }
+
+    @Test
+    fun disconnectBeforeCameraCallsSurfaceListener() = runTest {
+        val state = CaptureSessionState(
+            fakeGraphListener,
+            captureSessionFactory,
+            captureSequenceProcessorFactory,
+            cameraSurfaceManager,
+            this
+        )
+
+        // When surfaces are configured
+        state.configureSurfaceMap(
+            mapOf(
+                stream1 to surface1,
+                stream2 to surface2
+            )
+        )
+        verify(fakeSurfaceListener, times(1)).onSurfaceActive(eq(surface1))
+        verify(fakeSurfaceListener, times(1)).onSurfaceActive(eq(surface2))
+
+        // And a device is never set
+        state.disconnect()
+
+        // Then fakeSurfaceListener marks surfaces as inactive.
+        advanceUntilIdle()
+        verifyNoInteractions(fakeGraphListener)
+        verify(fakeSurfaceListener, times(1)).onSurfaceInactive(eq(surface1))
+        verify(fakeSurfaceListener, times(1)).onSurfaceInactive(eq(surface2))
+    }
+
+    @Test
+    fun disconnectAfterCameraSetDoesNotCallOnSurfaceInactive() = runTest {
+        val state = CaptureSessionState(
+            fakeGraphListener,
+            captureSessionFactory,
+            captureSequenceProcessorFactory,
+            cameraSurfaceManager,
+            this
+        )
+
+        // When surfaces are configured
+        state.configureSurfaceMap(
+            mapOf(
+                stream1 to surface1,
+                stream2 to surface2
+            )
+        )
+        verify(fakeSurfaceListener, times(1)).onSurfaceActive(eq(surface1))
+        verify(fakeSurfaceListener, times(1)).onSurfaceActive(eq(surface2))
+
+        // And a device is set
+        state.cameraDevice = fakeCameraDevice
+        // And the state is then disconnected
+        state.disconnect()
+
+        // Then fakeSurfaceListener does not mark surfaces as inactive.
+        advanceUntilIdle()
+        verifyNoInteractions(fakeGraphListener)
+        verify(fakeSurfaceListener, never()).onSurfaceInactive(eq(surface1))
+        verify(fakeSurfaceListener, never()).onSurfaceInactive(eq(surface2))
+    }
+
+    @Test
+    fun onSessionFinalizeCallsSurfaceListener() = runTest {
+        val state = CaptureSessionState(
+            fakeGraphListener,
+            captureSessionFactory,
+            captureSequenceProcessorFactory,
+            cameraSurfaceManager,
+            this
+        )
+        // When surfaces are configured
+        state.configureSurfaceMap(
+            mapOf(
+                stream1 to surface1,
+                stream2 to surface2
+            )
+        )
+        // And session is finalized
+        state.onSessionFinalized()
+
+        // Then fakeSurfaceListener marks surfaces as inactive.
+        advanceUntilIdle()
+        verifyNoInteractions(fakeGraphListener)
+        verify(fakeSurfaceListener, times(1)).onSurfaceInactive(eq(surface1))
+        verify(fakeSurfaceListener, times(1)).onSurfaceInactive(eq(surface2))
+    }
+
+    @Test
+    fun onConfigureFailedCallsSurfaceListener() = runTest {
+        val state = CaptureSessionState(
+            fakeGraphListener,
+            captureSessionFactory,
+            captureSequenceProcessorFactory,
+            cameraSurfaceManager,
+            this
+        )
+        // When surfaces are configured
+        state.configureSurfaceMap(
+            mapOf(
+                stream1 to surface1,
+                stream2 to surface2
+            )
+        )
+        // And configuration fails
+        state.onConfigureFailed(fakeCaptureSession)
+
+        // Then fakeSurfaceListener marks surfaces as inactive.
+        advanceUntilIdle()
+        verifyNoInteractions(fakeGraphListener)
+        verify(fakeSurfaceListener, times(1)).onSurfaceInactive(eq(surface1))
+        verify(fakeSurfaceListener, times(1)).onSurfaceInactive(eq(surface2))
+    }
+
+    @Test
+    fun onClosedCallsSurfaceListener() = runTest {
+        val state = CaptureSessionState(
+            fakeGraphListener,
+            captureSessionFactory,
+            captureSequenceProcessorFactory,
+            cameraSurfaceManager,
+            this
+        )
+        // When surfaces are configured
+        state.configureSurfaceMap(
+            mapOf(
+                stream1 to surface1,
+                stream2 to surface2
+            )
+        )
+        // And the capture session is closed
+        state.onClosed(fakeCaptureSession)
+
+        // Then fakeSurfaceListener marks surfaces as inactive.
+        advanceUntilIdle()
+        verifyNoInteractions(fakeGraphListener)
+        verify(fakeSurfaceListener, times(1)).onSurfaceInactive(eq(surface1))
+        verify(fakeSurfaceListener, times(1)).onSurfaceInactive(eq(surface2))
+    }
+}
\ No newline at end of file
diff --git a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/testing/FakeCaptureSessionFactory.kt b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/testing/FakeCaptureSessionFactory.kt
new file mode 100644
index 0000000..f3da831
--- /dev/null
+++ b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/testing/FakeCaptureSessionFactory.kt
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.camera.camera2.pipe.testing
+
+import android.view.Surface
+import androidx.camera.camera2.pipe.StreamId
+import androidx.camera.camera2.pipe.compat.CameraDeviceWrapper
+import androidx.camera.camera2.pipe.compat.CaptureSessionFactory
+import androidx.camera.camera2.pipe.compat.CaptureSessionState
+import androidx.camera.camera2.pipe.compat.OutputConfigurationWrapper
+
+/**
+ * Fake [CaptureSessionFactory] for use in tests. This fake does NOT invoke callbacks.
+ */
+internal class FakeCaptureSessionFactory(
+    private val requiredStreams: Set<StreamId>,
+    private val deferrableStreams: Set<StreamId>
+) : CaptureSessionFactory {
+    private val allStreams = requiredStreams + deferrableStreams
+
+    override fun create(
+        cameraDevice: CameraDeviceWrapper,
+        surfaces: Map<StreamId, Surface>,
+        captureSessionState: CaptureSessionState
+    ): Map<StreamId, OutputConfigurationWrapper> {
+        check(allStreams.containsAll(surfaces.keys)) {
+            "Unexpected streams passed to create! Keys should be one of $allStreams but actual" +
+                " keys were ${surfaces.keys}."
+        }
+        check(surfaces.keys.containsAll(requiredStreams)) {
+            "Create was called without providing all required streams ($requiredStreams). Actual" +
+                " keys were ${surfaces.keys}."
+        }
+
+        val deferredStreams = allStreams - surfaces.keys
+        check(deferrableStreams.containsAll(deferredStreams))
+        return deferredStreams.associateWith { FakeOutputConfigurationWrapper() }
+    }
+}
\ No newline at end of file
diff --git a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/testing/FakeOutputConfigurationWrapper.kt b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/testing/FakeOutputConfigurationWrapper.kt
new file mode 100644
index 0000000..8e5a267
--- /dev/null
+++ b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/testing/FakeOutputConfigurationWrapper.kt
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.camera.camera2.pipe.testing
+
+import android.hardware.camera2.params.OutputConfiguration
+import android.view.Surface
+import androidx.camera.camera2.pipe.CameraId
+import androidx.camera.camera2.pipe.compat.OutputConfigurationWrapper
+
+/**
+ * Fake [OutputConfigurationWrapper] for use in tests.
+ */
+class FakeOutputConfigurationWrapper(
+    outputSurface: Surface? = null,
+    override val physicalCameraId: CameraId? = null,
+    override val surfaceSharing: Boolean = false,
+    override val maxSharedSurfaceCount: Int = 1,
+    override val surfaceGroupId: Int = -1
+) : OutputConfigurationWrapper {
+    private val _surfaces = mutableListOf<Surface>()
+
+    init {
+        if (outputSurface != null) {
+            _surfaces.add(outputSurface)
+        }
+    }
+
+    override val surface: Surface?
+        get() = _surfaces.firstOrNull()
+
+    override val surfaces: List<Surface>
+        get() = _surfaces.toList()
+
+    override fun addSurface(surface: Surface) {
+        _surfaces.add(surface)
+    }
+
+    override fun removeSurface(surface: Surface) {
+        _surfaces.remove(surface)
+    }
+
+    override fun unwrap(): OutputConfiguration? {
+        return null
+    }
+}
\ No newline at end of file
diff --git a/camera/camera-core/src/androidTest/java/androidx/camera/core/imagecapture/BitmapEffectDeviceTest.kt b/camera/camera-core/src/androidTest/java/androidx/camera/core/imagecapture/BitmapEffectDeviceTest.kt
new file mode 100644
index 0000000..be488a6
--- /dev/null
+++ b/camera/camera-core/src/androidTest/java/androidx/camera/core/imagecapture/BitmapEffectDeviceTest.kt
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.camera.core.imagecapture
+
+import android.graphics.Rect
+import androidx.camera.core.imagecapture.Utils.HEIGHT
+import androidx.camera.core.imagecapture.Utils.TIMESTAMP
+import androidx.camera.core.imagecapture.Utils.WIDTH
+import androidx.camera.core.processing.InternalImageProcessor
+import androidx.camera.core.processing.Packet
+import androidx.camera.testing.ExifUtil
+import androidx.camera.testing.TestImageUtil
+import androidx.camera.testing.TestImageUtil.getAverageDiff
+import androidx.camera.testing.fakes.GrayscaleImageEffect
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SdkSuppress
+import androidx.test.filters.SmallTest
+import com.google.common.truth.Truth.assertThat
+import org.junit.Test
+import org.junit.runner.RunWith
+
+/**
+ * Instrument test for [BitmapEffect].
+ */
+@SmallTest
+@RunWith(AndroidJUnit4::class)
+@SdkSuppress(minSdkVersion = 21)
+class BitmapEffectDeviceTest {
+
+    private val imageEffect = GrayscaleImageEffect()
+    private val operation = BitmapEffect(InternalImageProcessor(imageEffect))
+
+    @Test
+    fun applyEffect_imageIsPropagatedToAndFromProcessor() {
+        // Arrange.
+        val bitmap = TestImageUtil.createBitmap(WIDTH, HEIGHT)
+        val input = Packet.of(
+            bitmap,
+            ExifUtil.createExif(TestImageUtil.createJpegBytes(WIDTH, HEIGHT)),
+            Utils.CROP_RECT,
+            Utils.ROTATION_DEGREES,
+            Utils.SENSOR_TO_BUFFER,
+            Utils.CAMERA_CAPTURE_RESULT
+        )
+
+        val output = operation.apply(input)
+
+        // Assert: processor receives correct metadata
+        val inputImage = imageEffect.inputImage!!
+        assertThat(inputImage.cropRect).isEqualTo(Utils.CROP_RECT)
+        assertThat(inputImage.imageInfo.timestamp).isEqualTo(TIMESTAMP)
+        assertThat(inputImage.imageInfo.rotationDegrees).isEqualTo(Utils.ROTATION_DEGREES)
+        assertThat(inputImage.imageInfo.sensorToBufferTransformMatrix)
+            .isEqualTo(Utils.SENSOR_TO_BUFFER)
+        // Assert: processor receives the test image
+        val outputBitmap = (inputImage as RgbaImageProxy).createBitmap()
+        assertThat(TestImageUtil.getAverageDiff(outputBitmap, bitmap)).isEqualTo(0)
+        // Assert: the output is a grayscale version of the test image.
+        assertThat(getAverageDiff(output.data, Rect(0, 0, 320, 240), 0X555555)).isEqualTo(0)
+        assertThat(getAverageDiff(output.data, Rect(321, 0, WIDTH, 240), 0X555555)).isEqualTo(0)
+        assertThat(getAverageDiff(output.data, Rect(0, 240, 320, 480), 0X555555)).isEqualTo(0)
+        assertThat(getAverageDiff(output.data, Rect(321, 240, WIDTH, 480), 0XAAAAAA)).isEqualTo(0)
+    }
+}
\ No newline at end of file
diff --git a/camera/camera-core/src/androidTest/java/androidx/camera/core/imagecapture/Utils.kt b/camera/camera-core/src/androidTest/java/androidx/camera/core/imagecapture/Utils.kt
index a53ed60..ff0e75c 100644
--- a/camera/camera-core/src/androidTest/java/androidx/camera/core/imagecapture/Utils.kt
+++ b/camera/camera-core/src/androidTest/java/androidx/camera/core/imagecapture/Utils.kt
@@ -24,6 +24,7 @@
 import androidx.camera.core.ImageCapture
 import androidx.camera.testing.fakes.FakeCameraCaptureResult
 import java.io.File
+import java.sql.Types.TIMESTAMP
 import java.util.UUID
 
 @RequiresApi(Build.VERSION_CODES.LOLLIPOP)
@@ -32,6 +33,7 @@
     const val HEIGHT = 480
     const val ROTATION_DEGREES = 90
     const val FOCAL_LENGTH = 10F
+    internal const val TIMESTAMP = 9999L
     val SENSOR_TO_BUFFER = Matrix().also { it.setScale(-1F, 1F, 320F, 240F) }
     val SIZE = Size(WIDTH, HEIGHT)
     val CROP_RECT = Rect(0, 240, WIDTH, HEIGHT)
@@ -41,5 +43,7 @@
     internal val OUTPUT_FILE_OPTIONS = ImageCapture.OutputFileOptions.Builder(
         TEMP_FILE
     ).build()
-    internal val CAMERA_CAPTURE_RESULT = FakeCameraCaptureResult()
+    internal val CAMERA_CAPTURE_RESULT = FakeCameraCaptureResult().also {
+        it.timestamp = TIMESTAMP
+    }
 }
\ No newline at end of file
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/CameraEffect.java b/camera/camera-core/src/main/java/androidx/camera/core/CameraEffect.java
index ce8cf2b..8fad00e 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/CameraEffect.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/CameraEffect.java
@@ -15,7 +15,7 @@
  */
 package androidx.camera.core;
 
-import static androidx.core.util.Preconditions.checkState;
+import static androidx.core.util.Preconditions.checkArgument;
 
 import android.os.Build;
 
@@ -30,16 +30,16 @@
 import java.util.concurrent.Executor;
 
 /**
- * A CameraX post-processing effects.
+ * An effect for one or multiple camera outputs.
  *
- * <p>A {@link CameraEffect} class contains two types of information, the processor and the
+ * <p>A {@link CameraEffect} class contains 2 types of information, the processor and the
  * configuration.
  * <ul>
- * <li> The processor is an implementation of a CameraX interface e.g. {@link SurfaceProcessor}.
- * It consumes original camera frames from CameraX, applies the effect, and returns the processed
- * frames back to CameraX.
+ * <li> The processor is an implementation of either {@link SurfaceProcessor} or
+ * {@link ImageProcessor}. It consumes original camera frames from CameraX, applies the effect,
+ * and returns the processed frames back to CameraX.
  * <li> The configuration provides information on how the processor should be injected into the
- * CameraX pipeline. For example, the target {@link UseCase}s where the effect should be applied.
+ * pipeline. For example, the target {@link UseCase}s where the effect should be applied.
  * </ul>
  *
  * @hide
@@ -77,38 +77,55 @@
     @Targets
     private final int mTargets;
     @NonNull
-    private final Executor mProcessorExecutor;
+    private final Executor mExecutor;
     @Nullable
     private final SurfaceProcessor mSurfaceProcessor;
     @Nullable
     private final ImageProcessor mImageProcessor;
 
     /**
-     * @param targets           the target {@link UseCase} to which this effect should be applied.
-     * @param processorExecutor the {@link Executor} on which the processor will be invoked.
-     * @param imageProcessor    a {@link ImageProcessor} implementation.
+     * @param targets        the target {@link UseCase} to which this effect should be applied.
+     *                       Currently, {@link ImageProcessor} can only target
+     *                       {@link #IMAGE_CAPTURE}. Targeting other {@link UseCase} will throw
+     *                       {@link IllegalArgumentException}.
+     * @param executor       the {@link Executor} on which the {@param imageProcessor} will be
+     *                       invoked.
+     * @param imageProcessor a {@link ImageProcessor} implementation. Once the effect is active,
+     *                       CameraX will send frames to the {@link ImageProcessor} on the
+     *                       {@param executor}, and deliver the processed frames to the app.
      */
     protected CameraEffect(
             @Targets int targets,
-            @NonNull Executor processorExecutor,
+            @NonNull Executor executor,
             @NonNull ImageProcessor imageProcessor) {
+        checkArgument(targets == IMAGE_CAPTURE,
+                "Currently ImageProcessor can only target IMAGE_CAPTURE.");
         mTargets = targets;
-        mProcessorExecutor = processorExecutor;
+        mExecutor = executor;
         mSurfaceProcessor = null;
         mImageProcessor = imageProcessor;
     }
 
     /**
-     * @param targets           the target {@link UseCase} to which this effect should be applied.
-     * @param processorExecutor the {@link Executor} on which the processor will be invoked.
-     * @param surfaceProcessor  a {@link SurfaceProcessor} implementation.
+     * @param targets          the target {@link UseCase} to which this effect should be applied.
+     *                         Currently {@link SurfaceProcessor} can only target {@link #PREVIEW}.
+     *                         Targeting other {@link UseCase} will throw
+     *                         {@link IllegalArgumentException}.
+     * @param executor         the {@link Executor} on which the {@param imageProcessor} will be
+     *                         invoked.
+     * @param surfaceProcessor a {@link SurfaceProcessor} implementation. Once the effect is
+     *                         active, CameraX will send frames to the {@link SurfaceProcessor}
+     *                         on the {@param executor}, and deliver the processed frames to the
+     *                         app.
      */
     protected CameraEffect(
             @Targets int targets,
-            @NonNull Executor processorExecutor,
+            @NonNull Executor executor,
             @NonNull SurfaceProcessor surfaceProcessor) {
+        checkArgument(targets == PREVIEW,
+                "Currently SurfaceProcessor can only target PREVIEW.");
         mTargets = targets;
-        mProcessorExecutor = processorExecutor;
+        mExecutor = executor;
         mSurfaceProcessor = surfaceProcessor;
         mImageProcessor = null;
     }
@@ -122,19 +139,17 @@
     }
 
     /**
-     * Gets the {@link Executor} for calling processors.
+     * Gets the {@link Executor} associated with this effect.
      *
-     * <p>This method returns the value set via {@link Builder#setSurfaceProcessor}.
+     * <p>This method returns the value set in {@link CameraEffect}'s constructor.
      */
     @NonNull
-    public Executor getProcessorExecutor() {
-        return mProcessorExecutor;
+    public Executor getExecutor() {
+        return mExecutor;
     }
 
     /**
      * Gets the {@link SurfaceProcessor} associated with this effect.
-     *
-     * <p>This method returns the value set via {@link Builder#setSurfaceProcessor}.
      */
     @Nullable
     public SurfaceProcessor getSurfaceProcessor() {
@@ -143,95 +158,9 @@
 
     /**
      * Gets the {@link ImageProcessor} associated with this effect.
-     *
-     * <p>This method returns the value set via {@link Builder#setImageProcessor}.
      */
     @Nullable
     public ImageProcessor getImageProcessor() {
         return mImageProcessor;
     }
-
-    /**
-     * Builder class for {@link CameraEffect}.
-     */
-    public static class Builder {
-        @Targets
-        private final int mTargets;
-        @Nullable
-        private Executor mProcessorExecutor;
-        @Nullable
-        private SurfaceProcessor mSurfaceProcessor;
-        @Nullable
-        private ImageProcessor mImageProcessor;
-
-        /**
-         * @param targets the target {@link UseCase} of the Effect. e.g. if the
-         *                value is {@link #PREVIEW}, CameraX will apply the effect to
-         *                {@link Preview}.
-         */
-        public Builder(@Targets int targets) {
-            mTargets = targets;
-        }
-
-        /**
-         * Sets a {@link SurfaceProcessor} for the effect.
-         *
-         * <p>Once the effect is active, CameraX will send original camera frames to the
-         * {@link SurfaceProcessor} on the {@link Executor}, and deliver the processed output
-         * frames to the app.
-         *
-         * <p>Only one processor can be set via {@code #setImageProcessor()} /
-         * {@code #setSurfaceProcessor}, or the {@link #build()} call will throw error.
-         *
-         * @param executor  on which the {@link SurfaceProcessor} will be invoked.
-         * @param processor the post processor to be injected into CameraX pipeline.
-         */
-        @NonNull
-        public Builder setSurfaceProcessor(@NonNull Executor executor,
-                @NonNull SurfaceProcessor processor) {
-            mProcessorExecutor = executor;
-            mSurfaceProcessor = processor;
-            return this;
-        }
-
-        /**
-         * Sets a {@link ImageProcessor} for the effect.
-         *
-         * <p>Once the effect is active, CameraX will send original camera frames to the
-         * {@link ImageProcessor} on the {@link Executor}, and deliver the processed output
-         * frames to the app.
-         *
-         * <p>Only one processor can be set via {@code #setImageProcessor()} /
-         * {@code #setSurfaceProcessor}, or the {@link #build()} call will throw error.
-         *
-         * @param executor  on which the {@link ImageProcessor} will be invoked.
-         * @param processor the post processor to be injected into CameraX pipeline.
-         */
-        @NonNull
-        public Builder setImageProcessor(@NonNull Executor executor,
-                @NonNull ImageProcessor processor) {
-            mProcessorExecutor = executor;
-            mImageProcessor = processor;
-            return this;
-        }
-
-        /**
-         * Builds a {@link CameraEffect} instance.
-         *
-         * <p>CameraX supports a selected set of configuration/processor combinations. This method
-         * throws a {@link UnsupportedOperationException} if the current combination is not
-         * supported.
-         */
-        @NonNull
-        public CameraEffect build() {
-            checkState(mProcessorExecutor != null, "Must have a executor");
-            checkState(mImageProcessor != null ^ mSurfaceProcessor != null,
-                    "Must have one and only one processor");
-            if (mSurfaceProcessor != null) {
-                return new CameraEffect(mTargets, mProcessorExecutor, mSurfaceProcessor);
-            } else {
-                return new CameraEffect(mTargets, mProcessorExecutor, mImageProcessor);
-            }
-        }
-    }
 }
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/imagecapture/BitmapEffect.java b/camera/camera-core/src/main/java/androidx/camera/core/imagecapture/BitmapEffect.java
new file mode 100644
index 0000000..9106a49
--- /dev/null
+++ b/camera/camera-core/src/main/java/androidx/camera/core/imagecapture/BitmapEffect.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.camera.core.imagecapture;
+
+import static androidx.camera.core.internal.utils.ImageUtil.createBitmapFromPlane;
+
+import static java.util.Collections.singletonList;
+import static java.util.Objects.requireNonNull;
+
+import android.graphics.Bitmap;
+import android.graphics.PixelFormat;
+import android.os.Build;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
+import androidx.camera.core.ImageCaptureException;
+import androidx.camera.core.ImageProcessor;
+import androidx.camera.core.ImageProxy;
+import androidx.camera.core.processing.ImageProcessorRequest;
+import androidx.camera.core.processing.InternalImageProcessor;
+import androidx.camera.core.processing.Operation;
+import androidx.camera.core.processing.Packet;
+
+/**
+ * Applies effect to a {@link Bitmap} and gets a {@link Bitmap} in return.
+ *
+ * <p>The output packet will inherited the input packet's metadata, such as the crop rect. The
+ * metadata of the image returned from the effect is ignored.
+ */
+@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
+public class BitmapEffect implements Operation<Packet<Bitmap>, Packet<Bitmap>> {
+
+    private final InternalImageProcessor mProcessor;
+
+    BitmapEffect(InternalImageProcessor imageProcessor) {
+        mProcessor = imageProcessor;
+    }
+
+    @NonNull
+    @Override
+    public Packet<Bitmap> apply(@NonNull Packet<Bitmap> packet) throws ImageCaptureException {
+        // Process the frame.
+        ImageProcessor.Response response = mProcessor.safeProcess(new ImageProcessorRequest(
+                singletonList(new RgbaImageProxy(packet)),
+                PixelFormat.RGBA_8888));
+
+        // Restored it back to a Bitmap packet.
+        ImageProxy imageOut = response.getOutputImage();
+        Bitmap bitmapOut = createBitmapFromPlane(
+                requireNonNull(imageOut).getPlanes(),
+                imageOut.getWidth(),
+                imageOut.getHeight());
+        return Packet.of(
+                bitmapOut,
+                requireNonNull(packet.getExif()),
+                packet.getCropRect(),
+                packet.getRotationDegrees(),
+                packet.getSensorToBufferTransform(),
+                packet.getCameraCaptureResult()
+        );
+    }
+}
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/imagecapture/RgbaImageProxy.java b/camera/camera-core/src/main/java/androidx/camera/core/imagecapture/RgbaImageProxy.java
index ca9c8fc3..388a07b 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/imagecapture/RgbaImageProxy.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/imagecapture/RgbaImageProxy.java
@@ -92,7 +92,7 @@
      * <p>The {@link Bitmap} must be {@link Bitmap.Config#ARGB_8888}.
      */
     @VisibleForTesting
-    RgbaImageProxy(@NonNull Bitmap bitmap, @NonNull Rect cropRect, int rotationDegrees,
+    public RgbaImageProxy(@NonNull Bitmap bitmap, @NonNull Rect cropRect, int rotationDegrees,
             @NonNull Matrix sensorToBuffer, long timestamp) {
         this(createDirectByteBuffer(bitmap),
                 DEFAULT_RGBA_PIXEL_STRIDE,
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/internal/CameraUseCaseAdapter.java b/camera/camera-core/src/main/java/androidx/camera/core/internal/CameraUseCaseAdapter.java
index a2da5d9..c0f7ec02 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/internal/CameraUseCaseAdapter.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/internal/CameraUseCaseAdapter.java
@@ -458,7 +458,7 @@
                 }
                 preview.setProcessor(new SurfaceProcessorWithExecutor(
                         requireNonNull(effect.getSurfaceProcessor()),
-                        effect.getProcessorExecutor()));
+                        effect.getExecutor()));
             }
         }
     }
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/internal/utils/ImageUtil.java b/camera/camera-core/src/main/java/androidx/camera/core/internal/utils/ImageUtil.java
index 8efac4a..9c8101f 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/internal/utils/ImageUtil.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/internal/utils/ImageUtil.java
@@ -73,6 +73,8 @@
                 planes[0].getRowStride() == DEFAULT_RGBA_PIXEL_STRIDE * width,
                 "Expect rowStride=width*" + DEFAULT_RGBA_PIXEL_STRIDE);
         Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
+        // Rewind the buffer just to be safe.
+        planes[0].getBuffer().rewind();
         bitmap.copyPixelsFromBuffer(planes[0].getBuffer());
         return bitmap;
     }
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/processing/InternalImageProcessor.java b/camera/camera-core/src/main/java/androidx/camera/core/processing/InternalImageProcessor.java
index 7db28130..2a80cf1 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/processing/InternalImageProcessor.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/processing/InternalImageProcessor.java
@@ -50,7 +50,7 @@
 
     public InternalImageProcessor(@NonNull CameraEffect cameraEffect) {
         checkArgument(cameraEffect.getTargets() == CameraEffect.IMAGE_CAPTURE);
-        mExecutor = cameraEffect.getProcessorExecutor();
+        mExecutor = cameraEffect.getExecutor();
         mImageProcessor = requireNonNull(cameraEffect.getImageProcessor());
     }
 
diff --git a/camera/camera-core/src/test/java/androidx/camera/core/internal/CameraUseCaseAdapterTest.kt b/camera/camera-core/src/test/java/androidx/camera/core/internal/CameraUseCaseAdapterTest.kt
index 0444977..48dab10 100644
--- a/camera/camera-core/src/test/java/androidx/camera/core/internal/CameraUseCaseAdapterTest.kt
+++ b/camera/camera-core/src/test/java/androidx/camera/core/internal/CameraUseCaseAdapterTest.kt
@@ -23,7 +23,6 @@
 import android.util.Size
 import android.view.Surface
 import androidx.camera.core.CameraEffect
-import androidx.camera.core.CameraEffect.PREVIEW
 import androidx.camera.core.ImageCapture
 import androidx.camera.core.Preview
 import androidx.camera.core.UseCase
@@ -39,6 +38,7 @@
 import androidx.camera.core.processing.SurfaceProcessorWithExecutor
 import androidx.camera.testing.fakes.FakeCamera
 import androidx.camera.testing.fakes.FakeCameraDeviceSurfaceManager
+import androidx.camera.testing.fakes.FakePreviewEffect
 import androidx.camera.testing.fakes.FakeSurfaceProcessor
 import androidx.camera.testing.fakes.FakeUseCase
 import androidx.camera.testing.fakes.FakeUseCaseConfig
@@ -86,9 +86,7 @@
         fakeCameraSet.add(fakeCamera)
         surfaceProcessor = FakeSurfaceProcessor(mainThreadExecutor())
         executor = Executors.newSingleThreadExecutor()
-        effects = listOf(
-            CameraEffect.Builder(PREVIEW).setSurfaceProcessor(executor, surfaceProcessor).build()
-        )
+        effects = listOf(FakePreviewEffect(executor, surfaceProcessor))
     }
 
     @After
@@ -340,9 +338,12 @@
         assertThat(fakeUseCase.viewPortCropRect).isEqualTo(Rect(505, 0, 3527, 3022))
         assertThat(fakeUseCase.sensorToBufferTransformMatrix).isEqualTo(Matrix().apply {
             // From 4032x3024 to 4032x3022 with Crop Inside, no scale and Y shift 1.
-            setValues(floatArrayOf(/*scaleX=*/1f, 0f, /*translateX=*/0f,
-                0f, /*scaleY=*/1f, /*translateY=*/-1f,
-                0f, 0f, 1f))
+            setValues(
+                floatArrayOf(/*scaleX=*/1f, 0f, /*translateX=*/0f,
+                    0f, /*scaleY=*/1f, /*translateY=*/-1f,
+                    0f, 0f, 1f
+                )
+            )
         })
     }
 
diff --git a/camera/camera-core/src/test/java/androidx/camera/core/internal/utils/ImageUtilTest.java b/camera/camera-core/src/test/java/androidx/camera/core/internal/utils/ImageUtilTest.java
index cfc75f8..793d928 100644
--- a/camera/camera-core/src/test/java/androidx/camera/core/internal/utils/ImageUtilTest.java
+++ b/camera/camera-core/src/test/java/androidx/camera/core/internal/utils/ImageUtilTest.java
@@ -111,6 +111,8 @@
         // Arrange.
         Bitmap original = createBitmap(WIDTH, HEIGHT);
         ByteBuffer byteBuffer = createDirectByteBuffer(original);
+        // Move the position to test the case that the ByteBuffer needs rewinding.
+        byteBuffer.position(byteBuffer.capacity());
         ImageProxy.PlaneProxy planeProxy = new FakePlaneProxy(byteBuffer,
                 WIDTH * DEFAULT_RGBA_PIXEL_STRIDE, DEFAULT_RGBA_PIXEL_STRIDE);
         // Act.
diff --git a/camera/camera-core/src/test/java/androidx/camera/core/processing/InternalImageProcessorTest.kt b/camera/camera-core/src/test/java/androidx/camera/core/processing/InternalImageProcessorTest.kt
index 325bb1b..0c8f381 100644
--- a/camera/camera-core/src/test/java/androidx/camera/core/processing/InternalImageProcessorTest.kt
+++ b/camera/camera-core/src/test/java/androidx/camera/core/processing/InternalImageProcessorTest.kt
@@ -17,11 +17,11 @@
 package androidx.camera.core.processing
 
 import android.graphics.PixelFormat
-import androidx.camera.core.CameraEffect
 import androidx.camera.core.ImageCaptureException
 import androidx.camera.core.ImageProcessor
 import androidx.camera.core.ImageProcessor.Response
 import androidx.camera.core.impl.utils.executor.CameraXExecutors.highPriorityExecutor
+import androidx.camera.testing.fakes.FakeImageEffect
 import androidx.camera.testing.fakes.FakeImageInfo
 import androidx.camera.testing.fakes.FakeImageProxy
 import com.google.common.truth.Truth.assertThat
@@ -43,9 +43,7 @@
     fun processorThrowsError_errorIsPropagatedToCameraX() {
         // Arrange.
         val exception = RuntimeException()
-        val cameraEffect = CameraEffect.Builder(CameraEffect.IMAGE_CAPTURE)
-            .setImageProcessor(highPriorityExecutor()) { throw exception }
-            .build()
+        val cameraEffect = FakeImageEffect(highPriorityExecutor()) { throw exception }
         val imageProcessor = InternalImageProcessor(cameraEffect)
 
         // Act.
@@ -74,9 +72,7 @@
             Response { imageFromEffect }
         }
         val executor = newSingleThreadExecutor { Thread(it, THREAD_NAME) }
-        val cameraEffect = CameraEffect.Builder(CameraEffect.IMAGE_CAPTURE)
-            .setImageProcessor(executor, processor)
-            .build()
+        val cameraEffect = FakeImageEffect(executor, processor)
         val imageProcessor = InternalImageProcessor(cameraEffect)
 
         // Act.
diff --git a/camera/camera-effects-still-portrait/api/current.txt b/camera/camera-effects-still-portrait/api/current.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/camera/camera-effects-still-portrait/api/current.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/camera/camera-effects-still-portrait/api/public_plus_experimental_current.txt b/camera/camera-effects-still-portrait/api/public_plus_experimental_current.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/camera/camera-effects-still-portrait/api/public_plus_experimental_current.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/camera/camera-effects-still-portrait/api/res-current.txt b/camera/camera-effects-still-portrait/api/res-current.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/camera/camera-effects-still-portrait/api/res-current.txt
diff --git a/camera/camera-effects-still-portrait/api/restricted_current.txt b/camera/camera-effects-still-portrait/api/restricted_current.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/camera/camera-effects-still-portrait/api/restricted_current.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/camera/camera-effects-still-portrait/build.gradle b/camera/camera-effects-still-portrait/build.gradle
new file mode 100644
index 0000000..8925e65
--- /dev/null
+++ b/camera/camera-effects-still-portrait/build.gradle
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import androidx.build.Publish
+import androidx.build.RunApiTasks
+
+plugins {
+    id("AndroidXPlugin")
+    id("com.android.library")
+    id("kotlin-android")
+}
+dependencies {
+    api(project(":camera:camera-core"))
+}
+android {
+    defaultConfig {
+        multiDexEnabled = true
+    }
+    testOptions.unitTests.includeAndroidResources = true
+    namespace "androidx.camera.effects.stillportrait"
+}
+androidx {
+    name = "Jetpack Camera Portrait Still Effect Library"
+    publish = Publish.SNAPSHOT_ONLY
+    mavenGroup = LibraryGroups.CAMERA
+    inceptionYear = "2022"
+    runApiTasks = new RunApiTasks.Yes()
+    description = "A post-processing effect that works with CameraX Library, providing a portrait" +
+            " mode effect that applies to still image captures."
+}
diff --git a/camera/camera-effects-still-portrait/src/main/java/androidx/camera/effects/stillportrait/StillPortrait.java b/camera/camera-effects-still-portrait/src/main/java/androidx/camera/effects/stillportrait/StillPortrait.java
new file mode 100644
index 0000000..5341a46
--- /dev/null
+++ b/camera/camera-effects-still-portrait/src/main/java/androidx/camera/effects/stillportrait/StillPortrait.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.camera.effects.stillportrait;
+
+import android.os.Build;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
+import androidx.annotation.RestrictTo;
+import androidx.camera.core.CameraEffect;
+import androidx.camera.core.SurfaceProcessor;
+import androidx.camera.core.UseCase;
+
+import java.util.concurrent.Executor;
+
+/**
+ * Provides a portrait post-processing effect.
+ *
+ * @hide
+ */
+@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public class StillPortrait extends CameraEffect {
+
+    /**
+     * @param targets           the target {@link UseCase} to which this effect should be applied.
+     * @param processorExecutor the {@link Executor} on which the processor will be invoked.
+     * @param surfaceProcessor  a {@link SurfaceProcessor} implementation.
+     */
+    protected StillPortrait(int targets,
+            @NonNull Executor processorExecutor,
+            @NonNull SurfaceProcessor surfaceProcessor) {
+        super(targets, processorExecutor, surfaceProcessor);
+        // TODO: implement this.
+    }
+}
diff --git a/camera/camera-extensions/src/main/java/androidx/camera/extensions/ExtensionsManager.java b/camera/camera-extensions/src/main/java/androidx/camera/extensions/ExtensionsManager.java
index d73b017..3672fcd 100644
--- a/camera/camera-extensions/src/main/java/androidx/camera/extensions/ExtensionsManager.java
+++ b/camera/camera-extensions/src/main/java/androidx/camera/extensions/ExtensionsManager.java
@@ -57,8 +57,8 @@
  * Extensions</code> are {@link ExtensionMode#BOKEH}, {@link ExtensionMode#HDR},
  * {@link ExtensionMode#NIGHT}, {@link ExtensionMode#FACE_RETOUCH} and {@link ExtensionMode#AUTO}
  * . The known supported devices are listed in the
- * <a href="https://developer.android.com/training/camerax/devices">CameraX devices</a>
- * page.  Please see the ones that the <code>Extensions support</code> column is checked.
+ * <a href="https://developer.android.com/training/camera/supported-devices">Supported devices</a>
+ * page.
  *
  * <p><code>CameraX Extensions</code> are built on the top of <code>CameraX Core</code> libraries
  * . To enable an extension mode, an {@link ExtensionsManager} instance needs to be retrieved
diff --git a/camera/camera-lifecycle/src/androidTest/java/androidx/camera/lifecycle/ProcessCameraProviderTest.kt b/camera/camera-lifecycle/src/androidTest/java/androidx/camera/lifecycle/ProcessCameraProviderTest.kt
index 2f7d239..86b98da 100644
--- a/camera/camera-lifecycle/src/androidTest/java/androidx/camera/lifecycle/ProcessCameraProviderTest.kt
+++ b/camera/camera-lifecycle/src/androidTest/java/androidx/camera/lifecycle/ProcessCameraProviderTest.kt
@@ -22,8 +22,6 @@
 import android.content.pm.PackageManager
 import androidx.annotation.OptIn
 import androidx.annotation.RequiresApi
-import androidx.camera.core.CameraEffect
-import androidx.camera.core.CameraEffect.PREVIEW
 import androidx.camera.core.CameraSelector
 import androidx.camera.core.CameraXConfig
 import androidx.camera.core.Preview
@@ -37,6 +35,7 @@
 import androidx.camera.testing.fakes.FakeCameraFactory
 import androidx.camera.testing.fakes.FakeCameraInfoInternal
 import androidx.camera.testing.fakes.FakeLifecycleOwner
+import androidx.camera.testing.fakes.FakePreviewEffect
 import androidx.camera.testing.fakes.FakeSurfaceProcessor
 import androidx.camera.testing.fakes.FakeUseCaseConfigFactory
 import androidx.concurrent.futures.await
@@ -80,8 +79,7 @@
         // Arrange.
         ProcessCameraProvider.configureInstance(FakeAppConfig.create())
         val surfaceProcessor = FakeSurfaceProcessor(mainThreadExecutor())
-        val effect = CameraEffect.Builder(PREVIEW)
-            .setSurfaceProcessor(mainThreadExecutor(), surfaceProcessor).build()
+        val effect = FakePreviewEffect(mainThreadExecutor(), surfaceProcessor)
         val preview = Preview.Builder().setSessionOptionUnpacker { _, _ -> }.build()
         val useCaseGroup = UseCaseGroup.Builder().addUseCase(preview).addEffect(effect).build()
 
diff --git a/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeImageEffect.java b/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeImageEffect.java
new file mode 100644
index 0000000..c212214
--- /dev/null
+++ b/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakeImageEffect.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.camera.testing.fakes;
+
+import android.os.Build;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
+import androidx.camera.core.CameraEffect;
+import androidx.camera.core.ImageProcessor;
+
+import java.util.concurrent.Executor;
+
+/**
+ * A fake {@link CameraEffect} with {@link ImageProcessor}
+ */
+@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
+public class FakeImageEffect extends CameraEffect {
+    public FakeImageEffect(
+            @NonNull Executor processorExecutor,
+            @NonNull ImageProcessor imageProcessor) {
+        super(IMAGE_CAPTURE, processorExecutor, imageProcessor);
+    }
+}
diff --git a/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakePreviewEffect.java b/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakePreviewEffect.java
new file mode 100644
index 0000000..e1a6ea9
--- /dev/null
+++ b/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/FakePreviewEffect.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.camera.testing.fakes;
+
+import android.os.Build;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
+import androidx.camera.core.CameraEffect;
+import androidx.camera.core.SurfaceProcessor;
+
+import java.util.concurrent.Executor;
+
+/**
+ * A fake {@link CameraEffect} with {@link SurfaceProcessor}.
+ */
+@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
+public class FakePreviewEffect extends CameraEffect {
+    public FakePreviewEffect(
+            @NonNull Executor processorExecutor,
+            @NonNull SurfaceProcessor surfaceProcessor) {
+        super(PREVIEW, processorExecutor, surfaceProcessor);
+    }
+}
diff --git a/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/GrayscaleImageEffect.java b/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/GrayscaleImageEffect.java
new file mode 100644
index 0000000..c388e9c
--- /dev/null
+++ b/camera/camera-testing/src/main/java/androidx/camera/testing/fakes/GrayscaleImageEffect.java
@@ -0,0 +1,105 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.camera.testing.fakes;
+
+import static androidx.camera.core.impl.utils.executor.CameraXExecutors.directExecutor;
+
+import static java.util.Objects.requireNonNull;
+
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.ColorMatrixColorFilter;
+import android.graphics.Paint;
+import android.os.Build;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
+import androidx.camera.core.CameraEffect;
+import androidx.camera.core.ImageProcessor;
+import androidx.camera.core.ImageProxy;
+import androidx.camera.core.imagecapture.RgbaImageProxy;
+
+/**
+ * Create a grayscale image effect for testing.
+ */
+@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
+public class GrayscaleImageEffect extends CameraEffect {
+
+    public GrayscaleImageEffect() {
+        super(IMAGE_CAPTURE,
+                directExecutor(),
+                new GrayscaleProcessor());
+    }
+
+    @Nullable
+    public ImageProxy getInputImage() {
+        return ((GrayscaleProcessor) requireNonNull(getImageProcessor())).getInputImage();
+    }
+
+    static class GrayscaleProcessor implements ImageProcessor {
+
+        private ImageProxy mImageIn;
+
+        @NonNull
+        @Override
+        public Response process(@NonNull Request request) {
+            mImageIn = request.getInputImages().get(0);
+            Bitmap bitmapIn = ((RgbaImageProxy) mImageIn).createBitmap();
+            Bitmap bitmapOut = createProcessedBitmap(bitmapIn);
+            return () -> createOutputImage(bitmapOut, mImageIn);
+        }
+
+        @Nullable
+        ImageProxy getInputImage() {
+            return mImageIn;
+        }
+
+        /**
+         * Creates output image
+         */
+        private ImageProxy createOutputImage(Bitmap newBitmap, ImageProxy imageIn) {
+            return new RgbaImageProxy(
+                    newBitmap,
+                    imageIn.getCropRect(),
+                    imageIn.getImageInfo().getRotationDegrees(),
+                    imageIn.getImageInfo().getSensorToBufferTransformMatrix(),
+                    imageIn.getImageInfo().getTimestamp()
+            );
+        }
+
+        /**
+         * Apply grayscale on the [Bitmap]
+         */
+        private Bitmap createProcessedBitmap(Bitmap bitmapIn) {
+            Paint paint = new Paint();
+            // R/G/B = 1/3 R + 1/3 G + 1/3 B
+            float oneThird = 1 / 3F;
+            paint.setColorFilter(new ColorMatrixColorFilter(new float[]{
+                    oneThird, oneThird, oneThird, 0F, 0F,
+                    oneThird, oneThird, oneThird, 0F, 0F,
+                    oneThird, oneThird, oneThird, 0F, 0F,
+                    0F, 0F, 0F, 1F, 0F
+            }));
+            Bitmap bitmapOut = Bitmap.createBitmap(bitmapIn.getWidth(), bitmapIn.getHeight(),
+                    Bitmap.Config.ARGB_8888);
+            Canvas canvas = new Canvas(bitmapOut);
+            canvas.drawBitmap(bitmapIn, 0F, 0F, paint);
+            return bitmapOut;
+        }
+    }
+}
diff --git a/camera/camera-view/src/androidTest/java/androidx/camera/view/CameraControllerDeviceTest.kt b/camera/camera-view/src/androidTest/java/androidx/camera/view/CameraControllerDeviceTest.kt
index e61af75..630e7f3 100644
--- a/camera/camera-view/src/androidTest/java/androidx/camera/view/CameraControllerDeviceTest.kt
+++ b/camera/camera-view/src/androidTest/java/androidx/camera/view/CameraControllerDeviceTest.kt
@@ -22,8 +22,6 @@
 import android.view.View
 import androidx.camera.camera2.Camera2Config
 import androidx.camera.camera2.pipe.integration.CameraPipeConfig
-import androidx.camera.core.CameraEffect
-import androidx.camera.core.CameraEffect.PREVIEW
 import androidx.camera.core.CameraSelector
 import androidx.camera.core.CameraSelector.LENS_FACING_BACK
 import androidx.camera.core.CameraSelector.LENS_FACING_FRONT
@@ -37,6 +35,7 @@
 import androidx.camera.testing.CoreAppTestUtil
 import androidx.camera.testing.fakes.FakeActivity
 import androidx.camera.testing.fakes.FakeLifecycleOwner
+import androidx.camera.testing.fakes.FakePreviewEffect
 import androidx.camera.testing.fakes.FakeSurfaceProcessor
 import androidx.test.core.app.ActivityScenario
 import androidx.test.core.app.ApplicationProvider
@@ -128,9 +127,9 @@
         waitUtilPreviewViewIsReady(previewView!!)
 
         // Act: set an effect
-        val effect = CameraEffect.Builder(PREVIEW).setSurfaceProcessor(
+        val effect = FakePreviewEffect(
             mainThreadExecutor(), FakeSurfaceProcessor(mainThreadExecutor())
-        ).build()
+        )
         instrumentation.runOnMainSync { controller!!.setEffects(listOf(effect)) }
 
         // Assert: preview has effect
diff --git a/camera/integration-tests/coretestapp/build.gradle b/camera/integration-tests/coretestapp/build.gradle
index 8b6295b..eb2773a 100644
--- a/camera/integration-tests/coretestapp/build.gradle
+++ b/camera/integration-tests/coretestapp/build.gradle
@@ -76,7 +76,11 @@
     implementation(libs.espressoIdlingResource)
     implementation("androidx.appcompat:appcompat:1.3.0")
     // MLKit library: Barcode scanner
-    implementation(libs.mlkitBarcode, excludes.mlkit)
+    implementation(libs.mlkitBarcode) {
+        exclude group: "androidx.fragment"
+        exclude group: "androidx.core"
+        exclude group: "androidx.exifinterface"
+    }
 
     // 3P library
     debugImplementation(libs.leakcanary)
diff --git a/camera/integration-tests/uiwidgetstestapp/src/main/java/androidx/camera/integration/uiwidgets/foldable/FoldableCameraActivity.kt b/camera/integration-tests/uiwidgetstestapp/src/main/java/androidx/camera/integration/uiwidgets/foldable/FoldableCameraActivity.kt
index 19a3116..8041a1e 100644
--- a/camera/integration-tests/uiwidgetstestapp/src/main/java/androidx/camera/integration/uiwidgets/foldable/FoldableCameraActivity.kt
+++ b/camera/integration-tests/uiwidgetstestapp/src/main/java/androidx/camera/integration/uiwidgets/foldable/FoldableCameraActivity.kt
@@ -16,7 +16,6 @@
 
 package androidx.camera.integration.uiwidgets.foldable
 
-import android.Manifest
 import android.content.ContentValues
 import android.content.Context
 import android.content.pm.PackageManager
@@ -55,7 +54,7 @@
 import androidx.camera.core.MeteringPointFactory
 import androidx.camera.integration.uiwidgets.R
 import androidx.camera.integration.uiwidgets.databinding.ActivityFoldableCameraBinding
-import androidx.camera.integration.uiwidgets.rotations.CameraActivity
+import androidx.camera.integration.uiwidgets.rotations.CameraActivity.Companion.PERMISSIONS
 import androidx.camera.view.LifecycleCameraController
 import androidx.camera.view.PreviewView
 import androidx.core.app.ActivityCompat
@@ -78,8 +77,6 @@
         private const val KEY_SCALETYPE = "ScaleType"
         private const val BACK_CAMERA_STR = "Back camera"
         private const val FRONT_CAMERA_STR = "Front camera"
-        val PERMISSIONS =
-            arrayOf(Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE)
     }
 
     private lateinit var binding: ActivityFoldableCameraBinding
@@ -362,7 +359,7 @@
     }
 
     private fun hasPermissions(): Boolean {
-        return CameraActivity.PERMISSIONS.all {
+        return PERMISSIONS.all {
             ContextCompat.checkSelfPermission(this, it) == PackageManager.PERMISSION_GRANTED
         }
     }
diff --git a/camera/integration-tests/uiwidgetstestapp/src/main/java/androidx/camera/integration/uiwidgets/rotations/CameraActivity.kt b/camera/integration-tests/uiwidgetstestapp/src/main/java/androidx/camera/integration/uiwidgets/rotations/CameraActivity.kt
index 6a7e5ac..6abb1a2 100644
--- a/camera/integration-tests/uiwidgetstestapp/src/main/java/androidx/camera/integration/uiwidgets/rotations/CameraActivity.kt
+++ b/camera/integration-tests/uiwidgetstestapp/src/main/java/androidx/camera/integration/uiwidgets/rotations/CameraActivity.kt
@@ -352,7 +352,11 @@
 
         private const val TAG = "MainActivity"
         private const val REQUEST_CODE_PERMISSIONS = 20
-        val PERMISSIONS =
+        val PERMISSIONS = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q)
+            // in android 10 or later, we don't actually need WRITE_EXTERNAL_STORAGE to write to
+            // the external storage.
+            arrayOf(Manifest.permission.CAMERA)
+        else
             arrayOf(Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE)
         private var cameraImpl: String? = null
     }
diff --git a/car/app/app-samples/showcase/automotive/src/main/AndroidManifest.xml b/car/app/app-samples/showcase/automotive/src/main/AndroidManifest.xml
index 62f68c8..92aba90 100644
--- a/car/app/app-samples/showcase/automotive/src/main/AndroidManifest.xml
+++ b/car/app/app-samples/showcase/automotive/src/main/AndroidManifest.xml
@@ -92,7 +92,7 @@
     </service>
 
     <provider
-        android:name="androidx.car.app.sample.showcase.common.screens.templatelayouts.listtemplates.DelayedFileProvider"
+        android:name=".common.screens.templatelayouts.listtemplates.DelayedFileProvider"
         android:authorities="com.showcase.fileprovider"
         android:exported="false"
         android:grantUriPermissions="true">
diff --git a/car/app/app-samples/showcase/common/src/main/java/androidx/car/app/sample/showcase/common/screens/templatelayouts/SignInTemplateDemoScreen.java b/car/app/app-samples/showcase/common/src/main/java/androidx/car/app/sample/showcase/common/screens/templatelayouts/SignInTemplateDemoScreen.java
index e552e9c..e55c517 100644
--- a/car/app/app-samples/showcase/common/src/main/java/androidx/car/app/sample/showcase/common/screens/templatelayouts/SignInTemplateDemoScreen.java
+++ b/car/app/app-samples/showcase/common/src/main/java/androidx/car/app/sample/showcase/common/screens/templatelayouts/SignInTemplateDemoScreen.java
@@ -56,7 +56,9 @@
     private final Action mQRCodeSignInAction;
     // package private to avoid synthetic accessor
     State mState = State.USERNAME;
+    @Nullable
     String mLastErrorMessage; // last displayed error message
+    @Nullable
     String mErrorMessage;
 
     @Nullable
@@ -158,7 +160,7 @@
 
                     // Invalidate the template (and hence possibly update the error message) only
                     // if clearing up the error string, or if the error is changing.
-                    if (!mLastErrorMessage.isEmpty()
+                    if ((mLastErrorMessage != null && !mLastErrorMessage.isEmpty())
                             && (mErrorMessage.isEmpty()
                             || !mLastErrorMessage.equals(mErrorMessage))) {
                         invalidate();
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-am/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-am/strings.xml
index 8746272..054c3ed 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-am/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-am/strings.xml
@@ -230,8 +230,7 @@
     <string name="long_msg_template_not_supported_title" msgid="8600719470226274925">"ተኳሃኝ ያልሆነ አስተናጋጅ"</string>
     <string name="msg_template_demo_title" msgid="3895210951340409473">"የመልዕክት ቅንብር ደንብ ቅንጭብ ማሳያ"</string>
     <string name="msg_template_demo_text" msgid="2275291617716161409">"መልእክት እዚህ ይሆናል።\nበሁለተኛው መስመር ላይ ተጨማሪ ጽሁፍ።"</string>
-    <!-- no translation found for short_msg_template_demo_title (6798738013668580714) -->
-    <skip />
+    <string name="short_msg_template_demo_title" msgid="6798738013668580714">"የአጭር መልዕክት ቅንብር ደንብ ቅንጭብ ማሳያ"</string>
     <string name="pane_template_demo_title" msgid="7804292600060341608">"የፔን ቅንብር ደንብ ቅንጭብ ማሳያ"</string>
     <string name="place_list_template_demo_title" msgid="2054022985455460469">"የዝርዝር ቅንብር ደንብ ቅንጭብ ማሳያ ይመድቡ"</string>
     <string name="browse_places_title" msgid="7246005909846715898">"ቦታዎችን ያስሱ"</string>
@@ -267,8 +266,7 @@
     <string name="vector_with_tint_title" msgid="1022346419829696827">"ቬክተር ሊሳል የሚችል፣ ከቀለም ጋር"</string>
     <string name="vector_with_app_theme_attr_title" msgid="4890094482708376219">"ቬክተር ሊሳል የሚችል፣ ለቀለም ከመተግበሪያው ገጽታ መግለጫ ባህሪ"</string>
     <string name="png_res_title" msgid="7437083018336747544">"PNG፣ እንደ ግብዓት ተልኳል"</string>
-    <!-- no translation found for png_bitmap_title (3385912074130977032) -->
-    <skip />
+    <string name="png_bitmap_title" msgid="3385912074130977032">"እንደ ቢትማፕ የተላከ አንድ ፒኤንጂ"</string>
     <string name="just_row_title" msgid="965700021568970725">"ርዕስ ብቻ"</string>
     <string name="title_with_app_icon_row_title" msgid="6294250714820740520">"የመተግበሪያ አዶ ያለው ርዕስ"</string>
     <string name="title_with_res_id_image_row_title" msgid="3813134904602875778">"የንብረት መታወቂያ ምስል ያለው ርዕስ"</string>
@@ -280,8 +278,7 @@
     <string name="rows_demo_title" msgid="3198566660454251007">"የረድፎች ቅንጭብ ማሳያ"</string>
     <string name="text_icons_demo_title" msgid="8732943920672143201">"የጽሑፍ እና የአዶዎች ቅንጭብ ማሳያዎች"</string>
     <string name="row_text_icons_demo_title" msgid="135167694047524905">"ጽሁፍ እና የአዶዎች ቅንጭብ ማሳያ ረድፎች"</string>
-    <!-- no translation found for radio_button_list_demo_title (9082264324855338774) -->
-    <skip />
+    <string name="radio_button_list_demo_title" msgid="9082264324855338774">"የራድዮ አዝራር ዝርዝሮች ቅንጭብ ማሳያ"</string>
     <string name="selectable_lists_demo_title" msgid="5492658731113129386">"ሊመረጡ የሚችሉ ዝርዝሮች ቅንጭብ ማሳያ"</string>
     <string name="option_1_title" msgid="7221252541651471199">"አማራጭ 1"</string>
     <string name="option_2_title" msgid="1905146448697963818">"አማራጭ 2"</string>
@@ -295,8 +292,7 @@
     <string name="task_limit_reached_msg" msgid="6038763366777119364">"የተግባር ገደብ ላይ ደርሷል\nወደፊት መሄድ መተግበሪያውን በኃይል ያስቆማል"</string>
     <string name="task_step_of_title" msgid="2791717962535723839">"የተግባር እርምጃ %1$d ከ%2$d"</string>
     <string name="task_step_of_text" msgid="4646729781462227219">"ወደፊት ለመሄድ ጠቅ ያድርጉ"</string>
-    <!-- no translation found for toggle_button_demo_title (3179103600967398928) -->
-    <skip />
+    <string name="toggle_button_demo_title" msgid="3179103600967398928">"የቀያይር አዝራር ቅንጭብ ማሳያ"</string>
     <string name="toggle_test_title" msgid="924485265152862631">"ሙከራን ቀያይር"</string>
     <string name="toggle_test_text" msgid="8107217216013312857">"ተጨባጭ ለውጦች ተፈቅደዋል"</string>
     <string name="toggle_test_first_toggle_title" msgid="3635022201072117680">"የመቀያየር ሙከራን አንቃ"</string>
@@ -311,10 +307,8 @@
     <string name="toggle_test_disabled" msgid="8366040658408451664">"የመቀያየር ሙከራ ተሰናክሏል"</string>
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"የተለያዩ ቅንብር ደንቦች ቅንጭብ ማሳያዎች"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"የመሳያ ቅንጭብ ማሳያ"</string>
-    <!-- no translation found for template_layouts_demo_title (788249269446087847) -->
-    <skip />
-    <!-- no translation found for grid_template_menu_demo_title (7096285873490705119) -->
-    <skip />
+    <string name="template_layouts_demo_title" msgid="788249269446087847">"የቅንብር ደንብ አቀማመጥ ቅንጭብ ማሳያዎች"</string>
+    <string name="grid_template_menu_demo_title" msgid="7096285873490705119">"የፍርግርግ ቅንብር ደንብ ቅንጭብ ማሳያዎች"</string>
     <string name="voice_access_demo_title" msgid="3825223890895361496">"የድምጽ መዳረሻ ቅንጭብ ማሳያ ማያ ገጽ"</string>
     <string name="user_interactions_demo_title" msgid="1356952319161314986">"የተጠቃሚ መስተጋብሮች"</string>
     <string name="request_permission_menu_demo_title" msgid="4796486779527427017">"የቅንጭብ ማሳያ ፈቃዶችን ይጠይቁ"</string>
@@ -337,6 +331,5 @@
     <string name="loading_toggle_enabled" msgid="8828072732804454994">"መጫን ነቅቷል"</string>
     <string name="loading_toggle_disabled" msgid="7689738885077382673">"መጫን ተሰናክሏል"</string>
     <string name="loading_screen" msgid="4771507490730308794">"ማያ ገጽን በመጫን ላይ"</string>
-    <!-- no translation found for vector_toggle_details (1301305340033556819) -->
-    <skip />
+    <string name="vector_toggle_details" msgid="1301305340033556819">"ቀለም ለማከል/ለማስወገድ ይቀያይሩ"</string>
 </resources>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-ar/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-ar/strings.xml
index f74923e..e1c4cb1 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-ar/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-ar/strings.xml
@@ -230,8 +230,7 @@
     <string name="long_msg_template_not_supported_title" msgid="8600719470226274925">"مضيف غير متوافق"</string>
     <string name="msg_template_demo_title" msgid="3895210951340409473">"إصدار تجريبي لنموذج الرسالة"</string>
     <string name="msg_template_demo_text" msgid="2275291617716161409">"تظهر الرسالة هنا.\nالمزيد من النص في السطر الثاني."</string>
-    <!-- no translation found for short_msg_template_demo_title (6798738013668580714) -->
-    <skip />
+    <string name="short_msg_template_demo_title" msgid="6798738013668580714">"عرض توضيحي لنموذج رسالة قصيرة"</string>
     <string name="pane_template_demo_title" msgid="7804292600060341608">"إصدار تجريبي لنموذج اللوحة"</string>
     <string name="place_list_template_demo_title" msgid="2054022985455460469">"إصدار تجريبي لنموذج قائمة الأماكن"</string>
     <string name="browse_places_title" msgid="7246005909846715898">"تصفُّح الأماكن"</string>
@@ -267,8 +266,7 @@
     <string name="vector_with_tint_title" msgid="1022346419829696827">"متّجه قابل للرسم مع درجات ألوان"</string>
     <string name="vector_with_app_theme_attr_title" msgid="4890094482708376219">"متّجه قابل للرسم مع سمة لمظهر التطبيق خاصة بلونه"</string>
     <string name="png_res_title" msgid="7437083018336747544">"‏تم إرسال صورة بتنسيق PNG كأحد الموارد"</string>
-    <!-- no translation found for png_bitmap_title (3385912074130977032) -->
-    <skip />
+    <string name="png_bitmap_title" msgid="3385912074130977032">"‏ملف PNG، مُرسَل كصورة نقطية"</string>
     <string name="just_row_title" msgid="965700021568970725">"مجرد عنوان"</string>
     <string name="title_with_app_icon_row_title" msgid="6294250714820740520">"عنوان مع رمز تطبيق"</string>
     <string name="title_with_res_id_image_row_title" msgid="3813134904602875778">"عنوان مع صورة معرف المورد"</string>
@@ -280,8 +278,7 @@
     <string name="rows_demo_title" msgid="3198566660454251007">"إصدار تجريبي للصفوف"</string>
     <string name="text_icons_demo_title" msgid="8732943920672143201">"الإصدارات التجريبية للنصوص والرموز"</string>
     <string name="row_text_icons_demo_title" msgid="135167694047524905">"إصدار تجريبي للصفوف التي تتضمن نصوصًا ورموزًا"</string>
-    <!-- no translation found for radio_button_list_demo_title (9082264324855338774) -->
-    <skip />
+    <string name="radio_button_list_demo_title" msgid="9082264324855338774">"عرض توضيحي لقوائم أزرار الاختيار"</string>
     <string name="selectable_lists_demo_title" msgid="5492658731113129386">"إصدار تجريبي للقوائم القابلة للاختيار"</string>
     <string name="option_1_title" msgid="7221252541651471199">"الخيار الأول"</string>
     <string name="option_2_title" msgid="1905146448697963818">"الخيار الثاني"</string>
@@ -295,8 +292,7 @@
     <string name="task_limit_reached_msg" msgid="6038763366777119364">"تم الوصول إلى حد المهمّة.\nسيؤدي التقدم إلى فرض إيقاف التطبيق."</string>
     <string name="task_step_of_title" msgid="2791717962535723839">"‏خطوة المهمة: %1$d من %2$d"</string>
     <string name="task_step_of_text" msgid="4646729781462227219">"انقر للتقدم إلى الأمام."</string>
-    <!-- no translation found for toggle_button_demo_title (3179103600967398928) -->
-    <skip />
+    <string name="toggle_button_demo_title" msgid="3179103600967398928">"عرض توضيحي لزر الإيقاف/التفعيل"</string>
     <string name="toggle_test_title" msgid="924485265152862631">"إيقاف/تفعيل الاختبار"</string>
     <string name="toggle_test_text" msgid="8107217216013312857">"يُسمَح بتغيير الحالة."</string>
     <string name="toggle_test_first_toggle_title" msgid="3635022201072117680">"تفعيل زر إيقاف/تفعيل الاختبار"</string>
@@ -311,10 +307,8 @@
     <string name="toggle_test_disabled" msgid="8366040658408451664">"تم إيقاف زر إيقاف/تفعيل الاختبار."</string>
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"إصدارات تجريبية لنموذج ميزات متنوّعة"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"عرض الإصدارات التجريبية"</string>
-    <!-- no translation found for template_layouts_demo_title (788249269446087847) -->
-    <skip />
-    <!-- no translation found for grid_template_menu_demo_title (7096285873490705119) -->
-    <skip />
+    <string name="template_layouts_demo_title" msgid="788249269446087847">"عروض توضيحية لتنسيقات النماذج"</string>
+    <string name="grid_template_menu_demo_title" msgid="7096285873490705119">"عروض توضيحية لنماذج الشبكات"</string>
     <string name="voice_access_demo_title" msgid="3825223890895361496">"شاشة العرض التوضيحي للاستخدام عبر الصوت"</string>
     <string name="user_interactions_demo_title" msgid="1356952319161314986">"تفاعلات المستخدمين"</string>
     <string name="request_permission_menu_demo_title" msgid="4796486779527427017">"عروض توضيحية لطلب الأذونات"</string>
@@ -337,6 +331,5 @@
     <string name="loading_toggle_enabled" msgid="8828072732804454994">"تم تفعيل التحميل."</string>
     <string name="loading_toggle_disabled" msgid="7689738885077382673">"تم إيقاف التحميل."</string>
     <string name="loading_screen" msgid="4771507490730308794">"شاشة التحميل"</string>
-    <!-- no translation found for vector_toggle_details (1301305340033556819) -->
-    <skip />
+    <string name="vector_toggle_details" msgid="1301305340033556819">"لإضافة لون أو إزالته، عليك تفعيل الخيار أو إيقافه"</string>
 </resources>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-as/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-as/strings.xml
index ce34ace..f235261e 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-as/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-as/strings.xml
@@ -230,8 +230,7 @@
     <string name="long_msg_template_not_supported_title" msgid="8600719470226274925">"অমিল হ’ষ্ট"</string>
     <string name="msg_template_demo_title" msgid="3895210951340409473">"বাৰ্তাৰ টেম্পলে’টৰ ডেম’"</string>
     <string name="msg_template_demo_text" msgid="2275291617716161409">"ইয়াত বাৰ্তা ওলাব।\nদ্বিতীয় শাৰীত অধিক পাঠ।"</string>
-    <!-- no translation found for short_msg_template_demo_title (6798738013668580714) -->
-    <skip />
+    <string name="short_msg_template_demo_title" msgid="6798738013668580714">"চুটি বাৰ্তাৰ টেমপ্লে’টৰ ডেম’"</string>
     <string name="pane_template_demo_title" msgid="7804292600060341608">"পে’নৰ টেম্পলে’টৰ ডেম’"</string>
     <string name="place_list_template_demo_title" msgid="2054022985455460469">"ঠাইৰ সূচীৰ টেম্পলে’টৰ ডেম’"</string>
     <string name="browse_places_title" msgid="7246005909846715898">"ঠাইসমূহ ব্ৰাউজ কৰক"</string>
@@ -267,8 +266,7 @@
     <string name="vector_with_tint_title" msgid="1022346419829696827">"এটা ৰঙৰ জৰিয়তে স্পৰ্শেৰে স্থানান্তৰ কৰিব পৰা এটা ভেক্টৰ"</string>
     <string name="vector_with_app_theme_attr_title" msgid="4890094482708376219">"এটা এপৰ নিজৰ ৰঙৰ থীমৰ এট্ৰিবিউটৰ জৰিয়তে স্পৰ্শেৰে স্থানান্তৰ কৰিব পৰা এটা ভেক্টৰ"</string>
     <string name="png_res_title" msgid="7437083018336747544">"উৎস হিচাপে পঠিওৱা এটা PNG"</string>
-    <!-- no translation found for png_bitmap_title (3385912074130977032) -->
-    <skip />
+    <string name="png_bitmap_title" msgid="3385912074130977032">"বিটমেপ হিচাপে পঠিওৱা এটা PNG"</string>
     <string name="just_row_title" msgid="965700021568970725">"মাত্ৰ অলপ"</string>
     <string name="title_with_app_icon_row_title" msgid="6294250714820740520">"এপৰ চিহ্নৰ সৈতে শিৰোনাম"</string>
     <string name="title_with_res_id_image_row_title" msgid="3813134904602875778">"উৎসৰ আইডিৰ প্ৰতিচ্ছবিৰ সৈতে শিৰোনাম"</string>
@@ -280,8 +278,7 @@
     <string name="rows_demo_title" msgid="3198566660454251007">"শাৰীৰ ডেম’"</string>
     <string name="text_icons_demo_title" msgid="8732943920672143201">"পাঠ আৰু চিহ্নৰ ডেম’"</string>
     <string name="row_text_icons_demo_title" msgid="135167694047524905">"পাঠ আৰু চিহ্নৰ ডেম’যুক্ত শাৰী"</string>
-    <!-- no translation found for radio_button_list_demo_title (9082264324855338774) -->
-    <skip />
+    <string name="radio_button_list_demo_title" msgid="9082264324855338774">"ৰেডিঅ’ বুটামৰ সূচীৰ ডেম’"</string>
     <string name="selectable_lists_demo_title" msgid="5492658731113129386">"বাছনিযোগ্য সূচীৰ ডেম’"</string>
     <string name="option_1_title" msgid="7221252541651471199">"বিকল্প ১"</string>
     <string name="option_2_title" msgid="1905146448697963818">"বিকল্প ২"</string>
@@ -295,8 +292,7 @@
     <string name="task_limit_reached_msg" msgid="6038763366777119364">"কাৰ্যৰ সীমাত উপনীত হৈছে\nআগবাঢ়ি গ’লে এপ্‌টো বলপূৰ্বকভাৱে বন্ধ কৰা হ’ব"</string>
     <string name="task_step_of_title" msgid="2791717962535723839">"কাৰ্যৰ পদক্ষেপ %2$d টাৰ %1$d"</string>
     <string name="task_step_of_text" msgid="4646729781462227219">"আগবাঢ়ি যাবলৈ ক্লিক কৰক"</string>
-    <!-- no translation found for toggle_button_demo_title (3179103600967398928) -->
-    <skip />
+    <string name="toggle_button_demo_title" msgid="3179103600967398928">"ট’গল বুটামৰ ডেম’"</string>
     <string name="toggle_test_title" msgid="924485265152862631">"পৰীক্ষা ট’গল কৰক"</string>
     <string name="toggle_test_text" msgid="8107217216013312857">"ষ্টে’টফুল সলনি কৰাৰ অনুমতি আছে"</string>
     <string name="toggle_test_first_toggle_title" msgid="3635022201072117680">"পৰীক্ষা ট’গল কৰাৰ সুবিধা সক্ষম কৰক"</string>
@@ -311,10 +307,8 @@
     <string name="toggle_test_disabled" msgid="8366040658408451664">"পৰীক্ষা ট’গল কৰাৰ সুবিধা অক্ষম কৰা হৈছে"</string>
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"সানমিহলি টেম্পলে’টৰ ডেম’"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"ডেম’ দেখুৱাওক"</string>
-    <!-- no translation found for template_layouts_demo_title (788249269446087847) -->
-    <skip />
-    <!-- no translation found for grid_template_menu_demo_title (7096285873490705119) -->
-    <skip />
+    <string name="template_layouts_demo_title" msgid="788249269446087847">"টেমপ্লে’ট লে’আউটৰ ডেম’"</string>
+    <string name="grid_template_menu_demo_title" msgid="7096285873490705119">"গ্ৰিড টেমপ্লে’টৰ ডেম’"</string>
     <string name="voice_access_demo_title" msgid="3825223890895361496">"কণ্ঠধ্বনিৰে এক্সেছ কৰাৰ ডেম’ৰ স্ক্ৰীন"</string>
     <string name="user_interactions_demo_title" msgid="1356952319161314986">"ব্যৱহাৰকাৰীৰ ভাব-বিনিময়"</string>
     <string name="request_permission_menu_demo_title" msgid="4796486779527427017">"অনুমতিৰ অনুৰোধৰ ডেম’"</string>
@@ -337,6 +331,5 @@
     <string name="loading_toggle_enabled" msgid="8828072732804454994">"ল’ড কৰি থকাটো সক্ষম কৰা হৈছে"</string>
     <string name="loading_toggle_disabled" msgid="7689738885077382673">"ল’ড কৰি থকাটো অক্ষম কৰা হৈছে"</string>
     <string name="loading_screen" msgid="4771507490730308794">"স্ক্ৰীন ল’ড কৰি থকা হৈছে"</string>
-    <!-- no translation found for vector_toggle_details (1301305340033556819) -->
-    <skip />
+    <string name="vector_toggle_details" msgid="1301305340033556819">"ৰং যোগ দিবলৈ/আঁতৰাবলৈ ট’গল কৰক"</string>
 </resources>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-be/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-be/strings.xml
index c11a39a1..c3f85d6 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-be/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-be/strings.xml
@@ -230,8 +230,7 @@
     <string name="long_msg_template_not_supported_title" msgid="8600719470226274925">"Несумяшчальны хост"</string>
     <string name="msg_template_demo_title" msgid="3895210951340409473">"Дэманстрацыя шаблона паведамлення"</string>
     <string name="msg_template_demo_text" msgid="2275291617716161409">"Тут будзе паказана паведамленне.\nАстатні тэкст – далей."</string>
-    <!-- no translation found for short_msg_template_demo_title (6798738013668580714) -->
-    <skip />
+    <string name="short_msg_template_demo_title" msgid="6798738013668580714">"Дэманстрацыя шаблона кароткага паведамлення"</string>
     <string name="pane_template_demo_title" msgid="7804292600060341608">"Дэманстрацыя шаблона панэлі"</string>
     <string name="place_list_template_demo_title" msgid="2054022985455460469">"Дэманстрацыя шаблона спіса месцаў"</string>
     <string name="browse_places_title" msgid="7246005909846715898">"Агляд месцаў"</string>
@@ -267,8 +266,7 @@
     <string name="vector_with_tint_title" msgid="1022346419829696827">"Вектарны графічны элемент з каляровым фільтрам"</string>
     <string name="vector_with_app_theme_attr_title" msgid="4890094482708376219">"Вектарны графічны элемент з атрыбутам тэмы праграмы для яго колеру"</string>
     <string name="png_res_title" msgid="7437083018336747544">"Файл PNG, адпраўлены як рэсурс"</string>
-    <!-- no translation found for png_bitmap_title (3385912074130977032) -->
-    <skip />
+    <string name="png_bitmap_title" msgid="3385912074130977032">"Файл PNG, адпраўлены як растравая выява"</string>
     <string name="just_row_title" msgid="965700021568970725">"Толькі назва"</string>
     <string name="title_with_app_icon_row_title" msgid="6294250714820740520">"Назва са значком праграмы"</string>
     <string name="title_with_res_id_image_row_title" msgid="3813134904602875778">"Назва з відарысам ідэнтыфікатара рэсурсу"</string>
@@ -280,8 +278,7 @@
     <string name="rows_demo_title" msgid="3198566660454251007">"Дэманстрацыя радкоў"</string>
     <string name="text_icons_demo_title" msgid="8732943920672143201">"Дэманстрацыі тэксту і значкоў"</string>
     <string name="row_text_icons_demo_title" msgid="135167694047524905">"Дэманстрацыя радкоў з тэкстам і значкамі"</string>
-    <!-- no translation found for radio_button_list_demo_title (9082264324855338774) -->
-    <skip />
+    <string name="radio_button_list_demo_title" msgid="9082264324855338774">"Дэманстрацыя спісаў пераключальнікаў"</string>
     <string name="selectable_lists_demo_title" msgid="5492658731113129386">"Дэманстрацыя спісаў выбару"</string>
     <string name="option_1_title" msgid="7221252541651471199">"Варыянт 1"</string>
     <string name="option_2_title" msgid="1905146448697963818">"Варыянт 2"</string>
@@ -295,8 +292,7 @@
     <string name="task_limit_reached_msg" msgid="6038763366777119364">"Дасягнута максімальная колькасць задач\nДалейшы рух прывядзе да прымусовага спынення праграмы"</string>
     <string name="task_step_of_title" msgid="2791717962535723839">"Крок задачы %1$d з %2$d"</string>
     <string name="task_step_of_text" msgid="4646729781462227219">"Націсніце, каб рухацца далей"</string>
-    <!-- no translation found for toggle_button_demo_title (3179103600967398928) -->
-    <skip />
+    <string name="toggle_button_demo_title" msgid="3179103600967398928">"Дэманстрацыя кнопкі пераключэння"</string>
     <string name="toggle_test_title" msgid="924485265152862631">"Праверка пераключэння"</string>
     <string name="toggle_test_text" msgid="8107217216013312857">"Дазволена змяняць стан"</string>
     <string name="toggle_test_first_toggle_title" msgid="3635022201072117680">"Уключыць праверку пераключэння"</string>
@@ -311,10 +307,8 @@
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Праверка пераключэння адключана"</string>
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Дэманстрацыі розных шаблонаў"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Дэманстрацыі выбранага"</string>
-    <!-- no translation found for template_layouts_demo_title (788249269446087847) -->
-    <skip />
-    <!-- no translation found for grid_template_menu_demo_title (7096285873490705119) -->
-    <skip />
+    <string name="template_layouts_demo_title" msgid="788249269446087847">"Дэманстрацыі макета шаблона"</string>
+    <string name="grid_template_menu_demo_title" msgid="7096285873490705119">"Дэманстрацыя шаблона сеткі"</string>
     <string name="voice_access_demo_title" msgid="3825223890895361496">"Экран дэманстрацыі Галасавога доступу"</string>
     <string name="user_interactions_demo_title" msgid="1356952319161314986">"Узаемадзеянне з карыстальнікамі"</string>
     <string name="request_permission_menu_demo_title" msgid="4796486779527427017">"Запытаць дэманстрацыі дазволаў"</string>
@@ -337,6 +331,5 @@
     <string name="loading_toggle_enabled" msgid="8828072732804454994">"Загрузка ўключана"</string>
     <string name="loading_toggle_disabled" msgid="7689738885077382673">"Загрузка адключана"</string>
     <string name="loading_screen" msgid="4771507490730308794">"Экран загрузкі"</string>
-    <!-- no translation found for vector_toggle_details (1301305340033556819) -->
-    <skip />
+    <string name="vector_toggle_details" msgid="1301305340033556819">"Пераключыцца на дадаванне/выдаленне колеру"</string>
 </resources>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-bg/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-bg/strings.xml
index 7d97a6d..12ce255 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-bg/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-bg/strings.xml
@@ -230,8 +230,7 @@
     <string name="long_msg_template_not_supported_title" msgid="8600719470226274925">"Несъвместим хост"</string>
     <string name="msg_template_demo_title" msgid="3895210951340409473">"Демонстрация на шаблон за съобщение"</string>
     <string name="msg_template_demo_text" msgid="2275291617716161409">"Място за съобщение.\nОще текст на втория ред."</string>
-    <!-- no translation found for short_msg_template_demo_title (6798738013668580714) -->
-    <skip />
+    <string name="short_msg_template_demo_title" msgid="6798738013668580714">"Демонстрация на шаблон за кратки съобщения"</string>
     <string name="pane_template_demo_title" msgid="7804292600060341608">"Демонстрация на шаблон за панел"</string>
     <string name="place_list_template_demo_title" msgid="2054022985455460469">"Демонстрация на шаблон за списък с места"</string>
     <string name="browse_places_title" msgid="7246005909846715898">"Преглед на места"</string>
@@ -267,8 +266,7 @@
     <string name="vector_with_tint_title" msgid="1022346419829696827">"Векторен ресурс с възможност за изчертаване, с нюанс"</string>
     <string name="vector_with_app_theme_attr_title" msgid="4890094482708376219">"Векторен ресурс с възможност за изчертаване, за цвета му се използва атрибут от тема на приложение"</string>
     <string name="png_res_title" msgid="7437083018336747544">"PNG файл, изпратен като ресурс"</string>
-    <!-- no translation found for png_bitmap_title (3385912074130977032) -->
-    <skip />
+    <string name="png_bitmap_title" msgid="3385912074130977032">"PNG файл, изпратен като растерно изображение"</string>
     <string name="just_row_title" msgid="965700021568970725">"Просто едно заглавие"</string>
     <string name="title_with_app_icon_row_title" msgid="6294250714820740520">"Заглавие с икона на приложение"</string>
     <string name="title_with_res_id_image_row_title" msgid="3813134904602875778">"Заглавие с изображение на ID на ресурс"</string>
@@ -280,8 +278,7 @@
     <string name="rows_demo_title" msgid="3198566660454251007">"Демонстрация на редове"</string>
     <string name="text_icons_demo_title" msgid="8732943920672143201">"Демонстрации на текст и икони"</string>
     <string name="row_text_icons_demo_title" msgid="135167694047524905">"Демонстрация на редове с текст и икони"</string>
-    <!-- no translation found for radio_button_list_demo_title (9082264324855338774) -->
-    <skip />
+    <string name="radio_button_list_demo_title" msgid="9082264324855338774">"Демонстрация на списъци с бутони за избор"</string>
     <string name="selectable_lists_demo_title" msgid="5492658731113129386">"Демонстрация на списъци с опции"</string>
     <string name="option_1_title" msgid="7221252541651471199">"Опция 1"</string>
     <string name="option_2_title" msgid="1905146448697963818">"Опция 2"</string>
@@ -295,8 +292,7 @@
     <string name="task_limit_reached_msg" msgid="6038763366777119364">"Ограничението за задачи е достигнато\nАко продължите, приложението ще бъде спряно принудително"</string>
     <string name="task_step_of_title" msgid="2791717962535723839">"Стъпка %1$d от %2$d в задачата"</string>
     <string name="task_step_of_text" msgid="4646729781462227219">"Кликнете, за да продължите напред"</string>
-    <!-- no translation found for toggle_button_demo_title (3179103600967398928) -->
-    <skip />
+    <string name="toggle_button_demo_title" msgid="3179103600967398928">"Демонстрация на бутон за превключване"</string>
     <string name="toggle_test_title" msgid="924485265152862631">"Тест с превключвател"</string>
     <string name="toggle_test_text" msgid="8107217216013312857">"Промените на състоянието са разрешени"</string>
     <string name="toggle_test_first_toggle_title" msgid="3635022201072117680">"Активиране на теста с превключвател"</string>
@@ -311,10 +307,8 @@
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Тестът с превключвател е деактивиран"</string>
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Демонстрации на разни шаблони"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Демонстрации на Showcase"</string>
-    <!-- no translation found for template_layouts_demo_title (788249269446087847) -->
-    <skip />
-    <!-- no translation found for grid_template_menu_demo_title (7096285873490705119) -->
-    <skip />
+    <string name="template_layouts_demo_title" msgid="788249269446087847">"Демонстрации на оформления за шаблон"</string>
+    <string name="grid_template_menu_demo_title" msgid="7096285873490705119">"Демонстрации на шаблони за решетка"</string>
     <string name="voice_access_demo_title" msgid="3825223890895361496">"Екран за демонстрация на Voice Access"</string>
     <string name="user_interactions_demo_title" msgid="1356952319161314986">"Потребителски взаимодействия"</string>
     <string name="request_permission_menu_demo_title" msgid="4796486779527427017">"Демонстрации за заявяване на разрешения"</string>
@@ -337,6 +331,5 @@
     <string name="loading_toggle_enabled" msgid="8828072732804454994">"Зареждането е активирано"</string>
     <string name="loading_toggle_disabled" msgid="7689738885077382673">"Зареждането е деактивирано"</string>
     <string name="loading_screen" msgid="4771507490730308794">"Екран за зареждане"</string>
-    <!-- no translation found for vector_toggle_details (1301305340033556819) -->
-    <skip />
+    <string name="vector_toggle_details" msgid="1301305340033556819">"Превключете, за да добавите/премахнете цвят"</string>
 </resources>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-ca/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-ca/strings.xml
index 041c144..a501c63 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-ca/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-ca/strings.xml
@@ -230,8 +230,7 @@
     <string name="long_msg_template_not_supported_title" msgid="8600719470226274925">"Amfitrió incompatible"</string>
     <string name="msg_template_demo_title" msgid="3895210951340409473">"Demostració d\'una plantilla de missatge"</string>
     <string name="msg_template_demo_text" msgid="2275291617716161409">"El missatge va aquí.\nMés text a la segona línia."</string>
-    <!-- no translation found for short_msg_template_demo_title (6798738013668580714) -->
-    <skip />
+    <string name="short_msg_template_demo_title" msgid="6798738013668580714">"Demostració d\'una plantilla de missatge curt"</string>
     <string name="pane_template_demo_title" msgid="7804292600060341608">"Demostració d\'una plantilla de subfinestra"</string>
     <string name="place_list_template_demo_title" msgid="2054022985455460469">"Demostració d\'una plantilla de llista de llocs"</string>
     <string name="browse_places_title" msgid="7246005909846715898">"Cerca llocs"</string>
@@ -267,8 +266,7 @@
     <string name="vector_with_tint_title" msgid="1022346419829696827">"Un dibuixable vectorial amb to"</string>
     <string name="vector_with_app_theme_attr_title" msgid="4890094482708376219">"Un dibuixable vectorial amb l\'atribut del tema d\'una aplicació pel seu color"</string>
     <string name="png_res_title" msgid="7437083018336747544">"Un PNG, enviat com a recurs"</string>
-    <!-- no translation found for png_bitmap_title (3385912074130977032) -->
-    <skip />
+    <string name="png_bitmap_title" msgid="3385912074130977032">"Un PNG, enviat com a mapa de bits"</string>
     <string name="just_row_title" msgid="965700021568970725">"Només un títol"</string>
     <string name="title_with_app_icon_row_title" msgid="6294250714820740520">"Títol amb icona de l\'aplicació"</string>
     <string name="title_with_res_id_image_row_title" msgid="3813134904602875778">"Títol amb imatge d\'un identificador de recurs"</string>
@@ -280,8 +278,7 @@
     <string name="rows_demo_title" msgid="3198566660454251007">"Demostració de files"</string>
     <string name="text_icons_demo_title" msgid="8732943920672143201">"Demostracions de text i icones"</string>
     <string name="row_text_icons_demo_title" msgid="135167694047524905">"Demostració de files amb text i icones"</string>
-    <!-- no translation found for radio_button_list_demo_title (9082264324855338774) -->
-    <skip />
+    <string name="radio_button_list_demo_title" msgid="9082264324855338774">"Demostració de llistes amb botons d\'opció"</string>
     <string name="selectable_lists_demo_title" msgid="5492658731113129386">"Demostració de llistes seleccionables"</string>
     <string name="option_1_title" msgid="7221252541651471199">"Opció 1"</string>
     <string name="option_2_title" msgid="1905146448697963818">"Opció 2"</string>
@@ -295,8 +292,7 @@
     <string name="task_limit_reached_msg" msgid="6038763366777119364">"S\'ha arribat al límit de tasques\nEn continuar es forçarà l\'aturada de l\'aplicació"</string>
     <string name="task_step_of_title" msgid="2791717962535723839">"Pas de la tasca %1$d de %2$d"</string>
     <string name="task_step_of_text" msgid="4646729781462227219">"Fes clic per anar endavant"</string>
-    <!-- no translation found for toggle_button_demo_title (3179103600967398928) -->
-    <skip />
+    <string name="toggle_button_demo_title" msgid="3179103600967398928">"Demostració d\'un botó de commutació"</string>
     <string name="toggle_test_title" msgid="924485265152862631">"Test de commutació"</string>
     <string name="toggle_test_text" msgid="8107217216013312857">"Es permeten canvis amb estat"</string>
     <string name="toggle_test_first_toggle_title" msgid="3635022201072117680">"Activa la prova de commutació"</string>
@@ -311,10 +307,8 @@
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Prova de commutació desactivada"</string>
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Demostracions de plantilles diverses"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Demostracions de Showcase"</string>
-    <!-- no translation found for template_layouts_demo_title (788249269446087847) -->
-    <skip />
-    <!-- no translation found for grid_template_menu_demo_title (7096285873490705119) -->
-    <skip />
+    <string name="template_layouts_demo_title" msgid="788249269446087847">"Demostracions de dissenys de plantilles"</string>
+    <string name="grid_template_menu_demo_title" msgid="7096285873490705119">"Demostracions de plantilles de quadrícules"</string>
     <string name="voice_access_demo_title" msgid="3825223890895361496">"Pantalla de demostració de Voice Access"</string>
     <string name="user_interactions_demo_title" msgid="1356952319161314986">"Interaccions dels usuaris"</string>
     <string name="request_permission_menu_demo_title" msgid="4796486779527427017">"Demostracions de sol·licitud de permisos"</string>
@@ -337,6 +331,5 @@
     <string name="loading_toggle_enabled" msgid="8828072732804454994">"S\'ha activat la càrrega"</string>
     <string name="loading_toggle_disabled" msgid="7689738885077382673">"S\'ha desactivat la càrrega"</string>
     <string name="loading_screen" msgid="4771507490730308794">"Pantalla de càrrega"</string>
-    <!-- no translation found for vector_toggle_details (1301305340033556819) -->
-    <skip />
+    <string name="vector_toggle_details" msgid="1301305340033556819">"Commuta per afegir/suprimir color"</string>
 </resources>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-cs/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-cs/strings.xml
index 50627ff..a155b97 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-cs/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-cs/strings.xml
@@ -230,8 +230,7 @@
     <string name="long_msg_template_not_supported_title" msgid="8600719470226274925">"Nekompatibilní hostitel"</string>
     <string name="msg_template_demo_title" msgid="3895210951340409473">"Ukázka šablony zprávy"</string>
     <string name="msg_template_demo_text" msgid="2275291617716161409">"Zde bude zpráva.\nDalší text na druhém řádku."</string>
-    <!-- no translation found for short_msg_template_demo_title (6798738013668580714) -->
-    <skip />
+    <string name="short_msg_template_demo_title" msgid="6798738013668580714">"Ukázka šablony krátkých zpráv"</string>
     <string name="pane_template_demo_title" msgid="7804292600060341608">"Ukázka šablony panelu"</string>
     <string name="place_list_template_demo_title" msgid="2054022985455460469">"Ukázka šablony seznamu míst"</string>
     <string name="browse_places_title" msgid="7246005909846715898">"Procházet místa"</string>
@@ -267,8 +266,7 @@
     <string name="vector_with_tint_title" msgid="1022346419829696827">"Vektorový grafický prvek s tónováním"</string>
     <string name="vector_with_app_theme_attr_title" msgid="4890094482708376219">"Vektorový grafický prvek s atributem barvy z motivu aplikace"</string>
     <string name="png_res_title" msgid="7437083018336747544">"Soubor PNG, odeslán jako zdroj"</string>
-    <!-- no translation found for png_bitmap_title (3385912074130977032) -->
-    <skip />
+    <string name="png_bitmap_title" msgid="3385912074130977032">"Soubor PNG, odeslán jako rastrový obrázek"</string>
     <string name="just_row_title" msgid="965700021568970725">"Trochu"</string>
     <string name="title_with_app_icon_row_title" msgid="6294250714820740520">"Název s ikonou aplikace"</string>
     <string name="title_with_res_id_image_row_title" msgid="3813134904602875778">"Název s obrázkem ID zdroje"</string>
@@ -280,8 +278,7 @@
     <string name="rows_demo_title" msgid="3198566660454251007">"Ukázka řádků"</string>
     <string name="text_icons_demo_title" msgid="8732943920672143201">"Ukázky textu a ikon"</string>
     <string name="row_text_icons_demo_title" msgid="135167694047524905">"Ukázka řádků s textem a ikonami"</string>
-    <!-- no translation found for radio_button_list_demo_title (9082264324855338774) -->
-    <skip />
+    <string name="radio_button_list_demo_title" msgid="9082264324855338774">"Ukázka seznamů přepínačů"</string>
     <string name="selectable_lists_demo_title" msgid="5492658731113129386">"Ukázka seznamů s možností výběru"</string>
     <string name="option_1_title" msgid="7221252541651471199">"Možnost 1"</string>
     <string name="option_2_title" msgid="1905146448697963818">"Možnost 2"</string>
@@ -295,8 +292,7 @@
     <string name="task_limit_reached_msg" msgid="6038763366777119364">"Byl dosažen limit úkolů\nPokračováním vynutíte ukončení aplikace"</string>
     <string name="task_step_of_title" msgid="2791717962535723839">"Krok úkolu %1$d z %2$d"</string>
     <string name="task_step_of_text" msgid="4646729781462227219">"Kliknutím přejdete vpřed"</string>
-    <!-- no translation found for toggle_button_demo_title (3179103600967398928) -->
-    <skip />
+    <string name="toggle_button_demo_title" msgid="3179103600967398928">"Ukázka přepínače"</string>
     <string name="toggle_test_title" msgid="924485265152862631">"Test přepínače"</string>
     <string name="toggle_test_text" msgid="8107217216013312857">"Sledované změny jsou povoleny"</string>
     <string name="toggle_test_first_toggle_title" msgid="3635022201072117680">"Povolit test přepínače"</string>
@@ -311,10 +307,8 @@
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Test přepínače byl zakázán"</string>
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Ukázky různých šablon"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Ukázky Výběru"</string>
-    <!-- no translation found for template_layouts_demo_title (788249269446087847) -->
-    <skip />
-    <!-- no translation found for grid_template_menu_demo_title (7096285873490705119) -->
-    <skip />
+    <string name="template_layouts_demo_title" msgid="788249269446087847">"Ukázky šablon rozvržení"</string>
+    <string name="grid_template_menu_demo_title" msgid="7096285873490705119">"Ukázky šablon mřížek"</string>
     <string name="voice_access_demo_title" msgid="3825223890895361496">"Ukázka obrazovky pro ovládání hlasem"</string>
     <string name="user_interactions_demo_title" msgid="1356952319161314986">"Interakce uživatelů"</string>
     <string name="request_permission_menu_demo_title" msgid="4796486779527427017">"Ukázky žádostí o oprávnění"</string>
@@ -337,6 +331,5 @@
     <string name="loading_toggle_enabled" msgid="8828072732804454994">"Načítání povoleno"</string>
     <string name="loading_toggle_disabled" msgid="7689738885077382673">"Načítání zakázáno"</string>
     <string name="loading_screen" msgid="4771507490730308794">"Načítání obrazovky"</string>
-    <!-- no translation found for vector_toggle_details (1301305340033556819) -->
-    <skip />
+    <string name="vector_toggle_details" msgid="1301305340033556819">"Přepnutím přidáte/odeberete barvu"</string>
 </resources>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-es/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-es/strings.xml
index 2126817..d6b0803 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-es/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-es/strings.xml
@@ -230,8 +230,7 @@
     <string name="long_msg_template_not_supported_title" msgid="8600719470226274925">"Host no compatible"</string>
     <string name="msg_template_demo_title" msgid="3895210951340409473">"Demo de plantilla de mensaje"</string>
     <string name="msg_template_demo_text" msgid="2275291617716161409">"El mensaje va aquí.\nMás texto en la segunda línea."</string>
-    <!-- no translation found for short_msg_template_demo_title (6798738013668580714) -->
-    <skip />
+    <string name="short_msg_template_demo_title" msgid="6798738013668580714">"Demo de plantilla de mensaje corto"</string>
     <string name="pane_template_demo_title" msgid="7804292600060341608">"Demo de plantilla de panel"</string>
     <string name="place_list_template_demo_title" msgid="2054022985455460469">"Demo de plantilla de la lista de lugares"</string>
     <string name="browse_places_title" msgid="7246005909846715898">"Ver lugares"</string>
@@ -267,8 +266,7 @@
     <string name="vector_with_tint_title" msgid="1022346419829696827">"Un dibujable de vector con ajuste de tono"</string>
     <string name="vector_with_app_theme_attr_title" msgid="4890094482708376219">"Un dibujable de vector con un atributo de tema de la aplicación para su color"</string>
     <string name="png_res_title" msgid="7437083018336747544">"Un archivo PNG, enviado como recurso"</string>
-    <!-- no translation found for png_bitmap_title (3385912074130977032) -->
-    <skip />
+    <string name="png_bitmap_title" msgid="3385912074130977032">"Un archivo PNG, enviado como mapa de bits"</string>
     <string name="just_row_title" msgid="965700021568970725">"Solo un título"</string>
     <string name="title_with_app_icon_row_title" msgid="6294250714820740520">"Título con icono de la aplicación"</string>
     <string name="title_with_res_id_image_row_title" msgid="3813134904602875778">"Título con imagen de ID de recurso"</string>
@@ -280,8 +278,7 @@
     <string name="rows_demo_title" msgid="3198566660454251007">"Demo de filas"</string>
     <string name="text_icons_demo_title" msgid="8732943920672143201">"Demos de texto e iconos"</string>
     <string name="row_text_icons_demo_title" msgid="135167694047524905">"Demo de filas con texto e iconos"</string>
-    <!-- no translation found for radio_button_list_demo_title (9082264324855338774) -->
-    <skip />
+    <string name="radio_button_list_demo_title" msgid="9082264324855338774">"Demo de listas de botones de selección"</string>
     <string name="selectable_lists_demo_title" msgid="5492658731113129386">"Demo de listas seleccionables"</string>
     <string name="option_1_title" msgid="7221252541651471199">"Opción 1"</string>
     <string name="option_2_title" msgid="1905146448697963818">"Opción 2"</string>
@@ -295,8 +292,7 @@
     <string name="task_limit_reached_msg" msgid="6038763366777119364">"Se ha alcanzado el límite de tareas\nSi continuas, se forzará la detención de la aplicación"</string>
     <string name="task_step_of_title" msgid="2791717962535723839">"Paso %1$d de %2$d de la tarea"</string>
     <string name="task_step_of_text" msgid="4646729781462227219">"Haz clic para continuar"</string>
-    <!-- no translation found for toggle_button_demo_title (3179103600967398928) -->
-    <skip />
+    <string name="toggle_button_demo_title" msgid="3179103600967398928">"Demo de botón activar/desactivar"</string>
     <string name="toggle_test_title" msgid="924485265152862631">"Prueba del interruptor"</string>
     <string name="toggle_test_text" msgid="8107217216013312857">"Se permiten cambios de estado"</string>
     <string name="toggle_test_first_toggle_title" msgid="3635022201072117680">"Habilitar prueba del interruptor"</string>
@@ -311,10 +307,8 @@
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Prueba del interruptor inhabilitada"</string>
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Otras demos de plantillas"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Demos de Showcase"</string>
-    <!-- no translation found for template_layouts_demo_title (788249269446087847) -->
-    <skip />
-    <!-- no translation found for grid_template_menu_demo_title (7096285873490705119) -->
-    <skip />
+    <string name="template_layouts_demo_title" msgid="788249269446087847">"Demos de diseño de plantillas"</string>
+    <string name="grid_template_menu_demo_title" msgid="7096285873490705119">"Demos de plantilla de cuadrícula"</string>
     <string name="voice_access_demo_title" msgid="3825223890895361496">"Pantalla de la demo de Voice Access"</string>
     <string name="user_interactions_demo_title" msgid="1356952319161314986">"Interacciones de usuarios"</string>
     <string name="request_permission_menu_demo_title" msgid="4796486779527427017">"Demos de solicitud de permisos"</string>
@@ -337,6 +331,5 @@
     <string name="loading_toggle_enabled" msgid="8828072732804454994">"Carga habilitada"</string>
     <string name="loading_toggle_disabled" msgid="7689738885077382673">"Carga inhabilitada"</string>
     <string name="loading_screen" msgid="4771507490730308794">"Pantalla de carga"</string>
-    <!-- no translation found for vector_toggle_details (1301305340033556819) -->
-    <skip />
+    <string name="vector_toggle_details" msgid="1301305340033556819">"Usa el interruptor para añadir o quitar color"</string>
 </resources>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-et/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-et/strings.xml
index a28bfb4..45a8f41 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-et/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-et/strings.xml
@@ -230,8 +230,7 @@
     <string name="long_msg_template_not_supported_title" msgid="8600719470226274925">"Ühildumatu host"</string>
     <string name="msg_template_demo_title" msgid="3895210951340409473">"Sõnumimalli demo"</string>
     <string name="msg_template_demo_text" msgid="2275291617716161409">"Sõnum lisatakse siia.\nTeisel real on veel teksti."</string>
-    <!-- no translation found for short_msg_template_demo_title (6798738013668580714) -->
-    <skip />
+    <string name="short_msg_template_demo_title" msgid="6798738013668580714">"Lühisõnumi malli demo"</string>
     <string name="pane_template_demo_title" msgid="7804292600060341608">"Paanimalli demo"</string>
     <string name="place_list_template_demo_title" msgid="2054022985455460469">"Kohtade loendi malli demo"</string>
     <string name="browse_places_title" msgid="7246005909846715898">"Sirvige kohti"</string>
@@ -267,8 +266,7 @@
     <string name="vector_with_tint_title" msgid="1022346419829696827">"Joonistatav vektor, toonitud"</string>
     <string name="vector_with_app_theme_attr_title" msgid="4890094482708376219">"Joonistatav vektor, mille värv on rakenduse teema atribuut"</string>
     <string name="png_res_title" msgid="7437083018336747544">"Ressursina saadetud PNG"</string>
-    <!-- no translation found for png_bitmap_title (3385912074130977032) -->
-    <skip />
+    <string name="png_bitmap_title" msgid="3385912074130977032">"PNG-fail, saadetud rasterina"</string>
     <string name="just_row_title" msgid="965700021568970725">"Lihtsalt pealkiri"</string>
     <string name="title_with_app_icon_row_title" msgid="6294250714820740520">"Rakenduse ikooniga pealkiri"</string>
     <string name="title_with_res_id_image_row_title" msgid="3813134904602875778">"Ressursi ID pildiga pealkiri"</string>
@@ -280,8 +278,7 @@
     <string name="rows_demo_title" msgid="3198566660454251007">"Ridade demo"</string>
     <string name="text_icons_demo_title" msgid="8732943920672143201">"Teksti ja ikoonide demod"</string>
     <string name="row_text_icons_demo_title" msgid="135167694047524905">"Teksti ja ikoonidega ridade demo"</string>
-    <!-- no translation found for radio_button_list_demo_title (9082264324855338774) -->
-    <skip />
+    <string name="radio_button_list_demo_title" msgid="9082264324855338774">"Raadionuppude loendite demo"</string>
     <string name="selectable_lists_demo_title" msgid="5492658731113129386">"Valitavate loendite demo"</string>
     <string name="option_1_title" msgid="7221252541651471199">"1. valik"</string>
     <string name="option_2_title" msgid="1905146448697963818">"2. valik"</string>
@@ -295,8 +292,7 @@
     <string name="task_limit_reached_msg" msgid="6038763366777119364">"Ülesannete piirang on saavutatud\nJätkamisel rakendus sundsuletakse"</string>
     <string name="task_step_of_title" msgid="2791717962535723839">"Ülesande toiming %1$d %2$d-st"</string>
     <string name="task_step_of_text" msgid="4646729781462227219">"Klõpsake edasiliikumiseks"</string>
-    <!-- no translation found for toggle_button_demo_title (3179103600967398928) -->
-    <skip />
+    <string name="toggle_button_demo_title" msgid="3179103600967398928">"Lülitusnupu demo"</string>
     <string name="toggle_test_title" msgid="924485265152862631">"Testi lüliti"</string>
     <string name="toggle_test_text" msgid="8107217216013312857">"Olekulised muudatused on lubatud"</string>
     <string name="toggle_test_first_toggle_title" msgid="3635022201072117680">"Luba lülititest"</string>
@@ -311,10 +307,8 @@
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Lülititest on keelatud"</string>
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Mitmesuguste mallide demod"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Esiletõstmise demod"</string>
-    <!-- no translation found for template_layouts_demo_title (788249269446087847) -->
-    <skip />
-    <!-- no translation found for grid_template_menu_demo_title (7096285873490705119) -->
-    <skip />
+    <string name="template_layouts_demo_title" msgid="788249269446087847">"Malli paigutuse demod"</string>
+    <string name="grid_template_menu_demo_title" msgid="7096285873490705119">"Ruudustiku malli demod"</string>
     <string name="voice_access_demo_title" msgid="3825223890895361496">"Voice Accessi demo kuva"</string>
     <string name="user_interactions_demo_title" msgid="1356952319161314986">"Kasutaja interaktsioonid"</string>
     <string name="request_permission_menu_demo_title" msgid="4796486779527427017">"Lubade taotlemise demod"</string>
@@ -337,6 +331,5 @@
     <string name="loading_toggle_enabled" msgid="8828072732804454994">"Laadimine on lubatud"</string>
     <string name="loading_toggle_disabled" msgid="7689738885077382673">"Laadimine on keelatud"</string>
     <string name="loading_screen" msgid="4771507490730308794">"Laadimiskuva"</string>
-    <!-- no translation found for vector_toggle_details (1301305340033556819) -->
-    <skip />
+    <string name="vector_toggle_details" msgid="1301305340033556819">"Lülitage värvi lisamiseks/eemaldamiseks"</string>
 </resources>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-eu/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-eu/strings.xml
index 5bc973d..d552993 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-eu/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-eu/strings.xml
@@ -100,8 +100,7 @@
     <string name="example_2_text" msgid="718820705318661440">"Testua berdez dago"</string>
     <string name="example_3_text" msgid="977269832109695627">"Testua urdinez dago"</string>
     <string name="example_4_text" msgid="2043547015979437373">"Testua horiz dago"</string>
-    <!-- no translation found for example_5_text (8828804968749423500) -->
-    <skip />
+    <string name="example_5_text" msgid="8828804968749423500">"Testua kolore primario batean dago"</string>
     <string name="example_6_text" msgid="7991523168517599600">"Testua kolore sekundario batean dago"</string>
     <string name="color_demo" msgid="1822427636476178993">"Kolorearen demo-bertsioa"</string>
     <string name="list_limit" msgid="3023536401535417286">"Zerrenden muga"</string>
@@ -231,8 +230,7 @@
     <string name="long_msg_template_not_supported_title" msgid="8600719470226274925">"Ostalaria ez da bateragarria"</string>
     <string name="msg_template_demo_title" msgid="3895210951340409473">"Mezuen txantiloien demo-bertsioa"</string>
     <string name="msg_template_demo_text" msgid="2275291617716161409">"Hemen idatzi behar da mezua.\nBigarren lerroan testu gehiago duzu."</string>
-    <!-- no translation found for short_msg_template_demo_title (6798738013668580714) -->
-    <skip />
+    <string name="short_msg_template_demo_title" msgid="6798738013668580714">"Mezu laburren txantiloiaren demo-bertsioa"</string>
     <string name="pane_template_demo_title" msgid="7804292600060341608">"Panelen txantiloien demo-bertsioa"</string>
     <string name="place_list_template_demo_title" msgid="2054022985455460469">"Tokien zerrenden txantiloien demo-bertsioa"</string>
     <string name="browse_places_title" msgid="7246005909846715898">"Arakatu tokiak"</string>
@@ -268,8 +266,7 @@
     <string name="vector_with_tint_title" msgid="1022346419829696827">"Marraz daitekeen bektore tonudun bat"</string>
     <string name="vector_with_app_theme_attr_title" msgid="4890094482708376219">"Marraz daitekeen bektore bat, aplikazioaren gaiaren kolorearen atributua duena"</string>
     <string name="png_res_title" msgid="7437083018336747544">"Baliabide gisa bidalitako PNG bat"</string>
-    <!-- no translation found for png_bitmap_title (3385912074130977032) -->
-    <skip />
+    <string name="png_bitmap_title" msgid="3385912074130977032">"Bit-mapa gisa bidalitako PNG bat"</string>
     <string name="just_row_title" msgid="965700021568970725">"Izen bat baino ez"</string>
     <string name="title_with_app_icon_row_title" msgid="6294250714820740520">"Aplikazioaren ikonoa duen izena"</string>
     <string name="title_with_res_id_image_row_title" msgid="3813134904602875778">"Baliabide IDaren irudia duen izena"</string>
@@ -281,8 +278,7 @@
     <string name="rows_demo_title" msgid="3198566660454251007">"Errenkaden demo-bertsioa"</string>
     <string name="text_icons_demo_title" msgid="8732943920672143201">"Testuen eta ikonoen demo-bertsioak"</string>
     <string name="row_text_icons_demo_title" msgid="135167694047524905">"Errenkada testudun eta ikonodunen demo-bertsioa"</string>
-    <!-- no translation found for radio_button_list_demo_title (9082264324855338774) -->
-    <skip />
+    <string name="radio_button_list_demo_title" msgid="9082264324855338774">"Aukera-botoien zerrendaren demo-bertsioa"</string>
     <string name="selectable_lists_demo_title" msgid="5492658731113129386">"Hauta daitezkeen zerrenden demo-bertsioa"</string>
     <string name="option_1_title" msgid="7221252541651471199">"1. aukera"</string>
     <string name="option_2_title" msgid="1905146448697963818">"2. aukera"</string>
@@ -296,8 +292,7 @@
     <string name="task_limit_reached_msg" msgid="6038763366777119364">"Zereginen mugara iritsi zara\nAurrera eginez gero, aplikazioa gelditzera behartuko duzu"</string>
     <string name="task_step_of_title" msgid="2791717962535723839">"Zereginaren %1$d/%2$d urratsa"</string>
     <string name="task_step_of_text" msgid="4646729781462227219">"Aurrera egiteko, sakatu hau"</string>
-    <!-- no translation found for toggle_button_demo_title (3179103600967398928) -->
-    <skip />
+    <string name="toggle_button_demo_title" msgid="3179103600967398928">"Etengailuaren demo-bertsioa"</string>
     <string name="toggle_test_title" msgid="924485265152862631">"Etengailuaren proba"</string>
     <string name="toggle_test_text" msgid="8107217216013312857">"Aldaketa egoeradunak egin daitezke"</string>
     <string name="toggle_test_first_toggle_title" msgid="3635022201072117680">"Gaitu etengailuaren proba"</string>
@@ -312,10 +307,8 @@
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Desgaitu da etengailuaren proba"</string>
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Bestelako txantiloien demo-bertsioak"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Erakutsi demo-bertsioak"</string>
-    <!-- no translation found for template_layouts_demo_title (788249269446087847) -->
-    <skip />
-    <!-- no translation found for grid_template_menu_demo_title (7096285873490705119) -->
-    <skip />
+    <string name="template_layouts_demo_title" msgid="788249269446087847">"Txantiloi-diseinuen demo-bertsioak"</string>
+    <string name="grid_template_menu_demo_title" msgid="7096285873490705119">"Sareten txantiloien demo-bertsioak"</string>
     <string name="voice_access_demo_title" msgid="3825223890895361496">"Ahots bidezko sarbidearen demo-bertsioaren pantaila"</string>
     <string name="user_interactions_demo_title" msgid="1356952319161314986">"Erabiltzailearen interakzioak"</string>
     <string name="request_permission_menu_demo_title" msgid="4796486779527427017">"Baimen-eskaeren demo-bertsioak"</string>
@@ -332,18 +325,11 @@
     <string name="location_3_description" msgid="3982142774088944850">"Koloreztatutako testu-markatzailea"</string>
     <string name="location_4_description" msgid="6560365445044381911">"Irudiaren bit-mapa"</string>
     <string name="location_description_text_label" msgid="2779911545316756419">"Testuaren etiketa"</string>
-    <!-- no translation found for parking_vs_driving_demo_title (3367862800135053111) -->
-    <skip />
-    <!-- no translation found for latest_feature_details (6843008350392721502) -->
-    <skip />
-    <!-- no translation found for latest_feature_title (7929405790070777460) -->
-    <skip />
-    <!-- no translation found for loading_toggle_enabled (8828072732804454994) -->
-    <skip />
-    <!-- no translation found for loading_toggle_disabled (7689738885077382673) -->
-    <skip />
-    <!-- no translation found for loading_screen (4771507490730308794) -->
-    <skip />
-    <!-- no translation found for vector_toggle_details (1301305340033556819) -->
-    <skip />
+    <string name="parking_vs_driving_demo_title" msgid="3367862800135053111">"Aparkatzeko eta gidatzeko moduak konparatzen dituen demo-bertsioa"</string>
+    <string name="latest_feature_details" msgid="6843008350392721502">"Autoaren pantailak"</string>
+    <string name="latest_feature_title" msgid="7929405790070777460">"Azken eginbideak"</string>
+    <string name="loading_toggle_enabled" msgid="8828072732804454994">"Kargatze-prozesua gaituta dago"</string>
+    <string name="loading_toggle_disabled" msgid="7689738885077382673">"Kargatze-prozesua desgaituta dago"</string>
+    <string name="loading_screen" msgid="4771507490730308794">"Pantaila kargatzen"</string>
+    <string name="vector_toggle_details" msgid="1301305340033556819">"Kolorea gehitzeko/kentzeko etengailua"</string>
 </resources>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-fa/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-fa/strings.xml
index 9e872c7..2a67037 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-fa/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-fa/strings.xml
@@ -230,8 +230,7 @@
     <string name="long_msg_template_not_supported_title" msgid="8600719470226274925">"میزبان سازگار نیست"</string>
     <string name="msg_template_demo_title" msgid="3895210951340409473">"نمونه الگوی پیام"</string>
     <string name="msg_template_demo_text" msgid="2275291617716161409">"پیام اینجا می‌رود.\nنوشتار بیشتر در خط دوم."</string>
-    <!-- no translation found for short_msg_template_demo_title (6798738013668580714) -->
-    <skip />
+    <string name="short_msg_template_demo_title" msgid="6798738013668580714">"نسخه نمونه الگوی پیام کوتاه"</string>
     <string name="pane_template_demo_title" msgid="7804292600060341608">"الگوی قاب نمونه"</string>
     <string name="place_list_template_demo_title" msgid="2054022985455460469">"نمونه الگوی فهرست مکان"</string>
     <string name="browse_places_title" msgid="7246005909846715898">"مرور مکان‌ها"</string>
@@ -267,8 +266,7 @@
     <string name="vector_with_tint_title" msgid="1022346419829696827">"ترسیمی بُرداری، با سایه‌رنگ"</string>
     <string name="vector_with_app_theme_attr_title" msgid="4890094482708376219">"ترسیمی بُرداری، با مشخصه زمینه برنامه برای رنگ آن"</string>
     <string name="png_res_title" msgid="7437083018336747544">"‏فایل PNG، به‌عنوان منبع ارسال شد"</string>
-    <!-- no translation found for png_bitmap_title (3385912074130977032) -->
-    <skip />
+    <string name="png_bitmap_title" msgid="3385912074130977032">"‏PNG، ارسال به‌عنوان بیت‌مپ"</string>
     <string name="just_row_title" msgid="965700021568970725">"فقط یک عنوان"</string>
     <string name="title_with_app_icon_row_title" msgid="6294250714820740520">"عنوان با نماد برنامه"</string>
     <string name="title_with_res_id_image_row_title" msgid="3813134904602875778">"عنوان با تصویر شناسه منبع"</string>
@@ -280,8 +278,7 @@
     <string name="rows_demo_title" msgid="3198566660454251007">"ردیف‌های نمونه"</string>
     <string name="text_icons_demo_title" msgid="8732943920672143201">"نوشتار و نمادهای نمونه"</string>
     <string name="row_text_icons_demo_title" msgid="135167694047524905">"نمونه ردیف‌ها به‌همراه نوشتار و نمادها"</string>
-    <!-- no translation found for radio_button_list_demo_title (9082264324855338774) -->
-    <skip />
+    <string name="radio_button_list_demo_title" msgid="9082264324855338774">"نسخه نمونه فهرست‌های دکمه رادیو"</string>
     <string name="selectable_lists_demo_title" msgid="5492658731113129386">"فهرست‌های قابل‌انتخاب نمونه"</string>
     <string name="option_1_title" msgid="7221252541651471199">"گزینه ١"</string>
     <string name="option_2_title" msgid="1905146448697963818">"گزینه ۲"</string>
@@ -295,8 +292,7 @@
     <string name="task_limit_reached_msg" msgid="6038763366777119364">"به حد مجاز تکلیف رسیدید\nاگر ادامه دهید، برنامه به‌اجبار متوقف خواهد شد"</string>
     <string name="task_step_of_title" msgid="2791717962535723839">"‏مرحله %1$d از %2$d تکلیف"</string>
     <string name="task_step_of_text" msgid="4646729781462227219">"برای ادامه دادن، کلیک کنید"</string>
-    <!-- no translation found for toggle_button_demo_title (3179103600967398928) -->
-    <skip />
+    <string name="toggle_button_demo_title" msgid="3179103600967398928">"نسخه نمونه دکمه مبدل"</string>
     <string name="toggle_test_title" msgid="924485265152862631">"امتحان کردن تغییر وضعیت"</string>
     <string name="toggle_test_text" msgid="8107217216013312857">"تغییرات حالت‌مند مجاز است"</string>
     <string name="toggle_test_first_toggle_title" msgid="3635022201072117680">"فعال کردن آزمایش تغییر وضعیت"</string>
@@ -311,10 +307,8 @@
     <string name="toggle_test_disabled" msgid="8366040658408451664">"آزمایش تغییر وضعیت غیرفعال شد"</string>
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"الگوهای متفرقه نمونه"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"نمایش نمونه‌ها"</string>
-    <!-- no translation found for template_layouts_demo_title (788249269446087847) -->
-    <skip />
-    <!-- no translation found for grid_template_menu_demo_title (7096285873490705119) -->
-    <skip />
+    <string name="template_layouts_demo_title" msgid="788249269446087847">"نسخه‌های نمونه طرح‌بندی الگو"</string>
+    <string name="grid_template_menu_demo_title" msgid="7096285873490705119">"نسخه‌های نمونه الگوی جدولی"</string>
     <string name="voice_access_demo_title" msgid="3825223890895361496">"صفحه نمونه دسترسی صوتی"</string>
     <string name="user_interactions_demo_title" msgid="1356952319161314986">"تعاملات کاربران"</string>
     <string name="request_permission_menu_demo_title" msgid="4796486779527427017">"درخواست اجازه برای نسخه‌های نمونه"</string>
@@ -337,6 +331,5 @@
     <string name="loading_toggle_enabled" msgid="8828072732804454994">"بار کردن فعال شد"</string>
     <string name="loading_toggle_disabled" msgid="7689738885077382673">"بار کردن غیرفعال شد"</string>
     <string name="loading_screen" msgid="4771507490730308794">"صفحه بار کردن"</string>
-    <!-- no translation found for vector_toggle_details (1301305340033556819) -->
-    <skip />
+    <string name="vector_toggle_details" msgid="1301305340033556819">"برای افزودن/ برداشتن رنگ، تغییر وضعیت دهید"</string>
 </resources>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-fi/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-fi/strings.xml
index f0a3e2d..252b6b5 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-fi/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-fi/strings.xml
@@ -230,8 +230,7 @@
     <string name="long_msg_template_not_supported_title" msgid="8600719470226274925">"Yhteensopimaton isäntä"</string>
     <string name="msg_template_demo_title" msgid="3895210951340409473">"Viestimallin esittely"</string>
     <string name="msg_template_demo_text" msgid="2275291617716161409">"Viesti tulee tähän.\nLisää tekstiä toisella rivillä."</string>
-    <!-- no translation found for short_msg_template_demo_title (6798738013668580714) -->
-    <skip />
+    <string name="short_msg_template_demo_title" msgid="6798738013668580714">"Lyhyen viestimallin esittely"</string>
     <string name="pane_template_demo_title" msgid="7804292600060341608">"Ruutumallin esittely"</string>
     <string name="place_list_template_demo_title" msgid="2054022985455460469">"Paikkalistamallin esittely"</string>
     <string name="browse_places_title" msgid="7246005909846715898">"Selaa paikkoja"</string>
@@ -267,8 +266,7 @@
     <string name="vector_with_tint_title" msgid="1022346419829696827">"Vektoripiirros sävytyksellä"</string>
     <string name="vector_with_app_theme_attr_title" msgid="4890094482708376219">"Vektoripiirros, jonka värinä on sovelluksen teema-attribuutti"</string>
     <string name="png_res_title" msgid="7437083018336747544">"PNG, lähetetty resurssina"</string>
-    <!-- no translation found for png_bitmap_title (3385912074130977032) -->
-    <skip />
+    <string name="png_bitmap_title" msgid="3385912074130977032">"PNG-tiedosto, lähetetty bittikarttana"</string>
     <string name="just_row_title" msgid="965700021568970725">"Vain otsikko"</string>
     <string name="title_with_app_icon_row_title" msgid="6294250714820740520">"Otsikko sovelluksen kuvakkeen kanssa"</string>
     <string name="title_with_res_id_image_row_title" msgid="3813134904602875778">"Otsikko resurssin tunnuksen kuvan kanssa"</string>
@@ -280,8 +278,7 @@
     <string name="rows_demo_title" msgid="3198566660454251007">"Rivien esittely"</string>
     <string name="text_icons_demo_title" msgid="8732943920672143201">"Tekstin ja kuvakkeiden esittelyt"</string>
     <string name="row_text_icons_demo_title" msgid="135167694047524905">"Esittely riveistä, joilla on tekstiä ja kuvakkeita"</string>
-    <!-- no translation found for radio_button_list_demo_title (9082264324855338774) -->
-    <skip />
+    <string name="radio_button_list_demo_title" msgid="9082264324855338774">"Valintanappilistojen esittely"</string>
     <string name="selectable_lists_demo_title" msgid="5492658731113129386">"Valittavien listojen esittely"</string>
     <string name="option_1_title" msgid="7221252541651471199">"Vaihtoehto 1"</string>
     <string name="option_2_title" msgid="1905146448697963818">"Vaihtoehto 2"</string>
@@ -295,8 +292,7 @@
     <string name="task_limit_reached_msg" msgid="6038763366777119364">"Tehtäväraja saavutettu\nEteneminen pakottaa sovelluksen sulkeutumaan"</string>
     <string name="task_step_of_title" msgid="2791717962535723839">"Tehtävän vaihe %1$d/%2$d"</string>
     <string name="task_step_of_text" msgid="4646729781462227219">"Siirry eteenpäin klikkaamalla"</string>
-    <!-- no translation found for toggle_button_demo_title (3179103600967398928) -->
-    <skip />
+    <string name="toggle_button_demo_title" msgid="3179103600967398928">"Päälle/pois-painikkeen esittely"</string>
     <string name="toggle_test_title" msgid="924485265152862631">"Vaihtotesti"</string>
     <string name="toggle_test_text" msgid="8107217216013312857">"Tilattomat muutokset ovat sallittuja"</string>
     <string name="toggle_test_first_toggle_title" msgid="3635022201072117680">"Ota vaihtotesti käyttöön"</string>
@@ -311,10 +307,8 @@
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Vaihtotesti pois käytöstä"</string>
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Sekalaisten mallien esittelyt"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Showcase-esittelyt"</string>
-    <!-- no translation found for template_layouts_demo_title (788249269446087847) -->
-    <skip />
-    <!-- no translation found for grid_template_menu_demo_title (7096285873490705119) -->
-    <skip />
+    <string name="template_layouts_demo_title" msgid="788249269446087847">"Malliasettelujen esittelyt"</string>
+    <string name="grid_template_menu_demo_title" msgid="7096285873490705119">"Ruudukkomallin esittely"</string>
     <string name="voice_access_demo_title" msgid="3825223890895361496">"Voice Accessin esittelynäyttö"</string>
     <string name="user_interactions_demo_title" msgid="1356952319161314986">"Käyttäjän toiminta"</string>
     <string name="request_permission_menu_demo_title" msgid="4796486779527427017">"Pyydä lupien esittelyjä"</string>
@@ -337,6 +331,5 @@
     <string name="loading_toggle_enabled" msgid="8828072732804454994">"Lataaminen käytössä"</string>
     <string name="loading_toggle_disabled" msgid="7689738885077382673">"Lataaminen pois käytöstä"</string>
     <string name="loading_screen" msgid="4771507490730308794">"Latausnäyttö"</string>
-    <!-- no translation found for vector_toggle_details (1301305340033556819) -->
-    <skip />
+    <string name="vector_toggle_details" msgid="1301305340033556819">"Lisää/poista väri"</string>
 </resources>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-fr/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-fr/strings.xml
index a589035..a4d8f66 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-fr/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-fr/strings.xml
@@ -230,8 +230,7 @@
     <string name="long_msg_template_not_supported_title" msgid="8600719470226274925">"Hôte incompatible"</string>
     <string name="msg_template_demo_title" msgid="3895210951340409473">"Démo du modèle de message"</string>
     <string name="msg_template_demo_text" msgid="2275291617716161409">"Emplacement du message.\nPlus de texte sur la 2e ligne."</string>
-    <!-- no translation found for short_msg_template_demo_title (6798738013668580714) -->
-    <skip />
+    <string name="short_msg_template_demo_title" msgid="6798738013668580714">"Démo du modèle de message court"</string>
     <string name="pane_template_demo_title" msgid="7804292600060341608">"Démo du modèle de volet"</string>
     <string name="place_list_template_demo_title" msgid="2054022985455460469">"Démo du modèle de la liste des lieux"</string>
     <string name="browse_places_title" msgid="7246005909846715898">"Parcourir les lieux"</string>
@@ -267,8 +266,7 @@
     <string name="vector_with_tint_title" msgid="1022346419829696827">"Un drawable vectoriel, avec une teinte"</string>
     <string name="vector_with_app_theme_attr_title" msgid="4890094482708376219">"Un drawable vectoriel, avec l\'attribut de thème de l\'appli comme couleur"</string>
     <string name="png_res_title" msgid="7437083018336747544">"Image PNG, envoyée comme ressource"</string>
-    <!-- no translation found for png_bitmap_title (3385912074130977032) -->
-    <skip />
+    <string name="png_bitmap_title" msgid="3385912074130977032">"Image PNG, envoyée comme bitmap"</string>
     <string name="just_row_title" msgid="965700021568970725">"Titre uniquement"</string>
     <string name="title_with_app_icon_row_title" msgid="6294250714820740520">"Titre avec icône d\'appli"</string>
     <string name="title_with_res_id_image_row_title" msgid="3813134904602875778">"Titre avec image d\'ID de ressource"</string>
@@ -280,8 +278,7 @@
     <string name="rows_demo_title" msgid="3198566660454251007">"Démo des lignes"</string>
     <string name="text_icons_demo_title" msgid="8732943920672143201">"Démos du texte et des icônes"</string>
     <string name="row_text_icons_demo_title" msgid="135167694047524905">"Démo des lignes avec texte et icônes"</string>
-    <!-- no translation found for radio_button_list_demo_title (9082264324855338774) -->
-    <skip />
+    <string name="radio_button_list_demo_title" msgid="9082264324855338774">"Démo de listes de cases d\'option"</string>
     <string name="selectable_lists_demo_title" msgid="5492658731113129386">"Démo des listes sélectionnables"</string>
     <string name="option_1_title" msgid="7221252541651471199">"Option 1"</string>
     <string name="option_2_title" msgid="1905146448697963818">"Option 2"</string>
@@ -295,8 +292,7 @@
     <string name="task_limit_reached_msg" msgid="6038763366777119364">"Limite de tâche atteinte\nContinuer forcera l\'arrêt de l\'appli"</string>
     <string name="task_step_of_title" msgid="2791717962535723839">"Étape %1$d sur %2$d"</string>
     <string name="task_step_of_text" msgid="4646729781462227219">"Cliquer pour continuer"</string>
-    <!-- no translation found for toggle_button_demo_title (3179103600967398928) -->
-    <skip />
+    <string name="toggle_button_demo_title" msgid="3179103600967398928">"Démo du bouton d\'activation"</string>
     <string name="toggle_test_title" msgid="924485265152862631">"Activer/Désactiver le test"</string>
     <string name="toggle_test_text" msgid="8107217216013312857">"Les modifications avec état sont autorisées"</string>
     <string name="toggle_test_first_toggle_title" msgid="3635022201072117680">"Activer le test d\'activation/de désactivation"</string>
@@ -311,10 +307,8 @@
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Test d\'activation/de désactivation désactivé"</string>
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Démos de divers modèles"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Présenter les démos"</string>
-    <!-- no translation found for template_layouts_demo_title (788249269446087847) -->
-    <skip />
-    <!-- no translation found for grid_template_menu_demo_title (7096285873490705119) -->
-    <skip />
+    <string name="template_layouts_demo_title" msgid="788249269446087847">"Démos de mise en page du modèle"</string>
+    <string name="grid_template_menu_demo_title" msgid="7096285873490705119">"Démo du modèle de grille"</string>
     <string name="voice_access_demo_title" msgid="3825223890895361496">"Écran de démo Voice Access"</string>
     <string name="user_interactions_demo_title" msgid="1356952319161314986">"Interactions des utilisateurs"</string>
     <string name="request_permission_menu_demo_title" msgid="4796486779527427017">"Démos de demandes d\'autorisation"</string>
@@ -337,6 +331,5 @@
     <string name="loading_toggle_enabled" msgid="8828072732804454994">"Chargement activé"</string>
     <string name="loading_toggle_disabled" msgid="7689738885077382673">"Chargement désactivé"</string>
     <string name="loading_screen" msgid="4771507490730308794">"Écran de chargement"</string>
-    <!-- no translation found for vector_toggle_details (1301305340033556819) -->
-    <skip />
+    <string name="vector_toggle_details" msgid="1301305340033556819">"Activer/Désactiver pour ajouter ou supprimer une couleur"</string>
 </resources>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-gl/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-gl/strings.xml
index bedbb34..27f3587 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-gl/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-gl/strings.xml
@@ -230,8 +230,7 @@
     <string name="long_msg_template_not_supported_title" msgid="8600719470226274925">"Host non compatible"</string>
     <string name="msg_template_demo_title" msgid="3895210951340409473">"Demostración de modelo de mensaxe"</string>
     <string name="msg_template_demo_text" msgid="2275291617716161409">"A mensaxe vai aquí.\nMáis texto na segunda liña."</string>
-    <!-- no translation found for short_msg_template_demo_title (6798738013668580714) -->
-    <skip />
+    <string name="short_msg_template_demo_title" msgid="6798738013668580714">"Demostración de modelo de mensaxe curta"</string>
     <string name="pane_template_demo_title" msgid="7804292600060341608">"Demostración de modelo de panel"</string>
     <string name="place_list_template_demo_title" msgid="2054022985455460469">"Demostración de modelo de lista de lugares"</string>
     <string name="browse_places_title" msgid="7246005909846715898">"Explorar lugares"</string>
@@ -267,8 +266,7 @@
     <string name="vector_with_tint_title" msgid="1022346419829696827">"Un debuxable de vector con axuste de ton"</string>
     <string name="vector_with_app_theme_attr_title" msgid="4890094482708376219">"Un debuxable de vector cun atributo de tema da aplicación para a súa cor"</string>
     <string name="png_res_title" msgid="7437083018336747544">"Un ficheiro PNG, enviado como recurso"</string>
-    <!-- no translation found for png_bitmap_title (3385912074130977032) -->
-    <skip />
+    <string name="png_bitmap_title" msgid="3385912074130977032">"Un ficheiro PNG, enviado como mapa de bits"</string>
     <string name="just_row_title" msgid="965700021568970725">"Só un título"</string>
     <string name="title_with_app_icon_row_title" msgid="6294250714820740520">"Título con icona da aplicación"</string>
     <string name="title_with_res_id_image_row_title" msgid="3813134904602875778">"Título con imaxe de código de identificación de recurso"</string>
@@ -280,8 +278,7 @@
     <string name="rows_demo_title" msgid="3198566660454251007">"Demostración de filas"</string>
     <string name="text_icons_demo_title" msgid="8732943920672143201">"Demostracións de texto e iconas"</string>
     <string name="row_text_icons_demo_title" msgid="135167694047524905">"Demostración de filas con texto e iconas"</string>
-    <!-- no translation found for radio_button_list_demo_title (9082264324855338774) -->
-    <skip />
+    <string name="radio_button_list_demo_title" msgid="9082264324855338774">"Demostración de listas de botóns de opción"</string>
     <string name="selectable_lists_demo_title" msgid="5492658731113129386">"Demostración de listas seleccionables"</string>
     <string name="option_1_title" msgid="7221252541651471199">"Opción 1"</string>
     <string name="option_2_title" msgid="1905146448697963818">"Opción 2"</string>
@@ -295,8 +292,7 @@
     <string name="task_limit_reached_msg" msgid="6038763366777119364">"Alcanzouse o límite de tarefas\nSe continúas, forzarase a detención da aplicación"</string>
     <string name="task_step_of_title" msgid="2791717962535723839">"Paso %1$d de %2$d da tarefa"</string>
     <string name="task_step_of_text" msgid="4646729781462227219">"Fai clic para continuar"</string>
-    <!-- no translation found for toggle_button_demo_title (3179103600967398928) -->
-    <skip />
+    <string name="toggle_button_demo_title" msgid="3179103600967398928">"Demostración de botón de activación/desactivación"</string>
     <string name="toggle_test_title" msgid="924485265152862631">"Proba do interruptor"</string>
     <string name="toggle_test_text" msgid="8107217216013312857">"Os cambios de estado están permitidos"</string>
     <string name="toggle_test_first_toggle_title" msgid="3635022201072117680">"Activar proba do interruptor"</string>
@@ -311,10 +307,8 @@
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Desactivouse a proba do interruptor"</string>
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Outras demostracións de modelos"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Demostracións de Showcase"</string>
-    <!-- no translation found for template_layouts_demo_title (788249269446087847) -->
-    <skip />
-    <!-- no translation found for grid_template_menu_demo_title (7096285873490705119) -->
-    <skip />
+    <string name="template_layouts_demo_title" msgid="788249269446087847">"Demostracións de deseños de modelo"</string>
+    <string name="grid_template_menu_demo_title" msgid="7096285873490705119">"Demostracións de modelos de cuadrícula"</string>
     <string name="voice_access_demo_title" msgid="3825223890895361496">"Pantalla de demostración de Voice Access"</string>
     <string name="user_interactions_demo_title" msgid="1356952319161314986">"Interaccións do usuario"</string>
     <string name="request_permission_menu_demo_title" msgid="4796486779527427017">"Demostracións de solicitude de permisos"</string>
@@ -337,6 +331,5 @@
     <string name="loading_toggle_enabled" msgid="8828072732804454994">"Activouse a carga"</string>
     <string name="loading_toggle_disabled" msgid="7689738885077382673">"Desactivouse a carga"</string>
     <string name="loading_screen" msgid="4771507490730308794">"Pantalla de carga"</string>
-    <!-- no translation found for vector_toggle_details (1301305340033556819) -->
-    <skip />
+    <string name="vector_toggle_details" msgid="1301305340033556819">"Usa o interruptor para engadir ou quitar cor"</string>
 </resources>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-hi/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-hi/strings.xml
index 39be2f8..cd68634 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-hi/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-hi/strings.xml
@@ -230,8 +230,7 @@
     <string name="long_msg_template_not_supported_title" msgid="8600719470226274925">"होस्ट काम नहीं कर रहा है"</string>
     <string name="msg_template_demo_title" msgid="3895210951340409473">"मैसेज के टेंप्लेट का डेमो"</string>
     <string name="msg_template_demo_text" msgid="2275291617716161409">"मैसेज यहां पर लिखा जाएगा.\nज़्यादा लिखने के लिए, अगली लाइन पर जाएं."</string>
-    <!-- no translation found for short_msg_template_demo_title (6798738013668580714) -->
-    <skip />
+    <string name="short_msg_template_demo_title" msgid="6798738013668580714">"छोटे मैसेज के टेंप्लेट का डेमो"</string>
     <string name="pane_template_demo_title" msgid="7804292600060341608">"पैनल के टेंप्लेट का डेमो"</string>
     <string name="place_list_template_demo_title" msgid="2054022985455460469">"जगह की सूची के टेंप्लेट का डेमो"</string>
     <string name="browse_places_title" msgid="7246005909846715898">"जगहें ब्राउज़ करें"</string>
@@ -267,8 +266,7 @@
     <string name="vector_with_tint_title" msgid="1022346419829696827">"ड्रॉ करने लायक, रंगीन वेक्टर"</string>
     <string name="vector_with_app_theme_attr_title" msgid="4890094482708376219">"ऐप्लिकेशन की थीम के ऐट्रिब्यूट के रंग में, ड्रॉ करने लायक वेक्टर"</string>
     <string name="png_res_title" msgid="7437083018336747544">"रिसॉर्स के तौर पर भेजी गई PNG इमेज"</string>
-    <!-- no translation found for png_bitmap_title (3385912074130977032) -->
-    <skip />
+    <string name="png_bitmap_title" msgid="3385912074130977032">"बिट मैप के तौर पर भेजी गई PNG फ़ाइल"</string>
     <string name="just_row_title" msgid="965700021568970725">"सिर्फ़ एक शीर्षक है"</string>
     <string name="title_with_app_icon_row_title" msgid="6294250714820740520">"ऐप्लिकेशन आइकॉन के साथ शीर्षक"</string>
     <string name="title_with_res_id_image_row_title" msgid="3813134904602875778">"रिसॉर्स आईडी इमेज के साथ शीर्षक"</string>
@@ -280,8 +278,7 @@
     <string name="rows_demo_title" msgid="3198566660454251007">"पंक्तियों का डेमो"</string>
     <string name="text_icons_demo_title" msgid="8732943920672143201">"टेक्स्ट और आइकॉन के डेमो"</string>
     <string name="row_text_icons_demo_title" msgid="135167694047524905">"टेक्स्ट और आइकॉन वाली पंक्तियों का डेमो"</string>
-    <!-- no translation found for radio_button_list_demo_title (9082264324855338774) -->
-    <skip />
+    <string name="radio_button_list_demo_title" msgid="9082264324855338774">"रेडियो बटन की सूचियों का डेमो"</string>
     <string name="selectable_lists_demo_title" msgid="5492658731113129386">"चुनी जा सकने वाली सूचियों का डेमो"</string>
     <string name="option_1_title" msgid="7221252541651471199">"पहला विकल्प"</string>
     <string name="option_2_title" msgid="1905146448697963818">"दूसरा विकल्प"</string>
@@ -295,8 +292,7 @@
     <string name="task_limit_reached_msg" msgid="6038763366777119364">"टास्क की सीमा पूरी हुई\nआगे जाने पर, ऐप्लिकेशन को ज़बरदस्ती रोक दिया जाएगा"</string>
     <string name="task_step_of_title" msgid="2791717962535723839">"टास्क के %2$d चरणों में से %1$d चरण"</string>
     <string name="task_step_of_text" msgid="4646729781462227219">"आगे जाने के लिए क्लिक करें"</string>
-    <!-- no translation found for toggle_button_demo_title (3179103600967398928) -->
-    <skip />
+    <string name="toggle_button_demo_title" msgid="3179103600967398928">"टॉगल बटन का डेमो"</string>
     <string name="toggle_test_title" msgid="924485265152862631">"टॉगल टेस्ट"</string>
     <string name="toggle_test_text" msgid="8107217216013312857">"स्टेटफ़ुल बदलाव करने की अनुमति है"</string>
     <string name="toggle_test_first_toggle_title" msgid="3635022201072117680">"टॉगल टेस्ट चालू करें"</string>
@@ -311,10 +307,8 @@
     <string name="toggle_test_disabled" msgid="8366040658408451664">"टॉगल टेस्ट बंद किया गया"</string>
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"दूसरे टेंप्लेट के डेमो"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"डेमो दिखाएं"</string>
-    <!-- no translation found for template_layouts_demo_title (788249269446087847) -->
-    <skip />
-    <!-- no translation found for grid_template_menu_demo_title (7096285873490705119) -->
-    <skip />
+    <string name="template_layouts_demo_title" msgid="788249269446087847">"टेंप्लेट लेआउट के डेमो"</string>
+    <string name="grid_template_menu_demo_title" msgid="7096285873490705119">"टेंप्लेट के ग्रिड टाइप का डेमो"</string>
     <string name="voice_access_demo_title" msgid="3825223890895361496">"Voice Access के डेमो की स्क्रीन"</string>
     <string name="user_interactions_demo_title" msgid="1356952319161314986">"यूज़र इंटरैक्शन"</string>
     <string name="request_permission_menu_demo_title" msgid="4796486779527427017">"अनुमतियों के अनुरोध का डेमो"</string>
@@ -337,6 +331,5 @@
     <string name="loading_toggle_enabled" msgid="8828072732804454994">"लोड होने की सेटिंग चालू की गई"</string>
     <string name="loading_toggle_disabled" msgid="7689738885077382673">"लोड होने की सेटिंग रोकी गई"</string>
     <string name="loading_screen" msgid="4771507490730308794">"स्क्रीन लोड हो रही है"</string>
-    <!-- no translation found for vector_toggle_details (1301305340033556819) -->
-    <skip />
+    <string name="vector_toggle_details" msgid="1301305340033556819">"कलर जोड़ने या हटाने के लिए टॉगल करें"</string>
 </resources>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-in/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-in/strings.xml
index 74cff80..adc5479 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-in/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-in/strings.xml
@@ -230,8 +230,7 @@
     <string name="long_msg_template_not_supported_title" msgid="8600719470226274925">"Host tidak kompatibel"</string>
     <string name="msg_template_demo_title" msgid="3895210951340409473">"Demo Template Pesan"</string>
     <string name="msg_template_demo_text" msgid="2275291617716161409">"Pesan akan muncul di sini.\nTeks lainnya ada di baris kedua."</string>
-    <!-- no translation found for short_msg_template_demo_title (6798738013668580714) -->
-    <skip />
+    <string name="short_msg_template_demo_title" msgid="6798738013668580714">"Demo Template Pesan Singkat"</string>
     <string name="pane_template_demo_title" msgid="7804292600060341608">"Demo Template Panel"</string>
     <string name="place_list_template_demo_title" msgid="2054022985455460469">"Demo Template Daftar Tempat"</string>
     <string name="browse_places_title" msgid="7246005909846715898">"Jelajahi Tempat"</string>
@@ -267,8 +266,7 @@
     <string name="vector_with_tint_title" msgid="1022346419829696827">"Vector drawable, dengan tint"</string>
     <string name="vector_with_app_theme_attr_title" msgid="4890094482708376219">"Vector drawable, dengan atribut tema aplikasi untuk warnanya"</string>
     <string name="png_res_title" msgid="7437083018336747544">"PNG, dikirim sebagai resource"</string>
-    <!-- no translation found for png_bitmap_title (3385912074130977032) -->
-    <skip />
+    <string name="png_bitmap_title" msgid="3385912074130977032">"File PNG, dikirim sebagai bitmap"</string>
     <string name="just_row_title" msgid="965700021568970725">"Hanya judul"</string>
     <string name="title_with_app_icon_row_title" msgid="6294250714820740520">"Judul dengan ikon aplikasi"</string>
     <string name="title_with_res_id_image_row_title" msgid="3813134904602875778">"Judul dengan gambar ID resource"</string>
@@ -280,8 +278,7 @@
     <string name="rows_demo_title" msgid="3198566660454251007">"Demo Baris"</string>
     <string name="text_icons_demo_title" msgid="8732943920672143201">"Demo Teks dan Ikon"</string>
     <string name="row_text_icons_demo_title" msgid="135167694047524905">"Demo Baris dengan Teks dan Ikon"</string>
-    <!-- no translation found for radio_button_list_demo_title (9082264324855338774) -->
-    <skip />
+    <string name="radio_button_list_demo_title" msgid="9082264324855338774">"Demo Daftar Tombol Pilihan"</string>
     <string name="selectable_lists_demo_title" msgid="5492658731113129386">"Demo Daftar yang Dapat Dipilih"</string>
     <string name="option_1_title" msgid="7221252541651471199">"Opsi 1"</string>
     <string name="option_2_title" msgid="1905146448697963818">"Opsi 2"</string>
@@ -295,8 +292,7 @@
     <string name="task_limit_reached_msg" msgid="6038763366777119364">"Batas tugas tercapai\nJika dilanjutkan, aplikasi akan dipaksa berhenti"</string>
     <string name="task_step_of_title" msgid="2791717962535723839">"Langkah tugas %1$d dari %2$d"</string>
     <string name="task_step_of_text" msgid="4646729781462227219">"Klik untuk melanjutkan"</string>
-    <!-- no translation found for toggle_button_demo_title (3179103600967398928) -->
-    <skip />
+    <string name="toggle_button_demo_title" msgid="3179103600967398928">"Demo Tombol"</string>
     <string name="toggle_test_title" msgid="924485265152862631">"Pengujian tombol"</string>
     <string name="toggle_test_text" msgid="8107217216013312857">"Perubahan stateful diizinkan"</string>
     <string name="toggle_test_first_toggle_title" msgid="3635022201072117680">"Aktifkan Pengujian Tombol"</string>
@@ -311,10 +307,8 @@
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Pengujian Tombol Dinonaktifkan"</string>
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Demo Template Lain-Lain"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Demo Berita Pilihan"</string>
-    <!-- no translation found for template_layouts_demo_title (788249269446087847) -->
-    <skip />
-    <!-- no translation found for grid_template_menu_demo_title (7096285873490705119) -->
-    <skip />
+    <string name="template_layouts_demo_title" msgid="788249269446087847">"Demo Tata Letak Template"</string>
+    <string name="grid_template_menu_demo_title" msgid="7096285873490705119">"Demo Template Petak"</string>
     <string name="voice_access_demo_title" msgid="3825223890895361496">"Layar Demo Voice Access"</string>
     <string name="user_interactions_demo_title" msgid="1356952319161314986">"Interaksi Pengguna"</string>
     <string name="request_permission_menu_demo_title" msgid="4796486779527427017">"Demo Permintaan Izin"</string>
@@ -337,6 +331,5 @@
     <string name="loading_toggle_enabled" msgid="8828072732804454994">"Pemuatan diaktifkan"</string>
     <string name="loading_toggle_disabled" msgid="7689738885077382673">"Pemuatan dinonaktifkan"</string>
     <string name="loading_screen" msgid="4771507490730308794">"Layar pemuatan"</string>
-    <!-- no translation found for vector_toggle_details (1301305340033556819) -->
-    <skip />
+    <string name="vector_toggle_details" msgid="1301305340033556819">"Alihkan untuk menambahkan/menghapus warna"</string>
 </resources>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-is/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-is/strings.xml
index f61823c..d9f4cb8 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-is/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-is/strings.xml
@@ -230,8 +230,7 @@
     <string name="long_msg_template_not_supported_title" msgid="8600719470226274925">"Ósamhæfur hýsill"</string>
     <string name="msg_template_demo_title" msgid="3895210951340409473">"Sýnishorn skilaboðasniðmáts"</string>
     <string name="msg_template_demo_text" msgid="2275291617716161409">"Skilaboð koma hér.\nMeiri texti í næstu línu."</string>
-    <!-- no translation found for short_msg_template_demo_title (6798738013668580714) -->
-    <skip />
+    <string name="short_msg_template_demo_title" msgid="6798738013668580714">"Sýnishorn sniðmáts fyrir stutt skilaboð"</string>
     <string name="pane_template_demo_title" msgid="7804292600060341608">"Sýnishorn gluggasniðmáts"</string>
     <string name="place_list_template_demo_title" msgid="2054022985455460469">"Sýnishorn staðarlistasniðmáts"</string>
     <string name="browse_places_title" msgid="7246005909846715898">"Skoða staði"</string>
@@ -267,8 +266,7 @@
     <string name="vector_with_tint_title" msgid="1022346419829696827">"Teiknanlegur vektor, með lit"</string>
     <string name="vector_with_app_theme_attr_title" msgid="4890094482708376219">"Teiknanlegur vektor, með þemaeigind forrits hvað varðar lit"</string>
     <string name="png_res_title" msgid="7437083018336747544">"PNG, sent sem gögn"</string>
-    <!-- no translation found for png_bitmap_title (3385912074130977032) -->
-    <skip />
+    <string name="png_bitmap_title" msgid="3385912074130977032">"PNG, send sem punktamynd"</string>
     <string name="just_row_title" msgid="965700021568970725">"Aðeins titill"</string>
     <string name="title_with_app_icon_row_title" msgid="6294250714820740520">"Titill með forritstákni"</string>
     <string name="title_with_res_id_image_row_title" msgid="3813134904602875778">"Titill með mynd gagnaauðkennis"</string>
@@ -280,8 +278,7 @@
     <string name="rows_demo_title" msgid="3198566660454251007">"Sýnishorn lína"</string>
     <string name="text_icons_demo_title" msgid="8732943920672143201">"Sýnishorn texta og tákna"</string>
     <string name="row_text_icons_demo_title" msgid="135167694047524905">"Sýnishorn lína með texta og táknum"</string>
-    <!-- no translation found for radio_button_list_demo_title (9082264324855338774) -->
-    <skip />
+    <string name="radio_button_list_demo_title" msgid="9082264324855338774">"Sýnishorn hringhnappalista"</string>
     <string name="selectable_lists_demo_title" msgid="5492658731113129386">"Sýnishorn veljanlegra lista"</string>
     <string name="option_1_title" msgid="7221252541651471199">"Valkostur 1"</string>
     <string name="option_2_title" msgid="1905146448697963818">"Valkostur 2"</string>
@@ -295,8 +292,7 @@
     <string name="task_limit_reached_msg" msgid="6038763366777119364">"Verkefnismörkum náð\nEf haldið er áfram verður lokun forrits þvinguð"</string>
     <string name="task_step_of_title" msgid="2791717962535723839">"Verkefnisskref %1$d af %2$d"</string>
     <string name="task_step_of_text" msgid="4646729781462227219">"Smelltu til að halda áfram"</string>
-    <!-- no translation found for toggle_button_demo_title (3179103600967398928) -->
-    <skip />
+    <string name="toggle_button_demo_title" msgid="3179103600967398928">"Sýnishorn hnapps til að slökkva og kveikja"</string>
     <string name="toggle_test_title" msgid="924485265152862631">"Velja/afvelja prófun"</string>
     <string name="toggle_test_text" msgid="8107217216013312857">"Breytingar á stöðu eru leyfðar"</string>
     <string name="toggle_test_first_toggle_title" msgid="3635022201072117680">"Kveikja á rofaprófun"</string>
@@ -311,10 +307,8 @@
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Slökkt á rofaprófun"</string>
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Sýnishorn ýmissa sniðmáta"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Prufuútgáfur Showcase"</string>
-    <!-- no translation found for template_layouts_demo_title (788249269446087847) -->
-    <skip />
-    <!-- no translation found for grid_template_menu_demo_title (7096285873490705119) -->
-    <skip />
+    <string name="template_layouts_demo_title" msgid="788249269446087847">"Sýnishorn sniðmátsuppsetningar"</string>
+    <string name="grid_template_menu_demo_title" msgid="7096285873490705119">"Sýnishorn töflusniðmáts"</string>
     <string name="voice_access_demo_title" msgid="3825223890895361496">"Prufuskjár fyrir raddskipanir"</string>
     <string name="user_interactions_demo_title" msgid="1356952319161314986">"Aðgerðir notenda"</string>
     <string name="request_permission_menu_demo_title" msgid="4796486779527427017">"Sýnishorn heimildabeiðna"</string>
@@ -337,6 +331,5 @@
     <string name="loading_toggle_enabled" msgid="8828072732804454994">"Kveikt á hleðslu"</string>
     <string name="loading_toggle_disabled" msgid="7689738885077382673">"Slökkt á hleðslu"</string>
     <string name="loading_screen" msgid="4771507490730308794">"Hleður skjá"</string>
-    <!-- no translation found for vector_toggle_details (1301305340033556819) -->
-    <skip />
+    <string name="vector_toggle_details" msgid="1301305340033556819">"Breyttu stillingunni til að bæta við/fjarlægja lit"</string>
 </resources>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-iw/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-iw/strings.xml
index 370e4cb..4e198ad 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-iw/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-iw/strings.xml
@@ -230,8 +230,7 @@
     <string name="long_msg_template_not_supported_title" msgid="8600719470226274925">"מארח לא תואם"</string>
     <string name="msg_template_demo_title" msgid="3895210951340409473">"הדגמה של תבנית הודעה"</string>
     <string name="msg_template_demo_text" msgid="2275291617716161409">"ההודעה תופיע כאן.\nטקסט נוסף מופיע בשורה השנייה."</string>
-    <!-- no translation found for short_msg_template_demo_title (6798738013668580714) -->
-    <skip />
+    <string name="short_msg_template_demo_title" msgid="6798738013668580714">"הדגמה של תבנית של הודעה קצרה"</string>
     <string name="pane_template_demo_title" msgid="7804292600060341608">"הדגמה של תבנית החלונית"</string>
     <string name="place_list_template_demo_title" msgid="2054022985455460469">"הדגמת התבנית של רשימת המקומות"</string>
     <string name="browse_places_title" msgid="7246005909846715898">"עיון במקומות"</string>
@@ -267,8 +266,7 @@
     <string name="vector_with_tint_title" msgid="1022346419829696827">"פריט גרפי וקטורי שניתן לשרטוט, עם גוון"</string>
     <string name="vector_with_app_theme_attr_title" msgid="4890094482708376219">"פריט גרפי וקטורי שניתן לשרטוט, עם מאפיין העיצוב של האפליקציה עבור הצבע שלו"</string>
     <string name="png_res_title" msgid="7437083018336747544">"‏קובץ PNG, נשלח כמקור מידע"</string>
-    <!-- no translation found for png_bitmap_title (3385912074130977032) -->
-    <skip />
+    <string name="png_bitmap_title" msgid="3385912074130977032">"‏קובץ PNG, נשלח כמפת סיביות (bitmap)"</string>
     <string name="just_row_title" msgid="965700021568970725">"רק כותרת"</string>
     <string name="title_with_app_icon_row_title" msgid="6294250714820740520">"כותרת עם סמל האפליקציה"</string>
     <string name="title_with_res_id_image_row_title" msgid="3813134904602875778">"כותרת עם התמונה המזהה של מקור המידע"</string>
@@ -280,8 +278,7 @@
     <string name="rows_demo_title" msgid="3198566660454251007">"הדגמת שורות"</string>
     <string name="text_icons_demo_title" msgid="8732943920672143201">"הדגמות של טקסטים וסמלים"</string>
     <string name="row_text_icons_demo_title" msgid="135167694047524905">"הדגמה של שורות עם טקסטים וסמלים"</string>
-    <!-- no translation found for radio_button_list_demo_title (9082264324855338774) -->
-    <skip />
+    <string name="radio_button_list_demo_title" msgid="9082264324855338774">"הדגמה של רשימות של לחצני בחירה"</string>
     <string name="selectable_lists_demo_title" msgid="5492658731113129386">"הדגמה של הרשימות שאפשר לבחור"</string>
     <string name="option_1_title" msgid="7221252541651471199">"אפשרות 1"</string>
     <string name="option_2_title" msgid="1905146448697963818">"אפשרות 2"</string>
@@ -295,8 +292,7 @@
     <string name="task_limit_reached_msg" msgid="6038763366777119364">"הגעת להגבלת המשימות\nהמשך יוביל לסגירה ידנית של האפליקציה"</string>
     <string name="task_step_of_title" msgid="2791717962535723839">"‏שלב %1$d מתוך %2$d במשימה"</string>
     <string name="task_step_of_text" msgid="4646729781462227219">"יש ללחוץ כדי להמשיך"</string>
-    <!-- no translation found for toggle_button_demo_title (3179103600967398928) -->
-    <skip />
+    <string name="toggle_button_demo_title" msgid="3179103600967398928">"הדגמה של מתג להחלפת מצב"</string>
     <string name="toggle_test_title" msgid="924485265152862631">"בדיקה של החלפת המצב"</string>
     <string name="toggle_test_text" msgid="8107217216013312857">"מותר לערוך שינויי מצב"</string>
     <string name="toggle_test_first_toggle_title" msgid="3635022201072117680">"הפעלת הבדיקה של החלפת המצב"</string>
@@ -311,10 +307,8 @@
     <string name="toggle_test_disabled" msgid="8366040658408451664">"הבדיקה של החלפת המצב מושבתת"</string>
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"הדגמות של תבניות שונות"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"הדגמות תצוגה"</string>
-    <!-- no translation found for template_layouts_demo_title (788249269446087847) -->
-    <skip />
-    <!-- no translation found for grid_template_menu_demo_title (7096285873490705119) -->
-    <skip />
+    <string name="template_layouts_demo_title" msgid="788249269446087847">"הדגמות של אפשרויות פריסה של תבנית"</string>
+    <string name="grid_template_menu_demo_title" msgid="7096285873490705119">"הדגמות של תבנית של רשת"</string>
     <string name="voice_access_demo_title" msgid="3825223890895361496">"‏מסך ההדגמה של אפליקציית Voice Access"</string>
     <string name="user_interactions_demo_title" msgid="1356952319161314986">"אינטראקציות של משתמשים"</string>
     <string name="request_permission_menu_demo_title" msgid="4796486779527427017">"הדגמה של בקשת הרשאות"</string>
@@ -337,6 +331,5 @@
     <string name="loading_toggle_enabled" msgid="8828072732804454994">"הטעינה הופעלה"</string>
     <string name="loading_toggle_disabled" msgid="7689738885077382673">"הטעינה הושבתה"</string>
     <string name="loading_screen" msgid="4771507490730308794">"המסך בטעינה"</string>
-    <!-- no translation found for vector_toggle_details (1301305340033556819) -->
-    <skip />
+    <string name="vector_toggle_details" msgid="1301305340033556819">"אפשר להחליף מצב כדי להוסיף או להסיר צבע"</string>
 </resources>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-kk/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-kk/strings.xml
index 81c67d7..764828d 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-kk/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-kk/strings.xml
@@ -230,8 +230,7 @@
     <string name="long_msg_template_not_supported_title" msgid="8600719470226274925">"Үйлеспейтін хост"</string>
     <string name="msg_template_demo_title" msgid="3895210951340409473">"Хат үлгісінің демо нұсқасы"</string>
     <string name="msg_template_demo_text" msgid="2275291617716161409">"Хат осы жерге жазылады.\nТолық мәтін екінші жолға жазылады."</string>
-    <!-- no translation found for short_msg_template_demo_title (6798738013668580714) -->
-    <skip />
+    <string name="short_msg_template_demo_title" msgid="6798738013668580714">"Қысқа хабар үлгісі (демо нұсқасы)"</string>
     <string name="pane_template_demo_title" msgid="7804292600060341608">"Панель үлгісінің демо нұсқасы"</string>
     <string name="place_list_template_demo_title" msgid="2054022985455460469">"Орындар тізімі үлгісінің демо нұсқасы"</string>
     <string name="browse_places_title" msgid="7246005909846715898">"Орындарды шолу"</string>
@@ -267,8 +266,7 @@
     <string name="vector_with_tint_title" msgid="1022346419829696827">"Вектор кескінделетін дереккөз, түс реңкімен"</string>
     <string name="vector_with_app_theme_attr_title" msgid="4890094482708376219">"Вектор кескінделетін дереккөз, түсі қолданбаның тақырып төлсипатымен бірдей"</string>
     <string name="png_res_title" msgid="7437083018336747544">"Ресурс ретінде жіберілген PNG суреті"</string>
-    <!-- no translation found for png_bitmap_title (3385912074130977032) -->
-    <skip />
+    <string name="png_bitmap_title" msgid="3385912074130977032">"Бит картасы ретінде жіберілген PNG файлы"</string>
     <string name="just_row_title" msgid="965700021568970725">"Жай ғана тақырып"</string>
     <string name="title_with_app_icon_row_title" msgid="6294250714820740520">"Қолданба белгішесі бар тақырып"</string>
     <string name="title_with_res_id_image_row_title" msgid="3813134904602875778">"Ресурс идентификаторының суреті бар тақырып"</string>
@@ -280,8 +278,7 @@
     <string name="rows_demo_title" msgid="3198566660454251007">"Жолдардың демо нұсқасы"</string>
     <string name="text_icons_demo_title" msgid="8732943920672143201">"Мәтін мен белгішелердің демо нұсқасы"</string>
     <string name="row_text_icons_demo_title" msgid="135167694047524905">"Мәтіні бар жолдар мен белгішелердің демо нұсқасы"</string>
-    <!-- no translation found for radio_button_list_demo_title (9082264324855338774) -->
-    <skip />
+    <string name="radio_button_list_demo_title" msgid="9082264324855338774">"Ауыстырып қосқыш тізімдері (демо нұсқасы)"</string>
     <string name="selectable_lists_demo_title" msgid="5492658731113129386">"Таңдауға болатын тізімнің демо нұсқасы"</string>
     <string name="option_1_title" msgid="7221252541651471199">"1-опция"</string>
     <string name="option_2_title" msgid="1905146448697963818">"2-опция"</string>
@@ -295,8 +292,7 @@
     <string name="task_limit_reached_msg" msgid="6038763366777119364">"Тапсырма өз шегіне жетті.\nІлгері жүрсеңіз, қолданба күштеп тоқтатылады."</string>
     <string name="task_step_of_title" msgid="2791717962535723839">"%1$d/%2$d тапсырма қадамы"</string>
     <string name="task_step_of_text" msgid="4646729781462227219">"Ілгері жүру үшін басыңыз."</string>
-    <!-- no translation found for toggle_button_demo_title (3179103600967398928) -->
-    <skip />
+    <string name="toggle_button_demo_title" msgid="3179103600967398928">"Ауыстыру түймесі (демо нұсқасы)"</string>
     <string name="toggle_test_title" msgid="924485265152862631">"Ауыстырғыш сынағы"</string>
     <string name="toggle_test_text" msgid="8107217216013312857">"Күй бақыланатын өзгерістерге рұқсат берілген."</string>
     <string name="toggle_test_first_toggle_title" msgid="3635022201072117680">"Ауыстырғыш сынағын қосу"</string>
@@ -311,10 +307,8 @@
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Ауыстырғыш сынағы өшірілген."</string>
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"\"Басқалары\" үлгісінің демо нұсқасы"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Презентацияның демо нұсқасы"</string>
-    <!-- no translation found for template_layouts_demo_title (788249269446087847) -->
-    <skip />
-    <!-- no translation found for grid_template_menu_demo_title (7096285873490705119) -->
-    <skip />
+    <string name="template_layouts_demo_title" msgid="788249269446087847">"Формат үлгісі (демо нұсқалары)"</string>
+    <string name="grid_template_menu_demo_title" msgid="7096285873490705119">"Тор үлгісі (демо нұсқалары)"</string>
     <string name="voice_access_demo_title" msgid="3825223890895361496">"Voice Access демо нұсқасының экраны"</string>
     <string name="user_interactions_demo_title" msgid="1356952319161314986">"Пайдаланушы әрекеттері"</string>
     <string name="request_permission_menu_demo_title" msgid="4796486779527427017">"Рұқсат сұрау операциясының демо нұсқасы"</string>
@@ -337,6 +331,5 @@
     <string name="loading_toggle_enabled" msgid="8828072732804454994">"Жүктеу қосылды"</string>
     <string name="loading_toggle_disabled" msgid="7689738885077382673">"Жүктеу ажыратылды"</string>
     <string name="loading_screen" msgid="4771507490730308794">"Жүктеу экраны"</string>
-    <!-- no translation found for vector_toggle_details (1301305340033556819) -->
-    <skip />
+    <string name="vector_toggle_details" msgid="1301305340033556819">"Түсті қосу не өшіру үшін басыңыз."</string>
 </resources>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-km/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-km/strings.xml
index 7c55291..34a1f2c 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-km/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-km/strings.xml
@@ -230,8 +230,7 @@
     <string name="long_msg_template_not_supported_title" msgid="8600719470226274925">"ម៉ាស៊ីនមិនត្រូវគ្នា"</string>
     <string name="msg_template_demo_title" msgid="3895210951340409473">"គំរូបង្ហាញនៃ​ទម្រង់គំរូសារ"</string>
     <string name="msg_template_demo_text" msgid="2275291617716161409">"សារស្ថិត​នៅទីនេះ។\nអត្ថបទច្រើន​ទៀតនៅលើជួរទីពីរ។"</string>
-    <!-- no translation found for short_msg_template_demo_title (6798738013668580714) -->
-    <skip />
+    <string name="short_msg_template_demo_title" msgid="6798738013668580714">"គំរូបង្ហាញនៃទម្រង់គំរូសារខ្លី"</string>
     <string name="pane_template_demo_title" msgid="7804292600060341608">"គំរូបង្ហាញ​ទម្រង់គំរូផ្ទាំង"</string>
     <string name="place_list_template_demo_title" msgid="2054022985455460469">"គំរូបង្ហាញទម្រង់​គំរូនៃបញ្ជីទីកន្លែង"</string>
     <string name="browse_places_title" msgid="7246005909846715898">"រុករក​ទីកន្លែង"</string>
@@ -267,8 +266,7 @@
     <string name="vector_with_tint_title" msgid="1022346419829696827">"វ៉ិចទ័រដែល​អាចទាញបាន ដែលមានពណ៌ព្រឿងៗ"</string>
     <string name="vector_with_app_theme_attr_title" msgid="4890094482708376219">"វ៉ិចទ័រដែល​អាចទាញបាន ដែលមានលក្ខណៈ​រចនាប័ទ្មរបស់កម្មវិធី​សម្រាប់ពណ៌របស់វា"</string>
     <string name="png_res_title" msgid="7437083018336747544">"PNG ដែលបាន​ផ្ញើជាធនធាន"</string>
-    <!-- no translation found for png_bitmap_title (3385912074130977032) -->
-    <skip />
+    <string name="png_bitmap_title" msgid="3385912074130977032">"PNG ដែលបានផ្ញើជា bitmap"</string>
     <string name="just_row_title" msgid="965700021568970725">"ចំណងជើង​តែប៉ុណ្ណោះ"</string>
     <string name="title_with_app_icon_row_title" msgid="6294250714820740520">"ចំណងជើងដែល​មានរូបកម្មវិធី"</string>
     <string name="title_with_res_id_image_row_title" msgid="3813134904602875778">"ចំណងជើង​ដែលមានរូបភាព​លេខសម្គាល់ធនធាន"</string>
@@ -280,8 +278,7 @@
     <string name="rows_demo_title" msgid="3198566660454251007">"គំរូបង្ហាញជួរដេក"</string>
     <string name="text_icons_demo_title" msgid="8732943920672143201">"គំរូបង្ហាញរូបតំណាង និងអត្ថបទ"</string>
     <string name="row_text_icons_demo_title" msgid="135167694047524905">"ជួរដេកដែល​មានគំរូបង្ហាញរូបតំណាង និងអត្ថបទ"</string>
-    <!-- no translation found for radio_button_list_demo_title (9082264324855338774) -->
-    <skip />
+    <string name="radio_button_list_demo_title" msgid="9082264324855338774">"គំរូបង្ហាញនៃបញ្ជីប៊ូតុង​មូល"</string>
     <string name="selectable_lists_demo_title" msgid="5492658731113129386">"គំរូបង្ហាញបញ្ជីដែល​អាចជ្រើសរើសបាន"</string>
     <string name="option_1_title" msgid="7221252541651471199">"ជម្រើសទី 1"</string>
     <string name="option_2_title" msgid="1905146448697963818">"ជម្រើសទី 2"</string>
@@ -295,8 +292,7 @@
     <string name="task_limit_reached_msg" msgid="6038763366777119364">"បានឈានដល់​ដែនកំណត់កិច្ចការហើយ\nការបន្តទៀត​នឹងបង្ខំឱ្យកម្មវិធីបញ្ឈប់"</string>
     <string name="task_step_of_title" msgid="2791717962535723839">"ជំហានកិច្ចការទី %1$d នៃ %2$d"</string>
     <string name="task_step_of_text" msgid="4646729781462227219">"ចុចដើម្បីបន្ត"</string>
-    <!-- no translation found for toggle_button_demo_title (3179103600967398928) -->
-    <skip />
+    <string name="toggle_button_demo_title" msgid="3179103600967398928">"គំរូបង្ហាញនៃប៊ូតុងបិទ/បើក"</string>
     <string name="toggle_test_title" msgid="924485265152862631">"ការធ្វើតេស្ត​ប៊ូតុងបិទ/បើក"</string>
     <string name="toggle_test_text" msgid="8107217216013312857">"ការផ្លាស់ប្ដូរ​តាមស្ថានភាពត្រូវបានអនុញ្ញាត"</string>
     <string name="toggle_test_first_toggle_title" msgid="3635022201072117680">"បើកការធ្វើតេស្ត​ប៊ូតុងបិទ/បើក"</string>
@@ -311,10 +307,8 @@
     <string name="toggle_test_disabled" msgid="8366040658408451664">"បានបិទការធ្វើតេស្ត​ប៊ូតុងបិទ/បើក"</string>
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"គំរូបង្ហាញនៃ​ទម្រង់គំរូផ្សេងៗ"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"គំរូបង្ហាញអំពីការតាំងរំលេច"</string>
-    <!-- no translation found for template_layouts_demo_title (788249269446087847) -->
-    <skip />
-    <!-- no translation found for grid_template_menu_demo_title (7096285873490705119) -->
-    <skip />
+    <string name="template_layouts_demo_title" msgid="788249269446087847">"គំរូបង្ហាញនៃប្លង់​ទម្រង់គំរូ"</string>
+    <string name="grid_template_menu_demo_title" msgid="7096285873490705119">"គំរូបង្ហាញនៃ​ទម្រង់គំរូក្រឡា"</string>
     <string name="voice_access_demo_title" msgid="3825223890895361496">"អេក្រង់គំរូបង្ហាញនៃ​ការចូលប្រើប្រាស់តាមរយៈសំឡេង"</string>
     <string name="user_interactions_demo_title" msgid="1356952319161314986">"អន្តរកម្មរបស់អ្នកប្រើប្រាស់"</string>
     <string name="request_permission_menu_demo_title" msgid="4796486779527427017">"គំរូបង្ហាញនៃ​ការស្នើសុំការអនុញ្ញាត"</string>
@@ -337,6 +331,5 @@
     <string name="loading_toggle_enabled" msgid="8828072732804454994">"បានបើកការផ្ទុក"</string>
     <string name="loading_toggle_disabled" msgid="7689738885077382673">"បានបិទការផ្ទុក"</string>
     <string name="loading_screen" msgid="4771507490730308794">"អេក្រង់ដែលកំពុងផ្ទុក"</string>
-    <!-- no translation found for vector_toggle_details (1301305340033556819) -->
-    <skip />
+    <string name="vector_toggle_details" msgid="1301305340033556819">"ប៊ូតុងបិទ/បើកដើម្បីបញ្ចូល/លុបពណ៌"</string>
 </resources>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-ko/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-ko/strings.xml
index 20482a6..c34ac66 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-ko/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-ko/strings.xml
@@ -230,8 +230,7 @@
     <string name="long_msg_template_not_supported_title" msgid="8600719470226274925">"호환되지 않는 호스트"</string>
     <string name="msg_template_demo_title" msgid="3895210951340409473">"메시지 템플릿 데모"</string>
     <string name="msg_template_demo_text" msgid="2275291617716161409">"여기에 메시지가 들어갑니다.\n추가 텍스트는 두 번째 줄에 입력됩니다."</string>
-    <!-- no translation found for short_msg_template_demo_title (6798738013668580714) -->
-    <skip />
+    <string name="short_msg_template_demo_title" msgid="6798738013668580714">"짧은 메시지 템플릿 데모"</string>
     <string name="pane_template_demo_title" msgid="7804292600060341608">"창 템플릿 데모"</string>
     <string name="place_list_template_demo_title" msgid="2054022985455460469">"장소 목록 템플릿 데모"</string>
     <string name="browse_places_title" msgid="7246005909846715898">"장소 둘러보기"</string>
@@ -267,8 +266,7 @@
     <string name="vector_with_tint_title" msgid="1022346419829696827">"벡터 드로어블, 색조 있음"</string>
     <string name="vector_with_app_theme_attr_title" msgid="4890094482708376219">"벡터 드로어블, 색상에 관한 앱 테마 속성 있음"</string>
     <string name="png_res_title" msgid="7437083018336747544">"PNG, 리소스로 전송됨"</string>
-    <!-- no translation found for png_bitmap_title (3385912074130977032) -->
-    <skip />
+    <string name="png_bitmap_title" msgid="3385912074130977032">"PNG, 비트맵으로 전송됨"</string>
     <string name="just_row_title" msgid="965700021568970725">"제목만"</string>
     <string name="title_with_app_icon_row_title" msgid="6294250714820740520">"앱 아이콘이 포함된 제목"</string>
     <string name="title_with_res_id_image_row_title" msgid="3813134904602875778">"리소스 ID 이미지가 포함된 제목"</string>
@@ -280,8 +278,7 @@
     <string name="rows_demo_title" msgid="3198566660454251007">"행 데모"</string>
     <string name="text_icons_demo_title" msgid="8732943920672143201">"텍스트 및 아이콘 데모"</string>
     <string name="row_text_icons_demo_title" msgid="135167694047524905">"텍스트와 아이콘이 있는 행 데모"</string>
-    <!-- no translation found for radio_button_list_demo_title (9082264324855338774) -->
-    <skip />
+    <string name="radio_button_list_demo_title" msgid="9082264324855338774">"라디오 버튼 목록 데모"</string>
     <string name="selectable_lists_demo_title" msgid="5492658731113129386">"선택 가능한 목록 데모"</string>
     <string name="option_1_title" msgid="7221252541651471199">"옵션 1"</string>
     <string name="option_2_title" msgid="1905146448697963818">"옵션 2"</string>
@@ -295,8 +292,7 @@
     <string name="task_limit_reached_msg" msgid="6038763366777119364">"작업 제한에 도달함\n계속 진행하면 앱이 강제 종료됩니다"</string>
     <string name="task_step_of_title" msgid="2791717962535723839">"작업 단계 %1$d/%2$d"</string>
     <string name="task_step_of_text" msgid="4646729781462227219">"클릭하여 진행"</string>
-    <!-- no translation found for toggle_button_demo_title (3179103600967398928) -->
-    <skip />
+    <string name="toggle_button_demo_title" msgid="3179103600967398928">"전환 버튼 데모"</string>
     <string name="toggle_test_title" msgid="924485265152862631">"전환 테스트"</string>
     <string name="toggle_test_text" msgid="8107217216013312857">"스테이트풀(Stateful) 변경은 허용됨"</string>
     <string name="toggle_test_first_toggle_title" msgid="3635022201072117680">"전환 테스트 사용 설정"</string>
@@ -311,10 +307,8 @@
     <string name="toggle_test_disabled" msgid="8366040658408451664">"전환 테스트 사용 중지됨"</string>
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"기타 템플릿 데모"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"쇼케이스 데모"</string>
-    <!-- no translation found for template_layouts_demo_title (788249269446087847) -->
-    <skip />
-    <!-- no translation found for grid_template_menu_demo_title (7096285873490705119) -->
-    <skip />
+    <string name="template_layouts_demo_title" msgid="788249269446087847">"템플릿 레이아웃 데모"</string>
+    <string name="grid_template_menu_demo_title" msgid="7096285873490705119">"그리드 템플릿 데모"</string>
     <string name="voice_access_demo_title" msgid="3825223890895361496">"음성 액세스 데모 화면"</string>
     <string name="user_interactions_demo_title" msgid="1356952319161314986">"사용자 상호작용"</string>
     <string name="request_permission_menu_demo_title" msgid="4796486779527427017">"권한 요청 데모"</string>
@@ -337,6 +331,5 @@
     <string name="loading_toggle_enabled" msgid="8828072732804454994">"로딩 사용 설정됨"</string>
     <string name="loading_toggle_disabled" msgid="7689738885077382673">"로딩 사용 중지됨"</string>
     <string name="loading_screen" msgid="4771507490730308794">"로딩 화면"</string>
-    <!-- no translation found for vector_toggle_details (1301305340033556819) -->
-    <skip />
+    <string name="vector_toggle_details" msgid="1301305340033556819">"전환하여 색상 추가/삭제"</string>
 </resources>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-ky/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-ky/strings.xml
index 39affeb..cda6402 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-ky/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-ky/strings.xml
@@ -230,8 +230,7 @@
     <string name="long_msg_template_not_supported_title" msgid="8600719470226274925">"Шайкеш келбеген башкы түйүн"</string>
     <string name="msg_template_demo_title" msgid="3895210951340409473">"Билдирүүнүн үлгүсүнүн демосу"</string>
     <string name="msg_template_demo_text" msgid="2275291617716161409">"Билдирүүлөр бул жерде болот.\nТексттин калганы экинчи сапта болот."</string>
-    <!-- no translation found for short_msg_template_demo_title (6798738013668580714) -->
-    <skip />
+    <string name="short_msg_template_demo_title" msgid="6798738013668580714">"Кыска билдирүү үлгүлөрүнүн демосу"</string>
     <string name="pane_template_demo_title" msgid="7804292600060341608">"Такта үлгүсүнүн демосу"</string>
     <string name="place_list_template_demo_title" msgid="2054022985455460469">"Орундар тизмесинин үлгүсүнүн демосу"</string>
     <string name="browse_places_title" msgid="7246005909846715898">"Жерлерди карап чыгуу"</string>
@@ -267,8 +266,7 @@
     <string name="vector_with_tint_title" msgid="1022346419829696827">"Тартылуучу вектор, кошумча түс менен"</string>
     <string name="vector_with_app_theme_attr_title" msgid="4890094482708376219">"Тартылуучу вектор, түс катары колдонмонун темасынын атрибуту"</string>
     <string name="png_res_title" msgid="7437083018336747544">"PNG, булак катары жөнөтүлгөн"</string>
-    <!-- no translation found for png_bitmap_title (3385912074130977032) -->
-    <skip />
+    <string name="png_bitmap_title" msgid="3385912074130977032">"Бит картасы катары жөнөтүлгөн PNG"</string>
     <string name="just_row_title" msgid="965700021568970725">"Жөн эле аталыш"</string>
     <string name="title_with_app_icon_row_title" msgid="6294250714820740520">"Колдонмонун сүрөтчөсү бар аталыш"</string>
     <string name="title_with_res_id_image_row_title" msgid="3813134904602875778">"Ресуртун ID сүрөтү бар аталыш"</string>
@@ -280,8 +278,7 @@
     <string name="rows_demo_title" msgid="3198566660454251007">"Саптар демосу"</string>
     <string name="text_icons_demo_title" msgid="8732943920672143201">"Текст жана сүрөтчөлөр демосу"</string>
     <string name="row_text_icons_demo_title" msgid="135167694047524905">"Текст жана сүрөтчөлөр бар саптар демосу"</string>
-    <!-- no translation found for radio_button_list_demo_title (9082264324855338774) -->
-    <skip />
+    <string name="radio_button_list_demo_title" msgid="9082264324855338774">"Радио баскычтардын тизмелеринин демосу"</string>
     <string name="selectable_lists_demo_title" msgid="5492658731113129386">"Тандалуучу тизмелердин демосу"</string>
     <string name="option_1_title" msgid="7221252541651471199">"1-параметр"</string>
     <string name="option_2_title" msgid="1905146448697963818">"2-параметр"</string>
@@ -295,8 +292,7 @@
     <string name="task_limit_reached_msg" msgid="6038763366777119364">"Тапшырманын чегине жетти\nАлдыга жылсаңыз, колдонмо мажбурлап токтотулат"</string>
     <string name="task_step_of_title" msgid="2791717962535723839">"Тапшырма кадамы %1$d of %2$d"</string>
     <string name="task_step_of_text" msgid="4646729781462227219">"Алдыга өтүү үчүн чыкылдатыңыз"</string>
-    <!-- no translation found for toggle_button_demo_title (3179103600967398928) -->
-    <skip />
+    <string name="toggle_button_demo_title" msgid="3179103600967398928">"Күйгүзүү/өчүрүү баскычынын демосу"</string>
     <string name="toggle_test_title" msgid="924485265152862631">"Өчүрүү/күйгүзүү сыноосу"</string>
     <string name="toggle_test_text" msgid="8107217216013312857">"Абалы сакталган өзгөртүүлөргө уруксат берилген"</string>
     <string name="toggle_test_first_toggle_title" msgid="3635022201072117680">"Өчүрүү/күйгүзүү сыноосун иштетүү"</string>
@@ -311,10 +307,8 @@
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Өчүрүү/күйгүзүү сыноосу өчүрүлдү"</string>
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Башка үлгүлөрдүн демолору"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Showcase демолору"</string>
-    <!-- no translation found for template_layouts_demo_title (788249269446087847) -->
-    <skip />
-    <!-- no translation found for grid_template_menu_demo_title (7096285873490705119) -->
-    <skip />
+    <string name="template_layouts_demo_title" msgid="788249269446087847">"Үлгү калыптарынын демолору"</string>
+    <string name="grid_template_menu_demo_title" msgid="7096285873490705119">"Торчо үлгүлөрдүн демолору"</string>
     <string name="voice_access_demo_title" msgid="3825223890895361496">"Voice Access демо экраны"</string>
     <string name="user_interactions_demo_title" msgid="1356952319161314986">"Колдонуучунун мамилелери"</string>
     <string name="request_permission_menu_demo_title" msgid="4796486779527427017">"Демо версияларга уруксат суроо"</string>
@@ -337,6 +331,5 @@
     <string name="loading_toggle_enabled" msgid="8828072732804454994">"Жүктөө иштетилди"</string>
     <string name="loading_toggle_disabled" msgid="7689738885077382673">"Жүктөө токтотулду"</string>
     <string name="loading_screen" msgid="4771507490730308794">"Жүктөлүп жаткан экран"</string>
-    <!-- no translation found for vector_toggle_details (1301305340033556819) -->
-    <skip />
+    <string name="vector_toggle_details" msgid="1301305340033556819">"Түстү кошуу/өчүрүү которгучу"</string>
 </resources>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-lt/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-lt/strings.xml
index 23a95e6..f7bbc8e 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-lt/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-lt/strings.xml
@@ -230,8 +230,7 @@
     <string name="long_msg_template_not_supported_title" msgid="8600719470226274925">"Nesuderinama priegloba"</string>
     <string name="msg_template_demo_title" msgid="3895210951340409473">"Pranešimo šablono demonstracinė versija"</string>
     <string name="msg_template_demo_text" msgid="2275291617716161409">"Čia pateikiamas pranešimas.\nDaugiau teksto antroje eilutėje."</string>
-    <!-- no translation found for short_msg_template_demo_title (6798738013668580714) -->
-    <skip />
+    <string name="short_msg_template_demo_title" msgid="6798738013668580714">"Trumpųjų pranešimų šablonų demonstracinė versija"</string>
     <string name="pane_template_demo_title" msgid="7804292600060341608">"Srities šablono demonstracinė versija"</string>
     <string name="place_list_template_demo_title" msgid="2054022985455460469">"Vietų sąrašo šablono demonstracinė versija"</string>
     <string name="browse_places_title" msgid="7246005909846715898">"Naršyti vietas"</string>
@@ -267,8 +266,7 @@
     <string name="vector_with_tint_title" msgid="1022346419829696827">"Braižomasis vektorius su atspalviu"</string>
     <string name="vector_with_app_theme_attr_title" msgid="4890094482708376219">"Braižomasis vektorius su programos temos atributu pagal jo spalvą"</string>
     <string name="png_res_title" msgid="7437083018336747544">"PNG, išsiųsta kaip šaltinis"</string>
-    <!-- no translation found for png_bitmap_title (3385912074130977032) -->
-    <skip />
+    <string name="png_bitmap_title" msgid="3385912074130977032">"PNG failas, išsiųstas kaip taškinė grafika"</string>
     <string name="just_row_title" msgid="965700021568970725">"Tik pavadinimas"</string>
     <string name="title_with_app_icon_row_title" msgid="6294250714820740520">"Pavadinimas su programos piktograma"</string>
     <string name="title_with_res_id_image_row_title" msgid="3813134904602875778">"Pavadinimas su šaltinio ID vaizdu"</string>
@@ -280,8 +278,7 @@
     <string name="rows_demo_title" msgid="3198566660454251007">"Eilučių demonstracinė versija"</string>
     <string name="text_icons_demo_title" msgid="8732943920672143201">"Teksto ir piktogramų demonstracinės versijos"</string>
     <string name="row_text_icons_demo_title" msgid="135167694047524905">"Eilučių su tekstu ir piktogramomis demonstracinė versija"</string>
-    <!-- no translation found for radio_button_list_demo_title (9082264324855338774) -->
-    <skip />
+    <string name="radio_button_list_demo_title" msgid="9082264324855338774">"Akučių sąrašų demonstracinė versija"</string>
     <string name="selectable_lists_demo_title" msgid="5492658731113129386">"Pasirenkamų sąrašų demonstracinė versija"</string>
     <string name="option_1_title" msgid="7221252541651471199">"1 parinktis"</string>
     <string name="option_2_title" msgid="1905146448697963818">"2 parinktis"</string>
@@ -295,8 +292,7 @@
     <string name="task_limit_reached_msg" msgid="6038763366777119364">"Pasiektas užduočių apribojimas\nTęsiant programa bus priverstinai sustabdyta"</string>
     <string name="task_step_of_title" msgid="2791717962535723839">"%1$d užduoties veiksmas iš %2$d"</string>
     <string name="task_step_of_text" msgid="4646729781462227219">"Spustelėkite, jei norite tęsti"</string>
-    <!-- no translation found for toggle_button_demo_title (3179103600967398928) -->
-    <skip />
+    <string name="toggle_button_demo_title" msgid="3179103600967398928">"Perjungimo mygtuko demonstracinė versija"</string>
     <string name="toggle_test_title" msgid="924485265152862631">"Perjungti bandymą"</string>
     <string name="toggle_test_text" msgid="8107217216013312857">"Leidžiami būsenos pakeitimai"</string>
     <string name="toggle_test_first_toggle_title" msgid="3635022201072117680">"Įgalinti bandymo perjungimą"</string>
@@ -311,10 +307,8 @@
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Bandymo perjungimas išjungtas"</string>
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Įvairių šablonų demonstracinės versijos"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Rodyti demonstracines versijas"</string>
-    <!-- no translation found for template_layouts_demo_title (788249269446087847) -->
-    <skip />
-    <!-- no translation found for grid_template_menu_demo_title (7096285873490705119) -->
-    <skip />
+    <string name="template_layouts_demo_title" msgid="788249269446087847">"Šablonų išdėstymo demonstracinės versijos"</string>
+    <string name="grid_template_menu_demo_title" msgid="7096285873490705119">"Šablono tinklelio demonstracinės versijos"</string>
     <string name="voice_access_demo_title" msgid="3825223890895361496">"Prieigos balsu demonstracinės versijos ekranas"</string>
     <string name="user_interactions_demo_title" msgid="1356952319161314986">"Naudotojo sąveikos"</string>
     <string name="request_permission_menu_demo_title" msgid="4796486779527427017">"Leidimų prašymo demonstracinės versijos"</string>
@@ -337,6 +331,5 @@
     <string name="loading_toggle_enabled" msgid="8828072732804454994">"Įkėlimas įgalintas"</string>
     <string name="loading_toggle_disabled" msgid="7689738885077382673">"Įkėlimas išjungtas"</string>
     <string name="loading_screen" msgid="4771507490730308794">"Įkeliamas ekranas"</string>
-    <!-- no translation found for vector_toggle_details (1301305340033556819) -->
-    <skip />
+    <string name="vector_toggle_details" msgid="1301305340033556819">"Perjunkite norėdami pridėti ar pašalinti spalvą"</string>
 </resources>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-lv/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-lv/strings.xml
index a39a8e0..03368df 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-lv/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-lv/strings.xml
@@ -230,8 +230,7 @@
     <string name="long_msg_template_not_supported_title" msgid="8600719470226274925">"Nesaderīgs saimniekdators"</string>
     <string name="msg_template_demo_title" msgid="3895210951340409473">"Ziņojuma veidnes demonstrācija"</string>
     <string name="msg_template_demo_text" msgid="2275291617716161409">"Šeit ir ziņojums.\nPapildu teksts ir otrajā rindiņā."</string>
-    <!-- no translation found for short_msg_template_demo_title (6798738013668580714) -->
-    <skip />
+    <string name="short_msg_template_demo_title" msgid="6798738013668580714">"Īsa ziņojuma veidnes demonstrācija"</string>
     <string name="pane_template_demo_title" msgid="7804292600060341608">"Rūts veidnes demonstrācija"</string>
     <string name="place_list_template_demo_title" msgid="2054022985455460469">"Atrašanās vietu saraksta veidnes demonstrācija"</string>
     <string name="browse_places_title" msgid="7246005909846715898">"Vietu pārlūkošana"</string>
@@ -267,8 +266,7 @@
     <string name="vector_with_tint_title" msgid="1022346419829696827">"Zīmējams vektors, ar tonējumu"</string>
     <string name="vector_with_app_theme_attr_title" msgid="4890094482708376219">"Zīmējams vektors, ar lietotnes motīva atribūtu tā krāsai"</string>
     <string name="png_res_title" msgid="7437083018336747544">"PNG fails, nosūtīts kā resurss"</string>
-    <!-- no translation found for png_bitmap_title (3385912074130977032) -->
-    <skip />
+    <string name="png_bitmap_title" msgid="3385912074130977032">"PNG fails, nosūtīts kā bitkarte"</string>
     <string name="just_row_title" msgid="965700021568970725">"Tikai nosaukums"</string>
     <string name="title_with_app_icon_row_title" msgid="6294250714820740520">"Nosaukums ar lietotnes ikonu"</string>
     <string name="title_with_res_id_image_row_title" msgid="3813134904602875778">"Nosaukums ar resursa ID attēlu"</string>
@@ -280,8 +278,7 @@
     <string name="rows_demo_title" msgid="3198566660454251007">"Rindiņu demonstrācija"</string>
     <string name="text_icons_demo_title" msgid="8732943920672143201">"Teksta un ikonu demonstrācijas"</string>
     <string name="row_text_icons_demo_title" msgid="135167694047524905">"Rindiņu ar tekstu un ikonām demonstrācija"</string>
-    <!-- no translation found for radio_button_list_demo_title (9082264324855338774) -->
-    <skip />
+    <string name="radio_button_list_demo_title" msgid="9082264324855338774">"Pogu sarakstu demonstrācija"</string>
     <string name="selectable_lists_demo_title" msgid="5492658731113129386">"Atlasāmu sarakstu demonstrācija"</string>
     <string name="option_1_title" msgid="7221252541651471199">"1. opcija"</string>
     <string name="option_2_title" msgid="1905146448697963818">"2. opcija"</string>
@@ -295,8 +292,7 @@
     <string name="task_limit_reached_msg" msgid="6038763366777119364">"Sasniegts uzdevumu ierobežojums\nTurpinot lietotnes darbība tiks apturēta piespiedu kārtā."</string>
     <string name="task_step_of_title" msgid="2791717962535723839">"Uzdevuma darbība: %1$d. no %2$d"</string>
     <string name="task_step_of_text" msgid="4646729781462227219">"Noklikšķiniet, lai dotos tālāk"</string>
-    <!-- no translation found for toggle_button_demo_title (3179103600967398928) -->
-    <skip />
+    <string name="toggle_button_demo_title" msgid="3179103600967398928">"Pārslēgšanas pogas demonstrācija"</string>
     <string name="toggle_test_title" msgid="924485265152862631">"Pārslēgšanas tests"</string>
     <string name="toggle_test_text" msgid="8107217216013312857">"Stāvokļa izmaiņas ir atļautas"</string>
     <string name="toggle_test_first_toggle_title" msgid="3635022201072117680">"Iespējot pārslēgšanas testu"</string>
@@ -311,10 +307,8 @@
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Pārslēgšanas tests ir atspējots"</string>
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Dažādu veidņu demonstrācijas"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Showcase demonstrācijas"</string>
-    <!-- no translation found for template_layouts_demo_title (788249269446087847) -->
-    <skip />
-    <!-- no translation found for grid_template_menu_demo_title (7096285873490705119) -->
-    <skip />
+    <string name="template_layouts_demo_title" msgid="788249269446087847">"Veidņu izkārtojumu demonstrācijas"</string>
+    <string name="grid_template_menu_demo_title" msgid="7096285873490705119">"Režģa veidņu demonstrācijas"</string>
     <string name="voice_access_demo_title" msgid="3825223890895361496">"Balss piekļuves demonstrācijas ekrāns"</string>
     <string name="user_interactions_demo_title" msgid="1356952319161314986">"Lietotāju mijiedarbība"</string>
     <string name="request_permission_menu_demo_title" msgid="4796486779527427017">"Demonstrācija: atļauju pieprasīšana"</string>
@@ -337,6 +331,5 @@
     <string name="loading_toggle_enabled" msgid="8828072732804454994">"Ielāde iespējota"</string>
     <string name="loading_toggle_disabled" msgid="7689738885077382673">"Ielāde atspējota"</string>
     <string name="loading_screen" msgid="4771507490730308794">"Ielādes ekrāns"</string>
-    <!-- no translation found for vector_toggle_details (1301305340033556819) -->
-    <skip />
+    <string name="vector_toggle_details" msgid="1301305340033556819">"Slēdzis krāsu pievienošanai/noņemšanai"</string>
 </resources>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-ne/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-ne/strings.xml
index 488f9ac..79f41a5 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-ne/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-ne/strings.xml
@@ -230,8 +230,7 @@
     <string name="long_msg_template_not_supported_title" msgid="8600719470226274925">"अमिल्दो होस्ट"</string>
     <string name="msg_template_demo_title" msgid="3895210951340409473">"म्यासेजको टेम्प्लेटको डेमो"</string>
     <string name="msg_template_demo_text" msgid="2275291617716161409">"म्यासेज यहाँ लेखिने छ।\nथप टेक्स्ट लेख्न दोस्रो हरफमा जानुहोस्।"</string>
-    <!-- no translation found for short_msg_template_demo_title (6798738013668580714) -->
-    <skip />
+    <string name="short_msg_template_demo_title" msgid="6798738013668580714">"सर्ट म्यासेज टेम्प्लेटको डेमो"</string>
     <string name="pane_template_demo_title" msgid="7804292600060341608">"पेनको टम्प्लेटको डेमो"</string>
     <string name="place_list_template_demo_title" msgid="2054022985455460469">"ठाउँको सूचीको टेम्प्लेटको डेमो"</string>
     <string name="browse_places_title" msgid="7246005909846715898">"ठाउँहरू ब्राउज गर्नुहोस्"</string>
@@ -267,8 +266,7 @@
     <string name="vector_with_tint_title" msgid="1022346419829696827">"रङ भएको चित्र बनाउन मिल्ने भेक्टर"</string>
     <string name="vector_with_app_theme_attr_title" msgid="4890094482708376219">"एपको थिमको विशेषता भएको रङमा चित्र बनाउन मिल्ने भेक्टर"</string>
     <string name="png_res_title" msgid="7437083018336747544">"स्रोतका रूपमा पठाइएको एउटा PNG फाइल"</string>
-    <!-- no translation found for png_bitmap_title (3385912074130977032) -->
-    <skip />
+    <string name="png_bitmap_title" msgid="3385912074130977032">"बिटम्यापका रूपमा पठाइएको PNG फाइल"</string>
     <string name="just_row_title" msgid="965700021568970725">"शीर्षक मात्र हो"</string>
     <string name="title_with_app_icon_row_title" msgid="6294250714820740520">"एपको आइकन भएको शीर्षक"</string>
     <string name="title_with_res_id_image_row_title" msgid="3813134904602875778">"स्रोत ID को फोटो भएको शीर्षक"</string>
@@ -280,8 +278,7 @@
     <string name="rows_demo_title" msgid="3198566660454251007">"रोहरूको डेमो"</string>
     <string name="text_icons_demo_title" msgid="8732943920672143201">"टेक्स्ट र आइकनहरूको डेमो"</string>
     <string name="row_text_icons_demo_title" msgid="135167694047524905">"टेक्स्ट र आइकनहरू भएका रोहरूको डेमो"</string>
-    <!-- no translation found for radio_button_list_demo_title (9082264324855338774) -->
-    <skip />
+    <string name="radio_button_list_demo_title" msgid="9082264324855338774">"रेडियो बटनका सूचीहरूको डेमो"</string>
     <string name="selectable_lists_demo_title" msgid="5492658731113129386">"चयन गर्न मिल्ने सूचीहरूको डेमो"</string>
     <string name="option_1_title" msgid="7221252541651471199">"विकल्प १"</string>
     <string name="option_2_title" msgid="1905146448697963818">"विकल्प २"</string>
@@ -295,8 +292,7 @@
     <string name="task_limit_reached_msg" msgid="6038763366777119364">"कार्यको सीमा सकियो\nतपाईं अगाडि बढ्नुभयो भने एप जबरजस्ती रोकिने छ"</string>
     <string name="task_step_of_title" msgid="2791717962535723839">"%2$d कार्यको %1$d औँ चरण"</string>
     <string name="task_step_of_text" msgid="4646729781462227219">"अगाडि बढ्न क्लिक गर्नुहोस्"</string>
-    <!-- no translation found for toggle_button_demo_title (3179103600967398928) -->
-    <skip />
+    <string name="toggle_button_demo_title" msgid="3179103600967398928">"टगल गर्ने बटनको डेमो"</string>
     <string name="toggle_test_title" msgid="924485265152862631">"टगल टेस्ट"</string>
     <string name="toggle_test_text" msgid="8107217216013312857">"स्टेटफुल परिवर्तन गर्ने अनुमति छ"</string>
     <string name="toggle_test_first_toggle_title" msgid="3635022201072117680">"टगल टेस्ट अन गर्नुहोस्"</string>
@@ -311,10 +307,8 @@
     <string name="toggle_test_disabled" msgid="8366040658408451664">"टगल टेस्ट अफ गरिएको छ"</string>
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"टेम्प्लेटका विविध डेमोहरू"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"सोकेसहरूको डेमो"</string>
-    <!-- no translation found for template_layouts_demo_title (788249269446087847) -->
-    <skip />
-    <!-- no translation found for grid_template_menu_demo_title (7096285873490705119) -->
-    <skip />
+    <string name="template_layouts_demo_title" msgid="788249269446087847">"टेम्प्लेट लेआउटका डेमोहरू"</string>
+    <string name="grid_template_menu_demo_title" msgid="7096285873490705119">"ग्रिड टेम्प्लेटका डेमोहरू"</string>
     <string name="voice_access_demo_title" msgid="3825223890895361496">"Voice Access को डेमो स्क्रिन"</string>
     <string name="user_interactions_demo_title" msgid="1356952319161314986">"प्रयोगकर्ताले गरेका अन्तर्क्रिया"</string>
     <string name="request_permission_menu_demo_title" msgid="4796486779527427017">"अनुमतिहरूका डेमोहरू माग्नुहोस्"</string>
@@ -337,6 +331,5 @@
     <string name="loading_toggle_enabled" msgid="8828072732804454994">"लोड गर्ने टगल अन गरिएको छ"</string>
     <string name="loading_toggle_disabled" msgid="7689738885077382673">"लोड गर्ने टगल अफ गरिएको छ"</string>
     <string name="loading_screen" msgid="4771507490730308794">"लोडिङ स्क्रिन"</string>
-    <!-- no translation found for vector_toggle_details (1301305340033556819) -->
-    <skip />
+    <string name="vector_toggle_details" msgid="1301305340033556819">"रङ हाल्न/हटाउन टगल गर्नुहोस्"</string>
 </resources>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-ru/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-ru/strings.xml
index cbef55c..fcf1681 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-ru/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-ru/strings.xml
@@ -230,8 +230,7 @@
     <string name="long_msg_template_not_supported_title" msgid="8600719470226274925">"Несовместимый хост"</string>
     <string name="msg_template_demo_title" msgid="3895210951340409473">"Демонстрация шаблона сообщения"</string>
     <string name="msg_template_demo_text" msgid="2275291617716161409">"Здесь указывается сообщение.\nНа второй строке есть ещё текст."</string>
-    <!-- no translation found for short_msg_template_demo_title (6798738013668580714) -->
-    <skip />
+    <string name="short_msg_template_demo_title" msgid="6798738013668580714">"Шаблоны коротких сообщений (режим демонстрации)"</string>
     <string name="pane_template_demo_title" msgid="7804292600060341608">"Демонстрация шаблона панели"</string>
     <string name="place_list_template_demo_title" msgid="2054022985455460469">"Демонстрация шаблона списка мест"</string>
     <string name="browse_places_title" msgid="7246005909846715898">"Просмотр мест"</string>
@@ -267,8 +266,7 @@
     <string name="vector_with_tint_title" msgid="1022346419829696827">"Класс VectorDrawable с оттенком"</string>
     <string name="vector_with_app_theme_attr_title" msgid="4890094482708376219">"Класс VectorDrawable с атрибутом темы приложения в качестве цвета"</string>
     <string name="png_res_title" msgid="7437083018336747544">"Изображение PNG, отправленное в виде ресурса"</string>
-    <!-- no translation found for png_bitmap_title (3385912074130977032) -->
-    <skip />
+    <string name="png_bitmap_title" msgid="3385912074130977032">"Файл PNG, отправленный в виде битовой карты"</string>
     <string name="just_row_title" msgid="965700021568970725">"Только заголовок"</string>
     <string name="title_with_app_icon_row_title" msgid="6294250714820740520">"Название со значком приложения"</string>
     <string name="title_with_res_id_image_row_title" msgid="3813134904602875778">"Название с изображением идентификатора ресурса"</string>
@@ -280,8 +278,7 @@
     <string name="rows_demo_title" msgid="3198566660454251007">"Демонстрация строк"</string>
     <string name="text_icons_demo_title" msgid="8732943920672143201">"Демонстрации текста и значков"</string>
     <string name="row_text_icons_demo_title" msgid="135167694047524905">"Демонстрация строк с текстом и значками"</string>
-    <!-- no translation found for radio_button_list_demo_title (9082264324855338774) -->
-    <skip />
+    <string name="radio_button_list_demo_title" msgid="9082264324855338774">"Списки переключателей (режим демонстрации)"</string>
     <string name="selectable_lists_demo_title" msgid="5492658731113129386">"Демонстрация списков с возможностью выбора"</string>
     <string name="option_1_title" msgid="7221252541651471199">"Вариант 1"</string>
     <string name="option_2_title" msgid="1905146448697963818">"Вариант 2"</string>
@@ -295,8 +292,7 @@
     <string name="task_limit_reached_msg" msgid="6038763366777119364">"Достигнут предел по числу задач.\nЕсли продолжить, работа приложения будет остановлена."</string>
     <string name="task_step_of_title" msgid="2791717962535723839">"Шаг задачи: %1$d из %2$d"</string>
     <string name="task_step_of_text" msgid="4646729781462227219">"Нажмите, чтобы продолжить"</string>
-    <!-- no translation found for toggle_button_demo_title (3179103600967398928) -->
-    <skip />
+    <string name="toggle_button_demo_title" msgid="3179103600967398928">"Переключатель вида \"включено/отключено\" (режим демонстрации)"</string>
     <string name="toggle_test_title" msgid="924485265152862631">"Проверка переключения"</string>
     <string name="toggle_test_text" msgid="8107217216013312857">"Изменения с отслеживанием состояния разрешены"</string>
     <string name="toggle_test_first_toggle_title" msgid="3635022201072117680">"Включить проверку переключения"</string>
@@ -311,10 +307,8 @@
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Проверка переключения отключена"</string>
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Демонстрации прочих шаблонов"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Демонстрации Showcase"</string>
-    <!-- no translation found for template_layouts_demo_title (788249269446087847) -->
-    <skip />
-    <!-- no translation found for grid_template_menu_demo_title (7096285873490705119) -->
-    <skip />
+    <string name="template_layouts_demo_title" msgid="788249269446087847">"Макет шаблона (режим демонстрации)"</string>
+    <string name="grid_template_menu_demo_title" msgid="7096285873490705119">"Шаблоны меню в виде сетки (режим демонстрации)"</string>
     <string name="voice_access_demo_title" msgid="3825223890895361496">"Экран демонстрации Voice Access"</string>
     <string name="user_interactions_demo_title" msgid="1356952319161314986">"Взаимодействие пользователя"</string>
     <string name="request_permission_menu_demo_title" msgid="4796486779527427017">"Демонстрации запроса разрешений"</string>
@@ -337,6 +331,5 @@
     <string name="loading_toggle_enabled" msgid="8828072732804454994">"Загрузка включена"</string>
     <string name="loading_toggle_disabled" msgid="7689738885077382673">"Загрузка отключена"</string>
     <string name="loading_screen" msgid="4771507490730308794">"Экран загрузки"</string>
-    <!-- no translation found for vector_toggle_details (1301305340033556819) -->
-    <skip />
+    <string name="vector_toggle_details" msgid="1301305340033556819">"Нажмите, чтобы добавить или удалить цвет"</string>
 </resources>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-si/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-si/strings.xml
index cffecdb..0486f9f 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-si/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-si/strings.xml
@@ -230,8 +230,7 @@
     <string name="long_msg_template_not_supported_title" msgid="8600719470226274925">"නොගැළපෙන සංග්‍රාහක"</string>
     <string name="msg_template_demo_title" msgid="3895210951340409473">"පණිවිඩ අච්චු ආදර්ශනය"</string>
     <string name="msg_template_demo_text" msgid="2275291617716161409">"පණිවිඩය මෙතැනට යයි.\nදෙවන පේළියේ තවත් පෙළ."</string>
-    <!-- no translation found for short_msg_template_demo_title (6798738013668580714) -->
-    <skip />
+    <string name="short_msg_template_demo_title" msgid="6798738013668580714">"කෙටි පණිවිඩ අච්චු ආදර්ශනය"</string>
     <string name="pane_template_demo_title" msgid="7804292600060341608">"කවුළු අච්චු ආදර්ශනය"</string>
     <string name="place_list_template_demo_title" msgid="2054022985455460469">"ස්ථාන ලැයිස්තු අච්චු ආදර්ශනය"</string>
     <string name="browse_places_title" msgid="7246005909846715898">"ස්ථාන බ්‍රවුස් කරන්න"</string>
@@ -267,8 +266,7 @@
     <string name="vector_with_tint_title" msgid="1022346419829696827">"වර්ණ ගැන්වීමක් සහිතව, ඇඳිය හැකි දෛශිකයක්"</string>
     <string name="vector_with_app_theme_attr_title" msgid="4890094482708376219">"යෙදුමක එහි වර්ණය සඳහා තේමා ගුණාංගය සහිත, ඇඳිය හැකි දෛශිකයක්"</string>
     <string name="png_res_title" msgid="7437083018336747544">"PNG, සම්පතක් ලෙස යවන ලදී"</string>
-    <!-- no translation found for png_bitmap_title (3385912074130977032) -->
-    <skip />
+    <string name="png_bitmap_title" msgid="3385912074130977032">"PNG එකක්, bitmap එකක් ලෙස යවන ලදි"</string>
     <string name="just_row_title" msgid="965700021568970725">"මාතෘකාවක් පමණයි"</string>
     <string name="title_with_app_icon_row_title" msgid="6294250714820740520">"යෙදුම් නිරූපකය සහිත මාතෘකාව"</string>
     <string name="title_with_res_id_image_row_title" msgid="3813134904602875778">"සම්පත් ID රූපය සහිත මාතෘකාව"</string>
@@ -280,8 +278,7 @@
     <string name="rows_demo_title" msgid="3198566660454251007">"පේළි ආදර්ශනය"</string>
     <string name="text_icons_demo_title" msgid="8732943920672143201">"පෙළ සහ නිරූපක ආදර්ශන"</string>
     <string name="row_text_icons_demo_title" msgid="135167694047524905">"පෙළ සහ නිරූපණ ආදර්ශන සහිත පේළි"</string>
-    <!-- no translation found for radio_button_list_demo_title (9082264324855338774) -->
-    <skip />
+    <string name="radio_button_list_demo_title" msgid="9082264324855338774">"රේඩියෝ බොත්තම් ලැයිස්තු ආදර්ශන"</string>
     <string name="selectable_lists_demo_title" msgid="5492658731113129386">"තෝරා ගත හැකි ලැයිස්තු ආදර්ශනය"</string>
     <string name="option_1_title" msgid="7221252541651471199">"විකල්පය 1"</string>
     <string name="option_2_title" msgid="1905146448697963818">"විකල්පය 2"</string>
@@ -295,8 +292,7 @@
     <string name="task_limit_reached_msg" msgid="6038763366777119364">"කාර්ය සීමාව ළඟා විය\nඉදිරියට යාම යෙදුම බලෙන් නවත්වනු ඇත"</string>
     <string name="task_step_of_title" msgid="2791717962535723839">"%2$d කින් %1$dවන කාර්ය පියවර"</string>
     <string name="task_step_of_text" msgid="4646729781462227219">"ඉදිරියට යාමට ක්ලික් කරන්න"</string>
-    <!-- no translation found for toggle_button_demo_title (3179103600967398928) -->
-    <skip />
+    <string name="toggle_button_demo_title" msgid="3179103600967398928">"බොත්තම් ආදර්ශනය ටොගල් කරන්න"</string>
     <string name="toggle_test_title" msgid="924485265152862631">"ටොගල පරීක්ෂාව"</string>
     <string name="toggle_test_text" msgid="8107217216013312857">"රාජ්‍ය වෙනස් කිරීම්වලට ඉඩ දේ"</string>
     <string name="toggle_test_first_toggle_title" msgid="3635022201072117680">"ටොගල පරීක්ෂාව සබල කරන්න"</string>
@@ -311,10 +307,8 @@
     <string name="toggle_test_disabled" msgid="8366040658408451664">"ටොගල පරීක්ෂාව අබලයි"</string>
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"විවිධ අච්චු ආදර්ශන"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"ප්‍රකාශක තේරූ ආදර්ශන"</string>
-    <!-- no translation found for template_layouts_demo_title (788249269446087847) -->
-    <skip />
-    <!-- no translation found for grid_template_menu_demo_title (7096285873490705119) -->
-    <skip />
+    <string name="template_layouts_demo_title" msgid="788249269446087847">"අච්චු පිරිසැලසුම් ආදර්ශන"</string>
+    <string name="grid_template_menu_demo_title" msgid="7096285873490705119">"ජාල අච්චු ආදර්ශන"</string>
     <string name="voice_access_demo_title" msgid="3825223890895361496">"හඬ ප්‍රවේශ ආදර්ශන තිරය"</string>
     <string name="user_interactions_demo_title" msgid="1356952319161314986">"පරිශීලක අන්තර්ක්‍රියා"</string>
     <string name="request_permission_menu_demo_title" msgid="4796486779527427017">"අවසර ආදර්ශන ඉල්ලන්න"</string>
@@ -337,6 +331,5 @@
     <string name="loading_toggle_enabled" msgid="8828072732804454994">"පූරණය සබල කර ඇත"</string>
     <string name="loading_toggle_disabled" msgid="7689738885077382673">"පූරණය අබල කර ඇත"</string>
     <string name="loading_screen" msgid="4771507490730308794">"තිරය පූරණය වේ"</string>
-    <!-- no translation found for vector_toggle_details (1301305340033556819) -->
-    <skip />
+    <string name="vector_toggle_details" msgid="1301305340033556819">"වර්ණය එක් කිරීමට/ඉවත් කිරීමට ටොගල් කරන්න"</string>
 </resources>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-sl/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-sl/strings.xml
index 43db76a..940a276 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-sl/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-sl/strings.xml
@@ -230,8 +230,7 @@
     <string name="long_msg_template_not_supported_title" msgid="8600719470226274925">"Nezdružljiv gostitelj"</string>
     <string name="msg_template_demo_title" msgid="3895210951340409473">"Predstavitvena različica predloge sporočila"</string>
     <string name="msg_template_demo_text" msgid="2275291617716161409">"Sporočilo bo prikazano tukaj.\nVeč besedila bo v drugi vrstici."</string>
-    <!-- no translation found for short_msg_template_demo_title (6798738013668580714) -->
-    <skip />
+    <string name="short_msg_template_demo_title" msgid="6798738013668580714">"Predstavitvena različica predloge sporočila SMS"</string>
     <string name="pane_template_demo_title" msgid="7804292600060341608">"Predstavitvena različica predloge podokna"</string>
     <string name="place_list_template_demo_title" msgid="2054022985455460469">"Predstavitvena različica predloge seznama mest"</string>
     <string name="browse_places_title" msgid="7246005909846715898">"Brskanje po mestih"</string>
@@ -267,8 +266,7 @@
     <string name="vector_with_tint_title" msgid="1022346419829696827">"Narisati je mogoče obarvano vektorsko sliko"</string>
     <string name="vector_with_app_theme_attr_title" msgid="4890094482708376219">"Narisati je mogoče vektorsko sliko, katere barvni atribut je tema aplikacije"</string>
     <string name="png_res_title" msgid="7437083018336747544">"Slika PNG, poslana kot vir"</string>
-    <!-- no translation found for png_bitmap_title (3385912074130977032) -->
-    <skip />
+    <string name="png_bitmap_title" msgid="3385912074130977032">"Datoteka PNG, poslana kot bitna slika"</string>
     <string name="just_row_title" msgid="965700021568970725">"Samo naslov"</string>
     <string name="title_with_app_icon_row_title" msgid="6294250714820740520">"Naslov z ikono aplikacije"</string>
     <string name="title_with_res_id_image_row_title" msgid="3813134904602875778">"Naslov s sliko ID-ja vira"</string>
@@ -280,8 +278,7 @@
     <string name="rows_demo_title" msgid="3198566660454251007">"Predstavitvena različica vrstic"</string>
     <string name="text_icons_demo_title" msgid="8732943920672143201">"Predstavitvene različice besedila in ikon"</string>
     <string name="row_text_icons_demo_title" msgid="135167694047524905">"Predstavitvena različica vrstic z besedilom in ikonami"</string>
-    <!-- no translation found for radio_button_list_demo_title (9082264324855338774) -->
-    <skip />
+    <string name="radio_button_list_demo_title" msgid="9082264324855338774">"Predstavitvena različica seznamov izbirnega gumba"</string>
     <string name="selectable_lists_demo_title" msgid="5492658731113129386">"Predstavitvena različica seznamov, ki omogočajo izbiro"</string>
     <string name="option_1_title" msgid="7221252541651471199">"1. možnost"</string>
     <string name="option_2_title" msgid="1905146448697963818">"2. možnost"</string>
@@ -295,8 +292,7 @@
     <string name="task_limit_reached_msg" msgid="6038763366777119364">"Dosežena je omejitev opravil.\nČe nadaljujete, bo aplikacija prisilno ustavljena."</string>
     <string name="task_step_of_title" msgid="2791717962535723839">"Korak opravila %1$d od %2$d"</string>
     <string name="task_step_of_text" msgid="4646729781462227219">"Kliknite, če želite nadaljevati."</string>
-    <!-- no translation found for toggle_button_demo_title (3179103600967398928) -->
-    <skip />
+    <string name="toggle_button_demo_title" msgid="3179103600967398928">"Predstavitvena različica preklopnega gumba"</string>
     <string name="toggle_test_title" msgid="924485265152862631">"Preizkus preklopa"</string>
     <string name="toggle_test_text" msgid="8107217216013312857">"Spremembe stanj so dovoljene."</string>
     <string name="toggle_test_first_toggle_title" msgid="3635022201072117680">"Omogoči preizkus preklopa"</string>
@@ -311,10 +307,8 @@
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Preizkus preklopa je onemogočen."</string>
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Predstavitvene različice različnih predlog"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Predstavitvene različice izpostavljenih stvari"</string>
-    <!-- no translation found for template_layouts_demo_title (788249269446087847) -->
-    <skip />
-    <!-- no translation found for grid_template_menu_demo_title (7096285873490705119) -->
-    <skip />
+    <string name="template_layouts_demo_title" msgid="788249269446087847">"Predstavitvene različice postavitev predlog"</string>
+    <string name="grid_template_menu_demo_title" msgid="7096285873490705119">"Predstavitvene različice predlog mreže"</string>
     <string name="voice_access_demo_title" msgid="3825223890895361496">"Predstavitvena različica zaslona za glasovni dostop"</string>
     <string name="user_interactions_demo_title" msgid="1356952319161314986">"Uporabniške interakcije"</string>
     <string name="request_permission_menu_demo_title" msgid="4796486779527427017">"Predstavitvene različice zahtev za dovoljenja"</string>
@@ -337,6 +331,5 @@
     <string name="loading_toggle_enabled" msgid="8828072732804454994">"Nalaganje je omogočeno"</string>
     <string name="loading_toggle_disabled" msgid="7689738885077382673">"Nalaganje je onemogočeno"</string>
     <string name="loading_screen" msgid="4771507490730308794">"Zaslon za nalaganje"</string>
-    <!-- no translation found for vector_toggle_details (1301305340033556819) -->
-    <skip />
+    <string name="vector_toggle_details" msgid="1301305340033556819">"Preklop za dodajanje/odstranitev barve"</string>
 </resources>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-sq/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-sq/strings.xml
index bdd5dce..15f3cd5 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-sq/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-sq/strings.xml
@@ -230,8 +230,7 @@
     <string name="long_msg_template_not_supported_title" msgid="8600719470226274925">"Organizator i papërputhshëm"</string>
     <string name="msg_template_demo_title" msgid="3895210951340409473">"Demonstrimi i shabllonit të mesazhit"</string>
     <string name="msg_template_demo_text" msgid="2275291617716161409">"Mesazhi shkruhet këtu.\nMë shumë tekst në rreshtin e dytë."</string>
-    <!-- no translation found for short_msg_template_demo_title (6798738013668580714) -->
-    <skip />
+    <string name="short_msg_template_demo_title" msgid="6798738013668580714">"Demonstrimi i shabllonit të mesazheve të shkurtra"</string>
     <string name="pane_template_demo_title" msgid="7804292600060341608">"Demonstrimi i shabllonit të panelit"</string>
     <string name="place_list_template_demo_title" msgid="2054022985455460469">"Demonstrimi i shabllonit të listës së vendeve"</string>
     <string name="browse_places_title" msgid="7246005909846715898">"Shfleto vendet"</string>
@@ -267,8 +266,7 @@
     <string name="vector_with_tint_title" msgid="1022346419829696827">"Një vektor i vizatueshëm, me nuancë"</string>
     <string name="vector_with_app_theme_attr_title" msgid="4890094482708376219">"Një vektor i vizatueshëm, me atributin e temës së aplikacionit për ngjyrën e tij"</string>
     <string name="png_res_title" msgid="7437083018336747544">"Një PNG, e dërguar si burim"</string>
-    <!-- no translation found for png_bitmap_title (3385912074130977032) -->
-    <skip />
+    <string name="png_bitmap_title" msgid="3385912074130977032">"Një PNG, e dërguar si bitmap"</string>
     <string name="just_row_title" msgid="965700021568970725">"Thjesht një titull"</string>
     <string name="title_with_app_icon_row_title" msgid="6294250714820740520">"Titulli me ikonën e aplikacionit"</string>
     <string name="title_with_res_id_image_row_title" msgid="3813134904602875778">"Titulli me imazhin e ID-së së burimit"</string>
@@ -280,8 +278,7 @@
     <string name="rows_demo_title" msgid="3198566660454251007">"Demonstrimi i rreshtave"</string>
     <string name="text_icons_demo_title" msgid="8732943920672143201">"Demonstrimet e tekstit dhe ikonave"</string>
     <string name="row_text_icons_demo_title" msgid="135167694047524905">"Demonstrimi i rreshtave me tekst dhe i ikonave"</string>
-    <!-- no translation found for radio_button_list_demo_title (9082264324855338774) -->
-    <skip />
+    <string name="radio_button_list_demo_title" msgid="9082264324855338774">"Demonstrimet e listave të butonave të radios"</string>
     <string name="selectable_lists_demo_title" msgid="5492658731113129386">"Demonstrimi i listave të zgjedhshme"</string>
     <string name="option_1_title" msgid="7221252541651471199">"Opsioni 1"</string>
     <string name="option_2_title" msgid="1905146448697963818">"Opsioni 2"</string>
@@ -295,8 +292,7 @@
     <string name="task_limit_reached_msg" msgid="6038763366777119364">"U arrit kufiri i detyrës\nVazhdimi përpara do ta ndalojë aplikacionin me forcë"</string>
     <string name="task_step_of_title" msgid="2791717962535723839">"Hapi i detyrës: %1$d nga %2$d"</string>
     <string name="task_step_of_text" msgid="4646729781462227219">"Kliko për të vazhduar përpara"</string>
-    <!-- no translation found for toggle_button_demo_title (3179103600967398928) -->
-    <skip />
+    <string name="toggle_button_demo_title" msgid="3179103600967398928">"Demonstrimi i butonit të aktivizimit/çaktivizimit"</string>
     <string name="toggle_test_title" msgid="924485265152862631">"Testimi i butonit aktivizo/çaktivizo"</string>
     <string name="toggle_test_text" msgid="8107217216013312857">"Lejohen ndryshimet në monitorim"</string>
     <string name="toggle_test_first_toggle_title" msgid="3635022201072117680">"Aktivizo testimin e butonit aktivizo/çaktivizo"</string>
@@ -311,10 +307,8 @@
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Testimi i butonit aktivizo/çaktivizo u çaktivizua"</string>
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Demonstrime shabllonesh të ndryshme"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Demonstrime të prezantimit"</string>
-    <!-- no translation found for template_layouts_demo_title (788249269446087847) -->
-    <skip />
-    <!-- no translation found for grid_template_menu_demo_title (7096285873490705119) -->
-    <skip />
+    <string name="template_layouts_demo_title" msgid="788249269446087847">"Demonstrimet e strukturës së shabllonit"</string>
+    <string name="grid_template_menu_demo_title" msgid="7096285873490705119">"Demonstrimet e shabllonit të rrjetit"</string>
     <string name="voice_access_demo_title" msgid="3825223890895361496">"Ekrani demonstrues i \"Qasjes me zë\""</string>
     <string name="user_interactions_demo_title" msgid="1356952319161314986">"Ndërveprimet e përdoruesit"</string>
     <string name="request_permission_menu_demo_title" msgid="4796486779527427017">"Demonstrimet e kërkesës për leje"</string>
@@ -337,6 +331,5 @@
     <string name="loading_toggle_enabled" msgid="8828072732804454994">"Ngarkimi u aktivizua"</string>
     <string name="loading_toggle_disabled" msgid="7689738885077382673">"Ngarkimi u çaktivizua"</string>
     <string name="loading_screen" msgid="4771507490730308794">"Ekrani po ngarkohet"</string>
-    <!-- no translation found for vector_toggle_details (1301305340033556819) -->
-    <skip />
+    <string name="vector_toggle_details" msgid="1301305340033556819">"Aktivizo/çaktivizo për të shtuar/hequr ngjyrën"</string>
 </resources>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-sv/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-sv/strings.xml
index 6f58025..452e04a 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-sv/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-sv/strings.xml
@@ -230,8 +230,7 @@
     <string name="long_msg_template_not_supported_title" msgid="8600719470226274925">"Inkompatibel värd"</string>
     <string name="msg_template_demo_title" msgid="3895210951340409473">"Demo för meddelandemall"</string>
     <string name="msg_template_demo_text" msgid="2275291617716161409">"Här skrivs meddelandet.\nMer text på andra raden."</string>
-    <!-- no translation found for short_msg_template_demo_title (6798738013668580714) -->
-    <skip />
+    <string name="short_msg_template_demo_title" msgid="6798738013668580714">"Demo för mall för kort meddelande"</string>
     <string name="pane_template_demo_title" msgid="7804292600060341608">"Demo för rutmall"</string>
     <string name="place_list_template_demo_title" msgid="2054022985455460469">"Demo för platslistmall"</string>
     <string name="browse_places_title" msgid="7246005909846715898">"Bläddra bland platser"</string>
@@ -267,8 +266,7 @@
     <string name="vector_with_tint_title" msgid="1022346419829696827">"En vektorutdragbar, med toning"</string>
     <string name="vector_with_app_theme_attr_title" msgid="4890094482708376219">"En vektorutdragbar, med en apps tema som färger"</string>
     <string name="png_res_title" msgid="7437083018336747544">"En PNG-fil, skickad som en resurs"</string>
-    <!-- no translation found for png_bitmap_title (3385912074130977032) -->
-    <skip />
+    <string name="png_bitmap_title" msgid="3385912074130977032">"En PNG-fil, skickad som en bitmap"</string>
     <string name="just_row_title" msgid="965700021568970725">"Bara en titel"</string>
     <string name="title_with_app_icon_row_title" msgid="6294250714820740520">"Namn med appikon"</string>
     <string name="title_with_res_id_image_row_title" msgid="3813134904602875778">"Namn med resurs-id-bild"</string>
@@ -280,8 +278,7 @@
     <string name="rows_demo_title" msgid="3198566660454251007">"Demo för rader"</string>
     <string name="text_icons_demo_title" msgid="8732943920672143201">"Demor för text och ikoner"</string>
     <string name="row_text_icons_demo_title" msgid="135167694047524905">"Demo för rader med text och ikoner"</string>
-    <!-- no translation found for radio_button_list_demo_title (9082264324855338774) -->
-    <skip />
+    <string name="radio_button_list_demo_title" msgid="9082264324855338774">"Demo för alternativknappslistor"</string>
     <string name="selectable_lists_demo_title" msgid="5492658731113129386">"Demo för valbara listor"</string>
     <string name="option_1_title" msgid="7221252541651471199">"Alternativ 1"</string>
     <string name="option_2_title" msgid="1905146448697963818">"Alternativ 2"</string>
@@ -295,8 +292,7 @@
     <string name="task_limit_reached_msg" msgid="6038763366777119364">"Gränsen för antal uppgifter har uppnåtts\nOm du fortsätter tvingas appen att avslutas"</string>
     <string name="task_step_of_title" msgid="2791717962535723839">"Uppgiftssteg %1$d av %2$d"</string>
     <string name="task_step_of_text" msgid="4646729781462227219">"Klicka för att gå vidare"</string>
-    <!-- no translation found for toggle_button_demo_title (3179103600967398928) -->
-    <skip />
+    <string name="toggle_button_demo_title" msgid="3179103600967398928">"Demo för på/av-knapp"</string>
     <string name="toggle_test_title" msgid="924485265152862631">"Test för att aktivera och inaktivera"</string>
     <string name="toggle_test_text" msgid="8107217216013312857">"Tillståndsbaserade ändringar är tillåtna"</string>
     <string name="toggle_test_first_toggle_title" msgid="3635022201072117680">"Aktivera test av aktivera/inaktivera"</string>
@@ -311,10 +307,8 @@
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Test av aktivera/inaktivera har inaktiverats"</string>
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Demor för övriga mallar"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Visa demor"</string>
-    <!-- no translation found for template_layouts_demo_title (788249269446087847) -->
-    <skip />
-    <!-- no translation found for grid_template_menu_demo_title (7096285873490705119) -->
-    <skip />
+    <string name="template_layouts_demo_title" msgid="788249269446087847">"Demor för mallayouter"</string>
+    <string name="grid_template_menu_demo_title" msgid="7096285873490705119">"Demor för elnätsmallar"</string>
     <string name="voice_access_demo_title" msgid="3825223890895361496">"Demoskärm för röststyrning"</string>
     <string name="user_interactions_demo_title" msgid="1356952319161314986">"Användarinteraktioner"</string>
     <string name="request_permission_menu_demo_title" msgid="4796486779527427017">"Demor av behörighetsförfrågningar"</string>
@@ -337,6 +331,5 @@
     <string name="loading_toggle_enabled" msgid="8828072732804454994">"Inläsning har aktiverats"</string>
     <string name="loading_toggle_disabled" msgid="7689738885077382673">"Inläsning har inaktiverats"</string>
     <string name="loading_screen" msgid="4771507490730308794">"Inläsningsskärm"</string>
-    <!-- no translation found for vector_toggle_details (1301305340033556819) -->
-    <skip />
+    <string name="vector_toggle_details" msgid="1301305340033556819">"Aktivera/inaktivera för att lägga till/ta bort färg"</string>
 </resources>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-sw/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-sw/strings.xml
index 00a7c4e..f2b192a 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-sw/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-sw/strings.xml
@@ -230,8 +230,7 @@
     <string name="long_msg_template_not_supported_title" msgid="8600719470226274925">"Mpangishi haoani"</string>
     <string name="msg_template_demo_title" msgid="3895210951340409473">"Onyesho la Kiolezo cha Ujumbe"</string>
     <string name="msg_template_demo_text" msgid="2275291617716161409">"Ujumbe unaandikwa hapa.\nMaandishi ya ziada kwenye mstari wa pili."</string>
-    <!-- no translation found for short_msg_template_demo_title (6798738013668580714) -->
-    <skip />
+    <string name="short_msg_template_demo_title" msgid="6798738013668580714">"Onyesho la Kiolezo cha Ujumbe Mfupi"</string>
     <string name="pane_template_demo_title" msgid="7804292600060341608">"Onyesho la Kiolezo cha Kijisehemu"</string>
     <string name="place_list_template_demo_title" msgid="2054022985455460469">"Onyesho la Kiolezo cha Orodha ya Mahali"</string>
     <string name="browse_places_title" msgid="7246005909846715898">"Vinjari Maeneo"</string>
@@ -267,8 +266,7 @@
     <string name="vector_with_tint_title" msgid="1022346419829696827">"Vekta inayoweza kuchomolewa, yenye rangi maalum"</string>
     <string name="vector_with_app_theme_attr_title" msgid="4890094482708376219">"Vekta inayoweza kuchomolewa, yenye sifa ya mandhari ya programu kama rangi yake"</string>
     <string name="png_res_title" msgid="7437083018336747544">"PNG, imetumwa kama nyenzo"</string>
-    <!-- no translation found for png_bitmap_title (3385912074130977032) -->
-    <skip />
+    <string name="png_bitmap_title" msgid="3385912074130977032">"Faili ya PNG, imetumwa katika muundo wa bitmap"</string>
     <string name="just_row_title" msgid="965700021568970725">"Jina pekee"</string>
     <string name="title_with_app_icon_row_title" msgid="6294250714820740520">"Jina lenye aikoni ya programu"</string>
     <string name="title_with_res_id_image_row_title" msgid="3813134904602875778">"Jina lenye picha ya kitambulisho cha nyenzo"</string>
@@ -280,8 +278,7 @@
     <string name="rows_demo_title" msgid="3198566660454251007">"Onyesho la Safu Mlalo"</string>
     <string name="text_icons_demo_title" msgid="8732943920672143201">"Maonyesho ya Maandishi na Aikoni"</string>
     <string name="row_text_icons_demo_title" msgid="135167694047524905">"Onyesho la Safu Mlalo Zenye Maandishi na Aikoni"</string>
-    <!-- no translation found for radio_button_list_demo_title (9082264324855338774) -->
-    <skip />
+    <string name="radio_button_list_demo_title" msgid="9082264324855338774">"Onyesho la Orodha za Kitufe cha Mviringo"</string>
     <string name="selectable_lists_demo_title" msgid="5492658731113129386">"Onyesho la Orodha Zinazoweza Kuchaguliwa"</string>
     <string name="option_1_title" msgid="7221252541651471199">"Chaguo la 1"</string>
     <string name="option_2_title" msgid="1905146448697963818">"Chaguo la 2"</string>
@@ -295,8 +292,7 @@
     <string name="task_limit_reached_msg" msgid="6038763366777119364">"Kikomo cha shughuli kimefikiwa\nKuendelea kutalazimisha kuzima programu"</string>
     <string name="task_step_of_title" msgid="2791717962535723839">"Hatua ya shughuli %1$d kati ya %2$d"</string>
     <string name="task_step_of_text" msgid="4646729781462227219">"Bofya ili uendelee"</string>
-    <!-- no translation found for toggle_button_demo_title (3179103600967398928) -->
-    <skip />
+    <string name="toggle_button_demo_title" msgid="3179103600967398928">"Onyesho la Kitufe cha Kugeuza"</string>
     <string name="toggle_test_title" msgid="924485265152862631">"Jaribio la kipengele cha kuwasha/kuzima"</string>
     <string name="toggle_test_text" msgid="8107217216013312857">"Mabadiliko yanayoweza kurudiwa mara kwa mara yanaruhusiwa"</string>
     <string name="toggle_test_first_toggle_title" msgid="3635022201072117680">"Washa Jaribio la Kipengele cha Kuwasha/Kuzima"</string>
@@ -311,10 +307,8 @@
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Jaribio la Kipengele cha Kuwasha/Kuzima Limezimwa"</string>
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Maonyesho ya Violezo Anuwai"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Maonyesho ya Kuangazia"</string>
-    <!-- no translation found for template_layouts_demo_title (788249269446087847) -->
-    <skip />
-    <!-- no translation found for grid_template_menu_demo_title (7096285873490705119) -->
-    <skip />
+    <string name="template_layouts_demo_title" msgid="788249269446087847">"Maonyesho ya Kiolezo cha Muundo"</string>
+    <string name="grid_template_menu_demo_title" msgid="7096285873490705119">"Maonyesho ya Kiolezo cha Gridi"</string>
     <string name="voice_access_demo_title" msgid="3825223890895361496">"Skrini ya Toleo la Kujaribu la Kufikia kwa Kutamka"</string>
     <string name="user_interactions_demo_title" msgid="1356952319161314986">"Shughuli za Mtumiaji"</string>
     <string name="request_permission_menu_demo_title" msgid="4796486779527427017">"Omba Matoleo ya Kujaribu ya Ruhusa"</string>
@@ -337,6 +331,5 @@
     <string name="loading_toggle_enabled" msgid="8828072732804454994">"Upakiaji umeruhusiwa"</string>
     <string name="loading_toggle_disabled" msgid="7689738885077382673">"Upakiaji umezuiwa"</string>
     <string name="loading_screen" msgid="4771507490730308794">"Skrini inayopakia"</string>
-    <!-- no translation found for vector_toggle_details (1301305340033556819) -->
-    <skip />
+    <string name="vector_toggle_details" msgid="1301305340033556819">"Geuza ili uweke au uondoe rangi"</string>
 </resources>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-te/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-te/strings.xml
index 3f064d8..172cdcb 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-te/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-te/strings.xml
@@ -230,8 +230,7 @@
     <string name="long_msg_template_not_supported_title" msgid="8600719470226274925">"అనుకూలం కాని హోస్ట్"</string>
     <string name="msg_template_demo_title" msgid="3895210951340409473">"మెసేజ్ టెంప్లేట్ డెమో"</string>
     <string name="msg_template_demo_text" msgid="2275291617716161409">"మెసేజ్‌ను ఇక్కడ టైప్ చేయాలి.\nరెండవ లైన్‌లో మరింత టెక్స్ట్‌ను జోడించవచ్చు."</string>
-    <!-- no translation found for short_msg_template_demo_title (6798738013668580714) -->
-    <skip />
+    <string name="short_msg_template_demo_title" msgid="6798738013668580714">"షార్ట్ మెసేజ్ టెంప్లేట్ డెమో"</string>
     <string name="pane_template_demo_title" msgid="7804292600060341608">"పేన్ టెంప్లేట్ డెమో"</string>
     <string name="place_list_template_demo_title" msgid="2054022985455460469">"స్థలాల లిస్ట్ టెంప్లేట్ డెమో"</string>
     <string name="browse_places_title" msgid="7246005909846715898">"స్థలాలను బ్రౌజ్ చేయండి"</string>
@@ -267,8 +266,7 @@
     <string name="vector_with_tint_title" msgid="1022346419829696827">"టింట్‌తో డ్రా చేయదగిన ఒక వెక్టార్"</string>
     <string name="vector_with_app_theme_attr_title" msgid="4890094482708376219">"రంగు కోసం యాప్ రూపం లక్షణంతో డ్రా చేయదగిన వెక్టార్"</string>
     <string name="png_res_title" msgid="7437083018336747544">"PNG, ఒక రిసోర్స్‌గా పంపబడింది"</string>
-    <!-- no translation found for png_bitmap_title (3385912074130977032) -->
-    <skip />
+    <string name="png_bitmap_title" msgid="3385912074130977032">"PNG, ఒక బిట్‌మ్యాప్‌గా పంపబడింది"</string>
     <string name="just_row_title" msgid="965700021568970725">"ఒక టైటిల్ మాత్రమే"</string>
     <string name="title_with_app_icon_row_title" msgid="6294250714820740520">"యాప్ చిహ్నంతో టైటిల్"</string>
     <string name="title_with_res_id_image_row_title" msgid="3813134904602875778">"రిసోర్స్ ID ఇమేజ్‌తో టైటిల్"</string>
@@ -280,8 +278,7 @@
     <string name="rows_demo_title" msgid="3198566660454251007">"అడ్డు వరుసల డెమో"</string>
     <string name="text_icons_demo_title" msgid="8732943920672143201">"టెక్స్ట్, చిహ్నాల డెమోలు"</string>
     <string name="row_text_icons_demo_title" msgid="135167694047524905">"టెక్స్ట్, చిహ్నాల డెమోతో అడ్డు వరుసలు"</string>
-    <!-- no translation found for radio_button_list_demo_title (9082264324855338774) -->
-    <skip />
+    <string name="radio_button_list_demo_title" msgid="9082264324855338774">"రేడియో బటన్ లిస్ట్‌ల డెమో"</string>
     <string name="selectable_lists_demo_title" msgid="5492658731113129386">"ఎంచుకోదగిన లిస్ట్‌ల డెమో"</string>
     <string name="option_1_title" msgid="7221252541651471199">"ఆప్షన్ 1"</string>
     <string name="option_2_title" msgid="1905146448697963818">"ఆప్షన్ 2"</string>
@@ -295,8 +292,7 @@
     <string name="task_limit_reached_msg" msgid="6038763366777119364">"టాస్క్‌ల పరిమితిని చేరుకున్నారు\nఇంకా టాస్క్‌లను ఎంచుకుంటే యాప్ ఫోర్స్ స్టాప్ అవుతుంది"</string>
     <string name="task_step_of_title" msgid="2791717962535723839">"%2$dలో %1$d టాస్క్ దశ"</string>
     <string name="task_step_of_text" msgid="4646729781462227219">"ముందుకు వెళ్లడానికి క్లిక్ చేయండి"</string>
-    <!-- no translation found for toggle_button_demo_title (3179103600967398928) -->
-    <skip />
+    <string name="toggle_button_demo_title" msgid="3179103600967398928">"టోగుల్ బటన్ డెమో"</string>
     <string name="toggle_test_title" msgid="924485265152862631">"టోగుల్ టెస్ట్"</string>
     <string name="toggle_test_text" msgid="8107217216013312857">"స్టేట్‌ఫుల్ మార్పులు అనుమతించబడతాయి"</string>
     <string name="toggle_test_first_toggle_title" msgid="3635022201072117680">"టోగుల్ టెస్ట్‌ను ఎనేబుల్ చేయండి"</string>
@@ -311,10 +307,8 @@
     <string name="toggle_test_disabled" msgid="8366040658408451664">"టోగుల్ టెస్ట్ డిజేబుల్ చేయబడింది"</string>
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"ఇతర టెంప్లేట్‌ల డెమోలు"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"డెమోలను ప్రదర్శించండి"</string>
-    <!-- no translation found for template_layouts_demo_title (788249269446087847) -->
-    <skip />
-    <!-- no translation found for grid_template_menu_demo_title (7096285873490705119) -->
-    <skip />
+    <string name="template_layouts_demo_title" msgid="788249269446087847">"టెంప్లేట్ లేఅవుట్ డెమోలు"</string>
+    <string name="grid_template_menu_demo_title" msgid="7096285873490705119">"గ్రిడ్ టెంప్లేట్ డెమోలు"</string>
     <string name="voice_access_demo_title" msgid="3825223890895361496">"Voice Access డెమో స్క్రీన్"</string>
     <string name="user_interactions_demo_title" msgid="1356952319161314986">"యూజర్ ఇంటరాక్షన్‌లు"</string>
     <string name="request_permission_menu_demo_title" msgid="4796486779527427017">"అనుమతుల డెమోలను రిక్వెస్ట్ చేయండి"</string>
@@ -337,6 +331,5 @@
     <string name="loading_toggle_enabled" msgid="8828072732804454994">"లోడింగ్ ఎనేబుల్ చేయబడింది"</string>
     <string name="loading_toggle_disabled" msgid="7689738885077382673">"లోడింగ్ డిజేబుల్ చేయబడింది"</string>
     <string name="loading_screen" msgid="4771507490730308794">"లోడింగ్ స్క్రీన్"</string>
-    <!-- no translation found for vector_toggle_details (1301305340033556819) -->
-    <skip />
+    <string name="vector_toggle_details" msgid="1301305340033556819">"రంగును జోడించడానికి/తీసివేయడానికి టోగుల్ చేయండి"</string>
 </resources>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-tr/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-tr/strings.xml
index 6c038b6..26bccb1 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-tr/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-tr/strings.xml
@@ -230,8 +230,7 @@
     <string name="long_msg_template_not_supported_title" msgid="8600719470226274925">"Uyumsuz ana makine"</string>
     <string name="msg_template_demo_title" msgid="3895210951340409473">"Mesaj Şablonu Demosu"</string>
     <string name="msg_template_demo_text" msgid="2275291617716161409">"Mesaj buraya gelir.\nİkinci satırda daha fazla metin bulunur."</string>
-    <!-- no translation found for short_msg_template_demo_title (6798738013668580714) -->
-    <skip />
+    <string name="short_msg_template_demo_title" msgid="6798738013668580714">"Kısa Mesaj Şablonu Demosu"</string>
     <string name="pane_template_demo_title" msgid="7804292600060341608">"Bölme Şablonu Demosu"</string>
     <string name="place_list_template_demo_title" msgid="2054022985455460469">"Yer Listesi Şablonu Demosu"</string>
     <string name="browse_places_title" msgid="7246005909846715898">"Yerlere Göz At"</string>
@@ -267,8 +266,7 @@
     <string name="vector_with_tint_title" msgid="1022346419829696827">"Tonlama içeren drawable vektör"</string>
     <string name="vector_with_app_theme_attr_title" msgid="4890094482708376219">"Bir uygulamanın rengiyle ilgili tema özelliği içeren drawable vektör"</string>
     <string name="png_res_title" msgid="7437083018336747544">"Kaynak olarak gönderilen bir PNG"</string>
-    <!-- no translation found for png_bitmap_title (3385912074130977032) -->
-    <skip />
+    <string name="png_bitmap_title" msgid="3385912074130977032">"Bit eşlem olarak gönderilen bir PNG dosyası"</string>
     <string name="just_row_title" msgid="965700021568970725">"Sadece başlık"</string>
     <string name="title_with_app_icon_row_title" msgid="6294250714820740520">"Uygulama simgesi içeren başlık"</string>
     <string name="title_with_res_id_image_row_title" msgid="3813134904602875778">"Kaynak kimliği resmi içeren başlık"</string>
@@ -280,8 +278,7 @@
     <string name="rows_demo_title" msgid="3198566660454251007">"Satırlar Demosu"</string>
     <string name="text_icons_demo_title" msgid="8732943920672143201">"Metin ve Simge Demoları"</string>
     <string name="row_text_icons_demo_title" msgid="135167694047524905">"Metin ve Simge İçeren Satırlar Demosu"</string>
-    <!-- no translation found for radio_button_list_demo_title (9082264324855338774) -->
-    <skip />
+    <string name="radio_button_list_demo_title" msgid="9082264324855338774">"Radyo Düğmesi Listeleri Demosu"</string>
     <string name="selectable_lists_demo_title" msgid="5492658731113129386">"Seçilebilir Listeler Demosu"</string>
     <string name="option_1_title" msgid="7221252541651471199">"1. Seçenek"</string>
     <string name="option_2_title" msgid="1905146448697963818">"2. Seçenek"</string>
@@ -295,8 +292,7 @@
     <string name="task_limit_reached_msg" msgid="6038763366777119364">"Görev sınırına ulaşıldı\nDevam ederseniz uygulama zorla durdurulacak"</string>
     <string name="task_step_of_title" msgid="2791717962535723839">"%1$d/%2$d görev adımı"</string>
     <string name="task_step_of_text" msgid="4646729781462227219">"Devam etmek için tıklayın"</string>
-    <!-- no translation found for toggle_button_demo_title (3179103600967398928) -->
-    <skip />
+    <string name="toggle_button_demo_title" msgid="3179103600967398928">"Açma/Kapatma Düğmesi Demosu"</string>
     <string name="toggle_test_title" msgid="924485265152862631">"Açma/kapatma testi"</string>
     <string name="toggle_test_text" msgid="8107217216013312857">"Durum bilgili değişikliklere izin verilir"</string>
     <string name="toggle_test_first_toggle_title" msgid="3635022201072117680">"Açma/Kapatma Testini Etkinleştir"</string>
@@ -311,10 +307,8 @@
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Açma/Kapatma Testi Devre Dışı"</string>
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Çeşitli Şablon Demoları"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Öne Çıkan Demoları"</string>
-    <!-- no translation found for template_layouts_demo_title (788249269446087847) -->
-    <skip />
-    <!-- no translation found for grid_template_menu_demo_title (7096285873490705119) -->
-    <skip />
+    <string name="template_layouts_demo_title" msgid="788249269446087847">"Şablon Düzeni Demoları"</string>
+    <string name="grid_template_menu_demo_title" msgid="7096285873490705119">"Izgara Şablonu Demoları"</string>
     <string name="voice_access_demo_title" msgid="3825223890895361496">"Sesli Erişim Demo Ekranı"</string>
     <string name="user_interactions_demo_title" msgid="1356952319161314986">"Kullanıcı Etkileşimleri"</string>
     <string name="request_permission_menu_demo_title" msgid="4796486779527427017">"İzin İsteme Demoları"</string>
@@ -337,6 +331,5 @@
     <string name="loading_toggle_enabled" msgid="8828072732804454994">"Yükleme işlemi etkinleştirildi"</string>
     <string name="loading_toggle_disabled" msgid="7689738885077382673">"Yükleme işlemi devre dışı bırakıldı"</string>
     <string name="loading_screen" msgid="4771507490730308794">"Yükleme ekranı"</string>
-    <!-- no translation found for vector_toggle_details (1301305340033556819) -->
-    <skip />
+    <string name="vector_toggle_details" msgid="1301305340033556819">"Renk eklemek/kaldırmak için açın/kapatın"</string>
 </resources>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-uk/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-uk/strings.xml
index bc8ca8c..0c01a38 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-uk/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-uk/strings.xml
@@ -230,8 +230,7 @@
     <string name="long_msg_template_not_supported_title" msgid="8600719470226274925">"Несумісний хост"</string>
     <string name="msg_template_demo_title" msgid="3895210951340409473">"Демонстрація шаблона повідомлення"</string>
     <string name="msg_template_demo_text" msgid="2275291617716161409">"Тут відображається повідомлення.\nБільше тексту – у другому рядку."</string>
-    <!-- no translation found for short_msg_template_demo_title (6798738013668580714) -->
-    <skip />
+    <string name="short_msg_template_demo_title" msgid="6798738013668580714">"Демонстрація шаблона короткого повідомлення"</string>
     <string name="pane_template_demo_title" msgid="7804292600060341608">"Демонстрація шаблона панелі"</string>
     <string name="place_list_template_demo_title" msgid="2054022985455460469">"Демонстрація шаблона \"Список місць\""</string>
     <string name="browse_places_title" msgid="7246005909846715898">"Перегляд місць"</string>
@@ -267,8 +266,7 @@
     <string name="vector_with_tint_title" msgid="1022346419829696827">"Векторний графічний ресурс, з відтінком"</string>
     <string name="vector_with_app_theme_attr_title" msgid="4890094482708376219">"Векторний графічний ресурс, з атрибутом теми додатка для його кольору"</string>
     <string name="png_res_title" msgid="7437083018336747544">"Файл у форматі PNG, надіслано як ресурс"</string>
-    <!-- no translation found for png_bitmap_title (3385912074130977032) -->
-    <skip />
+    <string name="png_bitmap_title" msgid="3385912074130977032">"Файл у форматі PNG, надіслано як бітову карту"</string>
     <string name="just_row_title" msgid="965700021568970725">"Лише назва"</string>
     <string name="title_with_app_icon_row_title" msgid="6294250714820740520">"Назва зі значком програми"</string>
     <string name="title_with_res_id_image_row_title" msgid="3813134904602875778">"Назва із зображенням ідентифікатора ресурсу"</string>
@@ -280,8 +278,7 @@
     <string name="rows_demo_title" msgid="3198566660454251007">"Демонстрація рядків"</string>
     <string name="text_icons_demo_title" msgid="8732943920672143201">"Демонстрації тексту та значків"</string>
     <string name="row_text_icons_demo_title" msgid="135167694047524905">"Демонстрація рядків із текстом і значками"</string>
-    <!-- no translation found for radio_button_list_demo_title (9082264324855338774) -->
-    <skip />
+    <string name="radio_button_list_demo_title" msgid="9082264324855338774">"Демонстрація списків перемикачів"</string>
     <string name="selectable_lists_demo_title" msgid="5492658731113129386">"Демонстрація списків, які можна вибрати"</string>
     <string name="option_1_title" msgid="7221252541651471199">"Варіант 1"</string>
     <string name="option_2_title" msgid="1905146448697963818">"Варіант 2"</string>
@@ -295,8 +292,7 @@
     <string name="task_limit_reached_msg" msgid="6038763366777119364">"Досягнуто ліміту завдань\nЯкщо продовжити, програму буде примусово зупинено"</string>
     <string name="task_step_of_title" msgid="2791717962535723839">"Крок завдання %1$d з %2$d"</string>
     <string name="task_step_of_text" msgid="4646729781462227219">"Натисніть, щоб продовжити"</string>
-    <!-- no translation found for toggle_button_demo_title (3179103600967398928) -->
-    <skip />
+    <string name="toggle_button_demo_title" msgid="3179103600967398928">"Демонстрація перемикача"</string>
     <string name="toggle_test_title" msgid="924485265152862631">"Змінити перевірку"</string>
     <string name="toggle_test_text" msgid="8107217216013312857">"Дозволено змінювати стан"</string>
     <string name="toggle_test_first_toggle_title" msgid="3635022201072117680">"Увімкнути перевірку перемикача"</string>
@@ -311,10 +307,8 @@
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Перевірку перемикача вимкнено"</string>
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Демонстрації інших шаблонів"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Увімкнути демонстрації"</string>
-    <!-- no translation found for template_layouts_demo_title (788249269446087847) -->
-    <skip />
-    <!-- no translation found for grid_template_menu_demo_title (7096285873490705119) -->
-    <skip />
+    <string name="template_layouts_demo_title" msgid="788249269446087847">"Демонстрації макетів шаблонів"</string>
+    <string name="grid_template_menu_demo_title" msgid="7096285873490705119">"Демонстрації шаблона у формі сітки"</string>
     <string name="voice_access_demo_title" msgid="3825223890895361496">"Демонстрація екрана Голосового доступу"</string>
     <string name="user_interactions_demo_title" msgid="1356952319161314986">"Взаємодія з користувачем"</string>
     <string name="request_permission_menu_demo_title" msgid="4796486779527427017">"Демонстрації запитів на отримання дозволів"</string>
@@ -337,6 +331,5 @@
     <string name="loading_toggle_enabled" msgid="8828072732804454994">"Завантаження ввімкнено"</string>
     <string name="loading_toggle_disabled" msgid="7689738885077382673">"Завантаження вимкнено"</string>
     <string name="loading_screen" msgid="4771507490730308794">"Екран завантаження"</string>
-    <!-- no translation found for vector_toggle_details (1301305340033556819) -->
-    <skip />
+    <string name="vector_toggle_details" msgid="1301305340033556819">"Використовуйте перемикач, щоб додати або вилучити колір"</string>
 </resources>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-ur/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-ur/strings.xml
index aa0ea3c..265bdd2 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-ur/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-ur/strings.xml
@@ -232,8 +232,7 @@
     <string name="long_msg_template_not_supported_title" msgid="8600719470226274925">"غیر موافق میزبان"</string>
     <string name="msg_template_demo_title" msgid="3895210951340409473">"پیغام کی تمثیل کا ڈیمو"</string>
     <string name="msg_template_demo_text" msgid="2275291617716161409">"پیغام یہاں جاتا ہے۔\nدوسری لان پر مزید ٹیکسٹ۔"</string>
-    <!-- no translation found for short_msg_template_demo_title (6798738013668580714) -->
-    <skip />
+    <string name="short_msg_template_demo_title" msgid="6798738013668580714">"پیغام کی تمثیل کا ڈیمو ترتیب دیں"</string>
     <string name="pane_template_demo_title" msgid="7804292600060341608">"پین کی تمثیل کا ڈیمو"</string>
     <string name="place_list_template_demo_title" msgid="2054022985455460469">"مقام کی فہرست کی تمثیل کا ڈیمو"</string>
     <string name="browse_places_title" msgid="7246005909846715898">"مقامات براؤز کریں"</string>
@@ -271,8 +270,7 @@
     <string name="vector_with_tint_title" msgid="1022346419829696827">"ٹِنٹ کے ساتھ ڈرائنگ کے قابل ویکٹر"</string>
     <string name="vector_with_app_theme_attr_title" msgid="4890094482708376219">"اس کے رنگ کے لیے کسی ایپ کی تھیم کے انتساب کے ساتھ ڈرائنگ کے قابل ویکٹر"</string>
     <string name="png_res_title" msgid="7437083018336747544">"‏PNG، وسیلے کے طور پر بھیجا گیا"</string>
-    <!-- no translation found for png_bitmap_title (3385912074130977032) -->
-    <skip />
+    <string name="png_bitmap_title" msgid="3385912074130977032">"‏ایک PNG، بٹ میپ کے طور پر بھیجا گیا"</string>
     <string name="just_row_title" msgid="965700021568970725">"صرف ایک عنوان"</string>
     <string name="title_with_app_icon_row_title" msgid="6294250714820740520">"ایپ آئیکن کے ساتھ عنوان"</string>
     <string name="title_with_res_id_image_row_title" msgid="3813134904602875778">"‏وسیلہ ID کی تصویر کے ساتھ عنوان"</string>
@@ -284,8 +282,7 @@
     <string name="rows_demo_title" msgid="3198566660454251007">"قطاروں کا ڈیمو"</string>
     <string name="text_icons_demo_title" msgid="8732943920672143201">"ٹیکسٹ اور آئیکنز کے ڈیموز"</string>
     <string name="row_text_icons_demo_title" msgid="135167694047524905">"ٹیکسٹ اور آئیکنز والی قطاروں کا ڈیمو"</string>
-    <!-- no translation found for radio_button_list_demo_title (9082264324855338774) -->
-    <skip />
+    <string name="radio_button_list_demo_title" msgid="9082264324855338774">"ریڈیو بٹن کی فہرستوں کو ڈیمو"</string>
     <string name="selectable_lists_demo_title" msgid="5492658731113129386">"قابل انتخاب فہرستوں کا ڈیمو"</string>
     <string name="option_1_title" msgid="7221252541651471199">"اختیار 1"</string>
     <string name="option_2_title" msgid="1905146448697963818">"اختیار 2"</string>
@@ -299,8 +296,7 @@
     <string name="task_limit_reached_msg" msgid="6038763366777119364">"ٹاسک کی حد پوری ہو گئی\nآگے بڑھنے سے ایپ کو زبردستی روک دیا جائے گا"</string>
     <string name="task_step_of_title" msgid="2791717962535723839">"‏%2$d میں سے ‎%1$d ٹاسک کا مرحلہ"</string>
     <string name="task_step_of_text" msgid="4646729781462227219">"آگے بڑھنے کے لیے کلک کریں"</string>
-    <!-- no translation found for toggle_button_demo_title (3179103600967398928) -->
-    <skip />
+    <string name="toggle_button_demo_title" msgid="3179103600967398928">"ٹوگل بٹن کا ڈیمو"</string>
     <string name="toggle_test_title" msgid="924485265152862631">"ٹیسٹ کو ٹوگل کریں"</string>
     <string name="toggle_test_text" msgid="8107217216013312857">"اسٹیٹ فل تبدیلیوں کی اجازت ہے"</string>
     <string name="toggle_test_first_toggle_title" msgid="3635022201072117680">"ٹیسٹ ٹوگل کرنے کی سہولت فعال کریں"</string>
@@ -315,10 +311,8 @@
     <string name="toggle_test_disabled" msgid="8366040658408451664">"ٹیسٹ ٹوگل کرنے کی سہولت غیر فعال ہے"</string>
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"متفرق تمثیلات کے ڈیموز"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"ڈیموز دکھائیں"</string>
-    <!-- no translation found for template_layouts_demo_title (788249269446087847) -->
-    <skip />
-    <!-- no translation found for grid_template_menu_demo_title (7096285873490705119) -->
-    <skip />
+    <string name="template_layouts_demo_title" msgid="788249269446087847">"تمثیل کے لے آؤٹ کے ڈیموز"</string>
+    <string name="grid_template_menu_demo_title" msgid="7096285873490705119">"رڈ کی تمثیل کے ڈیموز"</string>
     <string name="voice_access_demo_title" msgid="3825223890895361496">"صوتی رسائی کی ڈیمو سکرین"</string>
     <string name="user_interactions_demo_title" msgid="1356952319161314986">"صارف کے تعاملات"</string>
     <string name="request_permission_menu_demo_title" msgid="4796486779527427017">"اجازتوں کے ڈیموز کی درخواست کریں"</string>
@@ -341,6 +335,5 @@
     <string name="loading_toggle_enabled" msgid="8828072732804454994">"لوڈنگ فعال ہے"</string>
     <string name="loading_toggle_disabled" msgid="7689738885077382673">"لوڈنگ غیر فعال ہے"</string>
     <string name="loading_screen" msgid="4771507490730308794">"اسکرین لوڈ ہو رہی ہے"</string>
-    <!-- no translation found for vector_toggle_details (1301305340033556819) -->
-    <skip />
+    <string name="vector_toggle_details" msgid="1301305340033556819">"رنگ کو شامل/ہٹانے کے لیے ٹوگل کریں"</string>
 </resources>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-uz/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-uz/strings.xml
index 5ebb6a2..76cf78e 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-uz/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-uz/strings.xml
@@ -230,8 +230,7 @@
     <string name="long_msg_template_not_supported_title" msgid="8600719470226274925">"Nomuvofiq xost"</string>
     <string name="msg_template_demo_title" msgid="3895210951340409473">"Xabar andozasi namoyishi"</string>
     <string name="msg_template_demo_text" msgid="2275291617716161409">"Xabar shu yerga boradi.\nBoshqa matn ikkinchi qatorda."</string>
-    <!-- no translation found for short_msg_template_demo_title (6798738013668580714) -->
-    <skip />
+    <string name="short_msg_template_demo_title" msgid="6798738013668580714">"Qisqa xabar andozasi demosi"</string>
     <string name="pane_template_demo_title" msgid="7804292600060341608">"Panel andozasi namoyishi"</string>
     <string name="place_list_template_demo_title" msgid="2054022985455460469">"Joy roʻyxati andozasi namoyishi"</string>
     <string name="browse_places_title" msgid="7246005909846715898">"Joylarga razm solish"</string>
@@ -267,8 +266,7 @@
     <string name="vector_with_tint_title" msgid="1022346419829696827">"Vektorni rangli chizish mumkin"</string>
     <string name="vector_with_app_theme_attr_title" msgid="4890094482708376219">"Vektorni rangi uchun ilova mavzusi atributi bilan chizish mumkin"</string>
     <string name="png_res_title" msgid="7437083018336747544">"PNG, resurs sifatida yuborildi"</string>
-    <!-- no translation found for png_bitmap_title (3385912074130977032) -->
-    <skip />
+    <string name="png_bitmap_title" msgid="3385912074130977032">"Bitmap formatida yuborilgan PNG"</string>
     <string name="just_row_title" msgid="965700021568970725">"Faqat sarlavha"</string>
     <string name="title_with_app_icon_row_title" msgid="6294250714820740520">"Ilova belgisi bilan sarlavha"</string>
     <string name="title_with_res_id_image_row_title" msgid="3813134904602875778">"Resurs ID rasmi bilan sarlavha"</string>
@@ -280,8 +278,7 @@
     <string name="rows_demo_title" msgid="3198566660454251007">"Qatorlar namoyishi"</string>
     <string name="text_icons_demo_title" msgid="8732943920672143201">"Matn va belgilar demolari"</string>
     <string name="row_text_icons_demo_title" msgid="135167694047524905">"Matn va belgilardan iborat qatorlar namoyishi"</string>
-    <!-- no translation found for radio_button_list_demo_title (9082264324855338774) -->
-    <skip />
+    <string name="radio_button_list_demo_title" msgid="9082264324855338774">"Demolar roʻyxatini ochadigan radio tugma"</string>
     <string name="selectable_lists_demo_title" msgid="5492658731113129386">"Belgilanadigan roʻyxatlar namoyishi"</string>
     <string name="option_1_title" msgid="7221252541651471199">"1-variant"</string>
     <string name="option_2_title" msgid="1905146448697963818">"2-variant"</string>
@@ -295,8 +292,7 @@
     <string name="task_limit_reached_msg" msgid="6038763366777119364">"Vazifa chekloviga yetildi\nDavom etish ilovani majburiy toʻxtatadi."</string>
     <string name="task_step_of_title" msgid="2791717962535723839">"Vazifa qadami: %1$d / %2$d"</string>
     <string name="task_step_of_text" msgid="4646729781462227219">"Oldinga oʻtish uchun bosing"</string>
-    <!-- no translation found for toggle_button_demo_title (3179103600967398928) -->
-    <skip />
+    <string name="toggle_button_demo_title" msgid="3179103600967398928">"Demo ekran tugmasi"</string>
     <string name="toggle_test_title" msgid="924485265152862631">"Almashtirish tekshiruvi"</string>
     <string name="toggle_test_text" msgid="8107217216013312857">"Vaziyatni oʻzgartirishga ruxsat beriladi"</string>
     <string name="toggle_test_first_toggle_title" msgid="3635022201072117680">"Testni oʻchirish/yoqishni faollashtirish"</string>
@@ -311,10 +307,8 @@
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Testni oʻchirish/yoqish faolsizlantirildi"</string>
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Aralash andozalar demolari"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Namoyish demolari"</string>
-    <!-- no translation found for template_layouts_demo_title (788249269446087847) -->
-    <skip />
-    <!-- no translation found for grid_template_menu_demo_title (7096285873490705119) -->
-    <skip />
+    <string name="template_layouts_demo_title" msgid="788249269446087847">"Andoza dizayni demolari"</string>
+    <string name="grid_template_menu_demo_title" msgid="7096285873490705119">"Jadval andoza demolari"</string>
     <string name="voice_access_demo_title" msgid="3825223890895361496">"Demo ekranida ovozli boshqaruv"</string>
     <string name="user_interactions_demo_title" msgid="1356952319161314986">"Foydalanuvchi harakatlari"</string>
     <string name="request_permission_menu_demo_title" msgid="4796486779527427017">"Demolarga ruxsatlarni talab qilish"</string>
@@ -337,6 +331,5 @@
     <string name="loading_toggle_enabled" msgid="8828072732804454994">"Yuklash yoqildi"</string>
     <string name="loading_toggle_disabled" msgid="7689738885077382673">"Yuklash oʻchirildi"</string>
     <string name="loading_screen" msgid="4771507490730308794">"Ekran yuklanmoqda"</string>
-    <!-- no translation found for vector_toggle_details (1301305340033556819) -->
-    <skip />
+    <string name="vector_toggle_details" msgid="1301305340033556819">"Rang kiritish/olib tashlash tugmasi"</string>
 </resources>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-vi/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-vi/strings.xml
index 0910808..0f352c8 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-vi/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-vi/strings.xml
@@ -230,8 +230,7 @@
     <string name="long_msg_template_not_supported_title" msgid="8600719470226274925">"Máy chủ không tương thích"</string>
     <string name="msg_template_demo_title" msgid="3895210951340409473">"Bản demo biểu mẫu tin nhắn"</string>
     <string name="msg_template_demo_text" msgid="2275291617716161409">"Tin nhắn vào đây.\nThêm văn bản ở dòng thứ hai."</string>
-    <!-- no translation found for short_msg_template_demo_title (6798738013668580714) -->
-    <skip />
+    <string name="short_msg_template_demo_title" msgid="6798738013668580714">"Bản minh hoạ mẫu tin nhắn ngắn"</string>
     <string name="pane_template_demo_title" msgid="7804292600060341608">"Bản demo ngăn mẫu"</string>
     <string name="place_list_template_demo_title" msgid="2054022985455460469">"Bản demo mẫu danh sách địa điểm"</string>
     <string name="browse_places_title" msgid="7246005909846715898">"Duyệt xem các địa điểm"</string>
@@ -267,8 +266,7 @@
     <string name="vector_with_tint_title" msgid="1022346419829696827">"Một vectơ có thể vẽ, với một màu"</string>
     <string name="vector_with_app_theme_attr_title" msgid="4890094482708376219">"Vectơ có thể vẽ được, với thuộc tính chủ đề của ứng dụng cho màu sắc của nó"</string>
     <string name="png_res_title" msgid="7437083018336747544">"Một PNG, được gửi dưới dạng tài nguyên"</string>
-    <!-- no translation found for png_bitmap_title (3385912074130977032) -->
-    <skip />
+    <string name="png_bitmap_title" msgid="3385912074130977032">"Một tệp PNG, được gửi dưới dạng bitmap"</string>
     <string name="just_row_title" msgid="965700021568970725">"Chỉ là một tiêu đề"</string>
     <string name="title_with_app_icon_row_title" msgid="6294250714820740520">"Tiêu đề có biểu tượng ứng dụng"</string>
     <string name="title_with_res_id_image_row_title" msgid="3813134904602875778">"Tiêu đề có hình ảnh ID tài nguyên"</string>
@@ -280,8 +278,7 @@
     <string name="rows_demo_title" msgid="3198566660454251007">"Bản demo hàng"</string>
     <string name="text_icons_demo_title" msgid="8732943920672143201">"Bản demo văn bản và biểu tượng"</string>
     <string name="row_text_icons_demo_title" msgid="135167694047524905">"Bản demo hàng với văn bản và biểu tượng"</string>
-    <!-- no translation found for radio_button_list_demo_title (9082264324855338774) -->
-    <skip />
+    <string name="radio_button_list_demo_title" msgid="9082264324855338774">"Bản minh hoạ danh sách nút chọn"</string>
     <string name="selectable_lists_demo_title" msgid="5492658731113129386">"Bản demo danh sách có thể chọn"</string>
     <string name="option_1_title" msgid="7221252541651471199">"Tùy chọn 1"</string>
     <string name="option_2_title" msgid="1905146448697963818">"Tùy chọn 2"</string>
@@ -295,8 +292,7 @@
     <string name="task_limit_reached_msg" msgid="6038763366777119364">"Đã đạt đến giới hạn nhiệm vụ\nNếu tiếp tục sẽ buộc phải dừng ứng dụng"</string>
     <string name="task_step_of_title" msgid="2791717962535723839">"Bước %1$d trong số %2$d của nhiệm vụ"</string>
     <string name="task_step_of_text" msgid="4646729781462227219">"Nhấp để tiếp tục"</string>
-    <!-- no translation found for toggle_button_demo_title (3179103600967398928) -->
-    <skip />
+    <string name="toggle_button_demo_title" msgid="3179103600967398928">"Bản minh hoạ nút bật tắt"</string>
     <string name="toggle_test_title" msgid="924485265152862631">"Kiểm tra chuyển đổi"</string>
     <string name="toggle_test_text" msgid="8107217216013312857">"Các thay đổi rõ ràng được phép"</string>
     <string name="toggle_test_first_toggle_title" msgid="3635022201072117680">"Bật tính năng kiểm tra chuyển đổi"</string>
@@ -311,10 +307,8 @@
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Đã tắt tính năng kiểm tra chuyển đổi"</string>
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Bản demo biểu mẫu Misc"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Bản demo nổi bật"</string>
-    <!-- no translation found for template_layouts_demo_title (788249269446087847) -->
-    <skip />
-    <!-- no translation found for grid_template_menu_demo_title (7096285873490705119) -->
-    <skip />
+    <string name="template_layouts_demo_title" msgid="788249269446087847">"Bản minh hoạ bố cục mẫu"</string>
+    <string name="grid_template_menu_demo_title" msgid="7096285873490705119">"Bản minh hoạ mẫu lưới"</string>
     <string name="voice_access_demo_title" msgid="3825223890895361496">"Màn hình minh hoạ chức năng Điều khiển bằng giọng nói"</string>
     <string name="user_interactions_demo_title" msgid="1356952319161314986">"Hoạt động tương tác của người dùng"</string>
     <string name="request_permission_menu_demo_title" msgid="4796486779527427017">"Bản minh hoạ về yêu cầu quyền"</string>
@@ -337,6 +331,5 @@
     <string name="loading_toggle_enabled" msgid="8828072732804454994">"Đã bật tính năng tải"</string>
     <string name="loading_toggle_disabled" msgid="7689738885077382673">"Đã tắt tính năng tải"</string>
     <string name="loading_screen" msgid="4771507490730308794">"Màn hình tải"</string>
-    <!-- no translation found for vector_toggle_details (1301305340033556819) -->
-    <skip />
+    <string name="vector_toggle_details" msgid="1301305340033556819">"Bật/tắt để thêm/xoá màu"</string>
 </resources>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-zh-rCN/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-zh-rCN/strings.xml
index 1ddb15a..95aaf39 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-zh-rCN/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-zh-rCN/strings.xml
@@ -230,8 +230,7 @@
     <string name="long_msg_template_not_supported_title" msgid="8600719470226274925">"不兼容的主机"</string>
     <string name="msg_template_demo_title" msgid="3895210951340409473">"消息模板演示"</string>
     <string name="msg_template_demo_text" msgid="2275291617716161409">"消息放在此处。\n更多文本放在第二行。"</string>
-    <!-- no translation found for short_msg_template_demo_title (6798738013668580714) -->
-    <skip />
+    <string name="short_msg_template_demo_title" msgid="6798738013668580714">"短信模板演示"</string>
     <string name="pane_template_demo_title" msgid="7804292600060341608">"窗格模板演示"</string>
     <string name="place_list_template_demo_title" msgid="2054022985455460469">"地点列表模板演示"</string>
     <string name="browse_places_title" msgid="7246005909846715898">"浏览地点"</string>
@@ -267,8 +266,7 @@
     <string name="vector_with_tint_title" msgid="1022346419829696827">"已应用色调的矢量可绘制对象"</string>
     <string name="vector_with_app_theme_attr_title" msgid="4890094482708376219">"使用应用的主题属性作为颜色的矢量可绘制对象"</string>
     <string name="png_res_title" msgid="7437083018336747544">"PNG,作为资源发送"</string>
-    <!-- no translation found for png_bitmap_title (3385912074130977032) -->
-    <skip />
+    <string name="png_bitmap_title" msgid="3385912074130977032">"PNG 文件,作为位图发送"</string>
     <string name="just_row_title" msgid="965700021568970725">"只是一个标题"</string>
     <string name="title_with_app_icon_row_title" msgid="6294250714820740520">"包含应用图标的标题"</string>
     <string name="title_with_res_id_image_row_title" msgid="3813134904602875778">"包含资源 ID 图像的标题"</string>
@@ -280,8 +278,7 @@
     <string name="rows_demo_title" msgid="3198566660454251007">"行演示"</string>
     <string name="text_icons_demo_title" msgid="8732943920672143201">"文本和图标演示"</string>
     <string name="row_text_icons_demo_title" msgid="135167694047524905">"随带文本和图标的行演示"</string>
-    <!-- no translation found for radio_button_list_demo_title (9082264324855338774) -->
-    <skip />
+    <string name="radio_button_list_demo_title" msgid="9082264324855338774">"单选按钮列表演示"</string>
     <string name="selectable_lists_demo_title" msgid="5492658731113129386">"可选列表演示"</string>
     <string name="option_1_title" msgid="7221252541651471199">"选项 1"</string>
     <string name="option_2_title" msgid="1905146448697963818">"选项 2"</string>
@@ -295,8 +292,7 @@
     <string name="task_limit_reached_msg" msgid="6038763366777119364">"已达到任务限制\n继续会强制停止应用"</string>
     <string name="task_step_of_title" msgid="2791717962535723839">"任务第 %1$d 步(共 %2$d 步)"</string>
     <string name="task_step_of_text" msgid="4646729781462227219">"点击以继续"</string>
-    <!-- no translation found for toggle_button_demo_title (3179103600967398928) -->
-    <skip />
+    <string name="toggle_button_demo_title" msgid="3179103600967398928">"切换按钮演示"</string>
     <string name="toggle_test_title" msgid="924485265152862631">"切换测试"</string>
     <string name="toggle_test_text" msgid="8107217216013312857">"允许有状态更改"</string>
     <string name="toggle_test_first_toggle_title" msgid="3635022201072117680">"启用切换测试"</string>
@@ -311,10 +307,8 @@
     <string name="toggle_test_disabled" msgid="8366040658408451664">"切换测试已停用"</string>
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"其他模板演示"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"展示演示"</string>
-    <!-- no translation found for template_layouts_demo_title (788249269446087847) -->
-    <skip />
-    <!-- no translation found for grid_template_menu_demo_title (7096285873490705119) -->
-    <skip />
+    <string name="template_layouts_demo_title" msgid="788249269446087847">"模板布局演示"</string>
+    <string name="grid_template_menu_demo_title" msgid="7096285873490705119">"网格模板演示"</string>
     <string name="voice_access_demo_title" msgid="3825223890895361496">"Voice Access 演示屏幕"</string>
     <string name="user_interactions_demo_title" msgid="1356952319161314986">"用户互动"</string>
     <string name="request_permission_menu_demo_title" msgid="4796486779527427017">"请求权限演示"</string>
@@ -337,6 +331,5 @@
     <string name="loading_toggle_enabled" msgid="8828072732804454994">"“加载”已启用"</string>
     <string name="loading_toggle_disabled" msgid="7689738885077382673">"“加载”已停用"</string>
     <string name="loading_screen" msgid="4771507490730308794">"“加载”屏幕"</string>
-    <!-- no translation found for vector_toggle_details (1301305340033556819) -->
-    <skip />
+    <string name="vector_toggle_details" msgid="1301305340033556819">"切换即可添加/移除颜色"</string>
 </resources>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-zh-rHK/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-zh-rHK/strings.xml
index a63ea4a..29f96b0 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-zh-rHK/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-zh-rHK/strings.xml
@@ -230,8 +230,7 @@
     <string name="long_msg_template_not_supported_title" msgid="8600719470226274925">"主機不兼容"</string>
     <string name="msg_template_demo_title" msgid="3895210951340409473">"「訊息範本」示範"</string>
     <string name="msg_template_demo_text" msgid="2275291617716161409">"訊息會在這裡顯示。\n其他文字會在第二行顯示。"</string>
-    <!-- no translation found for short_msg_template_demo_title (6798738013668580714) -->
-    <skip />
+    <string name="short_msg_template_demo_title" msgid="6798738013668580714">"「簡短訊息範本」示範"</string>
     <string name="pane_template_demo_title" msgid="7804292600060341608">"「窗格範本」示範"</string>
     <string name="place_list_template_demo_title" msgid="2054022985455460469">"「地點清單範本」示範"</string>
     <string name="browse_places_title" msgid="7246005909846715898">"瀏覽地點"</string>
@@ -267,8 +266,7 @@
     <string name="vector_with_tint_title" msgid="1022346419829696827">"有染色的向量可繪項目"</string>
     <string name="vector_with_app_theme_attr_title" msgid="4890094482708376219">"一個向量可繪項目,採用應用程式的主題顏色"</string>
     <string name="png_res_title" msgid="7437083018336747544">"已傳送一個 PNG 檔案作為資源"</string>
-    <!-- no translation found for png_bitmap_title (3385912074130977032) -->
-    <skip />
+    <string name="png_bitmap_title" msgid="3385912074130977032">"PNG 檔案,以點陣圖傳送"</string>
     <string name="just_row_title" msgid="965700021568970725">"只是一個標題"</string>
     <string name="title_with_app_icon_row_title" msgid="6294250714820740520">"含有應用程式圖示的標題"</string>
     <string name="title_with_res_id_image_row_title" msgid="3813134904602875778">"含有資源 ID 圖片的標題"</string>
@@ -280,8 +278,7 @@
     <string name="rows_demo_title" msgid="3198566660454251007">"「列」示範"</string>
     <string name="text_icons_demo_title" msgid="8732943920672143201">"「文字和圖示」示範"</string>
     <string name="row_text_icons_demo_title" msgid="135167694047524905">"「含有文字及圖示的列」示範"</string>
-    <!-- no translation found for radio_button_list_demo_title (9082264324855338774) -->
-    <skip />
+    <string name="radio_button_list_demo_title" msgid="9082264324855338774">"「圓形按鈕清單」示範"</string>
     <string name="selectable_lists_demo_title" msgid="5492658731113129386">"可選取清單示範"</string>
     <string name="option_1_title" msgid="7221252541651471199">"選項 1"</string>
     <string name="option_2_title" msgid="1905146448697963818">"選項 2"</string>
@@ -295,8 +292,7 @@
     <string name="task_limit_reached_msg" msgid="6038763366777119364">"工作已達上限\n繼續使用將強制停止應用程式"</string>
     <string name="task_step_of_title" msgid="2791717962535723839">"工作步驟 %1$d,共 %2$d 個步驟"</string>
     <string name="task_step_of_text" msgid="4646729781462227219">"點擊即可繼續使用"</string>
-    <!-- no translation found for toggle_button_demo_title (3179103600967398928) -->
-    <skip />
+    <string name="toggle_button_demo_title" msgid="3179103600967398928">"「切換按鈕」示範"</string>
     <string name="toggle_test_title" msgid="924485265152862631">"切換測試"</string>
     <string name="toggle_test_text" msgid="8107217216013312857">"允許有狀態的變更"</string>
     <string name="toggle_test_first_toggle_title" msgid="3635022201072117680">"啟用切換測試"</string>
@@ -311,10 +307,8 @@
     <string name="toggle_test_disabled" msgid="8366040658408451664">"已停用切換測試"</string>
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"其他範本示範"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"展示示範"</string>
-    <!-- no translation found for template_layouts_demo_title (788249269446087847) -->
-    <skip />
-    <!-- no translation found for grid_template_menu_demo_title (7096285873490705119) -->
-    <skip />
+    <string name="template_layouts_demo_title" msgid="788249269446087847">"「範本版面配置」示範"</string>
+    <string name="grid_template_menu_demo_title" msgid="7096285873490705119">"「格線範本」示範"</string>
     <string name="voice_access_demo_title" msgid="3825223890895361496">"語音操控示範畫面"</string>
     <string name="user_interactions_demo_title" msgid="1356952319161314986">"使用者互動"</string>
     <string name="request_permission_menu_demo_title" msgid="4796486779527427017">"「要求權限」示範"</string>
@@ -337,6 +331,5 @@
     <string name="loading_toggle_enabled" msgid="8828072732804454994">"已啟用載入"</string>
     <string name="loading_toggle_disabled" msgid="7689738885077382673">"已停用載入"</string>
     <string name="loading_screen" msgid="4771507490730308794">"載入畫面"</string>
-    <!-- no translation found for vector_toggle_details (1301305340033556819) -->
-    <skip />
+    <string name="vector_toggle_details" msgid="1301305340033556819">"使用切換按鈕新增/移除顏色"</string>
 </resources>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-zh-rTW/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-zh-rTW/strings.xml
index ca5d8fc..3a995fc 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-zh-rTW/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-zh-rTW/strings.xml
@@ -230,8 +230,7 @@
     <string name="long_msg_template_not_supported_title" msgid="8600719470226274925">"主機不相容"</string>
     <string name="msg_template_demo_title" msgid="3895210951340409473">"「訊息範本」示範"</string>
     <string name="msg_template_demo_text" msgid="2275291617716161409">"訊息會顯示在這裡。\n其他文字會顯示在第二行。"</string>
-    <!-- no translation found for short_msg_template_demo_title (6798738013668580714) -->
-    <skip />
+    <string name="short_msg_template_demo_title" msgid="6798738013668580714">"「簡短訊息範本」示範"</string>
     <string name="pane_template_demo_title" msgid="7804292600060341608">"「窗格範本」示範"</string>
     <string name="place_list_template_demo_title" msgid="2054022985455460469">"「地點清單範本」示範"</string>
     <string name="browse_places_title" msgid="7246005909846715898">"瀏覽地點"</string>
@@ -267,8 +266,7 @@
     <string name="vector_with_tint_title" msgid="1022346419829696827">"有色調的向量可繪項目"</string>
     <string name="vector_with_app_theme_attr_title" msgid="4890094482708376219">"一個向量可繪項目,採用應用程式的主題顏色"</string>
     <string name="png_res_title" msgid="7437083018336747544">"已傳送一個 PNG 檔案做為資源"</string>
-    <!-- no translation found for png_bitmap_title (3385912074130977032) -->
-    <skip />
+    <string name="png_bitmap_title" msgid="3385912074130977032">"PNG 檔案,以點陣圖傳送"</string>
     <string name="just_row_title" msgid="965700021568970725">"只是一個標題"</string>
     <string name="title_with_app_icon_row_title" msgid="6294250714820740520">"含有應用程式圖示的標題"</string>
     <string name="title_with_res_id_image_row_title" msgid="3813134904602875778">"含有資源 ID 圖片的標題"</string>
@@ -280,8 +278,7 @@
     <string name="rows_demo_title" msgid="3198566660454251007">"「列」示範"</string>
     <string name="text_icons_demo_title" msgid="8732943920672143201">"「文字和圖示」示範"</string>
     <string name="row_text_icons_demo_title" msgid="135167694047524905">"「含有文字及圖示的列」示範"</string>
-    <!-- no translation found for radio_button_list_demo_title (9082264324855338774) -->
-    <skip />
+    <string name="radio_button_list_demo_title" msgid="9082264324855338774">"「圓形按鈕清單」示範"</string>
     <string name="selectable_lists_demo_title" msgid="5492658731113129386">"「可選取的清單」示範"</string>
     <string name="option_1_title" msgid="7221252541651471199">"選項 1"</string>
     <string name="option_2_title" msgid="1905146448697963818">"選項 2"</string>
@@ -295,8 +292,7 @@
     <string name="task_limit_reached_msg" msgid="6038763366777119364">"工作已達上限\n繼續使用將強制停止應用程式"</string>
     <string name="task_step_of_title" msgid="2791717962535723839">"工作步驟 %1$d,共 %2$d 個步驟"</string>
     <string name="task_step_of_text" msgid="4646729781462227219">"點選即可繼續使用"</string>
-    <!-- no translation found for toggle_button_demo_title (3179103600967398928) -->
-    <skip />
+    <string name="toggle_button_demo_title" msgid="3179103600967398928">"「切換鈕」示範"</string>
     <string name="toggle_test_title" msgid="924485265152862631">"切換測試"</string>
     <string name="toggle_test_text" msgid="8107217216013312857">"允許有狀態的變更"</string>
     <string name="toggle_test_first_toggle_title" msgid="3635022201072117680">"啟用切換測試"</string>
@@ -311,10 +307,8 @@
     <string name="toggle_test_disabled" msgid="8366040658408451664">"切換測試已停用"</string>
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"其他範本示範"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"「展示」示範"</string>
-    <!-- no translation found for template_layouts_demo_title (788249269446087847) -->
-    <skip />
-    <!-- no translation found for grid_template_menu_demo_title (7096285873490705119) -->
-    <skip />
+    <string name="template_layouts_demo_title" msgid="788249269446087847">"「範本版面配置」示範"</string>
+    <string name="grid_template_menu_demo_title" msgid="7096285873490705119">"「格線範本」示範"</string>
     <string name="voice_access_demo_title" msgid="3825223890895361496">"Voice Access 示範畫面"</string>
     <string name="user_interactions_demo_title" msgid="1356952319161314986">"使用者互動"</string>
     <string name="request_permission_menu_demo_title" msgid="4796486779527427017">"要求權限示範"</string>
@@ -337,6 +331,5 @@
     <string name="loading_toggle_enabled" msgid="8828072732804454994">"已啟用載入"</string>
     <string name="loading_toggle_disabled" msgid="7689738885077382673">"已停用載入"</string>
     <string name="loading_screen" msgid="4771507490730308794">"載入畫面"</string>
-    <!-- no translation found for vector_toggle_details (1301305340033556819) -->
-    <skip />
+    <string name="vector_toggle_details" msgid="1301305340033556819">"使用切換鈕新增/移除顏色"</string>
 </resources>
diff --git a/car/app/app-samples/showcase/mobile/src/main/AndroidManifestWithSdkVersion.xml b/car/app/app-samples/showcase/mobile/src/main/AndroidManifestWithSdkVersion.xml
index 000a00c..25976cb 100644
--- a/car/app/app-samples/showcase/mobile/src/main/AndroidManifestWithSdkVersion.xml
+++ b/car/app/app-samples/showcase/mobile/src/main/AndroidManifestWithSdkVersion.xml
@@ -80,12 +80,12 @@
     </service>
 
     <service
-        android:name=".common.navigation.NavigationNotificationService"
+        android:name=".common.screens.navigationdemos.NavigationNotificationService"
         android:exported="true">
     </service>
 
     <provider
-        android:name=".common.textandicons.DelayedFileProvider"
+        android:name=".common.screens.templatelayouts.listtemplates.DelayedFileProvider"
         android:authorities="com.showcase.fileprovider"
         android:exported="false"
         android:grantUriPermissions="true">
diff --git a/car/app/app/api/public_plus_experimental_1.3.0-beta02.txt b/car/app/app/api/public_plus_experimental_1.3.0-beta02.txt
index 89bff07..75681de 100644
--- a/car/app/app/api/public_plus_experimental_1.3.0-beta02.txt
+++ b/car/app/app/api/public_plus_experimental_1.3.0-beta02.txt
@@ -1161,12 +1161,14 @@
     method public androidx.car.app.model.OnItemVisibilityChangedDelegate? getOnItemVisibilityChangedDelegate();
     method public androidx.car.app.model.OnSelectedDelegate? getOnSelectedDelegate();
     method public int getSelectedIndex();
+    method @androidx.car.app.annotations.ExperimentalCarApi public androidx.car.app.model.ItemList.Builder toBuilder();
   }
 
   public static final class ItemList.Builder {
     ctor public ItemList.Builder();
     method public androidx.car.app.model.ItemList.Builder addItem(androidx.car.app.model.Item);
     method public androidx.car.app.model.ItemList build();
+    method @androidx.car.app.annotations.ExperimentalCarApi public androidx.car.app.model.ItemList.Builder clearItems();
     method public androidx.car.app.model.ItemList.Builder setNoItemsMessage(CharSequence);
     method public androidx.car.app.model.ItemList.Builder setOnItemsVisibilityChangedListener(androidx.car.app.model.ItemList.OnItemVisibilityChangedListener);
     method public androidx.car.app.model.ItemList.Builder setOnSelectedListener(androidx.car.app.model.ItemList.OnSelectedListener);
@@ -1188,12 +1190,14 @@
     method public androidx.car.app.model.ItemList? getSingleList();
     method public androidx.car.app.model.CarText? getTitle();
     method public boolean isLoading();
+    method @androidx.car.app.annotations.ExperimentalCarApi public androidx.car.app.model.ListTemplate.Builder toBuilder();
   }
 
   public static final class ListTemplate.Builder {
     ctor public ListTemplate.Builder();
     method public androidx.car.app.model.ListTemplate.Builder addSectionedList(androidx.car.app.model.SectionedItemList);
     method public androidx.car.app.model.ListTemplate build();
+    method @androidx.car.app.annotations.ExperimentalCarApi public androidx.car.app.model.ListTemplate.Builder clearSectionedLists();
     method public androidx.car.app.model.ListTemplate.Builder setActionStrip(androidx.car.app.model.ActionStrip);
     method public androidx.car.app.model.ListTemplate.Builder setHeaderAction(androidx.car.app.model.Action);
     method public androidx.car.app.model.ListTemplate.Builder setLoading(boolean);
diff --git a/car/app/app/api/public_plus_experimental_current.txt b/car/app/app/api/public_plus_experimental_current.txt
index 89bff07..75681de 100644
--- a/car/app/app/api/public_plus_experimental_current.txt
+++ b/car/app/app/api/public_plus_experimental_current.txt
@@ -1161,12 +1161,14 @@
     method public androidx.car.app.model.OnItemVisibilityChangedDelegate? getOnItemVisibilityChangedDelegate();
     method public androidx.car.app.model.OnSelectedDelegate? getOnSelectedDelegate();
     method public int getSelectedIndex();
+    method @androidx.car.app.annotations.ExperimentalCarApi public androidx.car.app.model.ItemList.Builder toBuilder();
   }
 
   public static final class ItemList.Builder {
     ctor public ItemList.Builder();
     method public androidx.car.app.model.ItemList.Builder addItem(androidx.car.app.model.Item);
     method public androidx.car.app.model.ItemList build();
+    method @androidx.car.app.annotations.ExperimentalCarApi public androidx.car.app.model.ItemList.Builder clearItems();
     method public androidx.car.app.model.ItemList.Builder setNoItemsMessage(CharSequence);
     method public androidx.car.app.model.ItemList.Builder setOnItemsVisibilityChangedListener(androidx.car.app.model.ItemList.OnItemVisibilityChangedListener);
     method public androidx.car.app.model.ItemList.Builder setOnSelectedListener(androidx.car.app.model.ItemList.OnSelectedListener);
@@ -1188,12 +1190,14 @@
     method public androidx.car.app.model.ItemList? getSingleList();
     method public androidx.car.app.model.CarText? getTitle();
     method public boolean isLoading();
+    method @androidx.car.app.annotations.ExperimentalCarApi public androidx.car.app.model.ListTemplate.Builder toBuilder();
   }
 
   public static final class ListTemplate.Builder {
     ctor public ListTemplate.Builder();
     method public androidx.car.app.model.ListTemplate.Builder addSectionedList(androidx.car.app.model.SectionedItemList);
     method public androidx.car.app.model.ListTemplate build();
+    method @androidx.car.app.annotations.ExperimentalCarApi public androidx.car.app.model.ListTemplate.Builder clearSectionedLists();
     method public androidx.car.app.model.ListTemplate.Builder setActionStrip(androidx.car.app.model.ActionStrip);
     method public androidx.car.app.model.ListTemplate.Builder setHeaderAction(androidx.car.app.model.Action);
     method public androidx.car.app.model.ListTemplate.Builder setLoading(boolean);
diff --git a/car/app/app/src/main/java/androidx/car/app/messaging/model/CarMessage.java b/car/app/app/src/main/java/androidx/car/app/messaging/model/CarMessage.java
index f5bd59f..9cc42c6 100644
--- a/car/app/app/src/main/java/androidx/car/app/messaging/model/CarMessage.java
+++ b/car/app/app/src/main/java/androidx/car/app/messaging/model/CarMessage.java
@@ -18,6 +18,8 @@
 
 import static java.util.Objects.requireNonNull;
 
+import android.os.Bundle;
+
 import androidx.annotation.Keep;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
@@ -34,7 +36,7 @@
 public class CarMessage {
     @Keep
     @NonNull
-    private final Person mSender;
+    private final Bundle mSender;
 
     @Keep
     @NonNull
@@ -46,7 +48,7 @@
     private final boolean mIsRead;
 
     CarMessage(@NonNull Builder builder) {
-        this.mSender = requireNonNull(builder.mSender);
+        this.mSender = requireNonNull(builder.mSender).toBundle();
         this.mBody = requireNonNull(builder.mBody);
         this.mReceivedTimeEpochMillis = builder.mReceivedTimeEpochMillis;
         this.mIsRead = builder.mIsRead;
@@ -54,7 +56,7 @@
 
     /** Default constructor for serialization. */
     private CarMessage() {
-        this.mSender = new Person.Builder().setName("").build();
+        this.mSender = new Person.Builder().setName("").build().toBundle();
         this.mBody = new CarText.Builder("").build();
         this.mReceivedTimeEpochMillis = 0;
         this.mIsRead = false;
@@ -63,7 +65,7 @@
 
     /** Returns a {@link Person} representing the message sender */
     @NonNull public Person getSender() {
-        return mSender;
+        return Person.fromBundle(mSender);
     }
 
     /** Returns a {@link CarText} representing the message body */
diff --git a/car/app/app/src/main/java/androidx/car/app/model/ItemList.java b/car/app/app/src/main/java/androidx/car/app/model/ItemList.java
index 20fded4..c6cce4e 100644
--- a/car/app/app/src/main/java/androidx/car/app/model/ItemList.java
+++ b/car/app/app/src/main/java/androidx/car/app/model/ItemList.java
@@ -26,6 +26,7 @@
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.car.app.annotations.CarProtocol;
+import androidx.car.app.annotations.ExperimentalCarApi;
 import androidx.car.app.utils.CollectionUtils;
 
 import java.util.ArrayList;
@@ -197,6 +198,14 @@
         mOnItemVisibilityChangedDelegate = null;
     }
 
+    /**
+     * Creates and returns a new {@link Builder} initialized with this {@link ItemList}'s data.
+     */
+    @ExperimentalCarApi
+    @NonNull
+    public Builder toBuilder() {
+        return new Builder(this);
+    }
 
     @Nullable
     static OnClickDelegate getOnClickDelegate(Item item) {
@@ -220,7 +229,7 @@
 
     /** A builder of {@link ItemList}. */
     public static final class Builder {
-        final List<Item> mItems = new ArrayList<>();
+        final List<Item> mItems;
         int mSelectedIndex;
         @Nullable
         OnSelectedDelegate mOnSelectedDelegate;
@@ -316,6 +325,14 @@
             return this;
         }
 
+        /** Removes all {@link Item}s added via {@link #addItem(Item)} */
+        @ExperimentalCarApi
+        @NonNull
+        public Builder clearItems() {
+            mItems.clear();
+            return this;
+        }
+
         /**
          * Constructs the item list defined by this builder.
          *
@@ -361,6 +378,18 @@
 
         /** Returns an empty {@link Builder} instance. */
         public Builder() {
+            mItems = new ArrayList<>();
+        }
+
+        /** Creates a new {@link Builder}, populated from the input {@link ItemList} */
+        Builder(@NonNull ItemList itemList) {
+            mSelectedIndex = itemList.getSelectedIndex();
+            mOnSelectedDelegate = itemList.getOnSelectedDelegate();
+            mOnItemVisibilityChangedDelegate = itemList.getOnItemVisibilityChangedDelegate();
+            mNoItemsMessage = itemList.getNoItemsMessage();
+
+            // Must be mutable
+            mItems = new ArrayList<>(itemList.getItems());
         }
     }
 }
diff --git a/car/app/app/src/main/java/androidx/car/app/model/ListTemplate.java b/car/app/app/src/main/java/androidx/car/app/model/ListTemplate.java
index 8a03a58..60fce30 100644
--- a/car/app/app/src/main/java/androidx/car/app/model/ListTemplate.java
+++ b/car/app/app/src/main/java/androidx/car/app/model/ListTemplate.java
@@ -27,6 +27,7 @@
 import androidx.annotation.Nullable;
 import androidx.car.app.Screen;
 import androidx.car.app.annotations.CarProtocol;
+import androidx.car.app.annotations.ExperimentalCarApi;
 import androidx.car.app.model.constraints.CarTextConstraints;
 import androidx.car.app.utils.CollectionUtils;
 
@@ -183,12 +184,21 @@
         mActionStrip = null;
     }
 
+    /**
+     * Creates and returns a new {@link Builder} initialized with this {@link ListTemplate}'s data.
+     */
+    @ExperimentalCarApi
+    @NonNull
+    public ListTemplate.Builder toBuilder() {
+        return new ListTemplate.Builder(this);
+    }
+
     /** A builder of {@link ListTemplate}. */
     public static final class Builder {
         boolean mIsLoading;
         @Nullable
         ItemList mSingleList;
-        final List<SectionedItemList> mSectionedLists = new ArrayList<>();
+        final List<SectionedItemList> mSectionedLists;
         @Nullable
         CarText mTitle;
         @Nullable
@@ -318,6 +328,17 @@
         }
 
         /**
+         * Clears all of the {@link SectionedItemList}s added via
+         * {@link #addSectionedList(SectionedItemList)}
+         */
+        @ExperimentalCarApi
+        @NonNull
+        public Builder clearSectionedLists() {
+            mSectionedLists.clear();
+            return this;
+        }
+
+        /**
          * Sets the {@link ActionStrip} for this template or {@code null} to not display an {@link
          * ActionStrip}.
          *
@@ -380,6 +401,20 @@
 
         /** Returns an empty {@link Builder} instance. */
         public Builder() {
+            mSectionedLists = new ArrayList<>();
+        }
+
+        /** Creates a new {@link Builder}, populated from the input {@link ListTemplate} */
+        Builder(@NonNull ListTemplate listTemplate) {
+            mIsLoading = listTemplate.isLoading();
+            mHeaderAction = listTemplate.getHeaderAction();
+            mTitle = listTemplate.getTitle();
+            mSingleList = listTemplate.getSingleList();
+
+            // Must be mutable
+            mSectionedLists = new ArrayList<>(listTemplate.getSectionedLists());
+
+            mActionStrip = listTemplate.getActionStrip();
         }
     }
 }
diff --git a/car/app/app/src/main/java/androidx/car/app/model/Row.java b/car/app/app/src/main/java/androidx/car/app/model/Row.java
index 804c1b5..e278047 100644
--- a/car/app/app/src/main/java/androidx/car/app/model/Row.java
+++ b/car/app/app/src/main/java/androidx/car/app/model/Row.java
@@ -583,6 +583,9 @@
         /**
          * Sets a {@link Toggle} to show in the row.
          *
+         * <p> If a row has a toggle set, then no {@link Action}, {@link OnClickListener} or
+         * numeric decoration can be set.
+         *
          * @throws NullPointerException if {@code toggle} is {@code null}
          */
         @NonNull
@@ -597,7 +600,8 @@
          * <p>Browsable rows can be used, for example, to represent the parent row in a hierarchy of
          * lists with child lists.
          *
-         * <p>If a row is browsable, then no {@link Action} or {@link Toggle} can be added to it.
+         * <p>If a row is browsable, then no {@link Action} or {@link Toggle} can be added to it. A
+         * browsable row must have an OnClickListener set.
          */
         @NonNull
         public Builder setBrowsable(boolean isBrowsable) {
@@ -648,11 +652,9 @@
         /**
          * Constructs the {@link Row} defined by this builder.
          *
-         * @throws IllegalStateException if the row's title is not set, if it is a browsable
-         *                               row and has a {@link Toggle}, if it is a browsable
-         *                               row but does not have a {@link OnClickListener}, or if
-         *                               it has both a {@link OnClickListener} and a {@link
-         *                               Toggle}
+         * @throws IllegalStateException if the row's title is not set or if the row is not set
+         *                               correctly. See {@link #setToggle} and
+         *                               {@link #setBrowsable}.
          */
         @NonNull
         public Row build() {
@@ -668,11 +670,28 @@
                     throw new IllegalStateException(
                             "A browsable row must have its onClickListener set");
                 }
+                if (!mActions.isEmpty()) {
+                    throw new IllegalStateException("A browsable row must not have a secondary "
+                            + "action set");
+                }
+
             }
 
-            if (mToggle != null && mOnClickDelegate != null) {
-                throw new IllegalStateException(
-                        "If a row contains a toggle, it must not have a onClickListener set");
+            if (mToggle != null) {
+                if (mOnClickDelegate != null) {
+                    throw new IllegalStateException(
+                            "If a row contains a toggle, it must not have an onClickListener set");
+                }
+
+                if (mDecoration != NO_DECORATION) {
+                    throw new IllegalStateException("If a row contains a toggle, it must not have"
+                            + " a numeric decoration set");
+                }
+
+                if (!mActions.isEmpty()) {
+                    throw new IllegalStateException("If a row contains a toggle, it must not have "
+                            + "a secondary action set");
+                }
             }
 
             return new Row(this);
diff --git a/car/app/app/src/main/java/androidx/car/app/model/constraints/ActionsConstraints.java b/car/app/app/src/main/java/androidx/car/app/model/constraints/ActionsConstraints.java
index 4910533..9b854bd 100644
--- a/car/app/app/src/main/java/androidx/car/app/model/constraints/ActionsConstraints.java
+++ b/car/app/app/src/main/java/androidx/car/app/model/constraints/ActionsConstraints.java
@@ -130,10 +130,11 @@
     /**
      * Constraints for additional row actions. Only allows custom actions.
      */
+    //TODO(b/249225370): Allow multiple actions in the row.
     @NonNull
     public static final ActionsConstraints ACTIONS_CONSTRAINTS_ROW =
             new ActionsConstraints.Builder()
-                    .setMaxActions(2)
+                    .setMaxActions(1)
                     .addAllowedActionType(Action.TYPE_CUSTOM)
                     .setRequireActionIcons(true)
                     .setOnClickListenerAllowed(true)
diff --git a/car/app/app/src/main/java/androidx/car/app/model/constraints/RowListConstraints.java b/car/app/app/src/main/java/androidx/car/app/model/constraints/RowListConstraints.java
index c95c851..eb22f30 100644
--- a/car/app/app/src/main/java/androidx/car/app/model/constraints/RowListConstraints.java
+++ b/car/app/app/src/main/java/androidx/car/app/model/constraints/RowListConstraints.java
@@ -25,6 +25,7 @@
 
 import androidx.annotation.NonNull;
 import androidx.annotation.RestrictTo;
+import androidx.car.app.messaging.model.ConversationItem;
 import androidx.car.app.model.Action;
 import androidx.car.app.model.Item;
 import androidx.car.app.model.ItemList;
@@ -176,10 +177,16 @@
 
     private void validateRows(List<? extends Item> rows) {
         for (Item rowObj : rows) {
-            if (!(rowObj instanceof Row)) {
-                throw new IllegalArgumentException("Only Row instances are supported in the list");
+            if (rowObj instanceof Row) {
+                mRowConstraints.validateOrThrow((Row) rowObj);
+            } else if (rowObj instanceof ConversationItem) {
+                // ExperimentalCarApi -- unrestricted for now
+            } else {
+                throw new IllegalArgumentException(String.format(
+                        "Unsupported item type: %s",
+                        rowObj.getClass().getSimpleName()
+                ));
             }
-            mRowConstraints.validateOrThrow((Row) rowObj);
         }
     }
 
diff --git a/car/app/app/src/test/java/androidx/car/app/model/ItemListTest.java b/car/app/app/src/test/java/androidx/car/app/model/ItemListTest.java
index 5d3abf3..07f5d35 100644
--- a/car/app/app/src/test/java/androidx/car/app/model/ItemListTest.java
+++ b/car/app/app/src/test/java/androidx/car/app/model/ItemListTest.java
@@ -91,6 +91,20 @@
     }
 
     @Test
+    public void clearItems() {
+        Row row1 = new Row.Builder().setTitle("Row1").build();
+        Row row2 = new Row.Builder().setTitle("Row2").build();
+        ItemList list = new ItemList.Builder()
+                .addItem(row1)
+                .clearItems()
+                .addItem(row2)
+                .build();
+
+        assertThat(list.getItems()).hasSize(1);
+        assertThat(list.getItems().get(0)).isEqualTo(row2);
+    }
+
+    @Test
     public void setSelectedable_emptyList_throws() {
         assertThrows(
                 IllegalStateException.class,
@@ -212,54 +226,14 @@
 
     @Test
     public void equals_itemListWithRows() {
-        Row row = new Row.Builder().setTitle("Title").build();
-        ItemList itemList =
-                new ItemList.Builder()
-                        .setOnSelectedListener((index) -> {
-                        })
-                        .setNoItemsMessage("no items")
-                        .setSelectedIndex(0)
-                        .setOnItemsVisibilityChangedListener((start, end) -> {
-                        })
-                        .addItem(row)
-                        .build();
-        assertThat(itemList)
-                .isEqualTo(
-                        new ItemList.Builder()
-                                .setOnSelectedListener((index) -> {
-                                })
-                                .setNoItemsMessage("no items")
-                                .setSelectedIndex(0)
-                                .setOnItemsVisibilityChangedListener((start, end) -> {
-                                })
-                                .addItem(row)
-                                .build());
+        assertThat(createFullyPopulatedRowItemList())
+                .isEqualTo(createFullyPopulatedRowItemList());
     }
 
     @Test
     public void equals_itemListWithGridItems() {
-        GridItem gridItem = new GridItem.Builder().setImage(BACK).setTitle("Title").build();
-        ItemList itemList =
-                new ItemList.Builder()
-                        .setOnSelectedListener((index) -> {
-                        })
-                        .setNoItemsMessage("no items")
-                        .setSelectedIndex(0)
-                        .setOnItemsVisibilityChangedListener((start, end) -> {
-                        })
-                        .addItem(gridItem)
-                        .build();
-        assertThat(itemList)
-                .isEqualTo(
-                        new ItemList.Builder()
-                                .setOnSelectedListener((index) -> {
-                                })
-                                .setNoItemsMessage("no items")
-                                .setSelectedIndex(0)
-                                .setOnItemsVisibilityChangedListener((start, end) -> {
-                                })
-                                .addItem(gridItem)
-                                .build());
+        assertThat(createFullyPopulatedGridItemList())
+                .isEqualTo(createFullyPopulatedGridItemList());
     }
 
     @Test
@@ -320,4 +294,64 @@
         ItemList itemList = new ItemList.Builder().addItem(gridItem).addItem(gridItem).build();
         assertThat(itemList).isNotEqualTo(new ItemList.Builder().addItem(gridItem).build());
     }
+
+    @Test
+    public void toBuilder_createsEquivalentInstance_rows() {
+        ItemList itemList = createFullyPopulatedRowItemList();
+
+        assertThat(itemList).isEqualTo(itemList.toBuilder().build());
+    }
+
+    @Test
+    public void toBuilder_createsEquivalentInstance_grid() {
+        ItemList itemList = createFullyPopulatedGridItemList();
+
+        assertThat(itemList).isEqualTo(itemList.toBuilder().build());
+    }
+
+    @Test
+    public void toBuilder_fieldsCanBeOverwritten() {
+        Row row = new Row.Builder().setTitle("Title").build();
+        ItemList itemList = new ItemList.Builder()
+                .setOnSelectedListener((index) -> {})
+                .setNoItemsMessage("no items")
+                .setSelectedIndex(0)
+                .setOnItemsVisibilityChangedListener((start, end) -> {})
+                .addItem(row)
+                .build();
+
+        // Verify fields can be overwritten (no crash)
+        itemList.toBuilder()
+                .setOnSelectedListener((index) -> {})
+                .setNoItemsMessage("no items")
+                .setSelectedIndex(0)
+                .setOnItemsVisibilityChangedListener((start, end) -> {})
+                .clearItems()
+                .addItem(row)
+                .build();
+    }
+
+    private static ItemList createFullyPopulatedRowItemList() {
+        Row row = new Row.Builder().setTitle("Title").build();
+        return new ItemList.Builder()
+            .setOnSelectedListener((index) -> {})
+            .setNoItemsMessage("no items")
+            .setSelectedIndex(0)
+            .setOnItemsVisibilityChangedListener((start, end) -> {})
+            .addItem(row)
+            .build();
+    }
+
+    private static ItemList createFullyPopulatedGridItemList() {
+        GridItem gridItem = new GridItem.Builder().setImage(BACK).setTitle("Title").build();
+        return new ItemList.Builder()
+            .setOnSelectedListener((index) -> {
+            })
+            .setNoItemsMessage("no items")
+            .setSelectedIndex(0)
+            .setOnItemsVisibilityChangedListener((start, end) -> {
+            })
+            .addItem(gridItem)
+            .build();
+    }
 }
diff --git a/car/app/app/src/test/java/androidx/car/app/model/ListTemplateTest.java b/car/app/app/src/test/java/androidx/car/app/model/ListTemplateTest.java
index a867bd6..d84d5e2 100644
--- a/car/app/app/src/test/java/androidx/car/app/model/ListTemplateTest.java
+++ b/car/app/app/src/test/java/androidx/car/app/model/ListTemplateTest.java
@@ -192,6 +192,25 @@
     }
 
     @Test
+    public void clearSectionedLists() {
+        ItemList list1 = getList();
+        ItemList list2 = getList();
+        ItemList list3 = getList();
+
+        ListTemplate template =
+                new ListTemplate.Builder()
+                        .setTitle("Title")
+                        .addSectionedList(SectionedItemList.create(list1, "header1"))
+                        .addSectionedList(SectionedItemList.create(list2, "header2"))
+                        .clearSectionedLists()
+                        // At least one list is required to build
+                        .addSectionedList(SectionedItemList.create(list3, "header3"))
+                        .build();
+
+        assertThat(template.getSectionedLists()).hasSize(1);
+    }
+
+    @Test
     public void createInstance_setHeaderAction_invalidActionThrows() {
         assertThrows(
                 IllegalArgumentException.class,
@@ -225,26 +244,8 @@
 
     @Test
     public void equals() {
-        ItemList itemList = new ItemList.Builder().build();
-        ActionStrip actionStrip = new ActionStrip.Builder().addAction(Action.BACK).build();
-        String title = "title";
-
-        ListTemplate template =
-                new ListTemplate.Builder()
-                        .setSingleList(itemList)
-                        .setActionStrip(actionStrip)
-                        .setHeaderAction(Action.BACK)
-                        .setTitle(title)
-                        .build();
-
-        assertThat(template)
-                .isEqualTo(
-                        new ListTemplate.Builder()
-                                .setSingleList(itemList)
-                                .setActionStrip(actionStrip)
-                                .setHeaderAction(Action.BACK)
-                                .setTitle(title)
-                                .build());
+        assertThat(createFullyPopulatedListTemplate())
+                .isEqualTo(createFullyPopulatedListTemplate());
     }
 
     @Test
@@ -317,6 +318,48 @@
                         "yo").build());
     }
 
+    @Test
+    public void toBuilder_createsEquivalentInstance() {
+        ListTemplate listTemplate = createFullyPopulatedListTemplate();
+
+        assertThat(listTemplate).isEqualTo(listTemplate.toBuilder().build());
+    }
+
+    @Test
+    public void toBuilder_fieldsCanBeOverwritten() {
+        ItemList itemList = new ItemList.Builder().build();
+        ActionStrip actionStrip = new ActionStrip.Builder().addAction(Action.BACK).build();
+        String title = "title";
+
+        ListTemplate listTemplate = new ListTemplate.Builder()
+                .setSingleList(itemList)
+                .setActionStrip(actionStrip)
+                .setHeaderAction(Action.BACK)
+                .setTitle(title)
+                .build();
+
+        // Verify fields can be overwritten (no crash)
+        listTemplate.toBuilder()
+                .setSingleList(itemList)
+                .setActionStrip(actionStrip)
+                .setHeaderAction(Action.BACK)
+                .setTitle(title)
+                .build();
+    }
+
+    private static ListTemplate createFullyPopulatedListTemplate() {
+        ItemList itemList = new ItemList.Builder().build();
+        ActionStrip actionStrip = new ActionStrip.Builder().addAction(Action.BACK).build();
+        String title = "title";
+
+        return new ListTemplate.Builder()
+            .setSingleList(itemList)
+            .setActionStrip(actionStrip)
+            .setHeaderAction(Action.BACK)
+            .setTitle(title)
+            .build();
+    }
+
     private static ItemList getList() {
         Row row1 = new Row.Builder().setTitle("Bananas").build();
         Row row2 = new Row.Builder().setTitle("Oranges").build();
diff --git a/car/app/app/src/test/java/androidx/car/app/model/RowTest.java b/car/app/app/src/test/java/androidx/car/app/model/RowTest.java
index 372ab30..692d69a 100644
--- a/car/app/app/src/test/java/androidx/car/app/model/RowTest.java
+++ b/car/app/app/src/test/java/androidx/car/app/model/RowTest.java
@@ -163,6 +163,17 @@
         );
     }
 
+    public void setDecoration_withToggle_throws() {
+        Toggle toggle = new Toggle.Builder(isChecked -> {}).build();
+
+        assertThrows(
+                IllegalArgumentException.class,
+                () -> new Row.Builder().setTitle("Title")
+                        .setToggle(toggle)
+                        .setNumericDecoration(5)
+                        .build());
+    }
+
     @Test
     public void setToggle() {
         Toggle toggle1 = new Toggle.Builder(isChecked -> {
@@ -204,9 +215,8 @@
         Row row = new Row.Builder()
                 .setTitle("Title")
                 .addAction(customAction)
-                .addAction(customAction)
                 .build();
-        assertThat(row.getActions()).containsExactly(customAction, customAction);
+        assertThat(row.getActions()).containsExactly(customAction);
     }
 
     @Test
@@ -256,6 +266,33 @@
                         .build());
     }
 
+    public void addAction_browsableRow_throws() {
+        CarIcon carIcon = TestUtils.getTestCarIcon(ApplicationProvider.getApplicationContext(),
+                "ic_test_1");
+        Action customAction = TestUtils.createAction("Title", carIcon);
+
+        assertThrows(
+                IllegalArgumentException.class,
+                () -> new Row.Builder().setTitle("Title")
+                        .setBrowsable(true)
+                        .addAction(customAction)
+                        .build());
+    }
+
+    public void addAction_withToggle_throws() {
+        Toggle toggle = new Toggle.Builder(isChecked -> {}).build();
+        CarIcon carIcon = TestUtils.getTestCarIcon(ApplicationProvider.getApplicationContext(),
+                "ic_test_1");
+        Action customAction = TestUtils.createAction("Title", carIcon);
+
+        assertThrows(
+                IllegalArgumentException.class,
+                () -> new Row.Builder().setTitle("Title")
+                        .setToggle(toggle)
+                        .addAction(customAction)
+                        .build());
+    }
+
     @Test
     public void setMetadata() {
         Metadata metadata =
diff --git a/car/app/app/src/test/java/androidx/car/app/model/constraints/RowListConstraintsTest.java b/car/app/app/src/test/java/androidx/car/app/model/constraints/RowListConstraintsTest.java
index 924c087..fa94459 100644
--- a/car/app/app/src/test/java/androidx/car/app/model/constraints/RowListConstraintsTest.java
+++ b/car/app/app/src/test/java/androidx/car/app/model/constraints/RowListConstraintsTest.java
@@ -19,12 +19,17 @@
 import static org.junit.Assert.assertThrows;
 
 import androidx.car.app.TestUtils;
+import androidx.car.app.messaging.model.ConversationItem;
+import androidx.car.app.model.CarText;
+import androidx.car.app.model.ItemList;
 
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.annotation.internal.DoNotInstrument;
 
+import java.util.ArrayList;
+
 /** Tests for {@link RowListConstraints}. */
 @RunWith(RobolectricTestRunner.class)
 @DoNotInstrument
@@ -83,4 +88,21 @@
         // Positive case
         constraints.validateOrThrow(TestUtils.createPane(5, 2));
     }
+
+    @Test
+    public void validate_conversationItem_isAlwaysValid() {
+        RowListConstraints constraints = new RowListConstraints.Builder().build();
+        ItemList itemList = new ItemList.Builder()
+                .addItem(new ConversationItem.Builder()
+                        .setId("id")
+                        .setTitle(CarText.create("title"))
+                        .setMessages(new ArrayList<>())
+                        .build()
+                )
+                .build();
+
+        constraints.validateOrThrow(itemList);
+
+        // Verify no exception was thrown.
+    }
 }
diff --git a/compose/compiler/compiler-hosted/integration-tests/build.gradle b/compose/compiler/compiler-hosted/integration-tests/build.gradle
index 220690d..2086707 100644
--- a/compose/compiler/compiler-hosted/integration-tests/build.gradle
+++ b/compose/compiler/compiler-hosted/integration-tests/build.gradle
@@ -67,6 +67,7 @@
         t.dependsOn(":compose:compiler:compiler:embeddedPlugin")
 
         maxHeapSize("1024m")
+        t.jvmArgs += ["--add-opens=jdk.jdi/com.sun.tools.jdi=ALL-UNNAMED"]
     }
 }
 
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ClassStabilityTransformTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ClassStabilityTransformTests.kt
index ce51b33..c3a5112 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ClassStabilityTransformTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ClassStabilityTransformTests.kt
@@ -782,7 +782,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                A(y, %composer, %changed or 0b0001, %default)
+                A(y, %composer, updateChangedFlags(%changed or 0b0001), %default)
               }
             }
         """
@@ -894,7 +894,7 @@
                 traceEventEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                A(y, %composer, %changed or 0b0001)
+                A(y, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -933,7 +933,7 @@
                 traceEventEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                A(y, %composer, %changed or 0b0001)
+                A(y, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -985,7 +985,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                B(value, %composer, %changed or 0b0001)
+                B(value, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             @Composable
@@ -1006,7 +1006,7 @@
                 traceEventEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                X(items, itemContent, %composer, %changed or 0b0001)
+                X(items, itemContent, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             @Composable
@@ -1021,7 +1021,7 @@
                 traceEventEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                C(items, %composer, %changed or 0b0001)
+                C(items, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             internal object ComposableSingletons%TestKt {
@@ -1098,7 +1098,7 @@
                 traceEventEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                A(y, x, %composer, %changed or 0b0001)
+                A(y, x, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             @Composable
@@ -1113,7 +1113,7 @@
                 traceEventEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                B(x, %composer, %changed or 0b0001)
+                B(x, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -1151,7 +1151,7 @@
                 traceEventEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                A(y, x, %composer, %changed or 0b0001)
+                A(y, x, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             @Composable
@@ -1166,7 +1166,7 @@
                 traceEventEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                B(x, %composer, %changed or 0b0001)
+                B(x, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposerParamTransformTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposerParamTransformTests.kt
index 905e566..9ed0139 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposerParamTransformTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposerParamTransformTests.kt
@@ -249,7 +249,7 @@
                 traceEventEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                VarArgsFirst(*foo, %composer, %changed or 0b0001)
+                VarArgsFirst(*foo, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             @Composable
@@ -271,7 +271,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                VarArgsCaller(%composer, %changed or 0b0001)
+                VarArgsCaller(%composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -515,7 +515,7 @@
                     %composer.skipToGroupEnd()
                   }
                   %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                    Wrapper(block, %composer, %changed or 0b0001)
+                    Wrapper(block, %composer, updateChangedFlags(%changed or 0b0001))
                   }
                 }
                 @Composable
@@ -538,7 +538,7 @@
                     %composer.skipToGroupEnd()
                   }
                   %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                    Leaf(text, %composer, %changed or 0b0001)
+                    Leaf(text, %composer, updateChangedFlags(%changed or 0b0001))
                   }
                 }
                 @Composable
@@ -577,7 +577,7 @@
                     %composer.skipToGroupEnd()
                   }
                   %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                    Test(value, %composer, %changed or 0b0001)
+                    Test(value, %composer, updateChangedFlags(%changed or 0b0001))
                   }
                 }
             """,
@@ -680,7 +680,7 @@
                     %composer.skipToGroupEnd()
                   }
                   %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                    composeVector(composable, %composer, %changed or 0b0001)
+                    composeVector(composable, %composer, updateChangedFlags(%changed or 0b0001))
                   }
                 }
                 @Composable
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ContextReceiversTransformTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ContextReceiversTransformTests.kt
index 9edb6f7..ae4fc32 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ContextReceiversTransformTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ContextReceiversTransformTests.kt
@@ -71,7 +71,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(%this%, %composer, %changed or 0b0001)
+                Test(%this%, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -109,7 +109,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                A(%this%, %this%, %composer, %changed or 0b0001)
+                A(%this%, %this%, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             @Composable
@@ -127,7 +127,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                B(%this%, %this%, %this%, %composer, %changed or 0b0001)
+                B(%this%, %this%, %this%, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -165,7 +165,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                A(%this%, %this%, %composer, %changed or 0b0001)
+                A(%this%, %this%, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             @Composable
@@ -183,7 +183,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                B(%this%, %this%, %this%, %composer, %changed or 0b0001)
+                B(%this%, %this%, %this%, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -228,7 +228,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                A(%this%, %this%, a, %composer, %changed or 0b0001, %default)
+                A(%this%, %this%, a, %composer, updateChangedFlags(%changed or 0b0001), %default)
               }
             }
             @Composable
@@ -252,7 +252,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                B(%this%, %this%, %this%, a, b, c, %composer, %changed or 0b0001, %default)
+                B(%this%, %this%, %this%, a, b, c, %composer, updateChangedFlags(%changed or 0b0001), %default)
               }
             }
             @Composable
@@ -284,7 +284,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                C(%this%, a, bar, %composer, %changed or 0b0001, %default)
+                C(%this%, a, bar, %composer, updateChangedFlags(%changed or 0b0001), %default)
               }
             }
         """
@@ -324,7 +324,7 @@
             %composer.skipToGroupEnd()
           }
           %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-            B(%this%, %this%, %this%, a, b, c, %composer, %changed or 0b0001, %default)
+            B(%this%, %this%, %this%, a, b, c, %composer, updateChangedFlags(%changed or 0b0001), %default)
           }
         }
         """
@@ -371,7 +371,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(foo, %composer, %changed or 0b0001)
+                Test(foo, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -428,7 +428,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(foo, %composer, %changed or 0b0001)
+                Test(foo, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -474,7 +474,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(foo, %composer, %changed or 0b0001)
+                Test(foo, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -518,7 +518,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(%this%, %this%, %this%, %this%, %this%, %this%, %this%, %this%, %this%, %this%, %this%, %this%, %composer, %changed or 0b0001, %changed1)
+                Test(%this%, %this%, %this%, %this%, %this%, %this%, %this%, %this%, %this%, %this%, %this%, %this%, %composer, updateChangedFlags(%changed or 0b0001), updateChangedFlags(%changed1))
               }
             }
         """
@@ -558,7 +558,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(%this%, a, b, %composer, %changed or 0b0001)
+                Test(%this%, a, b, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -613,7 +613,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Parent(%composer, %changed or 0b0001)
+                Parent(%composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             @Composable
@@ -657,7 +657,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(%this%, a, b, %composer, %changed or 0b0001, %default)
+                Test(%this%, a, b, %composer, updateChangedFlags(%changed or 0b0001), %default)
               }
             }
         """
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ControlFlowTransformTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ControlFlowTransformTests.kt
index 8506e01..f187998 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ControlFlowTransformTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ControlFlowTransformTests.kt
@@ -1414,7 +1414,7 @@
                     traceEventEnd()
                   }
                   %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                    Example(items, %composer, %changed or 0b0001)
+                    Example(items, %composer, updateChangedFlags(%changed or 0b0001))
                   }
                   return
                 } else {
@@ -1429,7 +1429,7 @@
                 traceEventEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Example(items, %composer, %changed or 0b0001)
+                Example(items, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -2773,7 +2773,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Example(x, %composer, %changed or 0b0001)
+                Example(x, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -2820,7 +2820,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Example(x, %composer, %changed or 0b0001)
+                Example(x, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -2928,7 +2928,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(%composer, %changed or 0b0001)
+                Test(%composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             internal object ComposableSingletons%TestKt {
@@ -2986,7 +2986,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(%composer, %changed or 0b0001)
+                Test(%composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -3024,7 +3024,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(%composer, %changed or 0b0001)
+                Test(%composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             internal object ComposableSingletons%TestKt {
@@ -3098,7 +3098,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(value, %composer, %changed or 0b0001)
+                Test(value, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -3285,7 +3285,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test01(p0, p1, p2, p3, %composer, %changed or 0b0001)
+                Test01(p0, p1, p2, p3, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             @Composable
@@ -3320,7 +3320,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test02(p0, p1, p3, p2, %composer, %changed or 0b0001)
+                Test02(p0, p1, p3, p2, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             @Composable
@@ -3355,7 +3355,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test03(p0, p2, p1, p3, %composer, %changed or 0b0001)
+                Test03(p0, p2, p1, p3, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             @Composable
@@ -3390,7 +3390,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test04(p0, p2, p3, p1, %composer, %changed or 0b0001)
+                Test04(p0, p2, p3, p1, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             @Composable
@@ -3425,7 +3425,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test05(p0, p3, p1, p2, %composer, %changed or 0b0001)
+                Test05(p0, p3, p1, p2, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             @Composable
@@ -3460,7 +3460,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test06(p0, p3, p2, p1, %composer, %changed or 0b0001)
+                Test06(p0, p3, p2, p1, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             @Composable
@@ -3495,7 +3495,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test07(p1, p0, p2, p3, %composer, %changed or 0b0001)
+                Test07(p1, p0, p2, p3, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             @Composable
@@ -3530,7 +3530,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test08(p1, p0, p3, p2, %composer, %changed or 0b0001)
+                Test08(p1, p0, p3, p2, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             @Composable
@@ -3565,7 +3565,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test09(p1, p2, p0, p3, %composer, %changed or 0b0001)
+                Test09(p1, p2, p0, p3, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             @Composable
@@ -3600,7 +3600,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test00(p1, p2, p3, p0, %composer, %changed or 0b0001)
+                Test00(p1, p2, p3, p0, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             @Composable
@@ -3635,7 +3635,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test11(p1, p3, p0, p2, %composer, %changed or 0b0001)
+                Test11(p1, p3, p0, p2, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             @Composable
@@ -3670,7 +3670,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test12(p1, p3, p2, p0, %composer, %changed or 0b0001)
+                Test12(p1, p3, p2, p0, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             @Composable
@@ -3705,7 +3705,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test13(p2, p0, p1, p3, %composer, %changed or 0b0001)
+                Test13(p2, p0, p1, p3, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             @Composable
@@ -3740,7 +3740,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test14(p2, p0, p3, p1, %composer, %changed or 0b0001)
+                Test14(p2, p0, p3, p1, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             @Composable
@@ -3775,7 +3775,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test15(p2, p1, p0, p3, %composer, %changed or 0b0001)
+                Test15(p2, p1, p0, p3, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             @Composable
@@ -3810,7 +3810,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test16(p2, p1, p3, p0, %composer, %changed or 0b0001)
+                Test16(p2, p1, p3, p0, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             @Composable
@@ -3845,7 +3845,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test17(p2, p3, p0, p1, %composer, %changed or 0b0001)
+                Test17(p2, p3, p0, p1, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             @Composable
@@ -3880,7 +3880,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test18(p2, p3, p1, p0, %composer, %changed or 0b0001)
+                Test18(p2, p3, p1, p0, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             @Composable
@@ -3915,7 +3915,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test19(p3, p0, p1, p2, %composer, %changed or 0b0001)
+                Test19(p3, p0, p1, p2, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             @Composable
@@ -3950,7 +3950,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test20(p3, p0, p2, p1, %composer, %changed or 0b0001)
+                Test20(p3, p0, p2, p1, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             @Composable
@@ -3985,7 +3985,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test21(p3, p1, p0, p2, %composer, %changed or 0b0001)
+                Test21(p3, p1, p0, p2, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             @Composable
@@ -4020,7 +4020,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test22(p3, p1, p2, p0, %composer, %changed or 0b0001)
+                Test22(p3, p1, p2, p0, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             @Composable
@@ -4055,7 +4055,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test23(p3, p2, p0, p1, %composer, %changed or 0b0001)
+                Test23(p3, p2, p0, p1, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             @Composable
@@ -4090,7 +4090,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test24(p3, p2, p1, p0, %composer, %changed or 0b0001)
+                Test24(p3, p2, p1, p0, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -4135,7 +4135,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(value, %composer, %changed or 0b0001)
+                Test(value, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """,
@@ -4180,7 +4180,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(%composer, %changed or 0b0001)
+                Test(%composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """,
@@ -4305,7 +4305,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(%composer, %changed or 0b0001)
+                Test(%composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             internal object ComposableSingletons%TestKt {
@@ -4426,7 +4426,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(%composer, %changed or 0b0001)
+                Test(%composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """,
@@ -4554,7 +4554,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(%composer, %changed or 0b0001)
+                Test(%composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """,
@@ -4656,7 +4656,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                AttemptedToRealizeGroupTwice(%composer, %changed or 0b0001)
+                AttemptedToRealizeGroupTwice(%composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """,
@@ -4739,7 +4739,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(start, end, %composer, %changed or 0b0001)
+                Test(start, end, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -4839,7 +4839,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                ArrayConstructorTest(n, %composer, %changed or 0b0001)
+                ArrayConstructorTest(n, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ControlFlowTransformTestsNoSource.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ControlFlowTransformTestsNoSource.kt
index 73d7003ba..1fe4e9a 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ControlFlowTransformTestsNoSource.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ControlFlowTransformTestsNoSource.kt
@@ -48,7 +48,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(%composer, %changed or 0b0001)
+                Test(%composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -80,7 +80,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(%composer, %changed or 0b0001)
+                Test(%composer, updateChangedFlags(%changed or 0b0001))
               }
             }
 
@@ -114,7 +114,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(%composer, %changed or 0b0001)
+                Test(%composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             internal object ComposableSingletons%TestKt {
@@ -168,7 +168,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(%composer, %changed or 0b0001)
+                Test(%composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/DefaultParamTransformTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/DefaultParamTransformTests.kt
index fc98ac8..89b3ba3 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/DefaultParamTransformTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/DefaultParamTransformTests.kt
@@ -79,7 +79,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(%composer, %changed or 0b0001)
+                Test(%composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -126,7 +126,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Example(foo, %composer, %changed or 0b0001, %default)
+                Example(foo, %composer, updateChangedFlags(%changed or 0b0001), %default)
               }
             }
             @Composable
@@ -145,7 +145,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(%composer, %changed or 0b0001)
+                Test(%composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -181,7 +181,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(%composer, %changed or 0b0001)
+                Test(%composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -258,7 +258,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(x, %composer, %changed or 0b0001, %default)
+                Test(x, %composer, updateChangedFlags(%changed or 0b0001), %default)
               }
             }
         """
@@ -318,7 +318,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                A(a, b, %composer, %changed or 0b0001, %default)
+                A(a, b, %composer, updateChangedFlags(%changed or 0b0001), %default)
               }
             }
         """
@@ -695,7 +695,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Example(a00, a01, a02, a03, a04, a05, a06, a07, a08, a09, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, %composer, %changed or 0b0001, %changed1, %changed2, %changed3, %default)
+                Example(a00, a01, a02, a03, a04, a05, a06, a07, a08, a09, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, %composer, updateChangedFlags(%changed or 0b0001), updateChangedFlags(%changed1), updateChangedFlags(%changed2), updateChangedFlags(%changed3), %default)
               }
             }
         """
@@ -1083,7 +1083,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Example(a00, a01, a02, a03, a04, a05, a06, a07, a08, a09, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, %composer, %changed or 0b0001, %changed1, %changed2, %changed3, %default, %default1)
+                Example(a00, a01, a02, a03, a04, a05, a06, a07, a08, a09, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, %composer, updateChangedFlags(%changed or 0b0001), updateChangedFlags(%changed1), updateChangedFlags(%changed2), updateChangedFlags(%changed3), %default, %default1)
               }
             }
         """
@@ -1482,7 +1482,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Example(a00, a01, a02, a03, a04, a05, a06, a07, a08, a09, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, %composer, %changed or 0b0001, %changed1, %changed2, %changed3, %default, %default1)
+                Example(a00, a01, a02, a03, a04, a05, a06, a07, a08, a09, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, %composer, updateChangedFlags(%changed or 0b0001), updateChangedFlags(%changed1), updateChangedFlags(%changed2), updateChangedFlags(%changed3), %default, %default1)
               }
             }
         """
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/FunctionBodySkippingTransformTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/FunctionBodySkippingTransformTests.kt
index e569c06..d214ded 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/FunctionBodySkippingTransformTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/FunctionBodySkippingTransformTests.kt
@@ -127,7 +127,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(x, y, %composer, %changed or 0b0001, %default)
+                Test(x, y, %composer, updateChangedFlags(%changed or 0b0001), %default)
               }
             }
         """
@@ -198,7 +198,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                BasicText(style, onTextLayout, overflow, %composer, %changed or 0b0001, %default)
+                BasicText(style, onTextLayout, overflow, %composer, updateChangedFlags(%changed or 0b0001), %default)
               }
             }
         """
@@ -245,7 +245,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                A(arrangement, %composer, %changed or 0b0001, %default)
+                A(arrangement, %composer, updateChangedFlags(%changed or 0b0001), %default)
               }
             }
         """
@@ -290,7 +290,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Example(content, %composer, %changed or 0b0001, %default)
+                Example(content, %composer, updateChangedFlags(%changed or 0b0001), %default)
               }
             }
             internal object ComposableSingletons%TestKt {
@@ -350,7 +350,7 @@
                   }
                   val tmp0_rcvr = <this>
                   %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                    tmp0_rcvr.compute(it, %composer, %changed or 0b0001)
+                    tmp0_rcvr.compute(it, %composer, updateChangedFlags(%changed or 0b0001))
                   }
                 }
               }
@@ -407,7 +407,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Button(colors, %composer, %changed or 0b0001)
+                Button(colors, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             @Composable
@@ -447,7 +447,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(%composer, %changed or 0b0001)
+                Test(%composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -596,7 +596,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                RowColumnImpl(orientation, modifier, arrangement, crossAxisAlignment, crossAxisSize, content, %composer, %changed or 0b0001, %default)
+                RowColumnImpl(orientation, modifier, arrangement, crossAxisAlignment, crossAxisSize, content, %composer, updateChangedFlags(%changed or 0b0001), %default)
               }
             }
             @Composable
@@ -648,7 +648,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Column(modifier, verticalArrangement, horizontalGravity, content, %composer, %changed or 0b0001, %default)
+                Column(modifier, verticalArrangement, horizontalGravity, content, %composer, updateChangedFlags(%changed or 0b0001), %default)
               }
             }
         """
@@ -696,7 +696,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                SimpleBox(modifier, %composer, %changed or 0b0001, %default)
+                SimpleBox(modifier, %composer, updateChangedFlags(%changed or 0b0001), %default)
               }
             }
         """
@@ -747,7 +747,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Example(a, %composer, %changed or 0b0001, %default)
+                Example(a, %composer, updateChangedFlags(%changed or 0b0001), %default)
               }
             }
         """
@@ -801,7 +801,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Example(a, %composer, %changed or 0b0001)
+                Example(a, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -922,7 +922,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                SimpleBox(modifier, shape, %composer, %changed or 0b0001, %default)
+                SimpleBox(modifier, shape, %composer, updateChangedFlags(%changed or 0b0001), %default)
               }
             }
         """
@@ -981,7 +981,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                SimpleBox(modifier, content, %composer, %changed or 0b0001, %default)
+                SimpleBox(modifier, content, %composer, updateChangedFlags(%changed or 0b0001), %default)
               }
             }
             internal object ComposableSingletons%TestKt {
@@ -1114,7 +1114,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                SomeThing(content, %composer, %changed or 0b0001)
+                SomeThing(content, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             @Composable
@@ -1133,7 +1133,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Example(%composer, %changed or 0b0001)
+                Example(%composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             internal object ComposableSingletons%TestKt {
@@ -1193,7 +1193,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                B(*values, %composer, %changed or 0b0001)
+                B(*values, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -1239,7 +1239,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                B(*values, %composer, %changed or 0b0001)
+                B(*values, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -1269,7 +1269,7 @@
                 traceEventEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                B(*values, %composer, %changed or 0b0001)
+                B(*values, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -1311,7 +1311,7 @@
                 }
                 val tmp0_rcvr = <this>
                 %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                  tmp0_rcvr.A(%composer, %changed or 0b0001)
+                  tmp0_rcvr.A(%composer, updateChangedFlags(%changed or 0b0001))
                 }
               }
               @Composable
@@ -1327,7 +1327,7 @@
                 }
                 val tmp0_rcvr = <this>
                 %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                  tmp0_rcvr.B(%composer, %changed or 0b0001)
+                  tmp0_rcvr.B(%composer, updateChangedFlags(%changed or 0b0001))
                 }
               }
               static val %stable: Int = 8
@@ -1400,7 +1400,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Example(a, b, c, %composer, %changed or 0b0001, %default)
+                Example(a, b, c, %composer, updateChangedFlags(%changed or 0b0001), %default)
               }
             }
         """
@@ -1449,7 +1449,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Wrap(y, content, %composer, %changed or 0b0001)
+                Wrap(y, content, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             @Composable
@@ -1504,7 +1504,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(x, y, %composer, %changed or 0b0001, %default)
+                Test(x, y, %composer, updateChangedFlags(%changed or 0b0001), %default)
               }
             }
         """
@@ -1642,7 +1642,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(x, y, %composer, %changed or 0b0001)
+                Test(x, y, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -1711,7 +1711,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                CanSkip(a, b, %composer, %changed or 0b0001, %default)
+                CanSkip(a, b, %composer, updateChangedFlags(%changed or 0b0001), %default)
               }
             }
             @Composable
@@ -1728,7 +1728,7 @@
                 traceEventEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                CannotSkip(a, b, %composer, %changed or 0b0001)
+                CannotSkip(a, b, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             @Composable
@@ -1747,7 +1747,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                NoParams(%composer, %changed or 0b0001)
+                NoParams(%composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -1795,7 +1795,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                CanSkip(b, %composer, %changed or 0b0001, %default)
+                CanSkip(b, %composer, updateChangedFlags(%changed or 0b0001), %default)
               }
             }
         """
@@ -1829,7 +1829,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(%composer, %changed or 0b0001)
+                Test(%composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -1867,7 +1867,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(x, %composer, %changed or 0b0001)
+                Test(x, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -1915,7 +1915,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                A(text, %composer, %changed or 0b0001)
+                A(text, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             @Composable
@@ -1949,7 +1949,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                B(text, color, %composer, %changed or 0b0001, %default)
+                B(text, color, %composer, updateChangedFlags(%changed or 0b0001), %default)
               }
             }
         """
@@ -2042,7 +2042,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                A(%composer, %changed or 0b0001)
+                A(%composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             @Composable
@@ -2062,7 +2062,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                B(%composer, %changed or 0b0001)
+                B(%composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             internal object ComposableSingletons%TestKt {
@@ -2111,7 +2111,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Example(%composer, %changed or 0b0001)
+                Example(%composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             internal object ComposableSingletons%TestKt {
@@ -2170,7 +2170,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(x, %composer, %changed or 0b0001, %default)
+                Test(x, %composer, updateChangedFlags(%changed or 0b0001), %default)
               }
             }
         """
@@ -2222,7 +2222,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(x, %composer, %changed or 0b0001, %default)
+                Test(x, %composer, updateChangedFlags(%changed or 0b0001), %default)
               }
             }
         """
@@ -2253,7 +2253,7 @@
                 traceEventEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(x, %composer, %changed or 0b0001)
+                Test(x, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -2305,7 +2305,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(x, %composer, %changed or 0b0001, %default)
+                Test(x, %composer, updateChangedFlags(%changed or 0b0001), %default)
               }
             }
         """
@@ -2385,7 +2385,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(a, b, c, d, e, %composer, %changed or 0b0001, %default)
+                Test(a, b, c, d, e, %composer, updateChangedFlags(%changed or 0b0001), %default)
               }
             }
         """
@@ -2424,7 +2424,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                X(x, %composer, %changed or 0b0001)
+                X(x, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -2524,7 +2524,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(%composer, %changed or 0b0001)
+                Test(%composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             @Composable
@@ -2542,7 +2542,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                doSomething(x, %composer, %changed or 0b0001)
+                doSomething(x, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -2644,7 +2644,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                A(x, %composer, %changed or 0b0001)
+                A(x, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -2820,7 +2820,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                A(x, %composer, %changed or 0b0001)
+                A(x, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -2874,7 +2874,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                A(x, %composer, %changed or 0b0001)
+                A(x, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -3081,7 +3081,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Example(a00, a01, a02, a03, a04, a05, a06, a07, a08, a09, a10, a11, a12, a13, a14, %composer, %changed or 0b0001, %changed1, %default)
+                Example(a00, a01, a02, a03, a04, a05, a06, a07, a08, a09, a10, a11, a12, a13, a14, %composer, updateChangedFlags(%changed or 0b0001), updateChangedFlags(%changed1), %default)
               }
             }
         """
@@ -3299,7 +3299,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Example(a00, a01, a02, a03, a04, a05, a06, a07, a08, a09, a10, a11, a12, a13, a14, a15, %composer, %changed or 0b0001, %changed1, %default)
+                Example(a00, a01, a02, a03, a04, a05, a06, a07, a08, a09, a10, a11, a12, a13, a14, a15, %composer, updateChangedFlags(%changed or 0b0001), updateChangedFlags(%changed1), %default)
               }
             }
         """
@@ -3431,7 +3431,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Example(wontChange, mightChange, %composer, %changed or 0b0001, %default)
+                Example(wontChange, mightChange, %composer, updateChangedFlags(%changed or 0b0001), %default)
               }
             }
         """
@@ -3468,7 +3468,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Example(content, %composer, %changed or 0b0001)
+                Example(content, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -3565,7 +3565,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Box2(modifier, paddingStart, content, %composer, %changed or 0b0001, %default)
+                Box2(modifier, paddingStart, content, %composer, updateChangedFlags(%changed or 0b0001), %default)
               }
             }
             internal object ComposableSingletons%TestKt {
@@ -3633,7 +3633,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(cond, %composer, %changed or 0b0001)
+                Test(cond, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -3675,7 +3675,7 @@
                 traceEventEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Unskippable(a, b, c, %composer, %changed or 0b0001)
+                Unskippable(a, b, c, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             @Composable
@@ -3698,7 +3698,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Skippable1(a, b, c, %composer, %changed or 0b0001)
+                Skippable1(a, b, c, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             @Composable
@@ -3721,7 +3721,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Skippable2(a, b, c, %composer, %changed or 0b0001)
+                Skippable2(a, b, c, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             @Composable
@@ -3739,7 +3739,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Skippable3(a, b, c, %composer, %changed or 0b0001)
+                Skippable3(a, b, c, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -3785,7 +3785,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                example(x, %composer, %changed or 0b0001)
+                example(x, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             val example: @[ExtensionFunctionType] Function4<MaybeStable, Int, Composer, Int, Unit> = ComposableSingletons%TestKt.lambda-1
@@ -3877,7 +3877,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                VarargComposable(state, *values, %composer, %changed or 0b0001, %default)
+                VarargComposable(state, *values, %composer, updateChangedFlags(%changed or 0b0001), %default)
               }
             }
         """
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/LambdaMemoizationTransformTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/LambdaMemoizationTransformTests.kt
index 803e2de..57f5cc5 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/LambdaMemoizationTransformTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/LambdaMemoizationTransformTests.kt
@@ -137,7 +137,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Example(%composer, %changed or 0b0001)
+                Example(%composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """,
@@ -338,7 +338,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                SimpleAnimatedContentSample(%composer, %changed or 0b0001)
+                SimpleAnimatedContentSample(%composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """,
@@ -391,7 +391,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                A(%composer, %changed or 0b0001)
+                A(%composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """,
@@ -480,7 +480,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                A(%composer, %changed or 0b0001)
+                A(%composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             internal object ComposableSingletons%TestKt {
@@ -546,7 +546,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                A(%composer, %changed or 0b0001)
+                A(%composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             internal object ComposableSingletons%TestKt {
@@ -642,7 +642,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Example(x, %composer, %changed or 0b0001)
+                Example(x, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """,
@@ -708,7 +708,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(enabled, content, %composer, %changed or 0b0001, %default)
+                Test(enabled, content, %composer, updateChangedFlags(%changed or 0b0001), %default)
               }
             }
         """,
@@ -768,7 +768,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(enabled, %composer, %changed or 0b0001)
+                Test(enabled, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """,
@@ -819,7 +819,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                TestLambda(content, %composer, %changed or 0b0001)
+                TestLambda(content, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             @Composable
@@ -840,7 +840,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(%composer, %changed or 0b0001)
+                Test(%composer, updateChangedFlags(%changed or 0b0001))
               }
             }
     """
@@ -885,7 +885,7 @@
             %composer.skipToGroupEnd()
           }
           %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-            TestLambda(content, %composer, %changed or 0b0001)
+            TestLambda(content, %composer, updateChangedFlags(%changed or 0b0001))
           }
         }
         @Composable
@@ -912,7 +912,7 @@
             %composer.skipToGroupEnd()
           }
           %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-            Test(a, %composer, %changed or 0b0001)
+            Test(a, %composer, updateChangedFlags(%changed or 0b0001))
           }
         }
         """
@@ -977,7 +977,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(%composer, %changed or 0b0001)
+                Test(%composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """,
@@ -1054,7 +1054,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(s, %composer, %changed or 0b0001)
+                Test(s, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """,
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/RememberIntrinsicTransformTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/RememberIntrinsicTransformTests.kt
index e503d2d..382e383 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/RememberIntrinsicTransformTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/RememberIntrinsicTransformTests.kt
@@ -179,7 +179,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                test1(x, %composer, %changed or 0b0001)
+                test1(x, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             @Composable
@@ -196,7 +196,7 @@
                 traceEventEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                test2(x, %composer, %changed or 0b0001)
+                test2(x, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             @Composable
@@ -221,7 +221,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                test3(x, %composer, %changed or 0b0001)
+                test3(x, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -375,7 +375,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(%composer, %changed or 0b0001)
+                Test(%composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -416,7 +416,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(%composer, %changed or 0b0001)
+                Test(%composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -453,7 +453,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(%composer, %changed or 0b0001)
+                Test(%composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -495,7 +495,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(%composer, %changed or 0b0001)
+                Test(%composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -535,7 +535,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(%composer, %changed or 0b0001)
+                Test(%composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -574,7 +574,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(%composer, %changed or 0b0001)
+                Test(%composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -621,7 +621,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(condition, %composer, %changed or 0b0001)
+                Test(condition, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -668,7 +668,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(condition, %composer, %changed or 0b0001)
+                Test(condition, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -710,7 +710,7 @@
                 traceEventEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(items, %composer, %changed or 0b0001)
+                Test(items, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -755,7 +755,7 @@
                 traceEventEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(items, %composer, %changed or 0b0001)
+                Test(items, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -789,7 +789,7 @@
                 traceEventEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(items, %composer, %changed or 0b0001)
+                Test(items, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -839,7 +839,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(a, b, c, d, %composer, %changed or 0b0001)
+                Test(a, b, c, d, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -872,7 +872,7 @@
                 traceEventEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(items, %composer, %changed or 0b0001)
+                Test(items, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -915,7 +915,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(inlineInt, %composer, %changed or 0b0001)
+                Test(inlineInt, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -964,7 +964,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(%composer, %changed or 0b0001)
+                Test(%composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -1007,7 +1007,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(a, %composer, %changed or 0b0001)
+                Test(a, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -1082,7 +1082,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(a, %composer, %changed or 0b0001)
+                Test(a, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -1120,7 +1120,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(a, %composer, %changed or 0b0001)
+                Test(a, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -1161,7 +1161,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(a, %composer, %changed or 0b0001)
+                Test(a, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -1198,7 +1198,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(a, %composer, %changed or 0b0001)
+                Test(a, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -1250,7 +1250,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(a, %composer, %changed or 0b0001, %default)
+                Test(a, %composer, updateChangedFlags(%changed or 0b0001), %default)
               }
             }
         """
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/StabilityPropagationTransformTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/StabilityPropagationTransformTests.kt
index c502f11..10aac7d 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/StabilityPropagationTransformTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/StabilityPropagationTransformTests.kt
@@ -83,7 +83,7 @@
             %composer.skipToGroupEnd()
           }
           %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-            Test(x, %composer, %changed or 0b0001)
+            Test(x, %composer, updateChangedFlags(%changed or 0b0001))
           }
         }
         """
@@ -122,7 +122,7 @@
                 traceEventEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(x, %composer, %changed or 0b0001)
+                Test(x, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
@@ -156,7 +156,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Example(%composer, %changed or 0b0001)
+                Example(%composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/TargetAnnotationsTransformTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/TargetAnnotationsTransformTests.kt
index e438684..fa7fea9 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/TargetAnnotationsTransformTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/TargetAnnotationsTransformTests.kt
@@ -48,7 +48,7 @@
             %composer.skipToGroupEnd()
           }
           %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-            Test(%composer, %changed or 0b0001)
+            Test(%composer, updateChangedFlags(%changed or 0b0001))
           }
         }
         """
@@ -82,7 +82,7 @@
             %composer.skipToGroupEnd()
           }
           %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-            Test(%composer, %changed or 0b0001)
+            Test(%composer, updateChangedFlags(%changed or 0b0001))
           }
         }
         """
@@ -113,7 +113,7 @@
             %composer.skipToGroupEnd()
           }
           %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-            Test(%composer, %changed or 0b0001)
+            Test(%composer, updateChangedFlags(%changed or 0b0001))
           }
         }
         """
@@ -151,7 +151,7 @@
             %composer.skipToGroupEnd()
           }
           %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-            Test(content, %composer, %changed or 0b0001)
+            Test(content, %composer, updateChangedFlags(%changed or 0b0001))
           }
         }
         """
@@ -187,7 +187,7 @@
             %composer.skipToGroupEnd()
           }
           %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-            Test(content, %composer, %changed or 0b0001)
+            Test(content, %composer, updateChangedFlags(%changed or 0b0001))
           }
         }
         internal object ComposableSingletons%TestKt {
@@ -248,7 +248,7 @@
             %composer.skipToGroupEnd()
           }
           %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-            Test(content, %composer, %changed or 0b0001)
+            Test(content, %composer, updateChangedFlags(%changed or 0b0001))
           }
         }
         """
@@ -284,7 +284,7 @@
             %composer.skipToGroupEnd()
           }
           %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-            Test(%composer, %changed or 0b0001)
+            Test(%composer, updateChangedFlags(%changed or 0b0001))
           }
         }
         internal object ComposableSingletons%TestKt {
@@ -341,7 +341,7 @@
             %composer.skipToGroupEnd()
           }
           %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-            Test(%composer, %changed or 0b0001)
+            Test(%composer, updateChangedFlags(%changed or 0b0001))
           }
         }
         internal object ComposableSingletons%TestKt {
@@ -420,7 +420,7 @@
             %composer.skipToGroupEnd()
           }
           %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-            OpenCustom(content, %composer, %changed or 0b0001)
+            OpenCustom(content, %composer, updateChangedFlags(%changed or 0b0001))
           }
         }
         @Composable
@@ -445,7 +445,7 @@
             %composer.skipToGroupEnd()
           }
           %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-            ClosedCustom(content, %composer, %changed or 0b0001)
+            ClosedCustom(content, %composer, updateChangedFlags(%changed or 0b0001))
           }
         }
         @Composable
@@ -476,7 +476,7 @@
                 }
                 val tmp0_rcvr = <this>
                 %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                  tmp0_rcvr.call(%composer, %changed or 0b0001)
+                  tmp0_rcvr.call(%composer, updateChangedFlags(%changed or 0b0001))
                 }
               }
             }
@@ -500,7 +500,7 @@
                 }
                 val tmp0_rcvr = <this>
                 %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                  tmp0_rcvr.call(%composer, %changed or 0b0001)
+                  tmp0_rcvr.call(%composer, updateChangedFlags(%changed or 0b0001))
                 }
               }
             }
@@ -512,7 +512,7 @@
             %composer.skipToGroupEnd()
           }
           %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-            Test(%composer, %changed or 0b0001)
+            Test(%composer, updateChangedFlags(%changed or 0b0001))
           }
         }
         """
@@ -562,7 +562,7 @@
             %composer.skipToGroupEnd()
           }
           %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-            Test(content, %composer, %changed or 0b0001)
+            Test(content, %composer, updateChangedFlags(%changed or 0b0001))
           }
         }
         """
@@ -635,7 +635,7 @@
             %composer.skipToGroupEnd()
           }
           %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-            Leaf(%composer, %changed or 0b0001)
+            Leaf(%composer, updateChangedFlags(%changed or 0b0001))
           }
         }
         @Composable
@@ -659,7 +659,7 @@
             %composer.skipToGroupEnd()
           }
           %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-            Wrapper(content, %composer, %changed or 0b0001)
+            Wrapper(content, %composer, updateChangedFlags(%changed or 0b0001))
           }
         }
         @Composable
@@ -786,7 +786,7 @@
             %composer.skipToGroupEnd()
           }
           %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-            Optional(one, two, three, four, five, six, content, %composer, %changed or 0b0001, %default)
+            Optional(one, two, three, four, five, six, content, %composer, updateChangedFlags(%changed or 0b0001), %default)
           }
         }
         @Composable
@@ -806,7 +806,7 @@
             %composer.skipToGroupEnd()
           }
           %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-            UseOptional(%composer, %changed or 0b0001)
+            UseOptional(%composer, updateChangedFlags(%changed or 0b0001))
           }
         }
         internal object ComposableSingletons%TestKt {
@@ -1010,7 +1010,7 @@
             %composer.skipToGroupEnd()
           }
           %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-            Test1(%composer, %changed or 0b0001)
+            Test1(%composer, updateChangedFlags(%changed or 0b0001))
           }
         }
         @Composable
@@ -1039,7 +1039,7 @@
             %composer.skipToGroupEnd()
           }
           %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-            Test2(content, %composer, %changed or 0b0001)
+            Test2(content, %composer, updateChangedFlags(%changed or 0b0001))
           }
         }
         @Composable
@@ -1059,7 +1059,7 @@
             %composer.skipToGroupEnd()
           }
           %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-            Test3(%composer, %changed or 0b0001)
+            Test3(%composer, updateChangedFlags(%changed or 0b0001))
           }
         }
         @Composable
@@ -1081,7 +1081,7 @@
             %composer.skipToGroupEnd()
           }
           %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-            Test4(%composer, %changed or 0b0001)
+            Test4(%composer, updateChangedFlags(%changed or 0b0001))
           }
         }
         val Local: ProvidableCompositionLocal<Int> = compositionLocalOf {
@@ -1122,7 +1122,7 @@
             %composer.skipToGroupEnd()
           }
           %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-            Test5(content, %composer, %changed or 0b0001)
+            Test5(content, %composer, updateChangedFlags(%changed or 0b0001))
           }
         }
         @Composable
@@ -1160,7 +1160,7 @@
             %composer.skipToGroupEnd()
           }
           %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-            Test6(test, %composer, %changed or 0b0001)
+            Test6(test, %composer, updateChangedFlags(%changed or 0b0001))
           }
         }
         @Composable
@@ -1178,7 +1178,7 @@
             %composer.skipToGroupEnd()
           }
           %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-            T(value, %composer, %changed or 0b0001)
+            T(value, %composer, updateChangedFlags(%changed or 0b0001))
           }
         }
         """
@@ -1315,7 +1315,7 @@
             %composer.skipToGroupEnd()
           }
           %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-            Test(content, %composer, %changed or 0b0001)
+            Test(content, %composer, updateChangedFlags(%changed or 0b0001))
           }
         }
         """
@@ -1392,7 +1392,7 @@
             %composer.skipToGroupEnd()
           }
           %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-            Test(%composer, %changed or 0b0001)
+            Test(%composer, updateChangedFlags(%changed or 0b0001))
           }
         }
         """,
@@ -1440,7 +1440,7 @@
             %composer.skipToGroupEnd()
           }
           %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-            Test(decorator, %composer, %changed or 0b0001)
+            Test(decorator, %composer, updateChangedFlags(%changed or 0b0001))
           }
         }
         internal object ComposableSingletons%TestKt {
@@ -1497,7 +1497,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                NFromFile(%composer, %changed or 0b0001)
+                NFromFile(%composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             @Composable
@@ -1516,7 +1516,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                NFromInference(%composer, %changed or 0b0001)
+                NFromInference(%composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """,
@@ -1564,7 +1564,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                InferN(%composer, %changed or 0b0001)
+                InferN(%composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """,
@@ -1623,7 +1623,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                OpenTarget(%composer, %changed or 0b0001)
+                OpenTarget(%composer, updateChangedFlags(%changed or 0b0001))
               }
             }
             @StabilityInferred(parameters = 0)
@@ -1652,7 +1652,7 @@
                 }
                 val tmp0_rcvr = <this>
                 %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                  tmp0_rcvr.Compose(%composer, %changed or 0b0001)
+                  tmp0_rcvr.Compose(%composer, updateChangedFlags(%changed or 0b0001))
                 }
               }
               static val %stable: Int = 0
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/TraceInformationTest.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/TraceInformationTest.kt
index a186777..5eded68 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/TraceInformationTest.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/TraceInformationTest.kt
@@ -58,7 +58,7 @@
                 }
                 val tmp0_rcvr = <this>
                 %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                  tmp0_rcvr.B(x, %composer, %changed or 0b0001)
+                  tmp0_rcvr.B(x, %composer, updateChangedFlags(%changed or 0b0001))
                 }
               }
               static val %stable: Int = 0
@@ -79,7 +79,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                C(%composer, %changed or 0b0001)
+                C(%composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """,
@@ -137,7 +137,7 @@
                         traceEventEnd()
                       }
                       %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                        Test(condition, %composer, %changed or 0b0001)
+                        Test(condition, %composer, updateChangedFlags(%changed or 0b0001))
                       }
                       return
                     }
@@ -155,7 +155,7 @@
                 %composer.skipToGroupEnd()
               }
               %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
-                Test(condition, %composer, %changed or 0b0001)
+                Test(condition, %composer, updateChangedFlags(%changed or 0b0001))
               }
             }
         """,
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposeFqNames.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposeFqNames.kt
index ab4badc..b21e84c 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposeFqNames.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposeFqNames.kt
@@ -92,6 +92,7 @@
         topLevelCallableId(KtxNameConventions.SOURCEINFORMATIONMARKERSTART)
     val traceEventEnd = topLevelCallableId(KtxNameConventions.TRACE_EVENT_END)
     val traceEventStart = topLevelCallableId(KtxNameConventions.TRACE_EVENT_START)
+    val updateChangedFlags = topLevelCallableId(KtxNameConventions.UPDATE_CHANGED_FLAGS)
 }
 
 object ComposeFqNames {
@@ -123,7 +124,20 @@
     val StableMarker = fqNameFor("StableMarker")
     val Stable = fqNameFor("Stable")
     val Composer = ComposeClassIds.Composer.asSingleFqName()
+    val ComposeVersion = fqNameFor("ComposeVersion")
+    val Package = FqName(root)
     val StabilityInferred = ComposeClassIds.StabilityInferred.asSingleFqName()
+
+    fun makeComposableAnnotation(module: ModuleDescriptor): AnnotationDescriptor =
+        object : AnnotationDescriptor {
+            override val type: KotlinType
+                get() = module.findClassAcrossModuleDependencies(
+                    ClassId.topLevel(Composable)
+                )!!.defaultType
+            override val allValueArguments: Map<Name, ConstantValue<*>> get() = emptyMap()
+            override val source: SourceElement get() = SourceElement.NO_SOURCE
+            override fun toString() = "[@Composable]"
+        }
 }
 
 private fun makeComposableAnnotation(module: ModuleDescriptor): AnnotationDescriptor =
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/KtxNameConventions.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/KtxNameConventions.kt
index 573991c..35cbb05 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/KtxNameConventions.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/KtxNameConventions.kt
@@ -19,4 +19,5 @@
     val TRACE_EVENT_START = "traceEventStart"
     val TRACE_EVENT_END = "traceEventEnd"
     val SOURCEINFORMATIONMARKEREND = "sourceInformationMarkerEnd"
+    val UPDATE_CHANGED_FLAGS = "updateChangedFlags"
 }
\ No newline at end of file
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableFunctionBodyTransformer.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableFunctionBodyTransformer.kt
index 43327d5..ce9409c 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableFunctionBodyTransformer.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableFunctionBodyTransformer.kt
@@ -617,6 +617,15 @@
         getTopLevelFunction(ComposeCallableIds.sourceInformationMarkerStart).owner
     }
 
+    private val updateChangedFlagsFunction: IrSimpleFunction? by guardedLazy {
+        getTopLevelFunctionOrNull(
+            ComposeCallableIds.updateChangedFlags
+        )?.let {
+            val owner = it.owner
+            if (owner.valueParameters.size == 1) owner else null
+        }
+    }
+
     private val isTraceInProgressFunction by guardedLazy {
         getTopLevelFunctions(ComposeCallableIds.isTraceInProgress).singleOrNull {
             it.owner.valueParameters.isEmpty()
@@ -4292,14 +4301,22 @@
                 fn.putValueArgument(
                     startIndex + index,
                     if (index == 0) {
-                        irOr(irGet(param), irConst(if (lowBit) 0b1 else 0b0))
+                        irUpdateChangedFlags(irOr(irGet(param), irConst(if (lowBit) 0b1 else 0b0)))
                     } else {
-                        irGet(param)
+                        irUpdateChangedFlags(irGet(param))
                     }
                 )
             }
         }
 
+        private fun irUpdateChangedFlags(expression: IrExpression): IrExpression {
+            return updateChangedFlagsFunction?.let {
+                irCall(it).also {
+                    it.putValueArgument(0, expression)
+                }
+            } ?: expression
+        }
+
         override fun irShiftBits(fromSlot: Int, toSlot: Int): IrExpression {
             used = true
             val fromSlotAdjusted = fromSlot.rem(SLOTS_PER_INT)
diff --git a/compose/foundation/foundation/api/current.txt b/compose/foundation/foundation/api/current.txt
index 4fc8b33..d7dd537 100644
--- a/compose/foundation/foundation/api/current.txt
+++ b/compose/foundation/foundation/api/current.txt
@@ -203,7 +203,8 @@
   }
 
   public final class ForEachGestureKt {
-    method public static suspend Object? forEachGesture(androidx.compose.ui.input.pointer.PointerInputScope, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    method public static suspend Object? awaitEachGesture(androidx.compose.ui.input.pointer.PointerInputScope, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.AwaitPointerEventScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    method @Deprecated public static suspend Object? forEachGesture(androidx.compose.ui.input.pointer.PointerInputScope, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
   }
 
   public final class GestureCancellationException extends java.util.concurrent.CancellationException {
diff --git a/compose/foundation/foundation/api/public_plus_experimental_current.txt b/compose/foundation/foundation/api/public_plus_experimental_current.txt
index b514e7d..d23f77a 100644
--- a/compose/foundation/foundation/api/public_plus_experimental_current.txt
+++ b/compose/foundation/foundation/api/public_plus_experimental_current.txt
@@ -254,7 +254,8 @@
   }
 
   public final class ForEachGestureKt {
-    method public static suspend Object? forEachGesture(androidx.compose.ui.input.pointer.PointerInputScope, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    method public static suspend Object? awaitEachGesture(androidx.compose.ui.input.pointer.PointerInputScope, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.AwaitPointerEventScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    method @Deprecated public static suspend Object? forEachGesture(androidx.compose.ui.input.pointer.PointerInputScope, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
   }
 
   public final class GestureCancellationException extends java.util.concurrent.CancellationException {
diff --git a/compose/foundation/foundation/api/restricted_current.txt b/compose/foundation/foundation/api/restricted_current.txt
index 4fc8b33..d7dd537 100644
--- a/compose/foundation/foundation/api/restricted_current.txt
+++ b/compose/foundation/foundation/api/restricted_current.txt
@@ -203,7 +203,8 @@
   }
 
   public final class ForEachGestureKt {
-    method public static suspend Object? forEachGesture(androidx.compose.ui.input.pointer.PointerInputScope, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    method public static suspend Object? awaitEachGesture(androidx.compose.ui.input.pointer.PointerInputScope, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.AwaitPointerEventScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    method @Deprecated public static suspend Object? forEachGesture(androidx.compose.ui.input.pointer.PointerInputScope, kotlin.jvm.functions.Function2<? super androidx.compose.ui.input.pointer.PointerInputScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
   }
 
   public final class GestureCancellationException extends java.util.concurrent.CancellationException {
diff --git a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/SuspendingGesturesDemo.kt b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/SuspendingGesturesDemo.kt
index 786b6ed..183a7d9 100644
--- a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/SuspendingGesturesDemo.kt
+++ b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/SuspendingGesturesDemo.kt
@@ -21,11 +21,11 @@
 import androidx.compose.foundation.background
 import androidx.compose.foundation.border
 import androidx.compose.foundation.gestures.detectDragGestures
+import androidx.compose.foundation.gestures.awaitEachGesture
 import androidx.compose.foundation.gestures.detectHorizontalDragGestures
 import androidx.compose.foundation.gestures.detectTapGestures
 import androidx.compose.foundation.gestures.detectTransformGestures
 import androidx.compose.foundation.gestures.detectVerticalDragGestures
-import androidx.compose.foundation.gestures.forEachGesture
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.Row
@@ -461,19 +461,17 @@
     var pointerType by remember { mutableStateOf<PointerType?>(null) }
     Box(
         Modifier.pointerInput(Unit) {
-            forEachGesture {
-                awaitPointerEventScope {
-                    val pointer = awaitPointerEvent().changes.first()
-                    pointerType = pointer.type
-                    do {
-                        val event = awaitPointerEvent()
-                    } while (event.changes.first().pressed)
-                    pointerType = null
-                }
+            awaitEachGesture {
+                val pointer = awaitPointerEvent().changes.first()
+                pointerType = pointer.type
+                do {
+                    val event = awaitPointerEvent()
+                } while (event.changes.first().pressed)
+                pointerType = null
             }
         }
     ) {
         Text("Touch or click the area to see what type of input it is.")
         Text("PointerType: ${pointerType ?: ""}", Modifier.align(Alignment.BottomStart))
     }
-}
\ No newline at end of file
+}
diff --git a/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/DragGestureDetectorSamples.kt b/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/DragGestureDetectorSamples.kt
index 4ea4c6a..ed0b6f4 100644
--- a/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/DragGestureDetectorSamples.kt
+++ b/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/DragGestureDetectorSamples.kt
@@ -27,10 +27,10 @@
 import androidx.compose.foundation.gestures.awaitVerticalTouchSlopOrCancellation
 import androidx.compose.foundation.gestures.detectDragGestures
 import androidx.compose.foundation.gestures.detectDragGesturesAfterLongPress
+import androidx.compose.foundation.gestures.awaitEachGesture
 import androidx.compose.foundation.gestures.detectHorizontalDragGestures
 import androidx.compose.foundation.gestures.detectVerticalDragGestures
 import androidx.compose.foundation.gestures.drag
-import androidx.compose.foundation.gestures.forEachGesture
 import androidx.compose.foundation.gestures.horizontalDrag
 import androidx.compose.foundation.gestures.verticalDrag
 import androidx.compose.foundation.layout.Box
@@ -74,26 +74,24 @@
                 .width(50.dp)
                 .background(Color.Blue)
                 .pointerInput(Unit) {
-                    forEachGesture {
-                        awaitPointerEventScope {
-                            val down = awaitFirstDown()
-                            var change =
-                                awaitHorizontalTouchSlopOrCancellation(down.id) { change, over ->
-                                    val originalX = offsetX.value
-                                    val newValue =
-                                        (originalX + over).coerceIn(0f, width - 50.dp.toPx())
-                                    change.consume()
-                                    offsetX.value = newValue
-                                }
-                            while (change != null && change.pressed) {
-                                change = awaitHorizontalDragOrCancellation(change.id)
-                                if (change != null && change.pressed) {
-                                    val originalX = offsetX.value
-                                    val newValue = (originalX + change.positionChange().x)
-                                        .coerceIn(0f, width - 50.dp.toPx())
-                                    change.consume()
-                                    offsetX.value = newValue
-                                }
+                    awaitEachGesture {
+                        val down = awaitFirstDown()
+                        var change =
+                            awaitHorizontalTouchSlopOrCancellation(down.id) { change, over ->
+                                val originalX = offsetX.value
+                                val newValue =
+                                    (originalX + over).coerceIn(0f, width - 50.dp.toPx())
+                                change.consume()
+                                offsetX.value = newValue
+                            }
+                        while (change != null && change.pressed) {
+                            change = awaitHorizontalDragOrCancellation(change.id)
+                            if (change != null && change.pressed) {
+                                val originalX = offsetX.value
+                                val newValue = (originalX + change.positionChange().x)
+                                    .coerceIn(0f, width - 50.dp.toPx())
+                                change.consume()
+                                offsetX.value = newValue
                             }
                         }
                     }
@@ -118,25 +116,23 @@
                 .width(50.dp)
                 .background(Color.Blue)
                 .pointerInput(Unit) {
-                    forEachGesture {
-                        awaitPointerEventScope {
-                            val down = awaitFirstDown()
-                            val change =
-                                awaitHorizontalTouchSlopOrCancellation(down.id) { change, over ->
-                                    val originalX = offsetX.value
-                                    val newValue =
-                                        (originalX + over).coerceIn(0f, width - 50.dp.toPx())
-                                    change.consume()
-                                    offsetX.value = newValue
-                                }
-                            if (change != null) {
-                                horizontalDrag(change.id) {
-                                    val originalX = offsetX.value
-                                    val newValue = (originalX + it.positionChange().x)
-                                        .coerceIn(0f, width - 50.dp.toPx())
-                                    it.consume()
-                                    offsetX.value = newValue
-                                }
+                    awaitEachGesture {
+                        val down = awaitFirstDown()
+                        val change =
+                            awaitHorizontalTouchSlopOrCancellation(down.id) { change, over ->
+                                val originalX = offsetX.value
+                                val newValue =
+                                    (originalX + over).coerceIn(0f, width - 50.dp.toPx())
+                                change.consume()
+                                offsetX.value = newValue
+                            }
+                        if (change != null) {
+                            horizontalDrag(change.id) {
+                                val originalX = offsetX.value
+                                val newValue = (originalX + it.positionChange().x)
+                                    .coerceIn(0f, width - 50.dp.toPx())
+                                it.consume()
+                                offsetX.value = newValue
                             }
                         }
                     }
@@ -187,26 +183,24 @@
                 .height(50.dp)
                 .background(Color.Blue)
                 .pointerInput(Unit) {
-                    forEachGesture {
-                        awaitPointerEventScope {
-                            val down = awaitFirstDown()
-                            var change =
-                                awaitVerticalTouchSlopOrCancellation(down.id) { change, over ->
-                                    val originalY = offsetY.value
-                                    val newValue = (originalY + over)
-                                        .coerceIn(0f, height - 50.dp.toPx())
-                                    change.consume()
-                                    offsetY.value = newValue
-                                }
-                            while (change != null && change.pressed) {
-                                change = awaitVerticalDragOrCancellation(change.id)
-                                if (change != null && change.pressed) {
-                                    val originalY = offsetY.value
-                                    val newValue = (originalY + change.positionChange().y)
-                                        .coerceIn(0f, height - 50.dp.toPx())
-                                    change.consume()
-                                    offsetY.value = newValue
-                                }
+                    awaitEachGesture {
+                        val down = awaitFirstDown()
+                        var change =
+                            awaitVerticalTouchSlopOrCancellation(down.id) { change, over ->
+                                val originalY = offsetY.value
+                                val newValue = (originalY + over)
+                                    .coerceIn(0f, height - 50.dp.toPx())
+                                change.consume()
+                                offsetY.value = newValue
+                            }
+                        while (change != null && change.pressed) {
+                            change = awaitVerticalDragOrCancellation(change.id)
+                            if (change != null && change.pressed) {
+                                val originalY = offsetY.value
+                                val newValue = (originalY + change.positionChange().y)
+                                    .coerceIn(0f, height - 50.dp.toPx())
+                                change.consume()
+                                offsetY.value = newValue
                             }
                         }
                     }
@@ -231,25 +225,23 @@
                 .height(50.dp)
                 .background(Color.Blue)
                 .pointerInput(Unit) {
-                    forEachGesture {
-                        awaitPointerEventScope {
-                            val down = awaitFirstDown()
-                            val change =
-                                awaitVerticalTouchSlopOrCancellation(down.id) { change, over ->
-                                    val originalY = offsetY.value
-                                    val newValue = (originalY + over)
-                                        .coerceIn(0f, height - 50.dp.toPx())
-                                    change.consume()
-                                    offsetY.value = newValue
-                                }
-                            if (change != null) {
-                                verticalDrag(change.id) {
-                                    val originalY = offsetY.value
-                                    val newValue = (originalY + it.positionChange().y)
-                                        .coerceIn(0f, height - 50.dp.toPx())
-                                    it.consume()
-                                    offsetY.value = newValue
-                                }
+                    awaitEachGesture {
+                        val down = awaitFirstDown()
+                        val change =
+                            awaitVerticalTouchSlopOrCancellation(down.id) { change, over ->
+                                val originalY = offsetY.value
+                                val newValue = (originalY + over)
+                                    .coerceIn(0f, height - 50.dp.toPx())
+                                change.consume()
+                                offsetY.value = newValue
+                            }
+                        if (change != null) {
+                            verticalDrag(change.id) {
+                                val originalY = offsetY.value
+                                val newValue = (originalY + it.positionChange().y)
+                                    .coerceIn(0f, height - 50.dp.toPx())
+                                it.consume()
+                                offsetY.value = newValue
                             }
                         }
                     }
@@ -299,12 +291,24 @@
                 .size(50.dp)
                 .background(Color.Blue)
                 .pointerInput(Unit) {
-                    forEachGesture {
-                        awaitPointerEventScope {
-                            val down = awaitFirstDown()
-                            var change = awaitTouchSlopOrCancellation(down.id) { change, over ->
+                    awaitEachGesture {
+                        val down = awaitFirstDown()
+                        var change = awaitTouchSlopOrCancellation(down.id) { change, over ->
+                            val original = Offset(offsetX.value, offsetY.value)
+                            val summed = original + over
+                            val newValue = Offset(
+                                x = summed.x.coerceIn(0f, size.width - 50.dp.toPx()),
+                                y = summed.y.coerceIn(0f, size.height - 50.dp.toPx())
+                            )
+                            change.consume()
+                            offsetX.value = newValue.x
+                            offsetY.value = newValue.y
+                        }
+                        while (change != null && change.pressed) {
+                            change = awaitDragOrCancellation(change.id)
+                            if (change != null && change.pressed) {
                                 val original = Offset(offsetX.value, offsetY.value)
-                                val summed = original + over
+                                val summed = original + change.positionChange()
                                 val newValue = Offset(
                                     x = summed.x.coerceIn(0f, size.width - 50.dp.toPx()),
                                     y = summed.y.coerceIn(0f, size.height - 50.dp.toPx())
@@ -313,20 +317,6 @@
                                 offsetX.value = newValue.x
                                 offsetY.value = newValue.y
                             }
-                            while (change != null && change.pressed) {
-                                change = awaitDragOrCancellation(change.id)
-                                if (change != null && change.pressed) {
-                                    val original = Offset(offsetX.value, offsetY.value)
-                                    val summed = original + change.positionChange()
-                                    val newValue = Offset(
-                                        x = summed.x.coerceIn(0f, size.width - 50.dp.toPx()),
-                                        y = summed.y.coerceIn(0f, size.height - 50.dp.toPx())
-                                    )
-                                    change.consume()
-                                    offsetX.value = newValue.x
-                                    offsetY.value = newValue.y
-                                }
-                            }
                         }
                     }
                 }
@@ -349,33 +339,31 @@
                 .size(50.dp)
                 .background(Color.Blue)
                 .pointerInput(Unit) {
-                    forEachGesture {
-                        awaitPointerEventScope {
-                            val down = awaitFirstDown()
-                            val change = awaitTouchSlopOrCancellation(down.id) { change, over ->
+                    awaitEachGesture {
+                        val down = awaitFirstDown()
+                        val change = awaitTouchSlopOrCancellation(down.id) { change, over ->
+                            val original = Offset(offsetX.value, offsetY.value)
+                            val summed = original + over
+                            val newValue = Offset(
+                                x = summed.x.coerceIn(0f, size.width - 50.dp.toPx()),
+                                y = summed.y.coerceIn(0f, size.height - 50.dp.toPx())
+                            )
+                            change.consume()
+                            offsetX.value = newValue.x
+                            offsetY.value = newValue.y
+                        }
+                        if (change != null) {
+                            drag(change.id) {
                                 val original = Offset(offsetX.value, offsetY.value)
-                                val summed = original + over
+                                val summed = original + it.positionChange()
                                 val newValue = Offset(
                                     x = summed.x.coerceIn(0f, size.width - 50.dp.toPx()),
                                     y = summed.y.coerceIn(0f, size.height - 50.dp.toPx())
                                 )
-                                change.consume()
+                                it.consume()
                                 offsetX.value = newValue.x
                                 offsetY.value = newValue.y
                             }
-                            if (change != null) {
-                                drag(change.id) {
-                                    val original = Offset(offsetX.value, offsetY.value)
-                                    val summed = original + it.positionChange()
-                                    val newValue = Offset(
-                                        x = summed.x.coerceIn(0f, size.width - 50.dp.toPx()),
-                                        y = summed.y.coerceIn(0f, size.height - 50.dp.toPx())
-                                    )
-                                    it.consume()
-                                    offsetX.value = newValue.x
-                                    offsetY.value = newValue.y
-                                }
-                            }
                         }
                     }
                 }
diff --git a/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/TapGestureSamples.kt b/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/TapGestureSamples.kt
index 2e759f3..9255c67 100644
--- a/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/TapGestureSamples.kt
+++ b/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/TapGestureSamples.kt
@@ -22,7 +22,7 @@
 import androidx.compose.foundation.border
 import androidx.compose.foundation.gestures.awaitFirstDown
 import androidx.compose.foundation.gestures.awaitLongPressOrCancellation
-import androidx.compose.foundation.gestures.forEachGesture
+import androidx.compose.foundation.gestures.awaitEachGesture
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.fillMaxSize
@@ -56,12 +56,10 @@
                 .wrapContentSize(Alignment.Center)
                 .size(192.dp)
                 .pointerInput(Unit) {
-                    forEachGesture {
-                        awaitPointerEventScope {
-                            val down = awaitFirstDown(requireUnconsumed = false)
-                            awaitLongPressOrCancellation(down.id)?.let {
-                                count++
-                            }
+                    awaitEachGesture {
+                        val down = awaitFirstDown(requireUnconsumed = false)
+                        awaitLongPressOrCancellation(down.id)?.let {
+                            count++
                         }
                     }
                 }
diff --git a/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/TransformGestureSamples.kt b/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/TransformGestureSamples.kt
index 279d7ea..d4940a6 100644
--- a/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/TransformGestureSamples.kt
+++ b/compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/TransformGestureSamples.kt
@@ -24,8 +24,8 @@
 import androidx.compose.foundation.gestures.calculateRotation
 import androidx.compose.foundation.gestures.calculateZoom
 import androidx.compose.foundation.gestures.detectTransformGestures
-import androidx.compose.foundation.gestures.forEachGesture
 import androidx.compose.foundation.gestures.awaitFirstDown
+import androidx.compose.foundation.gestures.awaitEachGesture
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.offset
@@ -113,15 +113,13 @@
             .graphicsLayer(rotationZ = angle)
             .background(Color.Blue)
             .pointerInput(Unit) {
-                forEachGesture {
-                    awaitPointerEventScope {
-                        awaitFirstDown()
-                        do {
-                            val event = awaitPointerEvent()
-                            val rotation = event.calculateRotation()
-                            angle += rotation
-                        } while (event.changes.any { it.pressed })
-                    }
+                awaitEachGesture {
+                    awaitFirstDown()
+                    do {
+                        val event = awaitPointerEvent()
+                        val rotation = event.calculateRotation()
+                        angle += rotation
+                    } while (event.changes.any { it.pressed })
                 }
             }
             .fillMaxSize()
@@ -137,14 +135,12 @@
             .graphicsLayer(scaleX = zoom, scaleY = zoom)
             .background(Color.Blue)
             .pointerInput(Unit) {
-                forEachGesture {
-                    awaitPointerEventScope {
-                        awaitFirstDown()
-                        do {
-                            val event = awaitPointerEvent()
-                            zoom *= event.calculateZoom()
-                        } while (event.changes.any { it.pressed })
-                    }
+                awaitEachGesture {
+                    awaitFirstDown()
+                    do {
+                        val event = awaitPointerEvent()
+                        zoom *= event.calculateZoom()
+                    } while (event.changes.any { it.pressed })
                 }
             }
             .fillMaxSize()
@@ -162,16 +158,14 @@
             .graphicsLayer()
             .background(Color.Blue)
             .pointerInput(Unit) {
-                forEachGesture {
-                    awaitPointerEventScope {
-                        awaitFirstDown()
-                        do {
-                            val event = awaitPointerEvent()
-                            val offset = event.calculatePan()
-                            offsetX.value += offset.x
-                            offsetY.value += offset.y
-                        } while (event.changes.any { it.pressed })
-                    }
+                awaitEachGesture {
+                    awaitFirstDown()
+                    do {
+                        val event = awaitPointerEvent()
+                        val offset = event.calculatePan()
+                        offsetX.value += offset.x
+                        offsetY.value += offset.y
+                    } while (event.changes.any { it.pressed })
                 }
             }
             .fillMaxSize()
@@ -190,23 +184,21 @@
                 drawCircle(Color.Blue, centroidSize, center = position)
             }
             .pointerInput(Unit) {
-                forEachGesture {
-                    awaitPointerEventScope {
-                        awaitFirstDown().also {
-                            position = it.position
-                        }
-                        do {
-                            val event = awaitPointerEvent()
-                            val size = event.calculateCentroidSize()
-                            if (size != 0f) {
-                                centroidSize = event.calculateCentroidSize()
-                            }
-                            val centroid = event.calculateCentroid()
-                            if (centroid != Offset.Unspecified) {
-                                position = centroid
-                            }
-                        } while (event.changes.any { it.pressed })
+                awaitEachGesture {
+                    awaitFirstDown().also {
+                        position = it.position
                     }
+                    do {
+                        val event = awaitPointerEvent()
+                        val size = event.calculateCentroidSize()
+                        if (size != 0f) {
+                            centroidSize = event.calculateCentroidSize()
+                        }
+                        val centroid = event.calculateCentroid()
+                        if (centroid != Offset.Unspecified) {
+                            position = centroid
+                        }
+                    } while (event.changes.any { it.pressed })
                 }
             }
             .fillMaxSize()
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/gesture/AwaitEachGestureTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/gesture/AwaitEachGestureTest.kt
new file mode 100644
index 0000000..ef7040b
--- /dev/null
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/gesture/AwaitEachGestureTest.kt
@@ -0,0 +1,114 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.compose.foundation.gesture
+
+import androidx.compose.foundation.gestures.awaitEachGesture
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.size
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.input.pointer.PointerEventType
+import androidx.compose.ui.input.pointer.pointerInput
+import androidx.compose.ui.platform.testTag
+import androidx.compose.ui.test.junit4.createComposeRule
+import androidx.compose.ui.test.onNodeWithTag
+import androidx.compose.ui.test.performTouchInput
+import androidx.compose.ui.unit.dp
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.MediumTest
+import com.google.common.truth.Truth.assertThat
+import com.google.common.truth.Truth.assertWithMessage
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
+import kotlinx.coroutines.CancellationException
+import kotlinx.coroutines.cancel
+import kotlinx.coroutines.coroutineScope
+
+@MediumTest
+@RunWith(AndroidJUnit4::class)
+class AwaitEachGestureTest {
+    @get:Rule
+    val rule = createComposeRule()
+
+    @Test
+    fun awaitEachGestureInternalCancellation() {
+        val inputLatch = CountDownLatch(1)
+        rule.setContent {
+            Box(
+                Modifier.pointerInput(Unit) {
+                    try {
+                        var count = 0
+                        coroutineScope {
+                            awaitEachGesture {
+                                when (count++) {
+                                    0 -> Unit // continue
+                                    1 -> throw CancellationException("internal exception")
+                                    else -> {
+                                        // detectGestures will loop infinitely with nothing in the
+                                        // middle so wait for cancellation
+                                        cancel("really canceled")
+                                    }
+                                }
+                            }
+                        }
+                    } catch (cancellationException: CancellationException) {
+                        assertWithMessage("The internal exception shouldn't cancel detectGestures")
+                            .that(cancellationException.message)
+                            .isEqualTo("really canceled")
+                    }
+                    inputLatch.countDown()
+                }.size(10.dp)
+            )
+        }
+        rule.waitForIdle()
+        assertThat(inputLatch.await(1, TimeUnit.SECONDS)).isTrue()
+    }
+
+    @Test
+    fun awaitEachGestureLoops() {
+        val events = mutableListOf<PointerEventType>()
+        val tag = "input rect"
+        rule.setContent {
+            Box(
+                Modifier.fillMaxSize()
+                    .testTag(tag)
+                    .pointerInput(Unit) {
+                        awaitEachGesture {
+                            val event = awaitPointerEvent()
+                            events += event.type
+                        }
+                    }
+            )
+        }
+
+        rule.onNodeWithTag(tag).performTouchInput {
+            down(Offset.Zero)
+            moveBy(Offset(10f, 10f))
+            up()
+            down(Offset(3f, 3f))
+            moveBy(Offset(10f, 10f))
+            moveBy(Offset(1f, 1f))
+            up()
+        }
+        assertThat(events).hasSize(2)
+        assertThat(events).containsExactly(PointerEventType.Press, PointerEventType.Press)
+    }
+}
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/gesture/AwaitTouchEventTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/gesture/AwaitTouchEventTest.kt
index 52d0430..591e968 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/gesture/AwaitTouchEventTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/gesture/AwaitTouchEventTest.kt
@@ -18,7 +18,7 @@
 
 import androidx.compose.foundation.gestures.awaitFirstDown
 import androidx.compose.foundation.gestures.awaitLongPressOrCancellation
-import androidx.compose.foundation.gestures.forEachGesture
+import androidx.compose.foundation.gestures.awaitEachGesture
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.text.BasicText
 import androidx.compose.ui.Modifier
@@ -73,12 +73,10 @@
                     modifier = Modifier
                         .testTag("myLongPress")
                         .pointerInput(Unit) {
-                            forEachGesture {
-                                awaitPointerEventScope {
-                                    val down = awaitFirstDown(requireUnconsumed = false)
-                                    awaitLongPressOrCancellation(down.id)?.let {
-                                        counter++
-                                    }
+                            awaitEachGesture {
+                                val down = awaitFirstDown(requireUnconsumed = false)
+                                awaitLongPressOrCancellation(down.id)?.let {
+                                    counter++
                                 }
                             }
                         }
@@ -111,12 +109,10 @@
                     modifier = Modifier
                         .testTag("myLongPress")
                         .pointerInput(Unit) {
-                            forEachGesture {
-                                awaitPointerEventScope {
-                                    val down = awaitFirstDown(requireUnconsumed = false)
-                                    awaitLongPressOrCancellation(down.id)?.let {
-                                        counter++
-                                    }
+                            awaitEachGesture {
+                                val down = awaitFirstDown(requireUnconsumed = false)
+                                awaitLongPressOrCancellation(down.id)?.let {
+                                    counter++
                                 }
                             }
                         }
@@ -149,12 +145,10 @@
                     modifier = Modifier
                         .testTag("myLongPress")
                         .pointerInput(Unit) {
-                            forEachGesture {
-                                awaitPointerEventScope {
-                                    val down = awaitFirstDown(requireUnconsumed = false)
-                                    awaitLongPressOrCancellation(down.id)?.let {
-                                        counter++
-                                    }
+                            awaitEachGesture {
+                                val down = awaitFirstDown(requireUnconsumed = false)
+                                awaitLongPressOrCancellation(down.id)?.let {
+                                    counter++
                                 }
                             }
                         }
@@ -197,12 +191,10 @@
                     modifier = Modifier
                         .testTag("myLongPress")
                         .pointerInput(Unit) {
-                            forEachGesture {
-                                awaitPointerEventScope {
-                                    val down = awaitFirstDown(requireUnconsumed = false)
-                                    awaitLongPressOrCancellation(down.id)?.let {
-                                        counter++
-                                    }
+                            awaitEachGesture {
+                                val down = awaitFirstDown(requireUnconsumed = false)
+                                awaitLongPressOrCancellation(down.id)?.let {
+                                    counter++
                                 }
                             }
                         }
@@ -245,12 +237,10 @@
                     modifier = Modifier
                         .testTag("myLongPress")
                         .pointerInput(Unit) {
-                            forEachGesture {
-                                awaitPointerEventScope {
-                                    val down = awaitFirstDown(requireUnconsumed = false)
-                                    awaitLongPressOrCancellation(down.id)?.let {
-                                        counter++
-                                    }
+                            awaitEachGesture {
+                                val down = awaitFirstDown(requireUnconsumed = false)
+                                awaitLongPressOrCancellation(down.id)?.let {
+                                    counter++
                                 }
                             }
                         }
@@ -301,12 +291,10 @@
                     modifier = Modifier
                         .testTag("myLongPress")
                         .pointerInput(Unit) {
-                            forEachGesture {
-                                awaitPointerEventScope {
-                                    val down = awaitFirstDown(requireUnconsumed = false)
-                                    awaitLongPressOrCancellation(down.id)?.let {
-                                        counter++
-                                    }
+                            awaitEachGesture {
+                                val down = awaitFirstDown(requireUnconsumed = false)
+                                awaitLongPressOrCancellation(down.id)?.let {
+                                    counter++
                                 }
                             }
                         }
@@ -358,12 +346,10 @@
                     modifier = Modifier
                         .testTag("myLongPress")
                         .pointerInput(Unit) {
-                            forEachGesture {
-                                awaitPointerEventScope {
-                                    val down = awaitFirstDown(requireUnconsumed = false)
-                                    awaitLongPressOrCancellation(down.id)?.let {
-                                        counter++
-                                    }
+                            awaitEachGesture {
+                                val down = awaitFirstDown(requireUnconsumed = false)
+                                awaitLongPressOrCancellation(down.id)?.let {
+                                    counter++
                                 }
                             }
                         }
@@ -406,13 +392,11 @@
                 modifier = Modifier
                     .testTag("MyLongPressParent")
                     .pointerInput(Unit) {
-                        forEachGesture() {
-                            awaitPointerEventScope {
-                                while (true) {
-                                    val event = awaitPointerEvent(PointerEventPass.Final)
-                                    if (event.type == PointerEventType.Move) {
-                                        event.changes[0].consume()
-                                    }
+                        awaitEachGesture {
+                            while (true) {
+                                val event = awaitPointerEvent(PointerEventPass.Final)
+                                if (event.type == PointerEventType.Move) {
+                                    event.changes[0].consume()
                                 }
                             }
                         }
@@ -423,12 +407,10 @@
                     modifier = Modifier
                         .testTag("myLongPress")
                         .pointerInput(Unit) {
-                            forEachGesture {
-                                awaitPointerEventScope {
-                                    val down = awaitFirstDown(requireUnconsumed = false)
-                                    awaitLongPressOrCancellation(down.id)?.let {
-                                        counter++
-                                    }
+                            awaitEachGesture {
+                                val down = awaitFirstDown(requireUnconsumed = false)
+                                awaitLongPressOrCancellation(down.id)?.let {
+                                    counter++
                                 }
                             }
                         }
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/gesture/ForEachGestureTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/gesture/ForEachGestureTest.kt
index 123be5e..2fcb00d 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/gesture/ForEachGestureTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/gesture/ForEachGestureTest.kt
@@ -38,6 +38,7 @@
 import kotlinx.coroutines.coroutineScope
 import kotlinx.coroutines.launch
 
+@Suppress("DEPRECATION")
 @MediumTest
 @RunWith(AndroidJUnit4::class)
 class ForEachGestureTest {
diff --git a/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/AndroidOverscroll.kt b/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/AndroidOverscroll.kt
index cf212ef..32047cf 100644
--- a/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/AndroidOverscroll.kt
+++ b/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/AndroidOverscroll.kt
@@ -25,7 +25,7 @@
 import androidx.compose.foundation.EdgeEffectCompat.onPullDistanceCompat
 import androidx.compose.foundation.EdgeEffectCompat.onReleaseWithOppositeDelta
 import androidx.compose.foundation.gestures.awaitFirstDown
-import androidx.compose.foundation.gestures.forEachGesture
+import androidx.compose.foundation.gestures.awaitEachGesture
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.neverEqualPolicy
@@ -319,27 +319,25 @@
     override val effectModifier: Modifier = Modifier
         .then(StretchOverscrollNonClippingLayer)
         .pointerInput(Unit) {
-            forEachGesture {
-                awaitPointerEventScope {
-                    val down = awaitFirstDown(requireUnconsumed = false)
-                    pointerId = down.id
-                    pointerPosition = down.position
-                    do {
-                        val pressedChanges = awaitPointerEvent().changes.fastFilter { it.pressed }
-                        // If the same ID we are already tracking is down, use that. Otherwise, use
-                        // the next down, to move the overscroll to the next pointer.
-                        val change = pressedChanges
-                            .fastFirstOrNull { it.id == pointerId } ?: pressedChanges.firstOrNull()
-                        if (change != null) {
-                            // Update the id if we are now tracking a new down
-                            pointerId = change.id
-                            pointerPosition = change.position
-                        }
-                    } while (pressedChanges.isNotEmpty())
-                    pointerId = null
-                    // Explicitly not resetting the pointer position until the next down, so we
-                    // don't change any existing effects
-                }
+            awaitEachGesture {
+                val down = awaitFirstDown(requireUnconsumed = false)
+                pointerId = down.id
+                pointerPosition = down.position
+                do {
+                    val pressedChanges = awaitPointerEvent().changes.fastFilter { it.pressed }
+                    // If the same ID we are already tracking is down, use that. Otherwise, use
+                    // the next down, to move the overscroll to the next pointer.
+                    val change = pressedChanges
+                        .fastFirstOrNull { it.id == pointerId } ?: pressedChanges.firstOrNull()
+                    if (change != null) {
+                        // Update the id if we are now tracking a new down
+                        pointerId = change.id
+                        pointerPosition = change.position
+                    }
+                } while (pressedChanges.isNotEmpty())
+                pointerId = null
+                // Explicitly not resetting the pointer position until the next down, so we
+                // don't change any existing effects
             }
         }
         .onSizeChanged(onNewSize)
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/DragGestureDetector.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/DragGestureDetector.kt
index fb26f90..7aed630 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/DragGestureDetector.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/DragGestureDetector.kt
@@ -172,34 +172,32 @@
     onDragCancel: () -> Unit = { },
     onDrag: (change: PointerInputChange, dragAmount: Offset) -> Unit
 ) {
-    forEachGesture {
-        awaitPointerEventScope {
-            val down = awaitFirstDown(requireUnconsumed = false)
-            var drag: PointerInputChange?
-            var overSlop = Offset.Zero
-            do {
-                drag = awaitPointerSlopOrCancellation(
-                    down.id,
-                    down.type,
-                    triggerOnMainAxisSlop = false
-                ) { change, over ->
-                    change.consume()
-                    overSlop = over
+    awaitEachGesture {
+        val down = awaitFirstDown(requireUnconsumed = false)
+        var drag: PointerInputChange?
+        var overSlop = Offset.Zero
+        do {
+            drag = awaitPointerSlopOrCancellation(
+                down.id,
+                down.type,
+                triggerOnMainAxisSlop = false
+            ) { change, over ->
+                change.consume()
+                overSlop = over
+            }
+        } while (drag != null && !drag.isConsumed)
+        if (drag != null) {
+            onDragStart.invoke(drag.position)
+            onDrag(drag, overSlop)
+            if (
+                !drag(drag.id) {
+                    onDrag(it, it.positionChange())
+                    it.consume()
                 }
-            } while (drag != null && !drag.isConsumed)
-            if (drag != null) {
-                onDragStart.invoke(drag.position)
-                onDrag(drag, overSlop)
-                if (
-                    !drag(drag.id) {
-                        onDrag(it, it.positionChange())
-                        it.consume()
-                    }
-                ) {
-                    onDragCancel()
-                } else {
-                    onDragEnd()
-                }
+            ) {
+                onDragCancel()
+            } else {
+                onDragEnd()
             }
         }
     }
@@ -232,28 +230,26 @@
     onDragCancel: () -> Unit = { },
     onDrag: (change: PointerInputChange, dragAmount: Offset) -> Unit
 ) {
-    forEachGesture {
+    awaitEachGesture {
         try {
-            awaitPointerEventScope {
-                val down = awaitFirstDown(requireUnconsumed = false)
-                val drag = awaitLongPressOrCancellation(down.id)
-                if (drag != null) {
-                    onDragStart.invoke(drag.position)
+            val down = awaitFirstDown(requireUnconsumed = false)
+            val drag = awaitLongPressOrCancellation(down.id)
+            if (drag != null) {
+                onDragStart.invoke(drag.position)
 
-                    if (
-                        drag(drag.id) {
-                            onDrag(it, it.positionChange())
-                            it.consume()
-                        }
-                    ) {
-                        // consume up if we quit drag gracefully with the up
-                        currentEvent.changes.fastForEach {
-                            if (it.changedToUp()) it.consume()
-                        }
-                        onDragEnd()
-                    } else {
-                        onDragCancel()
+                if (
+                    drag(drag.id) {
+                        onDrag(it, it.positionChange())
+                        it.consume()
                     }
+                ) {
+                    // consume up if we quit drag gracefully with the up
+                    currentEvent.changes.fastForEach {
+                        if (it.changedToUp()) it.consume()
+                    }
+                    onDragEnd()
+                } else {
+                    onDragCancel()
                 }
             }
         } catch (c: CancellationException) {
@@ -391,27 +387,25 @@
     onDragCancel: () -> Unit = { },
     onVerticalDrag: (change: PointerInputChange, dragAmount: Float) -> Unit
 ) {
-    forEachGesture {
-        awaitPointerEventScope {
-            val down = awaitFirstDown(requireUnconsumed = false)
-            var overSlop = 0f
-            val drag = awaitVerticalPointerSlopOrCancellation(down.id, down.type) { change, over ->
-                change.consume()
-                overSlop = over
-            }
-            if (drag != null) {
-                onDragStart.invoke(drag.position)
-                onVerticalDrag.invoke(drag, overSlop)
-                if (
-                    verticalDrag(drag.id) {
-                        onVerticalDrag(it, it.positionChange().y)
-                        it.consume()
-                    }
-                ) {
-                    onDragEnd()
-                } else {
-                    onDragCancel()
+    awaitEachGesture {
+        val down = awaitFirstDown(requireUnconsumed = false)
+        var overSlop = 0f
+        val drag = awaitVerticalPointerSlopOrCancellation(down.id, down.type) { change, over ->
+            change.consume()
+            overSlop = over
+        }
+        if (drag != null) {
+            onDragStart.invoke(drag.position)
+            onVerticalDrag.invoke(drag, overSlop)
+            if (
+                verticalDrag(drag.id) {
+                    onVerticalDrag(it, it.positionChange().y)
+                    it.consume()
                 }
+            ) {
+                onDragEnd()
+            } else {
+                onDragCancel()
             }
         }
     }
@@ -541,30 +535,28 @@
     onDragCancel: () -> Unit = { },
     onHorizontalDrag: (change: PointerInputChange, dragAmount: Float) -> Unit
 ) {
-    forEachGesture {
-        awaitPointerEventScope {
-            val down = awaitFirstDown(requireUnconsumed = false)
-            var overSlop = 0f
-            val drag = awaitHorizontalPointerSlopOrCancellation(
-                down.id,
-                down.type
-            ) { change, over ->
-                change.consume()
-                overSlop = over
-            }
-            if (drag != null) {
-                onDragStart.invoke(drag.position)
-                onHorizontalDrag(drag, overSlop)
-                if (
-                    horizontalDrag(drag.id) {
-                        onHorizontalDrag(it, it.positionChange().x)
-                        it.consume()
-                    }
-                ) {
-                    onDragEnd()
-                } else {
-                    onDragCancel()
+    awaitEachGesture {
+        val down = awaitFirstDown(requireUnconsumed = false)
+        var overSlop = 0f
+        val drag = awaitHorizontalPointerSlopOrCancellation(
+            down.id,
+            down.type
+        ) { change, over ->
+            change.consume()
+            overSlop = over
+        }
+        if (drag != null) {
+            onDragStart.invoke(drag.position)
+            onHorizontalDrag(drag, overSlop)
+            if (
+                horizontalDrag(drag.id) {
+                    onHorizontalDrag(it, it.positionChange().x)
+                    it.consume()
                 }
+            ) {
+                onDragEnd()
+            } else {
+                onDragCancel()
             }
         }
     }
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/ForEachGesture.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/ForEachGesture.kt
index c13e405..4901cab 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/ForEachGesture.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/ForEachGesture.kt
@@ -33,7 +33,14 @@
  * Repeatedly calls [block] to handle gestures. If there is a [CancellationException],
  * it will wait until all pointers are raised before another gesture is detected, or it
  * exits if [isActive] is `false`.
+ *
+ * [awaitEachGesture] does the same thing without the possibility of missing events between
+ * gestures, but also lacks the ability to call arbitrary suspending functions within [block].
  */
+@Deprecated(
+    message = "Use awaitEachGesture instead. forEachGesture() can drop events between gestures.",
+    replaceWith = ReplaceWith("awaitEachGesture(block)")
+)
 suspend fun PointerInputScope.forEachGesture(block: suspend PointerInputScope.() -> Unit) {
     val currentContext = currentCoroutineContext()
     while (currentContext.isActive) {
@@ -79,4 +86,36 @@
             val events = awaitPointerEvent(PointerEventPass.Final)
         } while (events.changes.fastAny { it.pressed })
     }
+}
+
+/**
+ * Repeatedly calls [block] to handle gestures. If there is a [CancellationException],
+ * it will wait until all pointers are raised before another gesture is detected, or it
+ * exits if [isActive] is `false`.
+ *
+ * [block] is run within [PointerInputScope.awaitPointerEventScope] and will loop entirely
+ * within the [AwaitPointerEventScope] so events will not be lost between gestures.
+ */
+suspend fun PointerInputScope.awaitEachGesture(block: suspend AwaitPointerEventScope.() -> Unit) {
+    val currentContext = currentCoroutineContext()
+    awaitPointerEventScope {
+        while (currentContext.isActive) {
+            try {
+                block()
+
+                // Wait for all pointers to be up. Gestures start when a finger goes down.
+                awaitAllPointersUp()
+            } catch (e: CancellationException) {
+                if (currentContext.isActive) {
+                    // The current gesture was canceled. Wait for all fingers to be "up" before
+                    // looping again.
+                    awaitAllPointersUp()
+                } else {
+                    // detectGesture was cancelled externally. Rethrow the cancellation exception to
+                    // propagate it upwards.
+                    throw e
+                }
+            }
+        }
+    }
 }
\ No newline at end of file
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/TapGestureDetector.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/TapGestureDetector.kt
index b0158ed..13695ce 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/TapGestureDetector.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/TapGestureDetector.kt
@@ -96,73 +96,87 @@
     // cancel/up events as we're only require down events
     val pressScope = PressGestureScopeImpl(this@detectTapGestures)
 
-    forEachGesture {
-        awaitPointerEventScope {
-            val down = awaitFirstDown()
-            down.consume()
+    awaitEachGesture {
+        val down = awaitFirstDown()
+        down.consume()
+        launch {
             pressScope.reset()
-            if (onPress !== NoPressGesture) launch {
-                pressScope.onPress(down.position)
+        }
+        if (onPress !== NoPressGesture) launch {
+            pressScope.onPress(down.position)
+        }
+        val longPressTimeout = onLongPress?.let {
+            viewConfiguration.longPressTimeoutMillis
+        } ?: (Long.MAX_VALUE / 2)
+        var upOrCancel: PointerInputChange? = null
+        try {
+            // wait for first tap up or long press
+            upOrCancel = withTimeout(longPressTimeout) {
+                waitForUpOrCancellation()
             }
-            val longPressTimeout = onLongPress?.let {
-                viewConfiguration.longPressTimeoutMillis
-            } ?: (Long.MAX_VALUE / 2)
-            var upOrCancel: PointerInputChange? = null
-            try {
-                // wait for first tap up or long press
-                upOrCancel = withTimeout(longPressTimeout) {
-                    waitForUpOrCancellation()
-                }
-                if (upOrCancel == null) {
+            if (upOrCancel == null) {
+                launch {
                     pressScope.cancel() // tap-up was canceled
-                } else {
-                    upOrCancel.consume()
+                }
+            } else {
+                upOrCancel.consume()
+                launch {
                     pressScope.release()
                 }
-            } catch (_: PointerEventTimeoutCancellationException) {
-                onLongPress?.invoke(down.position)
-                consumeUntilUp()
+            }
+        } catch (_: PointerEventTimeoutCancellationException) {
+            onLongPress?.invoke(down.position)
+            consumeUntilUp()
+            launch {
                 pressScope.release()
             }
+        }
 
-            if (upOrCancel != null) {
-                // tap was successful.
-                if (onDoubleTap == null) {
-                    onTap?.invoke(upOrCancel.position) // no need to check for double-tap.
+        if (upOrCancel != null) {
+            // tap was successful.
+            if (onDoubleTap == null) {
+                onTap?.invoke(upOrCancel.position) // no need to check for double-tap.
+            } else {
+                // check for second tap
+                val secondDown = awaitSecondDown(upOrCancel)
+
+                if (secondDown == null) {
+                    onTap?.invoke(upOrCancel.position) // no valid second tap started
                 } else {
-                    // check for second tap
-                    val secondDown = awaitSecondDown(upOrCancel)
-
-                    if (secondDown == null) {
-                        onTap?.invoke(upOrCancel.position) // no valid second tap started
-                    } else {
-                        // Second tap down detected
+                    // Second tap down detected
+                    launch {
                         pressScope.reset()
-                        if (onPress !== NoPressGesture) {
-                            launch { pressScope.onPress(secondDown.position) }
-                        }
+                    }
+                    if (onPress !== NoPressGesture) {
+                        launch { pressScope.onPress(secondDown.position) }
+                    }
 
-                        try {
-                            // Might have a long second press as the second tap
-                            withTimeout(longPressTimeout) {
-                                val secondUp = waitForUpOrCancellation()
-                                if (secondUp != null) {
-                                    secondUp.consume()
+                    try {
+                        // Might have a long second press as the second tap
+                        withTimeout(longPressTimeout) {
+                            val secondUp = waitForUpOrCancellation()
+                            if (secondUp != null) {
+                                secondUp.consume()
+                                launch {
                                     pressScope.release()
-                                    onDoubleTap(secondUp.position)
-                                } else {
-                                    pressScope.cancel()
-                                    onTap?.invoke(upOrCancel.position)
                                 }
+                                onDoubleTap(secondUp.position)
+                            } else {
+                                launch {
+                                    pressScope.cancel()
+                                }
+                                onTap?.invoke(upOrCancel.position)
                             }
-                        } catch (e: PointerEventTimeoutCancellationException) {
-                            // The first tap was valid, but the second tap is a long press.
-                            // notify for the first tap
-                            onTap?.invoke(upOrCancel.position)
+                        }
+                    } catch (e: PointerEventTimeoutCancellationException) {
+                        // The first tap was valid, but the second tap is a long press.
+                        // notify for the first tap
+                        onTap?.invoke(upOrCancel.position)
 
-                            // notify for the long press
-                            onLongPress?.invoke(secondDown.position)
-                            consumeUntilUp()
+                        // notify for the long press
+                        onLongPress?.invoke(secondDown.position)
+                        consumeUntilUp()
+                        launch {
                             pressScope.release()
                         }
                     }
@@ -214,25 +228,31 @@
     onTap: ((Offset) -> Unit)? = null
 ) {
     val pressScope = PressGestureScopeImpl(this)
-    forEachGesture {
-        coroutineScope {
-            pressScope.reset()
-            awaitPointerEventScope {
+    coroutineScope {
+        awaitEachGesture {
+            launch {
+                pressScope.reset()
+            }
 
-                val down = awaitFirstDown().also { it.consume() }
+            val down = awaitFirstDown().also { it.consume() }
 
-                if (onPress !== NoPressGesture) {
-                    launch { pressScope.onPress(down.position) }
+            if (onPress !== NoPressGesture) {
+                launch {
+                    pressScope.onPress(down.position)
                 }
+            }
 
-                val up = waitForUpOrCancellation()
-                if (up == null) {
+            val up = waitForUpOrCancellation()
+            if (up == null) {
+                launch {
                     pressScope.cancel() // tap-up was canceled
-                } else {
-                    up.consume()
-                    pressScope.release()
-                    onTap?.invoke(up.position)
                 }
+            } else {
+                up.consume()
+                launch {
+                    pressScope.release()
+                }
+                onTap?.invoke(up.position)
             }
         }
     }
@@ -322,8 +342,8 @@
     /**
      * Called when a new gesture has started.
      */
-    fun reset() {
-        mutex.tryLock() // If tryAwaitRelease wasn't called, this will be unlocked.
+    suspend fun reset() {
+        mutex.lock()
         isReleased = false
         isCanceled = false
     }
@@ -337,7 +357,8 @@
     override suspend fun tryAwaitRelease(): Boolean {
         if (!isReleased && !isCanceled) {
             mutex.lock()
+            mutex.unlock()
         }
         return isReleased
     }
-}
\ No newline at end of file
+}
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/TransformGestureDetector.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/TransformGestureDetector.kt
index 4213b98..8d8c460 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/TransformGestureDetector.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/TransformGestureDetector.kt
@@ -48,61 +48,59 @@
     panZoomLock: Boolean = false,
     onGesture: (centroid: Offset, pan: Offset, zoom: Float, rotation: Float) -> Unit
 ) {
-    forEachGesture {
-        awaitPointerEventScope {
-            var rotation = 0f
-            var zoom = 1f
-            var pan = Offset.Zero
-            var pastTouchSlop = false
-            val touchSlop = viewConfiguration.touchSlop
-            var lockedToPanZoom = false
+    awaitEachGesture {
+        var rotation = 0f
+        var zoom = 1f
+        var pan = Offset.Zero
+        var pastTouchSlop = false
+        val touchSlop = viewConfiguration.touchSlop
+        var lockedToPanZoom = false
 
-            awaitFirstDown(requireUnconsumed = false)
-            do {
-                val event = awaitPointerEvent()
-                val canceled = event.changes.fastAny { it.isConsumed }
-                if (!canceled) {
-                    val zoomChange = event.calculateZoom()
-                    val rotationChange = event.calculateRotation()
-                    val panChange = event.calculatePan()
+        awaitFirstDown(requireUnconsumed = false)
+        do {
+            val event = awaitPointerEvent()
+            val canceled = event.changes.fastAny { it.isConsumed }
+            if (!canceled) {
+                val zoomChange = event.calculateZoom()
+                val rotationChange = event.calculateRotation()
+                val panChange = event.calculatePan()
 
-                    if (!pastTouchSlop) {
-                        zoom *= zoomChange
-                        rotation += rotationChange
-                        pan += panChange
+                if (!pastTouchSlop) {
+                    zoom *= zoomChange
+                    rotation += rotationChange
+                    pan += panChange
 
-                        val centroidSize = event.calculateCentroidSize(useCurrent = false)
-                        val zoomMotion = abs(1 - zoom) * centroidSize
-                        val rotationMotion = abs(rotation * PI.toFloat() * centroidSize / 180f)
-                        val panMotion = pan.getDistance()
+                    val centroidSize = event.calculateCentroidSize(useCurrent = false)
+                    val zoomMotion = abs(1 - zoom) * centroidSize
+                    val rotationMotion = abs(rotation * PI.toFloat() * centroidSize / 180f)
+                    val panMotion = pan.getDistance()
 
-                        if (zoomMotion > touchSlop ||
-                            rotationMotion > touchSlop ||
-                            panMotion > touchSlop
-                        ) {
-                            pastTouchSlop = true
-                            lockedToPanZoom = panZoomLock && rotationMotion < touchSlop
-                        }
+                    if (zoomMotion > touchSlop ||
+                        rotationMotion > touchSlop ||
+                        panMotion > touchSlop
+                    ) {
+                        pastTouchSlop = true
+                        lockedToPanZoom = panZoomLock && rotationMotion < touchSlop
                     }
+                }
 
-                    if (pastTouchSlop) {
-                        val centroid = event.calculateCentroid(useCurrent = false)
-                        val effectiveRotation = if (lockedToPanZoom) 0f else rotationChange
-                        if (effectiveRotation != 0f ||
-                            zoomChange != 1f ||
-                            panChange != Offset.Zero
-                        ) {
-                            onGesture(centroid, panChange, zoomChange, effectiveRotation)
-                        }
-                        event.changes.fastForEach {
-                            if (it.positionChanged()) {
-                                it.consume()
-                            }
+                if (pastTouchSlop) {
+                    val centroid = event.calculateCentroid(useCurrent = false)
+                    val effectiveRotation = if (lockedToPanZoom) 0f else rotationChange
+                    if (effectiveRotation != 0f ||
+                        zoomChange != 1f ||
+                        panChange != Offset.Zero
+                    ) {
+                        onGesture(centroid, panChange, zoomChange, effectiveRotation)
+                    }
+                    event.changes.fastForEach {
+                        if (it.positionChanged()) {
+                            it.consume()
                         }
                     }
                 }
-            } while (!canceled && event.changes.fastAny { it.pressed })
-        }
+            }
+        } while (!canceled && event.changes.fastAny { it.pressed })
     }
 }
 
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/Transformable.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/Transformable.kt
index 117fc97..397ee29 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/Transformable.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/Transformable.kt
@@ -68,6 +68,14 @@
         val updatePanZoomLock = rememberUpdatedState(lockRotationOnZoomPan)
         val block: suspend PointerInputScope.() -> Unit = remember {
             {
+                /**
+                 * This cannot be converted to awaitEachGesture() because
+                 * [TransformableState.transform] is a suspend function. Unfortunately, this means
+                 * that events can be lost in the middle of a gesture.
+                 *
+                 * TODO(b/251826790) Convert to awaitEachGesture()
+                 */
+                @Suppress("DEPRECATION")
                 forEachGesture {
                     detectZoom(updatePanZoomLock, updatedState)
                 }
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/LongPressTextDragObserver.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/LongPressTextDragObserver.kt
index 72b63e9..49c2cb8 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/LongPressTextDragObserver.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/LongPressTextDragObserver.kt
@@ -19,7 +19,7 @@
 import androidx.compose.foundation.gestures.awaitFirstDown
 import androidx.compose.foundation.gestures.detectDragGestures
 import androidx.compose.foundation.gestures.detectDragGesturesAfterLongPress
-import androidx.compose.foundation.gestures.forEachGesture
+import androidx.compose.foundation.gestures.awaitEachGesture
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.input.pointer.PointerInputScope
 import androidx.compose.ui.util.fastAny
@@ -94,16 +94,14 @@
 private suspend fun PointerInputScope.detectPreDragGesturesWithObserver(
     observer: TextDragObserver
 ) {
-    forEachGesture {
-        awaitPointerEventScope {
-            val down = awaitFirstDown()
-            observer.onDown(down.position)
-            // Wait for that pointer to come up.
-            do {
-                val event = awaitPointerEvent()
-            } while (event.changes.fastAny { it.id == down.id && it.pressed })
-            observer.onUp()
-        }
+    awaitEachGesture {
+        val down = awaitFirstDown()
+        observer.onDown(down.position)
+        // Wait for that pointer to come up.
+        do {
+            val event = awaitPointerEvent()
+        } while (event.changes.fastAny { it.id == down.id && it.pressed })
+        observer.onUp()
     }
 }
 
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/selection/SelectionManager.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/selection/SelectionManager.kt
index 7538250..87053fb 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/selection/SelectionManager.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/selection/SelectionManager.kt
@@ -20,7 +20,7 @@
 
 import androidx.compose.foundation.fastFold
 import androidx.compose.foundation.focusable
-import androidx.compose.foundation.gestures.forEachGesture
+import androidx.compose.foundation.gestures.awaitEachGesture
 import androidx.compose.foundation.gestures.waitForUpOrCancellation
 import androidx.compose.foundation.text.Handle
 import androidx.compose.foundation.text.TextDragObserver
@@ -54,7 +54,6 @@
 import kotlin.math.absoluteValue
 import kotlin.math.max
 import kotlin.math.min
-import kotlinx.coroutines.coroutineScope
 
 /**
  * A bridge class between user interaction to the text composables for text selection.
@@ -615,13 +614,9 @@
      * Detect tap without consuming the up event.
      */
     private suspend fun PointerInputScope.detectNonConsumingTap(onTap: (Offset) -> Unit) {
-        forEachGesture {
-            coroutineScope {
-                awaitPointerEventScope {
-                    waitForUpOrCancellation()?.let {
-                        onTap(it.position)
-                    }
-                }
+        awaitEachGesture {
+            waitForUpOrCancellation()?.let {
+                onTap(it.position)
             }
         }
     }
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/selection/TextSelectionMouseDetector.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/selection/TextSelectionMouseDetector.kt
index 4db3b64..c154770 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/selection/TextSelectionMouseDetector.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/selection/TextSelectionMouseDetector.kt
@@ -16,8 +16,8 @@
 
 package androidx.compose.foundation.text.selection
 
+import androidx.compose.foundation.gestures.awaitEachGesture
 import androidx.compose.foundation.gestures.drag
-import androidx.compose.foundation.gestures.forEachGesture
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.input.pointer.AwaitPointerEventScope
 import androidx.compose.ui.input.pointer.PointerEvent
@@ -83,36 +83,34 @@
 internal suspend fun PointerInputScope.mouseSelectionDetector(
     observer: MouseSelectionObserver
 ) {
-    forEachGesture {
-        awaitPointerEventScope {
-            val clicksCounter = ClicksCounter(viewConfiguration)
-            while (true) {
-                val down = awaitMouseEventDown()
-                clicksCounter.update(down)
-                val downChange = down.changes[0]
-                if (down.isShiftPressed) {
-                    val started = observer.onExtend(downChange.position)
-                    if (started) {
-                        downChange.consume()
-                        drag(downChange.id) {
-                            if (observer.onExtendDrag(it.position)) {
-                                it.consume()
-                            }
+    awaitEachGesture {
+        val clicksCounter = ClicksCounter(viewConfiguration)
+        while (true) {
+            val down = awaitMouseEventDown()
+            clicksCounter.update(down)
+            val downChange = down.changes[0]
+            if (down.isShiftPressed) {
+                val started = observer.onExtend(downChange.position)
+                if (started) {
+                    downChange.consume()
+                    drag(downChange.id) {
+                        if (observer.onExtendDrag(it.position)) {
+                            it.consume()
                         }
                     }
-                } else {
-                    val selectionMode = when (clicksCounter.clicks) {
-                        1 -> SelectionAdjustment.None
-                        2 -> SelectionAdjustment.Word
-                        else -> SelectionAdjustment.Paragraph
-                    }
-                    val started = observer.onStart(downChange.position, selectionMode)
-                    if (started) {
-                        downChange.consume()
-                        drag(downChange.id) {
-                            if (observer.onDrag(it.position, selectionMode)) {
-                                it.consume()
-                            }
+                }
+            } else {
+                val selectionMode = when (clicksCounter.clicks) {
+                    1 -> SelectionAdjustment.None
+                    2 -> SelectionAdjustment.Word
+                    else -> SelectionAdjustment.Paragraph
+                }
+                val started = observer.onStart(downChange.position, selectionMode)
+                if (started) {
+                    downChange.consume()
+                    drag(downChange.id) {
+                        if (observer.onDrag(it.position, selectionMode)) {
+                            it.consume()
                         }
                     }
                 }
diff --git a/compose/foundation/foundation/src/desktopMain/kotlin/androidx/compose/foundation/Clickable.desktop.kt b/compose/foundation/foundation/src/desktopMain/kotlin/androidx/compose/foundation/Clickable.desktop.kt
index f03d71f..6d663a8 100644
--- a/compose/foundation/foundation/src/desktopMain/kotlin/androidx/compose/foundation/Clickable.desktop.kt
+++ b/compose/foundation/foundation/src/desktopMain/kotlin/androidx/compose/foundation/Clickable.desktop.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.foundation
 
-import androidx.compose.foundation.gestures.forEachGesture
+import androidx.compose.foundation.gestures.awaitEachGesture
 import androidx.compose.foundation.interaction.MutableInteractionSource
 import androidx.compose.foundation.interaction.PressInteraction
 import androidx.compose.runtime.Composable
@@ -51,7 +51,6 @@
 import androidx.compose.ui.unit.toOffset
 import androidx.compose.ui.util.fastAll
 import java.awt.event.KeyEvent.VK_ENTER
-import kotlinx.coroutines.coroutineScope
 
 @Composable
 internal actual fun isComposeRootInScrollableContainer(): () -> Boolean = { false }
@@ -146,20 +145,15 @@
 internal suspend fun PointerInputScope.detectTapWithContext(
     onTap: ((PointerEvent, PointerEvent) -> Unit)? = null
 ) {
-    forEachGesture {
-        coroutineScope {
-            awaitPointerEventScope {
+    awaitEachGesture {
+        val down = awaitEventFirstDown().also {
+            it.changes.forEach { it.consume() }
+        }
 
-                val down = awaitEventFirstDown().also {
-                    it.changes.forEach { it.consume() }
-                }
-
-                val up = waitForFirstInboundUp()
-                if (up != null) {
-                    up.changes.forEach { it.consume() }
-                    onTap?.invoke(down, up)
-                }
-            }
+        val up = waitForFirstInboundUp()
+        if (up != null) {
+            up.changes.forEach { it.consume() }
+            onTap?.invoke(down, up)
         }
     }
 }
diff --git a/compose/foundation/foundation/src/desktopMain/kotlin/androidx/compose/foundation/ContextMenuProvider.desktop.kt b/compose/foundation/foundation/src/desktopMain/kotlin/androidx/compose/foundation/ContextMenuProvider.desktop.kt
index 6d6102f..2a7fa89 100644
--- a/compose/foundation/foundation/src/desktopMain/kotlin/androidx/compose/foundation/ContextMenuProvider.desktop.kt
+++ b/compose/foundation/foundation/src/desktopMain/kotlin/androidx/compose/foundation/ContextMenuProvider.desktop.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.foundation
 
-import androidx.compose.foundation.gestures.forEachGesture
+import androidx.compose.foundation.gestures.awaitEachGesture
 import androidx.compose.foundation.layout.Box
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.CompositionLocalProvider
@@ -107,14 +107,12 @@
         enabled && state.status == ContextMenuState.Status.Closed
     ) {
         this.pointerInput(state) {
-            forEachGesture {
-                awaitPointerEventScope {
-                    val event = awaitEventFirstDown()
-                    if (event.buttons.isSecondaryPressed) {
-                        event.changes.forEach { it.consume() }
-                        state.status =
-                            ContextMenuState.Status.Open(Rect(event.changes[0].position, 0f))
-                    }
+            awaitEachGesture {
+                val event = awaitEventFirstDown()
+                if (event.buttons.isSecondaryPressed) {
+                    event.changes.forEach { it.consume() }
+                    state.status =
+                        ContextMenuState.Status.Open(Rect(event.changes[0].position, 0f))
                 }
             }
         }
diff --git a/compose/foundation/foundation/src/desktopMain/kotlin/androidx/compose/foundation/Scrollbar.desktop.kt b/compose/foundation/foundation/src/desktopMain/kotlin/androidx/compose/foundation/Scrollbar.desktop.kt
index 1b7aa2a..77c5476 100644
--- a/compose/foundation/foundation/src/desktopMain/kotlin/androidx/compose/foundation/Scrollbar.desktop.kt
+++ b/compose/foundation/foundation/src/desktopMain/kotlin/androidx/compose/foundation/Scrollbar.desktop.kt
@@ -21,7 +21,7 @@
 import androidx.compose.foundation.gestures.awaitFirstDown
 import androidx.compose.foundation.gestures.detectTapAndPress
 import androidx.compose.foundation.gestures.drag
-import androidx.compose.foundation.gestures.forEachGesture
+import androidx.compose.foundation.gestures.awaitEachGesture
 import androidx.compose.foundation.gestures.scrollBy
 import androidx.compose.foundation.interaction.DragInteraction
 import androidx.compose.foundation.interaction.MutableInteractionSource
@@ -275,25 +275,23 @@
     val currentOnDelta by rememberUpdatedState(onDelta)
     val currentOnFinished by rememberUpdatedState(onFinished)
     pointerInput(Unit) {
-        forEachGesture {
-            awaitPointerEventScope {
-                val down = awaitFirstDown(requireUnconsumed = false)
-                val interaction = DragInteraction.Start()
-                currentInteractionSource.tryEmit(interaction)
-                currentDraggedInteraction.value = interaction
-                val isSuccess = drag(down.id) { change ->
-                    currentOnDelta.invoke(change.positionChange())
-                    change.consume()
-                }
-                val finishInteraction = if (isSuccess) {
-                    DragInteraction.Stop(interaction)
-                } else {
-                    DragInteraction.Cancel(interaction)
-                }
-                currentInteractionSource.tryEmit(finishInteraction)
-                currentDraggedInteraction.value = null
-                currentOnFinished.invoke()
+        awaitEachGesture {
+            val down = awaitFirstDown(requireUnconsumed = false)
+            val interaction = DragInteraction.Start()
+            currentInteractionSource.tryEmit(interaction)
+            currentDraggedInteraction.value = interaction
+            val isSuccess = drag(down.id) { change ->
+                currentOnDelta.invoke(change.positionChange())
+                change.consume()
             }
+            val finishInteraction = if (isSuccess) {
+                DragInteraction.Stop(interaction)
+            } else {
+                DragInteraction.Cancel(interaction)
+            }
+            currentInteractionSource.tryEmit(finishInteraction)
+            currentDraggedInteraction.value = null
+            currentOnFinished.invoke()
         }
     }
 }
diff --git a/compose/foundation/foundation/src/desktopMain/kotlin/androidx/compose/foundation/window/WindowDraggableArea.desktop.kt b/compose/foundation/foundation/src/desktopMain/kotlin/androidx/compose/foundation/window/WindowDraggableArea.desktop.kt
index 36eeaa8..b285b1c 100644
--- a/compose/foundation/foundation/src/desktopMain/kotlin/androidx/compose/foundation/window/WindowDraggableArea.desktop.kt
+++ b/compose/foundation/foundation/src/desktopMain/kotlin/androidx/compose/foundation/window/WindowDraggableArea.desktop.kt
@@ -17,7 +17,7 @@
 package androidx.compose.foundation.window
 
 import androidx.compose.foundation.gestures.awaitFirstDown
-import androidx.compose.foundation.gestures.forEachGesture
+import androidx.compose.foundation.gestures.awaitEachGesture
 import androidx.compose.foundation.layout.Box
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.remember
@@ -46,11 +46,9 @@
 
     Box(
         modifier = modifier.pointerInput(Unit) {
-            forEachGesture {
-                awaitPointerEventScope {
-                    awaitFirstDown()
-                    handler.register()
-                }
+            awaitEachGesture {
+                awaitFirstDown()
+                handler.register()
             }
         }
     ) {
diff --git a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/gestures/DragGestureDetectorTest.kt b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/gestures/DragGestureDetectorTest.kt
index 30db9bd..9479a6c 100644
--- a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/gestures/DragGestureDetectorTest.kt
+++ b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/gestures/DragGestureDetectorTest.kt
@@ -133,99 +133,93 @@
     }
 
     private val AwaitVerticalDragUtil = SuspendingGestureTestUtil(width = 100, height = 100) {
-        forEachGesture {
-            awaitPointerEventScope {
-                val down = awaitFirstDown()
-                val slopChange = awaitVerticalTouchSlopOrCancellation(down.id) { change, overSlop ->
-                    if (change.positionChange().y > 0f || !consumePositiveOnly) {
-                        dragged = true
-                        dragDistance = overSlop
+        awaitEachGesture {
+            val down = awaitFirstDown()
+            val slopChange = awaitVerticalTouchSlopOrCancellation(down.id) { change, overSlop ->
+                if (change.positionChange().y > 0f || !consumePositiveOnly) {
+                    dragged = true
+                    dragDistance = overSlop
+                    change.consume()
+                }
+            }
+            if (slopChange != null || sloppyDetector) {
+                gestureStarted = true
+                var pointer = if (sloppyDetector) down.id else slopChange!!.id
+                do {
+                    val change = awaitVerticalDragOrCancellation(pointer)
+                    if (change == null) {
+                        gestureCanceled = true
+                    } else {
+                        dragDistance += change.positionChange().y
                         change.consume()
-                    }
-                }
-                if (slopChange != null || sloppyDetector) {
-                    gestureStarted = true
-                    var pointer = if (sloppyDetector) down.id else slopChange!!.id
-                    do {
-                        val change = awaitVerticalDragOrCancellation(pointer)
-                        if (change == null) {
-                            gestureCanceled = true
-                        } else {
-                            dragDistance += change.positionChange().y
-                            change.consume()
-                            if (change.changedToUpIgnoreConsumed()) {
-                                gestureEnded = true
-                            }
-                            pointer = change.id
+                        if (change.changedToUpIgnoreConsumed()) {
+                            gestureEnded = true
                         }
-                    } while (!gestureEnded && !gestureCanceled)
-                }
+                        pointer = change.id
+                    }
+                } while (!gestureEnded && !gestureCanceled)
             }
         }
     }
 
     private val AwaitHorizontalDragUtil = SuspendingGestureTestUtil(width = 100, height = 100) {
-        forEachGesture {
-            awaitPointerEventScope {
-                val down = awaitFirstDown()
-                val slopChange =
-                    awaitHorizontalTouchSlopOrCancellation(down.id) { change, overSlop ->
-                        if (change.positionChange().x > 0f || !consumePositiveOnly) {
-                            dragged = true
-                            dragDistance = overSlop
-                            change.consume()
-                        }
+        awaitEachGesture {
+            val down = awaitFirstDown()
+            val slopChange =
+                awaitHorizontalTouchSlopOrCancellation(down.id) { change, overSlop ->
+                    if (change.positionChange().x > 0f || !consumePositiveOnly) {
+                        dragged = true
+                        dragDistance = overSlop
+                        change.consume()
                     }
-                if (slopChange != null || sloppyDetector) {
-                    gestureStarted = true
-                    var pointer = if (sloppyDetector) down.id else slopChange!!.id
-                    do {
-                        val change = awaitHorizontalDragOrCancellation(pointer)
-                        if (change == null) {
-                            gestureCanceled = true
-                        } else {
-                            dragDistance += change.positionChange().x
-                            change.consume()
-                            if (change.changedToUpIgnoreConsumed()) {
-                                gestureEnded = true
-                            }
-                            pointer = change.id
-                        }
-                    } while (!gestureEnded && !gestureCanceled)
                 }
+            if (slopChange != null || sloppyDetector) {
+                gestureStarted = true
+                var pointer = if (sloppyDetector) down.id else slopChange!!.id
+                do {
+                    val change = awaitHorizontalDragOrCancellation(pointer)
+                    if (change == null) {
+                        gestureCanceled = true
+                    } else {
+                        dragDistance += change.positionChange().x
+                        change.consume()
+                        if (change.changedToUpIgnoreConsumed()) {
+                            gestureEnded = true
+                        }
+                        pointer = change.id
+                    }
+                } while (!gestureEnded && !gestureCanceled)
             }
         }
     }
 
     private val AwaitDragUtil = SuspendingGestureTestUtil(width = 100, height = 100) {
-        forEachGesture {
-            awaitPointerEventScope {
-                val down = awaitFirstDown()
-                val slopChange = awaitTouchSlopOrCancellation(down.id) { change, overSlop ->
-                    val positionChange = change.positionChange()
-                    if (positionChange.x > 0f || positionChange.y > 0f || !consumePositiveOnly) {
-                        dragged = true
-                        dragDistance = overSlop.getDistance()
+        awaitEachGesture {
+            val down = awaitFirstDown()
+            val slopChange = awaitTouchSlopOrCancellation(down.id) { change, overSlop ->
+                val positionChange = change.positionChange()
+                if (positionChange.x > 0f || positionChange.y > 0f || !consumePositiveOnly) {
+                    dragged = true
+                    dragDistance = overSlop.getDistance()
+                    change.consume()
+                }
+            }
+            if (slopChange != null || sloppyDetector) {
+                gestureStarted = true
+                var pointer = if (sloppyDetector) down.id else slopChange!!.id
+                do {
+                    val change = awaitDragOrCancellation(pointer)
+                    if (change == null) {
+                        gestureCanceled = true
+                    } else {
+                        dragDistance += change.positionChange().getDistance()
                         change.consume()
-                    }
-                }
-                if (slopChange != null || sloppyDetector) {
-                    gestureStarted = true
-                    var pointer = if (sloppyDetector) down.id else slopChange!!.id
-                    do {
-                        val change = awaitDragOrCancellation(pointer)
-                        if (change == null) {
-                            gestureCanceled = true
-                        } else {
-                            dragDistance += change.positionChange().getDistance()
-                            change.consume()
-                            if (change.changedToUpIgnoreConsumed()) {
-                                gestureEnded = true
-                            }
-                            pointer = change.id
+                        if (change.changedToUpIgnoreConsumed()) {
+                            gestureEnded = true
                         }
-                    } while (!gestureEnded && !gestureCanceled)
-                }
+                        pointer = change.id
+                    }
+                } while (!gestureEnded && !gestureCanceled)
             }
         }
     }
diff --git a/compose/material/material/build.gradle b/compose/material/material/build.gradle
index fe57f44..8b59f0e 100644
--- a/compose/material/material/build.gradle
+++ b/compose/material/material/build.gradle
@@ -33,7 +33,7 @@
          * corresponding block below
          */
         api("androidx.compose.animation:animation-core:1.2.1")
-        api("androidx.compose.foundation:foundation:1.2.1")
+        api(project(":compose:foundation:foundation"))
         api(project(":compose:material:material-icons-core"))
         api(project(":compose:material:material-ripple"))
         api("androidx.compose.runtime:runtime:1.2.1")
diff --git a/compose/material/material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/ColorPickerDemo.kt b/compose/material/material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/ColorPickerDemo.kt
index e878f9a..4aff510 100644
--- a/compose/material/material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/ColorPickerDemo.kt
+++ b/compose/material/material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/ColorPickerDemo.kt
@@ -25,8 +25,8 @@
 import androidx.compose.foundation.Image
 import androidx.compose.foundation.background
 import androidx.compose.foundation.gestures.awaitFirstDown
+import androidx.compose.foundation.gestures.awaitEachGesture
 import androidx.compose.foundation.gestures.drag
-import androidx.compose.foundation.gestures.forEachGesture
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.BoxWithConstraints
 import androidx.compose.foundation.layout.Column
@@ -112,17 +112,15 @@
                 }
             }
 
-            forEachGesture {
-                awaitPointerEventScope {
-                    val down = awaitFirstDown()
-                    hasInput = true
-                    updateColorWheel(down.position)
-                    drag(down.id) { change ->
-                        change.consume()
-                        updateColorWheel(change.position)
-                    }
-                    hasInput = false
+            awaitEachGesture {
+                val down = awaitFirstDown()
+                hasInput = true
+                updateColorWheel(down.position)
+                drag(down.id) { change ->
+                    change.consume()
+                    updateColorWheel(change.position)
                 }
+                hasInput = false
             }
         }
 
diff --git a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/SurfaceTest.kt b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/SurfaceTest.kt
index e4301df..99ffbe5 100644
--- a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/SurfaceTest.kt
+++ b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/SurfaceTest.kt
@@ -17,7 +17,7 @@
 package androidx.compose.material
 
 import android.os.Build
-import androidx.compose.foundation.gestures.forEachGesture
+import androidx.compose.foundation.gestures.awaitEachGesture
 import androidx.compose.foundation.interaction.Interaction
 import androidx.compose.foundation.interaction.MutableInteractionSource
 import androidx.compose.foundation.interaction.PressInteraction
@@ -594,13 +594,11 @@
                             .fillMaxSize()
                             .testTag("clickable")
                             .pointerInput(Unit) {
-                                forEachGesture {
-                                    awaitPointerEventScope {
-                                        hitTested.value = true
-                                        val event = awaitPointerEvent(PointerEventPass.Final)
-                                        Truth.assertThat(event.changes[0].isConsumed)
-                                            .isFalse()
-                                    }
+                                awaitEachGesture {
+                                    hitTested.value = true
+                                    val event = awaitPointerEvent(PointerEventPass.Final)
+                                    Truth.assertThat(event.changes[0].isConsumed)
+                                        .isFalse()
                                 }
                             }
                     )
diff --git a/compose/material/material/src/androidMain/kotlin/androidx/compose/material/ExposedDropdownMenu.kt b/compose/material/material/src/androidMain/kotlin/androidx/compose/material/ExposedDropdownMenu.kt
index 20b95ff..3214402 100644
--- a/compose/material/material/src/androidMain/kotlin/androidx/compose/material/ExposedDropdownMenu.kt
+++ b/compose/material/material/src/androidMain/kotlin/androidx/compose/material/ExposedDropdownMenu.kt
@@ -21,7 +21,7 @@
 import androidx.compose.animation.animateColorAsState
 import androidx.compose.animation.core.MutableTransitionState
 import androidx.compose.animation.core.tween
-import androidx.compose.foundation.gestures.forEachGesture
+import androidx.compose.foundation.gestures.awaitEachGesture
 import androidx.compose.foundation.interaction.InteractionSource
 import androidx.compose.foundation.interaction.collectIsFocusedAsState
 import androidx.compose.foundation.layout.Box
@@ -63,7 +63,6 @@
 import androidx.compose.ui.semantics.semantics
 import androidx.compose.ui.unit.DpOffset
 import androidx.compose.ui.util.fastAll
-import kotlinx.coroutines.coroutineScope
 import kotlin.math.max
 
 /**
@@ -513,18 +512,14 @@
     onExpandedChange: () -> Unit,
     menuLabel: String
 ) = pointerInput(Unit) {
-    forEachGesture {
-        coroutineScope {
-            awaitPointerEventScope {
-                var event: PointerEvent
-                do {
-                    event = awaitPointerEvent(PointerEventPass.Initial)
-                } while (
-                    !event.changes.fastAll { it.changedToUp() }
-                )
-                onExpandedChange.invoke()
-            }
-        }
+    awaitEachGesture {
+        var event: PointerEvent
+        do {
+            event = awaitPointerEvent(PointerEventPass.Initial)
+        } while (
+            !event.changes.fastAll { it.changedToUp() }
+        )
+        onExpandedChange.invoke()
     }
 }.semantics {
     contentDescription = menuLabel // this should be a localised string
diff --git a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/Slider.kt b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/Slider.kt
index 580ab3a..7c76824 100644
--- a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/Slider.kt
+++ b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/Slider.kt
@@ -30,7 +30,7 @@
 import androidx.compose.foundation.gestures.awaitFirstDown
 import androidx.compose.foundation.gestures.detectTapGestures
 import androidx.compose.foundation.gestures.draggable
-import androidx.compose.foundation.gestures.forEachGesture
+import androidx.compose.foundation.gestures.awaitEachGesture
 import androidx.compose.foundation.gestures.horizontalDrag
 import androidx.compose.foundation.hoverable
 import androidx.compose.foundation.indication
@@ -980,56 +980,54 @@
                 onDrag
             )
             coroutineScope {
-                forEachGesture {
-                    awaitPointerEventScope {
-                        val event = awaitFirstDown(requireUnconsumed = false)
-                        val interaction = DragInteraction.Start()
-                        var posX = if (isRtl) maxPx - event.position.x else event.position.x
-                        val compare = rangeSliderLogic.compareOffsets(posX)
-                        var draggingStart = if (compare != 0) {
-                            compare < 0
+                awaitEachGesture {
+                    val event = awaitFirstDown(requireUnconsumed = false)
+                    val interaction = DragInteraction.Start()
+                    var posX = if (isRtl) maxPx - event.position.x else event.position.x
+                    val compare = rangeSliderLogic.compareOffsets(posX)
+                    var draggingStart = if (compare != 0) {
+                        compare < 0
+                    } else {
+                        rawOffsetStart.value > posX
+                    }
+
+                    awaitSlop(event.id, event.type)?.let {
+                        val slop = viewConfiguration.pointerSlop(event.type)
+                        val shouldUpdateCapturedThumb = abs(rawOffsetEnd.value - posX) < slop &&
+                            abs(rawOffsetStart.value - posX) < slop
+                        if (shouldUpdateCapturedThumb) {
+                            val dir = it.second
+                            draggingStart = if (isRtl) dir >= 0f else dir < 0f
+                            posX += it.first.positionChange().x
+                        }
+                    }
+
+                    rangeSliderLogic.captureThumb(
+                        draggingStart,
+                        posX,
+                        interaction,
+                        this@coroutineScope
+                    )
+
+                    val finishInteraction = try {
+                        val success = horizontalDrag(pointerId = event.id) {
+                            val deltaX = it.positionChange().x
+                            onDrag.value.invoke(draggingStart, if (isRtl) -deltaX else deltaX)
+                        }
+                        if (success) {
+                            DragInteraction.Stop(interaction)
                         } else {
-                            rawOffsetStart.value > posX
-                        }
-
-                        awaitSlop(event.id, event.type)?.let {
-                            val slop = viewConfiguration.pointerSlop(event.type)
-                            val shouldUpdateCapturedThumb = abs(rawOffsetEnd.value - posX) < slop &&
-                                abs(rawOffsetStart.value - posX) < slop
-                            if (shouldUpdateCapturedThumb) {
-                                val dir = it.second
-                                draggingStart = if (isRtl) dir >= 0f else dir < 0f
-                                posX += it.first.positionChange().x
-                            }
-                        }
-
-                        rangeSliderLogic.captureThumb(
-                            draggingStart,
-                            posX,
-                            interaction,
-                            this@coroutineScope
-                        )
-
-                        val finishInteraction = try {
-                            val success = horizontalDrag(pointerId = event.id) {
-                                val deltaX = it.positionChange().x
-                                onDrag.value.invoke(draggingStart, if (isRtl) -deltaX else deltaX)
-                            }
-                            if (success) {
-                                DragInteraction.Stop(interaction)
-                            } else {
-                                DragInteraction.Cancel(interaction)
-                            }
-                        } catch (e: CancellationException) {
                             DragInteraction.Cancel(interaction)
                         }
+                    } catch (e: CancellationException) {
+                        DragInteraction.Cancel(interaction)
+                    }
 
-                        gestureEndAction.value.invoke(draggingStart)
-                        launch {
-                            rangeSliderLogic
-                                .activeInteraction(draggingStart)
-                                .emit(finishInteraction)
-                        }
+                    gestureEndAction.value.invoke(draggingStart)
+                    launch {
+                        rangeSliderLogic
+                            .activeInteraction(draggingStart)
+                            .emit(finishInteraction)
                     }
                 }
             }
diff --git a/compose/material3/material3/build.gradle b/compose/material3/material3/build.gradle
index be01d8b..c479be1 100644
--- a/compose/material3/material3/build.gradle
+++ b/compose/material3/material3/build.gradle
@@ -39,7 +39,7 @@
         implementation("androidx.compose.animation:animation-core:1.3.0-rc01")
         implementation("androidx.compose.foundation:foundation-layout:1.3.0-rc01")
         implementation("androidx.compose.ui:ui-util:1.3.0-rc01")
-        api("androidx.compose.foundation:foundation:1.3.0-rc01")
+        api(project(":compose:foundation:foundation"))
         api("androidx.compose.material:material-icons-core:1.3.0-rc01")
         api("androidx.compose.material:material-ripple:1.3.0-rc01")
         api("androidx.compose.runtime:runtime:1.3.0-rc01")
diff --git a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/SurfaceTest.kt b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/SurfaceTest.kt
index 0882f40..cbb0705 100644
--- a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/SurfaceTest.kt
+++ b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/SurfaceTest.kt
@@ -18,7 +18,7 @@
 
 import android.os.Build
 import androidx.compose.foundation.clickable
-import androidx.compose.foundation.gestures.forEachGesture
+import androidx.compose.foundation.gestures.awaitEachGesture
 import androidx.compose.foundation.interaction.Interaction
 import androidx.compose.foundation.interaction.MutableInteractionSource
 import androidx.compose.foundation.interaction.PressInteraction
@@ -707,13 +707,11 @@
                             .fillMaxSize()
                             .testTag("clickable")
                             .pointerInput(Unit) {
-                                forEachGesture {
-                                    awaitPointerEventScope {
-                                        hitTested.value = true
-                                        val event = awaitPointerEvent(PointerEventPass.Final)
-                                        Truth.assertThat(event.changes[0].isConsumed)
-                                            .isFalse()
-                                    }
+                                awaitEachGesture {
+                                    hitTested.value = true
+                                    val event = awaitPointerEvent(PointerEventPass.Final)
+                                    Truth.assertThat(event.changes[0].isConsumed)
+                                        .isFalse()
                                 }
                             }
                     )
diff --git a/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/ExposedDropdownMenu.kt b/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/ExposedDropdownMenu.kt
index e270215..3fa4084 100644
--- a/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/ExposedDropdownMenu.kt
+++ b/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/ExposedDropdownMenu.kt
@@ -20,7 +20,7 @@
 import android.view.View
 import android.view.ViewTreeObserver
 import androidx.compose.animation.core.MutableTransitionState
-import androidx.compose.foundation.gestures.forEachGesture
+import androidx.compose.foundation.gestures.awaitEachGesture
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.ColumnScope
 import androidx.compose.foundation.layout.PaddingValues
@@ -66,7 +66,6 @@
 import androidx.compose.ui.unit.dp
 import androidx.compose.ui.util.fastAll
 import kotlin.math.max
-import kotlinx.coroutines.coroutineScope
 
 /**
  * <a href="https://m3.material.io/components/menus/overview" class="external" target="_blank">Material Design Exposed Dropdown Menu</a>.
@@ -527,18 +526,14 @@
     expandedDescription: String = getString(Strings.MenuExpanded),
     collapsedDescription: String = getString(Strings.MenuCollapsed),
 ) = pointerInput(Unit) {
-    forEachGesture {
-        coroutineScope {
-            awaitPointerEventScope {
-                var event: PointerEvent
-                do {
-                    event = awaitPointerEvent(PointerEventPass.Initial)
-                } while (
-                    !event.changes.fastAll { it.changedToUp() }
-                )
-                onExpandedChange()
-            }
-        }
+    awaitEachGesture {
+        var event: PointerEvent
+        do {
+            event = awaitPointerEvent(PointerEventPass.Initial)
+        } while (
+            !event.changes.fastAll { it.changedToUp() }
+        )
+        onExpandedChange()
     }
 }.semantics {
     stateDescription = if (expanded) expandedDescription else collapsedDescription
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Slider.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Slider.kt
index c9f2656..5eb67f3 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Slider.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Slider.kt
@@ -30,7 +30,7 @@
 import androidx.compose.foundation.gestures.awaitFirstDown
 import androidx.compose.foundation.gestures.detectTapGestures
 import androidx.compose.foundation.gestures.draggable
-import androidx.compose.foundation.gestures.forEachGesture
+import androidx.compose.foundation.gestures.awaitEachGesture
 import androidx.compose.foundation.gestures.horizontalDrag
 import androidx.compose.foundation.hoverable
 import androidx.compose.foundation.indication
@@ -1200,56 +1200,54 @@
                 onDrag
             )
             coroutineScope {
-                forEachGesture {
-                    awaitPointerEventScope {
-                        val event = awaitFirstDown(requireUnconsumed = false)
-                        val interaction = DragInteraction.Start()
-                        var posX = if (isRtl) maxPx - event.position.x else event.position.x
-                        val compare = rangeSliderLogic.compareOffsets(posX)
-                        var draggingStart = if (compare != 0) {
-                            compare < 0
+                awaitEachGesture {
+                    val event = awaitFirstDown(requireUnconsumed = false)
+                    val interaction = DragInteraction.Start()
+                    var posX = if (isRtl) maxPx - event.position.x else event.position.x
+                    val compare = rangeSliderLogic.compareOffsets(posX)
+                    var draggingStart = if (compare != 0) {
+                        compare < 0
+                    } else {
+                        rawOffsetStart.value > posX
+                    }
+
+                    awaitSlop(event.id, event.type)?.let {
+                        val slop = viewConfiguration.pointerSlop(event.type)
+                        val shouldUpdateCapturedThumb = abs(rawOffsetEnd.value - posX) < slop &&
+                            abs(rawOffsetStart.value - posX) < slop
+                        if (shouldUpdateCapturedThumb) {
+                            val dir = it.second
+                            draggingStart = if (isRtl) dir >= 0f else dir < 0f
+                            posX += it.first.positionChange().x
+                        }
+                    }
+
+                    rangeSliderLogic.captureThumb(
+                        draggingStart,
+                        posX,
+                        interaction,
+                        this@coroutineScope
+                    )
+
+                    val finishInteraction = try {
+                        val success = horizontalDrag(pointerId = event.id) {
+                            val deltaX = it.positionChange().x
+                            onDrag.value.invoke(draggingStart, if (isRtl) -deltaX else deltaX)
+                        }
+                        if (success) {
+                            DragInteraction.Stop(interaction)
                         } else {
-                            rawOffsetStart.value > posX
-                        }
-
-                        awaitSlop(event.id, event.type)?.let {
-                            val slop = viewConfiguration.pointerSlop(event.type)
-                            val shouldUpdateCapturedThumb = abs(rawOffsetEnd.value - posX) < slop &&
-                                abs(rawOffsetStart.value - posX) < slop
-                            if (shouldUpdateCapturedThumb) {
-                                val dir = it.second
-                                draggingStart = if (isRtl) dir >= 0f else dir < 0f
-                                posX += it.first.positionChange().x
-                            }
-                        }
-
-                        rangeSliderLogic.captureThumb(
-                            draggingStart,
-                            posX,
-                            interaction,
-                            this@coroutineScope
-                        )
-
-                        val finishInteraction = try {
-                            val success = horizontalDrag(pointerId = event.id) {
-                                val deltaX = it.positionChange().x
-                                onDrag.value.invoke(draggingStart, if (isRtl) -deltaX else deltaX)
-                            }
-                            if (success) {
-                                DragInteraction.Stop(interaction)
-                            } else {
-                                DragInteraction.Cancel(interaction)
-                            }
-                        } catch (e: CancellationException) {
                             DragInteraction.Cancel(interaction)
                         }
+                    } catch (e: CancellationException) {
+                        DragInteraction.Cancel(interaction)
+                    }
 
-                        gestureEndAction.value.invoke(draggingStart)
-                        launch {
-                            rangeSliderLogic
-                                .activeInteraction(draggingStart)
-                                .emit(finishInteraction)
-                        }
+                    gestureEndAction.value.invoke(draggingStart)
+                    launch {
+                        rangeSliderLogic
+                            .activeInteraction(draggingStart)
+                            .emit(finishInteraction)
                     }
                 }
             }
diff --git a/compose/runtime/runtime/api/current.txt b/compose/runtime/runtime/api/current.txt
index 8b0cc2a..f4bfd21 100644
--- a/compose/runtime/runtime/api/current.txt
+++ b/compose/runtime/runtime/api/current.txt
@@ -907,6 +907,7 @@
     method public boolean retainAll(java.util.Collection<E!> elements);
     method public T! set(int index, T? element);
     method public java.util.List<T> subList(int fromIndex, int toIndex);
+    method public java.util.List<T> toList();
     property public androidx.compose.runtime.snapshots.StateRecord firstStateRecord;
     property public int size;
   }
@@ -930,6 +931,7 @@
     method public V? put(K? key, V? value);
     method public void putAll(java.util.Map<? extends K,? extends V> from);
     method public V? remove(Object? key);
+    method public java.util.Map<K,V> toMap();
     property public java.util.Set<java.util.Map.Entry<K,V>> entries;
     property public androidx.compose.runtime.snapshots.StateRecord firstStateRecord;
     property public java.util.Set<K> keys;
diff --git a/compose/runtime/runtime/api/public_plus_experimental_current.txt b/compose/runtime/runtime/api/public_plus_experimental_current.txt
index be29da0..6dca9cb 100644
--- a/compose/runtime/runtime/api/public_plus_experimental_current.txt
+++ b/compose/runtime/runtime/api/public_plus_experimental_current.txt
@@ -983,6 +983,7 @@
     method public boolean retainAll(java.util.Collection<E!> elements);
     method public T! set(int index, T? element);
     method public java.util.List<T> subList(int fromIndex, int toIndex);
+    method public java.util.List<T> toList();
     property public androidx.compose.runtime.snapshots.StateRecord firstStateRecord;
     property public int size;
   }
@@ -1006,6 +1007,7 @@
     method public V? put(K? key, V? value);
     method public void putAll(java.util.Map<? extends K,? extends V> from);
     method public V? remove(Object? key);
+    method public java.util.Map<K,V> toMap();
     property public java.util.Set<java.util.Map.Entry<K,V>> entries;
     property public androidx.compose.runtime.snapshots.StateRecord firstStateRecord;
     property public java.util.Set<K> keys;
diff --git a/compose/runtime/runtime/api/restricted_current.txt b/compose/runtime/runtime/api/restricted_current.txt
index 684ac84..69872de 100644
--- a/compose/runtime/runtime/api/restricted_current.txt
+++ b/compose/runtime/runtime/api/restricted_current.txt
@@ -368,6 +368,7 @@
   }
 
   public final class RecomposeScopeImplKt {
+    method @kotlin.PublishedApi internal static int updateChangedFlags(int flags);
   }
 
   public final class Recomposer extends androidx.compose.runtime.CompositionContext {
@@ -947,6 +948,7 @@
     method public boolean retainAll(java.util.Collection<E!> elements);
     method public T! set(int index, T? element);
     method public java.util.List<T> subList(int fromIndex, int toIndex);
+    method public java.util.List<T> toList();
     property public androidx.compose.runtime.snapshots.StateRecord firstStateRecord;
     property public int size;
   }
@@ -970,6 +972,7 @@
     method public V? put(K? key, V? value);
     method public void putAll(java.util.Map<? extends K,? extends V> from);
     method public V? remove(Object? key);
+    method public java.util.Map<K,V> toMap();
     property public java.util.Set<java.util.Map.Entry<K,V>> entries;
     property public androidx.compose.runtime.snapshots.StateRecord firstStateRecord;
     property public java.util.Set<K> keys;
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/RecomposeScopeImpl.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/RecomposeScopeImpl.kt
index 2de14b5..b5b8aac 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/RecomposeScopeImpl.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/RecomposeScopeImpl.kt
@@ -33,6 +33,23 @@
     fun invalidate()
 }
 
+private const val changedLowBitMask = 0b001_001_001_001_001_001_001_001_001_001_0
+private const val changedHighBitMask = changedLowBitMask shl 1
+private const val changedMask = (changedLowBitMask or changedHighBitMask).inv()
+
+/**
+ * A compiler plugin utility function to change $changed flags from Different(10) to Same(01) for
+ * when captured by restart lambdas. All parameters are passed with the same value as it was
+ * previously invoked with and the changed flags should reflect that.
+ */
+@PublishedApi
+internal fun updateChangedFlags(flags: Int): Int {
+    val lowBits = flags and changedLowBitMask
+    val highBits = flags and changedHighBitMask
+    return ((flags and changedMask) or
+        (lowBits or (highBits shr 1)) or ((lowBits shl 1) and highBits))
+}
+
 private const val UsedFlag = 0x01
 private const val DefaultsInScopeFlag = 0x02
 private const val DefaultsInvalidFlag = 0x04
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/SnapshotStateList.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/SnapshotStateList.kt
index 12d0ca2..cf562db 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/SnapshotStateList.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/SnapshotStateList.kt
@@ -42,6 +42,23 @@
         firstStateRecord = value as StateListStateRecord<T>
     }
 
+    /**
+     * Return a list containing all the elements of this list.
+     *
+     * The list returned is immutable and returned will not change even if the content of the list
+     * is changed in the same snapshot. It also will be the same instance until the content is
+     * changed. It is not, however, guaranteed to be the same instance for the same list as adding
+     * and removing the same item from the this list might produce a different instance with the
+     * same content.
+     *
+     * This operation is O(1) and does not involve a physically copying the list. It instead
+     * returns the underlying immutable list used internally to store the content of the list.
+     *
+     * It is recommended to use [toList] when using returning the value of this list from
+     * [androidx.compose.runtime.snapshotFlow].
+     */
+    fun toList(): List<T> = readable.list
+
     internal val modification: Int get() = withCurrent { modification }
 
     @Suppress("UNCHECKED_CAST")
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/SnapshotStateMap.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/SnapshotStateMap.kt
index 2b14ca4..aceccb7 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/SnapshotStateMap.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/SnapshotStateMap.kt
@@ -41,6 +41,22 @@
         firstStateRecord = value as StateMapStateRecord<K, V>
     }
 
+    /**
+     * Returns an immutable map containing all key-value pairs from the original map.
+     *
+     * The content of the map returned will not change even if the content of the map is changed in
+     * the same snapshot. It also will be the same instance until the content is changed. It is not,
+     * however, guaranteed to be the same instance for the same content as adding and removing the
+     * same item from the this map might produce a different instance with the same content.
+     *
+     * This operation is O(1) and does not involve a physically copying the map. It instead
+     * returns the underlying immutable map used internally to store the content of the map.
+     *
+     * It is recommended to use [toMap] when using returning the value of this map from
+     * [androidx.compose.runtime.snapshotFlow].
+     */
+    fun toMap(): Map<K, V> = readable.map
+
     override val size get() = readable.map.size
     override fun containsKey(key: K) = readable.map.containsKey(key)
     override fun containsValue(value: V) = readable.map.containsValue(value)
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/RestartTests.kt b/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/RestartTests.kt
index 41747a2..73583c2 100644
--- a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/RestartTests.kt
+++ b/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/RestartTests.kt
@@ -20,8 +20,10 @@
 import androidx.compose.runtime.mock.Text
 import androidx.compose.runtime.mock.compositionTest
 import androidx.compose.runtime.mock.expectChanges
+import androidx.compose.runtime.mock.revalidate
 import androidx.compose.runtime.mock.validate
 import kotlin.test.Test
+import kotlin.test.assertEquals
 
 class RestartTests {
     @Test
@@ -190,6 +192,40 @@
         expectChanges()
         validate()
     }
+
+    @Test // Regression test for b/245806803
+    fun restart_and_skip() = compositionTest {
+        val count = mutableStateOf(0)
+        val data = mutableStateOf(0)
+        useCountCalled = 0
+        useCount2Called = 0
+
+        compose {
+            RestartAndSkipTest(count = count.value, data = data)
+        }
+
+        assertEquals(1, useCountCalled)
+        assertEquals(1, useCount2Called)
+
+        validate {
+            this.RestartAndSkipTest(count = count.value, data = data)
+        }
+
+        count.value++
+
+        expectChanges()
+        revalidate()
+
+        assertEquals(2, useCountCalled)
+        assertEquals(2, useCount2Called)
+
+        data.value++
+        expectChanges()
+        revalidate()
+
+        assertEquals(3, useCountCalled)
+        assertEquals(2, useCount2Called)
+    }
 }
 
 @Composable
@@ -208,4 +244,31 @@
 }
 
 @Suppress("unused")
-inline fun MockViewValidator.Repeat(count: Int, block: (index: Int) -> Unit) = repeat(count, block)
\ No newline at end of file
+inline fun MockViewValidator.Repeat(count: Int, block: (index: Int) -> Unit) = repeat(count, block)
+
+@Composable
+fun RestartAndSkipTest(count: Int, data: State<Int>) {
+    RestartAndSkipTest_UseCount(count, data)
+}
+
+fun MockViewValidator.RestartAndSkipTest(count: Int, data: State<Int>) {
+    Text("Data: ${data.value}, Count: $count")
+    Text("Count: $count")
+}
+
+private var useCountCalled = 0
+
+@Composable
+fun RestartAndSkipTest_UseCount(count: Int, data: State<Int>) {
+    Text("Data: ${data.value}, Count: $count")
+    useCountCalled++
+    RestartAndSkipTest_UseCount2(count)
+}
+
+private var useCount2Called = 0
+
+@Composable
+fun RestartAndSkipTest_UseCount2(count: Int) {
+    Text("Count: $count")
+    useCount2Called++
+}
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/UpdateChangedFlagsTest.kt b/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/UpdateChangedFlagsTest.kt
new file mode 100644
index 0000000..f5b6b72
--- /dev/null
+++ b/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/UpdateChangedFlagsTest.kt
@@ -0,0 +1,65 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.compose.runtime
+
+import kotlin.test.Test
+import kotlin.test.assertEquals
+
+class UpdateChangedFlagsTest {
+
+    @Test
+    fun testUpdateSingleChangedFlag() {
+        val flag = 0b010_0
+        val result = updateChangedFlags(flag)
+        assertEquals(0b001_0, result)
+    }
+
+    @Test
+    fun testUpdateMultipleChangedFlags() {
+        val flags = 0b010_010_010_010_010__010_010_010_010_010_0
+        val result = updateChangedFlags(flags)
+        assertEquals(0b001_001_001_001_001__001_001_001_001_001_0, result)
+    }
+
+    @Test
+    fun testUpdateNonChangedValuesUnmodified() {
+        val flags = 0b011_000_011_000_011__000_011_000_011_000_0
+        val result = updateChangedFlags(flags)
+        assertEquals(flags, result)
+    }
+
+    @Test
+    fun testUpdateSingleChangedFlag_forced_stable() {
+        val flag = 0b110_0
+        val result = updateChangedFlags(flag)
+        assertEquals(0b101_0, result)
+    }
+
+    @Test
+    fun testUpdateMultipleChangedFlags_forced_stable() {
+        val flags = 0b110_110_110_110_110__110_110_110_110_110_0
+        val result = updateChangedFlags(flags)
+        assertEquals(0b101_101_101_101_101__101_101_101_101_101_0, result)
+    }
+
+    @Test
+    fun testUpdateNonChangedValuesUnmodified_forced_stable() {
+        val flags = 0b111_100_111_100_111__100_111_100_111_100_0
+        val result = updateChangedFlags(flags)
+        assertEquals(flags, result)
+    }
+}
\ No newline at end of file
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotStateListTests.kt b/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotStateListTests.kt
index b3cb799..d03fa3f 100644
--- a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotStateListTests.kt
+++ b/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotStateListTests.kt
@@ -600,6 +600,25 @@
         }
     }
 
+    @Test
+    fun currentValueOfTheList() {
+        val list = mutableStateListOf<Int>()
+        val lists = mutableListOf<List<Int>>()
+        repeat(100) {
+            Snapshot.withMutableSnapshot {
+                list.add(it)
+                lists.add(list.toList())
+            }
+        }
+        repeat(100) { index ->
+            val current = lists[index]
+            assertEquals(index + 1, current.size)
+            current.forEachIndexed { i, value ->
+                assertEquals(i, value)
+            }
+        }
+    }
+
     private fun <T> validate(list: MutableList<T>, block: (list: MutableList<T>) -> Unit) {
         val normalList = list.toMutableList()
         block(normalList)
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotStateMapTests.kt b/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotStateMapTests.kt
index 5e51bb1..70d93d7 100644
--- a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotStateMapTests.kt
+++ b/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotStateMapTests.kt
@@ -494,6 +494,25 @@
     }
 
     @Test
+    fun currentValueOfTheMap() {
+        val map = mutableStateMapOf<Int, String>()
+        val maps = mutableListOf<Map<Int, String>>()
+        repeat(100) {
+            Snapshot.withMutableSnapshot {
+                map[it] = it.toString()
+                maps.add(map.toMap())
+            }
+        }
+        repeat(100) { index ->
+            val current = maps[index]
+            assertEquals(index + 1, current.size)
+            repeat(index) {
+                assertEquals(current[it], it.toString())
+            }
+        }
+    }
+
+    @Test
     @IgnoreJsTarget
     @OptIn(ExperimentalCoroutinesApi::class)
     fun concurrentModificationInGlobal_put_new() = runTest {
diff --git a/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/gestures/ButtonMetaStateDemo.kt b/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/gestures/ButtonMetaStateDemo.kt
index 1e5c90c..3740ea8 100644
--- a/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/gestures/ButtonMetaStateDemo.kt
+++ b/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/gestures/ButtonMetaStateDemo.kt
@@ -17,7 +17,7 @@
 package androidx.compose.ui.demos.gestures
 
 import androidx.compose.foundation.background
-import androidx.compose.foundation.gestures.forEachGesture
+import androidx.compose.foundation.gestures.awaitEachGesture
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.Row
 import androidx.compose.foundation.layout.fillMaxWidth
@@ -71,45 +71,43 @@
 
     Column(
         Modifier.pointerInput(Unit) {
-            forEachGesture {
-                awaitPointerEventScope {
-                    do {
-                        val event = awaitPointerEvent()
-                        val metaState = event.keyboardModifiers
-                        control = metaState.isCtrlPressed
-                        alt = metaState.isAltPressed
-                        shift = metaState.isShiftPressed
-                        meta = metaState.isMetaPressed
-                        sym = metaState.isSymPressed
-                        function = metaState.isFunctionPressed
-                        numLock = metaState.isNumLockOn
-                        scrollLock = metaState.isScrollLockOn
-                        capsLock = metaState.isCapsLockOn
+            awaitEachGesture {
+                do {
+                    val event = awaitPointerEvent()
+                    val metaState = event.keyboardModifiers
+                    control = metaState.isCtrlPressed
+                    alt = metaState.isAltPressed
+                    shift = metaState.isShiftPressed
+                    meta = metaState.isMetaPressed
+                    sym = metaState.isSymPressed
+                    function = metaState.isFunctionPressed
+                    numLock = metaState.isNumLockOn
+                    scrollLock = metaState.isScrollLockOn
+                    capsLock = metaState.isCapsLockOn
 
-                        val buttons = event.buttons
-                        primary = buttons.isPrimaryPressed
-                        secondary = buttons.isSecondaryPressed
-                        tertiary = buttons.isTertiaryPressed
-                        back = buttons.isBackPressed
-                        forward = buttons.isForwardPressed
-                    } while (event.changes.any { it.pressed })
-                    // In the future, hover events should work also, but it isn't
-                    // implemented yet.
-                    control = false
-                    alt = false
-                    shift = false
-                    meta = false
-                    sym = false
-                    function = false
-                    numLock = false
-                    scrollLock = false
-                    capsLock = false
-                    primary = false
-                    secondary = false
-                    tertiary = false
-                    back = false
-                    forward = false
-                }
+                    val buttons = event.buttons
+                    primary = buttons.isPrimaryPressed
+                    secondary = buttons.isSecondaryPressed
+                    tertiary = buttons.isTertiaryPressed
+                    back = buttons.isBackPressed
+                    forward = buttons.isForwardPressed
+                } while (event.changes.any { it.pressed })
+                // In the future, hover events should work also, but it isn't
+                // implemented yet.
+                control = false
+                alt = false
+                shift = false
+                meta = false
+                sym = false
+                function = false
+                numLock = false
+                scrollLock = false
+                capsLock = false
+                primary = false
+                secondary = false
+                tertiary = false
+                back = false
+                forward = false
             }
         }
     ) {
diff --git a/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/gestures/DragSlopExceededGestureFilterDemo.kt b/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/gestures/DragSlopExceededGestureFilterDemo.kt
index 76e1e3f..4ffbac4 100644
--- a/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/gestures/DragSlopExceededGestureFilterDemo.kt
+++ b/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/gestures/DragSlopExceededGestureFilterDemo.kt
@@ -19,7 +19,7 @@
 import androidx.compose.foundation.background
 import androidx.compose.foundation.gestures.awaitFirstDown
 import androidx.compose.foundation.gestures.awaitTouchSlopOrCancellation
-import androidx.compose.foundation.gestures.forEachGesture
+import androidx.compose.foundation.gestures.awaitEachGesture
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.fillMaxSize
@@ -64,13 +64,11 @@
                 .wrapContentSize(Alignment.Center)
                 .size(192.dp)
                 .pointerInput(Unit) {
-                    forEachGesture {
-                        awaitPointerEventScope {
-                            val down = awaitFirstDown(requireUnconsumed = false)
-                            awaitTouchSlopOrCancellation(down.id) { change, _ ->
-                                alternativeColor.value = !alternativeColor.value
-                                change.consume()
-                            }
+                    awaitEachGesture {
+                        val down = awaitFirstDown(requireUnconsumed = false)
+                        awaitTouchSlopOrCancellation(down.id) { change, _ ->
+                            alternativeColor.value = !alternativeColor.value
+                            change.consume()
                         }
                     }
                 }
diff --git a/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/gestures/RawDragGestureDetectorDemo.kt b/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/gestures/RawDragGestureDetectorDemo.kt
index e48488c..004e2b7 100644
--- a/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/gestures/RawDragGestureDetectorDemo.kt
+++ b/compose/ui/ui/integration-tests/ui-demos/src/main/java/androidx/compose/ui/demos/gestures/RawDragGestureDetectorDemo.kt
@@ -18,8 +18,8 @@
 
 import androidx.compose.foundation.background
 import androidx.compose.foundation.gestures.awaitFirstDown
+import androidx.compose.foundation.gestures.awaitEachGesture
 import androidx.compose.foundation.gestures.drag
-import androidx.compose.foundation.gestures.forEachGesture
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.fillMaxSize
@@ -57,13 +57,11 @@
                 .offset(offsetX, offsetY)
                 .size(192.dp)
                 .pointerInput(Unit) {
-                    forEachGesture {
-                        awaitPointerEventScope {
-                            val down = awaitFirstDown(requireUnconsumed = false)
-                            drag(down.id) { change ->
-                                offset.value += change.positionChange()
-                                change.consume()
-                            }
+                    awaitEachGesture {
+                        val down = awaitFirstDown(requireUnconsumed = false)
+                        drag(down.id) { change ->
+                            offset.value += change.positionChange()
+                            change.consume()
                         }
                     }
                 }
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/layout/OnGloballyPositionedTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/layout/OnGloballyPositionedTest.kt
index 5588662..449627c 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/layout/OnGloballyPositionedTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/layout/OnGloballyPositionedTest.kt
@@ -344,12 +344,14 @@
         rule.setContent {
             Layout(
                 {},
-                modifier = Modifier.graphicsLayer {
-                    translationX = offsetX
-                }.onGloballyPositioned {
-                    coordinates = it
-                    positionedLatch.countDown()
-                }
+                modifier = Modifier
+                    .graphicsLayer {
+                        translationX = offsetX
+                    }
+                    .onGloballyPositioned {
+                        coordinates = it
+                        positionedLatch.countDown()
+                    }
             ) { _, _ ->
                 layout(100, 200) {}
             }
@@ -866,6 +868,63 @@
             assertNotNull(coords)
         }
     }
+
+    @Test
+    fun coordinatesAreNotAttachedWhenNodeIsRemovedFromHierarchy() {
+        var nodeIsNeeded by mutableStateOf(true)
+        lateinit var coordindates: LayoutCoordinates
+        rule.setContent {
+            if (nodeIsNeeded) {
+                Box(
+                    Modifier
+                        .onGloballyPositioned {
+                            // onGloballyPositioned is "attached" to the layout node itself
+                            // as there are no layout modifiers added after it
+                            coordindates = it
+                        }
+                )
+            }
+        }
+
+        rule.runOnIdle {
+            assertTrue(coordindates.isAttached)
+            nodeIsNeeded = false
+        }
+
+        rule.runOnIdle {
+            assertFalse(coordindates.isAttached)
+        }
+    }
+
+    @Test
+    fun coordinatesAreNotAttachedWhenModifierIsNotUsedAnymore() {
+        lateinit var coordindates: LayoutCoordinates
+        var modifier by mutableStateOf(
+            Modifier
+                .onGloballyPositioned {
+                    // onGloballyPositioned is "attached" to the next layout modifier
+                    coordindates = it
+                }
+                .layout { measurable, constraints ->
+                    val placeable = measurable.measure(constraints)
+                    layout(placeable.width, placeable.height) {
+                        placeable.place(0, 0)
+                    }
+                }
+        )
+        rule.setContent {
+            Box(modifier)
+        }
+
+        rule.runOnIdle {
+            assertTrue(coordindates.isAttached)
+            modifier = Modifier
+        }
+
+        rule.runOnIdle {
+            assertFalse(coordindates.isAttached)
+        }
+    }
 }
 
 @Composable
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/window/PositionInWindowTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/window/PositionInWindowTest.kt
index faf7cf4..5952258 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/window/PositionInWindowTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/window/PositionInWindowTest.kt
@@ -20,8 +20,8 @@
 import androidx.activity.ComponentActivity
 import androidx.compose.foundation.background
 import androidx.compose.foundation.gestures.awaitFirstDown
+import androidx.compose.foundation.gestures.awaitEachGesture
 import androidx.compose.foundation.gestures.drag
-import androidx.compose.foundation.gestures.forEachGesture
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.requiredSize
@@ -246,15 +246,13 @@
                             .background(Color.Black)
                             .testTag(smallBoxTag)
                             .pointerInput(Unit) {
-                                forEachGesture {
-                                    awaitPointerEventScope {
-                                        val down = awaitFirstDown()
-                                        var previous = down.position
-                                        drag(down.id) {
-                                            it.consume()
-                                            offset += it.position - previous
-                                            previous = it.position
-                                        }
+                                awaitEachGesture {
+                                    val down = awaitFirstDown()
+                                    var previous = down.position
+                                    drag(down.id) {
+                                        it.consume()
+                                        offset += it.position - previous
+                                        previous = it.position
                                     }
                                 }
                             }
diff --git a/compose/ui/ui/src/androidMain/res/values-af/strings.xml b/compose/ui/ui/src/androidMain/res/values-af/strings.xml
index 9307353..fdc24c8 100644
--- a/compose/ui/ui/src/androidMain/res/values-af/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-af/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Gedeeltelik gemerk"</string>
     <string name="on" msgid="8655164131929253426">"Aan"</string>
     <string name="off" msgid="875452955155264703">"Af"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Gekies"</string>
     <string name="not_selected" msgid="6610465462668679431">"Nie gekies nie"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> persent."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-am/strings.xml b/compose/ui/ui/src/androidMain/res/values-am/strings.xml
index afabf32..f79c871 100644
--- a/compose/ui/ui/src/androidMain/res/values-am/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-am/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"በከፊል የተፈተሸ"</string>
     <string name="on" msgid="8655164131929253426">"በርቷል"</string>
     <string name="off" msgid="875452955155264703">"ጠፍቷል"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"ተመርጧል"</string>
     <string name="not_selected" msgid="6610465462668679431">"ያልተመረጡ"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> በመቶ።"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-ar/strings.xml b/compose/ui/ui/src/androidMain/res/values-ar/strings.xml
index 0170f4f..fad9728 100644
--- a/compose/ui/ui/src/androidMain/res/values-ar/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-ar/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"تم وضع علامة في المربّع بشكل جزئي"</string>
     <string name="on" msgid="8655164131929253426">"مفعّل"</string>
     <string name="off" msgid="875452955155264703">"غير مفعّل"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"محدّد"</string>
     <string name="not_selected" msgid="6610465462668679431">"غير محدّد"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> في المئة."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-as/strings.xml b/compose/ui/ui/src/androidMain/res/values-as/strings.xml
index fd3d3d4..f8c3e9f 100644
--- a/compose/ui/ui/src/androidMain/res/values-as/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-as/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"আংশিকভাৱে পৰীক্ষা কৰা হৈছে"</string>
     <string name="on" msgid="8655164131929253426">"অন কৰা আছে"</string>
     <string name="off" msgid="875452955155264703">"অফ আছে"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"বাছনি কৰা হৈছে"</string>
     <string name="not_selected" msgid="6610465462668679431">"বাছনি কৰা হোৱা নাই"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> শতাংশ।"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-az/strings.xml b/compose/ui/ui/src/androidMain/res/values-az/strings.xml
index 5acabb9..ccc5845 100644
--- a/compose/ui/ui/src/androidMain/res/values-az/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-az/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Qismən yoxlanıb"</string>
     <string name="on" msgid="8655164131929253426">"Aktiv"</string>
     <string name="off" msgid="875452955155264703">"Deaktiv"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Seçilib"</string>
     <string name="not_selected" msgid="6610465462668679431">"Seçilməyib"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> faiz."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-b+sr+Latn/strings.xml b/compose/ui/ui/src/androidMain/res/values-b+sr+Latn/strings.xml
index 61a85cc..f46e2c2 100644
--- a/compose/ui/ui/src/androidMain/res/values-b+sr+Latn/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-b+sr+Latn/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Delimično označeno"</string>
     <string name="on" msgid="8655164131929253426">"Uključeno"</string>
     <string name="off" msgid="875452955155264703">"Isključeno"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Izabrano"</string>
     <string name="not_selected" msgid="6610465462668679431">"Nije izabrano"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> posto."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-be/strings.xml b/compose/ui/ui/src/androidMain/res/values-be/strings.xml
index 98e1f8c..b06f5bb 100644
--- a/compose/ui/ui/src/androidMain/res/values-be/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-be/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Выбрана часткова"</string>
     <string name="on" msgid="8655164131929253426">"Уключана"</string>
     <string name="off" msgid="875452955155264703">"Выключана"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Выбрана"</string>
     <string name="not_selected" msgid="6610465462668679431">"Не выбрана"</string>
     <string name="template_percent" msgid="5946805113151406391">"Працэнтаў: <xliff:g id="PERCENTAGE">%1$d</xliff:g>."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-bg/strings.xml b/compose/ui/ui/src/androidMain/res/values-bg/strings.xml
index 67e38ca..6ba44c3 100644
--- a/compose/ui/ui/src/androidMain/res/values-bg/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-bg/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Частично отметнато"</string>
     <string name="on" msgid="8655164131929253426">"Вкл."</string>
     <string name="off" msgid="875452955155264703">"Изкл."</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Избрано"</string>
     <string name="not_selected" msgid="6610465462668679431">"Не е избрано"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> процента."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-bn/strings.xml b/compose/ui/ui/src/androidMain/res/values-bn/strings.xml
index dffc528..7b73f87 100644
--- a/compose/ui/ui/src/androidMain/res/values-bn/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-bn/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"কয়েকটি বিকল্প বেছে নেওয়া হয়েছে"</string>
     <string name="on" msgid="8655164131929253426">"চালু আছে"</string>
     <string name="off" msgid="875452955155264703">"বন্ধ আছে"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"বেছে নেওয়া হয়েছে"</string>
     <string name="not_selected" msgid="6610465462668679431">"বেছে নেওয়া হয়নি"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> শতাংশ।"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-bs/strings.xml b/compose/ui/ui/src/androidMain/res/values-bs/strings.xml
index 9f847eb..413d38e 100644
--- a/compose/ui/ui/src/androidMain/res/values-bs/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-bs/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Djelimično označeno"</string>
     <string name="on" msgid="8655164131929253426">"Uključeno"</string>
     <string name="off" msgid="875452955155264703">"Isključeno"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Odabrano"</string>
     <string name="not_selected" msgid="6610465462668679431">"Nije odabrano"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> posto."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-ca/strings.xml b/compose/ui/ui/src/androidMain/res/values-ca/strings.xml
index 2971e2d..c99b821 100644
--- a/compose/ui/ui/src/androidMain/res/values-ca/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-ca/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Marcat parcialment"</string>
     <string name="on" msgid="8655164131929253426">"Activat"</string>
     <string name="off" msgid="875452955155264703">"Desactivat"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Seleccionat"</string>
     <string name="not_selected" msgid="6610465462668679431">"No seleccionat"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> per cent"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-cs/strings.xml b/compose/ui/ui/src/androidMain/res/values-cs/strings.xml
index 4b7be76..5acbcf2 100644
--- a/compose/ui/ui/src/androidMain/res/values-cs/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-cs/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Částečně zaškrtnuto"</string>
     <string name="on" msgid="8655164131929253426">"Zapnuto"</string>
     <string name="off" msgid="875452955155264703">"Vypnuto"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Vybráno"</string>
     <string name="not_selected" msgid="6610465462668679431">"Nevybráno"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> procent."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-da/strings.xml b/compose/ui/ui/src/androidMain/res/values-da/strings.xml
index 74d814d..3185d7d 100644
--- a/compose/ui/ui/src/androidMain/res/values-da/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-da/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Delvist markeret"</string>
     <string name="on" msgid="8655164131929253426">"Til"</string>
     <string name="off" msgid="875452955155264703">"Fra"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Valgt"</string>
     <string name="not_selected" msgid="6610465462668679431">"Ikke valgt"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> procent."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-de/strings.xml b/compose/ui/ui/src/androidMain/res/values-de/strings.xml
index 756ecac..57f93e9 100644
--- a/compose/ui/ui/src/androidMain/res/values-de/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-de/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Teilweise aktiviert"</string>
     <string name="on" msgid="8655164131929253426">"An"</string>
     <string name="off" msgid="875452955155264703">"Aus"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Ausgewählt"</string>
     <string name="not_selected" msgid="6610465462668679431">"Nicht ausgewählt"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> Prozent."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-el/strings.xml b/compose/ui/ui/src/androidMain/res/values-el/strings.xml
index 4f9e9b7..7b6d248 100644
--- a/compose/ui/ui/src/androidMain/res/values-el/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-el/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Έγινε μερικός έλεγχος"</string>
     <string name="on" msgid="8655164131929253426">"Ενεργό"</string>
     <string name="off" msgid="875452955155264703">"Ανενεργό"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Επιλεγμένο"</string>
     <string name="not_selected" msgid="6610465462668679431">"Δεν έχει επιλεχθεί"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> τοις εκατό."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-en-rAU/strings.xml b/compose/ui/ui/src/androidMain/res/values-en-rAU/strings.xml
index 3ba0ede..dbf19c5 100644
--- a/compose/ui/ui/src/androidMain/res/values-en-rAU/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-en-rAU/strings.xml
@@ -20,6 +20,7 @@
     <string name="indeterminate" msgid="7933458017204019916">"Partially ticked"</string>
     <string name="on" msgid="8655164131929253426">"On"</string>
     <string name="off" msgid="875452955155264703">"Off"</string>
+    <string name="switch_role" msgid="2561197295334830845">"Switch"</string>
     <string name="selected" msgid="6043586758067023">"Selected"</string>
     <string name="not_selected" msgid="6610465462668679431">"Not selected"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> per cent."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-en-rCA/strings.xml b/compose/ui/ui/src/androidMain/res/values-en-rCA/strings.xml
index 3ba0ede..dbf19c5 100644
--- a/compose/ui/ui/src/androidMain/res/values-en-rCA/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-en-rCA/strings.xml
@@ -20,6 +20,7 @@
     <string name="indeterminate" msgid="7933458017204019916">"Partially ticked"</string>
     <string name="on" msgid="8655164131929253426">"On"</string>
     <string name="off" msgid="875452955155264703">"Off"</string>
+    <string name="switch_role" msgid="2561197295334830845">"Switch"</string>
     <string name="selected" msgid="6043586758067023">"Selected"</string>
     <string name="not_selected" msgid="6610465462668679431">"Not selected"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> per cent."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-en-rGB/strings.xml b/compose/ui/ui/src/androidMain/res/values-en-rGB/strings.xml
index 3ba0ede..dbf19c5 100644
--- a/compose/ui/ui/src/androidMain/res/values-en-rGB/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-en-rGB/strings.xml
@@ -20,6 +20,7 @@
     <string name="indeterminate" msgid="7933458017204019916">"Partially ticked"</string>
     <string name="on" msgid="8655164131929253426">"On"</string>
     <string name="off" msgid="875452955155264703">"Off"</string>
+    <string name="switch_role" msgid="2561197295334830845">"Switch"</string>
     <string name="selected" msgid="6043586758067023">"Selected"</string>
     <string name="not_selected" msgid="6610465462668679431">"Not selected"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> per cent."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-en-rIN/strings.xml b/compose/ui/ui/src/androidMain/res/values-en-rIN/strings.xml
index 3ba0ede..dbf19c5 100644
--- a/compose/ui/ui/src/androidMain/res/values-en-rIN/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-en-rIN/strings.xml
@@ -20,6 +20,7 @@
     <string name="indeterminate" msgid="7933458017204019916">"Partially ticked"</string>
     <string name="on" msgid="8655164131929253426">"On"</string>
     <string name="off" msgid="875452955155264703">"Off"</string>
+    <string name="switch_role" msgid="2561197295334830845">"Switch"</string>
     <string name="selected" msgid="6043586758067023">"Selected"</string>
     <string name="not_selected" msgid="6610465462668679431">"Not selected"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> per cent."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-en-rXC/strings.xml b/compose/ui/ui/src/androidMain/res/values-en-rXC/strings.xml
index cdf7e28..ddd1168 100644
--- a/compose/ui/ui/src/androidMain/res/values-en-rXC/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-en-rXC/strings.xml
@@ -20,6 +20,7 @@
     <string name="indeterminate" msgid="7933458017204019916">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‏‎‎‏‎‏‎‎‏‏‏‎‎‎‎‎‏‎‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‎‏‎‎‎‏‎‏‏‎‎‏‏‎‎‎Partially checked‎‏‎‎‏‎"</string>
     <string name="on" msgid="8655164131929253426">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‏‎‏‎‏‎‏‎‎‎‏‏‏‏‎‏‎‏‏‏‏‎‎‎‏‎‎‎‏‎‏‏‎‎‎‎‏‏‎‎‏‏‎‎‎‏‏‎‎‏‎‎On‎‏‎‎‏‎"</string>
     <string name="off" msgid="875452955155264703">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‎‎‎‏‎‎‏‏‎‎‎‏‏‏‎‏‏‏‏‎‏‎‎‏‏‎‎‎‎‏‎‎‏‏‎‎‏‏‎‎‎‎‏‏‏‎‏‎‎‏‎‏‏‏‏‏‏‎Off‎‏‎‎‏‎"</string>
+    <string name="switch_role" msgid="2561197295334830845">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‏‏‎‎‎‏‎‏‏‎‎‏‏‎‎‏‏‎‏‎‏‏‏‏‎‏‏‎‎‏‏‎‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‏‏‏‏‏‏‎‏‎Switch‎‏‎‎‏‎"</string>
     <string name="selected" msgid="6043586758067023">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‎‏‎‏‏‎‏‎‏‎‏‏‏‏‎‎‎‏‎‎‏‏‏‎‎‎‎‏‏‎‎‎‏‏‏‏‎‎‎‏‎‎‏‎‎‎‎‏‏‎‏‎‎‏‏‏‏‎Selected‎‏‎‎‏‎"</string>
     <string name="not_selected" msgid="6610465462668679431">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‎‏‏‏‏‎‏‎‎‎‏‎‏‏‏‎‏‎‏‎‎‎‎‏‎‎‎‎‏‏‎‎‏‎‏‏‎‏‎‏‏‎‏‏‎‎‏‎‎‎‎‎‏‏‏‎Not selected‎‏‎‎‏‎"</string>
     <string name="template_percent" msgid="5946805113151406391">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‎‎‎‎‏‏‏‎‏‎‎‏‎‏‏‏‎‏‏‏‏‏‎‎‎‏‎‏‏‎‏‏‏‎‏‏‏‎‏‏‏‎‎‎‎‎‏‎‎‏‏‎‏‏‏‎‎‏‎‎‏‏‎<xliff:g id="PERCENTAGE">%1$d</xliff:g>‎‏‎‎‏‏‏‎ percent.‎‏‎‎‏‎"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-es-rUS/strings.xml b/compose/ui/ui/src/androidMain/res/values-es-rUS/strings.xml
index d310d00..dadaddb 100644
--- a/compose/ui/ui/src/androidMain/res/values-es-rUS/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-es-rUS/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Verificado parcialmente"</string>
     <string name="on" msgid="8655164131929253426">"Sí"</string>
     <string name="off" msgid="875452955155264703">"No"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Seleccionado"</string>
     <string name="not_selected" msgid="6610465462668679431">"Sin seleccionar"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> por ciento."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-es/strings.xml b/compose/ui/ui/src/androidMain/res/values-es/strings.xml
index 29f0179..a773841 100644
--- a/compose/ui/ui/src/androidMain/res/values-es/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-es/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Marcado parcialmente"</string>
     <string name="on" msgid="8655164131929253426">"Activado"</string>
     <string name="off" msgid="875452955155264703">"Desactivado"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Seleccionado"</string>
     <string name="not_selected" msgid="6610465462668679431">"No seleccionado"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> por cien."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-et/strings.xml b/compose/ui/ui/src/androidMain/res/values-et/strings.xml
index 2dca078..ef1e4d7 100644
--- a/compose/ui/ui/src/androidMain/res/values-et/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-et/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Osaliselt märgitud"</string>
     <string name="on" msgid="8655164131929253426">"Sees"</string>
     <string name="off" msgid="875452955155264703">"Väljas"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Valitud"</string>
     <string name="not_selected" msgid="6610465462668679431">"Pole valitud"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> protsenti."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-eu/strings.xml b/compose/ui/ui/src/androidMain/res/values-eu/strings.xml
index 55be3eb..3aa20572 100644
--- a/compose/ui/ui/src/androidMain/res/values-eu/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-eu/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Erdi-markatuta"</string>
     <string name="on" msgid="8655164131929253426">"Aktibatuta"</string>
     <string name="off" msgid="875452955155264703">"Desaktibatuta"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Hautatuta"</string>
     <string name="not_selected" msgid="6610465462668679431">"Hautatu gabe"</string>
     <string name="template_percent" msgid="5946805113151406391">"Ehuneko <xliff:g id="PERCENTAGE">%1$d</xliff:g>."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-fa/strings.xml b/compose/ui/ui/src/androidMain/res/values-fa/strings.xml
index 3f782d5..3aafd7b 100644
--- a/compose/ui/ui/src/androidMain/res/values-fa/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-fa/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"برخی موارد علامت‌گذاری شده است"</string>
     <string name="on" msgid="8655164131929253426">"روشن"</string>
     <string name="off" msgid="875452955155264703">"خاموش"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"انتخاب شد"</string>
     <string name="not_selected" msgid="6610465462668679431">"انتخاب‌نشده"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> درصد."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-fi/strings.xml b/compose/ui/ui/src/androidMain/res/values-fi/strings.xml
index 636843a..7deb591 100644
--- a/compose/ui/ui/src/androidMain/res/values-fi/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-fi/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Osittain tarkistettu"</string>
     <string name="on" msgid="8655164131929253426">"Päällä"</string>
     <string name="off" msgid="875452955155264703">"Pois"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Valittu"</string>
     <string name="not_selected" msgid="6610465462668679431">"Ei valittu"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> prosenttia"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-fr-rCA/strings.xml b/compose/ui/ui/src/androidMain/res/values-fr-rCA/strings.xml
index 9fbbc12..688970f 100644
--- a/compose/ui/ui/src/androidMain/res/values-fr-rCA/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-fr-rCA/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Partiellement vérifié"</string>
     <string name="on" msgid="8655164131929253426">"Activé"</string>
     <string name="off" msgid="875452955155264703">"Désactivé"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Sélectionné"</string>
     <string name="not_selected" msgid="6610465462668679431">"Non sélectionné"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> pour cent."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-fr/strings.xml b/compose/ui/ui/src/androidMain/res/values-fr/strings.xml
index 83442c7..4aa7769 100644
--- a/compose/ui/ui/src/androidMain/res/values-fr/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-fr/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Partiellement coché"</string>
     <string name="on" msgid="8655164131929253426">"Activé"</string>
     <string name="off" msgid="875452955155264703">"Désactivé"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Sélectionné"</string>
     <string name="not_selected" msgid="6610465462668679431">"Non sélectionné"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> pour cent."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-gl/strings.xml b/compose/ui/ui/src/androidMain/res/values-gl/strings.xml
index 393fe3c..b468cbd 100644
--- a/compose/ui/ui/src/androidMain/res/values-gl/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-gl/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Marcada parcialmente"</string>
     <string name="on" msgid="8655164131929253426">"Activado"</string>
     <string name="off" msgid="875452955155264703">"Desactivado"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Seleccionado"</string>
     <string name="not_selected" msgid="6610465462668679431">"Non seleccionado"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> por cento."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-gu/strings.xml b/compose/ui/ui/src/androidMain/res/values-gu/strings.xml
index bf68b3e..3bac7c8 100644
--- a/compose/ui/ui/src/androidMain/res/values-gu/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-gu/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"આંશિક રીતે ચેક કરેલા વિકલ્પો"</string>
     <string name="on" msgid="8655164131929253426">"ચાલુ છે"</string>
     <string name="off" msgid="875452955155264703">"બંધ છે"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"પસંદગી કરી"</string>
     <string name="not_selected" msgid="6610465462668679431">"પસંદગી કરી નથી"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> ટકા."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-hi/strings.xml b/compose/ui/ui/src/androidMain/res/values-hi/strings.xml
index a9abd97..22d723e 100644
--- a/compose/ui/ui/src/androidMain/res/values-hi/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-hi/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"कुछ विकल्पों को चुना गया"</string>
     <string name="on" msgid="8655164131929253426">"चालू है"</string>
     <string name="off" msgid="875452955155264703">"बंद है"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"चुना गया"</string>
     <string name="not_selected" msgid="6610465462668679431">"नहीं चुना गया"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> प्रतिशत."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-hr/strings.xml b/compose/ui/ui/src/androidMain/res/values-hr/strings.xml
index 89cb2a9..2a31947 100644
--- a/compose/ui/ui/src/androidMain/res/values-hr/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-hr/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Djelomično potvrđeno"</string>
     <string name="on" msgid="8655164131929253426">"Uključeno"</string>
     <string name="off" msgid="875452955155264703">"Isključeno"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Odabrano"</string>
     <string name="not_selected" msgid="6610465462668679431">"Nije odabrano"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> posto."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-hu/strings.xml b/compose/ui/ui/src/androidMain/res/values-hu/strings.xml
index 2747ec8..d25df63 100644
--- a/compose/ui/ui/src/androidMain/res/values-hu/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-hu/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Részlegesen ellenőrizve"</string>
     <string name="on" msgid="8655164131929253426">"Be"</string>
     <string name="off" msgid="875452955155264703">"Ki"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Kijelölve"</string>
     <string name="not_selected" msgid="6610465462668679431">"Nincs kijelölve"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> százalék."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-hy/strings.xml b/compose/ui/ui/src/androidMain/res/values-hy/strings.xml
index 5e57c00..6259e6a 100644
--- a/compose/ui/ui/src/androidMain/res/values-hy/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-hy/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Մասնակի նշված"</string>
     <string name="on" msgid="8655164131929253426">"Միացված է"</string>
     <string name="off" msgid="875452955155264703">"Անջատված է"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Ընտրված է"</string>
     <string name="not_selected" msgid="6610465462668679431">"Ընտրված չէ"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> տոկոս։"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-in/strings.xml b/compose/ui/ui/src/androidMain/res/values-in/strings.xml
index 47357b8..6d01d1c 100644
--- a/compose/ui/ui/src/androidMain/res/values-in/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-in/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Diperiksa sebagian"</string>
     <string name="on" msgid="8655164131929253426">"Aktif"</string>
     <string name="off" msgid="875452955155264703">"Nonaktif"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Dipilih"</string>
     <string name="not_selected" msgid="6610465462668679431">"Tidak dipilih"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> persen."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-is/strings.xml b/compose/ui/ui/src/androidMain/res/values-is/strings.xml
index e46b177..1d6c3f8 100644
--- a/compose/ui/ui/src/androidMain/res/values-is/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-is/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Hakað við að hluta til"</string>
     <string name="on" msgid="8655164131929253426">"Kveikt"</string>
     <string name="off" msgid="875452955155264703">"Slökkt"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Valið"</string>
     <string name="not_selected" msgid="6610465462668679431">"Ekki valið"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> prósent."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-it/strings.xml b/compose/ui/ui/src/androidMain/res/values-it/strings.xml
index 0cd3192..62d0db5 100644
--- a/compose/ui/ui/src/androidMain/res/values-it/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-it/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Elemento parzialmente selezionato"</string>
     <string name="on" msgid="8655164131929253426">"On"</string>
     <string name="off" msgid="875452955155264703">"Off"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Elemento selezionato"</string>
     <string name="not_selected" msgid="6610465462668679431">"Opzione non selezionata"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> percento."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-iw/strings.xml b/compose/ui/ui/src/androidMain/res/values-iw/strings.xml
index a2b4851..0ba5b78 100644
--- a/compose/ui/ui/src/androidMain/res/values-iw/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-iw/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"מסומנת חלקית"</string>
     <string name="on" msgid="8655164131929253426">"פועל"</string>
     <string name="off" msgid="875452955155264703">"כבוי"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"נבחר"</string>
     <string name="not_selected" msgid="6610465462668679431">"לא נבחר"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> אחוזים."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-ja/strings.xml b/compose/ui/ui/src/androidMain/res/values-ja/strings.xml
index be60e61..ef51947 100644
--- a/compose/ui/ui/src/androidMain/res/values-ja/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-ja/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"一部 ON"</string>
     <string name="on" msgid="8655164131929253426">"オン"</string>
     <string name="off" msgid="875452955155264703">"オフ"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"選択済み"</string>
     <string name="not_selected" msgid="6610465462668679431">"未選択"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>パーセント。"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-ka/strings.xml b/compose/ui/ui/src/androidMain/res/values-ka/strings.xml
index 5eb8939..0469e83 100644
--- a/compose/ui/ui/src/androidMain/res/values-ka/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-ka/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"ნაწილობრივ შემოწმებულია"</string>
     <string name="on" msgid="8655164131929253426">"ჩართული"</string>
     <string name="off" msgid="875452955155264703">"გამორთული"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"არჩეული"</string>
     <string name="not_selected" msgid="6610465462668679431">"არ არის არჩეული"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> პროცენტი."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-kk/strings.xml b/compose/ui/ui/src/androidMain/res/values-kk/strings.xml
index 82a029b..8238ed3 100644
--- a/compose/ui/ui/src/androidMain/res/values-kk/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-kk/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Жартылай белгіленді."</string>
     <string name="on" msgid="8655164131929253426">"Қосулы"</string>
     <string name="off" msgid="875452955155264703">"Өшірулі"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Таңдалды"</string>
     <string name="not_selected" msgid="6610465462668679431">"Таңдалмады"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> пайыз."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-km/strings.xml b/compose/ui/ui/src/androidMain/res/values-km/strings.xml
index 8e580fc..e4d6108 100644
--- a/compose/ui/ui/src/androidMain/res/values-km/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-km/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"បានធីកខ្លះ"</string>
     <string name="on" msgid="8655164131929253426">"បើក"</string>
     <string name="off" msgid="875452955155264703">"បិទ"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"បានជ្រើសរើស"</string>
     <string name="not_selected" msgid="6610465462668679431">"មិនបាន​ជ្រើសរើស"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> ភាគរយ។"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-kn/strings.xml b/compose/ui/ui/src/androidMain/res/values-kn/strings.xml
index 0b655e7..fd376f4 100644
--- a/compose/ui/ui/src/androidMain/res/values-kn/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-kn/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"ಭಾಗಶಃ ಪರೀಕ್ಷಿಸಲಾಗಿದೆ"</string>
     <string name="on" msgid="8655164131929253426">"ಆನ್ ಆಗಿದೆ"</string>
     <string name="off" msgid="875452955155264703">"ಆಫ್ ಆಗಿದೆ"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"ಆಯ್ಕೆಮಾಡಲಾಗಿದೆ"</string>
     <string name="not_selected" msgid="6610465462668679431">"ಆಯ್ಕೆ ಮಾಡಿಲ್ಲ"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> ಶೇಕಡಾ."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-ko/strings.xml b/compose/ui/ui/src/androidMain/res/values-ko/strings.xml
index bc50254..0080696 100644
--- a/compose/ui/ui/src/androidMain/res/values-ko/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-ko/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"일부 선택됨"</string>
     <string name="on" msgid="8655164131929253426">"켜짐"</string>
     <string name="off" msgid="875452955155264703">"꺼짐"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"선택됨"</string>
     <string name="not_selected" msgid="6610465462668679431">"선택되지 않음"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g>퍼센트"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-ky/strings.xml b/compose/ui/ui/src/androidMain/res/values-ky/strings.xml
index 9cde977..3562195 100644
--- a/compose/ui/ui/src/androidMain/res/values-ky/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-ky/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Жарым-жартылай текшерилди"</string>
     <string name="on" msgid="8655164131929253426">"Күйүк"</string>
     <string name="off" msgid="875452955155264703">"Өчүк"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Тандалды"</string>
     <string name="not_selected" msgid="6610465462668679431">"Тандалган жок"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> пайыз."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-lo/strings.xml b/compose/ui/ui/src/androidMain/res/values-lo/strings.xml
index 79b9834..142cad2 100644
--- a/compose/ui/ui/src/androidMain/res/values-lo/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-lo/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"ກວດສອບບາງສ່ວນແລ້ວ"</string>
     <string name="on" msgid="8655164131929253426">"ເປີດ"</string>
     <string name="off" msgid="875452955155264703">"ປິດ"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"ເລືອກແລ້ວ"</string>
     <string name="not_selected" msgid="6610465462668679431">"ບໍ່ໄດ້ເລືອກ"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> ເປີ​ເຊັນ."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-lt/strings.xml b/compose/ui/ui/src/androidMain/res/values-lt/strings.xml
index 3e28091..971ab24 100644
--- a/compose/ui/ui/src/androidMain/res/values-lt/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-lt/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Iš dalies pažymėta"</string>
     <string name="on" msgid="8655164131929253426">"Įjungta"</string>
     <string name="off" msgid="875452955155264703">"Išjungta"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Pasirinkta"</string>
     <string name="not_selected" msgid="6610465462668679431">"Nepasirinkta"</string>
     <string name="template_percent" msgid="5946805113151406391">"Procentų: <xliff:g id="PERCENTAGE">%1$d</xliff:g>."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-lv/strings.xml b/compose/ui/ui/src/androidMain/res/values-lv/strings.xml
index 3b92218..5ee2410 100644
--- a/compose/ui/ui/src/androidMain/res/values-lv/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-lv/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Daļēji atzīmēta"</string>
     <string name="on" msgid="8655164131929253426">"Ieslēgts"</string>
     <string name="off" msgid="875452955155264703">"Izslēgts"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Atlasīts"</string>
     <string name="not_selected" msgid="6610465462668679431">"Nav atlasīts"</string>
     <string name="template_percent" msgid="5946805113151406391">"Procenti: <xliff:g id="PERCENTAGE">%1$d</xliff:g>."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-mk/strings.xml b/compose/ui/ui/src/androidMain/res/values-mk/strings.xml
index 79eb9b2..a7622dd 100644
--- a/compose/ui/ui/src/androidMain/res/values-mk/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-mk/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Делумно проверено"</string>
     <string name="on" msgid="8655164131929253426">"Вклучено"</string>
     <string name="off" msgid="875452955155264703">"Исклучено"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Избрано"</string>
     <string name="not_selected" msgid="6610465462668679431">"Не е избрано"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> проценти."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-ml/strings.xml b/compose/ui/ui/src/androidMain/res/values-ml/strings.xml
index 0ad1342..cbef0ad 100644
--- a/compose/ui/ui/src/androidMain/res/values-ml/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-ml/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"ഭാഗികമായി ചെക്ക് മാർക്കിട്ടു"</string>
     <string name="on" msgid="8655164131929253426">"ഓണാണ്"</string>
     <string name="off" msgid="875452955155264703">"ഓഫാണ്"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"തിരഞ്ഞെടുത്തു"</string>
     <string name="not_selected" msgid="6610465462668679431">"തിരഞ്ഞെടുത്തില്ല"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> ശതമാനം."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-mn/strings.xml b/compose/ui/ui/src/androidMain/res/values-mn/strings.xml
index 7908393..9f35414 100644
--- a/compose/ui/ui/src/androidMain/res/values-mn/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-mn/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Хэсэгчлэн тэмдэглэсэн"</string>
     <string name="on" msgid="8655164131929253426">"Асаалттай"</string>
     <string name="off" msgid="875452955155264703">"Унтраалттай"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Сонгосон"</string>
     <string name="not_selected" msgid="6610465462668679431">"Сонгоогүй"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> хувь."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-mr/strings.xml b/compose/ui/ui/src/androidMain/res/values-mr/strings.xml
index 8075612..e722ee0 100644
--- a/compose/ui/ui/src/androidMain/res/values-mr/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-mr/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"अंशतः तपासले"</string>
     <string name="on" msgid="8655164131929253426">"सुरू आहे"</string>
     <string name="off" msgid="875452955155264703">"बंद आहे"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"निवडला"</string>
     <string name="not_selected" msgid="6610465462668679431">"निवडला नाही"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> टक्के."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-ms/strings.xml b/compose/ui/ui/src/androidMain/res/values-ms/strings.xml
index 2106240..d99b713 100644
--- a/compose/ui/ui/src/androidMain/res/values-ms/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-ms/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Sebahagiannya ditandai"</string>
     <string name="on" msgid="8655164131929253426">"Hidup"</string>
     <string name="off" msgid="875452955155264703">"Mati"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Dipilih"</string>
     <string name="not_selected" msgid="6610465462668679431">"Tidak dipilih"</string>
     <string name="template_percent" msgid="5946805113151406391">"Peratus <xliff:g id="PERCENTAGE">%1$d</xliff:g>."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-my/strings.xml b/compose/ui/ui/src/androidMain/res/values-my/strings.xml
index 378fdec..0d5485f 100644
--- a/compose/ui/ui/src/androidMain/res/values-my/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-my/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"တစ်ဝက်တစ်ပျက် စစ်ဆေးထားသည်"</string>
     <string name="on" msgid="8655164131929253426">"ဖွင့်"</string>
     <string name="off" msgid="875452955155264703">"ပိတ်"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"ရွေးထားသည်"</string>
     <string name="not_selected" msgid="6610465462668679431">"ရွေးမထားပါ"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> ရာခိုင်နှုန်း။"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-nb/strings.xml b/compose/ui/ui/src/androidMain/res/values-nb/strings.xml
index 635894a0..8d4e93f 100644
--- a/compose/ui/ui/src/androidMain/res/values-nb/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-nb/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Delvis avmerket"</string>
     <string name="on" msgid="8655164131929253426">"På"</string>
     <string name="off" msgid="875452955155264703">"Av"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Valgt"</string>
     <string name="not_selected" msgid="6610465462668679431">"Ikke valgt"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> prosent."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-ne/strings.xml b/compose/ui/ui/src/androidMain/res/values-ne/strings.xml
index 1cda72d..df51fa8 100644
--- a/compose/ui/ui/src/androidMain/res/values-ne/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-ne/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"आंशिक रूपमा जाँच गरिएको"</string>
     <string name="on" msgid="8655164131929253426">"अन छ"</string>
     <string name="off" msgid="875452955155264703">"अफ छ"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"चयन गरिएको छ"</string>
     <string name="not_selected" msgid="6610465462668679431">"चयन गरिएको छैन"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> प्रतिशत।"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-nl/strings.xml b/compose/ui/ui/src/androidMain/res/values-nl/strings.xml
index 3ebc974..e89dcb9 100644
--- a/compose/ui/ui/src/androidMain/res/values-nl/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-nl/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Gedeeltelijk aangevinkt"</string>
     <string name="on" msgid="8655164131929253426">"Aan"</string>
     <string name="off" msgid="875452955155264703">"Uit"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Geselecteerd"</string>
     <string name="not_selected" msgid="6610465462668679431">"Niet geselecteerd"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> procent."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-or/strings.xml b/compose/ui/ui/src/androidMain/res/values-or/strings.xml
index 39ddb0d..d90d95e 100644
--- a/compose/ui/ui/src/androidMain/res/values-or/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-or/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"ଆଶିଂକ ଭାବେ ଯାଞ୍ଚ କରାଯାଇଛି"</string>
     <string name="on" msgid="8655164131929253426">"ଚାଲୁ ଅଛି"</string>
     <string name="off" msgid="875452955155264703">"ବନ୍ଦ ଅଛି"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"ଚୟନିତ"</string>
     <string name="not_selected" msgid="6610465462668679431">"ଚୟନ କରାଯାଇନାହିଁ"</string>
     <string name="template_percent" msgid="5946805113151406391">"ଶତକଡ଼ା <xliff:g id="PERCENTAGE">%1$d</xliff:g>।"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-pa/strings.xml b/compose/ui/ui/src/androidMain/res/values-pa/strings.xml
index 6e7256a..fc09e06 100644
--- a/compose/ui/ui/src/androidMain/res/values-pa/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-pa/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"ਅੰਸ਼ਕ ਤੌਰ ਤੇ ਜਾਂਚ ਕੀਤੀ ਗਈ"</string>
     <string name="on" msgid="8655164131929253426">"ਚਾਲੂ ਹੈ"</string>
     <string name="off" msgid="875452955155264703">"ਬੰਦ ਹੈ"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"ਚੁਣੀ ਗਈ"</string>
     <string name="not_selected" msgid="6610465462668679431">"ਚੁਣੀ ਨਹੀਂ ਗਈ"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> ਫ਼ੀਸਦ।"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-pl/strings.xml b/compose/ui/ui/src/androidMain/res/values-pl/strings.xml
index 4167c3e..05e03d4 100644
--- a/compose/ui/ui/src/androidMain/res/values-pl/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-pl/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Częściowo zaznaczone"</string>
     <string name="on" msgid="8655164131929253426">"Włączono"</string>
     <string name="off" msgid="875452955155264703">"Wyłączono"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Wybrano"</string>
     <string name="not_selected" msgid="6610465462668679431">"Nie wybrano"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> procent."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-pt-rBR/strings.xml b/compose/ui/ui/src/androidMain/res/values-pt-rBR/strings.xml
index 2b2737c..dd27fd7 100644
--- a/compose/ui/ui/src/androidMain/res/values-pt-rBR/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-pt-rBR/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Parcialmente selecionada"</string>
     <string name="on" msgid="8655164131929253426">"Ativado"</string>
     <string name="off" msgid="875452955155264703">"Desativado"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Selecionado"</string>
     <string name="not_selected" msgid="6610465462668679431">"Não selecionado"</string>
     <!-- String.format failed for translation -->
diff --git a/compose/ui/ui/src/androidMain/res/values-pt-rPT/strings.xml b/compose/ui/ui/src/androidMain/res/values-pt-rPT/strings.xml
index d27d78d..c17e47d 100644
--- a/compose/ui/ui/src/androidMain/res/values-pt-rPT/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-pt-rPT/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Parcialmente selecionada"</string>
     <string name="on" msgid="8655164131929253426">"Ativado"</string>
     <string name="off" msgid="875452955155264703">"Desativado"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Selecionado"</string>
     <string name="not_selected" msgid="6610465462668679431">"Não selecionado"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> por cento."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-pt/strings.xml b/compose/ui/ui/src/androidMain/res/values-pt/strings.xml
index 2b2737c..dd27fd7 100644
--- a/compose/ui/ui/src/androidMain/res/values-pt/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-pt/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Parcialmente selecionada"</string>
     <string name="on" msgid="8655164131929253426">"Ativado"</string>
     <string name="off" msgid="875452955155264703">"Desativado"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Selecionado"</string>
     <string name="not_selected" msgid="6610465462668679431">"Não selecionado"</string>
     <!-- String.format failed for translation -->
diff --git a/compose/ui/ui/src/androidMain/res/values-ro/strings.xml b/compose/ui/ui/src/androidMain/res/values-ro/strings.xml
index 9a13ad7..d2fc7c3 100644
--- a/compose/ui/ui/src/androidMain/res/values-ro/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-ro/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Bifată parțial"</string>
     <string name="on" msgid="8655164131929253426">"Activat"</string>
     <string name="off" msgid="875452955155264703">"Dezactivat"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Selectat"</string>
     <string name="not_selected" msgid="6610465462668679431">"Neselectat"</string>
     <!-- String.format failed for translation -->
diff --git a/compose/ui/ui/src/androidMain/res/values-ru/strings.xml b/compose/ui/ui/src/androidMain/res/values-ru/strings.xml
index 0e23ca7..ce5034a 100644
--- a/compose/ui/ui/src/androidMain/res/values-ru/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-ru/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Отмечено частично"</string>
     <string name="on" msgid="8655164131929253426">"Включено"</string>
     <string name="off" msgid="875452955155264703">"Отключено"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Выбрано"</string>
     <string name="not_selected" msgid="6610465462668679431">"Не выбрано"</string>
     <string name="template_percent" msgid="5946805113151406391">"Процентов: <xliff:g id="PERCENTAGE">%1$d</xliff:g>."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-si/strings.xml b/compose/ui/ui/src/androidMain/res/values-si/strings.xml
index 1cbdac1..1259fd4 100644
--- a/compose/ui/ui/src/androidMain/res/values-si/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-si/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"අඩ වශයෙන් ලකුණු කළ"</string>
     <string name="on" msgid="8655164131929253426">"ක්‍රියාත්මකයි"</string>
     <string name="off" msgid="875452955155264703">"ක්‍රියාවිරහිතයි"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"තෝරන ලදි"</string>
     <string name="not_selected" msgid="6610465462668679431">"තෝරා නැත"</string>
     <string name="template_percent" msgid="5946805113151406391">"සියයට <xliff:g id="PERCENTAGE">%1$d</xliff:g>."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-sk/strings.xml b/compose/ui/ui/src/androidMain/res/values-sk/strings.xml
index ebef855..7dc2eb9 100644
--- a/compose/ui/ui/src/androidMain/res/values-sk/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-sk/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Čiastočne začiarknuté"</string>
     <string name="on" msgid="8655164131929253426">"Zapnuté"</string>
     <string name="off" msgid="875452955155264703">"Vypnuté"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Vybrané"</string>
     <string name="not_selected" msgid="6610465462668679431">"Nevybrané"</string>
     <!-- String.format failed for translation -->
diff --git a/compose/ui/ui/src/androidMain/res/values-sl/strings.xml b/compose/ui/ui/src/androidMain/res/values-sl/strings.xml
index 72bd314..3f92548 100644
--- a/compose/ui/ui/src/androidMain/res/values-sl/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-sl/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Delno potrjeno"</string>
     <string name="on" msgid="8655164131929253426">"Vklopljeno"</string>
     <string name="off" msgid="875452955155264703">"Izklopljeno"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Izbrano"</string>
     <string name="not_selected" msgid="6610465462668679431">"Ni izbrano"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> odstotkov"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-sq/strings.xml b/compose/ui/ui/src/androidMain/res/values-sq/strings.xml
index 7abc00b..0f20367 100644
--- a/compose/ui/ui/src/androidMain/res/values-sq/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-sq/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Pjesërisht e shënuar"</string>
     <string name="on" msgid="8655164131929253426">"Aktiv"</string>
     <string name="off" msgid="875452955155264703">"Joaktiv"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Zgjedhur"</string>
     <string name="not_selected" msgid="6610465462668679431">"Nuk është zgjedhur"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> për qind."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-sr/strings.xml b/compose/ui/ui/src/androidMain/res/values-sr/strings.xml
index 71ab0b4..22b948a 100644
--- a/compose/ui/ui/src/androidMain/res/values-sr/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-sr/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Делимично означено"</string>
     <string name="on" msgid="8655164131929253426">"Укључено"</string>
     <string name="off" msgid="875452955155264703">"Искључено"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Изабрано"</string>
     <string name="not_selected" msgid="6610465462668679431">"Није изабрано"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> посто."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-sv/strings.xml b/compose/ui/ui/src/androidMain/res/values-sv/strings.xml
index 775deb3..16c7bce 100644
--- a/compose/ui/ui/src/androidMain/res/values-sv/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-sv/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Delvis markerad"</string>
     <string name="on" msgid="8655164131929253426">"På"</string>
     <string name="off" msgid="875452955155264703">"Av"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Valt"</string>
     <string name="not_selected" msgid="6610465462668679431">"Inte vald"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> procent."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-sw/strings.xml b/compose/ui/ui/src/androidMain/res/values-sw/strings.xml
index 6e72ed8..14ceb69 100644
--- a/compose/ui/ui/src/androidMain/res/values-sw/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-sw/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Imekaguliwa kwa kiasi fulani"</string>
     <string name="on" msgid="8655164131929253426">"Imewashwa"</string>
     <string name="off" msgid="875452955155264703">"Imezimwa"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Umechagua"</string>
     <string name="not_selected" msgid="6610465462668679431">"Hujachagua"</string>
     <string name="template_percent" msgid="5946805113151406391">"Asilimia <xliff:g id="PERCENTAGE">%1$d</xliff:g>."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-ta/strings.xml b/compose/ui/ui/src/androidMain/res/values-ta/strings.xml
index b5af40e..87a04a5 100644
--- a/compose/ui/ui/src/androidMain/res/values-ta/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-ta/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"சில மட்டுமே தேர்ந்தெடுக்கப்பட்டுள்ளன"</string>
     <string name="on" msgid="8655164131929253426">"இயக்கப்பட்டுள்ளது"</string>
     <string name="off" msgid="875452955155264703">"முடக்கப்பட்டுள்ளது"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"தேர்ந்தெடுக்கப்பட்டுள்ளது"</string>
     <string name="not_selected" msgid="6610465462668679431">"தேர்ந்தெடுக்கப்படவில்லை"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> சதவீதம்."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-te/strings.xml b/compose/ui/ui/src/androidMain/res/values-te/strings.xml
index c7a73ea..8f7cb82 100644
--- a/compose/ui/ui/src/androidMain/res/values-te/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-te/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"పాక్షికంగా ఎంచుకోబడింది"</string>
     <string name="on" msgid="8655164131929253426">"ఆన్‌లో ఉంది"</string>
     <string name="off" msgid="875452955155264703">"ఆఫ్‌లో ఉంది"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"ఎంచుకోబడింది"</string>
     <string name="not_selected" msgid="6610465462668679431">"ఎంచుకోబడలేదు"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> శాతం."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-th/strings.xml b/compose/ui/ui/src/androidMain/res/values-th/strings.xml
index 9ed9c01..14f0dad 100644
--- a/compose/ui/ui/src/androidMain/res/values-th/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-th/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"เลือกบางส่วน"</string>
     <string name="on" msgid="8655164131929253426">"เปิด"</string>
     <string name="off" msgid="875452955155264703">"ปิด"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"เลือกไว้"</string>
     <string name="not_selected" msgid="6610465462668679431">"ไม่ได้เลือก"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> เปอร์เซ็นต์"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-tl/strings.xml b/compose/ui/ui/src/androidMain/res/values-tl/strings.xml
index f270d0f..7ccb028 100644
--- a/compose/ui/ui/src/androidMain/res/values-tl/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-tl/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Bahagyang may check"</string>
     <string name="on" msgid="8655164131929253426">"Naka-on"</string>
     <string name="off" msgid="875452955155264703">"Naka-off"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Napili"</string>
     <string name="not_selected" msgid="6610465462668679431">"Hindi napili"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> (na) porsyento."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-tr/strings.xml b/compose/ui/ui/src/androidMain/res/values-tr/strings.xml
index 047a5e7..54c7741 100644
--- a/compose/ui/ui/src/androidMain/res/values-tr/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-tr/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Kısmi olarak kontrol edildi"</string>
     <string name="on" msgid="8655164131929253426">"Açık"</string>
     <string name="off" msgid="875452955155264703">"Kapalı"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Seçili"</string>
     <string name="not_selected" msgid="6610465462668679431">"Seçili değil"</string>
     <string name="template_percent" msgid="5946805113151406391">"Yüzde <xliff:g id="PERCENTAGE">%1$d</xliff:g>."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-uk/strings.xml b/compose/ui/ui/src/androidMain/res/values-uk/strings.xml
index 86ac2d9..eefbf43 100644
--- a/compose/ui/ui/src/androidMain/res/values-uk/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-uk/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Частково вибрано"</string>
     <string name="on" msgid="8655164131929253426">"Увімкнено"</string>
     <string name="off" msgid="875452955155264703">"Вимкнено"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Вибрано"</string>
     <string name="not_selected" msgid="6610465462668679431">"Не вибрано"</string>
     <string name="template_percent" msgid="5946805113151406391">"Відсотків: <xliff:g id="PERCENTAGE">%1$d</xliff:g>."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-ur/strings.xml b/compose/ui/ui/src/androidMain/res/values-ur/strings.xml
index 29c81e4..ee5f584 100644
--- a/compose/ui/ui/src/androidMain/res/values-ur/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-ur/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"جزوی طور پر چیک کردہ"</string>
     <string name="on" msgid="8655164131929253426">"آن ہے"</string>
     <string name="off" msgid="875452955155264703">"آف ہے"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"منتخب کردہ"</string>
     <string name="not_selected" msgid="6610465462668679431">"غیر منتخب کردہ"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> فیصد۔"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-uz/strings.xml b/compose/ui/ui/src/androidMain/res/values-uz/strings.xml
index de15793..45bd195 100644
--- a/compose/ui/ui/src/androidMain/res/values-uz/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-uz/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Qisman belgilandi"</string>
     <string name="on" msgid="8655164131929253426">"Yoniq"</string>
     <string name="off" msgid="875452955155264703">"Oʻchiq"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Tanlangan"</string>
     <string name="not_selected" msgid="6610465462668679431">"Tanlanmagan"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> foiz."</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-vi/strings.xml b/compose/ui/ui/src/androidMain/res/values-vi/strings.xml
index 84a7a82..cf10928 100644
--- a/compose/ui/ui/src/androidMain/res/values-vi/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-vi/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Đã kiểm tra một phần"</string>
     <string name="on" msgid="8655164131929253426">"Đang bật"</string>
     <string name="off" msgid="875452955155264703">"Đang tắt"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Đã chọn"</string>
     <string name="not_selected" msgid="6610465462668679431">"Chưa chọn"</string>
     <!-- String.format failed for translation -->
diff --git a/compose/ui/ui/src/androidMain/res/values-zh-rCN/strings.xml b/compose/ui/ui/src/androidMain/res/values-zh-rCN/strings.xml
index ced331e..3504048 100644
--- a/compose/ui/ui/src/androidMain/res/values-zh-rCN/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-zh-rCN/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"部分选中"</string>
     <string name="on" msgid="8655164131929253426">"已开启"</string>
     <string name="off" msgid="875452955155264703">"已关闭"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"已选择"</string>
     <string name="not_selected" msgid="6610465462668679431">"未选择"</string>
     <string name="template_percent" msgid="5946805113151406391">"百分之 <xliff:g id="PERCENTAGE">%1$d</xliff:g>。"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-zh-rHK/strings.xml b/compose/ui/ui/src/androidMain/res/values-zh-rHK/strings.xml
index 53784a3..ce5d6c7 100644
--- a/compose/ui/ui/src/androidMain/res/values-zh-rHK/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-zh-rHK/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"部分剔咗"</string>
     <string name="on" msgid="8655164131929253426">"開"</string>
     <string name="off" msgid="875452955155264703">"閂"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"揀咗"</string>
     <string name="not_selected" msgid="6610465462668679431">"未揀"</string>
     <string name="template_percent" msgid="5946805113151406391">"百分之 <xliff:g id="PERCENTAGE">%1$d</xliff:g>。"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-zh-rTW/strings.xml b/compose/ui/ui/src/androidMain/res/values-zh-rTW/strings.xml
index cd21630..255d4a4 100644
--- a/compose/ui/ui/src/androidMain/res/values-zh-rTW/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-zh-rTW/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"部分檢查"</string>
     <string name="on" msgid="8655164131929253426">"已開啟"</string>
     <string name="off" msgid="875452955155264703">"已關閉"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"已選取"</string>
     <string name="not_selected" msgid="6610465462668679431">"未選取"</string>
     <string name="template_percent" msgid="5946805113151406391">"百分之 <xliff:g id="PERCENTAGE">%1$d</xliff:g>。"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-zu/strings.xml b/compose/ui/ui/src/androidMain/res/values-zu/strings.xml
index afe39be..b88cbb0 100644
--- a/compose/ui/ui/src/androidMain/res/values-zu/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-zu/strings.xml
@@ -20,6 +20,8 @@
     <string name="indeterminate" msgid="7933458017204019916">"Kuhlolwe kancane"</string>
     <string name="on" msgid="8655164131929253426">"Vuliwe"</string>
     <string name="off" msgid="875452955155264703">"Valiwe"</string>
+    <!-- no translation found for switch_role (2561197295334830845) -->
+    <skip />
     <string name="selected" msgid="6043586758067023">"Okukhethiwe"</string>
     <string name="not_selected" msgid="6610465462668679431">"Ayikhethiwe"</string>
     <string name="template_percent" msgid="5946805113151406391">"<xliff:g id="PERCENTAGE">%1$d</xliff:g> amaphesenti."</string>
diff --git a/credentials/credentials-play-services-auth/build.gradle b/credentials/credentials-play-services-auth/build.gradle
index bf17414..725338d 100644
--- a/credentials/credentials-play-services-auth/build.gradle
+++ b/credentials/credentials-play-services-auth/build.gradle
@@ -24,6 +24,8 @@
 
 dependencies {
     api(libs.kotlinStdlib)
+    api project(":credentials:credentials")
+
     // Add dependencies here
 }
 
diff --git a/credentials/credentials-play-services-auth/src/main/java/androidx/credentials/playservices/CredentialProviderPlayServicesImpl.kt b/credentials/credentials-play-services-auth/src/main/java/androidx/credentials/playservices/CredentialProviderPlayServicesImpl.kt
new file mode 100644
index 0000000..59ad679
--- /dev/null
+++ b/credentials/credentials-play-services-auth/src/main/java/androidx/credentials/playservices/CredentialProviderPlayServicesImpl.kt
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.credentials.playservices
+
+import android.app.Activity
+import android.os.CancellationSignal
+import androidx.credentials.CreateCredentialRequest
+import androidx.credentials.CreateCredentialResponse
+import androidx.credentials.CredentialManagerCallback
+import androidx.credentials.CredentialProvider
+import androidx.credentials.GetCredentialRequest
+import androidx.credentials.GetCredentialResponse
+import java.util.concurrent.Executor
+
+/**
+ * Entry point of all credential manager requests to the play-services-auth
+ * module.
+ *
+ * @hide
+ */
+class CredentialProviderPlayServicesImpl : CredentialProvider {
+    override fun onGetCredential(
+        request: GetCredentialRequest,
+        activity: Activity?,
+        cancellationSignal: CancellationSignal?,
+        executor: Executor,
+        callback: CredentialManagerCallback<GetCredentialResponse>
+    ) {
+        TODO("Not yet implemented")
+    }
+
+    override fun onCreateCredential(
+        request: CreateCredentialRequest,
+        activity: Activity?,
+        cancellationSignal: CancellationSignal?,
+        executor: Executor,
+        callback: CredentialManagerCallback<CreateCredentialResponse>
+    ) {
+        TODO("Not yet implemented")
+    }
+
+    override fun isAvailableOnDevice(): Boolean {
+        TODO("Not yet implemented")
+    }
+}
\ No newline at end of file
diff --git a/credentials/credentials/src/androidTest/java/androidx/credentials/CreatePublicKeyCredentialRequestPrivilegedTest.kt b/credentials/credentials/src/androidTest/java/androidx/credentials/CreatePublicKeyCredentialRequestPrivilegedTest.kt
index 9f127f8..faffbcb 100644
--- a/credentials/credentials/src/androidTest/java/androidx/credentials/CreatePublicKeyCredentialRequestPrivilegedTest.kt
+++ b/credentials/credentials/src/androidTest/java/androidx/credentials/CreatePublicKeyCredentialRequestPrivilegedTest.kt
@@ -18,7 +18,7 @@
 
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.SmallTest
-import com.google.common.truth.Truth
+import com.google.common.truth.Truth.assertThat
 import org.junit.Test
 import org.junit.runner.RunWith
 
@@ -43,7 +43,7 @@
             "JSON", "RP", "HASH"
         )
         val allowHybridActual = createPublicKeyCredentialRequestPrivileged.allowHybrid
-        Truth.assertThat(allowHybridActual).isTrue()
+        assertThat(allowHybridActual).isTrue()
     }
 
     @Test
@@ -54,7 +54,7 @@
             "RP", "Hash", allowHybridExpected
         )
         val allowHybridActual = createPublicKeyCredentialRequestPrivileged.allowHybrid
-        Truth.assertThat(allowHybridActual).isEqualTo(allowHybridExpected)
+        assertThat(allowHybridActual).isEqualTo(allowHybridExpected)
     }
 
     @Test
@@ -63,7 +63,7 @@
             "{\"Data\":5}",
             "RP", "HASH"
         ).build()
-        Truth.assertThat(defaultPrivilegedRequest.allowHybrid).isTrue()
+        assertThat(defaultPrivilegedRequest.allowHybrid).isTrue()
     }
 
     @Test
@@ -75,7 +75,7 @@
                 "RP", "Hash"
             ).setAllowHybrid(allowHybridExpected).build()
         val allowHybridActual = createPublicKeyCredentialRequestPrivileged.allowHybrid
-        Truth.assertThat(allowHybridActual).isEqualTo(allowHybridExpected)
+        assertThat(allowHybridActual).isEqualTo(allowHybridExpected)
     }
 
     @Test
@@ -84,7 +84,7 @@
         val createPublicKeyCredentialReqPriv =
             CreatePublicKeyCredentialRequestPrivileged(testJsonExpected, "RP", "HASH")
         val testJsonActual = createPublicKeyCredentialReqPriv.requestJson
-        Truth.assertThat(testJsonActual).isEqualTo(testJsonExpected)
+        assertThat(testJsonActual).isEqualTo(testJsonExpected)
     }
 
     @Test
@@ -96,7 +96,7 @@
                 testRpExpected, "X342%4dfd7&"
             )
         val testRpActual = createPublicKeyCredentialRequestPrivileged.rp
-        Truth.assertThat(testRpActual).isEqualTo(testRpExpected)
+        assertThat(testRpActual).isEqualTo(testRpExpected)
     }
 
     @Test
@@ -108,6 +108,6 @@
                 "RP", clientDataHashExpected
             )
         val clientDataHashActual = createPublicKeyCredentialRequestPrivileged.clientDataHash
-        Truth.assertThat(clientDataHashActual).isEqualTo(clientDataHashExpected)
+        assertThat(clientDataHashActual).isEqualTo(clientDataHashExpected)
     }
 }
\ No newline at end of file
diff --git a/credentials/credentials/src/androidTest/java/androidx/credentials/CreatePublicKeyCredentialRequestTest.kt b/credentials/credentials/src/androidTest/java/androidx/credentials/CreatePublicKeyCredentialRequestTest.kt
index 7cb51a7..4058526 100644
--- a/credentials/credentials/src/androidTest/java/androidx/credentials/CreatePublicKeyCredentialRequestTest.kt
+++ b/credentials/credentials/src/androidTest/java/androidx/credentials/CreatePublicKeyCredentialRequestTest.kt
@@ -18,7 +18,7 @@
 
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.SmallTest
-import com.google.common.truth.Truth
+import com.google.common.truth.Truth.assertThat
 import org.junit.Assert
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -48,7 +48,7 @@
             "JSON"
         )
         val allowHybridActual = createPublicKeyCredentialRequest.allowHybrid
-        Truth.assertThat(allowHybridActual).isTrue()
+        assertThat(allowHybridActual).isTrue()
     }
 
     @Test
@@ -59,7 +59,7 @@
             allowHybridExpected
         )
         val allowHybridActual = createPublicKeyCredentialRequest.allowHybrid
-        Truth.assertThat(allowHybridActual).isEqualTo(allowHybridExpected)
+        assertThat(allowHybridActual).isEqualTo(allowHybridExpected)
     }
 
     @Test
@@ -67,6 +67,6 @@
         val testJsonExpected = "{\"hi\":{\"there\":{\"lol\":\"Value\"}}}"
         val createPublicKeyCredentialReq = CreatePublicKeyCredentialRequest(testJsonExpected)
         val testJsonActual = createPublicKeyCredentialReq.requestJson
-        Truth.assertThat(testJsonActual).isEqualTo(testJsonExpected)
+        assertThat(testJsonActual).isEqualTo(testJsonExpected)
     }
 }
\ No newline at end of file
diff --git a/credentials/credentials/src/androidTest/java/androidx/credentials/CreatePublicKeyCredentialResponseTest.kt b/credentials/credentials/src/androidTest/java/androidx/credentials/CreatePublicKeyCredentialResponseTest.kt
index fb42fe6..9311d59 100644
--- a/credentials/credentials/src/androidTest/java/androidx/credentials/CreatePublicKeyCredentialResponseTest.kt
+++ b/credentials/credentials/src/androidTest/java/androidx/credentials/CreatePublicKeyCredentialResponseTest.kt
@@ -18,7 +18,7 @@
 
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.SmallTest
-import com.google.common.truth.Truth
+import com.google.common.truth.Truth.assertThat
 import org.junit.Assert
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -45,6 +45,6 @@
         val testJsonExpected = "{\"input\":5}"
         val createPublicKeyCredentialResponse = CreatePublicKeyCredentialResponse(testJsonExpected)
         val testJsonActual = createPublicKeyCredentialResponse.registrationResponseJson
-        Truth.assertThat(testJsonActual).isEqualTo(testJsonExpected)
+        assertThat(testJsonActual).isEqualTo(testJsonExpected)
     }
 }
\ No newline at end of file
diff --git a/credentials/credentials/src/androidTest/java/androidx/credentials/CredentialManagerJavaTest.java b/credentials/credentials/src/androidTest/java/androidx/credentials/CredentialManagerJavaTest.java
new file mode 100644
index 0000000..aa0aa6a
--- /dev/null
+++ b/credentials/credentials/src/androidTest/java/androidx/credentials/CredentialManagerJavaTest.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.credentials;
+
+import static org.junit.Assert.assertThrows;
+
+import android.content.Context;
+
+import androidx.annotation.NonNull;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.SmallTest;
+import androidx.test.platform.app.InstrumentationRegistry;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+public class CredentialManagerJavaTest {
+
+    private final Context mContext = InstrumentationRegistry.getInstrumentation().getContext();
+
+    private CredentialManager mCredentialManager;
+
+    @Before
+    public void setup() {
+        mCredentialManager = CredentialManager.create(mContext);
+    }
+
+    @Test
+    public void testCreateCredentialAsyc() {
+        assertThrows(UnsupportedOperationException.class,
+                () -> mCredentialManager.executeCreateCredentialAsync(
+                        new CreatePasswordRequest("test-user-id", "test-password"),
+                        null,
+                        null,
+                        Runnable::run,
+                        new CredentialManagerCallback<CreateCredentialResponse>() {
+                            @Override
+                            public void onError(@NonNull CredentialManagerException e) {}
+
+                            @Override
+                            public void onResult(CreateCredentialResponse result) {}
+                        })
+        );
+    }
+
+    @Test
+    public void testGetCredentialAsyc() {
+        assertThrows(UnsupportedOperationException.class,
+                () -> mCredentialManager.executeGetCredentialAsync(
+                        new GetCredentialRequest.Builder()
+                                .addGetCredentialOption(new GetPasswordOption())
+                                .build(),
+                        null,
+                        null,
+                        Runnable::run,
+                        new CredentialManagerCallback<GetCredentialResponse>() {
+                            @Override
+                            public void onError(@NonNull CredentialManagerException e) {}
+
+                            @Override
+                            public void onResult(GetCredentialResponse result) {}
+                        })
+        );
+    }
+}
diff --git a/credentials/credentials/src/androidTest/java/androidx/credentials/GetPublicKeyCredentialOptionPrivilegedTest.kt b/credentials/credentials/src/androidTest/java/androidx/credentials/GetPublicKeyCredentialOptionPrivilegedTest.kt
index 6c10626..024070d 100644
--- a/credentials/credentials/src/androidTest/java/androidx/credentials/GetPublicKeyCredentialOptionPrivilegedTest.kt
+++ b/credentials/credentials/src/androidTest/java/androidx/credentials/GetPublicKeyCredentialOptionPrivilegedTest.kt
@@ -18,7 +18,7 @@
 
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.SmallTest
-import com.google.common.truth.Truth
+import com.google.common.truth.Truth.assertThat
 import org.junit.Test
 import org.junit.runner.RunWith
 
@@ -43,7 +43,7 @@
             "JSON", "RP", "HASH"
         )
         val allowHybridActual = getPublicKeyCredentialOptionPrivileged.allowHybrid
-        Truth.assertThat(allowHybridActual).isTrue()
+        assertThat(allowHybridActual).isTrue()
     }
 
     @Test
@@ -53,7 +53,7 @@
             "JSON", "RP", "HASH", allowHybridExpected
         )
         val getAllowHybridActual = getPublicKeyCredentialOptPriv.allowHybrid
-        Truth.assertThat(getAllowHybridActual).isEqualTo(allowHybridExpected)
+        assertThat(getAllowHybridActual).isEqualTo(allowHybridExpected)
     }
 
     @Test
@@ -65,7 +65,7 @@
                 "RP", "Hash",
             ).setAllowHybrid(allowHybridExpected).build()
         val getAllowHybridActual = getPublicKeyCredentialOptionPrivileged.allowHybrid
-        Truth.assertThat(getAllowHybridActual).isEqualTo(allowHybridExpected)
+        assertThat(getAllowHybridActual).isEqualTo(allowHybridExpected)
     }
 
     @Test
@@ -74,7 +74,7 @@
             "{\"Data\":5}",
             "RP", "HASH"
         ).build()
-        Truth.assertThat(defaultPrivilegedRequest.allowHybrid).isTrue()
+        assertThat(defaultPrivilegedRequest.allowHybrid).isTrue()
     }
 
     @Test
@@ -83,7 +83,7 @@
         val getPublicKeyCredentialOptionPrivileged =
             GetPublicKeyCredentialOptionPrivileged(testJsonExpected, "RP", "HASH")
         val testJsonActual = getPublicKeyCredentialOptionPrivileged.requestJson
-        Truth.assertThat(testJsonActual).isEqualTo(testJsonExpected)
+        assertThat(testJsonActual).isEqualTo(testJsonExpected)
     }
 
     @Test
@@ -94,7 +94,7 @@
             testRpExpected, "X342%4dfd7&"
         )
         val testRpActual = getPublicKeyCredentialOptionPrivileged.rp
-        Truth.assertThat(testRpActual).isEqualTo(testRpExpected)
+        assertThat(testRpActual).isEqualTo(testRpExpected)
     }
 
     @Test
@@ -105,6 +105,6 @@
             "RP", clientDataHashExpected
         )
         val clientDataHashActual = getPublicKeyCredentialOptionPrivileged.clientDataHash
-        Truth.assertThat(clientDataHashActual).isEqualTo(clientDataHashExpected)
+        assertThat(clientDataHashActual).isEqualTo(clientDataHashExpected)
     }
 }
\ No newline at end of file
diff --git a/credentials/credentials/src/androidTest/java/androidx/credentials/GetPublicKeyCredentialOptionTest.kt b/credentials/credentials/src/androidTest/java/androidx/credentials/GetPublicKeyCredentialOptionTest.kt
index e9cfa7b..7cc8392 100644
--- a/credentials/credentials/src/androidTest/java/androidx/credentials/GetPublicKeyCredentialOptionTest.kt
+++ b/credentials/credentials/src/androidTest/java/androidx/credentials/GetPublicKeyCredentialOptionTest.kt
@@ -18,7 +18,7 @@
 
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.SmallTest
-import com.google.common.truth.Truth
+import com.google.common.truth.Truth.assertThat
 import org.junit.Assert
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -48,7 +48,7 @@
             "JSON"
         )
         val allowHybridActual = getPublicKeyCredentialOpt.allowHybrid
-        Truth.assertThat(allowHybridActual).isTrue()
+        assertThat(allowHybridActual).isTrue()
     }
 
     @Test
@@ -58,7 +58,7 @@
             "JSON", allowHybridExpected
         )
         val allowHybridActual = getPublicKeyCredentialOpt.allowHybrid
-        Truth.assertThat(allowHybridActual).isEqualTo(allowHybridExpected)
+        assertThat(allowHybridActual).isEqualTo(allowHybridExpected)
     }
 
     @Test
@@ -66,6 +66,6 @@
         val testJsonExpected = "{\"hi\":{\"there\":{\"lol\":\"Value\"}}}"
         val createPublicKeyCredentialReq = GetPublicKeyCredentialOption(testJsonExpected)
         val testJsonActual = createPublicKeyCredentialReq.requestJson
-        Truth.assertThat(testJsonActual).isEqualTo(testJsonExpected)
+        assertThat(testJsonActual).isEqualTo(testJsonExpected)
     }
 }
\ No newline at end of file
diff --git a/credentials/credentials/src/androidTest/java/androidx/credentials/PublicKeyCredentialJavaTest.java b/credentials/credentials/src/androidTest/java/androidx/credentials/PublicKeyCredentialJavaTest.java
index 57d09d4..86847fa 100644
--- a/credentials/credentials/src/androidTest/java/androidx/credentials/PublicKeyCredentialJavaTest.java
+++ b/credentials/credentials/src/androidTest/java/androidx/credentials/PublicKeyCredentialJavaTest.java
@@ -62,4 +62,11 @@
         String testJsonActual = publicKeyCredential.getAuthenticationResponseJson();
         assertThat(testJsonActual).isEqualTo(testJsonExpected);
     }
+
+    @Test
+    public void staticProperty_hasCorrectTypeConstantValue() {
+        String typeExpected = "androidx.credentials.TYPE_PUBLIC_KEY_CREDENTIAL";
+        String typeActual = PublicKeyCredential.TYPE_PUBLIC_KEY_CREDENTIAL;
+        assertThat(typeActual).isEqualTo(typeExpected);
+    }
 }
diff --git a/credentials/credentials/src/androidTest/java/androidx/credentials/PublicKeyCredentialTest.kt b/credentials/credentials/src/androidTest/java/androidx/credentials/PublicKeyCredentialTest.kt
index 2c3882f..47aecb4 100644
--- a/credentials/credentials/src/androidTest/java/androidx/credentials/PublicKeyCredentialTest.kt
+++ b/credentials/credentials/src/androidTest/java/androidx/credentials/PublicKeyCredentialTest.kt
@@ -18,7 +18,7 @@
 
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.SmallTest
-import com.google.common.truth.Truth
+import com.google.common.truth.Truth.assertThat
 import org.junit.Assert
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -50,6 +50,13 @@
         val testJsonExpected = "{\"hi\":{\"there\":{\"lol\":\"Value\"}}}"
         val publicKeyCredential = PublicKeyCredential(testJsonExpected)
         val testJsonActual = publicKeyCredential.authenticationResponseJson
-        Truth.assertThat(testJsonActual).isEqualTo(testJsonExpected)
+        assertThat(testJsonActual).isEqualTo(testJsonExpected)
+    }
+
+    @Test
+    fun staticProperty_hasCorrectTypeConstantValue() {
+        val typeExpected = "androidx.credentials.TYPE_PUBLIC_KEY_CREDENTIAL"
+        val typeActual = PublicKeyCredential.TYPE_PUBLIC_KEY_CREDENTIAL
+        assertThat(typeActual).isEqualTo(typeExpected)
     }
 }
\ No newline at end of file
diff --git a/credentials/credentials/src/main/java/androidx/credentials/CredentialProvider.kt b/credentials/credentials/src/main/java/androidx/credentials/CredentialProvider.kt
new file mode 100644
index 0000000..c0c51a0
--- /dev/null
+++ b/credentials/credentials/src/main/java/androidx/credentials/CredentialProvider.kt
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.credentials
+
+import android.app.Activity
+import android.os.CancellationSignal
+import java.util.concurrent.Executor
+
+/**
+ * Provider interface to be implemented by system credential providers that
+ * will fulfill Credential Manager requests.
+ *
+ * <p>Note that for SDK version 33 and below, this interface can be implemented by any OEM
+ * provider that wishes to return credentials. A provider must :
+ * <ol>
+ *     <li>Release a dedicated provider library that developers can add as a dependency.
+ *     <li>Include an empty CredentialProviderService in the provider library for the purposes of
+ *     exposing a meta-data tag in the Android Manifest file.
+ *     <li>Add the name of the class that is implementing this interface, as a value
+ *     to the meta-data tag described above.
+ *     <li>Make sure that there is only one provider implementation on the device. If the device
+ *     already has a provider installed, and the developer specifies more than one provider
+ *     dependencies, credential manager will error out.
+ *</ol>
+ *
+ * <p>For SDK version 34 and above, this interface will only be implemented by an internal
+ * class that will route all requests to the android framework. Providers will need
+ * to register directly with the framework to provide credentials.
+ *
+ * @hide
+ */
+interface CredentialProvider {
+    /**
+     * Invoked on a request to get a credential.
+     *
+     * @param request the request for getting the credential
+     * @param activity an optional activity used to potentially launch any UI needed
+     * @param cancellationSignal an optional signal that allows for cancelling this call
+     * @param executor the callback will take place on this executor
+     * @param callback the callback invoked when the request succeeds or fails
+     */
+    fun onGetCredential(
+        request: GetCredentialRequest,
+        activity: Activity?,
+        cancellationSignal: CancellationSignal?,
+        executor: Executor,
+        callback: CredentialManagerCallback<GetCredentialResponse>,
+    )
+
+    /**
+     * Invoked on a request to create a credential.
+     *
+     * @param request the request for creating the credential
+     * @param activity an optional activity used to potentially launch any UI needed
+     * @param cancellationSignal an optional signal that allows for cancelling this call
+     * @param executor the callback will take place on this executor
+     * @param callback the callback invoked when the request succeeds or fails
+     */
+    fun onCreateCredential(
+        request: CreateCredentialRequest,
+        activity: Activity?,
+        cancellationSignal: CancellationSignal?,
+        executor: Executor,
+        callback: CredentialManagerCallback<CreateCredentialResponse>,
+    )
+
+    /** Determines whether the provider is available on this device, or not. */
+    fun isAvailableOnDevice(): Boolean
+}
\ No newline at end of file
diff --git a/credentials/credentials/src/main/java/androidx/credentials/PublicKeyCredential.kt b/credentials/credentials/src/main/java/androidx/credentials/PublicKeyCredential.kt
index 16ecae6..ccfc29c 100644
--- a/credentials/credentials/src/main/java/androidx/credentials/PublicKeyCredential.kt
+++ b/credentials/credentials/src/main/java/androidx/credentials/PublicKeyCredential.kt
@@ -36,4 +36,9 @@
         require(authenticationResponseJson.isNotEmpty()) {
             "authentication response JSON must not be empty" }
     }
+    companion object {
+        /** The type value for public key credential related operations. */
+        const val TYPE_PUBLIC_KEY_CREDENTIAL: String =
+            "androidx.credentials.TYPE_PUBLIC_KEY_CREDENTIAL"
+    }
 }
\ No newline at end of file
diff --git a/datastore/datastore-core-okio/build.gradle b/datastore/datastore-core-okio/build.gradle
index a0ab55e..5353b43 100644
--- a/datastore/datastore-core-okio/build.gradle
+++ b/datastore/datastore-core-okio/build.gradle
@@ -27,9 +27,7 @@
 def enableNative = KmpPlatformsKt.enableNative(project)
 
 androidXMultiplatform {
-    jvm {
-        withJava()
-    }
+    jvm()
     mac()
     linux()
     ios()
diff --git a/datastore/datastore-core/build.gradle b/datastore/datastore-core/build.gradle
index 2c61d9d..26a1921 100644
--- a/datastore/datastore-core/build.gradle
+++ b/datastore/datastore-core/build.gradle
@@ -27,9 +27,7 @@
 def enableNative = KmpPlatformsKt.enableNative(project)
 
 androidXMultiplatform {
-    jvm {
-        withJava()
-    }
+    jvm()
     mac()
     linux()
     ios()
diff --git a/datastore/datastore-core/src/jvmMain/java/androidx/datastore/core/Actual.jvm.kt b/datastore/datastore-core/src/jvmMain/kotlin/androidx/datastore/core/Actual.jvm.kt
similarity index 100%
rename from datastore/datastore-core/src/jvmMain/java/androidx/datastore/core/Actual.jvm.kt
rename to datastore/datastore-core/src/jvmMain/kotlin/androidx/datastore/core/Actual.jvm.kt
diff --git a/datastore/datastore-core/src/jvmMain/java/androidx/datastore/core/DataStoreFactory.jvm.kt b/datastore/datastore-core/src/jvmMain/kotlin/androidx/datastore/core/DataStoreFactory.jvm.kt
similarity index 100%
rename from datastore/datastore-core/src/jvmMain/java/androidx/datastore/core/DataStoreFactory.jvm.kt
rename to datastore/datastore-core/src/jvmMain/kotlin/androidx/datastore/core/DataStoreFactory.jvm.kt
diff --git a/datastore/datastore-core/src/jvmMain/java/androidx/datastore/core/FileStorage.kt b/datastore/datastore-core/src/jvmMain/kotlin/androidx/datastore/core/FileStorage.kt
similarity index 100%
rename from datastore/datastore-core/src/jvmMain/java/androidx/datastore/core/FileStorage.kt
rename to datastore/datastore-core/src/jvmMain/kotlin/androidx/datastore/core/FileStorage.kt
diff --git a/datastore/datastore-core/src/jvmMain/java/androidx/datastore/core/Serializer.kt b/datastore/datastore-core/src/jvmMain/kotlin/androidx/datastore/core/Serializer.kt
similarity index 100%
rename from datastore/datastore-core/src/jvmMain/java/androidx/datastore/core/Serializer.kt
rename to datastore/datastore-core/src/jvmMain/kotlin/androidx/datastore/core/Serializer.kt
diff --git a/datastore/datastore-core/src/jvmMain/java/androidx/datastore/core/handlers/NoOpCorruptionHandler.jvm.kt b/datastore/datastore-core/src/jvmMain/kotlin/androidx/datastore/core/handlers/NoOpCorruptionHandler.jvm.kt
similarity index 100%
rename from datastore/datastore-core/src/jvmMain/java/androidx/datastore/core/handlers/NoOpCorruptionHandler.jvm.kt
rename to datastore/datastore-core/src/jvmMain/kotlin/androidx/datastore/core/handlers/NoOpCorruptionHandler.jvm.kt
diff --git a/datastore/datastore-core/src/jvmMain/java/androidx/datastore/core/handlers/ReplaceFileCorruptionHandler.jvm.kt b/datastore/datastore-core/src/jvmMain/kotlin/androidx/datastore/core/handlers/ReplaceFileCorruptionHandler.jvm.kt
similarity index 100%
rename from datastore/datastore-core/src/jvmMain/java/androidx/datastore/core/handlers/ReplaceFileCorruptionHandler.jvm.kt
rename to datastore/datastore-core/src/jvmMain/kotlin/androidx/datastore/core/handlers/ReplaceFileCorruptionHandler.jvm.kt
diff --git a/datastore/datastore-core/src/jvmTest/java/androidx/datastore/core/DataStoreFactoryTest.kt b/datastore/datastore-core/src/jvmTest/kotlin/androidx/datastore/core/DataStoreFactoryTest.kt
similarity index 100%
rename from datastore/datastore-core/src/jvmTest/java/androidx/datastore/core/DataStoreFactoryTest.kt
rename to datastore/datastore-core/src/jvmTest/kotlin/androidx/datastore/core/DataStoreFactoryTest.kt
diff --git a/datastore/datastore-core/src/jvmTest/java/androidx/datastore/core/FileStorageTest.kt b/datastore/datastore-core/src/jvmTest/kotlin/androidx/datastore/core/FileStorageTest.kt
similarity index 100%
rename from datastore/datastore-core/src/jvmTest/java/androidx/datastore/core/FileStorageTest.kt
rename to datastore/datastore-core/src/jvmTest/kotlin/androidx/datastore/core/FileStorageTest.kt
diff --git a/datastore/datastore-core/src/jvmTest/java/androidx/datastore/core/JvmTests.kt b/datastore/datastore-core/src/jvmTest/kotlin/androidx/datastore/core/JvmTests.kt
similarity index 100%
rename from datastore/datastore-core/src/jvmTest/java/androidx/datastore/core/JvmTests.kt
rename to datastore/datastore-core/src/jvmTest/kotlin/androidx/datastore/core/JvmTests.kt
diff --git a/datastore/datastore-core/src/jvmTest/java/androidx/datastore/core/SimpleActorTest.kt b/datastore/datastore-core/src/jvmTest/kotlin/androidx/datastore/core/SimpleActorTest.kt
similarity index 100%
rename from datastore/datastore-core/src/jvmTest/java/androidx/datastore/core/SimpleActorTest.kt
rename to datastore/datastore-core/src/jvmTest/kotlin/androidx/datastore/core/SimpleActorTest.kt
diff --git a/datastore/datastore-core/src/jvmTest/java/androidx/datastore/core/SingleProcessDataStoreStressTest.kt b/datastore/datastore-core/src/jvmTest/kotlin/androidx/datastore/core/SingleProcessDataStoreStressTest.kt
similarity index 100%
rename from datastore/datastore-core/src/jvmTest/java/androidx/datastore/core/SingleProcessDataStoreStressTest.kt
rename to datastore/datastore-core/src/jvmTest/kotlin/androidx/datastore/core/SingleProcessDataStoreStressTest.kt
diff --git a/datastore/datastore-core/src/jvmTest/java/androidx/datastore/core/handlers/ReplaceFileCorruptionHandlerTest.kt b/datastore/datastore-core/src/jvmTest/kotlin/androidx/datastore/core/handlers/ReplaceFileCorruptionHandlerTest.kt
similarity index 100%
rename from datastore/datastore-core/src/jvmTest/java/androidx/datastore/core/handlers/ReplaceFileCorruptionHandlerTest.kt
rename to datastore/datastore-core/src/jvmTest/kotlin/androidx/datastore/core/handlers/ReplaceFileCorruptionHandlerTest.kt
diff --git a/datastore/datastore-preferences-core/build.gradle b/datastore/datastore-preferences-core/build.gradle
index f26b3c1..539d5a9 100644
--- a/datastore/datastore-preferences-core/build.gradle
+++ b/datastore/datastore-preferences-core/build.gradle
@@ -29,9 +29,7 @@
 def enableNative = KmpPlatformsKt.enableNative(project)
 
 androidXMultiplatform {
-    jvm {
-        withJava()
-    }
+    jvm()
     mac()
     linux()
     ios()
diff --git a/datastore/datastore-preferences-proto/build.gradle b/datastore/datastore-preferences-proto/build.gradle
index 32535ef..a958754 100644
--- a/datastore/datastore-preferences-proto/build.gradle
+++ b/datastore/datastore-preferences-proto/build.gradle
@@ -47,6 +47,15 @@
     }
 }
 
+afterEvaluate {
+    lint {
+        lintOptions {
+            // protobuf generates unannotated and synthetic accessor methods
+            disable("UnknownNullness", "SyntheticAccessor")
+        }
+    }
+}
+
 // Create export artifact for for JarJaring
 def preferencesProtoJarJarTask = tasks.register("exportJar", Jar) {
     archiveBaseName.set("export")
diff --git a/datastore/datastore-proto/build.gradle b/datastore/datastore-proto/build.gradle
index 7341958..c5f600c 100644
--- a/datastore/datastore-proto/build.gradle
+++ b/datastore/datastore-proto/build.gradle
@@ -40,9 +40,6 @@
     protoc {
         artifact = libs.protobufCompiler.get()
     }
-    // Generates the java proto-lite code for the protos in this project. See
-    // https://github.com/google/protobuf-gradle-plugin#customizing-protobuf-compilation
-    // for more information.
     generateProtoTasks {
         all().each { task ->
             task.builtins {
@@ -65,4 +62,7 @@
 
 android {
     namespace "androidx.datastore.protodatastore"
+    lintOptions {
+        disable("SyntheticAccessor")
+    }
 }
diff --git a/development/build_log_simplifier/message-flakes.ignore b/development/build_log_simplifier/message-flakes.ignore
index 978b6c5..96dfd2b 100644
--- a/development/build_log_simplifier/message-flakes.ignore
+++ b/development/build_log_simplifier/message-flakes.ignore
@@ -147,3 +147,4 @@
 https://ge\.androidx\.dev/s/.*
 # androidx-demos:compileReleaseJavaWithJavac
 Note: \$SUPPORT/samples/Support[0-9]+Demos/src/main/java/com/example/android/supportv[0-9]+/util/DiffUtilActivity\.java uses unchecked or unsafe operations\.
+Calculating task graph as configuration cache cannot be reused because JVM has changed\.
diff --git a/development/build_log_simplifier/messages.ignore b/development/build_log_simplifier/messages.ignore
index 3732023..e339b4a 100644
--- a/development/build_log_simplifier/messages.ignore
+++ b/development/build_log_simplifier/messages.ignore
@@ -16,6 +16,8 @@
 at org\.jetbrains\.dokka\.Formats\.JavaLayoutHtmlFormatGenerator\.linkTo\(JavaLayoutHtmlGenerator\.kt:[0-9]+\)
 at jdk\.internal\.reflect\.GeneratedMethodAccessor[0-9]+\.invoke\(Unknown Source\)
 at com\.google\.inject\.internal\.DelegatingInvocationHandler\.invoke\(DelegatingInvocationHandler\.java:[0-9]+\)
+at jdk\.proxy[0-9]+/jdk\.proxy[0-9]+\.\$Proxy[0-9]+\.linkTo\(Unknown Source\)
+at jdk\.proxy[0-9]+/jdk\.proxy[0-9]+\.\$Proxy[0-9]+\.generate\(Unknown Source\)
 at com\.sun\.proxy\.\$Proxy[0-9]+\.linkTo\(Unknown Source\)
 at org\.jetbrains\.dokka\.Formats\.JavaLayoutHtmlFormatOutputBuilder\.a\(JavaLayoutHtmlFormatOutputBuilder\.kt:[0-9]+\)
 at org\.jetbrains\.dokka\.Formats\.JavaLayoutHtmlFormatOutputBuilder\.a\$default\(JavaLayoutHtmlFormatOutputBuilder\.kt:[0-9]+\)
@@ -312,98 +314,12 @@
 C/C\+\+: Building ver\.\: [0-9]+\.[0-9]+\.[0-9]+
 C/C\+\+: Packaging for\: (amd\-[0-9]+|armhf\-[0-9]+|x86\-[0-9]+)
 C/C\+\+: Compiling for ARM
-# > Task :glance:glance:reportLibraryMetrics
-Info: Stripped invalid locals information from [0-9]+ methods?\.
-Info: Methods with invalid locals information:
-void androidx\.tv\.foundation\.lazy\.list\.LazyListKt\.LazyList\(androidx\.compose\.ui\.Modifier, androidx\.tv\.foundation\.lazy\.list\.TvLazyListState, androidx\.compose\.foundation\.layout\.PaddingValues, boolean, boolean, boolean, androidx\.tv\.foundation\.PivotOffsets, androidx\.compose\.ui\.Alignment\$Horizontal, androidx\.compose\.foundation\.layout\.Arrangement\$Vertical, androidx\.compose\.ui\.Alignment\$Vertical, androidx\.compose\.foundation\.layout\.Arrangement\$Horizontal, kotlin\.jvm\.functions\.Function[0-9]+, androidx\.compose\.runtime\.Composer, int, int, int\)
-androidx\.compose\.ui\.Modifier androidx\.compose\.animation\.AnimationModifierKt\$animateContentSize\$[0-9]+\.invoke\(androidx\.compose\.ui\.Modifier, androidx\.compose\.runtime\.Composer, int\)
-androidx\.compose\.ui\.Modifier androidx\.compose\.material[0-9]+\.SliderKt\$sliderTapModifier\$[0-9]+\.invoke\(androidx\.compose\.ui\.Modifier, androidx\.compose\.runtime\.Composer, int\)
-androidx\.compose\.ui\.Modifier androidx\.compose\.animation\.demos\.layoutanimation\.AnimatedPlacementDemoKt\$animatePlacement\$[0-9]+\.invoke\(androidx\.compose\.ui\.Modifier, androidx\.compose\.runtime\.Composer, int\)
-androidx\.compose\.ui\.Modifier androidx\.compose\.ui\.input\.nestedscroll\.NestedScrollModifierKt\$nestedScroll\$[0-9]+\.invoke\(androidx\.compose\.ui\.Modifier, androidx\.compose\.runtime\.Composer, int\)
-void androidx\.wear\.compose\.material\.PickerKt\.Picker\-gjPtlC[0-9]+\(androidx\.wear\.compose\.material\.PickerState, java\.lang\.String, androidx\.compose\.ui\.Modifier, boolean, kotlin\.jvm\.functions\.Function[0-9]+, kotlin\.jvm\.functions\.Function[0-9]+, androidx\.wear\.compose\.material\.ScalingParams, float, float, long, androidx\.compose\.foundation\.gestures\.FlingBehavior, kotlin\.jvm\.functions\.Function[0-9]+, androidx\.compose\.runtime\.Composer, int, int, int\)
-# https://youtrack.jetbrains.com/issue/KT-52702/
-void androidx\.compose\.animation\.demos\.visualaid\.EasingFunctionDemoKt\.EasingInfoDemo\(androidx\.compose\.runtime\.Composer, int\)
-void androidx\.compose\.foundation\.text\.CoreTextFieldKt\.CoreTextField\(androidx\.compose\.ui\.text\.input\.TextFieldValue, kotlin\.jvm\.functions\.Function[0-9]+, androidx\.compose\.ui\.Modifier, androidx\.compose\.ui\.text\.TextStyle, androidx\.compose\.ui\.text\.input\.VisualTransformation, kotlin\.jvm\.functions\.Function[0-9]+, androidx\.compose\.foundation\.interaction\.MutableInteractionSource, androidx\.compose\.ui\.graphics\.Brush, boolean, int, androidx\.compose\.ui\.text\.input\.ImeOptions, androidx\.compose\.foundation\.text\.KeyboardActions, boolean, boolean, kotlin\.jvm\.functions\.Function[0-9]+, androidx\.compose\.runtime\.Composer, int, int, int\)
-void androidx\.compose\.material\.ModalBottomSheetKt\.ModalBottomSheetLayout\-BzaUkTc\(kotlin\.jvm\.functions\.Function[0-9]+, androidx\.compose\.ui\.Modifier, androidx\.compose\.material\.ModalBottomSheetState, androidx\.compose\.ui\.graphics\.Shape, float, long, long, long, kotlin\.jvm\.functions\.Function[0-9]+, androidx\.compose\.runtime\.Composer, int, int\)
-java\.lang\.Object androidx\.compose\.runtime\.external\.kotlinx\.collections\.immutable\.implementations\.immutableSet\.TrieNode\.mutableRetainAll\(androidx\.compose\.runtime\.external\.kotlinx\.collections\.immutable\.implementations\.immutableSet\.TrieNode, int, androidx\.compose\.runtime\.external\.kotlinx\.collections\.immutable\.internal\.DeltaCounter, androidx\.compose\.runtime\.external\.kotlinx\.collections\.immutable\.implementations\.immutableSet\.PersistentHashSetBuilder\)
-void androidx\.compose\.integration\.docs\.layout\.MaterialSnippet[0-9]+\.MyBackdrop\(androidx\.compose\.runtime\.Composer, int\)
-void androidx\.wear\.compose\.material\.samples\.PickerSampleKt\.OptionChangePicker\(androidx\.compose\.runtime\.Composer, int\)
-void androidx\.compose\.foundation\.samples\.MutatorMutexSamplesKt\.mutatorMutexStateObject\$ScrollControls\(androidx\.compose\.foundation\.samples\.MutatorMutexSamplesKt\$mutatorMutexStateObject\$ScrollState, androidx\.compose\.runtime\.Composer, int\)
-void androidx\.compose\.material\.samples\.DrawerSamplesKt\.ModalDrawerSample\(androidx\.compose\.runtime\.Composer, int\)
-void androidx\.compose\.material[0-9]+\.samples\.DrawerSamplesKt\.ModalNavigationDrawerSample\(androidx\.compose\.runtime\.Composer, int\)
-void androidx\.compose\.ui\.samples\.ComposableSingletons\$FocusAwareInputSamplesKt\$lambda\-[0-9]+\$[0-9]+\.invoke\(androidx\.compose\.runtime\.Composer, int\)
-void androidx\.paging\.compose\.demos\.room\.PagingRoomSampleKt\.PagingRoomDemo\(androidx\.compose\.runtime\.Composer, int\)
-void androidx\.compose\.material[0-9]+\.catalog\.library\.ui\.common\.CatalogScaffoldKt\.CatalogScaffold\(java\.lang\.String, boolean, androidx\.compose\.material[0-9]+\.catalog\.library\.model\.Theme, java\.lang\.String, java\.lang\.String, java\.lang\.String, java\.lang\.String, java\.lang\.String, java\.lang\.String, java\.lang\.String, kotlin\.jvm\.functions\.Function[0-9]+, kotlin\.jvm\.functions\.Function[0-9]+, kotlin\.jvm\.functions\.Function[0-9]+, androidx\.compose\.runtime\.Composer, int, int, int\)
-void androidx\.compose\.material\.catalog\.library\.ui\.common\.CatalogScaffoldKt\.CatalogScaffold\(java\.lang\.String, boolean, androidx\.compose\.material\.catalog\.library\.model\.Theme, java\.lang\.String, java\.lang\.String, java\.lang\.String, java\.lang\.String, java\.lang\.String, java\.lang\.String, java\.lang\.String, kotlin\.jvm\.functions\.Function[0-9]+, kotlin\.jvm\.functions\.Function[0-9]+, kotlin\.jvm\.functions\.Function[0-9]+, androidx\.compose\.runtime\.Composer, int, int, int\)
-void androidx\.compose\.foundation\.demos\.relocation\.BringIntoViewAndroidInteropDemoKt\.BringIntoViewAndroidInteropDemo\(androidx\.compose\.runtime\.Composer, int\)
-void androidx\.compose\.ui\.demos\.keyinput\.InterceptEnterToSendMessageDemoKt\.InterceptEnterToSendMessageDemo\(androidx\.compose\.runtime\.Composer, int\)
-Information in locals\-table is invalid with respect to the stack map table\. Local refers to non\-present stack map type for register: [0-9]+ with constraint [\-A-Z]*\.
-void androidx\.tv\.foundation\.lazy\.grid\.LazyGridKt\.LazyGrid\(androidx\.compose\.ui\.Modifier, androidx\.tv\.foundation\.lazy\.grid\.TvLazyGridState, kotlin\.jvm\.functions\.Function[0-9]+, androidx\.compose\.foundation\.layout\.PaddingValues, boolean, boolean, boolean, androidx\.compose\.foundation\.layout\.Arrangement\$Vertical, androidx\.compose\.foundation\.layout\.Arrangement\$Horizontal, androidx\.tv\.foundation\.PivotOffsets, kotlin\.jvm\.functions\.Function[0-9]+, androidx\.compose\.runtime\.Composer, int, int, int\)
-androidx\.compose\.ui\.Modifier androidx\.compose\.material\.SliderKt\$sliderTapModifier\$[0-9]+\.invoke\(androidx\.compose\.ui\.Modifier, androidx\.compose\.runtime\.Composer, int\)
-androidx\.compose\.ui\.Modifier androidx\.compose\.foundation\.FocusableKt\$focusable\$[0-9]+\.invoke\(androidx\.compose\.ui\.Modifier, androidx\.compose\.runtime\.Composer, int\)
-androidx\.compose\.ui\.Modifier androidx\.compose\.foundation\.ScrollKt\$scroll\$[0-9]+\.invoke\(androidx\.compose\.ui\.Modifier, androidx\.compose\.runtime\.Composer, int\)
-androidx\.compose\.ui\.Modifier androidx\.compose\.foundation\.text\.TextFieldPressGestureFilterKt\$tapPressTextFieldModifier\$[0-9]+\.invoke\(androidx\.compose\.ui\.Modifier, androidx\.compose\.runtime\.Composer, int\)
-androidx\.compose\.ui\.Modifier androidx\.compose\.foundation\.gestures\.ScrollableKt\$scrollable\$[0-9]+\.invoke\(androidx\.compose\.ui\.Modifier, androidx\.compose\.runtime\.Composer, int\)
-androidx\.compose\.ui\.Modifier androidx\.compose\.foundation\.HoverableKt\$hoverable\$[0-9]+\.invoke\(androidx\.compose\.ui\.Modifier, androidx\.compose\.runtime\.Composer, int\)
-androidx\.compose\.ui\.Modifier androidx\.compose\.ui\.samples\.OnPlacedSamplesKt\$OnPlaced\$animatePlacement\$[0-9]+\.invoke\(androidx\.compose\.ui\.Modifier, androidx\.compose\.runtime\.Composer, int\)
-androidx\.compose\.foundation\.demos\.GridDragDropState androidx\.compose\.foundation\.demos\.LazyGridDragAndDropDemoKt\.rememberGridDragDropState\(androidx\.compose\.foundation\.lazy\.grid\.LazyGridState, kotlin\.jvm\.functions\.Function[0-9]+, androidx\.compose\.runtime\.Composer, int\)
-void androidx\.compose\.foundation\.demos\.relocation\.BringNestedIntoViewDemoKt\.ControlGrid\(int, int, java\.util\.List, androidx\.compose\.runtime\.Composer, int\)
-androidx\.compose\.foundation\.demos\.DragDropState androidx\.compose\.foundation\.demos\.LazyColumnDragAndDropDemoKt\.rememberDragDropState\(androidx\.compose\.foundation\.lazy\.LazyListState, kotlin\.jvm\.functions\.Function[0-9]+, androidx\.compose\.runtime\.Composer, int\)
-void androidx\.compose\.animation\.demos\.visualaid\.EasingFunctionDemoKt\.EasingGraph\(androidx\.compose\.animation\.core\.Easing, androidx\.compose\.ui\.Modifier, kotlinx\.coroutines\.CoroutineScope, androidx\.compose\.runtime\.Composer, int, int\)
-void androidx\.compose\.animation\.demos\.gesture\.FancyScrollingDemoKt\.FancyScrollingDemo\(androidx\.compose\.runtime\.Composer, int\)
-void androidx\.compose\.animation\.demos\.suspendfun\.SuspendDoubleTapToLikeDemoKt\.SuspendDoubleTapToLikeDemo\(androidx\.compose\.runtime\.Composer, int\)
-void androidx\.compose\.foundation\.lazy\.grid\.LazyGridKt\.LazyGrid\(androidx\.compose\.ui\.Modifier, androidx\.compose\.foundation\.lazy\.grid\.LazyGridState, kotlin\.jvm\.functions\.Function[0-9]+, androidx\.compose\.foundation\.layout\.PaddingValues, boolean, boolean, androidx\.compose\.foundation\.gestures\.FlingBehavior, boolean, androidx\.compose\.foundation\.layout\.Arrangement\$Vertical, androidx\.compose\.foundation\.layout\.Arrangement\$Horizontal, kotlin\.jvm\.functions\.Function[0-9]+, androidx\.compose\.runtime\.Composer, int, int, int\)
-void androidx\.compose\.foundation\.lazy\.LazyListKt\.LazyList\(androidx\.compose\.ui\.Modifier, androidx\.compose\.foundation\.lazy\.LazyListState, androidx\.compose\.foundation\.layout\.PaddingValues, boolean, boolean, androidx\.compose\.foundation\.gestures\.FlingBehavior, boolean, androidx\.compose\.ui\.Alignment\$Horizontal, androidx\.compose\.foundation\.layout\.Arrangement\$Vertical, androidx\.compose\.ui\.Alignment\$Vertical, androidx\.compose\.foundation\.layout\.Arrangement\$Horizontal, kotlin\.jvm\.functions\.Function[0-9]+, androidx\.compose\.runtime\.Composer, int, int, int\)
-void androidx\.compose\.material\.BackdropScaffoldKt\$BackdropScaffold\$[0-9]+\.invoke\(androidx\.compose\.runtime\.Composer, int\)
-void androidx\.compose\.material\.SliderKt\$Slider\$[0-9]+\.invoke\(androidx\.compose\.foundation\.layout\.BoxWithConstraintsScope, androidx\.compose\.runtime\.Composer, int\)
-void androidx\.compose\.material\.TabRowKt\$ScrollableTabRow\$[0-9]+\.invoke\(androidx\.compose\.runtime\.Composer, int\)
-void androidx\.compose\.material\.SliderKt\$RangeSlider\$[0-9]+\.invoke\(androidx\.compose\.foundation\.layout\.BoxWithConstraintsScope, androidx\.compose\.runtime\.Composer, int\)
-void androidx\.compose\.material\.DrawerKt\.ModalDrawer\-Gs[0-9]+lGvM\(kotlin\.jvm\.functions\.Function[0-9]+, androidx\.compose\.ui\.Modifier, androidx\.compose\.material\.DrawerState, boolean, androidx\.compose\.ui\.graphics\.Shape, float, long, long, long, kotlin\.jvm\.functions\.Function[0-9]+, androidx\.compose\.runtime\.Composer, int, int\)
-void androidx\.compose\.material\.DrawerKt\.BottomDrawer\-Gs[0-9]+lGvM\(kotlin\.jvm\.functions\.Function[0-9]+, androidx\.compose\.ui\.Modifier, androidx\.compose\.material\.BottomDrawerState, boolean, androidx\.compose\.ui\.graphics\.Shape, float, long, long, long, kotlin\.jvm\.functions\.Function[0-9]+, androidx\.compose\.runtime\.Composer, int, int\)
-void androidx\.compose\.material\.BottomSheetScaffoldKt\.BottomSheetScaffold\-bGncdBI\(kotlin\.jvm\.functions\.Function[0-9]+, androidx\.compose\.ui\.Modifier, androidx\.compose\.material\.BottomSheetScaffoldState, kotlin\.jvm\.functions\.Function[0-9]+, kotlin\.jvm\.functions\.Function[0-9]+, kotlin\.jvm\.functions\.Function[0-9]+, int, boolean, androidx\.compose\.ui\.graphics\.Shape, float, long, long, float, kotlin\.jvm\.functions\.Function[0-9]+, boolean, androidx\.compose\.ui\.graphics\.Shape, float, long, long, long, long, long, kotlin\.jvm\.functions\.Function[0-9]+, androidx\.compose\.runtime\.Composer, int, int, int, int\)
-java\.lang\.Object androidx\.compose\.runtime\.external\.kotlinx\.collections\.immutable\.implementations\.immutableSet\.TrieNode\.mutableRemoveAll\(androidx\.compose\.runtime\.external\.kotlinx\.collections\.immutable\.implementations\.immutableSet\.TrieNode, int, androidx\.compose\.runtime\.external\.kotlinx\.collections\.immutable\.internal\.DeltaCounter, androidx\.compose\.runtime\.external\.kotlinx\.collections\.immutable\.implementations\.immutableSet\.PersistentHashSetBuilder\)
-void androidx\.compose\.material[0-9]+\.NavigationDrawerKt\.ModalNavigationDrawer\-Gs[0-9]+lGvM\(kotlin\.jvm\.functions\.Function[0-9]+, androidx\.compose\.ui\.Modifier, androidx\.compose\.material[0-9]+\.DrawerState, boolean, androidx\.compose\.ui\.graphics\.Shape, float, long, long, long, kotlin\.jvm\.functions\.Function[0-9]+, androidx\.compose\.runtime\.Composer, int, int\)
-void androidx\.compose\.material[0-9]+\.SwitchKt\.Switch\(boolean, kotlin\.jvm\.functions\.Function[0-9]+, androidx\.compose\.ui\.Modifier, kotlin\.jvm\.functions\.Function[0-9]+, boolean, androidx\.compose\.foundation\.interaction\.MutableInteractionSource, androidx\.compose\.material[0-9]+\.SwitchColors, androidx\.compose\.runtime\.Composer, int, int\)
-void androidx\.compose\.material[0-9]+\.NavigationDrawerKt\.DismissibleNavigationDrawer\-ZEC[0-9]+aPw\(kotlin\.jvm\.functions\.Function[0-9]+, androidx\.compose\.ui\.Modifier, androidx\.compose\.material[0-9]+\.DrawerState, boolean, androidx\.compose\.ui\.graphics\.Shape, float, long, long, kotlin\.jvm\.functions\.Function[0-9]+, androidx\.compose\.runtime\.Composer, int, int\)
-void androidx\.compose\.material[0-9]+\.TabRowKt\$ScrollableTabRow\$[0-9]+\.invoke\(androidx\.compose\.runtime\.Composer, int\)
-void androidx\.compose\.integration\.docs\.layout\.MaterialSnippet[0-9]+\.MyDrawer\(androidx\.compose\.runtime\.Composer, int\)
-void androidx\.compose\.integration\.docs\.layout\.MaterialSnippet[0-9]+\.MyBottomSheet\(androidx\.compose\.runtime\.Composer, int\)
-void androidx\.compose\.integration\.docs\.layout\.MaterialSnippet[0-9]+\.MySnackbar\(androidx\.compose\.runtime\.Composer, int\)
-void androidx\.compose\.integration\.docs\.state\.ComposableSingletons\$StateKt\$lambda\-[0-9]+\$[0-9]+\.invoke\(androidx\.compose\.runtime\.Composer, int\)
-void androidx\.compose\.integration\.docs\.sideeffects\.SideEffectsSnippet[0-9]+\.MoviesScreen\(androidx\.compose\.material\.ScaffoldState, androidx\.compose\.runtime\.Composer, int, int\)
-void androidx\.compose\.integration\.docs\.kotlin\.KotlinKt\.KotlinSnippet[0-9]+\(androidx\.compose\.runtime\.Composer, int\)
-void androidx\.compose\.integration\.docs\.lists\.ListsSnippetsControllingScrollPosition\.MessageList\(java\.util\.List, androidx\.compose\.runtime\.Composer, int\)
-void androidx\.wear\.compose\.material\.samples\.ScalingLazyColumnSampleKt\.ScalingLazyColumnEdgeAnchoredAndAnimatedScrollTo\(androidx\.compose\.runtime\.Composer, int\)
-void androidx\.compose\.foundation\.samples\.BringIntoViewSamplesKt\.BringIntoViewSample\(androidx\.compose\.runtime\.Composer, int\)
-void androidx\.compose\.foundation\.samples\.BringIntoViewSamplesKt\.BringPartOfComposableIntoViewSample\(androidx\.compose\.runtime\.Composer, int\)
-void androidx\.compose\.foundation\.samples\.TransformableSampleKt\.TransformableSample\(androidx\.compose\.runtime\.Composer, int\)
-void androidx\.compose\.foundation\.samples\.OverscrollSampleKt\.OverscrollSample\(androidx\.compose\.runtime\.Composer, int\)
-void androidx\.compose\.foundation\.samples\.ScrollerSamplesKt\.ControlledScrollableRowSample\(androidx\.compose\.runtime\.Composer, int\)
-void androidx\.compose\.material\.samples\.DrawerSamplesKt\.BottomDrawerSample\(androidx\.compose\.runtime\.Composer, int\)
-void androidx\.compose\.material\.samples\.ScaffoldSamplesKt\.SimpleScaffoldWithTopBar\(androidx\.compose\.runtime\.Composer, int\)
-void androidx\.compose\.material\.samples\.ScaffoldSamplesKt\.ScaffoldWithBottomBarAndCutout\(androidx\.compose\.runtime\.Composer, int\)
-void androidx\.compose\.material\.samples\.ScaffoldSamplesKt\.ScaffoldWithSimpleSnackbar\(androidx\.compose\.runtime\.Composer, int\)
-void androidx\.compose\.material\.samples\.ScaffoldSamplesKt\.ScaffoldWithCustomSnackbar\(androidx\.compose\.runtime\.Composer, int\)
-void androidx\.compose\.material\.samples\.ModalBottomSheetSamplesKt\.ModalBottomSheetSample\(androidx\.compose\.runtime\.Composer, int\)
-void androidx\.compose\.material\.samples\.BackdropScaffoldSamplesKt\.BackdropScaffoldSample\(androidx\.compose\.runtime\.Composer, int\)
-void androidx\.compose\.material\.samples\.BottomSheetScaffoldSamplesKt\.BottomSheetScaffoldSample\(androidx\.compose\.runtime\.Composer, int\)
-void androidx\.compose\.material[0-9]+\.samples\.DrawerSamplesKt\.DismissibleNavigationDrawerSample\(androidx\.compose\.runtime\.Composer, int\)
-void androidx\.compose\.material[0-9]+\.samples\.ScaffoldSamplesKt\.ScaffoldWithSimpleSnackbar\(androidx\.compose\.runtime\.Composer, int\)
-void androidx\.compose\.material[0-9]+\.samples\.ScaffoldSamplesKt\.ScaffoldWithIndefiniteSnackbar\(androidx\.compose\.runtime\.Composer, int\)
-void androidx\.compose\.material[0-9]+\.samples\.ScaffoldSamplesKt\.ScaffoldWithCustomSnackbar\(androidx\.compose\.runtime\.Composer, int\)
-void androidx\.compose\.ui\.samples\.FocusAwareInputSamplesKt\.RotaryEventSample\(androidx\.compose\.runtime\.Composer, int\)
-void androidx\.compose\.foundation\.demos\.relocation\.RequestRectangleOnScreenDemoKt\.RequestRectangleOnScreenDemo\(androidx\.compose\.runtime\.Composer, int\)
-void androidx\.compose\.foundation\.demos\.relocation\.BringIntoViewDemoKt\.BringIntoViewDemo\(androidx\.compose\.runtime\.Composer, int\)
-void androidx\.compose\.foundation\.demos\.ListDemosKt\.ListHoistedStateDemo\(androidx\.compose\.runtime\.Composer, int\)
-androidx\.compose\.ui\.Modifier androidx\.compose\.ui\.demos\.modifier\.CommunicatingModifierDemoKt\$CommunicatingModifierDemo\$clickToRead\$[0-9]+\.invoke\(androidx\.compose\.ui\.Modifier, androidx\.compose\.runtime\.Composer, int\)
-void androidx\.compose\.ui\.demos\.focus\.ComposableSingletons\$LazyListChildFocusDemosKt\$lambda\-[0-9]+\$[0-9]+\.invoke\(androidx\.compose\.foundation\.lazy\.LazyItemScope, androidx\.compose\.runtime\.Composer, int\)
-Info: Some warnings are typically a sign of using an outdated Java toolchain\. To fix, recompile the source with an updated toolchain\.
 w: \[ksp\] Using @JvmName annotation on a function or accessor that will be overridden by Room is not supported\. If this is important for your use case, please file a bug at https://issuetracker\.google\.com/issues/new\?component=[0-9]+ with details\. \- androidx\.room\.androidx\.room\.integration\.kotlintestapp\.test\.JvmNameInDaoTest\.JvmNameDb\.jvmDao\(\)
 w: \[ksp\] \$SUPPORT/room/integration\-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/JvmNameInDaoTest\.kt:[0-9]+: Using @JvmName annotation on a function or accessor that will be overridden by Room is not supported\. If this is important for your use case, please file a bug at https://issuetracker\.google\.com/issues/new\?component=[0-9]+ with details\.
 # > Task :room:integration-tests:room-testapp-kotlin:kaptWithKaptDebugAndroidTestKotlin
 \$OUT_DIR/androidx/room/integration\-tests/room\-testapp\-kotlin/build/tmp/kapt[0-9]+/stubs/withKaptDebugAndroidTest/androidx/room/androidx/room/integration/kotlintestapp/test/JvmNameInDaoTest\.java:[0-9]+: warning: Using @JvmName annotation on a function or accessor that will be overridden by Room is not supported\. If this is important for your use case, please file a bug at https://issuetracker\.google\.com/issues/new\?component=[0-9]+ with details\.
 public abstract void jvmDelete\(T t\);
-public abstract void jvmInsert\(@org\.jetbrains\.annotations\.NotNull\(\)
+public abstract void jvmInsert\(@org\.jetbrains\.annotations\.NotNull.*
 public abstract java\.util\.List<androidx\.room\.androidx\.room\.integration\.kotlintestapp\.test\.JvmNameInDaoTest\.JvmNameEntity> jvmQuery\(\);
 public abstract androidx\.room\.androidx\.room\.integration\.kotlintestapp\.test\.JvmNameInDaoTest\.JvmNameDao jvmDao\(\);
 \^
@@ -491,6 +407,13 @@
 WARNING: Please consider reporting this to the maintainers of org\.gradle\.internal\.classloader\.ClassLoaderUtils\$AbstractClassLoaderLookuper
 # AGP warning about API usage we have no control over
 Values of variant API AnnotationProcessorOptions\.arguments are queried and may return non final values, this is unsupported
+# > Task :compose:ui:ui:testDebugUnitTest
+OpenJDK 64\-Bit Server VM warning:
+.*Sharing is only supported for boot loader classes because bootstrap classpath has been appended
+# > Task :concurrent:concurrent-futures:compileTestJava b/242311027
+\$SUPPORT/concurrent/concurrent\-futures/src/test/java/androidx/concurrent/futures/AbstractResolvableFutureTest\.java:[0-9]+: warning: \[removal\] (resume|suspend)\(\) in Thread has been deprecated and marked for removal
+thread\.(resume|suspend)\(\);
+2 warnings
 # AGP warning that will go away soon
 WARNING:Software Components will not be created automatically for Maven publishing from Android Gradle Plugin 8\.0\. To opt\-in to the future behavior, set the Gradle property android\.disableAutomaticComponentCreation=true in the `gradle\.properties` file or use the new publishing DSL\.
 # > Task :help
@@ -508,3 +431,5 @@
 Did you make a typo\? Are you trying to refer to something not visible to users\?
 \* Recommended Action: Apply the 'com\.android\.lint' plugin to java library project :annotation:annotation\. to enable lint to analyze those sources\.
 WARN: Sources for .+ is empty
+# > Task :linkDebugTestIosX64 b/253041601
+w: Cached libraries will not be used with std allocator
\ No newline at end of file
diff --git a/development/importMaven/build.gradle.kts b/development/importMaven/build.gradle.kts
index c91e874..a2f23ee 100644
--- a/development/importMaven/build.gradle.kts
+++ b/development/importMaven/build.gradle.kts
@@ -65,11 +65,17 @@
 }
 
 tasks.withType<KotlinCompile> {
-    kotlinOptions.jvmTarget = "11"
+    kotlinOptions.jvmTarget = "17"
 }
 
+// b/250726951 Gradle ProjectBuilder needs reflection access to java.lang.
+val jvmAddOpensArgs = listOf("--add-opens=java.base/java.lang=ALL-UNNAMED")
+tasks.withType<Test>() {
+    this.jvmArgs(jvmAddOpensArgs)
+}
 application {
     mainClass.set("androidx.build.importMaven.MainKt")
+    applicationDefaultJvmArgs += jvmAddOpensArgs
 }
 
 tasks.named("installDist", Sync::class).configure {
diff --git a/development/project-creator/create_project.py b/development/project-creator/create_project.py
index db54a02e..bc1db8e 100755
--- a/development/project-creator/create_project.py
+++ b/development/project-creator/create_project.py
@@ -301,10 +301,10 @@
     """Generates the full package documentation directory
 
     Given androidx.foo.bar:bar-qux, the structure will be:
-    frameworks/support/foo/bar/bar-qux/src/main/androidx/foo/package-info.java
+    frameworks/support/foo/bar/bar-qux/src/main/java/androidx/foo/package-info.java
 
     For Kotlin:
-    frameworks/support/foo/bar/bar-qux/src/main/androidx/foo/<group>-<artifact>-documentation.md
+    frameworks/support/foo/bar/bar-qux/src/main/java/androidx/foo/<group>-<artifact>-documentation.md
 
     For Compose:
     frameworks/support/foo/bar/bar-qux/src/commonMain/kotlin/androidx/foo/<group>-<artifact>-documentation.md
@@ -318,7 +318,7 @@
         group_id_subpath = "/src/commonMain/kotlin/" + \
                         group_id.replace(".", "/")
     else:
-        group_id_subpath = "/src/main/" + \
+        group_id_subpath = "/src/main/java/" + \
                         group_id.replace(".", "/")
     return full_artifact_path + group_id_subpath
 
@@ -352,8 +352,8 @@
 
     Given androidx.foo.bar:bar-qux, the structure will be:
     frameworks/support/foo/bar/bar-qux/build.gradle
-    frameworks/support/foo/bar/bar-qux/src/main/androidx/foo/bar/package-info.java
-    frameworks/support/foo/bar/bar-qux/src/main/androidx/foo/bar/artifact-documentation.md
+    frameworks/support/foo/bar/bar-qux/src/main/java/androidx/foo/bar/package-info.java
+    frameworks/support/foo/bar/bar-qux/src/main/java/androidx/foo/bar/artifact-documentation.md
     frameworks/support/foo/bar/bar-qux/api/current.txt
 
     Args:
@@ -418,9 +418,9 @@
         if project_type != ProjectType.JAVA:
             # Kotlin projects use -documentation.md files, so we need to rename it appropriately.
             # We also rename this file for native projects in case they also have public Kotlin APIs
-            rename_file(full_artifact_path + "/src/main/groupId/artifactId-documentation.md",
+            rename_file(full_artifact_path + "/src/main/java/groupId/artifactId-documentation.md",
                         package_docs_filename)
-        mv_dir(full_artifact_path + "/src/main/groupId", full_package_docs_dir)
+        mv_dir(full_artifact_path + "/src/main/java/groupId", full_package_docs_dir)
 
     # Populate the library type
     library_type = get_library_type(artifact_id)
diff --git a/development/project-creator/java-template/groupId/artifactId/src/main/groupId/package-info.java b/development/project-creator/java-template/groupId/artifactId/src/main/java/groupId/package-info.java
similarity index 100%
rename from development/project-creator/java-template/groupId/artifactId/src/main/groupId/package-info.java
rename to development/project-creator/java-template/groupId/artifactId/src/main/java/groupId/package-info.java
diff --git a/development/project-creator/kotlin-template/groupId/artifactId/src/main/groupId/artifactId-documentation.md b/development/project-creator/kotlin-template/groupId/artifactId/src/main/java/groupId/artifactId-documentation.md
similarity index 100%
rename from development/project-creator/kotlin-template/groupId/artifactId/src/main/groupId/artifactId-documentation.md
rename to development/project-creator/kotlin-template/groupId/artifactId/src/main/java/groupId/artifactId-documentation.md
diff --git a/development/project-creator/native-template/groupId/artifactId/src/main/groupId/artifactId-documentation.md b/development/project-creator/native-template/groupId/artifactId/src/main/java/groupId/artifactId-documentation.md
similarity index 100%
rename from development/project-creator/native-template/groupId/artifactId/src/main/groupId/artifactId-documentation.md
rename to development/project-creator/native-template/groupId/artifactId/src/main/java/groupId/artifactId-documentation.md
diff --git a/development/project-creator/test_project_creator.py b/development/project-creator/test_project_creator.py
index c141906..9d3c2c8 100755
--- a/development/project-creator/test_project_creator.py
+++ b/development/project-creator/test_project_creator.py
@@ -61,16 +61,16 @@
     def test_get_package_documentation_file_dir(self):
         package_info_dir_fp = get_package_documentation_file_dir("androidx.foo", "foo")
         frameworks_support_fp = os.path.abspath(os.path.join(os.getcwd(), '..', '..'))
-        self.assertEqual(frameworks_support_fp + "/foo/foo/src/main/androidx/foo", package_info_dir_fp)
+        self.assertEqual(frameworks_support_fp + "/foo/foo/src/main/java/androidx/foo", package_info_dir_fp)
 
         package_info_dir_fp = get_package_documentation_file_dir("androidx.foo", "foo-bar")
-        self.assertEqual(frameworks_support_fp + "/foo/foo-bar/src/main/androidx/foo", package_info_dir_fp)
+        self.assertEqual(frameworks_support_fp + "/foo/foo-bar/src/main/java/androidx/foo", package_info_dir_fp)
 
         package_info_dir_fp = get_package_documentation_file_dir("androidx.foo.bar", "bar")
-        self.assertEqual(frameworks_support_fp + "/foo/bar/bar/src/main/androidx/foo/bar", package_info_dir_fp)
+        self.assertEqual(frameworks_support_fp + "/foo/bar/bar/src/main/java/androidx/foo/bar", package_info_dir_fp)
 
         package_info_dir_fp = get_package_documentation_file_dir("androidx.foo.bar", "bar-qux")
-        self.assertEqual(frameworks_support_fp + "/foo/bar/bar-qux/src/main/androidx/foo/bar", package_info_dir_fp)
+        self.assertEqual(frameworks_support_fp + "/foo/bar/bar-qux/src/main/java/androidx/foo/bar", package_info_dir_fp)
 
         package_info_dir_fp = get_package_documentation_file_dir("androidx.compose.bar", "bar-qux")
         self.assertEqual(frameworks_support_fp + "/compose/bar/bar-qux/src/commonMain/kotlin/androidx/compose/bar",
diff --git a/docs-kmp/homepage.md b/docs-kmp/homepage.md
new file mode 100644
index 0000000..e791073
--- /dev/null
+++ b/docs-kmp/homepage.md
@@ -0,0 +1,6 @@
+# Jetpack Multiplatform Preview Reference Documentation
+
+This repository contains the reference documentation for the experimental Jetpack [Kotlin Multiplatform](https://kotlinlang.org/docs/multiplatform.html) preview libraries.
+
+* [Announcement Blog Post](https://android-developers.googleblog.com/2022/10/announcing-experimental-preview-of-jetpack-multiplatform-libraries.html)
+* [Sample Application](https://github.com/android/kotlin-multiplatform-samples/tree/main/DiceRoller)
diff --git a/docs-tip-of-tree/build.gradle b/docs-tip-of-tree/build.gradle
index e07ebcb..6522dc4 100644
--- a/docs-tip-of-tree/build.gradle
+++ b/docs-tip-of-tree/build.gradle
@@ -42,6 +42,7 @@
     docs(project(":camera:camera-camera2"))
     docs(project(":camera:camera-core"))
     docs(project(":camera:camera-effects"))
+    docs(project(":camera:camera-effects-still-portrait"))
     docs(project(":camera:camera-extensions"))
     stubs(fileTree(dir: "../camera/camera-extensions-stub", include: ["camera-extensions-stub.jar"]))
     docs(project(":camera:camera-mlkit-vision"))
@@ -175,6 +176,7 @@
     samples(project(":hilt:hilt-navigation-compose-samples"))
     docs(project(":hilt:hilt-navigation-fragment"))
     docs(project(":hilt:hilt-work"))
+    docs(project(":input:input-motionprediction"))
     docs(project(":interpolator:interpolator"))
     docs(project(":javascriptengine:javascriptengine"))
     docs(project(":metrics:metrics-performance"))
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-af/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-af/strings.xml
new file mode 100644
index 0000000..204ee00
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-af/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"EMOSIEKONE EN EMOSIES"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"MENSE"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"DIERE EN NATUUR"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"KOS EN DRINKGOED"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"REIS EN PLEKKE"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"AKTIWITEITE EN GELEENTHEDE"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"VOORWERPE"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"SIMBOLE"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"VLAE"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-am/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-am/strings.xml
new file mode 100644
index 0000000..f2d2255
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-am/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"ሳቂታዎች እና ስሜቶች"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"ሰዎች"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"እንስሳት እና ተፈጥሮ"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"ምግብ እና መጠጥ"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"ጉዞ እና ቦታዎች"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"እንቅስቃሴዎች እና ክስተቶች"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"ነገሮች"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"ምልክቶች"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"ባንዲራዎች"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-ar/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-ar/strings.xml
new file mode 100644
index 0000000..06b974b
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-ar/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"الوجوه المبتسمة والرموز التعبيرية"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"الأشخاص"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"الحيوانات والطبيعة"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"المأكولات والمشروبات"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"السفر والأماكن"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"الأنشطة والأحداث"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"الأشياء"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"الرموز"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"الأعلام"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-as/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-as/strings.xml
new file mode 100644
index 0000000..0a486a1
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-as/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"স্মাইলী আৰু আৱেগ"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"মানুহ"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"পশু আৰু প্ৰকৃতি"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"খাদ্য আৰু পানীয়"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"ভ্ৰমণ আৰু স্থান"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"কাৰ্যকলাপ আৰু অনুষ্ঠান"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"বস্তু"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"চিহ্ন"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"পতাকা"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-az/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-az/strings.xml
new file mode 100644
index 0000000..d40c53c
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-az/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"SMAYLİK VƏ EMOSİYALAR"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"ADAMLAR"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"HEYVANLAR VƏ TƏBİƏT"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"QİDA VƏ İÇKİ"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"SƏYAHƏT VƏ MƏKANLAR"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"FƏALİYYƏTLƏR VƏ TƏDBİRLƏR"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"OBYEKTLƏR"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"SİMVOLLAR"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"BAYRAQLAR"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-be/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-be/strings.xml
new file mode 100644
index 0000000..66979f9
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-be/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"СМАЙЛІКІ І ЭМОЦЫІ"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"ЛЮДЗІ"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"ЖЫВЁЛЫ І ПРЫРОДА"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"ЕЖА І НАПОІ"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"ПАДАРОЖЖЫ І МЕСЦЫ"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"ДЗЕЯННІ І ПАДЗЕІ"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"АБ\'ЕКТЫ"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"СІМВАЛЫ"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"СЦЯГІ"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-bn/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-bn/strings.xml
new file mode 100644
index 0000000..4e1034c
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-bn/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"স্মাইলি ও আবেগ"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"ব্যক্তি"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"প্রাণী ও প্রকৃতি"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"খাদ্য ও পানীয়"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"ভ্রমণ ও জায়গা"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"অ্যাক্টিভিটি ও ইভেন্ট"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"অবজেক্ট"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"প্রতীক"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"ফ্ল্যাগ"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-bs/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-bs/strings.xml
new file mode 100644
index 0000000..7ed5285
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-bs/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"SMAJLIJI I EMOCIJE"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"LJUDI"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"ŽIVOTINJE I PRIRODA"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"HRANA I PIĆE"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"PUTOVANJA I MJESTA"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"AKTIVNOSTI I DOGAĐAJI"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"PREDMETI"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"SIMBOLI"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"ZASTAVE"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-ca/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-ca/strings.xml
new file mode 100644
index 0000000..edfa8ac
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-ca/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"EMOTICONES I EMOCIONS"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"PERSONES"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"ANIMALS I NATURALESA"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"MENJAR I BEGUDES"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"VIATGES I LLOCS"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"ACTIVITATS I ESDEVENIMENTS"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"OBJECTES"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"SÍMBOLS"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"BANDERES"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-cs/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-cs/strings.xml
new file mode 100644
index 0000000..9aa5ac6
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-cs/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"SMAJLÍCI A EMOCE"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"LIDÉ"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"ZVÍŘATA A PŘÍRODA"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"JÍDLO A PITÍ"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"CESTOVÁNÍ A MÍSTA"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"AKTIVITY A UDÁLOSTI"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"OBJEKTY"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"SYMBOLY"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"VLAJKY"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-da/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-da/strings.xml
new file mode 100644
index 0000000..893f68e
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-da/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"SMILEYS OG HUMØRIKONER"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"PERSONER"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"DYR OG NATUR"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"MAD OG DRIKKE"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"REJSER OG STEDER"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"AKTIVITETER OG BEGIVENHEDER"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"TING"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"SYMBOLER"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"FLAG"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-de/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-de/strings.xml
new file mode 100644
index 0000000..23bcc14
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-de/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"SMILEYS UND EMOTIONEN"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"PERSONEN"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"TIERE UND NATUR"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"ESSEN UND TRINKEN"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"REISEN UND ORTE"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"AKTIVITÄTEN UND VERANSTALTUNGEN"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"OBJEKTE"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"SYMBOLE"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"FLAGGEN"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-el/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-el/strings.xml
new file mode 100644
index 0000000..f5ebd3e
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-el/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"ΕΙΚΟΝΙΔΙΑ SMILEY ΚΑΙ ΣΥΝΑΙΣΘΗΜΑΤΑ"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"ΑΤΟΜΑ"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"ΖΩΑ ΚΑΙ ΦΥΣΗ"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"ΦΑΓΗΤΟ ΚΑΙ ΠΟΤΟ"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"ΤΑΞΙΔΙΑ ΚΑΙ ΜΕΡΗ"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"ΔΡΑΣΤΗΡΙΟΤΗΤΕΣ ΚΑΙ ΣΥΜΒΑΝΤΑ"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"ΑΝΤΙΚΕΙΜΕΝΑ"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"ΣΥΜΒΟΛΑ"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"ΣΗΜΑΙΕΣ"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-es-rUS/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-es-rUS/strings.xml
new file mode 100644
index 0000000..3620abe
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-es-rUS/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"EMOTICONES Y EMOCIONES"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"PERSONAS"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"ANIMALES Y NATURALEZA"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"COMIDAS Y BEBIDAS"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"VIAJES Y LUGARES"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"ACTIVIDADES Y EVENTOS"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"OBJETOS"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"SÍMBOLOS"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"BANDERAS"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-es/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-es/strings.xml
new file mode 100644
index 0000000..1f75326
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-es/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"EMOTICONOS Y EMOCIONES"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"PERSONAS"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"ANIMALES Y NATURALEZA"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"COMIDA Y BEBIDA"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"VIAJES Y SITIOS"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"ACTIVIDADES Y EVENTOS"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"OBJETOS"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"SÍMBOLOS"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"BANDERAS"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-et/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-et/strings.xml
new file mode 100644
index 0000000..3dca6c7
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-et/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"NÄOIKOONID JA EMOTSIOONID"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"INIMESED"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"LOOMAD JA LOODUS"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"SÖÖK JA JOOK"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"REISIMINE JA KOHAD"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"TEGEVUSED JA SÜNDMUSED"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"OBJEKTID"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"SÜMBOLID"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"LIPUD"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-fa/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-fa/strings.xml
new file mode 100644
index 0000000..5d05a16
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-fa/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"شکلک‌ها و احساسات"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"افراد"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"حیوانات و طبیعت"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"غذا و نوشیدنی"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"سفر و مکان‌ها"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"فعالیت‌ها و رویدادها"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"اشیاء"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"نمادها"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"پرچم‌ها"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-fi/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-fi/strings.xml
new file mode 100644
index 0000000..9a4c1c3
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-fi/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"HYMIÖT JA TUNNETILAT"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"IHMISET"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"ELÄIMET JA LUONTO"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"RUOKA JA JUOMA"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"MATKAILU JA PAIKAT"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"AKTIVITEETIT JA TAPAHTUMAT"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"ESINEET"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"SYMBOLIT"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"LIPUT"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-fr-rCA/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-fr-rCA/strings.xml
new file mode 100644
index 0000000..82ce9a2
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-fr-rCA/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"ÉMOTICÔNES ET ÉMOTIONS"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"PERSONNES"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"ANIMAUX ET NATURE"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"ALIMENTS ET BOISSONS"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"VOYAGES ET LIEUX"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"ACTIVITÉS ET ÉVÉNEMENTS"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"OBJETS"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"SYMBOLES"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"DRAPEAUX"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-fr/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-fr/strings.xml
new file mode 100644
index 0000000..34fd6ba
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-fr/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"ÉMOTICÔNES ET ÉMOTIONS"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"PERSONNES"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"ANIMAUX ET NATURE"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"ALIMENTATION ET BOISSONS"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"VOYAGES ET LIEUX"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"ACTIVITÉS ET ÉVÉNEMENTS"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"OBJETS"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"SYMBOLES"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"DRAPEAUX"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-gl/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-gl/strings.xml
new file mode 100644
index 0000000..7cb2985
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-gl/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"ICONAS XESTUAIS E EMOTICONAS"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"PERSOAS"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"ANIMAIS E NATUREZA"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"COMIDA E BEBIDA"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"VIAXES E LUGARES"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"ACTIVIDADES E EVENTOS"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"OBXECTOS"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"SÍMBOLOS"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"BANDEIRAS"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-gu/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-gu/strings.xml
new file mode 100644
index 0000000..50975a9
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-gu/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"સ્માઇલી અને મનોભાવો"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"લોકો"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"પ્રાણીઓ અને પ્રકૃતિ"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"ભોજન અને પીણાં"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"મુસાફરી અને સ્થળો"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"પ્રવૃત્તિઓ અને ઇવેન્ટ"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"ઑબ્જેક્ટ"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"પ્રતીકો"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"ઝંડા"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-hi/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-hi/strings.xml
new file mode 100644
index 0000000..9b732dd
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-hi/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"स्माइली और भावनाएं"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"लोग"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"जानवर और प्रकृति"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"खाने-पीने की चीज़ें"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"यात्रा और जगहें"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"गतिविधियां और इवेंट"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"ऑब्जेक्ट"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"सिंबल"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"झंडे"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-hr/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-hr/strings.xml
new file mode 100644
index 0000000..0bc0396
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-hr/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"SMAJLIĆI I EMOCIJE"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"OSOBE"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"ŽIVOTINJE I PRIRODA"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"HRANA I PIĆE"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"PUTOVANJA I MJESTA"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"AKTIVNOSTI I DOGAĐAJI"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"OBJEKTI"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"SIMBOLI"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"ZASTAVE"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-hu/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-hu/strings.xml
new file mode 100644
index 0000000..27f306f
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-hu/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"HANGULATJELEK ÉS HANGULATOK"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"SZEMÉLYEK"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"ÁLLATOK ÉS TERMÉSZET"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"ÉTEL ÉS ITAL"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"UTAZÁS ÉS HELYEK"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"TEVÉKENYSÉGEK ÉS ESEMÉNYEK"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"TÁRGYAK"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"SZIMBÓLUMOK"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"ZÁSZLÓK"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-hy/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-hy/strings.xml
new file mode 100644
index 0000000..f88c5f0
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-hy/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"ԶՄԱՅԼԻԿՆԵՐ ԵՎ ՀՈՒԶԱՊԱՏԿԵՐԱԿՆԵՐ"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"ՄԱՐԴԻԿ"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"ԿԵՆԴԱՆԻՆԵՐ ԵՎ ԲՆՈՒԹՅՈՒՆ"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"ՍՆՈՒՆԴ ԵՎ ԽՄԻՉՔ"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"ՃԱՄՓՈՐԴՈՒԹՅՈՒՆ ԵՎ ՏԵՍԱՐԺԱՆ ՎԱՅՐԵՐ"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"ԺԱՄԱՆՑ ԵՎ ՄԻՋՈՑԱՌՈՒՄՆԵՐ"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"ԱՌԱՐԿԱՆԵՐ"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"ՆՇԱՆՆԵՐ"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"ԴՐՈՇՆԵՐ"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-in/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-in/strings.xml
new file mode 100644
index 0000000..75fe397
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-in/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"SMILEY DAN EMOTIKON"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"ORANG"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"HEWAN DAN ALAM"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"MAKANAN DAN MINUMAN"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"WISATA DAN TEMPAT"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"AKTIVITAS DAN ACARA"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"OBJEK"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"SIMBOL"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"BENDERA"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-is/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-is/strings.xml
new file mode 100644
index 0000000..8449afb
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-is/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"BROSKARLAR OG TILFINNINGAR"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"FÓLK"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"DÝR OG NÁTTÚRA"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"MATUR OG DRYKKUR"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"FERÐALÖG OG STAÐIR"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"AÐGERÐIR OG VIÐBURÐIR"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"HLUTIR"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"TÁKN"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"FÁNAR"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-it/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-it/strings.xml
new file mode 100644
index 0000000..7ae073b
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-it/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"SMILE ED EMOZIONI"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"PERSONE"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"ANIMALI E NATURA"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"CIBO E BEVANDE"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"VIAGGI E LUOGHI"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"ATTIVITÀ ED EVENTI"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"OGGETTI"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"SIMBOLI"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"BANDIERE"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-ja/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-ja/strings.xml
new file mode 100644
index 0000000..aa5af40
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-ja/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"顔文字、気分"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"人物"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"動物、自然"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"食べ物、飲み物"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"移動、場所"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"活動、イベント"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"アイテム"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"記号"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"旗"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-kk/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-kk/strings.xml
new file mode 100644
index 0000000..c59ebb8
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-kk/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"СМАЙЛДАР МЕН ЭМОЦИЯЛАР"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"АДАМДАР"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"ЖАНУАРЛАР ЖӘНЕ ТАБИҒАТ"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"АЗЫҚ-ТҮЛІК ЖӘНЕ СУСЫНДАР"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"САЯХАТ ЖӘНЕ ОРЫНДАР"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"ӘРЕКЕТТЕР МЕН ІС-ШАРАЛАР"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"НЫСАНДАР"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"ТАҢБАЛАР"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"ЖАЛАУШАЛАР"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-km/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-km/strings.xml
new file mode 100644
index 0000000..88bb970
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-km/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"រូប​ទឹក​មុខ និងអារម្មណ៍"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"មនុស្ស"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"សត្វ និងធម្មជាតិ"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"អាហារ និងភេសជ្ជៈ"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"ការធ្វើដំណើរ និងទីកន្លែង"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"សកម្មភាព និងព្រឹត្តិការណ៍"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"វត្ថុ"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"និមិត្តសញ្ញា"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"ទង់ជាតិ"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-kn/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-kn/strings.xml
new file mode 100644
index 0000000..c1bc2ae
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-kn/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"ಸ್ಮೈಲಿಗಳು ಮತ್ತು ಭಾವನೆಗಳು"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"ಜನರು"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"ಪ್ರಾಣಿಗಳು ಮತ್ತು ಪ್ರಕೃತಿ"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"ಆಹಾರ ಮತ್ತು ಪಾನೀಯ"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"ಪ್ರಯಾಣ ಮತ್ತು ಸ್ಥಳಗಳು"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"ಚಟುವಟಿಕೆಗಳು ಮತ್ತು ಈವೆಂಟ್‌ಗಳು"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"ವಸ್ತುಗಳು"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"ಸಂಕೇತಗಳು"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"ಫ್ಲ್ಯಾಗ್‌ಗಳು"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-ko/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-ko/strings.xml
new file mode 100644
index 0000000..92a44db
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-ko/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"이모티콘 및 감정"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"사람"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"동물 및 자연"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"식음료"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"여행 및 장소"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"활동 및 이벤트"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"사물"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"기호"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"깃발"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-ky/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-ky/strings.xml
new file mode 100644
index 0000000..c6c3658
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-ky/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"БЫЙТЫКЧАЛАР ЖАНА ЭМОЦИЯЛАР"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"АДАМДАР"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"ЖАНЫБАРЛАР ЖАНА ЖАРАТЫЛЫШ"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"АЗЫК-ТҮЛҮК ЖАНА СУУСУНДУКТАР"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"САЯКАТ ЖАНА ЖЕРЛЕР"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"ИШ-АРАКЕТТЕР ЖАНА ИШ-ЧАРАЛАР"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"ОБЪЕКТТЕР"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"СИМВОЛДОР"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"ЖЕЛЕКТЕР"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-lo/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-lo/strings.xml
new file mode 100644
index 0000000..93f8f6a
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-lo/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"ໜ້າຍິ້ມ ແລະ ຄວາມຮູ້ສຶກ"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"ຜູ້ຄົນ"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"ສັດ ແລະ ທຳມະຊາດ"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"ອາຫານ ແລະ ເຄື່ອງດື່ມ"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"ການເດີນທາງ ແລະ ສະຖານທີ່"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"ການເຄື່ອນໄຫວ ແລະ ກິດຈະກຳ"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"ວັດຖຸ"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"ສັນຍາລັກ"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"ທຸງ"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-lt/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-lt/strings.xml
new file mode 100644
index 0000000..69c0624
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-lt/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"JAUSTUKAI IR EMOCIJOS"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"ŽMONĖS"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"GYVŪNAI IR GAMTA"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"MAISTAS IR GĖRIMAI"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"KELIONĖS IR VIETOS"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"VEIKLA IR ĮVYKIAI"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"OBJEKTAI"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"SIMBOLIAI"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"VĖLIAVOS"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-lv/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-lv/strings.xml
new file mode 100644
index 0000000..eef9dca
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-lv/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"SMAIDIŅI UN EMOCIJAS"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"PERSONAS"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"DZĪVNIEKI UN DABA"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"ĒDIENI UN DZĒRIENI"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"CEĻOJUMI UN VIETAS"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"PASĀKUMI UN NOTIKUMI"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"OBJEKTI"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"SIMBOLI"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"KAROGI"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-mk/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-mk/strings.xml
new file mode 100644
index 0000000..3f844e5
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-mk/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"СМЕШКОВЦИ И ЕМОТИКОНИ"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"ЛУЃЕ"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"ЖИВОТНИ И ПРИРОДА"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"ХРАНА И ПИЈАЛАЦИ"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"ПАТУВАЊЕ И МЕСТА"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"АКТИВНОСТИ И НАСТАНИ"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"ОБЈЕКТИ"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"СИМБОЛИ"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"ЗНАМИЊА"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-ml/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-ml/strings.xml
new file mode 100644
index 0000000..95f3bb7
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-ml/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"സ്മൈലികളും ഇമോഷനുകളും"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"ആളുകൾ"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"മൃഗങ്ങളും പ്രകൃതിയും"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"ഭക്ഷണപാനീയങ്ങൾ"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"യാത്രയും സ്ഥലങ്ങളും"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"ആക്‌റ്റിവിറ്റികളും ഇവന്റുകളും"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"വസ്‌തുക്കൾ"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"ചിഹ്നങ്ങൾ"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"പതാകകൾ"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-mn/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-mn/strings.xml
new file mode 100644
index 0000000..dfbe911
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-mn/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"ИНЭЭМСЭГЛЭЛ БОЛОН СЭТГЭЛ ХӨДЛӨЛ"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"ХҮМҮҮС"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"АМЬТАД БА БАЙГАЛЬ"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"ХООЛ БОЛОН УУХ ЗҮЙЛ"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"АЯЛАЛ БОЛОН ГАЗРУУД"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"ҮЙЛ АЖИЛЛАГАА БОЛОН АРГА ХЭМЖЭЭ"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"ОБЪЕКТ"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"ТЭМДЭГ"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"ТУГ"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-mr/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-mr/strings.xml
new file mode 100644
index 0000000..f84380b
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-mr/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"स्मायली आणि भावना"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"लोक"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"प्राणी आणि निसर्ग"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"खाद्यपदार्थ आणि पेय"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"प्रवास आणि ठिकाणे"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"ॲक्टिव्हिटी आणि इव्हेंट"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"ऑब्जेक्ट"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"चिन्हे"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"ध्वज"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-ms/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-ms/strings.xml
new file mode 100644
index 0000000..4b21953
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-ms/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"SMILEY DAN EMOSI"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"ORANG"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"HAIWAN DAN ALAM SEMULA JADI"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"MAKANAN DAN MINUMAN"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"PERJALANAN DAN TEMPAT"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"AKTIVITI DAN ACARA"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"OBJEK"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"SIMBOL"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"BENDERA"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-my/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-my/strings.xml
new file mode 100644
index 0000000..371a93a
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-my/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"စမိုင်းလီနှင့် ခံစားချက်များ"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"လူများ"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"တိရစ္ဆာန်များနှင့် သဘာဝ"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"အစားအသောက်"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"ခရီးသွားခြင်းနှင့် အရပ်ဒေသများ"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"လုပ်ဆောင်ချက်နှင့် အစီအစဉ်များ"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"အရာဝတ္ထုများ"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"သင်္ကေတများ"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"အလံများ"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-nb/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-nb/strings.xml
new file mode 100644
index 0000000..88e1961
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-nb/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"SMILEFJES OG UTTRYKKSIKONER"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"PERSONER"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"DYR OG NATUR"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"MAT OG DRIKKE"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"REISE OG STEDER"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"AKTIVITETER OG ARRANGEMENTER"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"GJENSTANDER"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"SYMBOLER"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"FLAGG"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-ne/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-ne/strings.xml
new file mode 100644
index 0000000..d60e4cb
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-ne/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"स्माइली र भावनाहरू"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"मान्छेहरू"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"पशु र प्रकृति"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"खाद्य तथा पेय पदार्थ"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"यात्रा र ठाउँहरू"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"क्रियाकलाप तथा कार्यक्रमहरू"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"वस्तुहरू"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"चिन्हहरू"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"झन्डाहरू"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-nl/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-nl/strings.xml
new file mode 100644
index 0000000..3a4a9df
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-nl/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"SMILEYS EN EMOTIES"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"MENSEN"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"DIEREN EN NATUUR"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"ETEN EN DRINKEN"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"REIZEN EN PLAATSEN"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"ACTIVITEITEN EN EVENEMENTEN"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"OBJECTEN"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"SYMBOLEN"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"VLAGGEN"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-or/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-or/strings.xml
new file mode 100644
index 0000000..c0a2ce0
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-or/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"ସ୍ମାଇଲି ଓ ଆବେଗଗୁଡ଼ିକ"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"ଲୋକମାନେ"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"ଜୀବଜନ୍ତୁ ଓ ପ୍ରକୃତି"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"ଖାଦ୍ୟ ଓ ପାନୀୟ"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"ଟ୍ରାଭେଲ ଓ ସ୍ଥାନଗୁଡ଼ିକ"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"କାର୍ଯ୍ୟକଳାପ ଓ ଇଭେଣ୍ଟଗୁଡ଼ିକ"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"ଅବଜେକ୍ଟଗୁଡ଼ିକ"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"ଚିହ୍ନଗୁଡ଼ିକ"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"ଫ୍ଲାଗଗୁଡ଼ିକ"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-pa/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-pa/strings.xml
new file mode 100644
index 0000000..ba141b7
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-pa/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"ਸਮਾਈਲੀ ਅਤੇ ਜਜ਼ਬਾਤ"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"ਲੋਕ"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"ਜਾਨਵਰ ਅਤੇ ਕੁਦਰਤ"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"ਖਾਣਾ ਅਤੇ ਪੀਣਾ"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"ਯਾਤਰਾ ਅਤੇ ਥਾਵਾਂ"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"ਸਰਗਰਮੀਆਂ ਅਤੇ ਇਵੈਂਟ"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"ਵਸਤੂਆਂ"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"ਚਿੰਨ੍ਹ"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"ਝੰਡੇ"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-pl/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-pl/strings.xml
new file mode 100644
index 0000000..8720f89
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-pl/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"EMOTIKONY"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"UCZESTNICY"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"ZWIERZĘTA I PRZYRODA"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"JEDZENIE I NAPOJE"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"PODRÓŻE I MIEJSCA"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"DZIAŁANIA I ZDARZENIA"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"PRZEDMIOTY"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"SYMBOLE"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"FLAGI"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-pt-rBR/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-pt-rBR/strings.xml
new file mode 100644
index 0000000..640b333
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-pt-rBR/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"CARINHAS E EMOTICONS"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"PESSOAS"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"ANIMAIS E NATUREZA"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"COMIDAS E BEBIDAS"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"VIAGENS E LUGARES"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"ATIVIDADES E EVENTOS"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"OBJETOS"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"SÍMBOLOS"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"BANDEIRAS"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-pt/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-pt/strings.xml
new file mode 100644
index 0000000..640b333
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-pt/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"CARINHAS E EMOTICONS"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"PESSOAS"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"ANIMAIS E NATUREZA"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"COMIDAS E BEBIDAS"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"VIAGENS E LUGARES"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"ATIVIDADES E EVENTOS"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"OBJETOS"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"SÍMBOLOS"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"BANDEIRAS"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-ro/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-ro/strings.xml
new file mode 100644
index 0000000..3bbfab6
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-ro/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"EMOTICOANE ȘI EMOȚII"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"PERSOANE"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"ANIMALE ȘI NATURĂ"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"MÂNCARE ȘI BĂUTURĂ"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"CĂLĂTORII ȘI LOCAȚII"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"ACTIVITĂȚI ȘI EVENIMENTE"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"OBIECTE"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"SIMBOLURI"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"STEAGURI"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-ru/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-ru/strings.xml
new file mode 100644
index 0000000..2dec46a
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-ru/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"СМАЙЛИКИ И ЭМОЦИИ"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"ЛЮДИ"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"ПРИРОДА И ЖИВОТНЫЕ"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"ЕДА И НАПИТКИ"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"ПУТЕШЕСТВИЯ"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"ДЕЙСТВИЯ И СОБЫТИЯ"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"ОБЪЕКТЫ"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"СИМВОЛЫ"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"ФЛАГИ"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-si/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-si/strings.xml
new file mode 100644
index 0000000..9716539
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-si/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"සිනාසීම් සහ චිත්තවේග"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"පුද්ගලයින්"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"සතුන් හා ස්වභාවධර්මය"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"ආහාර පාන"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"සංචාර හා ස්ථාන"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"ක්‍රියාකාරකම් සහ සිදුවීම්"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"වස්තු"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"සංකේත"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"ධජ"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-sk/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-sk/strings.xml
new file mode 100644
index 0000000..745a0a0
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-sk/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"SMAJLÍKY A EMOTIKONY"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"ĽUDIA"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"ZVIERATÁ A PRÍRODA"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"JEDLO A NÁPOJE"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"CESTOVANIE A MIESTA"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"AKTIVITY A UDALOSTI"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"PREDMETY"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"SYMBOLY"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"VLAJKY"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-sl/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-sl/strings.xml
new file mode 100644
index 0000000..3e9a4bd
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-sl/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"ČUSTVENI SIMBOLI IN ČUSTVA"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"OSEBE"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"ŽIVALI IN NARAVA"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"HRANA IN PIJAČA"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"POTOVANJE IN MESTA"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"DEJAVNOSTI IN DOGODKI"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"PREDMETI"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"SIMBOLI"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"ZASTAVE"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-sq/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-sq/strings.xml
new file mode 100644
index 0000000..116b1e4
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-sq/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"BUZËQESHJE DHE EMOCIONE"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"NJERËZ"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"KAFSHË DHE NATYRË"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"USHQIME DHE PIJE"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"UDHËTIME DHE VENDE"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"AKTIVITETE DHE NGJARJE"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"OBJEKTE"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"SIMBOLE"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"FLAMUJ"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-sv/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-sv/strings.xml
new file mode 100644
index 0000000..57e3a2a
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-sv/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"KÄNSLOIKONER OCH KÄNSLOR"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"PERSONER"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"DJUR OCH NATUR"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"MAT OCH DRYCK"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"RESOR OCH PLATSER"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"AKTIVITETER OCH HÄNDELSER"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"FÖREMÅL"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"SYMBOLER"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"FLAGGOR"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-sw/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-sw/strings.xml
new file mode 100644
index 0000000..ae733c2
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-sw/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"VICHESHI NA HISIA"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"WATU"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"WANYAMA NA MAZINGIRA"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"VYAKULA NA VINYWAJI"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"SAFARI NA MAENEO"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"SHUGHULI NA MATUKIO"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"VITU"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"ISHARA"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"BENDERA"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-ta/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-ta/strings.xml
new file mode 100644
index 0000000..b250ef6
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-ta/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"ஸ்மைலிகளும் எமோடிகான்களும்"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"நபர்"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"விலங்குகளும் இயற்கையும்"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"உணவும் பானமும்"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"பயணமும் இடங்களும்"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"செயல்பாடுகளும் நிகழ்வுகளும்"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"பொருட்கள்"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"சின்னங்கள்"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"கொடிகள்"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-te/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-te/strings.xml
new file mode 100644
index 0000000..7af3e30
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-te/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"స్మైలీలు, ఎమోషన్‌లు"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"వ్యక్తులు"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"జంతువులు, ప్రకృతి"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"ఆహారం, పానీయం"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"ప్రయాణం, స్థలాలు"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"యాక్టివిటీలు, ఈవెంట్‌లు"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"ఆబ్జెక్ట్‌లు"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"గుర్తులు"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"ఫ్లాగ్‌లు"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-th/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-th/strings.xml
new file mode 100644
index 0000000..4a5f1b7
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-th/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"หน้ายิ้มและอารมณ์"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"ผู้คน"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"สัตว์และธรรมชาติ"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"อาหารและเครื่องดื่ม"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"การเดินทางและสถานที่"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"กิจกรรมและเหตุการณ์ต่างๆ"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"วัตถุ"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"สัญลักษณ์"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"ธง"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-tl/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-tl/strings.xml
new file mode 100644
index 0000000..41f0d3b
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-tl/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"MGA SMILEY AT MGA EMOSYON"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"MGA TAO"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"MGA HAYOP AT KALIKASAN"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"PAGKAIN AT INUMIN"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"PAGLALAKBAY AT MGA LUGAR"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"MGA AKTIBIDAD AT EVENT"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"MGA BAGAY"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"MGA SIMBOLO"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"MGA BANDILA"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-tr/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-tr/strings.xml
new file mode 100644
index 0000000..1ed37d1c
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-tr/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"SMILEY\'LER VE İFADELER"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"İNSANLAR"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"HAYVANLAR VE DOĞA"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"YİYECEK VE İÇECEK"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"SEYAHAT VE YERLER"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"AKTİVİTELER VE ETKİNLİKLER"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"NESNELER"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"SEMBOLLER"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"BAYRAKLAR"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-uk/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-uk/strings.xml
new file mode 100644
index 0000000..ec58aa6
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-uk/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"СМАЙЛИКИ Й ЕМОЦІЇ"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"ЛЮДИ"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"ТВАРИНИ ТА ПРИРОДА"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"ЇЖА Й НАПОЇ"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"ПОДОРОЖІ Й МІСЦЯ"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"АКТИВНІСТЬ І ПОДІЇ"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"ОБ’ЄКТИ"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"СИМВОЛИ"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"ПРАПОРИ"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-ur/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-ur/strings.xml
new file mode 100644
index 0000000..d11be3d
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-ur/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"اسمائلیز اور جذبات"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"لوگ"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"جانور اور قدرت"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"خوراک اور مشروب"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"سفر اور جگہیں"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"سرگرمیاں اور ایونٹس"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"آبجیکٹس"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"علامات"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"جھنڈے"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-uz/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-uz/strings.xml
new file mode 100644
index 0000000..a51d22f
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-uz/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"KULGICH VA EMOJILAR"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"ODAMLAR"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"HAYVONLAR VA TABIAT"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"TAOM VA ICHIMLIKLAR"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"SAYOHAT VA JOYLAR"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"HODISA VA TADBIRLAR"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"OBYEKTLAR"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"BELGILAR"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"BAYROQCHALAR"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-vi/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-vi/strings.xml
new file mode 100644
index 0000000..4a3f34a
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-vi/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"MẶT CƯỜI VÀ BIỂU TƯỢNG CẢM XÚC"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"MỌI NGƯỜI"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"ĐỘNG VẬT VÀ THIÊN NHIÊN"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"THỰC PHẨM VÀ ĐỒ UỐNG"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"DU LỊCH VÀ ĐỊA ĐIỂM"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"HOẠT ĐỘNG VÀ SỰ KIỆN"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"ĐỒ VẬT"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"BIỂU TƯỢNG"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"CỜ"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-zh-rCN/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-zh-rCN/strings.xml
new file mode 100644
index 0000000..d1438f6
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-zh-rCN/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"表情符号"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"人物"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"动物和自然"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"食品和饮料"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"旅游和地点"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"活动和庆典"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"物体"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"符号"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"旗帜"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-zh-rHK/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-zh-rHK/strings.xml
new file mode 100644
index 0000000..32b5850
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-zh-rHK/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"表情符號"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"人物"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"動物和大自然"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"飲食"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"旅遊和地點"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"活動和事件"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"物件"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"符號"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"旗幟"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-zh-rTW/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-zh-rTW/strings.xml
new file mode 100644
index 0000000..afd04e4
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-zh-rTW/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"表情符號"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"人物"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"動物與大自然"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"飲食"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"旅行與地點"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"活動與事件"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"物品"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"符號"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"旗幟"</string>
+</resources>
diff --git a/emoji2/emoji2-emojipicker/src/main/res/values-zu/strings.xml b/emoji2/emoji2-emojipicker/src/main/res/values-zu/strings.xml
new file mode 100644
index 0000000..fd576f9
--- /dev/null
+++ b/emoji2/emoji2-emojipicker/src/main/res/values-zu/strings.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  Copyright 2022 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="emoji_category_emotions" msgid="1570830970240985537">"AMASMAYILI NEMIZWA"</string>
+    <string name="emoji_category_people" msgid="7968173366822927025">"ABANTU"</string>
+    <string name="emoji_category_animals_nature" msgid="4640771324837307541">"IZILWANE NENDALO"</string>
+    <string name="emoji_category_food_drink" msgid="1189971856721244395">"UKUDLA NESIPHUZO"</string>
+    <string name="emoji_category_travel_places" msgid="8105712773237012672">"UKUVAKASHA NEZINDAWO"</string>
+    <string name="emoji_category_activity" msgid="4381135114947330911">"IMISEBENZI NEMICIMBI"</string>
+    <string name="emoji_category_objects" msgid="6106115586332708067">"IZINTO"</string>
+    <string name="emoji_category_symbols" msgid="5626171724310261787">"AMASIMBULI"</string>
+    <string name="emoji_category_flags" msgid="6185639503532784871">"AMAFULEGI"</string>
+</resources>
diff --git a/external/paparazzi/paparazzi/src/main/java/app/cash/paparazzi/Reflections.kt b/external/paparazzi/paparazzi/src/main/java/app/cash/paparazzi/Reflections.kt
index 6742499..b6a4ac6 100644
--- a/external/paparazzi/paparazzi/src/main/java/app/cash/paparazzi/Reflections.kt
+++ b/external/paparazzi/paparazzi/src/main/java/app/cash/paparazzi/Reflections.kt
@@ -3,7 +3,6 @@
 import sun.misc.Unsafe
 import java.lang.reflect.Field
 import java.lang.reflect.Modifier
-import java.security.AccessController
 import java.security.PrivilegedAction
 
 /**
@@ -23,7 +22,8 @@
     this.isAccessible = true
     val isFinalModifierPresent = this.modifiers and Modifier.FINAL == Modifier.FINAL
     if (isFinalModifierPresent) {
-      AccessController.doPrivileged<Any?>(
+      @Suppress("DEPRECATION")
+      java.security.AccessController.doPrivileged<Any?>(
         PrivilegedAction {
           try {
             val unsafe = Unsafe::class.java.getFieldReflectively("theUnsafe").get(null) as Unsafe
diff --git a/glance/glance-appwidget-proto/build.gradle b/glance/glance-appwidget-proto/build.gradle
index ef4f144..3ab64a8 100644
--- a/glance/glance-appwidget-proto/build.gradle
+++ b/glance/glance-appwidget-proto/build.gradle
@@ -48,6 +48,15 @@
     }
 }
 
+afterEvaluate {
+    lint {
+        lintOptions {
+            // protobuf generates unannotated and synthetic accessor methods
+            disable("UnknownNullness", "SyntheticAccessor")
+        }
+    }
+}
+
 // Create export artifact for for JarJaring
 def preferencesProtoJarJarTask = tasks.register("exportJar", Jar) {
     archiveBaseName.set("export")
diff --git a/glance/glance-appwidget/api/current.txt b/glance/glance-appwidget/api/current.txt
index b840a3e..18f7836 100644
--- a/glance/glance-appwidget/api/current.txt
+++ b/glance/glance-appwidget/api/current.txt
@@ -307,9 +307,12 @@
     ctor public GlanceTemplateAppWidget();
     method @androidx.compose.runtime.Composable public final void Content();
     method @androidx.compose.runtime.Composable @androidx.glance.GlanceComposable public abstract void TemplateContent();
-    method public androidx.glance.appwidget.SizeMode.Exact getSizeMode();
-    property public androidx.glance.appwidget.SizeMode.Exact sizeMode;
+    property public androidx.glance.appwidget.SizeMode sizeMode;
     property public androidx.glance.state.GlanceStateDefinition<?>? stateDefinition;
+    field public static final androidx.glance.appwidget.template.GlanceTemplateAppWidget.Companion Companion;
+  }
+
+  public static final class GlanceTemplateAppWidget.Companion {
   }
 
   @androidx.glance.GlanceComposable public final class ListTemplateLayoutsKt {
diff --git a/glance/glance-appwidget/api/public_plus_experimental_current.txt b/glance/glance-appwidget/api/public_plus_experimental_current.txt
index a78b9e6..1591d4d 100644
--- a/glance/glance-appwidget/api/public_plus_experimental_current.txt
+++ b/glance/glance-appwidget/api/public_plus_experimental_current.txt
@@ -321,9 +321,12 @@
     ctor public GlanceTemplateAppWidget();
     method @androidx.compose.runtime.Composable public final void Content();
     method @androidx.compose.runtime.Composable @androidx.glance.GlanceComposable public abstract void TemplateContent();
-    method public androidx.glance.appwidget.SizeMode.Exact getSizeMode();
-    property public androidx.glance.appwidget.SizeMode.Exact sizeMode;
+    property public androidx.glance.appwidget.SizeMode sizeMode;
     property public androidx.glance.state.GlanceStateDefinition<?>? stateDefinition;
+    field public static final androidx.glance.appwidget.template.GlanceTemplateAppWidget.Companion Companion;
+  }
+
+  public static final class GlanceTemplateAppWidget.Companion {
   }
 
   @androidx.glance.GlanceComposable public final class ListTemplateLayoutsKt {
diff --git a/glance/glance-appwidget/api/restricted_current.txt b/glance/glance-appwidget/api/restricted_current.txt
index b840a3e..18f7836 100644
--- a/glance/glance-appwidget/api/restricted_current.txt
+++ b/glance/glance-appwidget/api/restricted_current.txt
@@ -307,9 +307,12 @@
     ctor public GlanceTemplateAppWidget();
     method @androidx.compose.runtime.Composable public final void Content();
     method @androidx.compose.runtime.Composable @androidx.glance.GlanceComposable public abstract void TemplateContent();
-    method public androidx.glance.appwidget.SizeMode.Exact getSizeMode();
-    property public androidx.glance.appwidget.SizeMode.Exact sizeMode;
+    property public androidx.glance.appwidget.SizeMode sizeMode;
     property public androidx.glance.state.GlanceStateDefinition<?>? stateDefinition;
+    field public static final androidx.glance.appwidget.template.GlanceTemplateAppWidget.Companion Companion;
+  }
+
+  public static final class GlanceTemplateAppWidget.Companion {
   }
 
   @androidx.glance.GlanceComposable public final class ListTemplateLayoutsKt {
diff --git a/glance/glance-appwidget/build.gradle b/glance/glance-appwidget/build.gradle
index 6896b81..09baaa6 100644
--- a/glance/glance-appwidget/build.gradle
+++ b/glance/glance-appwidget/build.gradle
@@ -52,7 +52,6 @@
     implementation("androidx.datastore:datastore-core:1.0.0")
     implementation("androidx.datastore:datastore-preferences-core:1.0.0")
     implementation("androidx.datastore:datastore-preferences:1.0.0")
-    implementation("com.google.android.material:material:1.6.0")
     implementation(project(':core:core-remoteviews'))
     implementation(libs.kotlinStdlib)
 
diff --git a/glance/glance-appwidget/integration-tests/template-demos/src/main/java/androidx/glance/appwidget/template/demos/SingleEntityDemoWidget.kt b/glance/glance-appwidget/integration-tests/template-demos/src/main/java/androidx/glance/appwidget/template/demos/SingleEntityDemoWidget.kt
index 817c650..37e0d5c 100644
--- a/glance/glance-appwidget/integration-tests/template-demos/src/main/java/androidx/glance/appwidget/template/demos/SingleEntityDemoWidget.kt
+++ b/glance/glance-appwidget/integration-tests/template-demos/src/main/java/androidx/glance/appwidget/template/demos/SingleEntityDemoWidget.kt
@@ -25,7 +25,6 @@
 import androidx.glance.action.ActionParameters
 import androidx.glance.appwidget.GlanceAppWidget
 import androidx.glance.appwidget.GlanceAppWidgetReceiver
-import androidx.glance.appwidget.SizeMode
 import androidx.glance.appwidget.action.ActionCallback
 import androidx.glance.appwidget.action.actionRunCallback
 import androidx.glance.appwidget.state.updateAppWidgetState
@@ -46,7 +45,6 @@
  * Demo app widget using [SingleEntityTemplate] to define layout.
  */
 class SingleEntityDemoWidget : GlanceTemplateAppWidget() {
-    override val sizeMode = SizeMode.Exact
 
     @Composable
     override fun TemplateContent() {
diff --git a/glance/glance-appwidget/integration-tests/template-demos/src/main/res/drawable/ic_bookmark.xml b/glance/glance-appwidget/integration-tests/template-demos/src/main/res/drawable/ic_bookmark.xml
index 7845541..b4b41ae 100644
--- a/glance/glance-appwidget/integration-tests/template-demos/src/main/res/drawable/ic_bookmark.xml
+++ b/glance/glance-appwidget/integration-tests/template-demos/src/main/res/drawable/ic_bookmark.xml
@@ -19,7 +19,7 @@
     android:height="24dp"
     android:viewportWidth="24"
     android:viewportHeight="24"
-    android:tint="?attr/colorControlNormal">
+    android:tint="?android:attr/colorControlNormal">
     <path
         android:fillColor="@android:color/black"
         android:pathData="M5,21V5Q5,4.175 5.588,3.587Q6.175,3 7,3H17Q17.825,3 18.413,3.587Q19,4.175 19,5V21L12,18ZM7,17.95 L12,15.8 17,17.95V5Q17,5 17,5Q17,5 17,5H7Q7,5 7,5Q7,5 7,5ZM7,5Q7,5 7,5Q7,5 7,5H17Q17,5 17,5Q17,5 17,5H12Z"/>
diff --git a/glance/glance-appwidget/integration-tests/template-demos/src/main/res/drawable/ic_widgets.xml b/glance/glance-appwidget/integration-tests/template-demos/src/main/res/drawable/ic_widgets.xml
index 38e8899..12b30d1 100644
--- a/glance/glance-appwidget/integration-tests/template-demos/src/main/res/drawable/ic_widgets.xml
+++ b/glance/glance-appwidget/integration-tests/template-demos/src/main/res/drawable/ic_widgets.xml
@@ -17,7 +17,7 @@
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
     android:width="24dp"
     android:height="24dp"
-    android:tint="?attr/colorControlNormal"
+    android:tint="?android:attr/colorControlNormal"
     android:viewportHeight="24"
     android:viewportWidth="24">
     <path
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/template/GalleryTemplateLayouts.kt b/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/template/GalleryTemplateLayouts.kt
index 13624c0..77b48c7 100644
--- a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/template/GalleryTemplateLayouts.kt
+++ b/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/template/GalleryTemplateLayouts.kt
@@ -106,7 +106,7 @@
     val gridCells = if (Build.VERSION.SDK_INT >= 31) {
         GridCells.Adaptive((imageWidth + margin).dp)
     } else {
-        GridCells.Fixed(nCols)
+        GridCells.Fixed(nCols.coerceAtMost(5))
     }
     Column {
         Row(
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/template/GlanceTemplateAppWidget.kt b/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/template/GlanceTemplateAppWidget.kt
index 9762c26..5b7ec35 100644
--- a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/template/GlanceTemplateAppWidget.kt
+++ b/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/template/GlanceTemplateAppWidget.kt
@@ -19,6 +19,8 @@
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.CompositionLocalProvider
 import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.DpSize
+import androidx.compose.ui.unit.dp
 import androidx.glance.GlanceComposable
 import androidx.glance.LocalSize
 import androidx.glance.appwidget.GlanceAppWidget
@@ -35,8 +37,22 @@
  */
 abstract class GlanceTemplateAppWidget : GlanceAppWidget() {
 
-    /** Default widget size mode is [SizeMode.Exact] */
-    override val sizeMode = SizeMode.Exact
+    companion object {
+        private val COLLAPSED = DpSize(30.dp, 30.dp)
+        private val HORIZONTAL_S = DpSize(241.dp, 30.dp)
+        private val HORIZONTAL_M = DpSize(241.dp, 200.dp)
+        private val HORIZONTAL_L = DpSize(350.dp, 200.dp)
+        private val VERTICAL_S = DpSize(30.dp, 241.dp)
+        private val VERTICAL_M = DpSize(200.dp, 241.dp)
+        private val VERTICAL_L = DpSize(200.dp, 350.dp)
+    }
+
+    /** Default widget size mode is [SizeMode.Responsive] */
+    override val sizeMode: SizeMode = SizeMode.Responsive(
+        setOf(
+            COLLAPSED, VERTICAL_S, VERTICAL_M, VERTICAL_L, HORIZONTAL_S, HORIZONTAL_M, HORIZONTAL_L
+        )
+    )
 
     /** Default widget state definition is [PreferencesGlanceStateDefinition] */
     override val stateDefinition: GlanceStateDefinition<*>? = PreferencesGlanceStateDefinition
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/template/ListTemplateLayouts.kt b/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/template/ListTemplateLayouts.kt
index 28c6172..f769357 100644
--- a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/template/ListTemplateLayouts.kt
+++ b/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/template/ListTemplateLayouts.kt
@@ -78,9 +78,8 @@
 @Composable
 private fun WidgetLayoutExpanded(data: ListTemplateData) {
     Column(modifier = createTopLevelModifier()) {
-        if (data.listStyle == ListStyle.Full) {
+        if (data.listStyle == ListStyle.Full && data.headerBlock != null) {
             HeaderBlockTemplate(data.headerBlock)
-            // TODO(b/247613894): Do not add this spacing if header block is empty
             Spacer(modifier = GlanceModifier.height(16.dp))
         }
         LazyColumn {
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/template/SingleEntityTemplateLayouts.kt b/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/template/SingleEntityTemplateLayouts.kt
index 147f09a..58e4112 100644
--- a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/template/SingleEntityTemplateLayouts.kt
+++ b/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/template/SingleEntityTemplateLayouts.kt
@@ -87,10 +87,13 @@
         }
         Row(modifier = GlanceModifier.fillMaxWidth()) {
             data.textBlock?.let { AppWidgetTextSection(textList(it.text1, it.text2)) }
-            data.actionBlock?.let {
-                Spacer(modifier = GlanceModifier.width(16.dp))
-                Spacer(modifier = GlanceModifier.defaultWeight())
-                ActionBlockTemplate(it)
+            // TODO(b/247613894): Fix for multiple actions
+            if (LocalSize.current.width > 100.dp) {
+                data.actionBlock?.let {
+                    Spacer(modifier = GlanceModifier.width(16.dp))
+                    Spacer(modifier = GlanceModifier.defaultWeight())
+                    ActionBlockTemplate(it)
+                }
             }
         }
     }
@@ -108,14 +111,17 @@
             }
             Spacer(modifier = GlanceModifier.defaultWeight())
 
-            // TODO: Extract small height as template constant
+            // TODO(b/247613894): Extract size constraints as template constants
             data.textBlock?.let {
-                val body = if (LocalSize.current.height > 240.dp) it.text3 else null
+                val body = if (LocalSize.current.height > 150.dp) it.text3 else null
                 AppWidgetTextSection(textList(it.text1, it.text2, body))
             }
-            data.actionBlock?.let {
-                Spacer(modifier = GlanceModifier.height(16.dp))
-                ActionBlockTemplate(it)
+            // TODO(b/247613894): Extract threshold sizes as constants
+            if (LocalSize.current.height > 30.dp) {
+                data.actionBlock?.let {
+                    Spacer(modifier = GlanceModifier.height(16.dp))
+                    ActionBlockTemplate(it)
+                }
             }
         }
 
diff --git a/glance/glance-wear-tiles/build.gradle b/glance/glance-wear-tiles/build.gradle
index cd8d37f..7c09cd6 100644
--- a/glance/glance-wear-tiles/build.gradle
+++ b/glance/glance-wear-tiles/build.gradle
@@ -77,6 +77,8 @@
     lintOptions {
         // TODO(b/191286558): Remove when lint is fixed.
         disable "UnsafeOptInUsageError", "UnsafeOptInUsageWarning"
+        // protobuf generates unannotated methods
+        disable "UnknownNullness"
     }
 
     sourceSets {
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 3c7aa7a..0c0c17b 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -203,7 +203,7 @@
 paparazziNativeMacOsX64 = { module = "app.cash.paparazzi:layoutlib-native-macosx", version.ref = "paparazziNative" }
 protobuf = { module = "com.google.protobuf:protobuf-java", version.ref = "protobuf" }
 protobufCompiler = { module = "com.google.protobuf:protoc", version.ref = "protobuf" }
-protobufGradlePluginz = { module = "com.google.protobuf:protobuf-gradle-plugin", version = "0.8.18" }
+protobufGradlePluginz = { module = "com.google.protobuf:protobuf-gradle-plugin", version = "0.9.0" }
 protobufLite = { module = "com.google.protobuf:protobuf-javalite", version.ref = "protobuf" }
 reactiveStreams = { module = "org.reactivestreams:reactive-streams", version = "1.0.0" }
 retrofit = { module = "com.squareup.retrofit2:retrofit", version.ref = "retrofit" }
diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml
index b700dd4..805dbeb 100644
--- a/gradle/verification-metadata.xml
+++ b/gradle/verification-metadata.xml
@@ -84,7 +84,10 @@
             <trusting group="io.reactivex.rxjava2"/>
             <trusting group="io.reactivex.rxjava3"/>
          </trusted-key>
-         <trusted-key id="1dbb44e80f61493d6369b5fb95c15058a5eda4f1" group="com.google.protobuf" name="protobuf-gradle-plugin"/>
+         <trusted-key id="1dbb44e80f61493d6369b5fb95c15058a5eda4f1">
+            <trusting group="com.google.protobuf" name="protobuf-gradle-plugin"/>
+            <trusting group="com.google.gradle"/>
+         </trusted-key>
          <trusted-key id="1f47744c9b6e14f2049c2857f1f111af65925306" group="io.github.classgraph" name="classgraph"/>
          <trusted-key id="1f8cf885d537a431" group="com.nhaarman.mockitokotlin2"/>
          <trusted-key id="1fa37fbe4453c1073e7ef61d6449005f96bc97a3" group="de.undercouch"/>
diff --git a/gradlew b/gradlew
index 3c2eea5..22617c1 100755
--- a/gradlew
+++ b/gradlew
@@ -122,7 +122,7 @@
 # setup from each lint module.
 export ANDROID_HOME="$APP_HOME/../../prebuilts/fullsdk-$plat"
 # override JAVA_HOME, because CI machines have it and it points to very old JDK
-export JAVA_HOME="$APP_HOME/../../prebuilts/jdk/jdk11/$plat-$platform_suffix"
+export JAVA_HOME="$APP_HOME/../../prebuilts/jdk/jdk17/$plat-$platform_suffix"
 export JAVA_TOOLS_JAR="$APP_HOME/../../prebuilts/jdk/jdk8/$plat-x86/lib/tools.jar"
 export STUDIO_GRADLE_JDK=$JAVA_HOME
 
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/GLFrontBufferedRendererTest.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/GLFrontBufferedRendererTest.kt
index fca46da..f31b625 100644
--- a/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/GLFrontBufferedRendererTest.kt
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/GLFrontBufferedRendererTest.kt
@@ -19,6 +19,7 @@
 import android.graphics.Color
 import android.hardware.HardwareBuffer
 import android.opengl.GLES20
+import android.opengl.Matrix
 import android.os.Build
 import android.util.Log
 import android.view.SurfaceView
@@ -267,10 +268,14 @@
     @Test
     @SdkSuppress(minSdkVersion = Build.VERSION_CODES.Q)
     fun testBaseFlags() {
-        assertNotEquals(0, GLFrontBufferedRenderer.BaseFlags and
-            HardwareBuffer.USAGE_GPU_SAMPLED_IMAGE)
-        assertNotEquals(0, GLFrontBufferedRenderer.BaseFlags and
-            HardwareBuffer.USAGE_GPU_COLOR_OUTPUT)
+        assertNotEquals(
+            0, GLFrontBufferedRenderer.BaseFlags and
+                HardwareBuffer.USAGE_GPU_SAMPLED_IMAGE
+        )
+        assertNotEquals(
+            0, GLFrontBufferedRenderer.BaseFlags and
+                HardwareBuffer.USAGE_GPU_COLOR_OUTPUT
+        )
     }
 
     @Test
@@ -335,6 +340,134 @@
         }
     }
 
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.Q)
+    @Test
+    fun testFrontBufferedLayerPersistence() {
+        if (!deviceSupportsNativeAndroidFence()) {
+            // If the Android device does not support the corresponding extensions to create
+            // a file descriptor from an EGLSync object then skip the test
+            Log.w(TAG, "Skipping testDoubleBufferedLayerRender, no native android fence support")
+            return
+        }
+        val mMVPMatrix = FloatArray(16)
+        val mLines = FloatArray(4)
+        val mLineRenderer = LineRenderer()
+        val screenWidth = FrontBufferedRendererTestActivity.WIDTH
+        val screenHeight = FrontBufferedRendererTestActivity.HEIGHT
+
+        val renderLatch = CountDownLatch(1)
+        val firstDrawLatch = CountDownLatch(1)
+        val callbacks = object : GLFrontBufferedRenderer.Callback<Any> {
+            override fun onDrawFrontBufferedLayer(eglManager: EGLManager, param: Any) {
+                mLineRenderer.initialize()
+                GLES20.glViewport(0, 0, screenWidth, screenHeight)
+
+                Matrix.orthoM(
+                    mMVPMatrix,
+                    0,
+                    0f,
+                    screenWidth.toFloat(),
+                    0f,
+                    screenHeight.toFloat(),
+                    -1f,
+                    1f
+                )
+
+                mLines[0] = screenWidth / 4 + (param as Float)
+                mLines[1] = 0f
+                mLines[2] = screenWidth / 4 + param
+                mLines[3] = 100f
+
+                mLineRenderer.drawLines(mMVPMatrix, mLines)
+                assertEquals(GLES20.GL_NO_ERROR, GLES20.glGetError())
+                firstDrawLatch.countDown()
+                mLineRenderer.release()
+            }
+
+            override fun onDrawDoubleBufferedLayer(
+                eglManager: EGLManager,
+                params: Collection<Any>
+            ) {
+                mLineRenderer.initialize()
+                GLES20.glViewport(0, 0, screenWidth, screenHeight)
+                Matrix.orthoM(
+                    mMVPMatrix,
+                    0,
+                    0f,
+                    screenWidth.toFloat(),
+                    0f,
+                    screenHeight.toFloat(),
+                    -1f,
+                    1f
+                )
+
+                for (param in params) {
+                    mLines[0] = screenWidth / 4 + (param as Float)
+                    mLines[1] = 0f
+                    mLines[2] = screenWidth / 4 + param
+                    mLines[3] = 100f
+
+                    mLineRenderer.drawLines(mMVPMatrix, mLines)
+                    assertEquals(GLES20.GL_NO_ERROR, GLES20.glGetError())
+                }
+                mLineRenderer.release()
+            }
+
+            override fun onDoubleBufferedLayerRenderComplete(
+                frontBufferedLayerSurfaceControl: SurfaceControlCompat,
+                transaction: SurfaceControlCompat.Transaction
+            ) {
+                transaction.addTransactionCommittedListener(
+                    Executors.newSingleThreadExecutor(),
+                    object : SurfaceControlCompat.TransactionCommittedListener {
+                        override fun onTransactionCommitted() {
+                            renderLatch.countDown()
+                        }
+                    })
+            }
+        }
+        var renderer: GLFrontBufferedRenderer<Any>? = null
+        var surfaceView: SurfaceView? = null
+        try {
+            val scenario = ActivityScenario.launch(FrontBufferedRendererTestActivity::class.java)
+                .moveToState(Lifecycle.State.CREATED)
+                .onActivity {
+                    surfaceView = it.getSurfaceView()
+                    renderer = GLFrontBufferedRenderer(surfaceView!!, callbacks)
+                }
+
+            scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+                renderer?.renderFrontBufferedLayer(0f)
+                renderer?.commit()
+                renderer?.renderFrontBufferedLayer(screenWidth / 2f)
+                renderer?.commit()
+            }
+
+            assertTrue(renderLatch.await(3000, TimeUnit.MILLISECONDS))
+
+            val coords = IntArray(2)
+            val width: Int
+            val height: Int
+            with(surfaceView!!) {
+                getLocationOnScreen(coords)
+                width = this.width
+                height = this.height
+            }
+
+            SurfaceControlUtils.validateOutput { bitmap ->
+                (bitmap.getPixel(
+                    coords[0] + width / 4, coords[1] + height / 2
+                ) == Color.RED) &&
+                    (bitmap.getPixel(
+                        coords[0] + 3 * width / 4,
+                        coords[1] + height / 2
+                    ) == Color.RED)
+            }
+        } finally {
+            renderer.blockingRelease()
+        }
+    }
+
     @RequiresApi(Build.VERSION_CODES.Q)
     private fun GLFrontBufferedRenderer<*>?.blockingRelease(timeoutMillis: Long = 3000) {
         if (this != null) {
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/LineRenderer.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/LineRenderer.kt
index e80f18e..09c5c80 100644
--- a/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/LineRenderer.kt
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/LineRenderer.kt
@@ -96,7 +96,7 @@
 
         val buff = FloatBuffer.allocate(2)
         GLES20.glGetFloatv(GLES20.GL_ALIASED_LINE_WIDTH_RANGE, buff)
-        GLES20.glLineWidth(100.0f)
+        GLES20.glLineWidth(10.0f)
 
         GLES20.glEnableVertexAttribArray(mPositionHandle)
 
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/GLFrontBufferedRenderer.kt b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/GLFrontBufferedRenderer.kt
index 5124919..e2c0db19 100644
--- a/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/GLFrontBufferedRenderer.kt
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/GLFrontBufferedRenderer.kt
@@ -356,6 +356,7 @@
      */
     fun commit() {
         if (isValid()) {
+            mFrontBufferQueueParams.clear()
             mDoubleBufferedLayerRenderTarget?.requestRender()
             mFrontBufferedLayerRenderer?.clear()
         } else {
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/SurfaceViewRenderLayer.kt b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/SurfaceViewRenderLayer.kt
index 76a9dce..d22f59d 100644
--- a/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/SurfaceViewRenderLayer.kt
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/SurfaceViewRenderLayer.kt
@@ -71,7 +71,6 @@
                     val params = mLayerCallback?.obtainDoubleBufferedLayerParams()
                     if (params != null) {
                         renderLayerCallback.onDrawDoubleBufferedLayer(eglManager, params)
-                        params.clear()
                     } else {
                         renderLayerCallback.onDrawDoubleBufferedLayer(
                             eglManager,
diff --git a/health/connect/connect-client-proto/build.gradle b/health/connect/connect-client-proto/build.gradle
index 507a245..79350e1 100644
--- a/health/connect/connect-client-proto/build.gradle
+++ b/health/connect/connect-client-proto/build.gradle
@@ -38,26 +38,11 @@
     protoc {
         artifact = libs.protobufCompiler.get()
     }
-
-    // Generates the java proto-lite code for the protos in this project. See
-    // https://github.com/google/protobuf-gradle-plugin#customizing-protobuf-compilation
-    // for more information.
     generateProtoTasks {
+        ofSourceSet("main").each { task ->
+            sourceSets.main.java.srcDir(task)
+        }
         all().each { task ->
-            project.tasks.named("sourceJar").configure {
-                it.dependsOn(task)
-            }
-            project.tasks.named("runErrorProne").configure {
-                it.dependsOn(task)
-            }
-            project.tasks.named("lint").configure {
-                it.dependsOn(task)
-                it.enabled = false
-            }
-            project.tasks.named("lintAnalyze").configure {
-                it.dependsOn(task)
-                it.enabled = false
-            }
             task.builtins {
                 java {
                     option "lite"
@@ -67,6 +52,15 @@
     }
 }
 
+afterEvaluate {
+    lint {
+        lintOptions {
+            // protobuf generates unannotated and synthetic accessor methods
+            disable("UnknownNullness", "SyntheticAccessor")
+        }
+    }
+}
+
 // Create export artifact for for JarJaring
 def preferencesProtoJarJarTask = tasks.register("exportJar", Jar) {
     archiveBaseName.set("export")
diff --git a/health/connect/connect-client/api/api_lint.ignore b/health/connect/connect-client/api/api_lint.ignore
deleted file mode 100644
index b9ce885..0000000
--- a/health/connect/connect-client/api/api_lint.ignore
+++ /dev/null
@@ -1,125 +0,0 @@
-// Baseline format: 1.0
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.BasalBodyTemperatureRecord#BasalBodyTemperatureRecord(androidx.health.connect.client.units.Temperature, String, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #1:
-    Parameter `measurementLocation` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.BloodGlucoseRecord#BloodGlucoseRecord(androidx.health.connect.client.units.BloodGlucose, String, String, String, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #1:
-    Parameter `specimenSource` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.BloodGlucoseRecord#BloodGlucoseRecord(androidx.health.connect.client.units.BloodGlucose, String, String, String, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #2:
-    Parameter `mealType` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.BloodGlucoseRecord#BloodGlucoseRecord(androidx.health.connect.client.units.BloodGlucose, String, String, String, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #3:
-    Parameter `relationToMeal` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.BloodPressureRecord#BloodPressureRecord(androidx.health.connect.client.units.Pressure, androidx.health.connect.client.units.Pressure, String, String, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #2:
-    Parameter `bodyPosition` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.BloodPressureRecord#BloodPressureRecord(androidx.health.connect.client.units.Pressure, androidx.health.connect.client.units.Pressure, String, String, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #3:
-    Parameter `measurementLocation` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.BodyTemperatureRecord#BodyTemperatureRecord(androidx.health.connect.client.units.Temperature, String, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #1:
-    Parameter `measurementLocation` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.CervicalMucusRecord#CervicalMucusRecord(String, String, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #0:
-    Parameter `appearance` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.CervicalMucusRecord#CervicalMucusRecord(String, String, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #1:
-    Parameter `sensation` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.ExerciseLapRecord#ExerciseLapRecord(androidx.health.connect.client.units.Length, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #0:
-    Parameter `length` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.ExerciseSessionRecord#ExerciseSessionRecord(String, String, String, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #1:
-    Parameter `title` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.ExerciseSessionRecord#ExerciseSessionRecord(String, String, String, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #2:
-    Parameter `notes` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.MenstruationFlowRecord#MenstruationFlowRecord(String, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #0:
-    Parameter `flow` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.NutritionRecord#NutritionRecord(androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, String, String, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #0:
-    Parameter `biotin` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.NutritionRecord#NutritionRecord(androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, String, String, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #1:
-    Parameter `caffeine` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.NutritionRecord#NutritionRecord(androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, String, String, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #10:
-    Parameter `folate` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.NutritionRecord#NutritionRecord(androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, String, String, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #11:
-    Parameter `folicAcid` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.NutritionRecord#NutritionRecord(androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, String, String, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #12:
-    Parameter `iodine` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.NutritionRecord#NutritionRecord(androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, String, String, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #13:
-    Parameter `iron` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.NutritionRecord#NutritionRecord(androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, String, String, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #14:
-    Parameter `magnesium` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.NutritionRecord#NutritionRecord(androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, String, String, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #15:
-    Parameter `manganese` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.NutritionRecord#NutritionRecord(androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, String, String, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #16:
-    Parameter `molybdenum` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.NutritionRecord#NutritionRecord(androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, String, String, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #17:
-    Parameter `monounsaturatedFat` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.NutritionRecord#NutritionRecord(androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, String, String, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #18:
-    Parameter `niacin` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.NutritionRecord#NutritionRecord(androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, String, String, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #19:
-    Parameter `pantothenicAcid` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.NutritionRecord#NutritionRecord(androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, String, String, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #2:
-    Parameter `calcium` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.NutritionRecord#NutritionRecord(androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, String, String, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #20:
-    Parameter `phosphorus` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.NutritionRecord#NutritionRecord(androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, String, String, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #21:
-    Parameter `polyunsaturatedFat` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.NutritionRecord#NutritionRecord(androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, String, String, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #22:
-    Parameter `potassium` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.NutritionRecord#NutritionRecord(androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, String, String, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #23:
-    Parameter `protein` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.NutritionRecord#NutritionRecord(androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, String, String, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #24:
-    Parameter `riboflavin` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.NutritionRecord#NutritionRecord(androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, String, String, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #25:
-    Parameter `saturatedFat` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.NutritionRecord#NutritionRecord(androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, String, String, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #26:
-    Parameter `selenium` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.NutritionRecord#NutritionRecord(androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, String, String, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #27:
-    Parameter `sodium` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.NutritionRecord#NutritionRecord(androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, String, String, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #28:
-    Parameter `sugar` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.NutritionRecord#NutritionRecord(androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, String, String, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #29:
-    Parameter `thiamin` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.NutritionRecord#NutritionRecord(androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, String, String, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #3:
-    Parameter `energy` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.NutritionRecord#NutritionRecord(androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, String, String, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #30:
-    Parameter `totalCarbohydrate` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.NutritionRecord#NutritionRecord(androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, String, String, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #31:
-    Parameter `totalFat` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.NutritionRecord#NutritionRecord(androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, String, String, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #32:
-    Parameter `transFat` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.NutritionRecord#NutritionRecord(androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, String, String, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #33:
-    Parameter `unsaturatedFat` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.NutritionRecord#NutritionRecord(androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, String, String, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #34:
-    Parameter `vitaminA` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.NutritionRecord#NutritionRecord(androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, String, String, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #35:
-    Parameter `vitaminB12` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.NutritionRecord#NutritionRecord(androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, String, String, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #36:
-    Parameter `vitaminB6` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.NutritionRecord#NutritionRecord(androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, String, String, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #37:
-    Parameter `vitaminC` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.NutritionRecord#NutritionRecord(androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, String, String, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #38:
-    Parameter `vitaminD` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.NutritionRecord#NutritionRecord(androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, String, String, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #39:
-    Parameter `vitaminE` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.NutritionRecord#NutritionRecord(androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, String, String, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #4:
-    Parameter `energyFromFat` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.NutritionRecord#NutritionRecord(androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, String, String, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #40:
-    Parameter `vitaminK` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.NutritionRecord#NutritionRecord(androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, String, String, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #41:
-    Parameter `zinc` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.NutritionRecord#NutritionRecord(androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, String, String, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #42:
-    Parameter `name` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.NutritionRecord#NutritionRecord(androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, String, String, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #43:
-    Parameter `mealType` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.NutritionRecord#NutritionRecord(androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, String, String, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #5:
-    Parameter `chloride` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.NutritionRecord#NutritionRecord(androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, String, String, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #6:
-    Parameter `cholesterol` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.NutritionRecord#NutritionRecord(androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, String, String, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #7:
-    Parameter `chromium` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.NutritionRecord#NutritionRecord(androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, String, String, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #8:
-    Parameter `copper` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.NutritionRecord#NutritionRecord(androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Energy, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, androidx.health.connect.client.units.Mass, String, String, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #9:
-    Parameter `dietaryFiber` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.SexualActivityRecord#SexualActivityRecord(String, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #0:
-    Parameter `protectionUsed` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.SleepSessionRecord#SleepSessionRecord(String, String, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #0:
-    Parameter `title` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.SleepSessionRecord#SleepSessionRecord(String, String, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #1:
-    Parameter `notes` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.SwimmingStrokesRecord#SwimmingStrokesRecord(long, String, java.time.Instant, java.time.ZoneOffset, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #0:
-    Parameter `count` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.health.connect.client.records.Vo2MaxRecord#Vo2MaxRecord(double, String, java.time.Instant, java.time.ZoneOffset, androidx.health.connect.client.records.metadata.Metadata) parameter #1:
-    Parameter `measurementMethod` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
diff --git a/health/connect/connect-client/api/current.txt b/health/connect/connect-client/api/current.txt
index b37c38c6..a551d10 100644
--- a/health/connect/connect-client/api/current.txt
+++ b/health/connect/connect-client/api/current.txt
@@ -118,7 +118,7 @@
 package androidx.health.connect.client.records {
 
   public final class ActiveCaloriesBurnedRecord implements androidx.health.connect.client.records.Record {
-    ctor public ActiveCaloriesBurnedRecord(androidx.health.connect.client.units.Energy energy, java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public ActiveCaloriesBurnedRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, androidx.health.connect.client.units.Energy energy, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public java.time.Instant getEndTime();
     method public java.time.ZoneOffset? getEndZoneOffset();
     method public androidx.health.connect.client.units.Energy getEnergy();
@@ -139,7 +139,7 @@
   }
 
   public final class BasalBodyTemperatureRecord implements androidx.health.connect.client.records.Record {
-    ctor public BasalBodyTemperatureRecord(androidx.health.connect.client.units.Temperature temperature, optional String? measurementLocation, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public BasalBodyTemperatureRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, androidx.health.connect.client.units.Temperature temperature, optional String? measurementLocation, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public String? getMeasurementLocation();
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public androidx.health.connect.client.units.Temperature getTemperature();
@@ -153,7 +153,7 @@
   }
 
   public final class BasalMetabolicRateRecord implements androidx.health.connect.client.records.Record {
-    ctor public BasalMetabolicRateRecord(androidx.health.connect.client.units.Power basalMetabolicRate, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public BasalMetabolicRateRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, androidx.health.connect.client.units.Power basalMetabolicRate, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public androidx.health.connect.client.units.Power getBasalMetabolicRate();
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public java.time.Instant getTime();
@@ -170,7 +170,7 @@
   }
 
   public final class BloodGlucoseRecord implements androidx.health.connect.client.records.Record {
-    ctor public BloodGlucoseRecord(androidx.health.connect.client.units.BloodGlucose level, optional String? specimenSource, optional String? mealType, optional String? relationToMeal, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public BloodGlucoseRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, androidx.health.connect.client.units.BloodGlucose level, optional String? specimenSource, optional String? mealType, optional String? relationToMeal, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public androidx.health.connect.client.units.BloodGlucose getLevel();
     method public String? getMealType();
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
@@ -198,7 +198,7 @@
   }
 
   public final class BloodPressureRecord implements androidx.health.connect.client.records.Record {
-    ctor public BloodPressureRecord(androidx.health.connect.client.units.Pressure systolic, androidx.health.connect.client.units.Pressure diastolic, optional String? bodyPosition, optional String? measurementLocation, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public BloodPressureRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, androidx.health.connect.client.units.Pressure systolic, androidx.health.connect.client.units.Pressure diastolic, optional String? bodyPosition, optional String? measurementLocation, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public String? getBodyPosition();
     method public androidx.health.connect.client.units.Pressure getDiastolic();
     method public String? getMeasurementLocation();
@@ -234,7 +234,7 @@
   }
 
   public final class BodyFatRecord implements androidx.health.connect.client.records.Record {
-    ctor public BodyFatRecord(androidx.health.connect.client.units.Percentage percentage, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public BodyFatRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, androidx.health.connect.client.units.Percentage percentage, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public androidx.health.connect.client.units.Percentage getPercentage();
     method public java.time.Instant getTime();
@@ -268,7 +268,7 @@
   }
 
   public final class BodyTemperatureRecord implements androidx.health.connect.client.records.Record {
-    ctor public BodyTemperatureRecord(androidx.health.connect.client.units.Temperature temperature, optional String? measurementLocation, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public BodyTemperatureRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, androidx.health.connect.client.units.Temperature temperature, optional String? measurementLocation, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public String? getMeasurementLocation();
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public androidx.health.connect.client.units.Temperature getTemperature();
@@ -282,7 +282,7 @@
   }
 
   public final class BoneMassRecord implements androidx.health.connect.client.records.Record {
-    ctor public BoneMassRecord(androidx.health.connect.client.units.Mass mass, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public BoneMassRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, androidx.health.connect.client.units.Mass mass, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public androidx.health.connect.client.units.Mass getMass();
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public java.time.Instant getTime();
@@ -294,7 +294,7 @@
   }
 
   public final class CervicalMucusRecord implements androidx.health.connect.client.records.Record {
-    ctor public CervicalMucusRecord(optional String? appearance, optional String? sensation, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public CervicalMucusRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional String? appearance, optional String? sensation, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public String? getAppearance();
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public String? getSensation();
@@ -355,7 +355,7 @@
   }
 
   public final class DistanceRecord implements androidx.health.connect.client.records.Record {
-    ctor public DistanceRecord(androidx.health.connect.client.units.Length distance, java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public DistanceRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, androidx.health.connect.client.units.Length distance, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public androidx.health.connect.client.units.Length getDistance();
     method public java.time.Instant getEndTime();
     method public java.time.ZoneOffset? getEndZoneOffset();
@@ -376,7 +376,7 @@
   }
 
   public final class ElevationGainedRecord implements androidx.health.connect.client.records.Record {
-    ctor public ElevationGainedRecord(androidx.health.connect.client.units.Length elevation, java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public ElevationGainedRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, androidx.health.connect.client.units.Length elevation, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public androidx.health.connect.client.units.Length getElevation();
     method public java.time.Instant getEndTime();
     method public java.time.ZoneOffset? getEndZoneOffset();
@@ -397,7 +397,7 @@
   }
 
   public final class ExerciseEventRecord implements androidx.health.connect.client.records.Record {
-    ctor public ExerciseEventRecord(String eventType, java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public ExerciseEventRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, String eventType, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public java.time.Instant getEndTime();
     method public java.time.ZoneOffset? getEndZoneOffset();
     method public String getEventType();
@@ -419,7 +419,7 @@
   }
 
   public final class ExerciseLapRecord implements androidx.health.connect.client.records.Record {
-    ctor public ExerciseLapRecord(optional androidx.health.connect.client.units.Length? length, java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public ExerciseLapRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.units.Length? length, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public java.time.Instant getEndTime();
     method public java.time.ZoneOffset? getEndZoneOffset();
     method public androidx.health.connect.client.units.Length? getLength();
@@ -435,7 +435,7 @@
   }
 
   public final class ExerciseRepetitionsRecord implements androidx.health.connect.client.records.Record {
-    ctor public ExerciseRepetitionsRecord(long count, String type, java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public ExerciseRepetitionsRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, long count, String type, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public long getCount();
     method public java.time.Instant getEndTime();
     method public java.time.ZoneOffset? getEndZoneOffset();
@@ -487,7 +487,7 @@
   }
 
   public final class ExerciseSessionRecord implements androidx.health.connect.client.records.Record {
-    ctor public ExerciseSessionRecord(String exerciseType, optional String? title, optional String? notes, java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public ExerciseSessionRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, String exerciseType, optional String? title, optional String? notes, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public java.time.Instant getEndTime();
     method public java.time.ZoneOffset? getEndZoneOffset();
     method public String getExerciseType();
@@ -600,7 +600,7 @@
   }
 
   public final class FloorsClimbedRecord implements androidx.health.connect.client.records.Record {
-    ctor public FloorsClimbedRecord(double floors, java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public FloorsClimbedRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, double floors, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public java.time.Instant getEndTime();
     method public java.time.ZoneOffset? getEndZoneOffset();
     method public double getFloors();
@@ -653,7 +653,7 @@
   }
 
   public final class HeightRecord implements androidx.health.connect.client.records.Record {
-    ctor public HeightRecord(androidx.health.connect.client.units.Length height, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public HeightRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, androidx.health.connect.client.units.Length height, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public androidx.health.connect.client.units.Length getHeight();
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public java.time.Instant getTime();
@@ -672,7 +672,7 @@
   }
 
   public final class HipCircumferenceRecord implements androidx.health.connect.client.records.Record {
-    ctor public HipCircumferenceRecord(androidx.health.connect.client.units.Length circumference, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public HipCircumferenceRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, androidx.health.connect.client.units.Length circumference, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public androidx.health.connect.client.units.Length getCircumference();
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public java.time.Instant getTime();
@@ -684,7 +684,7 @@
   }
 
   public final class HydrationRecord implements androidx.health.connect.client.records.Record {
-    ctor public HydrationRecord(androidx.health.connect.client.units.Volume volume, java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public HydrationRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, androidx.health.connect.client.units.Volume volume, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public java.time.Instant getEndTime();
     method public java.time.ZoneOffset? getEndZoneOffset();
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
@@ -705,7 +705,7 @@
   }
 
   public final class LeanBodyMassRecord implements androidx.health.connect.client.records.Record {
-    ctor public LeanBodyMassRecord(androidx.health.connect.client.units.Mass mass, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public LeanBodyMassRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, androidx.health.connect.client.units.Mass mass, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public androidx.health.connect.client.units.Mass getMass();
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public java.time.Instant getTime();
@@ -726,7 +726,7 @@
   }
 
   public final class MenstruationFlowRecord implements androidx.health.connect.client.records.Record {
-    ctor public MenstruationFlowRecord(optional String? flow, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public MenstruationFlowRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional String? flow, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public String? getFlow();
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public java.time.Instant getTime();
@@ -746,7 +746,7 @@
   }
 
   public final class NutritionRecord implements androidx.health.connect.client.records.Record {
-    ctor public NutritionRecord(optional androidx.health.connect.client.units.Mass? biotin, optional androidx.health.connect.client.units.Mass? caffeine, optional androidx.health.connect.client.units.Mass? calcium, optional androidx.health.connect.client.units.Energy? energy, optional androidx.health.connect.client.units.Energy? energyFromFat, optional androidx.health.connect.client.units.Mass? chloride, optional androidx.health.connect.client.units.Mass? cholesterol, optional androidx.health.connect.client.units.Mass? chromium, optional androidx.health.connect.client.units.Mass? copper, optional androidx.health.connect.client.units.Mass? dietaryFiber, optional androidx.health.connect.client.units.Mass? folate, optional androidx.health.connect.client.units.Mass? folicAcid, optional androidx.health.connect.client.units.Mass? iodine, optional androidx.health.connect.client.units.Mass? iron, optional androidx.health.connect.client.units.Mass? magnesium, optional androidx.health.connect.client.units.Mass? manganese, optional androidx.health.connect.client.units.Mass? molybdenum, optional androidx.health.connect.client.units.Mass? monounsaturatedFat, optional androidx.health.connect.client.units.Mass? niacin, optional androidx.health.connect.client.units.Mass? pantothenicAcid, optional androidx.health.connect.client.units.Mass? phosphorus, optional androidx.health.connect.client.units.Mass? polyunsaturatedFat, optional androidx.health.connect.client.units.Mass? potassium, optional androidx.health.connect.client.units.Mass? protein, optional androidx.health.connect.client.units.Mass? riboflavin, optional androidx.health.connect.client.units.Mass? saturatedFat, optional androidx.health.connect.client.units.Mass? selenium, optional androidx.health.connect.client.units.Mass? sodium, optional androidx.health.connect.client.units.Mass? sugar, optional androidx.health.connect.client.units.Mass? thiamin, optional androidx.health.connect.client.units.Mass? totalCarbohydrate, optional androidx.health.connect.client.units.Mass? totalFat, optional androidx.health.connect.client.units.Mass? transFat, optional androidx.health.connect.client.units.Mass? unsaturatedFat, optional androidx.health.connect.client.units.Mass? vitaminA, optional androidx.health.connect.client.units.Mass? vitaminB12, optional androidx.health.connect.client.units.Mass? vitaminB6, optional androidx.health.connect.client.units.Mass? vitaminC, optional androidx.health.connect.client.units.Mass? vitaminD, optional androidx.health.connect.client.units.Mass? vitaminE, optional androidx.health.connect.client.units.Mass? vitaminK, optional androidx.health.connect.client.units.Mass? zinc, optional String? name, optional String? mealType, java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public NutritionRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.units.Mass? biotin, optional androidx.health.connect.client.units.Mass? caffeine, optional androidx.health.connect.client.units.Mass? calcium, optional androidx.health.connect.client.units.Energy? energy, optional androidx.health.connect.client.units.Energy? energyFromFat, optional androidx.health.connect.client.units.Mass? chloride, optional androidx.health.connect.client.units.Mass? cholesterol, optional androidx.health.connect.client.units.Mass? chromium, optional androidx.health.connect.client.units.Mass? copper, optional androidx.health.connect.client.units.Mass? dietaryFiber, optional androidx.health.connect.client.units.Mass? folate, optional androidx.health.connect.client.units.Mass? folicAcid, optional androidx.health.connect.client.units.Mass? iodine, optional androidx.health.connect.client.units.Mass? iron, optional androidx.health.connect.client.units.Mass? magnesium, optional androidx.health.connect.client.units.Mass? manganese, optional androidx.health.connect.client.units.Mass? molybdenum, optional androidx.health.connect.client.units.Mass? monounsaturatedFat, optional androidx.health.connect.client.units.Mass? niacin, optional androidx.health.connect.client.units.Mass? pantothenicAcid, optional androidx.health.connect.client.units.Mass? phosphorus, optional androidx.health.connect.client.units.Mass? polyunsaturatedFat, optional androidx.health.connect.client.units.Mass? potassium, optional androidx.health.connect.client.units.Mass? protein, optional androidx.health.connect.client.units.Mass? riboflavin, optional androidx.health.connect.client.units.Mass? saturatedFat, optional androidx.health.connect.client.units.Mass? selenium, optional androidx.health.connect.client.units.Mass? sodium, optional androidx.health.connect.client.units.Mass? sugar, optional androidx.health.connect.client.units.Mass? thiamin, optional androidx.health.connect.client.units.Mass? totalCarbohydrate, optional androidx.health.connect.client.units.Mass? totalFat, optional androidx.health.connect.client.units.Mass? transFat, optional androidx.health.connect.client.units.Mass? unsaturatedFat, optional androidx.health.connect.client.units.Mass? vitaminA, optional androidx.health.connect.client.units.Mass? vitaminB12, optional androidx.health.connect.client.units.Mass? vitaminB6, optional androidx.health.connect.client.units.Mass? vitaminC, optional androidx.health.connect.client.units.Mass? vitaminD, optional androidx.health.connect.client.units.Mass? vitaminE, optional androidx.health.connect.client.units.Mass? vitaminK, optional androidx.health.connect.client.units.Mass? zinc, optional String? name, optional String? mealType, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public androidx.health.connect.client.units.Mass? getBiotin();
     method public androidx.health.connect.client.units.Mass? getCaffeine();
     method public androidx.health.connect.client.units.Mass? getCalcium();
@@ -894,7 +894,7 @@
   }
 
   public final class OvulationTestRecord implements androidx.health.connect.client.records.Record {
-    ctor public OvulationTestRecord(String result, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public OvulationTestRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, String result, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public String getResult();
     method public java.time.Instant getTime();
@@ -914,7 +914,7 @@
   }
 
   public final class OxygenSaturationRecord implements androidx.health.connect.client.records.Record {
-    ctor public OxygenSaturationRecord(androidx.health.connect.client.units.Percentage percentage, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public OxygenSaturationRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, androidx.health.connect.client.units.Percentage percentage, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public androidx.health.connect.client.units.Percentage getPercentage();
     method public java.time.Instant getTime();
@@ -970,7 +970,7 @@
   }
 
   public final class RespiratoryRateRecord implements androidx.health.connect.client.records.Record {
-    ctor public RespiratoryRateRecord(double rate, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public RespiratoryRateRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, double rate, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public double getRate();
     method public java.time.Instant getTime();
@@ -982,7 +982,7 @@
   }
 
   public final class RestingHeartRateRecord implements androidx.health.connect.client.records.Record {
-    ctor public RestingHeartRateRecord(long beatsPerMinute, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public RestingHeartRateRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, long beatsPerMinute, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public long getBeatsPerMinute();
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public java.time.Instant getTime();
@@ -1001,7 +1001,7 @@
   }
 
   public final class SexualActivityRecord implements androidx.health.connect.client.records.Record {
-    ctor public SexualActivityRecord(optional String? protectionUsed, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public SexualActivityRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional String? protectionUsed, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public String? getProtectionUsed();
     method public java.time.Instant getTime();
@@ -1019,7 +1019,7 @@
   }
 
   public final class SleepSessionRecord implements androidx.health.connect.client.records.Record {
-    ctor public SleepSessionRecord(optional String? title, optional String? notes, java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public SleepSessionRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional String? title, optional String? notes, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public java.time.Instant getEndTime();
     method public java.time.ZoneOffset? getEndZoneOffset();
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
@@ -1042,7 +1042,7 @@
   }
 
   public final class SleepStageRecord implements androidx.health.connect.client.records.Record {
-    ctor public SleepStageRecord(String stage, java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public SleepStageRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, String stage, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public java.time.Instant getEndTime();
     method public java.time.ZoneOffset? getEndZoneOffset();
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
@@ -1131,7 +1131,7 @@
   }
 
   public final class StepsRecord implements androidx.health.connect.client.records.Record {
-    ctor public StepsRecord(long count, java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public StepsRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, long count, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public long getCount();
     method public java.time.Instant getEndTime();
     method public java.time.ZoneOffset? getEndZoneOffset();
@@ -1152,7 +1152,7 @@
   }
 
   public final class SwimmingStrokesRecord implements androidx.health.connect.client.records.Record {
-    ctor public SwimmingStrokesRecord(optional long count, String type, java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public SwimmingStrokesRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, String type, optional long count, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public long getCount();
     method public java.time.Instant getEndTime();
     method public java.time.ZoneOffset? getEndZoneOffset();
@@ -1180,7 +1180,7 @@
   }
 
   public final class TotalCaloriesBurnedRecord implements androidx.health.connect.client.records.Record {
-    ctor public TotalCaloriesBurnedRecord(androidx.health.connect.client.units.Energy energy, java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public TotalCaloriesBurnedRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, androidx.health.connect.client.units.Energy energy, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public java.time.Instant getEndTime();
     method public java.time.ZoneOffset? getEndZoneOffset();
     method public androidx.health.connect.client.units.Energy getEnergy();
@@ -1201,7 +1201,7 @@
   }
 
   public final class Vo2MaxRecord implements androidx.health.connect.client.records.Record {
-    ctor public Vo2MaxRecord(double vo2MillilitersPerMinuteKilogram, optional String? measurementMethod, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public Vo2MaxRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, double vo2MillilitersPerMinuteKilogram, optional String? measurementMethod, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public String? getMeasurementMethod();
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public java.time.Instant getTime();
@@ -1225,7 +1225,7 @@
   }
 
   public final class WaistCircumferenceRecord implements androidx.health.connect.client.records.Record {
-    ctor public WaistCircumferenceRecord(androidx.health.connect.client.units.Length circumference, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public WaistCircumferenceRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, androidx.health.connect.client.units.Length circumference, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public androidx.health.connect.client.units.Length getCircumference();
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public java.time.Instant getTime();
@@ -1237,7 +1237,7 @@
   }
 
   public final class WeightRecord implements androidx.health.connect.client.records.Record {
-    ctor public WeightRecord(androidx.health.connect.client.units.Mass weight, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public WeightRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, androidx.health.connect.client.units.Mass weight, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public java.time.Instant getTime();
     method public androidx.health.connect.client.units.Mass getWeight();
@@ -1256,7 +1256,7 @@
   }
 
   public final class WheelchairPushesRecord implements androidx.health.connect.client.records.Record {
-    ctor public WheelchairPushesRecord(long count, java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public WheelchairPushesRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, long count, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public long getCount();
     method public java.time.Instant getEndTime();
     method public java.time.ZoneOffset? getEndZoneOffset();
diff --git a/health/connect/connect-client/api/public_plus_experimental_current.txt b/health/connect/connect-client/api/public_plus_experimental_current.txt
index b37c38c6..a551d10 100644
--- a/health/connect/connect-client/api/public_plus_experimental_current.txt
+++ b/health/connect/connect-client/api/public_plus_experimental_current.txt
@@ -118,7 +118,7 @@
 package androidx.health.connect.client.records {
 
   public final class ActiveCaloriesBurnedRecord implements androidx.health.connect.client.records.Record {
-    ctor public ActiveCaloriesBurnedRecord(androidx.health.connect.client.units.Energy energy, java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public ActiveCaloriesBurnedRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, androidx.health.connect.client.units.Energy energy, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public java.time.Instant getEndTime();
     method public java.time.ZoneOffset? getEndZoneOffset();
     method public androidx.health.connect.client.units.Energy getEnergy();
@@ -139,7 +139,7 @@
   }
 
   public final class BasalBodyTemperatureRecord implements androidx.health.connect.client.records.Record {
-    ctor public BasalBodyTemperatureRecord(androidx.health.connect.client.units.Temperature temperature, optional String? measurementLocation, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public BasalBodyTemperatureRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, androidx.health.connect.client.units.Temperature temperature, optional String? measurementLocation, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public String? getMeasurementLocation();
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public androidx.health.connect.client.units.Temperature getTemperature();
@@ -153,7 +153,7 @@
   }
 
   public final class BasalMetabolicRateRecord implements androidx.health.connect.client.records.Record {
-    ctor public BasalMetabolicRateRecord(androidx.health.connect.client.units.Power basalMetabolicRate, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public BasalMetabolicRateRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, androidx.health.connect.client.units.Power basalMetabolicRate, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public androidx.health.connect.client.units.Power getBasalMetabolicRate();
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public java.time.Instant getTime();
@@ -170,7 +170,7 @@
   }
 
   public final class BloodGlucoseRecord implements androidx.health.connect.client.records.Record {
-    ctor public BloodGlucoseRecord(androidx.health.connect.client.units.BloodGlucose level, optional String? specimenSource, optional String? mealType, optional String? relationToMeal, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public BloodGlucoseRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, androidx.health.connect.client.units.BloodGlucose level, optional String? specimenSource, optional String? mealType, optional String? relationToMeal, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public androidx.health.connect.client.units.BloodGlucose getLevel();
     method public String? getMealType();
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
@@ -198,7 +198,7 @@
   }
 
   public final class BloodPressureRecord implements androidx.health.connect.client.records.Record {
-    ctor public BloodPressureRecord(androidx.health.connect.client.units.Pressure systolic, androidx.health.connect.client.units.Pressure diastolic, optional String? bodyPosition, optional String? measurementLocation, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public BloodPressureRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, androidx.health.connect.client.units.Pressure systolic, androidx.health.connect.client.units.Pressure diastolic, optional String? bodyPosition, optional String? measurementLocation, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public String? getBodyPosition();
     method public androidx.health.connect.client.units.Pressure getDiastolic();
     method public String? getMeasurementLocation();
@@ -234,7 +234,7 @@
   }
 
   public final class BodyFatRecord implements androidx.health.connect.client.records.Record {
-    ctor public BodyFatRecord(androidx.health.connect.client.units.Percentage percentage, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public BodyFatRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, androidx.health.connect.client.units.Percentage percentage, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public androidx.health.connect.client.units.Percentage getPercentage();
     method public java.time.Instant getTime();
@@ -268,7 +268,7 @@
   }
 
   public final class BodyTemperatureRecord implements androidx.health.connect.client.records.Record {
-    ctor public BodyTemperatureRecord(androidx.health.connect.client.units.Temperature temperature, optional String? measurementLocation, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public BodyTemperatureRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, androidx.health.connect.client.units.Temperature temperature, optional String? measurementLocation, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public String? getMeasurementLocation();
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public androidx.health.connect.client.units.Temperature getTemperature();
@@ -282,7 +282,7 @@
   }
 
   public final class BoneMassRecord implements androidx.health.connect.client.records.Record {
-    ctor public BoneMassRecord(androidx.health.connect.client.units.Mass mass, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public BoneMassRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, androidx.health.connect.client.units.Mass mass, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public androidx.health.connect.client.units.Mass getMass();
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public java.time.Instant getTime();
@@ -294,7 +294,7 @@
   }
 
   public final class CervicalMucusRecord implements androidx.health.connect.client.records.Record {
-    ctor public CervicalMucusRecord(optional String? appearance, optional String? sensation, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public CervicalMucusRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional String? appearance, optional String? sensation, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public String? getAppearance();
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public String? getSensation();
@@ -355,7 +355,7 @@
   }
 
   public final class DistanceRecord implements androidx.health.connect.client.records.Record {
-    ctor public DistanceRecord(androidx.health.connect.client.units.Length distance, java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public DistanceRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, androidx.health.connect.client.units.Length distance, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public androidx.health.connect.client.units.Length getDistance();
     method public java.time.Instant getEndTime();
     method public java.time.ZoneOffset? getEndZoneOffset();
@@ -376,7 +376,7 @@
   }
 
   public final class ElevationGainedRecord implements androidx.health.connect.client.records.Record {
-    ctor public ElevationGainedRecord(androidx.health.connect.client.units.Length elevation, java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public ElevationGainedRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, androidx.health.connect.client.units.Length elevation, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public androidx.health.connect.client.units.Length getElevation();
     method public java.time.Instant getEndTime();
     method public java.time.ZoneOffset? getEndZoneOffset();
@@ -397,7 +397,7 @@
   }
 
   public final class ExerciseEventRecord implements androidx.health.connect.client.records.Record {
-    ctor public ExerciseEventRecord(String eventType, java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public ExerciseEventRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, String eventType, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public java.time.Instant getEndTime();
     method public java.time.ZoneOffset? getEndZoneOffset();
     method public String getEventType();
@@ -419,7 +419,7 @@
   }
 
   public final class ExerciseLapRecord implements androidx.health.connect.client.records.Record {
-    ctor public ExerciseLapRecord(optional androidx.health.connect.client.units.Length? length, java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public ExerciseLapRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.units.Length? length, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public java.time.Instant getEndTime();
     method public java.time.ZoneOffset? getEndZoneOffset();
     method public androidx.health.connect.client.units.Length? getLength();
@@ -435,7 +435,7 @@
   }
 
   public final class ExerciseRepetitionsRecord implements androidx.health.connect.client.records.Record {
-    ctor public ExerciseRepetitionsRecord(long count, String type, java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public ExerciseRepetitionsRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, long count, String type, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public long getCount();
     method public java.time.Instant getEndTime();
     method public java.time.ZoneOffset? getEndZoneOffset();
@@ -487,7 +487,7 @@
   }
 
   public final class ExerciseSessionRecord implements androidx.health.connect.client.records.Record {
-    ctor public ExerciseSessionRecord(String exerciseType, optional String? title, optional String? notes, java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public ExerciseSessionRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, String exerciseType, optional String? title, optional String? notes, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public java.time.Instant getEndTime();
     method public java.time.ZoneOffset? getEndZoneOffset();
     method public String getExerciseType();
@@ -600,7 +600,7 @@
   }
 
   public final class FloorsClimbedRecord implements androidx.health.connect.client.records.Record {
-    ctor public FloorsClimbedRecord(double floors, java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public FloorsClimbedRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, double floors, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public java.time.Instant getEndTime();
     method public java.time.ZoneOffset? getEndZoneOffset();
     method public double getFloors();
@@ -653,7 +653,7 @@
   }
 
   public final class HeightRecord implements androidx.health.connect.client.records.Record {
-    ctor public HeightRecord(androidx.health.connect.client.units.Length height, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public HeightRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, androidx.health.connect.client.units.Length height, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public androidx.health.connect.client.units.Length getHeight();
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public java.time.Instant getTime();
@@ -672,7 +672,7 @@
   }
 
   public final class HipCircumferenceRecord implements androidx.health.connect.client.records.Record {
-    ctor public HipCircumferenceRecord(androidx.health.connect.client.units.Length circumference, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public HipCircumferenceRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, androidx.health.connect.client.units.Length circumference, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public androidx.health.connect.client.units.Length getCircumference();
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public java.time.Instant getTime();
@@ -684,7 +684,7 @@
   }
 
   public final class HydrationRecord implements androidx.health.connect.client.records.Record {
-    ctor public HydrationRecord(androidx.health.connect.client.units.Volume volume, java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public HydrationRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, androidx.health.connect.client.units.Volume volume, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public java.time.Instant getEndTime();
     method public java.time.ZoneOffset? getEndZoneOffset();
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
@@ -705,7 +705,7 @@
   }
 
   public final class LeanBodyMassRecord implements androidx.health.connect.client.records.Record {
-    ctor public LeanBodyMassRecord(androidx.health.connect.client.units.Mass mass, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public LeanBodyMassRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, androidx.health.connect.client.units.Mass mass, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public androidx.health.connect.client.units.Mass getMass();
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public java.time.Instant getTime();
@@ -726,7 +726,7 @@
   }
 
   public final class MenstruationFlowRecord implements androidx.health.connect.client.records.Record {
-    ctor public MenstruationFlowRecord(optional String? flow, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public MenstruationFlowRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional String? flow, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public String? getFlow();
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public java.time.Instant getTime();
@@ -746,7 +746,7 @@
   }
 
   public final class NutritionRecord implements androidx.health.connect.client.records.Record {
-    ctor public NutritionRecord(optional androidx.health.connect.client.units.Mass? biotin, optional androidx.health.connect.client.units.Mass? caffeine, optional androidx.health.connect.client.units.Mass? calcium, optional androidx.health.connect.client.units.Energy? energy, optional androidx.health.connect.client.units.Energy? energyFromFat, optional androidx.health.connect.client.units.Mass? chloride, optional androidx.health.connect.client.units.Mass? cholesterol, optional androidx.health.connect.client.units.Mass? chromium, optional androidx.health.connect.client.units.Mass? copper, optional androidx.health.connect.client.units.Mass? dietaryFiber, optional androidx.health.connect.client.units.Mass? folate, optional androidx.health.connect.client.units.Mass? folicAcid, optional androidx.health.connect.client.units.Mass? iodine, optional androidx.health.connect.client.units.Mass? iron, optional androidx.health.connect.client.units.Mass? magnesium, optional androidx.health.connect.client.units.Mass? manganese, optional androidx.health.connect.client.units.Mass? molybdenum, optional androidx.health.connect.client.units.Mass? monounsaturatedFat, optional androidx.health.connect.client.units.Mass? niacin, optional androidx.health.connect.client.units.Mass? pantothenicAcid, optional androidx.health.connect.client.units.Mass? phosphorus, optional androidx.health.connect.client.units.Mass? polyunsaturatedFat, optional androidx.health.connect.client.units.Mass? potassium, optional androidx.health.connect.client.units.Mass? protein, optional androidx.health.connect.client.units.Mass? riboflavin, optional androidx.health.connect.client.units.Mass? saturatedFat, optional androidx.health.connect.client.units.Mass? selenium, optional androidx.health.connect.client.units.Mass? sodium, optional androidx.health.connect.client.units.Mass? sugar, optional androidx.health.connect.client.units.Mass? thiamin, optional androidx.health.connect.client.units.Mass? totalCarbohydrate, optional androidx.health.connect.client.units.Mass? totalFat, optional androidx.health.connect.client.units.Mass? transFat, optional androidx.health.connect.client.units.Mass? unsaturatedFat, optional androidx.health.connect.client.units.Mass? vitaminA, optional androidx.health.connect.client.units.Mass? vitaminB12, optional androidx.health.connect.client.units.Mass? vitaminB6, optional androidx.health.connect.client.units.Mass? vitaminC, optional androidx.health.connect.client.units.Mass? vitaminD, optional androidx.health.connect.client.units.Mass? vitaminE, optional androidx.health.connect.client.units.Mass? vitaminK, optional androidx.health.connect.client.units.Mass? zinc, optional String? name, optional String? mealType, java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public NutritionRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.units.Mass? biotin, optional androidx.health.connect.client.units.Mass? caffeine, optional androidx.health.connect.client.units.Mass? calcium, optional androidx.health.connect.client.units.Energy? energy, optional androidx.health.connect.client.units.Energy? energyFromFat, optional androidx.health.connect.client.units.Mass? chloride, optional androidx.health.connect.client.units.Mass? cholesterol, optional androidx.health.connect.client.units.Mass? chromium, optional androidx.health.connect.client.units.Mass? copper, optional androidx.health.connect.client.units.Mass? dietaryFiber, optional androidx.health.connect.client.units.Mass? folate, optional androidx.health.connect.client.units.Mass? folicAcid, optional androidx.health.connect.client.units.Mass? iodine, optional androidx.health.connect.client.units.Mass? iron, optional androidx.health.connect.client.units.Mass? magnesium, optional androidx.health.connect.client.units.Mass? manganese, optional androidx.health.connect.client.units.Mass? molybdenum, optional androidx.health.connect.client.units.Mass? monounsaturatedFat, optional androidx.health.connect.client.units.Mass? niacin, optional androidx.health.connect.client.units.Mass? pantothenicAcid, optional androidx.health.connect.client.units.Mass? phosphorus, optional androidx.health.connect.client.units.Mass? polyunsaturatedFat, optional androidx.health.connect.client.units.Mass? potassium, optional androidx.health.connect.client.units.Mass? protein, optional androidx.health.connect.client.units.Mass? riboflavin, optional androidx.health.connect.client.units.Mass? saturatedFat, optional androidx.health.connect.client.units.Mass? selenium, optional androidx.health.connect.client.units.Mass? sodium, optional androidx.health.connect.client.units.Mass? sugar, optional androidx.health.connect.client.units.Mass? thiamin, optional androidx.health.connect.client.units.Mass? totalCarbohydrate, optional androidx.health.connect.client.units.Mass? totalFat, optional androidx.health.connect.client.units.Mass? transFat, optional androidx.health.connect.client.units.Mass? unsaturatedFat, optional androidx.health.connect.client.units.Mass? vitaminA, optional androidx.health.connect.client.units.Mass? vitaminB12, optional androidx.health.connect.client.units.Mass? vitaminB6, optional androidx.health.connect.client.units.Mass? vitaminC, optional androidx.health.connect.client.units.Mass? vitaminD, optional androidx.health.connect.client.units.Mass? vitaminE, optional androidx.health.connect.client.units.Mass? vitaminK, optional androidx.health.connect.client.units.Mass? zinc, optional String? name, optional String? mealType, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public androidx.health.connect.client.units.Mass? getBiotin();
     method public androidx.health.connect.client.units.Mass? getCaffeine();
     method public androidx.health.connect.client.units.Mass? getCalcium();
@@ -894,7 +894,7 @@
   }
 
   public final class OvulationTestRecord implements androidx.health.connect.client.records.Record {
-    ctor public OvulationTestRecord(String result, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public OvulationTestRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, String result, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public String getResult();
     method public java.time.Instant getTime();
@@ -914,7 +914,7 @@
   }
 
   public final class OxygenSaturationRecord implements androidx.health.connect.client.records.Record {
-    ctor public OxygenSaturationRecord(androidx.health.connect.client.units.Percentage percentage, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public OxygenSaturationRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, androidx.health.connect.client.units.Percentage percentage, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public androidx.health.connect.client.units.Percentage getPercentage();
     method public java.time.Instant getTime();
@@ -970,7 +970,7 @@
   }
 
   public final class RespiratoryRateRecord implements androidx.health.connect.client.records.Record {
-    ctor public RespiratoryRateRecord(double rate, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public RespiratoryRateRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, double rate, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public double getRate();
     method public java.time.Instant getTime();
@@ -982,7 +982,7 @@
   }
 
   public final class RestingHeartRateRecord implements androidx.health.connect.client.records.Record {
-    ctor public RestingHeartRateRecord(long beatsPerMinute, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public RestingHeartRateRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, long beatsPerMinute, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public long getBeatsPerMinute();
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public java.time.Instant getTime();
@@ -1001,7 +1001,7 @@
   }
 
   public final class SexualActivityRecord implements androidx.health.connect.client.records.Record {
-    ctor public SexualActivityRecord(optional String? protectionUsed, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public SexualActivityRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional String? protectionUsed, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public String? getProtectionUsed();
     method public java.time.Instant getTime();
@@ -1019,7 +1019,7 @@
   }
 
   public final class SleepSessionRecord implements androidx.health.connect.client.records.Record {
-    ctor public SleepSessionRecord(optional String? title, optional String? notes, java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public SleepSessionRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional String? title, optional String? notes, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public java.time.Instant getEndTime();
     method public java.time.ZoneOffset? getEndZoneOffset();
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
@@ -1042,7 +1042,7 @@
   }
 
   public final class SleepStageRecord implements androidx.health.connect.client.records.Record {
-    ctor public SleepStageRecord(String stage, java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public SleepStageRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, String stage, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public java.time.Instant getEndTime();
     method public java.time.ZoneOffset? getEndZoneOffset();
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
@@ -1131,7 +1131,7 @@
   }
 
   public final class StepsRecord implements androidx.health.connect.client.records.Record {
-    ctor public StepsRecord(long count, java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public StepsRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, long count, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public long getCount();
     method public java.time.Instant getEndTime();
     method public java.time.ZoneOffset? getEndZoneOffset();
@@ -1152,7 +1152,7 @@
   }
 
   public final class SwimmingStrokesRecord implements androidx.health.connect.client.records.Record {
-    ctor public SwimmingStrokesRecord(optional long count, String type, java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public SwimmingStrokesRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, String type, optional long count, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public long getCount();
     method public java.time.Instant getEndTime();
     method public java.time.ZoneOffset? getEndZoneOffset();
@@ -1180,7 +1180,7 @@
   }
 
   public final class TotalCaloriesBurnedRecord implements androidx.health.connect.client.records.Record {
-    ctor public TotalCaloriesBurnedRecord(androidx.health.connect.client.units.Energy energy, java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public TotalCaloriesBurnedRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, androidx.health.connect.client.units.Energy energy, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public java.time.Instant getEndTime();
     method public java.time.ZoneOffset? getEndZoneOffset();
     method public androidx.health.connect.client.units.Energy getEnergy();
@@ -1201,7 +1201,7 @@
   }
 
   public final class Vo2MaxRecord implements androidx.health.connect.client.records.Record {
-    ctor public Vo2MaxRecord(double vo2MillilitersPerMinuteKilogram, optional String? measurementMethod, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public Vo2MaxRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, double vo2MillilitersPerMinuteKilogram, optional String? measurementMethod, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public String? getMeasurementMethod();
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public java.time.Instant getTime();
@@ -1225,7 +1225,7 @@
   }
 
   public final class WaistCircumferenceRecord implements androidx.health.connect.client.records.Record {
-    ctor public WaistCircumferenceRecord(androidx.health.connect.client.units.Length circumference, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public WaistCircumferenceRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, androidx.health.connect.client.units.Length circumference, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public androidx.health.connect.client.units.Length getCircumference();
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public java.time.Instant getTime();
@@ -1237,7 +1237,7 @@
   }
 
   public final class WeightRecord implements androidx.health.connect.client.records.Record {
-    ctor public WeightRecord(androidx.health.connect.client.units.Mass weight, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public WeightRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, androidx.health.connect.client.units.Mass weight, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public java.time.Instant getTime();
     method public androidx.health.connect.client.units.Mass getWeight();
@@ -1256,7 +1256,7 @@
   }
 
   public final class WheelchairPushesRecord implements androidx.health.connect.client.records.Record {
-    ctor public WheelchairPushesRecord(long count, java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public WheelchairPushesRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, long count, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public long getCount();
     method public java.time.Instant getEndTime();
     method public java.time.ZoneOffset? getEndZoneOffset();
diff --git a/health/connect/connect-client/api/restricted_current.txt b/health/connect/connect-client/api/restricted_current.txt
index ce99c28..b2fb568 100644
--- a/health/connect/connect-client/api/restricted_current.txt
+++ b/health/connect/connect-client/api/restricted_current.txt
@@ -118,7 +118,7 @@
 package androidx.health.connect.client.records {
 
   public final class ActiveCaloriesBurnedRecord implements androidx.health.connect.client.records.IntervalRecord {
-    ctor public ActiveCaloriesBurnedRecord(androidx.health.connect.client.units.Energy energy, java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public ActiveCaloriesBurnedRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, androidx.health.connect.client.units.Energy energy, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public java.time.Instant getEndTime();
     method public java.time.ZoneOffset? getEndZoneOffset();
     method public androidx.health.connect.client.units.Energy getEnergy();
@@ -139,7 +139,7 @@
   }
 
   public final class BasalBodyTemperatureRecord implements androidx.health.connect.client.records.InstantaneousRecord {
-    ctor public BasalBodyTemperatureRecord(androidx.health.connect.client.units.Temperature temperature, optional String? measurementLocation, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public BasalBodyTemperatureRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, androidx.health.connect.client.units.Temperature temperature, optional String? measurementLocation, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public String? getMeasurementLocation();
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public androidx.health.connect.client.units.Temperature getTemperature();
@@ -153,7 +153,7 @@
   }
 
   public final class BasalMetabolicRateRecord implements androidx.health.connect.client.records.InstantaneousRecord {
-    ctor public BasalMetabolicRateRecord(androidx.health.connect.client.units.Power basalMetabolicRate, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public BasalMetabolicRateRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, androidx.health.connect.client.units.Power basalMetabolicRate, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public androidx.health.connect.client.units.Power getBasalMetabolicRate();
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public java.time.Instant getTime();
@@ -170,7 +170,7 @@
   }
 
   public final class BloodGlucoseRecord implements androidx.health.connect.client.records.InstantaneousRecord {
-    ctor public BloodGlucoseRecord(androidx.health.connect.client.units.BloodGlucose level, optional String? specimenSource, optional String? mealType, optional String? relationToMeal, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public BloodGlucoseRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, androidx.health.connect.client.units.BloodGlucose level, optional String? specimenSource, optional String? mealType, optional String? relationToMeal, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public androidx.health.connect.client.units.BloodGlucose getLevel();
     method public String? getMealType();
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
@@ -198,7 +198,7 @@
   }
 
   public final class BloodPressureRecord implements androidx.health.connect.client.records.InstantaneousRecord {
-    ctor public BloodPressureRecord(androidx.health.connect.client.units.Pressure systolic, androidx.health.connect.client.units.Pressure diastolic, optional String? bodyPosition, optional String? measurementLocation, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public BloodPressureRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, androidx.health.connect.client.units.Pressure systolic, androidx.health.connect.client.units.Pressure diastolic, optional String? bodyPosition, optional String? measurementLocation, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public String? getBodyPosition();
     method public androidx.health.connect.client.units.Pressure getDiastolic();
     method public String? getMeasurementLocation();
@@ -234,7 +234,7 @@
   }
 
   public final class BodyFatRecord implements androidx.health.connect.client.records.InstantaneousRecord {
-    ctor public BodyFatRecord(androidx.health.connect.client.units.Percentage percentage, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public BodyFatRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, androidx.health.connect.client.units.Percentage percentage, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public androidx.health.connect.client.units.Percentage getPercentage();
     method public java.time.Instant getTime();
@@ -268,7 +268,7 @@
   }
 
   public final class BodyTemperatureRecord implements androidx.health.connect.client.records.InstantaneousRecord {
-    ctor public BodyTemperatureRecord(androidx.health.connect.client.units.Temperature temperature, optional String? measurementLocation, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public BodyTemperatureRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, androidx.health.connect.client.units.Temperature temperature, optional String? measurementLocation, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public String? getMeasurementLocation();
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public androidx.health.connect.client.units.Temperature getTemperature();
@@ -282,7 +282,7 @@
   }
 
   public final class BoneMassRecord implements androidx.health.connect.client.records.InstantaneousRecord {
-    ctor public BoneMassRecord(androidx.health.connect.client.units.Mass mass, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public BoneMassRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, androidx.health.connect.client.units.Mass mass, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public androidx.health.connect.client.units.Mass getMass();
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public java.time.Instant getTime();
@@ -294,7 +294,7 @@
   }
 
   public final class CervicalMucusRecord implements androidx.health.connect.client.records.InstantaneousRecord {
-    ctor public CervicalMucusRecord(optional String? appearance, optional String? sensation, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public CervicalMucusRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional String? appearance, optional String? sensation, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public String? getAppearance();
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public String? getSensation();
@@ -355,7 +355,7 @@
   }
 
   public final class DistanceRecord implements androidx.health.connect.client.records.IntervalRecord {
-    ctor public DistanceRecord(androidx.health.connect.client.units.Length distance, java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public DistanceRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, androidx.health.connect.client.units.Length distance, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public androidx.health.connect.client.units.Length getDistance();
     method public java.time.Instant getEndTime();
     method public java.time.ZoneOffset? getEndZoneOffset();
@@ -376,7 +376,7 @@
   }
 
   public final class ElevationGainedRecord implements androidx.health.connect.client.records.IntervalRecord {
-    ctor public ElevationGainedRecord(androidx.health.connect.client.units.Length elevation, java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public ElevationGainedRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, androidx.health.connect.client.units.Length elevation, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public androidx.health.connect.client.units.Length getElevation();
     method public java.time.Instant getEndTime();
     method public java.time.ZoneOffset? getEndZoneOffset();
@@ -397,7 +397,7 @@
   }
 
   public final class ExerciseEventRecord implements androidx.health.connect.client.records.IntervalRecord {
-    ctor public ExerciseEventRecord(String eventType, java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public ExerciseEventRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, String eventType, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public java.time.Instant getEndTime();
     method public java.time.ZoneOffset? getEndZoneOffset();
     method public String getEventType();
@@ -419,7 +419,7 @@
   }
 
   public final class ExerciseLapRecord implements androidx.health.connect.client.records.IntervalRecord {
-    ctor public ExerciseLapRecord(optional androidx.health.connect.client.units.Length? length, java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public ExerciseLapRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.units.Length? length, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public java.time.Instant getEndTime();
     method public java.time.ZoneOffset? getEndZoneOffset();
     method public androidx.health.connect.client.units.Length? getLength();
@@ -435,7 +435,7 @@
   }
 
   public final class ExerciseRepetitionsRecord implements androidx.health.connect.client.records.IntervalRecord {
-    ctor public ExerciseRepetitionsRecord(long count, String type, java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public ExerciseRepetitionsRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, long count, String type, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public long getCount();
     method public java.time.Instant getEndTime();
     method public java.time.ZoneOffset? getEndZoneOffset();
@@ -487,7 +487,7 @@
   }
 
   public final class ExerciseSessionRecord implements androidx.health.connect.client.records.IntervalRecord {
-    ctor public ExerciseSessionRecord(String exerciseType, optional String? title, optional String? notes, java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public ExerciseSessionRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, String exerciseType, optional String? title, optional String? notes, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public java.time.Instant getEndTime();
     method public java.time.ZoneOffset? getEndZoneOffset();
     method public String getExerciseType();
@@ -600,7 +600,7 @@
   }
 
   public final class FloorsClimbedRecord implements androidx.health.connect.client.records.IntervalRecord {
-    ctor public FloorsClimbedRecord(double floors, java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public FloorsClimbedRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, double floors, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public java.time.Instant getEndTime();
     method public java.time.ZoneOffset? getEndZoneOffset();
     method public double getFloors();
@@ -653,7 +653,7 @@
   }
 
   public final class HeightRecord implements androidx.health.connect.client.records.InstantaneousRecord {
-    ctor public HeightRecord(androidx.health.connect.client.units.Length height, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public HeightRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, androidx.health.connect.client.units.Length height, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public androidx.health.connect.client.units.Length getHeight();
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public java.time.Instant getTime();
@@ -672,7 +672,7 @@
   }
 
   public final class HipCircumferenceRecord implements androidx.health.connect.client.records.InstantaneousRecord {
-    ctor public HipCircumferenceRecord(androidx.health.connect.client.units.Length circumference, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public HipCircumferenceRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, androidx.health.connect.client.units.Length circumference, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public androidx.health.connect.client.units.Length getCircumference();
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public java.time.Instant getTime();
@@ -684,7 +684,7 @@
   }
 
   public final class HydrationRecord implements androidx.health.connect.client.records.IntervalRecord {
-    ctor public HydrationRecord(androidx.health.connect.client.units.Volume volume, java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public HydrationRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, androidx.health.connect.client.units.Volume volume, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public java.time.Instant getEndTime();
     method public java.time.ZoneOffset? getEndZoneOffset();
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
@@ -723,7 +723,7 @@
   }
 
   public final class LeanBodyMassRecord implements androidx.health.connect.client.records.InstantaneousRecord {
-    ctor public LeanBodyMassRecord(androidx.health.connect.client.units.Mass mass, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public LeanBodyMassRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, androidx.health.connect.client.units.Mass mass, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public androidx.health.connect.client.units.Mass getMass();
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public java.time.Instant getTime();
@@ -744,7 +744,7 @@
   }
 
   public final class MenstruationFlowRecord implements androidx.health.connect.client.records.InstantaneousRecord {
-    ctor public MenstruationFlowRecord(optional String? flow, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public MenstruationFlowRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional String? flow, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public String? getFlow();
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public java.time.Instant getTime();
@@ -764,7 +764,7 @@
   }
 
   public final class NutritionRecord implements androidx.health.connect.client.records.IntervalRecord {
-    ctor public NutritionRecord(optional androidx.health.connect.client.units.Mass? biotin, optional androidx.health.connect.client.units.Mass? caffeine, optional androidx.health.connect.client.units.Mass? calcium, optional androidx.health.connect.client.units.Energy? energy, optional androidx.health.connect.client.units.Energy? energyFromFat, optional androidx.health.connect.client.units.Mass? chloride, optional androidx.health.connect.client.units.Mass? cholesterol, optional androidx.health.connect.client.units.Mass? chromium, optional androidx.health.connect.client.units.Mass? copper, optional androidx.health.connect.client.units.Mass? dietaryFiber, optional androidx.health.connect.client.units.Mass? folate, optional androidx.health.connect.client.units.Mass? folicAcid, optional androidx.health.connect.client.units.Mass? iodine, optional androidx.health.connect.client.units.Mass? iron, optional androidx.health.connect.client.units.Mass? magnesium, optional androidx.health.connect.client.units.Mass? manganese, optional androidx.health.connect.client.units.Mass? molybdenum, optional androidx.health.connect.client.units.Mass? monounsaturatedFat, optional androidx.health.connect.client.units.Mass? niacin, optional androidx.health.connect.client.units.Mass? pantothenicAcid, optional androidx.health.connect.client.units.Mass? phosphorus, optional androidx.health.connect.client.units.Mass? polyunsaturatedFat, optional androidx.health.connect.client.units.Mass? potassium, optional androidx.health.connect.client.units.Mass? protein, optional androidx.health.connect.client.units.Mass? riboflavin, optional androidx.health.connect.client.units.Mass? saturatedFat, optional androidx.health.connect.client.units.Mass? selenium, optional androidx.health.connect.client.units.Mass? sodium, optional androidx.health.connect.client.units.Mass? sugar, optional androidx.health.connect.client.units.Mass? thiamin, optional androidx.health.connect.client.units.Mass? totalCarbohydrate, optional androidx.health.connect.client.units.Mass? totalFat, optional androidx.health.connect.client.units.Mass? transFat, optional androidx.health.connect.client.units.Mass? unsaturatedFat, optional androidx.health.connect.client.units.Mass? vitaminA, optional androidx.health.connect.client.units.Mass? vitaminB12, optional androidx.health.connect.client.units.Mass? vitaminB6, optional androidx.health.connect.client.units.Mass? vitaminC, optional androidx.health.connect.client.units.Mass? vitaminD, optional androidx.health.connect.client.units.Mass? vitaminE, optional androidx.health.connect.client.units.Mass? vitaminK, optional androidx.health.connect.client.units.Mass? zinc, optional String? name, optional String? mealType, java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public NutritionRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.units.Mass? biotin, optional androidx.health.connect.client.units.Mass? caffeine, optional androidx.health.connect.client.units.Mass? calcium, optional androidx.health.connect.client.units.Energy? energy, optional androidx.health.connect.client.units.Energy? energyFromFat, optional androidx.health.connect.client.units.Mass? chloride, optional androidx.health.connect.client.units.Mass? cholesterol, optional androidx.health.connect.client.units.Mass? chromium, optional androidx.health.connect.client.units.Mass? copper, optional androidx.health.connect.client.units.Mass? dietaryFiber, optional androidx.health.connect.client.units.Mass? folate, optional androidx.health.connect.client.units.Mass? folicAcid, optional androidx.health.connect.client.units.Mass? iodine, optional androidx.health.connect.client.units.Mass? iron, optional androidx.health.connect.client.units.Mass? magnesium, optional androidx.health.connect.client.units.Mass? manganese, optional androidx.health.connect.client.units.Mass? molybdenum, optional androidx.health.connect.client.units.Mass? monounsaturatedFat, optional androidx.health.connect.client.units.Mass? niacin, optional androidx.health.connect.client.units.Mass? pantothenicAcid, optional androidx.health.connect.client.units.Mass? phosphorus, optional androidx.health.connect.client.units.Mass? polyunsaturatedFat, optional androidx.health.connect.client.units.Mass? potassium, optional androidx.health.connect.client.units.Mass? protein, optional androidx.health.connect.client.units.Mass? riboflavin, optional androidx.health.connect.client.units.Mass? saturatedFat, optional androidx.health.connect.client.units.Mass? selenium, optional androidx.health.connect.client.units.Mass? sodium, optional androidx.health.connect.client.units.Mass? sugar, optional androidx.health.connect.client.units.Mass? thiamin, optional androidx.health.connect.client.units.Mass? totalCarbohydrate, optional androidx.health.connect.client.units.Mass? totalFat, optional androidx.health.connect.client.units.Mass? transFat, optional androidx.health.connect.client.units.Mass? unsaturatedFat, optional androidx.health.connect.client.units.Mass? vitaminA, optional androidx.health.connect.client.units.Mass? vitaminB12, optional androidx.health.connect.client.units.Mass? vitaminB6, optional androidx.health.connect.client.units.Mass? vitaminC, optional androidx.health.connect.client.units.Mass? vitaminD, optional androidx.health.connect.client.units.Mass? vitaminE, optional androidx.health.connect.client.units.Mass? vitaminK, optional androidx.health.connect.client.units.Mass? zinc, optional String? name, optional String? mealType, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public androidx.health.connect.client.units.Mass? getBiotin();
     method public androidx.health.connect.client.units.Mass? getCaffeine();
     method public androidx.health.connect.client.units.Mass? getCalcium();
@@ -912,7 +912,7 @@
   }
 
   public final class OvulationTestRecord implements androidx.health.connect.client.records.InstantaneousRecord {
-    ctor public OvulationTestRecord(String result, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public OvulationTestRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, String result, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public String getResult();
     method public java.time.Instant getTime();
@@ -932,7 +932,7 @@
   }
 
   public final class OxygenSaturationRecord implements androidx.health.connect.client.records.InstantaneousRecord {
-    ctor public OxygenSaturationRecord(androidx.health.connect.client.units.Percentage percentage, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public OxygenSaturationRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, androidx.health.connect.client.units.Percentage percentage, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public androidx.health.connect.client.units.Percentage getPercentage();
     method public java.time.Instant getTime();
@@ -988,7 +988,7 @@
   }
 
   public final class RespiratoryRateRecord implements androidx.health.connect.client.records.InstantaneousRecord {
-    ctor public RespiratoryRateRecord(double rate, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public RespiratoryRateRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, double rate, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public double getRate();
     method public java.time.Instant getTime();
@@ -1000,7 +1000,7 @@
   }
 
   public final class RestingHeartRateRecord implements androidx.health.connect.client.records.InstantaneousRecord {
-    ctor public RestingHeartRateRecord(long beatsPerMinute, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public RestingHeartRateRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, long beatsPerMinute, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public long getBeatsPerMinute();
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public java.time.Instant getTime();
@@ -1024,7 +1024,7 @@
   }
 
   public final class SexualActivityRecord implements androidx.health.connect.client.records.InstantaneousRecord {
-    ctor public SexualActivityRecord(optional String? protectionUsed, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public SexualActivityRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional String? protectionUsed, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public String? getProtectionUsed();
     method public java.time.Instant getTime();
@@ -1042,7 +1042,7 @@
   }
 
   public final class SleepSessionRecord implements androidx.health.connect.client.records.IntervalRecord {
-    ctor public SleepSessionRecord(optional String? title, optional String? notes, java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public SleepSessionRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional String? title, optional String? notes, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public java.time.Instant getEndTime();
     method public java.time.ZoneOffset? getEndZoneOffset();
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
@@ -1065,7 +1065,7 @@
   }
 
   public final class SleepStageRecord implements androidx.health.connect.client.records.IntervalRecord {
-    ctor public SleepStageRecord(String stage, java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public SleepStageRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, String stage, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public java.time.Instant getEndTime();
     method public java.time.ZoneOffset? getEndZoneOffset();
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
@@ -1154,7 +1154,7 @@
   }
 
   public final class StepsRecord implements androidx.health.connect.client.records.IntervalRecord {
-    ctor public StepsRecord(long count, java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public StepsRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, long count, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public long getCount();
     method public java.time.Instant getEndTime();
     method public java.time.ZoneOffset? getEndZoneOffset();
@@ -1175,7 +1175,7 @@
   }
 
   public final class SwimmingStrokesRecord implements androidx.health.connect.client.records.IntervalRecord {
-    ctor public SwimmingStrokesRecord(optional long count, String type, java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public SwimmingStrokesRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, String type, optional long count, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public long getCount();
     method public java.time.Instant getEndTime();
     method public java.time.ZoneOffset? getEndZoneOffset();
@@ -1203,7 +1203,7 @@
   }
 
   public final class TotalCaloriesBurnedRecord implements androidx.health.connect.client.records.IntervalRecord {
-    ctor public TotalCaloriesBurnedRecord(androidx.health.connect.client.units.Energy energy, java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public TotalCaloriesBurnedRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, androidx.health.connect.client.units.Energy energy, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public java.time.Instant getEndTime();
     method public java.time.ZoneOffset? getEndZoneOffset();
     method public androidx.health.connect.client.units.Energy getEnergy();
@@ -1224,7 +1224,7 @@
   }
 
   public final class Vo2MaxRecord implements androidx.health.connect.client.records.InstantaneousRecord {
-    ctor public Vo2MaxRecord(double vo2MillilitersPerMinuteKilogram, optional String? measurementMethod, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public Vo2MaxRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, double vo2MillilitersPerMinuteKilogram, optional String? measurementMethod, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public String? getMeasurementMethod();
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public java.time.Instant getTime();
@@ -1248,7 +1248,7 @@
   }
 
   public final class WaistCircumferenceRecord implements androidx.health.connect.client.records.InstantaneousRecord {
-    ctor public WaistCircumferenceRecord(androidx.health.connect.client.units.Length circumference, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public WaistCircumferenceRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, androidx.health.connect.client.units.Length circumference, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public androidx.health.connect.client.units.Length getCircumference();
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public java.time.Instant getTime();
@@ -1260,7 +1260,7 @@
   }
 
   public final class WeightRecord implements androidx.health.connect.client.records.InstantaneousRecord {
-    ctor public WeightRecord(androidx.health.connect.client.units.Mass weight, java.time.Instant time, java.time.ZoneOffset? zoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public WeightRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, androidx.health.connect.client.units.Mass weight, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public androidx.health.connect.client.records.metadata.Metadata getMetadata();
     method public java.time.Instant getTime();
     method public androidx.health.connect.client.units.Mass getWeight();
@@ -1279,7 +1279,7 @@
   }
 
   public final class WheelchairPushesRecord implements androidx.health.connect.client.records.IntervalRecord {
-    ctor public WheelchairPushesRecord(long count, java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, optional androidx.health.connect.client.records.metadata.Metadata metadata);
+    ctor public WheelchairPushesRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, long count, optional androidx.health.connect.client.records.metadata.Metadata metadata);
     method public long getCount();
     method public java.time.Instant getEndTime();
     method public java.time.ZoneOffset? getEndZoneOffset();
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/ActiveCaloriesBurnedRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/ActiveCaloriesBurnedRecord.kt
index b71a5ce..db64ddf 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/ActiveCaloriesBurnedRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/ActiveCaloriesBurnedRecord.kt
@@ -28,12 +28,12 @@
  * so both the start and end times should be set.
  */
 public class ActiveCaloriesBurnedRecord(
-    /** Energy in [Energy] unit. Required field. Valid range: 0-1000000 kcal. */
-    public val energy: Energy,
     override val startTime: Instant,
     override val startZoneOffset: ZoneOffset?,
     override val endTime: Instant,
     override val endZoneOffset: ZoneOffset?,
+    /** Energy in [Energy] unit. Required field. Valid range: 0-1000000 kcal. */
+    public val energy: Energy,
     override val metadata: Metadata = Metadata.EMPTY,
 ) : IntervalRecord {
 
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/BasalBodyTemperatureRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/BasalBodyTemperatureRecord.kt
index 77bd2e2..489bf11 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/BasalBodyTemperatureRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/BasalBodyTemperatureRecord.kt
@@ -27,6 +27,8 @@
  * body temperature measurement.
  */
 public class BasalBodyTemperatureRecord(
+    override val time: Instant,
+    override val zoneOffset: ZoneOffset?,
     /** Temperature in [Temperature] unit. Required field. Valid range: 0-100 Celsius degrees. */
     public val temperature: Temperature,
     /**
@@ -36,8 +38,6 @@
      * @see BodyTemperatureMeasurementLocation
      */
     @property:BodyTemperatureMeasurementLocations public val measurementLocation: String? = null,
-    override val time: Instant,
-    override val zoneOffset: ZoneOffset?,
     override val metadata: Metadata = Metadata.EMPTY,
 ) : InstantaneousRecord {
 
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/BasalMetabolicRateRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/BasalMetabolicRateRecord.kt
index a9daf30..5ffcb09 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/BasalMetabolicRateRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/BasalMetabolicRateRecord.kt
@@ -28,10 +28,10 @@
  * day, based on their height and weight.
  */
 public class BasalMetabolicRateRecord(
-    /** Basal metabolic rate, in [Power] unit. Required field. Valid range: 0-10000 kcal/day. */
-    public val basalMetabolicRate: Power,
     override val time: Instant,
     override val zoneOffset: ZoneOffset?,
+    /** Basal metabolic rate, in [Power] unit. Required field. Valid range: 0-10000 kcal/day. */
+    public val basalMetabolicRate: Power,
     override val metadata: Metadata = Metadata.EMPTY,
 ) : InstantaneousRecord {
 
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/BloodGlucoseRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/BloodGlucoseRecord.kt
index d5545c5..973ff0f 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/BloodGlucoseRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/BloodGlucoseRecord.kt
@@ -28,6 +28,8 @@
  * blood glucose reading.
  */
 public class BloodGlucoseRecord(
+    override val time: Instant,
+    override val zoneOffset: ZoneOffset?,
     /**
      * Blood glucose level or concentration. Required field. Valid range: 0-50 mmol/L.
      *
@@ -55,8 +57,6 @@
      * @see RelationToMeal
      */
     @property:RelationToMeals public val relationToMeal: String? = null,
-    override val time: Instant,
-    override val zoneOffset: ZoneOffset?,
     override val metadata: Metadata = Metadata.EMPTY,
 ) : InstantaneousRecord {
 
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/BloodPressureRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/BloodPressureRecord.kt
index f5394e0..08f023d 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/BloodPressureRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/BloodPressureRecord.kt
@@ -29,6 +29,8 @@
  * pressure reading.
  */
 public class BloodPressureRecord(
+    override val time: Instant,
+    override val zoneOffset: ZoneOffset?,
     /**
      * Systolic blood pressure measurement, in [Pressure] unit. Required field. Valid range: 20-200
      * mmHg.
@@ -53,8 +55,6 @@
      * @see MeasurementLocation
      */
     @property:MeasurementLocations public val measurementLocation: String? = null,
-    override val time: Instant,
-    override val zoneOffset: ZoneOffset?,
     override val metadata: Metadata = Metadata.EMPTY,
 ) : InstantaneousRecord {
 
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/BodyFatRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/BodyFatRecord.kt
index f536c5e..69bd426 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/BodyFatRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/BodyFatRecord.kt
@@ -26,10 +26,10 @@
  * percentage of their total body mass.
  */
 public class BodyFatRecord(
-    /** Percentage. Required field. Valid range: 0-100. */
-    public val percentage: Percentage,
     override val time: Instant,
     override val zoneOffset: ZoneOffset?,
+    /** Percentage. Required field. Valid range: 0-100. */
+    public val percentage: Percentage,
     override val metadata: Metadata = Metadata.EMPTY,
 ) : InstantaneousRecord {
 
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/BodyTemperatureRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/BodyTemperatureRecord.kt
index 75c7fdc..68abaf1 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/BodyTemperatureRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/BodyTemperatureRecord.kt
@@ -25,6 +25,8 @@
  * temperature measurement.
  */
 public class BodyTemperatureRecord(
+    override val time: Instant,
+    override val zoneOffset: ZoneOffset?,
     /** Temperature in [Temperature] unit. Required field. Valid range: 0-100 Celsius degrees. */
     public val temperature: Temperature,
     /**
@@ -34,8 +36,6 @@
      * @see BodyTemperatureMeasurementLocation
      */
     @property:BodyTemperatureMeasurementLocations public val measurementLocation: String? = null,
-    override val time: Instant,
-    override val zoneOffset: ZoneOffset?,
     override val metadata: Metadata = Metadata.EMPTY,
 ) : InstantaneousRecord {
 
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/BodyWaterMassRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/BodyWaterMassRecord.kt
index 1a0ddc9..c46985a 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/BodyWaterMassRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/BodyWaterMassRecord.kt
@@ -27,10 +27,10 @@
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY)
 public class BodyWaterMassRecord(
-    /** Mass in [Mass] unit. Required field. Valid range: 0-1000 kilograms. */
-    public val mass: Mass,
     override val time: Instant,
     override val zoneOffset: ZoneOffset?,
+    /** Mass in [Mass] unit. Required field. Valid range: 0-1000 kilograms. */
+    public val mass: Mass,
     override val metadata: Metadata = Metadata.EMPTY,
 ) : InstantaneousRecord {
 
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/BoneMassRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/BoneMassRecord.kt
index 79f7069..3d33b8e 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/BoneMassRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/BoneMassRecord.kt
@@ -23,10 +23,10 @@
 
 /** Captures the user's bone mass. Each record represents a single instantaneous measurement. */
 public class BoneMassRecord(
-    /** Mass in [Mass] unit. Required field. Valid range: 0-1000 kilograms. */
-    public val mass: Mass,
     override val time: Instant,
     override val zoneOffset: ZoneOffset?,
+    /** Mass in [Mass] unit. Required field. Valid range: 0-1000 kilograms. */
+    public val mass: Mass,
     override val metadata: Metadata = Metadata.EMPTY,
 ) : InstantaneousRecord {
 
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/CervicalMucusRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/CervicalMucusRecord.kt
index 3b41b71..ccd7386 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/CervicalMucusRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/CervicalMucusRecord.kt
@@ -29,6 +29,8 @@
  * of cervical mucus.
  */
 public class CervicalMucusRecord(
+    override val time: Instant,
+    override val zoneOffset: ZoneOffset?,
     /**
      * The consistency of the user's cervical mucus. Optional field. Allowed values: [Appearance].
      *
@@ -41,8 +43,6 @@
      * @see Sensation
      */
     @property:Sensations public val sensation: String? = null,
-    override val time: Instant,
-    override val zoneOffset: ZoneOffset?,
     override val metadata: Metadata = Metadata.EMPTY,
 ) : InstantaneousRecord {
 
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/DistanceRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/DistanceRecord.kt
index 247d898..9776e47 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/DistanceRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/DistanceRecord.kt
@@ -32,12 +32,12 @@
  * previous record.
  */
 public class DistanceRecord(
-    /** Distance in [Length] unit. Required field. Valid range: 0-1000000 meters. */
-    public val distance: Length,
     override val startTime: Instant,
     override val startZoneOffset: ZoneOffset?,
     override val endTime: Instant,
     override val endZoneOffset: ZoneOffset?,
+    /** Distance in [Length] unit. Required field. Valid range: 0-1000000 meters. */
+    public val distance: Length,
     override val metadata: Metadata = Metadata.EMPTY,
 ) : IntervalRecord {
 
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/ElevationGainedRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/ElevationGainedRecord.kt
index 1253f658..112e704 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/ElevationGainedRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/ElevationGainedRecord.kt
@@ -24,12 +24,12 @@
 
 /** Captures the elevation gained by the user since the last reading. */
 public class ElevationGainedRecord(
-    /** Elevation in [Length] units. Required field. Valid range: -1000000-1000000 meters. */
-    public val elevation: Length,
     override val startTime: Instant,
     override val startZoneOffset: ZoneOffset?,
     override val endTime: Instant,
     override val endZoneOffset: ZoneOffset?,
+    /** Elevation in [Length] units. Required field. Valid range: -1000000-1000000 meters. */
+    public val elevation: Length,
     override val metadata: Metadata = Metadata.EMPTY,
 ) : IntervalRecord {
 
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/ExerciseEventRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/ExerciseEventRecord.kt
index 48ee6ff..4cd7141 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/ExerciseEventRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/ExerciseEventRecord.kt
@@ -28,16 +28,16 @@
  * For pause events, resume state can be assumed from the end time of the pause or rest event.
  */
 public class ExerciseEventRecord(
+    override val startTime: Instant,
+    override val startZoneOffset: ZoneOffset?,
+    override val endTime: Instant,
+    override val endZoneOffset: ZoneOffset?,
     /**
      * Type of event. Required field. Allowed values: [EventType].
      *
      * @see EventType
      */
     @property:EventTypes public val eventType: String,
-    override val startTime: Instant,
-    override val startZoneOffset: ZoneOffset?,
-    override val endTime: Instant,
-    override val endZoneOffset: ZoneOffset?,
     override val metadata: Metadata = Metadata.EMPTY,
 ) : IntervalRecord {
 
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/ExerciseLapRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/ExerciseLapRecord.kt
index 0129308..883db30 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/ExerciseLapRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/ExerciseLapRecord.kt
@@ -27,12 +27,12 @@
  * contains the start / stop time of the lap.
  */
 public class ExerciseLapRecord(
-    /** Length of the lap, in meters. Optional field. Valid range: 0-1000000 meters. */
-    public val length: Length? = null,
     override val startTime: Instant,
     override val startZoneOffset: ZoneOffset?,
     override val endTime: Instant,
     override val endZoneOffset: ZoneOffset?,
+    /** Length of the lap, in meters. Optional field. Valid range: 0-1000000 meters. */
+    public val length: Length? = null,
     override val metadata: Metadata = Metadata.EMPTY,
 ) : IntervalRecord {
 
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/ExerciseRepetitionsRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/ExerciseRepetitionsRecord.kt
index 926dd42..9a7385c 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/ExerciseRepetitionsRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/ExerciseRepetitionsRecord.kt
@@ -23,6 +23,10 @@
 
 /** Captures the number of repetitions in an exercise set. */
 public class ExerciseRepetitionsRecord(
+    override val startTime: Instant,
+    override val startZoneOffset: ZoneOffset?,
+    override val endTime: Instant,
+    override val endZoneOffset: ZoneOffset?,
     /** Count. Required field. Valid range: 1-1000000. */
     public val count: Long,
     /**
@@ -31,10 +35,6 @@
      * @see ExerciseType
      */
     @property:ExerciseTypes public val type: String,
-    override val startTime: Instant,
-    override val startZoneOffset: ZoneOffset?,
-    override val endTime: Instant,
-    override val endZoneOffset: ZoneOffset?,
     override val metadata: Metadata = Metadata.EMPTY,
 ) : IntervalRecord {
 
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/ExerciseSessionRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/ExerciseSessionRecord.kt
index 79de63d..56c497d 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/ExerciseSessionRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/ExerciseSessionRecord.kt
@@ -34,6 +34,10 @@
  * @sample androidx.health.connect.client.samples.ReadExerciseSessions
  */
 public class ExerciseSessionRecord(
+    override val startTime: Instant,
+    override val startZoneOffset: ZoneOffset?,
+    override val endTime: Instant,
+    override val endZoneOffset: ZoneOffset?,
     /**
      * Type of exercise (e.g. walking, swimming). Required field. Allowed values: [ExerciseType].
      *
@@ -44,10 +48,6 @@
     public val title: String? = null,
     /** Additional notes for the session. Optional field. */
     public val notes: String? = null,
-    override val startTime: Instant,
-    override val startZoneOffset: ZoneOffset?,
-    override val endTime: Instant,
-    override val endZoneOffset: ZoneOffset?,
     override val metadata: Metadata = Metadata.EMPTY,
 ) : IntervalRecord {
 
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/FloorsClimbedRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/FloorsClimbedRecord.kt
index 7c3c096..b398b5e 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/FloorsClimbedRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/FloorsClimbedRecord.kt
@@ -22,12 +22,12 @@
 
 /** Captures the number of floors climbed by the user since the last reading. */
 public class FloorsClimbedRecord(
-    /** Number of floors. Required field. Valid range: 0-1000000. */
-    public val floors: Double,
     override val startTime: Instant,
     override val startZoneOffset: ZoneOffset?,
     override val endTime: Instant,
     override val endZoneOffset: ZoneOffset?,
+    /** Number of floors. Required field. Valid range: 0-1000000. */
+    public val floors: Double,
     override val metadata: Metadata = Metadata.EMPTY,
 ) : IntervalRecord {
     init {
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HeartRateVariabilityDifferentialIndexRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HeartRateVariabilityDifferentialIndexRecord.kt
index 41426a9..3ca9306 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HeartRateVariabilityDifferentialIndexRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HeartRateVariabilityDifferentialIndexRecord.kt
@@ -28,10 +28,10 @@
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY)
 public class HeartRateVariabilityDifferentialIndexRecord(
-    /** Heart rate variability in milliseconds. Required field. */
-    public val heartRateVariabilityMillis: Double,
     override val time: Instant,
     override val zoneOffset: ZoneOffset?,
+    /** Heart rate variability in milliseconds. Required field. */
+    public val heartRateVariabilityMillis: Double,
     override val metadata: Metadata = Metadata.EMPTY,
 ) : InstantaneousRecord {
     override fun equals(other: Any?): Boolean {
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HeartRateVariabilityRmssdRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HeartRateVariabilityRmssdRecord.kt
index 3be9504..a5379ee 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HeartRateVariabilityRmssdRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HeartRateVariabilityRmssdRecord.kt
@@ -28,10 +28,10 @@
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY)
 public class HeartRateVariabilityRmssdRecord(
-    /** Heart rate variability in milliseconds. Required field. */
-    public val heartRateVariabilityMillis: Double,
     override val time: Instant,
     override val zoneOffset: ZoneOffset?,
+    /** Heart rate variability in milliseconds. Required field. */
+    public val heartRateVariabilityMillis: Double,
     override val metadata: Metadata = Metadata.EMPTY,
 ) : InstantaneousRecord {
     override fun equals(other: Any?): Boolean {
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HeartRateVariabilitySRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HeartRateVariabilitySRecord.kt
index 55d4d68..168870a 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HeartRateVariabilitySRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HeartRateVariabilitySRecord.kt
@@ -28,10 +28,10 @@
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY)
 public class HeartRateVariabilitySRecord(
-    /** Heart rate variability in milliseconds. Required field. */
-    public val heartRateVariabilityMillis: Double,
     override val time: Instant,
     override val zoneOffset: ZoneOffset?,
+    /** Heart rate variability in milliseconds. Required field. */
+    public val heartRateVariabilityMillis: Double,
     override val metadata: Metadata = Metadata.EMPTY,
 ) : InstantaneousRecord {
     override fun equals(other: Any?): Boolean {
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HeartRateVariabilitySd2Record.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HeartRateVariabilitySd2Record.kt
index 955ab6a..6e19d5d 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HeartRateVariabilitySd2Record.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HeartRateVariabilitySd2Record.kt
@@ -28,10 +28,10 @@
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY)
 public class HeartRateVariabilitySd2Record(
-    /** Heart rate variability in milliseconds. Required field. */
-    public val heartRateVariabilityMillis: Double,
     override val time: Instant,
     override val zoneOffset: ZoneOffset?,
+    /** Heart rate variability in milliseconds. Required field. */
+    public val heartRateVariabilityMillis: Double,
     override val metadata: Metadata = Metadata.EMPTY,
 ) : InstantaneousRecord {
     override fun equals(other: Any?): Boolean {
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HeartRateVariabilitySdannRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HeartRateVariabilitySdannRecord.kt
index ecd71c2..6d959c1 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HeartRateVariabilitySdannRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HeartRateVariabilitySdannRecord.kt
@@ -28,10 +28,10 @@
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY)
 public class HeartRateVariabilitySdannRecord(
-    /** Heart rate variability in milliseconds. Required field. */
-    public val heartRateVariabilityMillis: Double,
     override val time: Instant,
     override val zoneOffset: ZoneOffset?,
+    /** Heart rate variability in milliseconds. Required field. */
+    public val heartRateVariabilityMillis: Double,
     override val metadata: Metadata = Metadata.EMPTY,
 ) : InstantaneousRecord {
     override fun equals(other: Any?): Boolean {
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HeartRateVariabilitySdnnIndexRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HeartRateVariabilitySdnnIndexRecord.kt
index f9bcbe3..c607428 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HeartRateVariabilitySdnnIndexRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HeartRateVariabilitySdnnIndexRecord.kt
@@ -28,10 +28,10 @@
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY)
 public class HeartRateVariabilitySdnnIndexRecord(
-    /** Heart rate variability in milliseconds. Required field. */
-    public val heartRateVariabilityMillis: Double,
     override val time: Instant,
     override val zoneOffset: ZoneOffset?,
+    /** Heart rate variability in milliseconds. Required field. */
+    public val heartRateVariabilityMillis: Double,
     override val metadata: Metadata = Metadata.EMPTY,
 ) : InstantaneousRecord {
     override fun equals(other: Any?): Boolean {
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HeartRateVariabilitySdnnRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HeartRateVariabilitySdnnRecord.kt
index cce41f3..39732cf 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HeartRateVariabilitySdnnRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HeartRateVariabilitySdnnRecord.kt
@@ -28,10 +28,10 @@
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY)
 public class HeartRateVariabilitySdnnRecord(
-    /** Heart rate variability in milliseconds. Required field. */
-    public val heartRateVariabilityMillis: Double,
     override val time: Instant,
     override val zoneOffset: ZoneOffset?,
+    /** Heart rate variability in milliseconds. Required field. */
+    public val heartRateVariabilityMillis: Double,
     override val metadata: Metadata = Metadata.EMPTY,
 ) : InstantaneousRecord {
     override fun equals(other: Any?): Boolean {
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HeartRateVariabilitySdsdRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HeartRateVariabilitySdsdRecord.kt
index e4d4d86..76bf706 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HeartRateVariabilitySdsdRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HeartRateVariabilitySdsdRecord.kt
@@ -28,10 +28,10 @@
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY)
 public class HeartRateVariabilitySdsdRecord(
-    /** Heart rate variability in milliseconds. Required field. */
-    public val heartRateVariabilityMillis: Double,
     override val time: Instant,
     override val zoneOffset: ZoneOffset?,
+    /** Heart rate variability in milliseconds. Required field. */
+    public val heartRateVariabilityMillis: Double,
     override val metadata: Metadata = Metadata.EMPTY,
 ) : InstantaneousRecord {
     override fun equals(other: Any?): Boolean {
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HeartRateVariabilityTinnRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HeartRateVariabilityTinnRecord.kt
index 8c844a6..6bf3bac 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HeartRateVariabilityTinnRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HeartRateVariabilityTinnRecord.kt
@@ -28,10 +28,10 @@
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY)
 public class HeartRateVariabilityTinnRecord(
-    /** Heart rate variability in milliseconds. Required field. */
-    public val heartRateVariabilityMillis: Double,
     override val time: Instant,
     override val zoneOffset: ZoneOffset?,
+    /** Heart rate variability in milliseconds. Required field. */
+    public val heartRateVariabilityMillis: Double,
     override val metadata: Metadata = Metadata.EMPTY,
 ) : InstantaneousRecord {
     override fun equals(other: Any?): Boolean {
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HeightRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HeightRecord.kt
index 5f36ad9..8da6503 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HeightRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HeightRecord.kt
@@ -24,10 +24,10 @@
 
 /** Captures the user's height. */
 public class HeightRecord(
-    /** Height in [Length] unit. Required field. Valid range: 0-3 meters. */
-    public val height: Length,
     override val time: Instant,
     override val zoneOffset: ZoneOffset?,
+    /** Height in [Length] unit. Required field. Valid range: 0-3 meters. */
+    public val height: Length,
     override val metadata: Metadata = Metadata.EMPTY,
 ) : InstantaneousRecord {
 
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HipCircumferenceRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HipCircumferenceRecord.kt
index e7d16fb..a261871 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HipCircumferenceRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HipCircumferenceRecord.kt
@@ -23,10 +23,10 @@
 
 /** Captures the user's hip circumference. */
 public class HipCircumferenceRecord(
-    /** Circumference in [Length] unit. Required field. Valid range: 0-10 meters. */
-    public val circumference: Length,
     override val time: Instant,
     override val zoneOffset: ZoneOffset?,
+    /** Circumference in [Length] unit. Required field. Valid range: 0-10 meters. */
+    public val circumference: Length,
     override val metadata: Metadata = Metadata.EMPTY,
 ) : InstantaneousRecord {
 
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HydrationRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HydrationRecord.kt
index 1e4ef5d..464629f 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HydrationRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HydrationRecord.kt
@@ -24,12 +24,12 @@
 
 /** Captures how much water a user drank in a single drink. */
 public class HydrationRecord(
-    /** Volume of water in [Volume] unit. Required field. Valid range: 0-100 liters. */
-    public val volume: Volume,
     override val startTime: Instant,
     override val startZoneOffset: ZoneOffset?,
     override val endTime: Instant,
     override val endZoneOffset: ZoneOffset?,
+    /** Volume of water in [Volume] unit. Required field. Valid range: 0-100 liters. */
+    public val volume: Volume,
     override val metadata: Metadata = Metadata.EMPTY,
 ) : IntervalRecord {
 
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/LeanBodyMassRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/LeanBodyMassRecord.kt
index 067d38b..be9e795 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/LeanBodyMassRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/LeanBodyMassRecord.kt
@@ -25,10 +25,10 @@
  * Captures the user's lean body mass. Each record represents a single instantaneous measurement.
  */
 public class LeanBodyMassRecord(
-    /** Mass in [Mass] unit. Required field. Valid range: 0-1000 kilograms. */
-    public val mass: Mass,
     override val time: Instant,
     override val zoneOffset: ZoneOffset?,
+    /** Mass in [Mass] unit. Required field. Valid range: 0-1000 kilograms. */
+    public val mass: Mass,
     override val metadata: Metadata = Metadata.EMPTY,
 ) : InstantaneousRecord {
 
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/MenstruationFlowRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/MenstruationFlowRecord.kt
index d78319f..c7d2aa5 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/MenstruationFlowRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/MenstruationFlowRecord.kt
@@ -26,14 +26,14 @@
  * heavy). Each record represents a description of how heavy the user's menstrual bleeding was.
  */
 public class MenstruationFlowRecord(
+    override val time: Instant,
+    override val zoneOffset: ZoneOffset?,
     /**
      * How heavy the user's menstrual flow was. Optional field. Allowed values: [Flow].
      *
      * @see Flow
      */
     @property:Flows public val flow: String? = null,
-    override val time: Instant,
-    override val zoneOffset: ZoneOffset?,
     override val metadata: Metadata = Metadata.EMPTY,
 ) : InstantaneousRecord {
     override fun equals(other: Any?): Boolean {
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/NutritionRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/NutritionRecord.kt
index c44eb35..d2e3ab0 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/NutritionRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/NutritionRecord.kt
@@ -26,6 +26,10 @@
 
 /** Captures what nutrients were consumed as part of a meal or a food item. */
 public class NutritionRecord(
+    override val startTime: Instant,
+    override val startZoneOffset: ZoneOffset?,
+    override val endTime: Instant,
+    override val endZoneOffset: ZoneOffset?,
     /** Biotin in [Mass] unit. Optional field. Valid range: 0-100 grams. */
     public val biotin: Mass? = null,
     /** Caffeine in [Mass] unit. Optional field. Valid range: 0-100 grams. */
@@ -119,10 +123,6 @@
      * @see MealType
      */
     @property:MealTypes public val mealType: String? = null,
-    override val startTime: Instant,
-    override val startZoneOffset: ZoneOffset?,
-    override val endTime: Instant,
-    override val endZoneOffset: ZoneOffset?,
     override val metadata: Metadata = Metadata.EMPTY,
 ) : IntervalRecord {
 
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/OvulationTestRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/OvulationTestRecord.kt
index affb5ad..a7dd869 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/OvulationTestRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/OvulationTestRecord.kt
@@ -23,6 +23,8 @@
 
 /** Each record represents the result of an ovulation test. */
 public class OvulationTestRecord(
+    override val time: Instant,
+    override val zoneOffset: ZoneOffset?,
     /**
      * The result of a user's ovulation test, which shows if they're ovulating or not. Required
      * field. Allowed values: [Result].
@@ -30,8 +32,6 @@
      * @see Result
      */
     @property:Results public val result: String,
-    override val time: Instant,
-    override val zoneOffset: ZoneOffset?,
     override val metadata: Metadata = Metadata.EMPTY,
 ) : InstantaneousRecord {
     override fun equals(other: Any?): Boolean {
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/OxygenSaturationRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/OxygenSaturationRecord.kt
index 17441bd..902dc78 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/OxygenSaturationRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/OxygenSaturationRecord.kt
@@ -26,10 +26,10 @@
  * the time of measurement.
  */
 public class OxygenSaturationRecord(
-    /** Percentage. Required field. Valid range: 0-100. */
-    public val percentage: Percentage,
     override val time: Instant,
     override val zoneOffset: ZoneOffset?,
+    /** Percentage. Required field. Valid range: 0-100. */
+    public val percentage: Percentage,
     override val metadata: Metadata = Metadata.EMPTY,
 ) : InstantaneousRecord {
 
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/RespiratoryRateRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/RespiratoryRateRecord.kt
index 75c977f..d018fff 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/RespiratoryRateRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/RespiratoryRateRecord.kt
@@ -23,10 +23,10 @@
  * Captures the user's respiratory rate. Each record represents a single instantaneous measurement.
  */
 public class RespiratoryRateRecord(
-    /** Respiratory rate in breaths per minute. Required field. Valid range: 0-1000. */
-    public val rate: Double,
     override val time: Instant,
     override val zoneOffset: ZoneOffset?,
+    /** Respiratory rate in breaths per minute. Required field. Valid range: 0-1000. */
+    public val rate: Double,
     override val metadata: Metadata = Metadata.EMPTY,
 ) : InstantaneousRecord {
     init {
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/RestingHeartRateRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/RestingHeartRateRecord.kt
index f2bae88..848e5696 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/RestingHeartRateRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/RestingHeartRateRecord.kt
@@ -26,10 +26,10 @@
  * measurement.
  */
 public class RestingHeartRateRecord(
-    /** Heart beats per minute. Required field. Validation range: 1-300. */
-    public val beatsPerMinute: Long,
     override val time: Instant,
     override val zoneOffset: ZoneOffset?,
+    /** Heart beats per minute. Required field. Validation range: 1-300. */
+    public val beatsPerMinute: Long,
     override val metadata: Metadata = Metadata.EMPTY,
 ) : InstantaneousRecord {
     init {
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/SexualActivityRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/SexualActivityRecord.kt
index f08d02c..ae0197c 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/SexualActivityRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/SexualActivityRecord.kt
@@ -26,6 +26,8 @@
  * field is optional.
  */
 public class SexualActivityRecord(
+    override val time: Instant,
+    override val zoneOffset: ZoneOffset?,
     /**
      * Whether protection was used during sexual activity. Optional field, null if unknown. Allowed
      * values: [Protection].
@@ -33,8 +35,6 @@
      * @see Protection
      */
     @property:Protections public val protectionUsed: String? = null,
-    override val time: Instant,
-    override val zoneOffset: ZoneOffset?,
     override val metadata: Metadata = Metadata.EMPTY,
 ) : InstantaneousRecord {
     override fun equals(other: Any?): Boolean {
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/SleepSessionRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/SleepSessionRecord.kt
index b362c62..9bf031c 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/SleepSessionRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/SleepSessionRecord.kt
@@ -38,14 +38,14 @@
  * @see SleepStageRecord
  */
 public class SleepSessionRecord(
-    /** Title of the session. Optional field. */
-    public val title: String? = null,
-    /** Additional notes for the session. Optional field. */
-    public val notes: String? = null,
     override val startTime: Instant,
     override val startZoneOffset: ZoneOffset?,
     override val endTime: Instant,
     override val endZoneOffset: ZoneOffset?,
+    /** Title of the session. Optional field. */
+    public val title: String? = null,
+    /** Additional notes for the session. Optional field. */
+    public val notes: String? = null,
     override val metadata: Metadata = Metadata.EMPTY,
 ) : IntervalRecord {
 
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/SleepStageRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/SleepStageRecord.kt
index 6d452e4..6b936d0 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/SleepStageRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/SleepStageRecord.kt
@@ -27,16 +27,16 @@
  * @see SleepSessionRecord
  */
 public class SleepStageRecord(
+    override val startTime: Instant,
+    override val startZoneOffset: ZoneOffset?,
+    override val endTime: Instant,
+    override val endZoneOffset: ZoneOffset?,
     /**
      * Type of sleep stage. Required field. Allowed values: [StageType].
      *
      * @see StageType
      */
     @property:StageTypes public val stage: String,
-    override val startTime: Instant,
-    override val startZoneOffset: ZoneOffset?,
-    override val endTime: Instant,
-    override val endZoneOffset: ZoneOffset?,
     override val metadata: Metadata = Metadata.EMPTY,
 ) : IntervalRecord {
 
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/StepsRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/StepsRecord.kt
index 62ba06b..6a0e2eb 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/StepsRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/StepsRecord.kt
@@ -30,12 +30,12 @@
  * period.
  */
 public class StepsRecord(
-    /** Count. Required field. Valid range: 1-1000000. */
-    public val count: Long,
     override val startTime: Instant,
     override val startZoneOffset: ZoneOffset?,
     override val endTime: Instant,
     override val endZoneOffset: ZoneOffset?,
+    /** Count. Required field. Valid range: 1-1000000. */
+    public val count: Long,
     override val metadata: Metadata = Metadata.EMPTY,
 ) : IntervalRecord {
     init {
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/SwimmingStrokesRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/SwimmingStrokesRecord.kt
index 2c01aba..96748aa 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/SwimmingStrokesRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/SwimmingStrokesRecord.kt
@@ -23,18 +23,18 @@
 
 /** Captures the number of swimming strokes. Type of swimming stroke must be provided. */
 public class SwimmingStrokesRecord(
-    /** Count of strokes. Optional field. Valid range: 1-1000000. */
-    public val count: Long = 0,
+    override val startTime: Instant,
+    override val startZoneOffset: ZoneOffset?,
+    override val endTime: Instant,
+    override val endZoneOffset: ZoneOffset?,
     /**
      * Swimming style. Required field. Allowed values: [SwimmingType].
      *
      * @see SwimmingType
      */
     @property:SwimmingTypes public val type: String,
-    override val startTime: Instant,
-    override val startZoneOffset: ZoneOffset?,
-    override val endTime: Instant,
-    override val endZoneOffset: ZoneOffset?,
+    /** Count of strokes. Optional field. Valid range: 1-1000000. */
+    public val count: Long = 0,
     override val metadata: Metadata = Metadata.EMPTY,
 ) : IntervalRecord {
     init {
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/TotalCaloriesBurnedRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/TotalCaloriesBurnedRecord.kt
index 8fbc0c8..7b03508 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/TotalCaloriesBurnedRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/TotalCaloriesBurnedRecord.kt
@@ -27,12 +27,12 @@
  * Each record represents the total kilocalories burned over a time interval.
  */
 public class TotalCaloriesBurnedRecord(
-    /** Energy in [Energy] unit. Required field. Valid range: 0-1000000 kcal. */
-    public val energy: Energy,
     override val startTime: Instant,
     override val startZoneOffset: ZoneOffset?,
     override val endTime: Instant,
     override val endZoneOffset: ZoneOffset?,
+    /** Energy in [Energy] unit. Required field. Valid range: 0-1000000 kcal. */
+    public val energy: Energy,
     override val metadata: Metadata = Metadata.EMPTY,
 ) : IntervalRecord {
 
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/Vo2MaxRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/Vo2MaxRecord.kt
index 66307bd6..0f0942b 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/Vo2MaxRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/Vo2MaxRecord.kt
@@ -23,6 +23,8 @@
 
 /** Capture user's VO2 max score and optionally the measurement method. */
 public class Vo2MaxRecord(
+    override val time: Instant,
+    override val zoneOffset: ZoneOffset?,
     /** Maximal aerobic capacity (VO2 max) in milliliters. Required field. Valid range: 0-100. */
     public val vo2MillilitersPerMinuteKilogram: Double,
     /**
@@ -31,8 +33,6 @@
      * @see MeasurementMethod
      */
     @property:MeasurementMethods public val measurementMethod: String? = null,
-    override val time: Instant,
-    override val zoneOffset: ZoneOffset?,
     override val metadata: Metadata = Metadata.EMPTY,
 ) : InstantaneousRecord {
     init {
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/WaistCircumferenceRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/WaistCircumferenceRecord.kt
index f39d89a..b04a2c4 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/WaistCircumferenceRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/WaistCircumferenceRecord.kt
@@ -27,10 +27,10 @@
  * See [Length] for supported units.
  */
 public class WaistCircumferenceRecord(
-    /** Circumference in [Length] unit. Required field. Valid range: 0-10 meters. */
-    public val circumference: Length,
     override val time: Instant,
     override val zoneOffset: ZoneOffset?,
+    /** Circumference in [Length] unit. Required field. Valid range: 0-10 meters. */
+    public val circumference: Length,
     override val metadata: Metadata = Metadata.EMPTY,
 ) : InstantaneousRecord {
 
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/WeightRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/WeightRecord.kt
index cde7cbc..f460fca 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/WeightRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/WeightRecord.kt
@@ -28,10 +28,10 @@
  * See [Mass] for supported units.
  */
 public class WeightRecord(
-    /** User's weight in kilograms. Required field. Valid range: 0-1000 kilograms. */
-    public val weight: Mass,
     override val time: Instant,
     override val zoneOffset: ZoneOffset?,
+    /** User's weight in kilograms. Required field. Valid range: 0-1000 kilograms. */
+    public val weight: Mass,
     override val metadata: Metadata = Metadata.EMPTY,
 ) : InstantaneousRecord {
 
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/WheelchairPushesRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/WheelchairPushesRecord.kt
index 0e066e5..4aa943d 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/WheelchairPushesRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/WheelchairPushesRecord.kt
@@ -26,12 +26,12 @@
  * the start of the interval in which pushes were made.
  */
 public class WheelchairPushesRecord(
-    /** Count. Required field. Valid range: 1-1000000. */
-    public val count: Long,
     override val startTime: Instant,
     override val startZoneOffset: ZoneOffset?,
     override val endTime: Instant,
     override val endZoneOffset: ZoneOffset?,
+    /** Count. Required field. Valid range: 1-1000000. */
+    public val count: Long,
     override val metadata: Metadata = Metadata.EMPTY,
 ) : IntervalRecord {
 
diff --git a/health/connect/connect-client/src/main/java/androidx/health/platform/client/impl/permission/token/PermissionTokenManager.java b/health/connect/connect-client/src/main/java/androidx/health/platform/client/impl/permission/token/PermissionTokenManager.java
index 77810e2..2bbb1d1 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/platform/client/impl/permission/token/PermissionTokenManager.java
+++ b/health/connect/connect-client/src/main/java/androidx/health/platform/client/impl/permission/token/PermissionTokenManager.java
@@ -38,7 +38,7 @@
 
     /** Sets current token. */
     public static void setCurrentToken(@NonNull Context context, @Nullable String token) {
-        getSharedPreferences(context).edit().putString(KEY_TOKEN, token).apply();
+        getSharedPreferences(context).edit().putString(KEY_TOKEN, token).commit();
     }
 
     private static SharedPreferences getSharedPreferences(@NonNull Context context) {
diff --git a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/ActiveCaloriesBurnedRecordTest.kt b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/ActiveCaloriesBurnedRecordTest.kt
index f97bfbd..5beb3fa 100644
--- a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/ActiveCaloriesBurnedRecordTest.kt
+++ b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/ActiveCaloriesBurnedRecordTest.kt
@@ -31,20 +31,20 @@
     fun validRecord_equals() {
         assertThat(
                 ActiveCaloriesBurnedRecord(
-                    10.calories,
-                    Instant.ofEpochMilli(1234L),
-                    null,
-                    Instant.ofEpochMilli(1236L),
-                    null,
+                    startTime = Instant.ofEpochMilli(1234L),
+                    startZoneOffset = null,
+                    endTime = Instant.ofEpochMilli(1236L),
+                    endZoneOffset = null,
+                    energy = 10.calories,
                 )
             )
             .isEqualTo(
                 ActiveCaloriesBurnedRecord(
-                    10.calories,
-                    Instant.ofEpochMilli(1234L),
-                    null,
-                    Instant.ofEpochMilli(1236L),
-                    null,
+                    startTime = Instant.ofEpochMilli(1234L),
+                    startZoneOffset = null,
+                    endTime = Instant.ofEpochMilli(1236L),
+                    endZoneOffset = null,
+                    energy = 10.calories,
                 )
             )
     }
@@ -53,11 +53,11 @@
     fun invalidTimes_throws() {
         assertFailsWith<IllegalArgumentException> {
             ActiveCaloriesBurnedRecord(
-                10.calories,
-                Instant.ofEpochMilli(1234L),
-                null,
-                Instant.ofEpochMilli(1234L),
-                null,
+                startTime = Instant.ofEpochMilli(1234L),
+                startZoneOffset = null,
+                endTime = Instant.ofEpochMilli(1234L),
+                endZoneOffset = null,
+                energy = 10.calories,
             )
         }
     }
diff --git a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/CyclingPedalingCadenceRecordTest.kt b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/CyclingPedalingCadenceRecordTest.kt
index 08fc760..16ac5e2 100644
--- a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/CyclingPedalingCadenceRecordTest.kt
+++ b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/CyclingPedalingCadenceRecordTest.kt
@@ -30,20 +30,20 @@
     fun validRecord_equals() {
         assertThat(
                 CyclingPedalingCadenceRecord(
-                    Instant.ofEpochMilli(1234L),
-                    null,
-                    Instant.ofEpochMilli(1236L),
-                    null,
-                    listOf<CyclingPedalingCadenceRecord.Sample>()
+                    startTime = Instant.ofEpochMilli(1234L),
+                    startZoneOffset = null,
+                    endTime = Instant.ofEpochMilli(1236L),
+                    endZoneOffset = null,
+                    samples = listOf()
                 )
             )
             .isEqualTo(
                 CyclingPedalingCadenceRecord(
-                    Instant.ofEpochMilli(1234L),
-                    null,
-                    Instant.ofEpochMilli(1236L),
-                    null,
-                    listOf<CyclingPedalingCadenceRecord.Sample>()
+                    startTime = Instant.ofEpochMilli(1234L),
+                    startZoneOffset = null,
+                    endTime = Instant.ofEpochMilli(1236L),
+                    endZoneOffset = null,
+                    samples = listOf()
                 )
             )
     }
@@ -52,20 +52,20 @@
     fun sameStartTimeEndTime_validRecord_equals() {
         assertThat(
             CyclingPedalingCadenceRecord(
-                Instant.ofEpochMilli(1234L),
-                null,
-                Instant.ofEpochMilli(1234L),
-                null,
-                listOf<CyclingPedalingCadenceRecord.Sample>()
+                startTime = Instant.ofEpochMilli(1234L),
+                startZoneOffset = null,
+                endTime = Instant.ofEpochMilli(1234L),
+                endZoneOffset = null,
+                samples = listOf()
             )
         )
             .isEqualTo(
                 CyclingPedalingCadenceRecord(
-                    Instant.ofEpochMilli(1234L),
-                    null,
-                    Instant.ofEpochMilli(1234L),
-                    null,
-                    listOf<CyclingPedalingCadenceRecord.Sample>()
+                    startTime = Instant.ofEpochMilli(1234L),
+                    startZoneOffset = null,
+                    endTime = Instant.ofEpochMilli(1234L),
+                    endZoneOffset = null,
+                    samples = listOf()
                 )
             )
     }
@@ -74,11 +74,11 @@
     fun invalidTimes_throws() {
         assertFailsWith<IllegalArgumentException> {
             CyclingPedalingCadenceRecord(
-                Instant.ofEpochMilli(1235L),
-                null,
-                Instant.ofEpochMilli(1234L),
-                null,
-                listOf<CyclingPedalingCadenceRecord.Sample>()
+                startTime = Instant.ofEpochMilli(1235L),
+                startZoneOffset = null,
+                endTime = Instant.ofEpochMilli(1234L),
+                endZoneOffset = null,
+                samples = listOf()
             )
         }
     }
diff --git a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/DistanceRecordTest.kt b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/DistanceRecordTest.kt
index 9f0c08d..201061c 100644
--- a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/DistanceRecordTest.kt
+++ b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/DistanceRecordTest.kt
@@ -31,20 +31,20 @@
     fun validRecord_equals() {
         assertThat(
                 DistanceRecord(
-                    10.meters,
-                    Instant.ofEpochMilli(1234L),
-                    null,
-                    Instant.ofEpochMilli(1236L),
-                    null,
+                    startTime = Instant.ofEpochMilli(1234L),
+                    startZoneOffset = null,
+                    endTime = Instant.ofEpochMilli(1236L),
+                    endZoneOffset = null,
+                    distance = 10.meters,
                 )
             )
             .isEqualTo(
                 DistanceRecord(
-                    10.meters,
-                    Instant.ofEpochMilli(1234L),
-                    null,
-                    Instant.ofEpochMilli(1236L),
-                    null,
+                    startTime = Instant.ofEpochMilli(1234L),
+                    startZoneOffset = null,
+                    endTime = Instant.ofEpochMilli(1236L),
+                    endZoneOffset = null,
+                    distance = 10.meters,
                 )
             )
     }
@@ -53,11 +53,11 @@
     fun invalidTimes_throws() {
         assertFailsWith<IllegalArgumentException> {
             DistanceRecord(
-                10.meters,
-                Instant.ofEpochMilli(1234L),
-                null,
-                Instant.ofEpochMilli(1234L),
-                null,
+                startTime = Instant.ofEpochMilli(1234L),
+                startZoneOffset = null,
+                endTime = Instant.ofEpochMilli(1234L),
+                endZoneOffset = null,
+                distance = 10.meters,
             )
         }
     }
diff --git a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/ElevationGainedRecordTest.kt b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/ElevationGainedRecordTest.kt
index 7e077ac..b0cabe7 100644
--- a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/ElevationGainedRecordTest.kt
+++ b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/ElevationGainedRecordTest.kt
@@ -31,20 +31,20 @@
     fun validRecord_equals() {
         assertThat(
                 ElevationGainedRecord(
-                    10.meters,
-                    Instant.ofEpochMilli(1234L),
-                    null,
-                    Instant.ofEpochMilli(1236L),
-                    null,
+                    startTime = Instant.ofEpochMilli(1234L),
+                    startZoneOffset = null,
+                    endTime = Instant.ofEpochMilli(1236L),
+                    endZoneOffset = null,
+                    elevation = 10.meters,
                 )
             )
             .isEqualTo(
                 ElevationGainedRecord(
-                    10.meters,
-                    Instant.ofEpochMilli(1234L),
-                    null,
-                    Instant.ofEpochMilli(1236L),
-                    null,
+                    startTime = Instant.ofEpochMilli(1234L),
+                    startZoneOffset = null,
+                    endTime = Instant.ofEpochMilli(1236L),
+                    endZoneOffset = null,
+                    elevation = 10.meters,
                 )
             )
     }
@@ -53,11 +53,11 @@
     fun invalidTimes_throws() {
         assertFailsWith<IllegalArgumentException> {
             ElevationGainedRecord(
-                10.meters,
-                Instant.ofEpochMilli(1234L),
-                null,
-                Instant.ofEpochMilli(1234L),
-                null,
+                startTime = Instant.ofEpochMilli(1234L),
+                startZoneOffset = null,
+                endTime = Instant.ofEpochMilli(1234L),
+                endZoneOffset = null,
+                elevation = 10.meters,
             )
         }
     }
diff --git a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/ExerciseEventRecordTest.kt b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/ExerciseEventRecordTest.kt
index 2032678..9ad7be7 100644
--- a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/ExerciseEventRecordTest.kt
+++ b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/ExerciseEventRecordTest.kt
@@ -30,20 +30,20 @@
     fun validRecord_equals() {
         assertThat(
                 ExerciseEventRecord(
-                    ExerciseEventRecord.EventType.PAUSE,
-                    Instant.ofEpochMilli(1234L),
-                    null,
-                    Instant.ofEpochMilli(1236L),
-                    null,
+                    startTime = Instant.ofEpochMilli(1234L),
+                    startZoneOffset = null,
+                    endTime = Instant.ofEpochMilli(1236L),
+                    endZoneOffset = null,
+                    eventType = ExerciseEventRecord.EventType.PAUSE,
                 )
             )
             .isEqualTo(
                 ExerciseEventRecord(
-                    ExerciseEventRecord.EventType.PAUSE,
-                    Instant.ofEpochMilli(1234L),
-                    null,
-                    Instant.ofEpochMilli(1236L),
-                    null,
+                    startTime = Instant.ofEpochMilli(1234L),
+                    startZoneOffset = null,
+                    endTime = Instant.ofEpochMilli(1236L),
+                    endZoneOffset = null,
+                    eventType = ExerciseEventRecord.EventType.PAUSE,
                 )
             )
     }
@@ -52,11 +52,11 @@
     fun invalidTimes_throws() {
         assertFailsWith<IllegalArgumentException> {
             ExerciseEventRecord(
-                ExerciseEventRecord.EventType.PAUSE,
-                Instant.ofEpochMilli(1234L),
-                null,
-                Instant.ofEpochMilli(1234L),
-                null,
+                startTime = Instant.ofEpochMilli(1234L),
+                startZoneOffset = null,
+                endTime = Instant.ofEpochMilli(1234L),
+                endZoneOffset = null,
+                eventType = ExerciseEventRecord.EventType.PAUSE,
             )
         }
     }
diff --git a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/ExerciseEventRepetitionsTest.kt b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/ExerciseEventRepetitionsTest.kt
index 702d670..1d58e04 100644
--- a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/ExerciseEventRepetitionsTest.kt
+++ b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/ExerciseEventRepetitionsTest.kt
@@ -30,22 +30,22 @@
     fun validRecord_equals() {
         assertThat(
                 ExerciseRepetitionsRecord(
-                    10,
-                    ExerciseRepetitionsRecord.ExerciseType.ARM_CURL,
                     startTime = Instant.ofEpochMilli(1234L),
                     startZoneOffset = null,
                     endTime = Instant.ofEpochMilli(1236L),
                     endZoneOffset = null,
+                    count = 10,
+                    type = ExerciseRepetitionsRecord.ExerciseType.ARM_CURL,
                 )
             )
             .isEqualTo(
                 ExerciseRepetitionsRecord(
-                    10,
-                    ExerciseRepetitionsRecord.ExerciseType.ARM_CURL,
                     startTime = Instant.ofEpochMilli(1234L),
                     startZoneOffset = null,
                     endTime = Instant.ofEpochMilli(1236L),
                     endZoneOffset = null,
+                    count = 10,
+                    type = ExerciseRepetitionsRecord.ExerciseType.ARM_CURL,
                 )
             )
     }
@@ -54,12 +54,12 @@
     fun invalidTimes_throws() {
         assertFailsWith<IllegalArgumentException> {
             ExerciseRepetitionsRecord(
-                10,
-                ExerciseRepetitionsRecord.ExerciseType.ARM_CURL,
                 startTime = Instant.ofEpochMilli(1234L),
                 startZoneOffset = null,
                 endTime = Instant.ofEpochMilli(1234L),
                 endZoneOffset = null,
+                count = 10,
+                type = ExerciseRepetitionsRecord.ExerciseType.ARM_CURL,
             )
         }
     }
diff --git a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/ExerciseLapRecordTest.kt b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/ExerciseLapRecordTest.kt
index dfd339c..68c96e6 100644
--- a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/ExerciseLapRecordTest.kt
+++ b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/ExerciseLapRecordTest.kt
@@ -31,20 +31,20 @@
     fun validRecord_equals() {
         assertThat(
                 ExerciseLapRecord(
-                    10.0.meters,
-                    Instant.ofEpochMilli(1234L),
-                    null,
-                    Instant.ofEpochMilli(1236L),
-                    null,
+                    startTime = Instant.ofEpochMilli(1234L),
+                    startZoneOffset = null,
+                    endTime = Instant.ofEpochMilli(1236L),
+                    endZoneOffset = null,
+                    length = 10.0.meters,
                 )
             )
             .isEqualTo(
                 ExerciseLapRecord(
-                    10.0.meters,
-                    Instant.ofEpochMilli(1234L),
-                    null,
-                    Instant.ofEpochMilli(1236L),
-                    null,
+                    startTime = Instant.ofEpochMilli(1234L),
+                    startZoneOffset = null,
+                    endTime = Instant.ofEpochMilli(1236L),
+                    endZoneOffset = null,
+                    length = 10.0.meters,
                 )
             )
     }
@@ -53,11 +53,11 @@
     fun invalidTimes_throws() {
         assertFailsWith<IllegalArgumentException> {
             ExerciseLapRecord(
-                10.0.meters,
-                Instant.ofEpochMilli(1234L),
-                null,
-                Instant.ofEpochMilli(1234L),
-                null,
+                startTime = Instant.ofEpochMilli(1234L),
+                startZoneOffset = null,
+                endTime = Instant.ofEpochMilli(1234L),
+                endZoneOffset = null,
+                length = 10.0.meters,
             )
         }
     }
diff --git a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/ExerciseSessionRecordTest.kt b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/ExerciseSessionRecordTest.kt
index 9c4bb06..b38ccec 100644
--- a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/ExerciseSessionRecordTest.kt
+++ b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/ExerciseSessionRecordTest.kt
@@ -30,24 +30,24 @@
     fun validRecord_equals() {
         assertThat(
                 ExerciseSessionRecord(
-                    ExerciseSessionRecord.ExerciseType.EXERCISE_CLASS,
-                    "title",
-                    "notes",
-                    Instant.ofEpochMilli(1234L),
-                    null,
-                    Instant.ofEpochMilli(1236L),
-                    null,
+                    startTime = Instant.ofEpochMilli(1234L),
+                    startZoneOffset = null,
+                    endTime = Instant.ofEpochMilli(1236L),
+                    endZoneOffset = null,
+                    exerciseType = ExerciseSessionRecord.ExerciseType.EXERCISE_CLASS,
+                    title = "title",
+                    notes = "notes",
                 )
             )
             .isEqualTo(
                 ExerciseSessionRecord(
-                    ExerciseSessionRecord.ExerciseType.EXERCISE_CLASS,
-                    "title",
-                    "notes",
-                    Instant.ofEpochMilli(1234L),
-                    null,
-                    Instant.ofEpochMilli(1236L),
-                    null,
+                    startTime = Instant.ofEpochMilli(1234L),
+                    startZoneOffset = null,
+                    endTime = Instant.ofEpochMilli(1236L),
+                    endZoneOffset = null,
+                    exerciseType = ExerciseSessionRecord.ExerciseType.EXERCISE_CLASS,
+                    title = "title",
+                    notes = "notes",
                 )
             )
     }
@@ -56,13 +56,13 @@
     fun invalidTimes_throws() {
         assertFailsWith<IllegalArgumentException> {
             ExerciseSessionRecord(
-                ExerciseSessionRecord.ExerciseType.EXERCISE_CLASS,
-                "title",
-                "notes",
-                Instant.ofEpochMilli(1234L),
-                null,
-                Instant.ofEpochMilli(1234L),
-                null,
+                startTime = Instant.ofEpochMilli(1234L),
+                startZoneOffset = null,
+                endTime = Instant.ofEpochMilli(1234L),
+                endZoneOffset = null,
+                exerciseType = ExerciseSessionRecord.ExerciseType.EXERCISE_CLASS,
+                title = "title",
+                notes = "notes",
             )
         }
     }
diff --git a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/FloorsClimbedRecordTest.kt b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/FloorsClimbedRecordTest.kt
index 09ac1bd..ba9940c 100644
--- a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/FloorsClimbedRecordTest.kt
+++ b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/FloorsClimbedRecordTest.kt
@@ -30,20 +30,20 @@
     fun validRecord_equals() {
         Truth.assertThat(
                 FloorsClimbedRecord(
-                    10.0,
-                    Instant.ofEpochMilli(1234L),
-                    null,
-                    Instant.ofEpochMilli(1236L),
-                    null,
+                    startTime = Instant.ofEpochMilli(1234L),
+                    startZoneOffset = null,
+                    endTime = Instant.ofEpochMilli(1236L),
+                    endZoneOffset = null,
+                    floors = 10.0,
                 )
             )
             .isEqualTo(
                 FloorsClimbedRecord(
-                    10.0,
-                    Instant.ofEpochMilli(1234L),
-                    null,
-                    Instant.ofEpochMilli(1236L),
-                    null,
+                    startTime = Instant.ofEpochMilli(1234L),
+                    startZoneOffset = null,
+                    endTime = Instant.ofEpochMilli(1236L),
+                    endZoneOffset = null,
+                    floors = 10.0,
                 )
             )
     }
@@ -52,11 +52,11 @@
     fun invalidTimes_throws() {
         assertFailsWith<IllegalArgumentException> {
             FloorsClimbedRecord(
-                10.0,
-                Instant.ofEpochMilli(1234L),
-                null,
-                Instant.ofEpochMilli(1234L),
-                null,
+                startTime = Instant.ofEpochMilli(1234L),
+                startZoneOffset = null,
+                endTime = Instant.ofEpochMilli(1234L),
+                endZoneOffset = null,
+                floors = 10.0,
             )
         }
     }
diff --git a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/HeartRateRecordTest.kt b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/HeartRateRecordTest.kt
index 97f1382..0147f2d 100644
--- a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/HeartRateRecordTest.kt
+++ b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/HeartRateRecordTest.kt
@@ -30,20 +30,20 @@
     fun validRecord_equals() {
         assertThat(
                 HeartRateRecord(
-                    Instant.ofEpochMilli(1234L),
-                    null,
-                    Instant.ofEpochMilli(1236L),
-                    null,
-                    listOf<HeartRateRecord.Sample>()
+                    startTime = Instant.ofEpochMilli(1234L),
+                    startZoneOffset = null,
+                    endTime = Instant.ofEpochMilli(1236L),
+                    endZoneOffset = null,
+                    samples = listOf()
                 )
             )
             .isEqualTo(
                 HeartRateRecord(
-                    Instant.ofEpochMilli(1234L),
-                    null,
-                    Instant.ofEpochMilli(1236L),
-                    null,
-                    listOf<HeartRateRecord.Sample>()
+                    startTime = Instant.ofEpochMilli(1234L),
+                    startZoneOffset = null,
+                    endTime = Instant.ofEpochMilli(1236L),
+                    endZoneOffset = null,
+                    samples = listOf()
                 )
             )
     }
@@ -52,20 +52,20 @@
     fun sameStartEndTime_validRecord_equals() {
         assertThat(
             HeartRateRecord(
-                Instant.ofEpochMilli(1234L),
-                null,
-                Instant.ofEpochMilli(1234L),
-                null,
-                listOf<HeartRateRecord.Sample>()
+                startTime = Instant.ofEpochMilli(1234L),
+                startZoneOffset = null,
+                endTime = Instant.ofEpochMilli(1234L),
+                endZoneOffset = null,
+                samples = listOf()
             )
         )
             .isEqualTo(
                 HeartRateRecord(
-                    Instant.ofEpochMilli(1234L),
-                    null,
-                    Instant.ofEpochMilli(1234L),
-                    null,
-                    listOf<HeartRateRecord.Sample>()
+                    startTime = Instant.ofEpochMilli(1234L),
+                    startZoneOffset = null,
+                    endTime = Instant.ofEpochMilli(1234L),
+                    endZoneOffset = null,
+                    samples = listOf()
                 )
             )
     }
@@ -74,11 +74,11 @@
     fun invalidTimes_throws() {
         assertFailsWith<IllegalArgumentException> {
             HeartRateRecord(
-                Instant.ofEpochMilli(1235L),
-                null,
-                Instant.ofEpochMilli(1234L),
-                null,
-                listOf<HeartRateRecord.Sample>()
+                startTime = Instant.ofEpochMilli(1235L),
+                startZoneOffset = null,
+                endTime = Instant.ofEpochMilli(1234L),
+                endZoneOffset = null,
+                samples = listOf()
             )
         }
     }
diff --git a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/HydrationRecordTest.kt b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/HydrationRecordTest.kt
index 6c03424..14b976f 100644
--- a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/HydrationRecordTest.kt
+++ b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/HydrationRecordTest.kt
@@ -31,20 +31,20 @@
     fun validRecord_equals() {
         assertThat(
                 HydrationRecord(
-                    10.liters,
                     startTime = Instant.ofEpochMilli(1234L),
                     startZoneOffset = null,
                     endTime = Instant.ofEpochMilli(1236L),
                     endZoneOffset = null,
+                    volume = 10.liters,
                 )
             )
             .isEqualTo(
                 HydrationRecord(
-                    10.liters,
                     startTime = Instant.ofEpochMilli(1234L),
                     startZoneOffset = null,
                     endTime = Instant.ofEpochMilli(1236L),
                     endZoneOffset = null,
+                    volume = 10.liters,
                 )
             )
     }
@@ -53,11 +53,11 @@
     fun invalidTimes_throws() {
         assertFailsWith<IllegalArgumentException> {
             HydrationRecord(
-                10.liters,
                 startTime = Instant.ofEpochMilli(1234L),
                 startZoneOffset = null,
                 endTime = Instant.ofEpochMilli(1234L),
                 endZoneOffset = null,
+                volume = 10.liters,
             )
         }
     }
diff --git a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/PowerRecordTest.kt b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/PowerRecordTest.kt
index 32fa497..9a830bb 100644
--- a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/PowerRecordTest.kt
+++ b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/PowerRecordTest.kt
@@ -30,20 +30,20 @@
     fun validRecord_equals() {
         assertThat(
                 PowerRecord(
-                    Instant.ofEpochMilli(1234L),
-                    null,
-                    Instant.ofEpochMilli(1236L),
-                    null,
-                    listOf<PowerRecord.Sample>()
+                    startTime = Instant.ofEpochMilli(1234L),
+                    startZoneOffset = null,
+                    endTime = Instant.ofEpochMilli(1236L),
+                    endZoneOffset = null,
+                    samples = listOf()
                 )
             )
             .isEqualTo(
                 PowerRecord(
-                    Instant.ofEpochMilli(1234L),
-                    null,
-                    Instant.ofEpochMilli(1236L),
-                    null,
-                    listOf<PowerRecord.Sample>()
+                    startTime = Instant.ofEpochMilli(1234L),
+                    startZoneOffset = null,
+                    endTime = Instant.ofEpochMilli(1236L),
+                    endZoneOffset = null,
+                    samples = listOf()
                 )
             )
     }
@@ -52,20 +52,20 @@
     fun sameStartEndTime_validRecord_equals() {
         assertThat(
             PowerRecord(
-                Instant.ofEpochMilli(1234L),
-                null,
-                Instant.ofEpochMilli(1234L),
-                null,
-                listOf<PowerRecord.Sample>()
+                startTime = Instant.ofEpochMilli(1234L),
+                startZoneOffset = null,
+                endTime = Instant.ofEpochMilli(1234L),
+                endZoneOffset = null,
+                samples = listOf()
             )
         )
             .isEqualTo(
                 PowerRecord(
-                    Instant.ofEpochMilli(1234L),
-                    null,
-                    Instant.ofEpochMilli(1234L),
-                    null,
-                    listOf<PowerRecord.Sample>()
+                    startTime = Instant.ofEpochMilli(1234L),
+                    startZoneOffset = null,
+                    endTime = Instant.ofEpochMilli(1234L),
+                    endZoneOffset = null,
+                    samples = listOf()
                 )
             )
     }
@@ -74,11 +74,11 @@
     fun invalidTimes_throws() {
         assertFailsWith<IllegalArgumentException> {
             PowerRecord(
-                Instant.ofEpochMilli(1235L),
-                null,
-                Instant.ofEpochMilli(1234L),
-                null,
-                listOf<PowerRecord.Sample>()
+                startTime = Instant.ofEpochMilli(1235L),
+                startZoneOffset = null,
+                endTime = Instant.ofEpochMilli(1234L),
+                endZoneOffset = null,
+                samples = listOf()
             )
         }
     }
diff --git a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/RecordArgumentOrderTest.kt b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/RecordArgumentOrderTest.kt
new file mode 100644
index 0000000..eb29a03a
--- /dev/null
+++ b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/RecordArgumentOrderTest.kt
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.health.connect.client.records
+
+import androidx.health.connect.client.RECORD_CLASSES
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.google.common.truth.Truth.assertThat
+import java.time.Instant
+import java.time.ZoneOffset
+import kotlin.test.assertEquals
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+class RecordArgumentOrderTest {
+
+    @Test
+    fun all_time_parameters_are_at_the_beginning() {
+        RECORD_CLASSES.forEach { recordClass ->
+            val pars = recordClass.java.constructors.first().parameterTypes.toMutableList()
+
+            while (pars.removeFirstOrNull() == Instant::class.java) {
+                assertEquals(ZoneOffset::class.java, pars.removeFirstOrNull())
+            }
+
+            assertThat(pars).containsNoneOf(Instant::class.java, ZoneOffset::class.java)
+        }
+    }
+}
\ No newline at end of file
diff --git a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/SleepSessionRecordTest.kt b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/SleepSessionRecordTest.kt
index d8d7f87..fb5e2f0 100644
--- a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/SleepSessionRecordTest.kt
+++ b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/SleepSessionRecordTest.kt
@@ -30,22 +30,22 @@
     fun validRecord_equals() {
         assertThat(
                 SleepSessionRecord(
-                    "title",
-                    "note",
-                    Instant.ofEpochMilli(1234L),
-                    null,
-                    Instant.ofEpochMilli(1236L),
-                    null,
+                    startTime = Instant.ofEpochMilli(1234L),
+                    startZoneOffset = null,
+                    endTime = Instant.ofEpochMilli(1236L),
+                    endZoneOffset = null,
+                    title = "title",
+                    notes = "note",
                 )
             )
             .isEqualTo(
                 SleepSessionRecord(
-                    "title",
-                    "note",
-                    Instant.ofEpochMilli(1234L),
-                    null,
-                    Instant.ofEpochMilli(1236L),
-                    null,
+                    startTime = Instant.ofEpochMilli(1234L),
+                    startZoneOffset = null,
+                    endTime = Instant.ofEpochMilli(1236L),
+                    endZoneOffset = null,
+                    title = "title",
+                    notes = "note",
                 )
             )
     }
@@ -54,12 +54,12 @@
     fun invalidTimes_throws() {
         assertFailsWith<IllegalArgumentException> {
             SleepSessionRecord(
-                "title",
-                "note",
-                Instant.ofEpochMilli(1234L),
-                null,
-                Instant.ofEpochMilli(1234L),
-                null,
+                startTime = Instant.ofEpochMilli(1234L),
+                startZoneOffset = null,
+                endTime = Instant.ofEpochMilli(1234L),
+                endZoneOffset = null,
+                title = "title",
+                notes = "note",
             )
         }
     }
diff --git a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/SleepStageRecordTest.kt b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/SleepStageRecordTest.kt
index 020ea72..d9d0476 100644
--- a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/SleepStageRecordTest.kt
+++ b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/SleepStageRecordTest.kt
@@ -30,20 +30,20 @@
     fun validRecord_equals() {
         assertThat(
                 SleepStageRecord(
-                    SleepStageRecord.StageType.AWAKE,
-                    Instant.ofEpochMilli(1234L),
-                    null,
-                    Instant.ofEpochMilli(1236L),
-                    null,
+                    startTime = Instant.ofEpochMilli(1234L),
+                    startZoneOffset = null,
+                    endTime = Instant.ofEpochMilli(1236L),
+                    endZoneOffset = null,
+                    stage = SleepStageRecord.StageType.AWAKE,
                 )
             )
             .isEqualTo(
                 SleepStageRecord(
-                    SleepStageRecord.StageType.AWAKE,
-                    Instant.ofEpochMilli(1234L),
-                    null,
-                    Instant.ofEpochMilli(1236L),
-                    null,
+                    startTime = Instant.ofEpochMilli(1234L),
+                    startZoneOffset = null,
+                    endTime = Instant.ofEpochMilli(1236L),
+                    endZoneOffset = null,
+                    stage = SleepStageRecord.StageType.AWAKE,
                 )
             )
     }
@@ -52,11 +52,11 @@
     fun invalidTimes_throws() {
         assertFailsWith<IllegalArgumentException> {
             SleepStageRecord(
-                SleepStageRecord.StageType.AWAKE,
-                Instant.ofEpochMilli(1234L),
-                null,
-                Instant.ofEpochMilli(1234L),
-                null,
+                startTime = Instant.ofEpochMilli(1234L),
+                startZoneOffset = null,
+                endTime = Instant.ofEpochMilli(1234L),
+                endZoneOffset = null,
+                stage = SleepStageRecord.StageType.AWAKE,
             )
         }
     }
diff --git a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/SpeedRecordTest.kt b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/SpeedRecordTest.kt
index 5f6f142..20c6943 100644
--- a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/SpeedRecordTest.kt
+++ b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/SpeedRecordTest.kt
@@ -30,20 +30,20 @@
     fun validRecord_equals() {
         assertThat(
                 SpeedRecord(
-                    Instant.ofEpochMilli(1234L),
-                    null,
-                    Instant.ofEpochMilli(1236L),
-                    null,
-                    listOf<SpeedRecord.Sample>()
+                    startTime = Instant.ofEpochMilli(1234L),
+                    startZoneOffset = null,
+                    endTime = Instant.ofEpochMilli(1236L),
+                    endZoneOffset = null,
+                    samples = listOf()
                 )
             )
             .isEqualTo(
                 SpeedRecord(
-                    Instant.ofEpochMilli(1234L),
-                    null,
-                    Instant.ofEpochMilli(1236L),
-                    null,
-                    listOf<SpeedRecord.Sample>()
+                    startTime = Instant.ofEpochMilli(1234L),
+                    startZoneOffset = null,
+                    endTime = Instant.ofEpochMilli(1236L),
+                    endZoneOffset = null,
+                    samples = listOf()
                 )
             )
     }
@@ -52,20 +52,20 @@
     fun sameStartEndTime_validRecord_equals() {
         assertThat(
             SpeedRecord(
-                Instant.ofEpochMilli(1234L),
-                null,
-                Instant.ofEpochMilli(1234L),
-                null,
-                listOf<SpeedRecord.Sample>()
+                startTime = Instant.ofEpochMilli(1234L),
+                startZoneOffset = null,
+                endTime = Instant.ofEpochMilli(1234L),
+                endZoneOffset = null,
+                samples = listOf()
             )
         )
             .isEqualTo(
                 SpeedRecord(
-                    Instant.ofEpochMilli(1234L),
-                    null,
-                    Instant.ofEpochMilli(1234L),
-                    null,
-                    listOf<SpeedRecord.Sample>()
+                    startTime = Instant.ofEpochMilli(1234L),
+                    startZoneOffset = null,
+                    endTime = Instant.ofEpochMilli(1234L),
+                    endZoneOffset = null,
+                    samples = listOf()
                 )
             )
     }
@@ -74,11 +74,11 @@
     fun invalidTimes_throws() {
         assertFailsWith<IllegalArgumentException> {
             SpeedRecord(
-                Instant.ofEpochMilli(1235L),
-                null,
-                Instant.ofEpochMilli(1234L),
-                null,
-                listOf<SpeedRecord.Sample>()
+                startTime = Instant.ofEpochMilli(1235L),
+                startZoneOffset = null,
+                endTime = Instant.ofEpochMilli(1234L),
+                endZoneOffset = null,
+                samples = listOf()
             )
         }
     }
diff --git a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/StepsCadenceRecordTest.kt b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/StepsCadenceRecordTest.kt
index 13ac5d1..ce58afd 100644
--- a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/StepsCadenceRecordTest.kt
+++ b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/StepsCadenceRecordTest.kt
@@ -30,20 +30,20 @@
     fun validRecord_equals() {
         assertThat(
                 StepsCadenceRecord(
-                    Instant.ofEpochMilli(1234L),
-                    null,
-                    Instant.ofEpochMilli(1236L),
-                    null,
-                    listOf<StepsCadenceRecord.Sample>()
+                    startTime = Instant.ofEpochMilli(1234L),
+                    startZoneOffset = null,
+                    endTime = Instant.ofEpochMilli(1236L),
+                    endZoneOffset = null,
+                    samples = listOf()
                 )
             )
             .isEqualTo(
                 StepsCadenceRecord(
-                    Instant.ofEpochMilli(1234L),
-                    null,
-                    Instant.ofEpochMilli(1236L),
-                    null,
-                    listOf<StepsCadenceRecord.Sample>()
+                    startTime = Instant.ofEpochMilli(1234L),
+                    startZoneOffset = null,
+                    endTime = Instant.ofEpochMilli(1236L),
+                    endZoneOffset = null,
+                    samples = listOf()
                 )
             )
     }
@@ -52,20 +52,20 @@
     fun sameStartEndTime_validRecord_equals() {
         assertThat(
             StepsCadenceRecord(
-                Instant.ofEpochMilli(1234L),
-                null,
-                Instant.ofEpochMilli(1234L),
-                null,
-                listOf<StepsCadenceRecord.Sample>()
+                startTime = Instant.ofEpochMilli(1234L),
+                startZoneOffset = null,
+                endTime = Instant.ofEpochMilli(1234L),
+                endZoneOffset = null,
+                samples = listOf()
             )
         )
             .isEqualTo(
                 StepsCadenceRecord(
-                    Instant.ofEpochMilli(1234L),
-                    null,
-                    Instant.ofEpochMilli(1234L),
-                    null,
-                    listOf<StepsCadenceRecord.Sample>()
+                    startTime = Instant.ofEpochMilli(1234L),
+                    startZoneOffset = null,
+                    endTime = Instant.ofEpochMilli(1234L),
+                    endZoneOffset = null,
+                    samples = listOf()
                 )
             )
     }
@@ -74,11 +74,11 @@
     fun invalidTimes_throws() {
         assertFailsWith<IllegalArgumentException> {
             StepsCadenceRecord(
-                Instant.ofEpochMilli(1235L),
-                null,
-                Instant.ofEpochMilli(1234L),
-                null,
-                listOf<StepsCadenceRecord.Sample>()
+                startTime = Instant.ofEpochMilli(1235L),
+                startZoneOffset = null,
+                endTime = Instant.ofEpochMilli(1234L),
+                endZoneOffset = null,
+                samples = listOf()
             )
         }
     }
diff --git a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/StepsRecordTest.kt b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/StepsRecordTest.kt
index 1c51a8a..79718d5 100644
--- a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/StepsRecordTest.kt
+++ b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/StepsRecordTest.kt
@@ -30,20 +30,20 @@
     fun validRecord_equals() {
         assertThat(
                 StepsRecord(
-                    10,
-                    Instant.ofEpochMilli(1234L),
-                    null,
-                    Instant.ofEpochMilli(1236L),
-                    null,
+                    startTime = Instant.ofEpochMilli(1234L),
+                    startZoneOffset = null,
+                    endTime = Instant.ofEpochMilli(1236L),
+                    endZoneOffset = null,
+                    count = 10,
                 )
             )
             .isEqualTo(
                 StepsRecord(
-                    10,
-                    Instant.ofEpochMilli(1234L),
-                    null,
-                    Instant.ofEpochMilli(1236L),
-                    null,
+                    startTime = Instant.ofEpochMilli(1234L),
+                    startZoneOffset = null,
+                    endTime = Instant.ofEpochMilli(1236L),
+                    endZoneOffset = null,
+                    count = 10,
                 )
             )
     }
@@ -52,11 +52,11 @@
     fun invalidTimes_throws() {
         assertFailsWith<IllegalArgumentException> {
             StepsRecord(
-                10,
-                Instant.ofEpochMilli(1234L),
-                null,
-                Instant.ofEpochMilli(1234L),
-                null,
+                startTime = Instant.ofEpochMilli(1234L),
+                startZoneOffset = null,
+                endTime = Instant.ofEpochMilli(1234L),
+                endZoneOffset = null,
+                count = 10,
             )
         }
     }
diff --git a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/SwimmingStrokesRecordTest.kt b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/SwimmingStrokesRecordTest.kt
index dd9dba4..ed30cca 100644
--- a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/SwimmingStrokesRecordTest.kt
+++ b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/SwimmingStrokesRecordTest.kt
@@ -30,22 +30,22 @@
     fun validRecord_equals() {
         assertThat(
                 SwimmingStrokesRecord(
-                    10,
-                    SwimmingStrokesRecord.SwimmingType.BACKSTROKE,
-                    Instant.ofEpochMilli(1234L),
-                    null,
-                    Instant.ofEpochMilli(1236L),
-                    null,
+                    startTime = Instant.ofEpochMilli(1234L),
+                    startZoneOffset = null,
+                    endTime = Instant.ofEpochMilli(1236L),
+                    endZoneOffset = null,
+                    count = 10,
+                    type = SwimmingStrokesRecord.SwimmingType.BACKSTROKE,
                 )
             )
             .isEqualTo(
                 SwimmingStrokesRecord(
-                    10,
-                    SwimmingStrokesRecord.SwimmingType.BACKSTROKE,
-                    Instant.ofEpochMilli(1234L),
-                    null,
-                    Instant.ofEpochMilli(1236L),
-                    null,
+                    startTime = Instant.ofEpochMilli(1234L),
+                    startZoneOffset = null,
+                    endTime = Instant.ofEpochMilli(1236L),
+                    endZoneOffset = null,
+                    count = 10,
+                    type = SwimmingStrokesRecord.SwimmingType.BACKSTROKE,
                 )
             )
     }
@@ -54,12 +54,12 @@
     fun invalidTimes_throws() {
         assertFailsWith<IllegalArgumentException> {
             SwimmingStrokesRecord(
-                10,
-                SwimmingStrokesRecord.SwimmingType.BACKSTROKE,
-                Instant.ofEpochMilli(1234L),
-                null,
-                Instant.ofEpochMilli(1234L),
-                null,
+                startTime = Instant.ofEpochMilli(1234L),
+                startZoneOffset = null,
+                endTime = Instant.ofEpochMilli(1234L),
+                endZoneOffset = null,
+                count = 10,
+                type = SwimmingStrokesRecord.SwimmingType.BACKSTROKE,
             )
         }
     }
diff --git a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/TotalCaloriesBurnedRecordTest.kt b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/TotalCaloriesBurnedRecordTest.kt
index ae1f1e9..393f670 100644
--- a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/TotalCaloriesBurnedRecordTest.kt
+++ b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/TotalCaloriesBurnedRecordTest.kt
@@ -31,20 +31,20 @@
     fun validRecord_equals() {
         assertThat(
                 TotalCaloriesBurnedRecord(
-                    10.calories,
-                    Instant.ofEpochMilli(1234L),
-                    null,
-                    Instant.ofEpochMilli(1236L),
-                    null,
+                    startTime = Instant.ofEpochMilli(1234L),
+                    startZoneOffset = null,
+                    endTime = Instant.ofEpochMilli(1236L),
+                    endZoneOffset = null,
+                    energy = 10.calories,
                 )
             )
             .isEqualTo(
                 TotalCaloriesBurnedRecord(
-                    10.calories,
-                    Instant.ofEpochMilli(1234L),
-                    null,
-                    Instant.ofEpochMilli(1236L),
-                    null,
+                    startTime = Instant.ofEpochMilli(1234L),
+                    startZoneOffset = null,
+                    endTime = Instant.ofEpochMilli(1236L),
+                    endZoneOffset = null,
+                    energy = 10.calories,
                 )
             )
     }
@@ -53,11 +53,11 @@
     fun invalidTimes_throws() {
         assertFailsWith<IllegalArgumentException> {
             TotalCaloriesBurnedRecord(
-                10.calories,
-                Instant.ofEpochMilli(1234L),
-                null,
-                Instant.ofEpochMilli(1234L),
-                null,
+                startTime = Instant.ofEpochMilli(1234L),
+                startZoneOffset = null,
+                endTime = Instant.ofEpochMilli(1234L),
+                endZoneOffset = null,
+                energy = 10.calories,
             )
         }
     }
diff --git a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/WheelchairPushesRecordTest.kt b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/WheelchairPushesRecordTest.kt
index 94b74fb..f50dd03 100644
--- a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/WheelchairPushesRecordTest.kt
+++ b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/WheelchairPushesRecordTest.kt
@@ -30,20 +30,20 @@
     fun validRecord_equals() {
         assertThat(
                 WheelchairPushesRecord(
-                    10,
-                    Instant.ofEpochMilli(1234L),
-                    null,
-                    Instant.ofEpochMilli(1236L),
-                    null,
+                    startTime = Instant.ofEpochMilli(1234L),
+                    startZoneOffset = null,
+                    endTime = Instant.ofEpochMilli(1236L),
+                    endZoneOffset = null,
+                    count = 10,
                 )
             )
             .isEqualTo(
                 WheelchairPushesRecord(
-                    10,
-                    Instant.ofEpochMilli(1234L),
-                    null,
-                    Instant.ofEpochMilli(1236L),
-                    null,
+                    startTime = Instant.ofEpochMilli(1234L),
+                    startZoneOffset = null,
+                    endTime = Instant.ofEpochMilli(1236L),
+                    endZoneOffset = null,
+                    count = 10,
                 )
             )
     }
@@ -52,11 +52,11 @@
     fun invalidTimes_throws() {
         assertFailsWith<IllegalArgumentException> {
             WheelchairPushesRecord(
-                10,
-                Instant.ofEpochMilli(1234L),
-                null,
-                Instant.ofEpochMilli(1234L),
-                null,
+                startTime = Instant.ofEpochMilli(1234L),
+                startZoneOffset = null,
+                endTime = Instant.ofEpochMilli(1234L),
+                endZoneOffset = null,
+                count = 10,
             )
         }
     }
diff --git a/health/health-services-client/api/1.0.0-beta01.txt b/health/health-services-client/api/1.0.0-beta01.txt
index 0eb1f5c..137fe7b 100644
--- a/health/health-services-client/api/1.0.0-beta01.txt
+++ b/health/health-services-client/api/1.0.0-beta01.txt
@@ -68,12 +68,11 @@
   public abstract class PassiveListenerService extends android.app.Service {
     ctor public PassiveListenerService();
     method public final android.os.IBinder? onBind(android.content.Intent intent);
-    method public final void onGoalCompleted(androidx.health.services.client.data.PassiveGoal goal);
-    method public final void onHealthEventReceived(androidx.health.services.client.data.HealthEvent event);
-    method public final void onNewDataPointsReceived(androidx.health.services.client.data.DataPointContainer dataPoints);
-    method public final void onPermissionLost();
-    method public final void onUserActivityInfoReceived(androidx.health.services.client.data.UserActivityInfo info);
-    field public static final String TAG = "PassiveListenerService";
+    method public void onGoalCompleted(androidx.health.services.client.data.PassiveGoal goal);
+    method public void onHealthEventReceived(androidx.health.services.client.data.HealthEvent event);
+    method public void onNewDataPointsReceived(androidx.health.services.client.data.DataPointContainer dataPoints);
+    method public void onPermissionLost();
+    method public void onUserActivityInfoReceived(androidx.health.services.client.data.UserActivityInfo info);
   }
 
   public interface PassiveMonitoringClient {
@@ -139,7 +138,7 @@
     property public androidx.health.services.client.data.DataType<T,? extends androidx.health.services.client.data.DataPoint<T>> dataType;
   }
 
-  public abstract class DataPointAccuracy extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.DataPointAccuracy> {
+  public abstract class DataPointAccuracy {
     ctor public DataPointAccuracy();
   }
 
@@ -273,21 +272,15 @@
     ctor public DeltaDataType(String name, androidx.health.services.client.data.DataType.TimeType timeType, Class<T> valueClass);
   }
 
-  public final class ExerciseCapabilities extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.ExerciseCapabilities> {
+  public final class ExerciseCapabilities {
     ctor public ExerciseCapabilities(java.util.Map<androidx.health.services.client.data.ExerciseType,androidx.health.services.client.data.ExerciseTypeCapabilities> typeToCapabilities);
     method public java.util.Set<androidx.health.services.client.data.ExerciseType> getAutoPauseAndResumeEnabledExercises();
     method public androidx.health.services.client.data.ExerciseTypeCapabilities getExerciseTypeCapabilities(androidx.health.services.client.data.ExerciseType exercise);
-    method public androidx.health.services.client.proto.DataProto.ExerciseCapabilities getProto();
     method public java.util.Set<androidx.health.services.client.data.ExerciseType> getSupportedExerciseTypes();
     method public java.util.Map<androidx.health.services.client.data.ExerciseType,androidx.health.services.client.data.ExerciseTypeCapabilities> getTypeToCapabilities();
     property public final java.util.Set<androidx.health.services.client.data.ExerciseType> autoPauseAndResumeEnabledExercises;
     property public final java.util.Set<androidx.health.services.client.data.ExerciseType> supportedExerciseTypes;
     property public final java.util.Map<androidx.health.services.client.data.ExerciseType,androidx.health.services.client.data.ExerciseTypeCapabilities> typeToCapabilities;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.ExerciseCapabilities> CREATOR;
-    field public static final androidx.health.services.client.data.ExerciseCapabilities.Companion Companion;
-  }
-
-  public static final class ExerciseCapabilities.Companion {
   }
 
   public final class ExerciseConfig {
@@ -326,14 +319,15 @@
     method public androidx.health.services.client.data.ExerciseConfig.Builder builder(androidx.health.services.client.data.ExerciseType exerciseType);
   }
 
-  public final class ExerciseGoal<T extends java.lang.Number> extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.ExerciseGoal> {
+  public final class ExerciseGoal<T extends java.lang.Number> implements android.os.Parcelable {
     method public static <T extends java.lang.Number> androidx.health.services.client.data.ExerciseGoal<T> createMilestone(androidx.health.services.client.data.DataTypeCondition<T,androidx.health.services.client.data.AggregateDataType<T,?>> condition, T period);
     method public static <T extends java.lang.Number> androidx.health.services.client.data.ExerciseGoal<T> createMilestoneGoalWithUpdatedThreshold(androidx.health.services.client.data.ExerciseGoal<T> goal, T newThreshold);
     method public static <T extends java.lang.Number> androidx.health.services.client.data.ExerciseGoal<T> createOneTimeGoal(androidx.health.services.client.data.DataTypeCondition<T,androidx.health.services.client.data.AggregateDataType<T,?>> condition);
+    method public int describeContents();
     method public androidx.health.services.client.data.DataTypeCondition<T,androidx.health.services.client.data.AggregateDataType<T,?>> getDataTypeCondition();
     method public androidx.health.services.client.data.ExerciseGoalType getExerciseGoalType();
     method public T? getPeriod();
-    method public androidx.health.services.client.proto.DataProto.ExerciseGoal getProto();
+    method public void writeToParcel(android.os.Parcel dest, int flags);
     property public final androidx.health.services.client.data.DataTypeCondition<T,androidx.health.services.client.data.AggregateDataType<T,?>> dataTypeCondition;
     property public final androidx.health.services.client.data.ExerciseGoalType exerciseGoalType;
     property public final T? period;
@@ -362,18 +356,12 @@
     method public androidx.health.services.client.data.ExerciseGoalType? fromId(int id);
   }
 
-  public final class ExerciseInfo extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.ExerciseInfo> {
+  public final class ExerciseInfo {
     ctor public ExerciseInfo(int exerciseTrackedStatus, androidx.health.services.client.data.ExerciseType exerciseType);
     method public int getExerciseTrackedStatus();
     method public androidx.health.services.client.data.ExerciseType getExerciseType();
-    method public androidx.health.services.client.proto.DataProto.ExerciseInfo getProto();
     property public final int exerciseTrackedStatus;
     property public final androidx.health.services.client.data.ExerciseType exerciseType;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.ExerciseInfo> CREATOR;
-    field public static final androidx.health.services.client.data.ExerciseInfo.Companion Companion;
-  }
-
-  public static final class ExerciseInfo.Companion {
   }
 
   public final class ExerciseLapSummary {
@@ -405,8 +393,6 @@
     property public final boolean isResuming;
     property public final String name;
     field public static final androidx.health.services.client.data.ExerciseState ACTIVE;
-    field public static final androidx.health.services.client.data.ExerciseState AUTO_ENDING;
-    field public static final androidx.health.services.client.data.ExerciseState AUTO_ENDING_PERMISSION_LOST;
     field public static final androidx.health.services.client.data.ExerciseState AUTO_PAUSED;
     field public static final androidx.health.services.client.data.ExerciseState AUTO_PAUSING;
     field public static final androidx.health.services.client.data.ExerciseState AUTO_RESUMING;
@@ -414,8 +400,6 @@
     field public static final androidx.health.services.client.data.ExerciseState ENDED;
     field public static final androidx.health.services.client.data.ExerciseState ENDING;
     field public static final androidx.health.services.client.data.ExerciseState PREPARING;
-    field public static final androidx.health.services.client.data.ExerciseState TERMINATING;
-    field public static final androidx.health.services.client.data.ExerciseState USER_ENDING;
     field public static final androidx.health.services.client.data.ExerciseState USER_PAUSED;
     field public static final androidx.health.services.client.data.ExerciseState USER_PAUSING;
     field public static final androidx.health.services.client.data.ExerciseState USER_RESUMING;
@@ -536,9 +520,8 @@
     method public androidx.health.services.client.data.ExerciseType fromId(int id);
   }
 
-  public final class ExerciseTypeCapabilities extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.ExerciseTypeCapabilities> {
+  public final class ExerciseTypeCapabilities {
     ctor public ExerciseTypeCapabilities(java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> supportedDataTypes, java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,? extends java.util.Set<androidx.health.services.client.data.ComparisonType>> supportedGoals, java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,? extends java.util.Set<androidx.health.services.client.data.ComparisonType>> supportedMilestones, boolean supportsAutoPauseAndResume);
-    method public androidx.health.services.client.proto.DataProto.ExerciseTypeCapabilities getProto();
     method public java.util.Set<androidx.health.services.client.data.DataType<?,?>> getSupportedDataTypes();
     method public java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,java.util.Set<androidx.health.services.client.data.ComparisonType>> getSupportedGoals();
     method public java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,java.util.Set<androidx.health.services.client.data.ComparisonType>> getSupportedMilestones();
@@ -547,15 +530,10 @@
     property public final java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,java.util.Set<androidx.health.services.client.data.ComparisonType>> supportedGoals;
     property public final java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,java.util.Set<androidx.health.services.client.data.ComparisonType>> supportedMilestones;
     property public final boolean supportsAutoPauseAndResume;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.ExerciseTypeCapabilities> CREATOR;
-    field public static final androidx.health.services.client.data.ExerciseTypeCapabilities.Companion Companion;
   }
 
-  public static final class ExerciseTypeCapabilities.Companion {
-  }
-
-  public final class ExerciseUpdate extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.ExerciseUpdate> {
-    ctor public ExerciseUpdate(java.time.Instant? startTime, java.time.Duration? updateDurationFromBoot, androidx.health.services.client.data.DataPointContainer latestMetrics, java.util.Set<? extends androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number>> latestAchievedGoals, java.util.Set<androidx.health.services.client.data.MilestoneMarkerSummary> latestMilestoneMarkerSummaries, androidx.health.services.client.data.ExerciseConfig? exerciseConfig, androidx.health.services.client.data.ExerciseUpdate.ActiveDurationCheckpoint? activeDurationCheckpoint, androidx.health.services.client.data.ExerciseStateInfo exerciseStateInfo);
+  public final class ExerciseUpdate {
+    ctor public ExerciseUpdate(androidx.health.services.client.data.DataPointContainer latestMetrics, java.util.Set<? extends androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number>> latestAchievedGoals, java.util.Set<androidx.health.services.client.data.MilestoneMarkerSummary> latestMilestoneMarkerSummaries, androidx.health.services.client.data.ExerciseStateInfo exerciseStateInfo, optional androidx.health.services.client.data.ExerciseConfig? exerciseConfig, optional androidx.health.services.client.data.ExerciseUpdate.ActiveDurationCheckpoint? activeDurationCheckpoint, optional java.time.Duration? updateDurationFromBoot, optional java.time.Instant? startTime);
     method public java.time.Duration getActiveDurationAtDataPoint(androidx.health.services.client.data.IntervalDataPoint<?> dataPoint);
     method public java.time.Duration getActiveDurationAtDataPoint(androidx.health.services.client.data.SampleDataPoint<?> dataPoint);
     method public androidx.health.services.client.data.ExerciseUpdate.ActiveDurationCheckpoint? getActiveDurationCheckpoint();
@@ -564,7 +542,6 @@
     method public java.util.Set<androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number>> getLatestAchievedGoals();
     method public androidx.health.services.client.data.DataPointContainer getLatestMetrics();
     method public java.util.Set<androidx.health.services.client.data.MilestoneMarkerSummary> getLatestMilestoneMarkerSummaries();
-    method public androidx.health.services.client.proto.DataProto.ExerciseUpdate getProto();
     method public java.time.Instant? getStartTime();
     method public java.time.Duration getUpdateDurationFromBoot();
     property public final androidx.health.services.client.data.ExerciseUpdate.ActiveDurationCheckpoint? activeDurationCheckpoint;
@@ -574,7 +551,6 @@
     property public final androidx.health.services.client.data.DataPointContainer latestMetrics;
     property public final java.util.Set<androidx.health.services.client.data.MilestoneMarkerSummary> latestMilestoneMarkerSummaries;
     property public final java.time.Instant? startTime;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.ExerciseUpdate> CREATOR;
     field public static final androidx.health.services.client.data.ExerciseUpdate.Companion Companion;
   }
 
@@ -614,14 +590,8 @@
 
   public final class HeartRateAccuracy extends androidx.health.services.client.data.DataPointAccuracy {
     ctor public HeartRateAccuracy(androidx.health.services.client.data.HeartRateAccuracy.SensorStatus sensorStatus);
-    method public androidx.health.services.client.proto.DataProto.DataPointAccuracy getProto();
     method public androidx.health.services.client.data.HeartRateAccuracy.SensorStatus getSensorStatus();
     property public final androidx.health.services.client.data.HeartRateAccuracy.SensorStatus sensorStatus;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.HeartRateAccuracy> CREATOR;
-    field public static final androidx.health.services.client.data.HeartRateAccuracy.Companion Companion;
-  }
-
-  public static final class HeartRateAccuracy.Companion {
   }
 
   public static final class HeartRateAccuracy.SensorStatus {
@@ -662,11 +632,9 @@
   public final class LocationAccuracy extends androidx.health.services.client.data.DataPointAccuracy {
     ctor public LocationAccuracy(@FloatRange(from=0.0) double horizontalPositionErrorMeters, optional @FloatRange(from=0.0) double verticalPositionErrorMeters);
     method public double getHorizontalPositionErrorMeters();
-    method public androidx.health.services.client.proto.DataProto.DataPointAccuracy getProto();
     method public double getVerticalPositionErrorMeters();
     property public final double horizontalPositionErrorMeters;
     property public final double verticalPositionErrorMeters;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.LocationAccuracy> CREATOR;
     field public static final androidx.health.services.client.data.LocationAccuracy.Companion Companion;
   }
 
@@ -706,24 +674,17 @@
     field public static final double BEARING_UNAVAILABLE = -1.0;
   }
 
-  public final class MeasureCapabilities extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.MeasureCapabilities> {
+  public final class MeasureCapabilities {
     ctor public MeasureCapabilities(java.util.Set<? extends androidx.health.services.client.data.DeltaDataType<?,?>> supportedDataTypesMeasure);
-    method public androidx.health.services.client.proto.DataProto.MeasureCapabilities getProto();
     method public java.util.Set<androidx.health.services.client.data.DeltaDataType<?,?>> getSupportedDataTypesMeasure();
     property public final java.util.Set<androidx.health.services.client.data.DeltaDataType<?,?>> supportedDataTypesMeasure;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.MeasureCapabilities> CREATOR;
-    field public static final androidx.health.services.client.data.MeasureCapabilities.Companion Companion;
   }
 
-  public static final class MeasureCapabilities.Companion {
-  }
-
-  public final class MilestoneMarkerSummary extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.MilestoneMarkerSummary> {
+  public final class MilestoneMarkerSummary {
     ctor public MilestoneMarkerSummary(java.time.Instant startTime, java.time.Instant endTime, java.time.Duration activeDuration, androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number> achievedGoal, androidx.health.services.client.data.DataPointContainer summaryMetrics);
     method public androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number> getAchievedGoal();
     method public java.time.Duration getActiveDuration();
     method public java.time.Instant getEndTime();
-    method public androidx.health.services.client.proto.DataProto.MilestoneMarkerSummary getProto();
     method public java.time.Instant getStartTime();
     method public androidx.health.services.client.data.DataPointContainer getSummaryMetrics();
     property public final androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number> achievedGoal;
@@ -731,11 +692,6 @@
     property public final java.time.Instant endTime;
     property public final java.time.Instant startTime;
     property public final androidx.health.services.client.data.DataPointContainer summaryMetrics;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.MilestoneMarkerSummary> CREATOR;
-    field public static final androidx.health.services.client.data.MilestoneMarkerSummary.Companion Companion;
-  }
-
-  public static final class MilestoneMarkerSummary.Companion {
   }
 
   public final class PassiveGoal {
@@ -744,19 +700,17 @@
     property public final androidx.health.services.client.data.DataTypeCondition<? extends java.lang.Number,? extends androidx.health.services.client.data.DeltaDataType<? extends java.lang.Number,?>> dataTypeCondition;
   }
 
-  public final class PassiveListenerConfig extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.PassiveListenerConfig> {
-    ctor public PassiveListenerConfig(java.util.Set<? extends androidx.health.services.client.data.DataType<? extends java.lang.Object,? extends androidx.health.services.client.data.DataPoint<?>>> dataTypes, boolean shouldRequestUserActivityState, java.util.Set<androidx.health.services.client.data.PassiveGoal> dailyGoals, java.util.Set<androidx.health.services.client.data.HealthEvent.Type> healthEventTypes);
+  public final class PassiveListenerConfig {
+    ctor public PassiveListenerConfig(java.util.Set<? extends androidx.health.services.client.data.DataType<? extends java.lang.Object,? extends androidx.health.services.client.data.DataPoint<?>>> dataTypes, boolean shouldUserActivityInfoBeRequested, java.util.Set<androidx.health.services.client.data.PassiveGoal> dailyGoals, java.util.Set<androidx.health.services.client.data.HealthEvent.Type> healthEventTypes);
     method public static androidx.health.services.client.data.PassiveListenerConfig.Builder builder();
     method public java.util.Set<androidx.health.services.client.data.PassiveGoal> getDailyGoals();
     method public java.util.Set<androidx.health.services.client.data.DataType<? extends java.lang.Object,? extends androidx.health.services.client.data.DataPoint<?>>> getDataTypes();
     method public java.util.Set<androidx.health.services.client.data.HealthEvent.Type> getHealthEventTypes();
-    method public androidx.health.services.client.proto.DataProto.PassiveListenerConfig getProto();
-    method public boolean getShouldRequestUserActivityState();
+    method public boolean getShouldUserActivityInfoBeRequested();
     property public final java.util.Set<androidx.health.services.client.data.PassiveGoal> dailyGoals;
     property public final java.util.Set<androidx.health.services.client.data.DataType<? extends java.lang.Object,? extends androidx.health.services.client.data.DataPoint<?>>> dataTypes;
     property public final java.util.Set<androidx.health.services.client.data.HealthEvent.Type> healthEventTypes;
-    property public final boolean shouldRequestUserActivityState;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.PassiveListenerConfig> CREATOR;
+    property public final boolean shouldUserActivityInfoBeRequested;
     field public static final androidx.health.services.client.data.PassiveListenerConfig.Companion Companion;
   }
 
@@ -766,16 +720,15 @@
     method public androidx.health.services.client.data.PassiveListenerConfig.Builder setDailyGoals(java.util.Set<androidx.health.services.client.data.PassiveGoal> dailyGoals);
     method public androidx.health.services.client.data.PassiveListenerConfig.Builder setDataTypes(java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> dataTypes);
     method public androidx.health.services.client.data.PassiveListenerConfig.Builder setHealthEventTypes(java.util.Set<androidx.health.services.client.data.HealthEvent.Type> healthEventTypes);
-    method public androidx.health.services.client.data.PassiveListenerConfig.Builder setShouldRequestUserActivityState(boolean requestUserActivityState);
+    method public androidx.health.services.client.data.PassiveListenerConfig.Builder setShouldUserActivityInfoBeRequested(boolean shouldUserActivityInfoBeRequested);
   }
 
   public static final class PassiveListenerConfig.Companion {
     method public androidx.health.services.client.data.PassiveListenerConfig.Builder builder();
   }
 
-  public final class PassiveMonitoringCapabilities extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.PassiveMonitoringCapabilities> {
+  public final class PassiveMonitoringCapabilities {
     ctor public PassiveMonitoringCapabilities(java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> supportedDataTypesPassiveMonitoring, java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> supportedDataTypesPassiveGoals, java.util.Set<androidx.health.services.client.data.HealthEvent.Type> supportedHealthEventTypes, java.util.Set<androidx.health.services.client.data.UserActivityState> supportedUserActivityStates);
-    method public androidx.health.services.client.proto.DataProto.PassiveMonitoringCapabilities getProto();
     method public java.util.Set<androidx.health.services.client.data.DataType<?,?>> getSupportedDataTypesPassiveGoals();
     method public java.util.Set<androidx.health.services.client.data.DataType<?,?>> getSupportedDataTypesPassiveMonitoring();
     method public java.util.Set<androidx.health.services.client.data.HealthEvent.Type> getSupportedHealthEventTypes();
@@ -784,43 +737,14 @@
     property public final java.util.Set<androidx.health.services.client.data.DataType<?,?>> supportedDataTypesPassiveMonitoring;
     property public final java.util.Set<androidx.health.services.client.data.HealthEvent.Type> supportedHealthEventTypes;
     property public final java.util.Set<androidx.health.services.client.data.UserActivityState> supportedUserActivityStates;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.PassiveMonitoringCapabilities> CREATOR;
-    field public static final androidx.health.services.client.data.PassiveMonitoringCapabilities.Companion Companion;
   }
 
-  public static final class PassiveMonitoringCapabilities.Companion {
-  }
-
-  public final class PassiveMonitoringUpdate extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.PassiveMonitoringUpdate> {
+  public final class PassiveMonitoringUpdate {
     ctor public PassiveMonitoringUpdate(androidx.health.services.client.data.DataPointContainer dataPoints, java.util.List<androidx.health.services.client.data.UserActivityInfo> userActivityInfoUpdates);
-    method public static androidx.health.services.client.data.PassiveMonitoringUpdate? fromIntent(android.content.Intent intent);
     method public androidx.health.services.client.data.DataPointContainer getDataPoints();
-    method public androidx.health.services.client.proto.DataProto.PassiveMonitoringUpdate getProto();
     method public java.util.List<androidx.health.services.client.data.UserActivityInfo> getUserActivityInfoUpdates();
-    method public void putToIntent(android.content.Intent intent);
     property public final androidx.health.services.client.data.DataPointContainer dataPoints;
     property public final java.util.List<androidx.health.services.client.data.UserActivityInfo> userActivityInfoUpdates;
-    field public static final String ACTION_DATA = "hs.passivemonitoring.DATA";
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.PassiveMonitoringUpdate> CREATOR;
-    field public static final androidx.health.services.client.data.PassiveMonitoringUpdate.Companion Companion;
-  }
-
-  public static final class PassiveMonitoringUpdate.Companion {
-    method public androidx.health.services.client.data.PassiveMonitoringUpdate? fromIntent(android.content.Intent intent);
-  }
-
-  public abstract class ProtoParcelable<T extends com.google.protobuf.MessageLite> implements android.os.Parcelable {
-    ctor public ProtoParcelable();
-    method public int describeContents();
-    method protected final byte[] getBytes();
-    method public abstract T getProto();
-    method public void writeToParcel(android.os.Parcel dest, int flags);
-    property protected final byte[] bytes;
-    property public abstract T proto;
-    field public static final androidx.health.services.client.data.ProtoParcelable.Companion Companion;
-  }
-
-  public static final class ProtoParcelable.Companion {
   }
 
   public final class SampleDataPoint<T> extends androidx.health.services.client.data.DataPoint<T> {
@@ -856,20 +780,18 @@
   public static final class StatisticalDataPoint.Companion {
   }
 
-  public final class UserActivityInfo extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.UserActivityInfo> {
+  public final class UserActivityInfo {
     ctor public UserActivityInfo(androidx.health.services.client.data.UserActivityState userActivityState, androidx.health.services.client.data.ExerciseInfo? exerciseInfo, java.time.Instant stateChangeTime);
     method public static androidx.health.services.client.data.UserActivityInfo createActiveExerciseState(androidx.health.services.client.data.ExerciseInfo exerciseInfo, java.time.Instant stateChangeTime);
     method public static androidx.health.services.client.data.UserActivityInfo createAsleepState(java.time.Instant stateChangeTime);
     method public static androidx.health.services.client.data.UserActivityInfo createPassiveActivityState(java.time.Instant stateChangeTime);
     method public static androidx.health.services.client.data.UserActivityInfo createUnknownTypeState(java.time.Instant stateChangeTime);
     method public androidx.health.services.client.data.ExerciseInfo? getExerciseInfo();
-    method public androidx.health.services.client.proto.DataProto.UserActivityInfo getProto();
     method public java.time.Instant getStateChangeTime();
     method public androidx.health.services.client.data.UserActivityState getUserActivityState();
     property public final androidx.health.services.client.data.ExerciseInfo? exerciseInfo;
     property public final java.time.Instant stateChangeTime;
     property public final androidx.health.services.client.data.UserActivityState userActivityState;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.UserActivityInfo> CREATOR;
     field public static final androidx.health.services.client.data.UserActivityInfo.Companion Companion;
   }
 
@@ -896,18 +818,12 @@
   public static final class UserActivityState.Companion {
   }
 
-  public final class WarmUpConfig extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.WarmUpConfig> {
+  public final class WarmUpConfig {
     ctor public WarmUpConfig(androidx.health.services.client.data.ExerciseType exerciseType, java.util.Set<? extends androidx.health.services.client.data.DeltaDataType<?,?>> dataTypes);
     method public java.util.Set<androidx.health.services.client.data.DeltaDataType<?,?>> getDataTypes();
     method public androidx.health.services.client.data.ExerciseType getExerciseType();
-    method public androidx.health.services.client.proto.DataProto.WarmUpConfig getProto();
     property public final java.util.Set<androidx.health.services.client.data.DeltaDataType<?,?>> dataTypes;
     property public final androidx.health.services.client.data.ExerciseType exerciseType;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.WarmUpConfig> CREATOR;
-    field public static final androidx.health.services.client.data.WarmUpConfig.Companion Companion;
-  }
-
-  public static final class WarmUpConfig.Companion {
   }
 
 }
diff --git a/health/health-services-client/api/api_lint.ignore b/health/health-services-client/api/api_lint.ignore
index d79e80e..4b2826d 100644
--- a/health/health-services-client/api/api_lint.ignore
+++ b/health/health-services-client/api/api_lint.ignore
@@ -15,7 +15,3 @@
     Found registerMeasureCallback but not unregisterMeasureCallback in androidx.health.services.client.MeasureClient
 PairedRegistration: androidx.health.services.client.MeasureClient#registerMeasureCallback(androidx.health.services.client.data.DeltaDataType<?,?>, java.util.concurrent.Executor, androidx.health.services.client.MeasureCallback):
     Found registerMeasureCallback but not unregisterMeasureCallback in androidx.health.services.client.MeasureClient
-
-
-ParcelCreator: androidx.health.services.client.data.ExerciseGoal:
-    Parcelable requires `void writeToParcel(Parcel, int)`; missing in androidx.health.services.client.data.ExerciseGoal
diff --git a/health/health-services-client/api/current.txt b/health/health-services-client/api/current.txt
index 0eb1f5c..137fe7b 100644
--- a/health/health-services-client/api/current.txt
+++ b/health/health-services-client/api/current.txt
@@ -68,12 +68,11 @@
   public abstract class PassiveListenerService extends android.app.Service {
     ctor public PassiveListenerService();
     method public final android.os.IBinder? onBind(android.content.Intent intent);
-    method public final void onGoalCompleted(androidx.health.services.client.data.PassiveGoal goal);
-    method public final void onHealthEventReceived(androidx.health.services.client.data.HealthEvent event);
-    method public final void onNewDataPointsReceived(androidx.health.services.client.data.DataPointContainer dataPoints);
-    method public final void onPermissionLost();
-    method public final void onUserActivityInfoReceived(androidx.health.services.client.data.UserActivityInfo info);
-    field public static final String TAG = "PassiveListenerService";
+    method public void onGoalCompleted(androidx.health.services.client.data.PassiveGoal goal);
+    method public void onHealthEventReceived(androidx.health.services.client.data.HealthEvent event);
+    method public void onNewDataPointsReceived(androidx.health.services.client.data.DataPointContainer dataPoints);
+    method public void onPermissionLost();
+    method public void onUserActivityInfoReceived(androidx.health.services.client.data.UserActivityInfo info);
   }
 
   public interface PassiveMonitoringClient {
@@ -139,7 +138,7 @@
     property public androidx.health.services.client.data.DataType<T,? extends androidx.health.services.client.data.DataPoint<T>> dataType;
   }
 
-  public abstract class DataPointAccuracy extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.DataPointAccuracy> {
+  public abstract class DataPointAccuracy {
     ctor public DataPointAccuracy();
   }
 
@@ -273,21 +272,15 @@
     ctor public DeltaDataType(String name, androidx.health.services.client.data.DataType.TimeType timeType, Class<T> valueClass);
   }
 
-  public final class ExerciseCapabilities extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.ExerciseCapabilities> {
+  public final class ExerciseCapabilities {
     ctor public ExerciseCapabilities(java.util.Map<androidx.health.services.client.data.ExerciseType,androidx.health.services.client.data.ExerciseTypeCapabilities> typeToCapabilities);
     method public java.util.Set<androidx.health.services.client.data.ExerciseType> getAutoPauseAndResumeEnabledExercises();
     method public androidx.health.services.client.data.ExerciseTypeCapabilities getExerciseTypeCapabilities(androidx.health.services.client.data.ExerciseType exercise);
-    method public androidx.health.services.client.proto.DataProto.ExerciseCapabilities getProto();
     method public java.util.Set<androidx.health.services.client.data.ExerciseType> getSupportedExerciseTypes();
     method public java.util.Map<androidx.health.services.client.data.ExerciseType,androidx.health.services.client.data.ExerciseTypeCapabilities> getTypeToCapabilities();
     property public final java.util.Set<androidx.health.services.client.data.ExerciseType> autoPauseAndResumeEnabledExercises;
     property public final java.util.Set<androidx.health.services.client.data.ExerciseType> supportedExerciseTypes;
     property public final java.util.Map<androidx.health.services.client.data.ExerciseType,androidx.health.services.client.data.ExerciseTypeCapabilities> typeToCapabilities;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.ExerciseCapabilities> CREATOR;
-    field public static final androidx.health.services.client.data.ExerciseCapabilities.Companion Companion;
-  }
-
-  public static final class ExerciseCapabilities.Companion {
   }
 
   public final class ExerciseConfig {
@@ -326,14 +319,15 @@
     method public androidx.health.services.client.data.ExerciseConfig.Builder builder(androidx.health.services.client.data.ExerciseType exerciseType);
   }
 
-  public final class ExerciseGoal<T extends java.lang.Number> extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.ExerciseGoal> {
+  public final class ExerciseGoal<T extends java.lang.Number> implements android.os.Parcelable {
     method public static <T extends java.lang.Number> androidx.health.services.client.data.ExerciseGoal<T> createMilestone(androidx.health.services.client.data.DataTypeCondition<T,androidx.health.services.client.data.AggregateDataType<T,?>> condition, T period);
     method public static <T extends java.lang.Number> androidx.health.services.client.data.ExerciseGoal<T> createMilestoneGoalWithUpdatedThreshold(androidx.health.services.client.data.ExerciseGoal<T> goal, T newThreshold);
     method public static <T extends java.lang.Number> androidx.health.services.client.data.ExerciseGoal<T> createOneTimeGoal(androidx.health.services.client.data.DataTypeCondition<T,androidx.health.services.client.data.AggregateDataType<T,?>> condition);
+    method public int describeContents();
     method public androidx.health.services.client.data.DataTypeCondition<T,androidx.health.services.client.data.AggregateDataType<T,?>> getDataTypeCondition();
     method public androidx.health.services.client.data.ExerciseGoalType getExerciseGoalType();
     method public T? getPeriod();
-    method public androidx.health.services.client.proto.DataProto.ExerciseGoal getProto();
+    method public void writeToParcel(android.os.Parcel dest, int flags);
     property public final androidx.health.services.client.data.DataTypeCondition<T,androidx.health.services.client.data.AggregateDataType<T,?>> dataTypeCondition;
     property public final androidx.health.services.client.data.ExerciseGoalType exerciseGoalType;
     property public final T? period;
@@ -362,18 +356,12 @@
     method public androidx.health.services.client.data.ExerciseGoalType? fromId(int id);
   }
 
-  public final class ExerciseInfo extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.ExerciseInfo> {
+  public final class ExerciseInfo {
     ctor public ExerciseInfo(int exerciseTrackedStatus, androidx.health.services.client.data.ExerciseType exerciseType);
     method public int getExerciseTrackedStatus();
     method public androidx.health.services.client.data.ExerciseType getExerciseType();
-    method public androidx.health.services.client.proto.DataProto.ExerciseInfo getProto();
     property public final int exerciseTrackedStatus;
     property public final androidx.health.services.client.data.ExerciseType exerciseType;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.ExerciseInfo> CREATOR;
-    field public static final androidx.health.services.client.data.ExerciseInfo.Companion Companion;
-  }
-
-  public static final class ExerciseInfo.Companion {
   }
 
   public final class ExerciseLapSummary {
@@ -405,8 +393,6 @@
     property public final boolean isResuming;
     property public final String name;
     field public static final androidx.health.services.client.data.ExerciseState ACTIVE;
-    field public static final androidx.health.services.client.data.ExerciseState AUTO_ENDING;
-    field public static final androidx.health.services.client.data.ExerciseState AUTO_ENDING_PERMISSION_LOST;
     field public static final androidx.health.services.client.data.ExerciseState AUTO_PAUSED;
     field public static final androidx.health.services.client.data.ExerciseState AUTO_PAUSING;
     field public static final androidx.health.services.client.data.ExerciseState AUTO_RESUMING;
@@ -414,8 +400,6 @@
     field public static final androidx.health.services.client.data.ExerciseState ENDED;
     field public static final androidx.health.services.client.data.ExerciseState ENDING;
     field public static final androidx.health.services.client.data.ExerciseState PREPARING;
-    field public static final androidx.health.services.client.data.ExerciseState TERMINATING;
-    field public static final androidx.health.services.client.data.ExerciseState USER_ENDING;
     field public static final androidx.health.services.client.data.ExerciseState USER_PAUSED;
     field public static final androidx.health.services.client.data.ExerciseState USER_PAUSING;
     field public static final androidx.health.services.client.data.ExerciseState USER_RESUMING;
@@ -536,9 +520,8 @@
     method public androidx.health.services.client.data.ExerciseType fromId(int id);
   }
 
-  public final class ExerciseTypeCapabilities extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.ExerciseTypeCapabilities> {
+  public final class ExerciseTypeCapabilities {
     ctor public ExerciseTypeCapabilities(java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> supportedDataTypes, java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,? extends java.util.Set<androidx.health.services.client.data.ComparisonType>> supportedGoals, java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,? extends java.util.Set<androidx.health.services.client.data.ComparisonType>> supportedMilestones, boolean supportsAutoPauseAndResume);
-    method public androidx.health.services.client.proto.DataProto.ExerciseTypeCapabilities getProto();
     method public java.util.Set<androidx.health.services.client.data.DataType<?,?>> getSupportedDataTypes();
     method public java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,java.util.Set<androidx.health.services.client.data.ComparisonType>> getSupportedGoals();
     method public java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,java.util.Set<androidx.health.services.client.data.ComparisonType>> getSupportedMilestones();
@@ -547,15 +530,10 @@
     property public final java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,java.util.Set<androidx.health.services.client.data.ComparisonType>> supportedGoals;
     property public final java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,java.util.Set<androidx.health.services.client.data.ComparisonType>> supportedMilestones;
     property public final boolean supportsAutoPauseAndResume;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.ExerciseTypeCapabilities> CREATOR;
-    field public static final androidx.health.services.client.data.ExerciseTypeCapabilities.Companion Companion;
   }
 
-  public static final class ExerciseTypeCapabilities.Companion {
-  }
-
-  public final class ExerciseUpdate extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.ExerciseUpdate> {
-    ctor public ExerciseUpdate(java.time.Instant? startTime, java.time.Duration? updateDurationFromBoot, androidx.health.services.client.data.DataPointContainer latestMetrics, java.util.Set<? extends androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number>> latestAchievedGoals, java.util.Set<androidx.health.services.client.data.MilestoneMarkerSummary> latestMilestoneMarkerSummaries, androidx.health.services.client.data.ExerciseConfig? exerciseConfig, androidx.health.services.client.data.ExerciseUpdate.ActiveDurationCheckpoint? activeDurationCheckpoint, androidx.health.services.client.data.ExerciseStateInfo exerciseStateInfo);
+  public final class ExerciseUpdate {
+    ctor public ExerciseUpdate(androidx.health.services.client.data.DataPointContainer latestMetrics, java.util.Set<? extends androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number>> latestAchievedGoals, java.util.Set<androidx.health.services.client.data.MilestoneMarkerSummary> latestMilestoneMarkerSummaries, androidx.health.services.client.data.ExerciseStateInfo exerciseStateInfo, optional androidx.health.services.client.data.ExerciseConfig? exerciseConfig, optional androidx.health.services.client.data.ExerciseUpdate.ActiveDurationCheckpoint? activeDurationCheckpoint, optional java.time.Duration? updateDurationFromBoot, optional java.time.Instant? startTime);
     method public java.time.Duration getActiveDurationAtDataPoint(androidx.health.services.client.data.IntervalDataPoint<?> dataPoint);
     method public java.time.Duration getActiveDurationAtDataPoint(androidx.health.services.client.data.SampleDataPoint<?> dataPoint);
     method public androidx.health.services.client.data.ExerciseUpdate.ActiveDurationCheckpoint? getActiveDurationCheckpoint();
@@ -564,7 +542,6 @@
     method public java.util.Set<androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number>> getLatestAchievedGoals();
     method public androidx.health.services.client.data.DataPointContainer getLatestMetrics();
     method public java.util.Set<androidx.health.services.client.data.MilestoneMarkerSummary> getLatestMilestoneMarkerSummaries();
-    method public androidx.health.services.client.proto.DataProto.ExerciseUpdate getProto();
     method public java.time.Instant? getStartTime();
     method public java.time.Duration getUpdateDurationFromBoot();
     property public final androidx.health.services.client.data.ExerciseUpdate.ActiveDurationCheckpoint? activeDurationCheckpoint;
@@ -574,7 +551,6 @@
     property public final androidx.health.services.client.data.DataPointContainer latestMetrics;
     property public final java.util.Set<androidx.health.services.client.data.MilestoneMarkerSummary> latestMilestoneMarkerSummaries;
     property public final java.time.Instant? startTime;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.ExerciseUpdate> CREATOR;
     field public static final androidx.health.services.client.data.ExerciseUpdate.Companion Companion;
   }
 
@@ -614,14 +590,8 @@
 
   public final class HeartRateAccuracy extends androidx.health.services.client.data.DataPointAccuracy {
     ctor public HeartRateAccuracy(androidx.health.services.client.data.HeartRateAccuracy.SensorStatus sensorStatus);
-    method public androidx.health.services.client.proto.DataProto.DataPointAccuracy getProto();
     method public androidx.health.services.client.data.HeartRateAccuracy.SensorStatus getSensorStatus();
     property public final androidx.health.services.client.data.HeartRateAccuracy.SensorStatus sensorStatus;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.HeartRateAccuracy> CREATOR;
-    field public static final androidx.health.services.client.data.HeartRateAccuracy.Companion Companion;
-  }
-
-  public static final class HeartRateAccuracy.Companion {
   }
 
   public static final class HeartRateAccuracy.SensorStatus {
@@ -662,11 +632,9 @@
   public final class LocationAccuracy extends androidx.health.services.client.data.DataPointAccuracy {
     ctor public LocationAccuracy(@FloatRange(from=0.0) double horizontalPositionErrorMeters, optional @FloatRange(from=0.0) double verticalPositionErrorMeters);
     method public double getHorizontalPositionErrorMeters();
-    method public androidx.health.services.client.proto.DataProto.DataPointAccuracy getProto();
     method public double getVerticalPositionErrorMeters();
     property public final double horizontalPositionErrorMeters;
     property public final double verticalPositionErrorMeters;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.LocationAccuracy> CREATOR;
     field public static final androidx.health.services.client.data.LocationAccuracy.Companion Companion;
   }
 
@@ -706,24 +674,17 @@
     field public static final double BEARING_UNAVAILABLE = -1.0;
   }
 
-  public final class MeasureCapabilities extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.MeasureCapabilities> {
+  public final class MeasureCapabilities {
     ctor public MeasureCapabilities(java.util.Set<? extends androidx.health.services.client.data.DeltaDataType<?,?>> supportedDataTypesMeasure);
-    method public androidx.health.services.client.proto.DataProto.MeasureCapabilities getProto();
     method public java.util.Set<androidx.health.services.client.data.DeltaDataType<?,?>> getSupportedDataTypesMeasure();
     property public final java.util.Set<androidx.health.services.client.data.DeltaDataType<?,?>> supportedDataTypesMeasure;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.MeasureCapabilities> CREATOR;
-    field public static final androidx.health.services.client.data.MeasureCapabilities.Companion Companion;
   }
 
-  public static final class MeasureCapabilities.Companion {
-  }
-
-  public final class MilestoneMarkerSummary extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.MilestoneMarkerSummary> {
+  public final class MilestoneMarkerSummary {
     ctor public MilestoneMarkerSummary(java.time.Instant startTime, java.time.Instant endTime, java.time.Duration activeDuration, androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number> achievedGoal, androidx.health.services.client.data.DataPointContainer summaryMetrics);
     method public androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number> getAchievedGoal();
     method public java.time.Duration getActiveDuration();
     method public java.time.Instant getEndTime();
-    method public androidx.health.services.client.proto.DataProto.MilestoneMarkerSummary getProto();
     method public java.time.Instant getStartTime();
     method public androidx.health.services.client.data.DataPointContainer getSummaryMetrics();
     property public final androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number> achievedGoal;
@@ -731,11 +692,6 @@
     property public final java.time.Instant endTime;
     property public final java.time.Instant startTime;
     property public final androidx.health.services.client.data.DataPointContainer summaryMetrics;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.MilestoneMarkerSummary> CREATOR;
-    field public static final androidx.health.services.client.data.MilestoneMarkerSummary.Companion Companion;
-  }
-
-  public static final class MilestoneMarkerSummary.Companion {
   }
 
   public final class PassiveGoal {
@@ -744,19 +700,17 @@
     property public final androidx.health.services.client.data.DataTypeCondition<? extends java.lang.Number,? extends androidx.health.services.client.data.DeltaDataType<? extends java.lang.Number,?>> dataTypeCondition;
   }
 
-  public final class PassiveListenerConfig extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.PassiveListenerConfig> {
-    ctor public PassiveListenerConfig(java.util.Set<? extends androidx.health.services.client.data.DataType<? extends java.lang.Object,? extends androidx.health.services.client.data.DataPoint<?>>> dataTypes, boolean shouldRequestUserActivityState, java.util.Set<androidx.health.services.client.data.PassiveGoal> dailyGoals, java.util.Set<androidx.health.services.client.data.HealthEvent.Type> healthEventTypes);
+  public final class PassiveListenerConfig {
+    ctor public PassiveListenerConfig(java.util.Set<? extends androidx.health.services.client.data.DataType<? extends java.lang.Object,? extends androidx.health.services.client.data.DataPoint<?>>> dataTypes, boolean shouldUserActivityInfoBeRequested, java.util.Set<androidx.health.services.client.data.PassiveGoal> dailyGoals, java.util.Set<androidx.health.services.client.data.HealthEvent.Type> healthEventTypes);
     method public static androidx.health.services.client.data.PassiveListenerConfig.Builder builder();
     method public java.util.Set<androidx.health.services.client.data.PassiveGoal> getDailyGoals();
     method public java.util.Set<androidx.health.services.client.data.DataType<? extends java.lang.Object,? extends androidx.health.services.client.data.DataPoint<?>>> getDataTypes();
     method public java.util.Set<androidx.health.services.client.data.HealthEvent.Type> getHealthEventTypes();
-    method public androidx.health.services.client.proto.DataProto.PassiveListenerConfig getProto();
-    method public boolean getShouldRequestUserActivityState();
+    method public boolean getShouldUserActivityInfoBeRequested();
     property public final java.util.Set<androidx.health.services.client.data.PassiveGoal> dailyGoals;
     property public final java.util.Set<androidx.health.services.client.data.DataType<? extends java.lang.Object,? extends androidx.health.services.client.data.DataPoint<?>>> dataTypes;
     property public final java.util.Set<androidx.health.services.client.data.HealthEvent.Type> healthEventTypes;
-    property public final boolean shouldRequestUserActivityState;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.PassiveListenerConfig> CREATOR;
+    property public final boolean shouldUserActivityInfoBeRequested;
     field public static final androidx.health.services.client.data.PassiveListenerConfig.Companion Companion;
   }
 
@@ -766,16 +720,15 @@
     method public androidx.health.services.client.data.PassiveListenerConfig.Builder setDailyGoals(java.util.Set<androidx.health.services.client.data.PassiveGoal> dailyGoals);
     method public androidx.health.services.client.data.PassiveListenerConfig.Builder setDataTypes(java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> dataTypes);
     method public androidx.health.services.client.data.PassiveListenerConfig.Builder setHealthEventTypes(java.util.Set<androidx.health.services.client.data.HealthEvent.Type> healthEventTypes);
-    method public androidx.health.services.client.data.PassiveListenerConfig.Builder setShouldRequestUserActivityState(boolean requestUserActivityState);
+    method public androidx.health.services.client.data.PassiveListenerConfig.Builder setShouldUserActivityInfoBeRequested(boolean shouldUserActivityInfoBeRequested);
   }
 
   public static final class PassiveListenerConfig.Companion {
     method public androidx.health.services.client.data.PassiveListenerConfig.Builder builder();
   }
 
-  public final class PassiveMonitoringCapabilities extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.PassiveMonitoringCapabilities> {
+  public final class PassiveMonitoringCapabilities {
     ctor public PassiveMonitoringCapabilities(java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> supportedDataTypesPassiveMonitoring, java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> supportedDataTypesPassiveGoals, java.util.Set<androidx.health.services.client.data.HealthEvent.Type> supportedHealthEventTypes, java.util.Set<androidx.health.services.client.data.UserActivityState> supportedUserActivityStates);
-    method public androidx.health.services.client.proto.DataProto.PassiveMonitoringCapabilities getProto();
     method public java.util.Set<androidx.health.services.client.data.DataType<?,?>> getSupportedDataTypesPassiveGoals();
     method public java.util.Set<androidx.health.services.client.data.DataType<?,?>> getSupportedDataTypesPassiveMonitoring();
     method public java.util.Set<androidx.health.services.client.data.HealthEvent.Type> getSupportedHealthEventTypes();
@@ -784,43 +737,14 @@
     property public final java.util.Set<androidx.health.services.client.data.DataType<?,?>> supportedDataTypesPassiveMonitoring;
     property public final java.util.Set<androidx.health.services.client.data.HealthEvent.Type> supportedHealthEventTypes;
     property public final java.util.Set<androidx.health.services.client.data.UserActivityState> supportedUserActivityStates;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.PassiveMonitoringCapabilities> CREATOR;
-    field public static final androidx.health.services.client.data.PassiveMonitoringCapabilities.Companion Companion;
   }
 
-  public static final class PassiveMonitoringCapabilities.Companion {
-  }
-
-  public final class PassiveMonitoringUpdate extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.PassiveMonitoringUpdate> {
+  public final class PassiveMonitoringUpdate {
     ctor public PassiveMonitoringUpdate(androidx.health.services.client.data.DataPointContainer dataPoints, java.util.List<androidx.health.services.client.data.UserActivityInfo> userActivityInfoUpdates);
-    method public static androidx.health.services.client.data.PassiveMonitoringUpdate? fromIntent(android.content.Intent intent);
     method public androidx.health.services.client.data.DataPointContainer getDataPoints();
-    method public androidx.health.services.client.proto.DataProto.PassiveMonitoringUpdate getProto();
     method public java.util.List<androidx.health.services.client.data.UserActivityInfo> getUserActivityInfoUpdates();
-    method public void putToIntent(android.content.Intent intent);
     property public final androidx.health.services.client.data.DataPointContainer dataPoints;
     property public final java.util.List<androidx.health.services.client.data.UserActivityInfo> userActivityInfoUpdates;
-    field public static final String ACTION_DATA = "hs.passivemonitoring.DATA";
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.PassiveMonitoringUpdate> CREATOR;
-    field public static final androidx.health.services.client.data.PassiveMonitoringUpdate.Companion Companion;
-  }
-
-  public static final class PassiveMonitoringUpdate.Companion {
-    method public androidx.health.services.client.data.PassiveMonitoringUpdate? fromIntent(android.content.Intent intent);
-  }
-
-  public abstract class ProtoParcelable<T extends com.google.protobuf.MessageLite> implements android.os.Parcelable {
-    ctor public ProtoParcelable();
-    method public int describeContents();
-    method protected final byte[] getBytes();
-    method public abstract T getProto();
-    method public void writeToParcel(android.os.Parcel dest, int flags);
-    property protected final byte[] bytes;
-    property public abstract T proto;
-    field public static final androidx.health.services.client.data.ProtoParcelable.Companion Companion;
-  }
-
-  public static final class ProtoParcelable.Companion {
   }
 
   public final class SampleDataPoint<T> extends androidx.health.services.client.data.DataPoint<T> {
@@ -856,20 +780,18 @@
   public static final class StatisticalDataPoint.Companion {
   }
 
-  public final class UserActivityInfo extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.UserActivityInfo> {
+  public final class UserActivityInfo {
     ctor public UserActivityInfo(androidx.health.services.client.data.UserActivityState userActivityState, androidx.health.services.client.data.ExerciseInfo? exerciseInfo, java.time.Instant stateChangeTime);
     method public static androidx.health.services.client.data.UserActivityInfo createActiveExerciseState(androidx.health.services.client.data.ExerciseInfo exerciseInfo, java.time.Instant stateChangeTime);
     method public static androidx.health.services.client.data.UserActivityInfo createAsleepState(java.time.Instant stateChangeTime);
     method public static androidx.health.services.client.data.UserActivityInfo createPassiveActivityState(java.time.Instant stateChangeTime);
     method public static androidx.health.services.client.data.UserActivityInfo createUnknownTypeState(java.time.Instant stateChangeTime);
     method public androidx.health.services.client.data.ExerciseInfo? getExerciseInfo();
-    method public androidx.health.services.client.proto.DataProto.UserActivityInfo getProto();
     method public java.time.Instant getStateChangeTime();
     method public androidx.health.services.client.data.UserActivityState getUserActivityState();
     property public final androidx.health.services.client.data.ExerciseInfo? exerciseInfo;
     property public final java.time.Instant stateChangeTime;
     property public final androidx.health.services.client.data.UserActivityState userActivityState;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.UserActivityInfo> CREATOR;
     field public static final androidx.health.services.client.data.UserActivityInfo.Companion Companion;
   }
 
@@ -896,18 +818,12 @@
   public static final class UserActivityState.Companion {
   }
 
-  public final class WarmUpConfig extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.WarmUpConfig> {
+  public final class WarmUpConfig {
     ctor public WarmUpConfig(androidx.health.services.client.data.ExerciseType exerciseType, java.util.Set<? extends androidx.health.services.client.data.DeltaDataType<?,?>> dataTypes);
     method public java.util.Set<androidx.health.services.client.data.DeltaDataType<?,?>> getDataTypes();
     method public androidx.health.services.client.data.ExerciseType getExerciseType();
-    method public androidx.health.services.client.proto.DataProto.WarmUpConfig getProto();
     property public final java.util.Set<androidx.health.services.client.data.DeltaDataType<?,?>> dataTypes;
     property public final androidx.health.services.client.data.ExerciseType exerciseType;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.WarmUpConfig> CREATOR;
-    field public static final androidx.health.services.client.data.WarmUpConfig.Companion Companion;
-  }
-
-  public static final class WarmUpConfig.Companion {
   }
 
 }
diff --git a/health/health-services-client/api/public_plus_experimental_1.0.0-beta01.txt b/health/health-services-client/api/public_plus_experimental_1.0.0-beta01.txt
index 0eb1f5c..137fe7b 100644
--- a/health/health-services-client/api/public_plus_experimental_1.0.0-beta01.txt
+++ b/health/health-services-client/api/public_plus_experimental_1.0.0-beta01.txt
@@ -68,12 +68,11 @@
   public abstract class PassiveListenerService extends android.app.Service {
     ctor public PassiveListenerService();
     method public final android.os.IBinder? onBind(android.content.Intent intent);
-    method public final void onGoalCompleted(androidx.health.services.client.data.PassiveGoal goal);
-    method public final void onHealthEventReceived(androidx.health.services.client.data.HealthEvent event);
-    method public final void onNewDataPointsReceived(androidx.health.services.client.data.DataPointContainer dataPoints);
-    method public final void onPermissionLost();
-    method public final void onUserActivityInfoReceived(androidx.health.services.client.data.UserActivityInfo info);
-    field public static final String TAG = "PassiveListenerService";
+    method public void onGoalCompleted(androidx.health.services.client.data.PassiveGoal goal);
+    method public void onHealthEventReceived(androidx.health.services.client.data.HealthEvent event);
+    method public void onNewDataPointsReceived(androidx.health.services.client.data.DataPointContainer dataPoints);
+    method public void onPermissionLost();
+    method public void onUserActivityInfoReceived(androidx.health.services.client.data.UserActivityInfo info);
   }
 
   public interface PassiveMonitoringClient {
@@ -139,7 +138,7 @@
     property public androidx.health.services.client.data.DataType<T,? extends androidx.health.services.client.data.DataPoint<T>> dataType;
   }
 
-  public abstract class DataPointAccuracy extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.DataPointAccuracy> {
+  public abstract class DataPointAccuracy {
     ctor public DataPointAccuracy();
   }
 
@@ -273,21 +272,15 @@
     ctor public DeltaDataType(String name, androidx.health.services.client.data.DataType.TimeType timeType, Class<T> valueClass);
   }
 
-  public final class ExerciseCapabilities extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.ExerciseCapabilities> {
+  public final class ExerciseCapabilities {
     ctor public ExerciseCapabilities(java.util.Map<androidx.health.services.client.data.ExerciseType,androidx.health.services.client.data.ExerciseTypeCapabilities> typeToCapabilities);
     method public java.util.Set<androidx.health.services.client.data.ExerciseType> getAutoPauseAndResumeEnabledExercises();
     method public androidx.health.services.client.data.ExerciseTypeCapabilities getExerciseTypeCapabilities(androidx.health.services.client.data.ExerciseType exercise);
-    method public androidx.health.services.client.proto.DataProto.ExerciseCapabilities getProto();
     method public java.util.Set<androidx.health.services.client.data.ExerciseType> getSupportedExerciseTypes();
     method public java.util.Map<androidx.health.services.client.data.ExerciseType,androidx.health.services.client.data.ExerciseTypeCapabilities> getTypeToCapabilities();
     property public final java.util.Set<androidx.health.services.client.data.ExerciseType> autoPauseAndResumeEnabledExercises;
     property public final java.util.Set<androidx.health.services.client.data.ExerciseType> supportedExerciseTypes;
     property public final java.util.Map<androidx.health.services.client.data.ExerciseType,androidx.health.services.client.data.ExerciseTypeCapabilities> typeToCapabilities;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.ExerciseCapabilities> CREATOR;
-    field public static final androidx.health.services.client.data.ExerciseCapabilities.Companion Companion;
-  }
-
-  public static final class ExerciseCapabilities.Companion {
   }
 
   public final class ExerciseConfig {
@@ -326,14 +319,15 @@
     method public androidx.health.services.client.data.ExerciseConfig.Builder builder(androidx.health.services.client.data.ExerciseType exerciseType);
   }
 
-  public final class ExerciseGoal<T extends java.lang.Number> extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.ExerciseGoal> {
+  public final class ExerciseGoal<T extends java.lang.Number> implements android.os.Parcelable {
     method public static <T extends java.lang.Number> androidx.health.services.client.data.ExerciseGoal<T> createMilestone(androidx.health.services.client.data.DataTypeCondition<T,androidx.health.services.client.data.AggregateDataType<T,?>> condition, T period);
     method public static <T extends java.lang.Number> androidx.health.services.client.data.ExerciseGoal<T> createMilestoneGoalWithUpdatedThreshold(androidx.health.services.client.data.ExerciseGoal<T> goal, T newThreshold);
     method public static <T extends java.lang.Number> androidx.health.services.client.data.ExerciseGoal<T> createOneTimeGoal(androidx.health.services.client.data.DataTypeCondition<T,androidx.health.services.client.data.AggregateDataType<T,?>> condition);
+    method public int describeContents();
     method public androidx.health.services.client.data.DataTypeCondition<T,androidx.health.services.client.data.AggregateDataType<T,?>> getDataTypeCondition();
     method public androidx.health.services.client.data.ExerciseGoalType getExerciseGoalType();
     method public T? getPeriod();
-    method public androidx.health.services.client.proto.DataProto.ExerciseGoal getProto();
+    method public void writeToParcel(android.os.Parcel dest, int flags);
     property public final androidx.health.services.client.data.DataTypeCondition<T,androidx.health.services.client.data.AggregateDataType<T,?>> dataTypeCondition;
     property public final androidx.health.services.client.data.ExerciseGoalType exerciseGoalType;
     property public final T? period;
@@ -362,18 +356,12 @@
     method public androidx.health.services.client.data.ExerciseGoalType? fromId(int id);
   }
 
-  public final class ExerciseInfo extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.ExerciseInfo> {
+  public final class ExerciseInfo {
     ctor public ExerciseInfo(int exerciseTrackedStatus, androidx.health.services.client.data.ExerciseType exerciseType);
     method public int getExerciseTrackedStatus();
     method public androidx.health.services.client.data.ExerciseType getExerciseType();
-    method public androidx.health.services.client.proto.DataProto.ExerciseInfo getProto();
     property public final int exerciseTrackedStatus;
     property public final androidx.health.services.client.data.ExerciseType exerciseType;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.ExerciseInfo> CREATOR;
-    field public static final androidx.health.services.client.data.ExerciseInfo.Companion Companion;
-  }
-
-  public static final class ExerciseInfo.Companion {
   }
 
   public final class ExerciseLapSummary {
@@ -405,8 +393,6 @@
     property public final boolean isResuming;
     property public final String name;
     field public static final androidx.health.services.client.data.ExerciseState ACTIVE;
-    field public static final androidx.health.services.client.data.ExerciseState AUTO_ENDING;
-    field public static final androidx.health.services.client.data.ExerciseState AUTO_ENDING_PERMISSION_LOST;
     field public static final androidx.health.services.client.data.ExerciseState AUTO_PAUSED;
     field public static final androidx.health.services.client.data.ExerciseState AUTO_PAUSING;
     field public static final androidx.health.services.client.data.ExerciseState AUTO_RESUMING;
@@ -414,8 +400,6 @@
     field public static final androidx.health.services.client.data.ExerciseState ENDED;
     field public static final androidx.health.services.client.data.ExerciseState ENDING;
     field public static final androidx.health.services.client.data.ExerciseState PREPARING;
-    field public static final androidx.health.services.client.data.ExerciseState TERMINATING;
-    field public static final androidx.health.services.client.data.ExerciseState USER_ENDING;
     field public static final androidx.health.services.client.data.ExerciseState USER_PAUSED;
     field public static final androidx.health.services.client.data.ExerciseState USER_PAUSING;
     field public static final androidx.health.services.client.data.ExerciseState USER_RESUMING;
@@ -536,9 +520,8 @@
     method public androidx.health.services.client.data.ExerciseType fromId(int id);
   }
 
-  public final class ExerciseTypeCapabilities extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.ExerciseTypeCapabilities> {
+  public final class ExerciseTypeCapabilities {
     ctor public ExerciseTypeCapabilities(java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> supportedDataTypes, java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,? extends java.util.Set<androidx.health.services.client.data.ComparisonType>> supportedGoals, java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,? extends java.util.Set<androidx.health.services.client.data.ComparisonType>> supportedMilestones, boolean supportsAutoPauseAndResume);
-    method public androidx.health.services.client.proto.DataProto.ExerciseTypeCapabilities getProto();
     method public java.util.Set<androidx.health.services.client.data.DataType<?,?>> getSupportedDataTypes();
     method public java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,java.util.Set<androidx.health.services.client.data.ComparisonType>> getSupportedGoals();
     method public java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,java.util.Set<androidx.health.services.client.data.ComparisonType>> getSupportedMilestones();
@@ -547,15 +530,10 @@
     property public final java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,java.util.Set<androidx.health.services.client.data.ComparisonType>> supportedGoals;
     property public final java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,java.util.Set<androidx.health.services.client.data.ComparisonType>> supportedMilestones;
     property public final boolean supportsAutoPauseAndResume;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.ExerciseTypeCapabilities> CREATOR;
-    field public static final androidx.health.services.client.data.ExerciseTypeCapabilities.Companion Companion;
   }
 
-  public static final class ExerciseTypeCapabilities.Companion {
-  }
-
-  public final class ExerciseUpdate extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.ExerciseUpdate> {
-    ctor public ExerciseUpdate(java.time.Instant? startTime, java.time.Duration? updateDurationFromBoot, androidx.health.services.client.data.DataPointContainer latestMetrics, java.util.Set<? extends androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number>> latestAchievedGoals, java.util.Set<androidx.health.services.client.data.MilestoneMarkerSummary> latestMilestoneMarkerSummaries, androidx.health.services.client.data.ExerciseConfig? exerciseConfig, androidx.health.services.client.data.ExerciseUpdate.ActiveDurationCheckpoint? activeDurationCheckpoint, androidx.health.services.client.data.ExerciseStateInfo exerciseStateInfo);
+  public final class ExerciseUpdate {
+    ctor public ExerciseUpdate(androidx.health.services.client.data.DataPointContainer latestMetrics, java.util.Set<? extends androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number>> latestAchievedGoals, java.util.Set<androidx.health.services.client.data.MilestoneMarkerSummary> latestMilestoneMarkerSummaries, androidx.health.services.client.data.ExerciseStateInfo exerciseStateInfo, optional androidx.health.services.client.data.ExerciseConfig? exerciseConfig, optional androidx.health.services.client.data.ExerciseUpdate.ActiveDurationCheckpoint? activeDurationCheckpoint, optional java.time.Duration? updateDurationFromBoot, optional java.time.Instant? startTime);
     method public java.time.Duration getActiveDurationAtDataPoint(androidx.health.services.client.data.IntervalDataPoint<?> dataPoint);
     method public java.time.Duration getActiveDurationAtDataPoint(androidx.health.services.client.data.SampleDataPoint<?> dataPoint);
     method public androidx.health.services.client.data.ExerciseUpdate.ActiveDurationCheckpoint? getActiveDurationCheckpoint();
@@ -564,7 +542,6 @@
     method public java.util.Set<androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number>> getLatestAchievedGoals();
     method public androidx.health.services.client.data.DataPointContainer getLatestMetrics();
     method public java.util.Set<androidx.health.services.client.data.MilestoneMarkerSummary> getLatestMilestoneMarkerSummaries();
-    method public androidx.health.services.client.proto.DataProto.ExerciseUpdate getProto();
     method public java.time.Instant? getStartTime();
     method public java.time.Duration getUpdateDurationFromBoot();
     property public final androidx.health.services.client.data.ExerciseUpdate.ActiveDurationCheckpoint? activeDurationCheckpoint;
@@ -574,7 +551,6 @@
     property public final androidx.health.services.client.data.DataPointContainer latestMetrics;
     property public final java.util.Set<androidx.health.services.client.data.MilestoneMarkerSummary> latestMilestoneMarkerSummaries;
     property public final java.time.Instant? startTime;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.ExerciseUpdate> CREATOR;
     field public static final androidx.health.services.client.data.ExerciseUpdate.Companion Companion;
   }
 
@@ -614,14 +590,8 @@
 
   public final class HeartRateAccuracy extends androidx.health.services.client.data.DataPointAccuracy {
     ctor public HeartRateAccuracy(androidx.health.services.client.data.HeartRateAccuracy.SensorStatus sensorStatus);
-    method public androidx.health.services.client.proto.DataProto.DataPointAccuracy getProto();
     method public androidx.health.services.client.data.HeartRateAccuracy.SensorStatus getSensorStatus();
     property public final androidx.health.services.client.data.HeartRateAccuracy.SensorStatus sensorStatus;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.HeartRateAccuracy> CREATOR;
-    field public static final androidx.health.services.client.data.HeartRateAccuracy.Companion Companion;
-  }
-
-  public static final class HeartRateAccuracy.Companion {
   }
 
   public static final class HeartRateAccuracy.SensorStatus {
@@ -662,11 +632,9 @@
   public final class LocationAccuracy extends androidx.health.services.client.data.DataPointAccuracy {
     ctor public LocationAccuracy(@FloatRange(from=0.0) double horizontalPositionErrorMeters, optional @FloatRange(from=0.0) double verticalPositionErrorMeters);
     method public double getHorizontalPositionErrorMeters();
-    method public androidx.health.services.client.proto.DataProto.DataPointAccuracy getProto();
     method public double getVerticalPositionErrorMeters();
     property public final double horizontalPositionErrorMeters;
     property public final double verticalPositionErrorMeters;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.LocationAccuracy> CREATOR;
     field public static final androidx.health.services.client.data.LocationAccuracy.Companion Companion;
   }
 
@@ -706,24 +674,17 @@
     field public static final double BEARING_UNAVAILABLE = -1.0;
   }
 
-  public final class MeasureCapabilities extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.MeasureCapabilities> {
+  public final class MeasureCapabilities {
     ctor public MeasureCapabilities(java.util.Set<? extends androidx.health.services.client.data.DeltaDataType<?,?>> supportedDataTypesMeasure);
-    method public androidx.health.services.client.proto.DataProto.MeasureCapabilities getProto();
     method public java.util.Set<androidx.health.services.client.data.DeltaDataType<?,?>> getSupportedDataTypesMeasure();
     property public final java.util.Set<androidx.health.services.client.data.DeltaDataType<?,?>> supportedDataTypesMeasure;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.MeasureCapabilities> CREATOR;
-    field public static final androidx.health.services.client.data.MeasureCapabilities.Companion Companion;
   }
 
-  public static final class MeasureCapabilities.Companion {
-  }
-
-  public final class MilestoneMarkerSummary extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.MilestoneMarkerSummary> {
+  public final class MilestoneMarkerSummary {
     ctor public MilestoneMarkerSummary(java.time.Instant startTime, java.time.Instant endTime, java.time.Duration activeDuration, androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number> achievedGoal, androidx.health.services.client.data.DataPointContainer summaryMetrics);
     method public androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number> getAchievedGoal();
     method public java.time.Duration getActiveDuration();
     method public java.time.Instant getEndTime();
-    method public androidx.health.services.client.proto.DataProto.MilestoneMarkerSummary getProto();
     method public java.time.Instant getStartTime();
     method public androidx.health.services.client.data.DataPointContainer getSummaryMetrics();
     property public final androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number> achievedGoal;
@@ -731,11 +692,6 @@
     property public final java.time.Instant endTime;
     property public final java.time.Instant startTime;
     property public final androidx.health.services.client.data.DataPointContainer summaryMetrics;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.MilestoneMarkerSummary> CREATOR;
-    field public static final androidx.health.services.client.data.MilestoneMarkerSummary.Companion Companion;
-  }
-
-  public static final class MilestoneMarkerSummary.Companion {
   }
 
   public final class PassiveGoal {
@@ -744,19 +700,17 @@
     property public final androidx.health.services.client.data.DataTypeCondition<? extends java.lang.Number,? extends androidx.health.services.client.data.DeltaDataType<? extends java.lang.Number,?>> dataTypeCondition;
   }
 
-  public final class PassiveListenerConfig extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.PassiveListenerConfig> {
-    ctor public PassiveListenerConfig(java.util.Set<? extends androidx.health.services.client.data.DataType<? extends java.lang.Object,? extends androidx.health.services.client.data.DataPoint<?>>> dataTypes, boolean shouldRequestUserActivityState, java.util.Set<androidx.health.services.client.data.PassiveGoal> dailyGoals, java.util.Set<androidx.health.services.client.data.HealthEvent.Type> healthEventTypes);
+  public final class PassiveListenerConfig {
+    ctor public PassiveListenerConfig(java.util.Set<? extends androidx.health.services.client.data.DataType<? extends java.lang.Object,? extends androidx.health.services.client.data.DataPoint<?>>> dataTypes, boolean shouldUserActivityInfoBeRequested, java.util.Set<androidx.health.services.client.data.PassiveGoal> dailyGoals, java.util.Set<androidx.health.services.client.data.HealthEvent.Type> healthEventTypes);
     method public static androidx.health.services.client.data.PassiveListenerConfig.Builder builder();
     method public java.util.Set<androidx.health.services.client.data.PassiveGoal> getDailyGoals();
     method public java.util.Set<androidx.health.services.client.data.DataType<? extends java.lang.Object,? extends androidx.health.services.client.data.DataPoint<?>>> getDataTypes();
     method public java.util.Set<androidx.health.services.client.data.HealthEvent.Type> getHealthEventTypes();
-    method public androidx.health.services.client.proto.DataProto.PassiveListenerConfig getProto();
-    method public boolean getShouldRequestUserActivityState();
+    method public boolean getShouldUserActivityInfoBeRequested();
     property public final java.util.Set<androidx.health.services.client.data.PassiveGoal> dailyGoals;
     property public final java.util.Set<androidx.health.services.client.data.DataType<? extends java.lang.Object,? extends androidx.health.services.client.data.DataPoint<?>>> dataTypes;
     property public final java.util.Set<androidx.health.services.client.data.HealthEvent.Type> healthEventTypes;
-    property public final boolean shouldRequestUserActivityState;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.PassiveListenerConfig> CREATOR;
+    property public final boolean shouldUserActivityInfoBeRequested;
     field public static final androidx.health.services.client.data.PassiveListenerConfig.Companion Companion;
   }
 
@@ -766,16 +720,15 @@
     method public androidx.health.services.client.data.PassiveListenerConfig.Builder setDailyGoals(java.util.Set<androidx.health.services.client.data.PassiveGoal> dailyGoals);
     method public androidx.health.services.client.data.PassiveListenerConfig.Builder setDataTypes(java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> dataTypes);
     method public androidx.health.services.client.data.PassiveListenerConfig.Builder setHealthEventTypes(java.util.Set<androidx.health.services.client.data.HealthEvent.Type> healthEventTypes);
-    method public androidx.health.services.client.data.PassiveListenerConfig.Builder setShouldRequestUserActivityState(boolean requestUserActivityState);
+    method public androidx.health.services.client.data.PassiveListenerConfig.Builder setShouldUserActivityInfoBeRequested(boolean shouldUserActivityInfoBeRequested);
   }
 
   public static final class PassiveListenerConfig.Companion {
     method public androidx.health.services.client.data.PassiveListenerConfig.Builder builder();
   }
 
-  public final class PassiveMonitoringCapabilities extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.PassiveMonitoringCapabilities> {
+  public final class PassiveMonitoringCapabilities {
     ctor public PassiveMonitoringCapabilities(java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> supportedDataTypesPassiveMonitoring, java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> supportedDataTypesPassiveGoals, java.util.Set<androidx.health.services.client.data.HealthEvent.Type> supportedHealthEventTypes, java.util.Set<androidx.health.services.client.data.UserActivityState> supportedUserActivityStates);
-    method public androidx.health.services.client.proto.DataProto.PassiveMonitoringCapabilities getProto();
     method public java.util.Set<androidx.health.services.client.data.DataType<?,?>> getSupportedDataTypesPassiveGoals();
     method public java.util.Set<androidx.health.services.client.data.DataType<?,?>> getSupportedDataTypesPassiveMonitoring();
     method public java.util.Set<androidx.health.services.client.data.HealthEvent.Type> getSupportedHealthEventTypes();
@@ -784,43 +737,14 @@
     property public final java.util.Set<androidx.health.services.client.data.DataType<?,?>> supportedDataTypesPassiveMonitoring;
     property public final java.util.Set<androidx.health.services.client.data.HealthEvent.Type> supportedHealthEventTypes;
     property public final java.util.Set<androidx.health.services.client.data.UserActivityState> supportedUserActivityStates;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.PassiveMonitoringCapabilities> CREATOR;
-    field public static final androidx.health.services.client.data.PassiveMonitoringCapabilities.Companion Companion;
   }
 
-  public static final class PassiveMonitoringCapabilities.Companion {
-  }
-
-  public final class PassiveMonitoringUpdate extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.PassiveMonitoringUpdate> {
+  public final class PassiveMonitoringUpdate {
     ctor public PassiveMonitoringUpdate(androidx.health.services.client.data.DataPointContainer dataPoints, java.util.List<androidx.health.services.client.data.UserActivityInfo> userActivityInfoUpdates);
-    method public static androidx.health.services.client.data.PassiveMonitoringUpdate? fromIntent(android.content.Intent intent);
     method public androidx.health.services.client.data.DataPointContainer getDataPoints();
-    method public androidx.health.services.client.proto.DataProto.PassiveMonitoringUpdate getProto();
     method public java.util.List<androidx.health.services.client.data.UserActivityInfo> getUserActivityInfoUpdates();
-    method public void putToIntent(android.content.Intent intent);
     property public final androidx.health.services.client.data.DataPointContainer dataPoints;
     property public final java.util.List<androidx.health.services.client.data.UserActivityInfo> userActivityInfoUpdates;
-    field public static final String ACTION_DATA = "hs.passivemonitoring.DATA";
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.PassiveMonitoringUpdate> CREATOR;
-    field public static final androidx.health.services.client.data.PassiveMonitoringUpdate.Companion Companion;
-  }
-
-  public static final class PassiveMonitoringUpdate.Companion {
-    method public androidx.health.services.client.data.PassiveMonitoringUpdate? fromIntent(android.content.Intent intent);
-  }
-
-  public abstract class ProtoParcelable<T extends com.google.protobuf.MessageLite> implements android.os.Parcelable {
-    ctor public ProtoParcelable();
-    method public int describeContents();
-    method protected final byte[] getBytes();
-    method public abstract T getProto();
-    method public void writeToParcel(android.os.Parcel dest, int flags);
-    property protected final byte[] bytes;
-    property public abstract T proto;
-    field public static final androidx.health.services.client.data.ProtoParcelable.Companion Companion;
-  }
-
-  public static final class ProtoParcelable.Companion {
   }
 
   public final class SampleDataPoint<T> extends androidx.health.services.client.data.DataPoint<T> {
@@ -856,20 +780,18 @@
   public static final class StatisticalDataPoint.Companion {
   }
 
-  public final class UserActivityInfo extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.UserActivityInfo> {
+  public final class UserActivityInfo {
     ctor public UserActivityInfo(androidx.health.services.client.data.UserActivityState userActivityState, androidx.health.services.client.data.ExerciseInfo? exerciseInfo, java.time.Instant stateChangeTime);
     method public static androidx.health.services.client.data.UserActivityInfo createActiveExerciseState(androidx.health.services.client.data.ExerciseInfo exerciseInfo, java.time.Instant stateChangeTime);
     method public static androidx.health.services.client.data.UserActivityInfo createAsleepState(java.time.Instant stateChangeTime);
     method public static androidx.health.services.client.data.UserActivityInfo createPassiveActivityState(java.time.Instant stateChangeTime);
     method public static androidx.health.services.client.data.UserActivityInfo createUnknownTypeState(java.time.Instant stateChangeTime);
     method public androidx.health.services.client.data.ExerciseInfo? getExerciseInfo();
-    method public androidx.health.services.client.proto.DataProto.UserActivityInfo getProto();
     method public java.time.Instant getStateChangeTime();
     method public androidx.health.services.client.data.UserActivityState getUserActivityState();
     property public final androidx.health.services.client.data.ExerciseInfo? exerciseInfo;
     property public final java.time.Instant stateChangeTime;
     property public final androidx.health.services.client.data.UserActivityState userActivityState;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.UserActivityInfo> CREATOR;
     field public static final androidx.health.services.client.data.UserActivityInfo.Companion Companion;
   }
 
@@ -896,18 +818,12 @@
   public static final class UserActivityState.Companion {
   }
 
-  public final class WarmUpConfig extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.WarmUpConfig> {
+  public final class WarmUpConfig {
     ctor public WarmUpConfig(androidx.health.services.client.data.ExerciseType exerciseType, java.util.Set<? extends androidx.health.services.client.data.DeltaDataType<?,?>> dataTypes);
     method public java.util.Set<androidx.health.services.client.data.DeltaDataType<?,?>> getDataTypes();
     method public androidx.health.services.client.data.ExerciseType getExerciseType();
-    method public androidx.health.services.client.proto.DataProto.WarmUpConfig getProto();
     property public final java.util.Set<androidx.health.services.client.data.DeltaDataType<?,?>> dataTypes;
     property public final androidx.health.services.client.data.ExerciseType exerciseType;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.WarmUpConfig> CREATOR;
-    field public static final androidx.health.services.client.data.WarmUpConfig.Companion Companion;
-  }
-
-  public static final class WarmUpConfig.Companion {
   }
 
 }
diff --git a/health/health-services-client/api/public_plus_experimental_current.txt b/health/health-services-client/api/public_plus_experimental_current.txt
index 0eb1f5c..137fe7b 100644
--- a/health/health-services-client/api/public_plus_experimental_current.txt
+++ b/health/health-services-client/api/public_plus_experimental_current.txt
@@ -68,12 +68,11 @@
   public abstract class PassiveListenerService extends android.app.Service {
     ctor public PassiveListenerService();
     method public final android.os.IBinder? onBind(android.content.Intent intent);
-    method public final void onGoalCompleted(androidx.health.services.client.data.PassiveGoal goal);
-    method public final void onHealthEventReceived(androidx.health.services.client.data.HealthEvent event);
-    method public final void onNewDataPointsReceived(androidx.health.services.client.data.DataPointContainer dataPoints);
-    method public final void onPermissionLost();
-    method public final void onUserActivityInfoReceived(androidx.health.services.client.data.UserActivityInfo info);
-    field public static final String TAG = "PassiveListenerService";
+    method public void onGoalCompleted(androidx.health.services.client.data.PassiveGoal goal);
+    method public void onHealthEventReceived(androidx.health.services.client.data.HealthEvent event);
+    method public void onNewDataPointsReceived(androidx.health.services.client.data.DataPointContainer dataPoints);
+    method public void onPermissionLost();
+    method public void onUserActivityInfoReceived(androidx.health.services.client.data.UserActivityInfo info);
   }
 
   public interface PassiveMonitoringClient {
@@ -139,7 +138,7 @@
     property public androidx.health.services.client.data.DataType<T,? extends androidx.health.services.client.data.DataPoint<T>> dataType;
   }
 
-  public abstract class DataPointAccuracy extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.DataPointAccuracy> {
+  public abstract class DataPointAccuracy {
     ctor public DataPointAccuracy();
   }
 
@@ -273,21 +272,15 @@
     ctor public DeltaDataType(String name, androidx.health.services.client.data.DataType.TimeType timeType, Class<T> valueClass);
   }
 
-  public final class ExerciseCapabilities extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.ExerciseCapabilities> {
+  public final class ExerciseCapabilities {
     ctor public ExerciseCapabilities(java.util.Map<androidx.health.services.client.data.ExerciseType,androidx.health.services.client.data.ExerciseTypeCapabilities> typeToCapabilities);
     method public java.util.Set<androidx.health.services.client.data.ExerciseType> getAutoPauseAndResumeEnabledExercises();
     method public androidx.health.services.client.data.ExerciseTypeCapabilities getExerciseTypeCapabilities(androidx.health.services.client.data.ExerciseType exercise);
-    method public androidx.health.services.client.proto.DataProto.ExerciseCapabilities getProto();
     method public java.util.Set<androidx.health.services.client.data.ExerciseType> getSupportedExerciseTypes();
     method public java.util.Map<androidx.health.services.client.data.ExerciseType,androidx.health.services.client.data.ExerciseTypeCapabilities> getTypeToCapabilities();
     property public final java.util.Set<androidx.health.services.client.data.ExerciseType> autoPauseAndResumeEnabledExercises;
     property public final java.util.Set<androidx.health.services.client.data.ExerciseType> supportedExerciseTypes;
     property public final java.util.Map<androidx.health.services.client.data.ExerciseType,androidx.health.services.client.data.ExerciseTypeCapabilities> typeToCapabilities;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.ExerciseCapabilities> CREATOR;
-    field public static final androidx.health.services.client.data.ExerciseCapabilities.Companion Companion;
-  }
-
-  public static final class ExerciseCapabilities.Companion {
   }
 
   public final class ExerciseConfig {
@@ -326,14 +319,15 @@
     method public androidx.health.services.client.data.ExerciseConfig.Builder builder(androidx.health.services.client.data.ExerciseType exerciseType);
   }
 
-  public final class ExerciseGoal<T extends java.lang.Number> extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.ExerciseGoal> {
+  public final class ExerciseGoal<T extends java.lang.Number> implements android.os.Parcelable {
     method public static <T extends java.lang.Number> androidx.health.services.client.data.ExerciseGoal<T> createMilestone(androidx.health.services.client.data.DataTypeCondition<T,androidx.health.services.client.data.AggregateDataType<T,?>> condition, T period);
     method public static <T extends java.lang.Number> androidx.health.services.client.data.ExerciseGoal<T> createMilestoneGoalWithUpdatedThreshold(androidx.health.services.client.data.ExerciseGoal<T> goal, T newThreshold);
     method public static <T extends java.lang.Number> androidx.health.services.client.data.ExerciseGoal<T> createOneTimeGoal(androidx.health.services.client.data.DataTypeCondition<T,androidx.health.services.client.data.AggregateDataType<T,?>> condition);
+    method public int describeContents();
     method public androidx.health.services.client.data.DataTypeCondition<T,androidx.health.services.client.data.AggregateDataType<T,?>> getDataTypeCondition();
     method public androidx.health.services.client.data.ExerciseGoalType getExerciseGoalType();
     method public T? getPeriod();
-    method public androidx.health.services.client.proto.DataProto.ExerciseGoal getProto();
+    method public void writeToParcel(android.os.Parcel dest, int flags);
     property public final androidx.health.services.client.data.DataTypeCondition<T,androidx.health.services.client.data.AggregateDataType<T,?>> dataTypeCondition;
     property public final androidx.health.services.client.data.ExerciseGoalType exerciseGoalType;
     property public final T? period;
@@ -362,18 +356,12 @@
     method public androidx.health.services.client.data.ExerciseGoalType? fromId(int id);
   }
 
-  public final class ExerciseInfo extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.ExerciseInfo> {
+  public final class ExerciseInfo {
     ctor public ExerciseInfo(int exerciseTrackedStatus, androidx.health.services.client.data.ExerciseType exerciseType);
     method public int getExerciseTrackedStatus();
     method public androidx.health.services.client.data.ExerciseType getExerciseType();
-    method public androidx.health.services.client.proto.DataProto.ExerciseInfo getProto();
     property public final int exerciseTrackedStatus;
     property public final androidx.health.services.client.data.ExerciseType exerciseType;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.ExerciseInfo> CREATOR;
-    field public static final androidx.health.services.client.data.ExerciseInfo.Companion Companion;
-  }
-
-  public static final class ExerciseInfo.Companion {
   }
 
   public final class ExerciseLapSummary {
@@ -405,8 +393,6 @@
     property public final boolean isResuming;
     property public final String name;
     field public static final androidx.health.services.client.data.ExerciseState ACTIVE;
-    field public static final androidx.health.services.client.data.ExerciseState AUTO_ENDING;
-    field public static final androidx.health.services.client.data.ExerciseState AUTO_ENDING_PERMISSION_LOST;
     field public static final androidx.health.services.client.data.ExerciseState AUTO_PAUSED;
     field public static final androidx.health.services.client.data.ExerciseState AUTO_PAUSING;
     field public static final androidx.health.services.client.data.ExerciseState AUTO_RESUMING;
@@ -414,8 +400,6 @@
     field public static final androidx.health.services.client.data.ExerciseState ENDED;
     field public static final androidx.health.services.client.data.ExerciseState ENDING;
     field public static final androidx.health.services.client.data.ExerciseState PREPARING;
-    field public static final androidx.health.services.client.data.ExerciseState TERMINATING;
-    field public static final androidx.health.services.client.data.ExerciseState USER_ENDING;
     field public static final androidx.health.services.client.data.ExerciseState USER_PAUSED;
     field public static final androidx.health.services.client.data.ExerciseState USER_PAUSING;
     field public static final androidx.health.services.client.data.ExerciseState USER_RESUMING;
@@ -536,9 +520,8 @@
     method public androidx.health.services.client.data.ExerciseType fromId(int id);
   }
 
-  public final class ExerciseTypeCapabilities extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.ExerciseTypeCapabilities> {
+  public final class ExerciseTypeCapabilities {
     ctor public ExerciseTypeCapabilities(java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> supportedDataTypes, java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,? extends java.util.Set<androidx.health.services.client.data.ComparisonType>> supportedGoals, java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,? extends java.util.Set<androidx.health.services.client.data.ComparisonType>> supportedMilestones, boolean supportsAutoPauseAndResume);
-    method public androidx.health.services.client.proto.DataProto.ExerciseTypeCapabilities getProto();
     method public java.util.Set<androidx.health.services.client.data.DataType<?,?>> getSupportedDataTypes();
     method public java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,java.util.Set<androidx.health.services.client.data.ComparisonType>> getSupportedGoals();
     method public java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,java.util.Set<androidx.health.services.client.data.ComparisonType>> getSupportedMilestones();
@@ -547,15 +530,10 @@
     property public final java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,java.util.Set<androidx.health.services.client.data.ComparisonType>> supportedGoals;
     property public final java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,java.util.Set<androidx.health.services.client.data.ComparisonType>> supportedMilestones;
     property public final boolean supportsAutoPauseAndResume;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.ExerciseTypeCapabilities> CREATOR;
-    field public static final androidx.health.services.client.data.ExerciseTypeCapabilities.Companion Companion;
   }
 
-  public static final class ExerciseTypeCapabilities.Companion {
-  }
-
-  public final class ExerciseUpdate extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.ExerciseUpdate> {
-    ctor public ExerciseUpdate(java.time.Instant? startTime, java.time.Duration? updateDurationFromBoot, androidx.health.services.client.data.DataPointContainer latestMetrics, java.util.Set<? extends androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number>> latestAchievedGoals, java.util.Set<androidx.health.services.client.data.MilestoneMarkerSummary> latestMilestoneMarkerSummaries, androidx.health.services.client.data.ExerciseConfig? exerciseConfig, androidx.health.services.client.data.ExerciseUpdate.ActiveDurationCheckpoint? activeDurationCheckpoint, androidx.health.services.client.data.ExerciseStateInfo exerciseStateInfo);
+  public final class ExerciseUpdate {
+    ctor public ExerciseUpdate(androidx.health.services.client.data.DataPointContainer latestMetrics, java.util.Set<? extends androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number>> latestAchievedGoals, java.util.Set<androidx.health.services.client.data.MilestoneMarkerSummary> latestMilestoneMarkerSummaries, androidx.health.services.client.data.ExerciseStateInfo exerciseStateInfo, optional androidx.health.services.client.data.ExerciseConfig? exerciseConfig, optional androidx.health.services.client.data.ExerciseUpdate.ActiveDurationCheckpoint? activeDurationCheckpoint, optional java.time.Duration? updateDurationFromBoot, optional java.time.Instant? startTime);
     method public java.time.Duration getActiveDurationAtDataPoint(androidx.health.services.client.data.IntervalDataPoint<?> dataPoint);
     method public java.time.Duration getActiveDurationAtDataPoint(androidx.health.services.client.data.SampleDataPoint<?> dataPoint);
     method public androidx.health.services.client.data.ExerciseUpdate.ActiveDurationCheckpoint? getActiveDurationCheckpoint();
@@ -564,7 +542,6 @@
     method public java.util.Set<androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number>> getLatestAchievedGoals();
     method public androidx.health.services.client.data.DataPointContainer getLatestMetrics();
     method public java.util.Set<androidx.health.services.client.data.MilestoneMarkerSummary> getLatestMilestoneMarkerSummaries();
-    method public androidx.health.services.client.proto.DataProto.ExerciseUpdate getProto();
     method public java.time.Instant? getStartTime();
     method public java.time.Duration getUpdateDurationFromBoot();
     property public final androidx.health.services.client.data.ExerciseUpdate.ActiveDurationCheckpoint? activeDurationCheckpoint;
@@ -574,7 +551,6 @@
     property public final androidx.health.services.client.data.DataPointContainer latestMetrics;
     property public final java.util.Set<androidx.health.services.client.data.MilestoneMarkerSummary> latestMilestoneMarkerSummaries;
     property public final java.time.Instant? startTime;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.ExerciseUpdate> CREATOR;
     field public static final androidx.health.services.client.data.ExerciseUpdate.Companion Companion;
   }
 
@@ -614,14 +590,8 @@
 
   public final class HeartRateAccuracy extends androidx.health.services.client.data.DataPointAccuracy {
     ctor public HeartRateAccuracy(androidx.health.services.client.data.HeartRateAccuracy.SensorStatus sensorStatus);
-    method public androidx.health.services.client.proto.DataProto.DataPointAccuracy getProto();
     method public androidx.health.services.client.data.HeartRateAccuracy.SensorStatus getSensorStatus();
     property public final androidx.health.services.client.data.HeartRateAccuracy.SensorStatus sensorStatus;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.HeartRateAccuracy> CREATOR;
-    field public static final androidx.health.services.client.data.HeartRateAccuracy.Companion Companion;
-  }
-
-  public static final class HeartRateAccuracy.Companion {
   }
 
   public static final class HeartRateAccuracy.SensorStatus {
@@ -662,11 +632,9 @@
   public final class LocationAccuracy extends androidx.health.services.client.data.DataPointAccuracy {
     ctor public LocationAccuracy(@FloatRange(from=0.0) double horizontalPositionErrorMeters, optional @FloatRange(from=0.0) double verticalPositionErrorMeters);
     method public double getHorizontalPositionErrorMeters();
-    method public androidx.health.services.client.proto.DataProto.DataPointAccuracy getProto();
     method public double getVerticalPositionErrorMeters();
     property public final double horizontalPositionErrorMeters;
     property public final double verticalPositionErrorMeters;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.LocationAccuracy> CREATOR;
     field public static final androidx.health.services.client.data.LocationAccuracy.Companion Companion;
   }
 
@@ -706,24 +674,17 @@
     field public static final double BEARING_UNAVAILABLE = -1.0;
   }
 
-  public final class MeasureCapabilities extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.MeasureCapabilities> {
+  public final class MeasureCapabilities {
     ctor public MeasureCapabilities(java.util.Set<? extends androidx.health.services.client.data.DeltaDataType<?,?>> supportedDataTypesMeasure);
-    method public androidx.health.services.client.proto.DataProto.MeasureCapabilities getProto();
     method public java.util.Set<androidx.health.services.client.data.DeltaDataType<?,?>> getSupportedDataTypesMeasure();
     property public final java.util.Set<androidx.health.services.client.data.DeltaDataType<?,?>> supportedDataTypesMeasure;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.MeasureCapabilities> CREATOR;
-    field public static final androidx.health.services.client.data.MeasureCapabilities.Companion Companion;
   }
 
-  public static final class MeasureCapabilities.Companion {
-  }
-
-  public final class MilestoneMarkerSummary extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.MilestoneMarkerSummary> {
+  public final class MilestoneMarkerSummary {
     ctor public MilestoneMarkerSummary(java.time.Instant startTime, java.time.Instant endTime, java.time.Duration activeDuration, androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number> achievedGoal, androidx.health.services.client.data.DataPointContainer summaryMetrics);
     method public androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number> getAchievedGoal();
     method public java.time.Duration getActiveDuration();
     method public java.time.Instant getEndTime();
-    method public androidx.health.services.client.proto.DataProto.MilestoneMarkerSummary getProto();
     method public java.time.Instant getStartTime();
     method public androidx.health.services.client.data.DataPointContainer getSummaryMetrics();
     property public final androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number> achievedGoal;
@@ -731,11 +692,6 @@
     property public final java.time.Instant endTime;
     property public final java.time.Instant startTime;
     property public final androidx.health.services.client.data.DataPointContainer summaryMetrics;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.MilestoneMarkerSummary> CREATOR;
-    field public static final androidx.health.services.client.data.MilestoneMarkerSummary.Companion Companion;
-  }
-
-  public static final class MilestoneMarkerSummary.Companion {
   }
 
   public final class PassiveGoal {
@@ -744,19 +700,17 @@
     property public final androidx.health.services.client.data.DataTypeCondition<? extends java.lang.Number,? extends androidx.health.services.client.data.DeltaDataType<? extends java.lang.Number,?>> dataTypeCondition;
   }
 
-  public final class PassiveListenerConfig extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.PassiveListenerConfig> {
-    ctor public PassiveListenerConfig(java.util.Set<? extends androidx.health.services.client.data.DataType<? extends java.lang.Object,? extends androidx.health.services.client.data.DataPoint<?>>> dataTypes, boolean shouldRequestUserActivityState, java.util.Set<androidx.health.services.client.data.PassiveGoal> dailyGoals, java.util.Set<androidx.health.services.client.data.HealthEvent.Type> healthEventTypes);
+  public final class PassiveListenerConfig {
+    ctor public PassiveListenerConfig(java.util.Set<? extends androidx.health.services.client.data.DataType<? extends java.lang.Object,? extends androidx.health.services.client.data.DataPoint<?>>> dataTypes, boolean shouldUserActivityInfoBeRequested, java.util.Set<androidx.health.services.client.data.PassiveGoal> dailyGoals, java.util.Set<androidx.health.services.client.data.HealthEvent.Type> healthEventTypes);
     method public static androidx.health.services.client.data.PassiveListenerConfig.Builder builder();
     method public java.util.Set<androidx.health.services.client.data.PassiveGoal> getDailyGoals();
     method public java.util.Set<androidx.health.services.client.data.DataType<? extends java.lang.Object,? extends androidx.health.services.client.data.DataPoint<?>>> getDataTypes();
     method public java.util.Set<androidx.health.services.client.data.HealthEvent.Type> getHealthEventTypes();
-    method public androidx.health.services.client.proto.DataProto.PassiveListenerConfig getProto();
-    method public boolean getShouldRequestUserActivityState();
+    method public boolean getShouldUserActivityInfoBeRequested();
     property public final java.util.Set<androidx.health.services.client.data.PassiveGoal> dailyGoals;
     property public final java.util.Set<androidx.health.services.client.data.DataType<? extends java.lang.Object,? extends androidx.health.services.client.data.DataPoint<?>>> dataTypes;
     property public final java.util.Set<androidx.health.services.client.data.HealthEvent.Type> healthEventTypes;
-    property public final boolean shouldRequestUserActivityState;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.PassiveListenerConfig> CREATOR;
+    property public final boolean shouldUserActivityInfoBeRequested;
     field public static final androidx.health.services.client.data.PassiveListenerConfig.Companion Companion;
   }
 
@@ -766,16 +720,15 @@
     method public androidx.health.services.client.data.PassiveListenerConfig.Builder setDailyGoals(java.util.Set<androidx.health.services.client.data.PassiveGoal> dailyGoals);
     method public androidx.health.services.client.data.PassiveListenerConfig.Builder setDataTypes(java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> dataTypes);
     method public androidx.health.services.client.data.PassiveListenerConfig.Builder setHealthEventTypes(java.util.Set<androidx.health.services.client.data.HealthEvent.Type> healthEventTypes);
-    method public androidx.health.services.client.data.PassiveListenerConfig.Builder setShouldRequestUserActivityState(boolean requestUserActivityState);
+    method public androidx.health.services.client.data.PassiveListenerConfig.Builder setShouldUserActivityInfoBeRequested(boolean shouldUserActivityInfoBeRequested);
   }
 
   public static final class PassiveListenerConfig.Companion {
     method public androidx.health.services.client.data.PassiveListenerConfig.Builder builder();
   }
 
-  public final class PassiveMonitoringCapabilities extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.PassiveMonitoringCapabilities> {
+  public final class PassiveMonitoringCapabilities {
     ctor public PassiveMonitoringCapabilities(java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> supportedDataTypesPassiveMonitoring, java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> supportedDataTypesPassiveGoals, java.util.Set<androidx.health.services.client.data.HealthEvent.Type> supportedHealthEventTypes, java.util.Set<androidx.health.services.client.data.UserActivityState> supportedUserActivityStates);
-    method public androidx.health.services.client.proto.DataProto.PassiveMonitoringCapabilities getProto();
     method public java.util.Set<androidx.health.services.client.data.DataType<?,?>> getSupportedDataTypesPassiveGoals();
     method public java.util.Set<androidx.health.services.client.data.DataType<?,?>> getSupportedDataTypesPassiveMonitoring();
     method public java.util.Set<androidx.health.services.client.data.HealthEvent.Type> getSupportedHealthEventTypes();
@@ -784,43 +737,14 @@
     property public final java.util.Set<androidx.health.services.client.data.DataType<?,?>> supportedDataTypesPassiveMonitoring;
     property public final java.util.Set<androidx.health.services.client.data.HealthEvent.Type> supportedHealthEventTypes;
     property public final java.util.Set<androidx.health.services.client.data.UserActivityState> supportedUserActivityStates;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.PassiveMonitoringCapabilities> CREATOR;
-    field public static final androidx.health.services.client.data.PassiveMonitoringCapabilities.Companion Companion;
   }
 
-  public static final class PassiveMonitoringCapabilities.Companion {
-  }
-
-  public final class PassiveMonitoringUpdate extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.PassiveMonitoringUpdate> {
+  public final class PassiveMonitoringUpdate {
     ctor public PassiveMonitoringUpdate(androidx.health.services.client.data.DataPointContainer dataPoints, java.util.List<androidx.health.services.client.data.UserActivityInfo> userActivityInfoUpdates);
-    method public static androidx.health.services.client.data.PassiveMonitoringUpdate? fromIntent(android.content.Intent intent);
     method public androidx.health.services.client.data.DataPointContainer getDataPoints();
-    method public androidx.health.services.client.proto.DataProto.PassiveMonitoringUpdate getProto();
     method public java.util.List<androidx.health.services.client.data.UserActivityInfo> getUserActivityInfoUpdates();
-    method public void putToIntent(android.content.Intent intent);
     property public final androidx.health.services.client.data.DataPointContainer dataPoints;
     property public final java.util.List<androidx.health.services.client.data.UserActivityInfo> userActivityInfoUpdates;
-    field public static final String ACTION_DATA = "hs.passivemonitoring.DATA";
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.PassiveMonitoringUpdate> CREATOR;
-    field public static final androidx.health.services.client.data.PassiveMonitoringUpdate.Companion Companion;
-  }
-
-  public static final class PassiveMonitoringUpdate.Companion {
-    method public androidx.health.services.client.data.PassiveMonitoringUpdate? fromIntent(android.content.Intent intent);
-  }
-
-  public abstract class ProtoParcelable<T extends com.google.protobuf.MessageLite> implements android.os.Parcelable {
-    ctor public ProtoParcelable();
-    method public int describeContents();
-    method protected final byte[] getBytes();
-    method public abstract T getProto();
-    method public void writeToParcel(android.os.Parcel dest, int flags);
-    property protected final byte[] bytes;
-    property public abstract T proto;
-    field public static final androidx.health.services.client.data.ProtoParcelable.Companion Companion;
-  }
-
-  public static final class ProtoParcelable.Companion {
   }
 
   public final class SampleDataPoint<T> extends androidx.health.services.client.data.DataPoint<T> {
@@ -856,20 +780,18 @@
   public static final class StatisticalDataPoint.Companion {
   }
 
-  public final class UserActivityInfo extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.UserActivityInfo> {
+  public final class UserActivityInfo {
     ctor public UserActivityInfo(androidx.health.services.client.data.UserActivityState userActivityState, androidx.health.services.client.data.ExerciseInfo? exerciseInfo, java.time.Instant stateChangeTime);
     method public static androidx.health.services.client.data.UserActivityInfo createActiveExerciseState(androidx.health.services.client.data.ExerciseInfo exerciseInfo, java.time.Instant stateChangeTime);
     method public static androidx.health.services.client.data.UserActivityInfo createAsleepState(java.time.Instant stateChangeTime);
     method public static androidx.health.services.client.data.UserActivityInfo createPassiveActivityState(java.time.Instant stateChangeTime);
     method public static androidx.health.services.client.data.UserActivityInfo createUnknownTypeState(java.time.Instant stateChangeTime);
     method public androidx.health.services.client.data.ExerciseInfo? getExerciseInfo();
-    method public androidx.health.services.client.proto.DataProto.UserActivityInfo getProto();
     method public java.time.Instant getStateChangeTime();
     method public androidx.health.services.client.data.UserActivityState getUserActivityState();
     property public final androidx.health.services.client.data.ExerciseInfo? exerciseInfo;
     property public final java.time.Instant stateChangeTime;
     property public final androidx.health.services.client.data.UserActivityState userActivityState;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.UserActivityInfo> CREATOR;
     field public static final androidx.health.services.client.data.UserActivityInfo.Companion Companion;
   }
 
@@ -896,18 +818,12 @@
   public static final class UserActivityState.Companion {
   }
 
-  public final class WarmUpConfig extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.WarmUpConfig> {
+  public final class WarmUpConfig {
     ctor public WarmUpConfig(androidx.health.services.client.data.ExerciseType exerciseType, java.util.Set<? extends androidx.health.services.client.data.DeltaDataType<?,?>> dataTypes);
     method public java.util.Set<androidx.health.services.client.data.DeltaDataType<?,?>> getDataTypes();
     method public androidx.health.services.client.data.ExerciseType getExerciseType();
-    method public androidx.health.services.client.proto.DataProto.WarmUpConfig getProto();
     property public final java.util.Set<androidx.health.services.client.data.DeltaDataType<?,?>> dataTypes;
     property public final androidx.health.services.client.data.ExerciseType exerciseType;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.WarmUpConfig> CREATOR;
-    field public static final androidx.health.services.client.data.WarmUpConfig.Companion Companion;
-  }
-
-  public static final class WarmUpConfig.Companion {
   }
 
 }
diff --git a/health/health-services-client/api/restricted_1.0.0-beta01.txt b/health/health-services-client/api/restricted_1.0.0-beta01.txt
index 0eb1f5c..137fe7b 100644
--- a/health/health-services-client/api/restricted_1.0.0-beta01.txt
+++ b/health/health-services-client/api/restricted_1.0.0-beta01.txt
@@ -68,12 +68,11 @@
   public abstract class PassiveListenerService extends android.app.Service {
     ctor public PassiveListenerService();
     method public final android.os.IBinder? onBind(android.content.Intent intent);
-    method public final void onGoalCompleted(androidx.health.services.client.data.PassiveGoal goal);
-    method public final void onHealthEventReceived(androidx.health.services.client.data.HealthEvent event);
-    method public final void onNewDataPointsReceived(androidx.health.services.client.data.DataPointContainer dataPoints);
-    method public final void onPermissionLost();
-    method public final void onUserActivityInfoReceived(androidx.health.services.client.data.UserActivityInfo info);
-    field public static final String TAG = "PassiveListenerService";
+    method public void onGoalCompleted(androidx.health.services.client.data.PassiveGoal goal);
+    method public void onHealthEventReceived(androidx.health.services.client.data.HealthEvent event);
+    method public void onNewDataPointsReceived(androidx.health.services.client.data.DataPointContainer dataPoints);
+    method public void onPermissionLost();
+    method public void onUserActivityInfoReceived(androidx.health.services.client.data.UserActivityInfo info);
   }
 
   public interface PassiveMonitoringClient {
@@ -139,7 +138,7 @@
     property public androidx.health.services.client.data.DataType<T,? extends androidx.health.services.client.data.DataPoint<T>> dataType;
   }
 
-  public abstract class DataPointAccuracy extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.DataPointAccuracy> {
+  public abstract class DataPointAccuracy {
     ctor public DataPointAccuracy();
   }
 
@@ -273,21 +272,15 @@
     ctor public DeltaDataType(String name, androidx.health.services.client.data.DataType.TimeType timeType, Class<T> valueClass);
   }
 
-  public final class ExerciseCapabilities extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.ExerciseCapabilities> {
+  public final class ExerciseCapabilities {
     ctor public ExerciseCapabilities(java.util.Map<androidx.health.services.client.data.ExerciseType,androidx.health.services.client.data.ExerciseTypeCapabilities> typeToCapabilities);
     method public java.util.Set<androidx.health.services.client.data.ExerciseType> getAutoPauseAndResumeEnabledExercises();
     method public androidx.health.services.client.data.ExerciseTypeCapabilities getExerciseTypeCapabilities(androidx.health.services.client.data.ExerciseType exercise);
-    method public androidx.health.services.client.proto.DataProto.ExerciseCapabilities getProto();
     method public java.util.Set<androidx.health.services.client.data.ExerciseType> getSupportedExerciseTypes();
     method public java.util.Map<androidx.health.services.client.data.ExerciseType,androidx.health.services.client.data.ExerciseTypeCapabilities> getTypeToCapabilities();
     property public final java.util.Set<androidx.health.services.client.data.ExerciseType> autoPauseAndResumeEnabledExercises;
     property public final java.util.Set<androidx.health.services.client.data.ExerciseType> supportedExerciseTypes;
     property public final java.util.Map<androidx.health.services.client.data.ExerciseType,androidx.health.services.client.data.ExerciseTypeCapabilities> typeToCapabilities;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.ExerciseCapabilities> CREATOR;
-    field public static final androidx.health.services.client.data.ExerciseCapabilities.Companion Companion;
-  }
-
-  public static final class ExerciseCapabilities.Companion {
   }
 
   public final class ExerciseConfig {
@@ -326,14 +319,15 @@
     method public androidx.health.services.client.data.ExerciseConfig.Builder builder(androidx.health.services.client.data.ExerciseType exerciseType);
   }
 
-  public final class ExerciseGoal<T extends java.lang.Number> extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.ExerciseGoal> {
+  public final class ExerciseGoal<T extends java.lang.Number> implements android.os.Parcelable {
     method public static <T extends java.lang.Number> androidx.health.services.client.data.ExerciseGoal<T> createMilestone(androidx.health.services.client.data.DataTypeCondition<T,androidx.health.services.client.data.AggregateDataType<T,?>> condition, T period);
     method public static <T extends java.lang.Number> androidx.health.services.client.data.ExerciseGoal<T> createMilestoneGoalWithUpdatedThreshold(androidx.health.services.client.data.ExerciseGoal<T> goal, T newThreshold);
     method public static <T extends java.lang.Number> androidx.health.services.client.data.ExerciseGoal<T> createOneTimeGoal(androidx.health.services.client.data.DataTypeCondition<T,androidx.health.services.client.data.AggregateDataType<T,?>> condition);
+    method public int describeContents();
     method public androidx.health.services.client.data.DataTypeCondition<T,androidx.health.services.client.data.AggregateDataType<T,?>> getDataTypeCondition();
     method public androidx.health.services.client.data.ExerciseGoalType getExerciseGoalType();
     method public T? getPeriod();
-    method public androidx.health.services.client.proto.DataProto.ExerciseGoal getProto();
+    method public void writeToParcel(android.os.Parcel dest, int flags);
     property public final androidx.health.services.client.data.DataTypeCondition<T,androidx.health.services.client.data.AggregateDataType<T,?>> dataTypeCondition;
     property public final androidx.health.services.client.data.ExerciseGoalType exerciseGoalType;
     property public final T? period;
@@ -362,18 +356,12 @@
     method public androidx.health.services.client.data.ExerciseGoalType? fromId(int id);
   }
 
-  public final class ExerciseInfo extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.ExerciseInfo> {
+  public final class ExerciseInfo {
     ctor public ExerciseInfo(int exerciseTrackedStatus, androidx.health.services.client.data.ExerciseType exerciseType);
     method public int getExerciseTrackedStatus();
     method public androidx.health.services.client.data.ExerciseType getExerciseType();
-    method public androidx.health.services.client.proto.DataProto.ExerciseInfo getProto();
     property public final int exerciseTrackedStatus;
     property public final androidx.health.services.client.data.ExerciseType exerciseType;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.ExerciseInfo> CREATOR;
-    field public static final androidx.health.services.client.data.ExerciseInfo.Companion Companion;
-  }
-
-  public static final class ExerciseInfo.Companion {
   }
 
   public final class ExerciseLapSummary {
@@ -405,8 +393,6 @@
     property public final boolean isResuming;
     property public final String name;
     field public static final androidx.health.services.client.data.ExerciseState ACTIVE;
-    field public static final androidx.health.services.client.data.ExerciseState AUTO_ENDING;
-    field public static final androidx.health.services.client.data.ExerciseState AUTO_ENDING_PERMISSION_LOST;
     field public static final androidx.health.services.client.data.ExerciseState AUTO_PAUSED;
     field public static final androidx.health.services.client.data.ExerciseState AUTO_PAUSING;
     field public static final androidx.health.services.client.data.ExerciseState AUTO_RESUMING;
@@ -414,8 +400,6 @@
     field public static final androidx.health.services.client.data.ExerciseState ENDED;
     field public static final androidx.health.services.client.data.ExerciseState ENDING;
     field public static final androidx.health.services.client.data.ExerciseState PREPARING;
-    field public static final androidx.health.services.client.data.ExerciseState TERMINATING;
-    field public static final androidx.health.services.client.data.ExerciseState USER_ENDING;
     field public static final androidx.health.services.client.data.ExerciseState USER_PAUSED;
     field public static final androidx.health.services.client.data.ExerciseState USER_PAUSING;
     field public static final androidx.health.services.client.data.ExerciseState USER_RESUMING;
@@ -536,9 +520,8 @@
     method public androidx.health.services.client.data.ExerciseType fromId(int id);
   }
 
-  public final class ExerciseTypeCapabilities extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.ExerciseTypeCapabilities> {
+  public final class ExerciseTypeCapabilities {
     ctor public ExerciseTypeCapabilities(java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> supportedDataTypes, java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,? extends java.util.Set<androidx.health.services.client.data.ComparisonType>> supportedGoals, java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,? extends java.util.Set<androidx.health.services.client.data.ComparisonType>> supportedMilestones, boolean supportsAutoPauseAndResume);
-    method public androidx.health.services.client.proto.DataProto.ExerciseTypeCapabilities getProto();
     method public java.util.Set<androidx.health.services.client.data.DataType<?,?>> getSupportedDataTypes();
     method public java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,java.util.Set<androidx.health.services.client.data.ComparisonType>> getSupportedGoals();
     method public java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,java.util.Set<androidx.health.services.client.data.ComparisonType>> getSupportedMilestones();
@@ -547,15 +530,10 @@
     property public final java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,java.util.Set<androidx.health.services.client.data.ComparisonType>> supportedGoals;
     property public final java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,java.util.Set<androidx.health.services.client.data.ComparisonType>> supportedMilestones;
     property public final boolean supportsAutoPauseAndResume;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.ExerciseTypeCapabilities> CREATOR;
-    field public static final androidx.health.services.client.data.ExerciseTypeCapabilities.Companion Companion;
   }
 
-  public static final class ExerciseTypeCapabilities.Companion {
-  }
-
-  public final class ExerciseUpdate extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.ExerciseUpdate> {
-    ctor public ExerciseUpdate(java.time.Instant? startTime, java.time.Duration? updateDurationFromBoot, androidx.health.services.client.data.DataPointContainer latestMetrics, java.util.Set<? extends androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number>> latestAchievedGoals, java.util.Set<androidx.health.services.client.data.MilestoneMarkerSummary> latestMilestoneMarkerSummaries, androidx.health.services.client.data.ExerciseConfig? exerciseConfig, androidx.health.services.client.data.ExerciseUpdate.ActiveDurationCheckpoint? activeDurationCheckpoint, androidx.health.services.client.data.ExerciseStateInfo exerciseStateInfo);
+  public final class ExerciseUpdate {
+    ctor public ExerciseUpdate(androidx.health.services.client.data.DataPointContainer latestMetrics, java.util.Set<? extends androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number>> latestAchievedGoals, java.util.Set<androidx.health.services.client.data.MilestoneMarkerSummary> latestMilestoneMarkerSummaries, androidx.health.services.client.data.ExerciseStateInfo exerciseStateInfo, optional androidx.health.services.client.data.ExerciseConfig? exerciseConfig, optional androidx.health.services.client.data.ExerciseUpdate.ActiveDurationCheckpoint? activeDurationCheckpoint, optional java.time.Duration? updateDurationFromBoot, optional java.time.Instant? startTime);
     method public java.time.Duration getActiveDurationAtDataPoint(androidx.health.services.client.data.IntervalDataPoint<?> dataPoint);
     method public java.time.Duration getActiveDurationAtDataPoint(androidx.health.services.client.data.SampleDataPoint<?> dataPoint);
     method public androidx.health.services.client.data.ExerciseUpdate.ActiveDurationCheckpoint? getActiveDurationCheckpoint();
@@ -564,7 +542,6 @@
     method public java.util.Set<androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number>> getLatestAchievedGoals();
     method public androidx.health.services.client.data.DataPointContainer getLatestMetrics();
     method public java.util.Set<androidx.health.services.client.data.MilestoneMarkerSummary> getLatestMilestoneMarkerSummaries();
-    method public androidx.health.services.client.proto.DataProto.ExerciseUpdate getProto();
     method public java.time.Instant? getStartTime();
     method public java.time.Duration getUpdateDurationFromBoot();
     property public final androidx.health.services.client.data.ExerciseUpdate.ActiveDurationCheckpoint? activeDurationCheckpoint;
@@ -574,7 +551,6 @@
     property public final androidx.health.services.client.data.DataPointContainer latestMetrics;
     property public final java.util.Set<androidx.health.services.client.data.MilestoneMarkerSummary> latestMilestoneMarkerSummaries;
     property public final java.time.Instant? startTime;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.ExerciseUpdate> CREATOR;
     field public static final androidx.health.services.client.data.ExerciseUpdate.Companion Companion;
   }
 
@@ -614,14 +590,8 @@
 
   public final class HeartRateAccuracy extends androidx.health.services.client.data.DataPointAccuracy {
     ctor public HeartRateAccuracy(androidx.health.services.client.data.HeartRateAccuracy.SensorStatus sensorStatus);
-    method public androidx.health.services.client.proto.DataProto.DataPointAccuracy getProto();
     method public androidx.health.services.client.data.HeartRateAccuracy.SensorStatus getSensorStatus();
     property public final androidx.health.services.client.data.HeartRateAccuracy.SensorStatus sensorStatus;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.HeartRateAccuracy> CREATOR;
-    field public static final androidx.health.services.client.data.HeartRateAccuracy.Companion Companion;
-  }
-
-  public static final class HeartRateAccuracy.Companion {
   }
 
   public static final class HeartRateAccuracy.SensorStatus {
@@ -662,11 +632,9 @@
   public final class LocationAccuracy extends androidx.health.services.client.data.DataPointAccuracy {
     ctor public LocationAccuracy(@FloatRange(from=0.0) double horizontalPositionErrorMeters, optional @FloatRange(from=0.0) double verticalPositionErrorMeters);
     method public double getHorizontalPositionErrorMeters();
-    method public androidx.health.services.client.proto.DataProto.DataPointAccuracy getProto();
     method public double getVerticalPositionErrorMeters();
     property public final double horizontalPositionErrorMeters;
     property public final double verticalPositionErrorMeters;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.LocationAccuracy> CREATOR;
     field public static final androidx.health.services.client.data.LocationAccuracy.Companion Companion;
   }
 
@@ -706,24 +674,17 @@
     field public static final double BEARING_UNAVAILABLE = -1.0;
   }
 
-  public final class MeasureCapabilities extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.MeasureCapabilities> {
+  public final class MeasureCapabilities {
     ctor public MeasureCapabilities(java.util.Set<? extends androidx.health.services.client.data.DeltaDataType<?,?>> supportedDataTypesMeasure);
-    method public androidx.health.services.client.proto.DataProto.MeasureCapabilities getProto();
     method public java.util.Set<androidx.health.services.client.data.DeltaDataType<?,?>> getSupportedDataTypesMeasure();
     property public final java.util.Set<androidx.health.services.client.data.DeltaDataType<?,?>> supportedDataTypesMeasure;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.MeasureCapabilities> CREATOR;
-    field public static final androidx.health.services.client.data.MeasureCapabilities.Companion Companion;
   }
 
-  public static final class MeasureCapabilities.Companion {
-  }
-
-  public final class MilestoneMarkerSummary extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.MilestoneMarkerSummary> {
+  public final class MilestoneMarkerSummary {
     ctor public MilestoneMarkerSummary(java.time.Instant startTime, java.time.Instant endTime, java.time.Duration activeDuration, androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number> achievedGoal, androidx.health.services.client.data.DataPointContainer summaryMetrics);
     method public androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number> getAchievedGoal();
     method public java.time.Duration getActiveDuration();
     method public java.time.Instant getEndTime();
-    method public androidx.health.services.client.proto.DataProto.MilestoneMarkerSummary getProto();
     method public java.time.Instant getStartTime();
     method public androidx.health.services.client.data.DataPointContainer getSummaryMetrics();
     property public final androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number> achievedGoal;
@@ -731,11 +692,6 @@
     property public final java.time.Instant endTime;
     property public final java.time.Instant startTime;
     property public final androidx.health.services.client.data.DataPointContainer summaryMetrics;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.MilestoneMarkerSummary> CREATOR;
-    field public static final androidx.health.services.client.data.MilestoneMarkerSummary.Companion Companion;
-  }
-
-  public static final class MilestoneMarkerSummary.Companion {
   }
 
   public final class PassiveGoal {
@@ -744,19 +700,17 @@
     property public final androidx.health.services.client.data.DataTypeCondition<? extends java.lang.Number,? extends androidx.health.services.client.data.DeltaDataType<? extends java.lang.Number,?>> dataTypeCondition;
   }
 
-  public final class PassiveListenerConfig extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.PassiveListenerConfig> {
-    ctor public PassiveListenerConfig(java.util.Set<? extends androidx.health.services.client.data.DataType<? extends java.lang.Object,? extends androidx.health.services.client.data.DataPoint<?>>> dataTypes, boolean shouldRequestUserActivityState, java.util.Set<androidx.health.services.client.data.PassiveGoal> dailyGoals, java.util.Set<androidx.health.services.client.data.HealthEvent.Type> healthEventTypes);
+  public final class PassiveListenerConfig {
+    ctor public PassiveListenerConfig(java.util.Set<? extends androidx.health.services.client.data.DataType<? extends java.lang.Object,? extends androidx.health.services.client.data.DataPoint<?>>> dataTypes, boolean shouldUserActivityInfoBeRequested, java.util.Set<androidx.health.services.client.data.PassiveGoal> dailyGoals, java.util.Set<androidx.health.services.client.data.HealthEvent.Type> healthEventTypes);
     method public static androidx.health.services.client.data.PassiveListenerConfig.Builder builder();
     method public java.util.Set<androidx.health.services.client.data.PassiveGoal> getDailyGoals();
     method public java.util.Set<androidx.health.services.client.data.DataType<? extends java.lang.Object,? extends androidx.health.services.client.data.DataPoint<?>>> getDataTypes();
     method public java.util.Set<androidx.health.services.client.data.HealthEvent.Type> getHealthEventTypes();
-    method public androidx.health.services.client.proto.DataProto.PassiveListenerConfig getProto();
-    method public boolean getShouldRequestUserActivityState();
+    method public boolean getShouldUserActivityInfoBeRequested();
     property public final java.util.Set<androidx.health.services.client.data.PassiveGoal> dailyGoals;
     property public final java.util.Set<androidx.health.services.client.data.DataType<? extends java.lang.Object,? extends androidx.health.services.client.data.DataPoint<?>>> dataTypes;
     property public final java.util.Set<androidx.health.services.client.data.HealthEvent.Type> healthEventTypes;
-    property public final boolean shouldRequestUserActivityState;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.PassiveListenerConfig> CREATOR;
+    property public final boolean shouldUserActivityInfoBeRequested;
     field public static final androidx.health.services.client.data.PassiveListenerConfig.Companion Companion;
   }
 
@@ -766,16 +720,15 @@
     method public androidx.health.services.client.data.PassiveListenerConfig.Builder setDailyGoals(java.util.Set<androidx.health.services.client.data.PassiveGoal> dailyGoals);
     method public androidx.health.services.client.data.PassiveListenerConfig.Builder setDataTypes(java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> dataTypes);
     method public androidx.health.services.client.data.PassiveListenerConfig.Builder setHealthEventTypes(java.util.Set<androidx.health.services.client.data.HealthEvent.Type> healthEventTypes);
-    method public androidx.health.services.client.data.PassiveListenerConfig.Builder setShouldRequestUserActivityState(boolean requestUserActivityState);
+    method public androidx.health.services.client.data.PassiveListenerConfig.Builder setShouldUserActivityInfoBeRequested(boolean shouldUserActivityInfoBeRequested);
   }
 
   public static final class PassiveListenerConfig.Companion {
     method public androidx.health.services.client.data.PassiveListenerConfig.Builder builder();
   }
 
-  public final class PassiveMonitoringCapabilities extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.PassiveMonitoringCapabilities> {
+  public final class PassiveMonitoringCapabilities {
     ctor public PassiveMonitoringCapabilities(java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> supportedDataTypesPassiveMonitoring, java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> supportedDataTypesPassiveGoals, java.util.Set<androidx.health.services.client.data.HealthEvent.Type> supportedHealthEventTypes, java.util.Set<androidx.health.services.client.data.UserActivityState> supportedUserActivityStates);
-    method public androidx.health.services.client.proto.DataProto.PassiveMonitoringCapabilities getProto();
     method public java.util.Set<androidx.health.services.client.data.DataType<?,?>> getSupportedDataTypesPassiveGoals();
     method public java.util.Set<androidx.health.services.client.data.DataType<?,?>> getSupportedDataTypesPassiveMonitoring();
     method public java.util.Set<androidx.health.services.client.data.HealthEvent.Type> getSupportedHealthEventTypes();
@@ -784,43 +737,14 @@
     property public final java.util.Set<androidx.health.services.client.data.DataType<?,?>> supportedDataTypesPassiveMonitoring;
     property public final java.util.Set<androidx.health.services.client.data.HealthEvent.Type> supportedHealthEventTypes;
     property public final java.util.Set<androidx.health.services.client.data.UserActivityState> supportedUserActivityStates;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.PassiveMonitoringCapabilities> CREATOR;
-    field public static final androidx.health.services.client.data.PassiveMonitoringCapabilities.Companion Companion;
   }
 
-  public static final class PassiveMonitoringCapabilities.Companion {
-  }
-
-  public final class PassiveMonitoringUpdate extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.PassiveMonitoringUpdate> {
+  public final class PassiveMonitoringUpdate {
     ctor public PassiveMonitoringUpdate(androidx.health.services.client.data.DataPointContainer dataPoints, java.util.List<androidx.health.services.client.data.UserActivityInfo> userActivityInfoUpdates);
-    method public static androidx.health.services.client.data.PassiveMonitoringUpdate? fromIntent(android.content.Intent intent);
     method public androidx.health.services.client.data.DataPointContainer getDataPoints();
-    method public androidx.health.services.client.proto.DataProto.PassiveMonitoringUpdate getProto();
     method public java.util.List<androidx.health.services.client.data.UserActivityInfo> getUserActivityInfoUpdates();
-    method public void putToIntent(android.content.Intent intent);
     property public final androidx.health.services.client.data.DataPointContainer dataPoints;
     property public final java.util.List<androidx.health.services.client.data.UserActivityInfo> userActivityInfoUpdates;
-    field public static final String ACTION_DATA = "hs.passivemonitoring.DATA";
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.PassiveMonitoringUpdate> CREATOR;
-    field public static final androidx.health.services.client.data.PassiveMonitoringUpdate.Companion Companion;
-  }
-
-  public static final class PassiveMonitoringUpdate.Companion {
-    method public androidx.health.services.client.data.PassiveMonitoringUpdate? fromIntent(android.content.Intent intent);
-  }
-
-  public abstract class ProtoParcelable<T extends com.google.protobuf.MessageLite> implements android.os.Parcelable {
-    ctor public ProtoParcelable();
-    method public int describeContents();
-    method protected final byte[] getBytes();
-    method public abstract T getProto();
-    method public void writeToParcel(android.os.Parcel dest, int flags);
-    property protected final byte[] bytes;
-    property public abstract T proto;
-    field public static final androidx.health.services.client.data.ProtoParcelable.Companion Companion;
-  }
-
-  public static final class ProtoParcelable.Companion {
   }
 
   public final class SampleDataPoint<T> extends androidx.health.services.client.data.DataPoint<T> {
@@ -856,20 +780,18 @@
   public static final class StatisticalDataPoint.Companion {
   }
 
-  public final class UserActivityInfo extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.UserActivityInfo> {
+  public final class UserActivityInfo {
     ctor public UserActivityInfo(androidx.health.services.client.data.UserActivityState userActivityState, androidx.health.services.client.data.ExerciseInfo? exerciseInfo, java.time.Instant stateChangeTime);
     method public static androidx.health.services.client.data.UserActivityInfo createActiveExerciseState(androidx.health.services.client.data.ExerciseInfo exerciseInfo, java.time.Instant stateChangeTime);
     method public static androidx.health.services.client.data.UserActivityInfo createAsleepState(java.time.Instant stateChangeTime);
     method public static androidx.health.services.client.data.UserActivityInfo createPassiveActivityState(java.time.Instant stateChangeTime);
     method public static androidx.health.services.client.data.UserActivityInfo createUnknownTypeState(java.time.Instant stateChangeTime);
     method public androidx.health.services.client.data.ExerciseInfo? getExerciseInfo();
-    method public androidx.health.services.client.proto.DataProto.UserActivityInfo getProto();
     method public java.time.Instant getStateChangeTime();
     method public androidx.health.services.client.data.UserActivityState getUserActivityState();
     property public final androidx.health.services.client.data.ExerciseInfo? exerciseInfo;
     property public final java.time.Instant stateChangeTime;
     property public final androidx.health.services.client.data.UserActivityState userActivityState;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.UserActivityInfo> CREATOR;
     field public static final androidx.health.services.client.data.UserActivityInfo.Companion Companion;
   }
 
@@ -896,18 +818,12 @@
   public static final class UserActivityState.Companion {
   }
 
-  public final class WarmUpConfig extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.WarmUpConfig> {
+  public final class WarmUpConfig {
     ctor public WarmUpConfig(androidx.health.services.client.data.ExerciseType exerciseType, java.util.Set<? extends androidx.health.services.client.data.DeltaDataType<?,?>> dataTypes);
     method public java.util.Set<androidx.health.services.client.data.DeltaDataType<?,?>> getDataTypes();
     method public androidx.health.services.client.data.ExerciseType getExerciseType();
-    method public androidx.health.services.client.proto.DataProto.WarmUpConfig getProto();
     property public final java.util.Set<androidx.health.services.client.data.DeltaDataType<?,?>> dataTypes;
     property public final androidx.health.services.client.data.ExerciseType exerciseType;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.WarmUpConfig> CREATOR;
-    field public static final androidx.health.services.client.data.WarmUpConfig.Companion Companion;
-  }
-
-  public static final class WarmUpConfig.Companion {
   }
 
 }
diff --git a/health/health-services-client/api/restricted_current.txt b/health/health-services-client/api/restricted_current.txt
index 0eb1f5c..137fe7b 100644
--- a/health/health-services-client/api/restricted_current.txt
+++ b/health/health-services-client/api/restricted_current.txt
@@ -68,12 +68,11 @@
   public abstract class PassiveListenerService extends android.app.Service {
     ctor public PassiveListenerService();
     method public final android.os.IBinder? onBind(android.content.Intent intent);
-    method public final void onGoalCompleted(androidx.health.services.client.data.PassiveGoal goal);
-    method public final void onHealthEventReceived(androidx.health.services.client.data.HealthEvent event);
-    method public final void onNewDataPointsReceived(androidx.health.services.client.data.DataPointContainer dataPoints);
-    method public final void onPermissionLost();
-    method public final void onUserActivityInfoReceived(androidx.health.services.client.data.UserActivityInfo info);
-    field public static final String TAG = "PassiveListenerService";
+    method public void onGoalCompleted(androidx.health.services.client.data.PassiveGoal goal);
+    method public void onHealthEventReceived(androidx.health.services.client.data.HealthEvent event);
+    method public void onNewDataPointsReceived(androidx.health.services.client.data.DataPointContainer dataPoints);
+    method public void onPermissionLost();
+    method public void onUserActivityInfoReceived(androidx.health.services.client.data.UserActivityInfo info);
   }
 
   public interface PassiveMonitoringClient {
@@ -139,7 +138,7 @@
     property public androidx.health.services.client.data.DataType<T,? extends androidx.health.services.client.data.DataPoint<T>> dataType;
   }
 
-  public abstract class DataPointAccuracy extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.DataPointAccuracy> {
+  public abstract class DataPointAccuracy {
     ctor public DataPointAccuracy();
   }
 
@@ -273,21 +272,15 @@
     ctor public DeltaDataType(String name, androidx.health.services.client.data.DataType.TimeType timeType, Class<T> valueClass);
   }
 
-  public final class ExerciseCapabilities extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.ExerciseCapabilities> {
+  public final class ExerciseCapabilities {
     ctor public ExerciseCapabilities(java.util.Map<androidx.health.services.client.data.ExerciseType,androidx.health.services.client.data.ExerciseTypeCapabilities> typeToCapabilities);
     method public java.util.Set<androidx.health.services.client.data.ExerciseType> getAutoPauseAndResumeEnabledExercises();
     method public androidx.health.services.client.data.ExerciseTypeCapabilities getExerciseTypeCapabilities(androidx.health.services.client.data.ExerciseType exercise);
-    method public androidx.health.services.client.proto.DataProto.ExerciseCapabilities getProto();
     method public java.util.Set<androidx.health.services.client.data.ExerciseType> getSupportedExerciseTypes();
     method public java.util.Map<androidx.health.services.client.data.ExerciseType,androidx.health.services.client.data.ExerciseTypeCapabilities> getTypeToCapabilities();
     property public final java.util.Set<androidx.health.services.client.data.ExerciseType> autoPauseAndResumeEnabledExercises;
     property public final java.util.Set<androidx.health.services.client.data.ExerciseType> supportedExerciseTypes;
     property public final java.util.Map<androidx.health.services.client.data.ExerciseType,androidx.health.services.client.data.ExerciseTypeCapabilities> typeToCapabilities;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.ExerciseCapabilities> CREATOR;
-    field public static final androidx.health.services.client.data.ExerciseCapabilities.Companion Companion;
-  }
-
-  public static final class ExerciseCapabilities.Companion {
   }
 
   public final class ExerciseConfig {
@@ -326,14 +319,15 @@
     method public androidx.health.services.client.data.ExerciseConfig.Builder builder(androidx.health.services.client.data.ExerciseType exerciseType);
   }
 
-  public final class ExerciseGoal<T extends java.lang.Number> extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.ExerciseGoal> {
+  public final class ExerciseGoal<T extends java.lang.Number> implements android.os.Parcelable {
     method public static <T extends java.lang.Number> androidx.health.services.client.data.ExerciseGoal<T> createMilestone(androidx.health.services.client.data.DataTypeCondition<T,androidx.health.services.client.data.AggregateDataType<T,?>> condition, T period);
     method public static <T extends java.lang.Number> androidx.health.services.client.data.ExerciseGoal<T> createMilestoneGoalWithUpdatedThreshold(androidx.health.services.client.data.ExerciseGoal<T> goal, T newThreshold);
     method public static <T extends java.lang.Number> androidx.health.services.client.data.ExerciseGoal<T> createOneTimeGoal(androidx.health.services.client.data.DataTypeCondition<T,androidx.health.services.client.data.AggregateDataType<T,?>> condition);
+    method public int describeContents();
     method public androidx.health.services.client.data.DataTypeCondition<T,androidx.health.services.client.data.AggregateDataType<T,?>> getDataTypeCondition();
     method public androidx.health.services.client.data.ExerciseGoalType getExerciseGoalType();
     method public T? getPeriod();
-    method public androidx.health.services.client.proto.DataProto.ExerciseGoal getProto();
+    method public void writeToParcel(android.os.Parcel dest, int flags);
     property public final androidx.health.services.client.data.DataTypeCondition<T,androidx.health.services.client.data.AggregateDataType<T,?>> dataTypeCondition;
     property public final androidx.health.services.client.data.ExerciseGoalType exerciseGoalType;
     property public final T? period;
@@ -362,18 +356,12 @@
     method public androidx.health.services.client.data.ExerciseGoalType? fromId(int id);
   }
 
-  public final class ExerciseInfo extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.ExerciseInfo> {
+  public final class ExerciseInfo {
     ctor public ExerciseInfo(int exerciseTrackedStatus, androidx.health.services.client.data.ExerciseType exerciseType);
     method public int getExerciseTrackedStatus();
     method public androidx.health.services.client.data.ExerciseType getExerciseType();
-    method public androidx.health.services.client.proto.DataProto.ExerciseInfo getProto();
     property public final int exerciseTrackedStatus;
     property public final androidx.health.services.client.data.ExerciseType exerciseType;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.ExerciseInfo> CREATOR;
-    field public static final androidx.health.services.client.data.ExerciseInfo.Companion Companion;
-  }
-
-  public static final class ExerciseInfo.Companion {
   }
 
   public final class ExerciseLapSummary {
@@ -405,8 +393,6 @@
     property public final boolean isResuming;
     property public final String name;
     field public static final androidx.health.services.client.data.ExerciseState ACTIVE;
-    field public static final androidx.health.services.client.data.ExerciseState AUTO_ENDING;
-    field public static final androidx.health.services.client.data.ExerciseState AUTO_ENDING_PERMISSION_LOST;
     field public static final androidx.health.services.client.data.ExerciseState AUTO_PAUSED;
     field public static final androidx.health.services.client.data.ExerciseState AUTO_PAUSING;
     field public static final androidx.health.services.client.data.ExerciseState AUTO_RESUMING;
@@ -414,8 +400,6 @@
     field public static final androidx.health.services.client.data.ExerciseState ENDED;
     field public static final androidx.health.services.client.data.ExerciseState ENDING;
     field public static final androidx.health.services.client.data.ExerciseState PREPARING;
-    field public static final androidx.health.services.client.data.ExerciseState TERMINATING;
-    field public static final androidx.health.services.client.data.ExerciseState USER_ENDING;
     field public static final androidx.health.services.client.data.ExerciseState USER_PAUSED;
     field public static final androidx.health.services.client.data.ExerciseState USER_PAUSING;
     field public static final androidx.health.services.client.data.ExerciseState USER_RESUMING;
@@ -536,9 +520,8 @@
     method public androidx.health.services.client.data.ExerciseType fromId(int id);
   }
 
-  public final class ExerciseTypeCapabilities extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.ExerciseTypeCapabilities> {
+  public final class ExerciseTypeCapabilities {
     ctor public ExerciseTypeCapabilities(java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> supportedDataTypes, java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,? extends java.util.Set<androidx.health.services.client.data.ComparisonType>> supportedGoals, java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,? extends java.util.Set<androidx.health.services.client.data.ComparisonType>> supportedMilestones, boolean supportsAutoPauseAndResume);
-    method public androidx.health.services.client.proto.DataProto.ExerciseTypeCapabilities getProto();
     method public java.util.Set<androidx.health.services.client.data.DataType<?,?>> getSupportedDataTypes();
     method public java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,java.util.Set<androidx.health.services.client.data.ComparisonType>> getSupportedGoals();
     method public java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,java.util.Set<androidx.health.services.client.data.ComparisonType>> getSupportedMilestones();
@@ -547,15 +530,10 @@
     property public final java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,java.util.Set<androidx.health.services.client.data.ComparisonType>> supportedGoals;
     property public final java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,java.util.Set<androidx.health.services.client.data.ComparisonType>> supportedMilestones;
     property public final boolean supportsAutoPauseAndResume;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.ExerciseTypeCapabilities> CREATOR;
-    field public static final androidx.health.services.client.data.ExerciseTypeCapabilities.Companion Companion;
   }
 
-  public static final class ExerciseTypeCapabilities.Companion {
-  }
-
-  public final class ExerciseUpdate extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.ExerciseUpdate> {
-    ctor public ExerciseUpdate(java.time.Instant? startTime, java.time.Duration? updateDurationFromBoot, androidx.health.services.client.data.DataPointContainer latestMetrics, java.util.Set<? extends androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number>> latestAchievedGoals, java.util.Set<androidx.health.services.client.data.MilestoneMarkerSummary> latestMilestoneMarkerSummaries, androidx.health.services.client.data.ExerciseConfig? exerciseConfig, androidx.health.services.client.data.ExerciseUpdate.ActiveDurationCheckpoint? activeDurationCheckpoint, androidx.health.services.client.data.ExerciseStateInfo exerciseStateInfo);
+  public final class ExerciseUpdate {
+    ctor public ExerciseUpdate(androidx.health.services.client.data.DataPointContainer latestMetrics, java.util.Set<? extends androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number>> latestAchievedGoals, java.util.Set<androidx.health.services.client.data.MilestoneMarkerSummary> latestMilestoneMarkerSummaries, androidx.health.services.client.data.ExerciseStateInfo exerciseStateInfo, optional androidx.health.services.client.data.ExerciseConfig? exerciseConfig, optional androidx.health.services.client.data.ExerciseUpdate.ActiveDurationCheckpoint? activeDurationCheckpoint, optional java.time.Duration? updateDurationFromBoot, optional java.time.Instant? startTime);
     method public java.time.Duration getActiveDurationAtDataPoint(androidx.health.services.client.data.IntervalDataPoint<?> dataPoint);
     method public java.time.Duration getActiveDurationAtDataPoint(androidx.health.services.client.data.SampleDataPoint<?> dataPoint);
     method public androidx.health.services.client.data.ExerciseUpdate.ActiveDurationCheckpoint? getActiveDurationCheckpoint();
@@ -564,7 +542,6 @@
     method public java.util.Set<androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number>> getLatestAchievedGoals();
     method public androidx.health.services.client.data.DataPointContainer getLatestMetrics();
     method public java.util.Set<androidx.health.services.client.data.MilestoneMarkerSummary> getLatestMilestoneMarkerSummaries();
-    method public androidx.health.services.client.proto.DataProto.ExerciseUpdate getProto();
     method public java.time.Instant? getStartTime();
     method public java.time.Duration getUpdateDurationFromBoot();
     property public final androidx.health.services.client.data.ExerciseUpdate.ActiveDurationCheckpoint? activeDurationCheckpoint;
@@ -574,7 +551,6 @@
     property public final androidx.health.services.client.data.DataPointContainer latestMetrics;
     property public final java.util.Set<androidx.health.services.client.data.MilestoneMarkerSummary> latestMilestoneMarkerSummaries;
     property public final java.time.Instant? startTime;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.ExerciseUpdate> CREATOR;
     field public static final androidx.health.services.client.data.ExerciseUpdate.Companion Companion;
   }
 
@@ -614,14 +590,8 @@
 
   public final class HeartRateAccuracy extends androidx.health.services.client.data.DataPointAccuracy {
     ctor public HeartRateAccuracy(androidx.health.services.client.data.HeartRateAccuracy.SensorStatus sensorStatus);
-    method public androidx.health.services.client.proto.DataProto.DataPointAccuracy getProto();
     method public androidx.health.services.client.data.HeartRateAccuracy.SensorStatus getSensorStatus();
     property public final androidx.health.services.client.data.HeartRateAccuracy.SensorStatus sensorStatus;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.HeartRateAccuracy> CREATOR;
-    field public static final androidx.health.services.client.data.HeartRateAccuracy.Companion Companion;
-  }
-
-  public static final class HeartRateAccuracy.Companion {
   }
 
   public static final class HeartRateAccuracy.SensorStatus {
@@ -662,11 +632,9 @@
   public final class LocationAccuracy extends androidx.health.services.client.data.DataPointAccuracy {
     ctor public LocationAccuracy(@FloatRange(from=0.0) double horizontalPositionErrorMeters, optional @FloatRange(from=0.0) double verticalPositionErrorMeters);
     method public double getHorizontalPositionErrorMeters();
-    method public androidx.health.services.client.proto.DataProto.DataPointAccuracy getProto();
     method public double getVerticalPositionErrorMeters();
     property public final double horizontalPositionErrorMeters;
     property public final double verticalPositionErrorMeters;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.LocationAccuracy> CREATOR;
     field public static final androidx.health.services.client.data.LocationAccuracy.Companion Companion;
   }
 
@@ -706,24 +674,17 @@
     field public static final double BEARING_UNAVAILABLE = -1.0;
   }
 
-  public final class MeasureCapabilities extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.MeasureCapabilities> {
+  public final class MeasureCapabilities {
     ctor public MeasureCapabilities(java.util.Set<? extends androidx.health.services.client.data.DeltaDataType<?,?>> supportedDataTypesMeasure);
-    method public androidx.health.services.client.proto.DataProto.MeasureCapabilities getProto();
     method public java.util.Set<androidx.health.services.client.data.DeltaDataType<?,?>> getSupportedDataTypesMeasure();
     property public final java.util.Set<androidx.health.services.client.data.DeltaDataType<?,?>> supportedDataTypesMeasure;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.MeasureCapabilities> CREATOR;
-    field public static final androidx.health.services.client.data.MeasureCapabilities.Companion Companion;
   }
 
-  public static final class MeasureCapabilities.Companion {
-  }
-
-  public final class MilestoneMarkerSummary extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.MilestoneMarkerSummary> {
+  public final class MilestoneMarkerSummary {
     ctor public MilestoneMarkerSummary(java.time.Instant startTime, java.time.Instant endTime, java.time.Duration activeDuration, androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number> achievedGoal, androidx.health.services.client.data.DataPointContainer summaryMetrics);
     method public androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number> getAchievedGoal();
     method public java.time.Duration getActiveDuration();
     method public java.time.Instant getEndTime();
-    method public androidx.health.services.client.proto.DataProto.MilestoneMarkerSummary getProto();
     method public java.time.Instant getStartTime();
     method public androidx.health.services.client.data.DataPointContainer getSummaryMetrics();
     property public final androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number> achievedGoal;
@@ -731,11 +692,6 @@
     property public final java.time.Instant endTime;
     property public final java.time.Instant startTime;
     property public final androidx.health.services.client.data.DataPointContainer summaryMetrics;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.MilestoneMarkerSummary> CREATOR;
-    field public static final androidx.health.services.client.data.MilestoneMarkerSummary.Companion Companion;
-  }
-
-  public static final class MilestoneMarkerSummary.Companion {
   }
 
   public final class PassiveGoal {
@@ -744,19 +700,17 @@
     property public final androidx.health.services.client.data.DataTypeCondition<? extends java.lang.Number,? extends androidx.health.services.client.data.DeltaDataType<? extends java.lang.Number,?>> dataTypeCondition;
   }
 
-  public final class PassiveListenerConfig extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.PassiveListenerConfig> {
-    ctor public PassiveListenerConfig(java.util.Set<? extends androidx.health.services.client.data.DataType<? extends java.lang.Object,? extends androidx.health.services.client.data.DataPoint<?>>> dataTypes, boolean shouldRequestUserActivityState, java.util.Set<androidx.health.services.client.data.PassiveGoal> dailyGoals, java.util.Set<androidx.health.services.client.data.HealthEvent.Type> healthEventTypes);
+  public final class PassiveListenerConfig {
+    ctor public PassiveListenerConfig(java.util.Set<? extends androidx.health.services.client.data.DataType<? extends java.lang.Object,? extends androidx.health.services.client.data.DataPoint<?>>> dataTypes, boolean shouldUserActivityInfoBeRequested, java.util.Set<androidx.health.services.client.data.PassiveGoal> dailyGoals, java.util.Set<androidx.health.services.client.data.HealthEvent.Type> healthEventTypes);
     method public static androidx.health.services.client.data.PassiveListenerConfig.Builder builder();
     method public java.util.Set<androidx.health.services.client.data.PassiveGoal> getDailyGoals();
     method public java.util.Set<androidx.health.services.client.data.DataType<? extends java.lang.Object,? extends androidx.health.services.client.data.DataPoint<?>>> getDataTypes();
     method public java.util.Set<androidx.health.services.client.data.HealthEvent.Type> getHealthEventTypes();
-    method public androidx.health.services.client.proto.DataProto.PassiveListenerConfig getProto();
-    method public boolean getShouldRequestUserActivityState();
+    method public boolean getShouldUserActivityInfoBeRequested();
     property public final java.util.Set<androidx.health.services.client.data.PassiveGoal> dailyGoals;
     property public final java.util.Set<androidx.health.services.client.data.DataType<? extends java.lang.Object,? extends androidx.health.services.client.data.DataPoint<?>>> dataTypes;
     property public final java.util.Set<androidx.health.services.client.data.HealthEvent.Type> healthEventTypes;
-    property public final boolean shouldRequestUserActivityState;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.PassiveListenerConfig> CREATOR;
+    property public final boolean shouldUserActivityInfoBeRequested;
     field public static final androidx.health.services.client.data.PassiveListenerConfig.Companion Companion;
   }
 
@@ -766,16 +720,15 @@
     method public androidx.health.services.client.data.PassiveListenerConfig.Builder setDailyGoals(java.util.Set<androidx.health.services.client.data.PassiveGoal> dailyGoals);
     method public androidx.health.services.client.data.PassiveListenerConfig.Builder setDataTypes(java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> dataTypes);
     method public androidx.health.services.client.data.PassiveListenerConfig.Builder setHealthEventTypes(java.util.Set<androidx.health.services.client.data.HealthEvent.Type> healthEventTypes);
-    method public androidx.health.services.client.data.PassiveListenerConfig.Builder setShouldRequestUserActivityState(boolean requestUserActivityState);
+    method public androidx.health.services.client.data.PassiveListenerConfig.Builder setShouldUserActivityInfoBeRequested(boolean shouldUserActivityInfoBeRequested);
   }
 
   public static final class PassiveListenerConfig.Companion {
     method public androidx.health.services.client.data.PassiveListenerConfig.Builder builder();
   }
 
-  public final class PassiveMonitoringCapabilities extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.PassiveMonitoringCapabilities> {
+  public final class PassiveMonitoringCapabilities {
     ctor public PassiveMonitoringCapabilities(java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> supportedDataTypesPassiveMonitoring, java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> supportedDataTypesPassiveGoals, java.util.Set<androidx.health.services.client.data.HealthEvent.Type> supportedHealthEventTypes, java.util.Set<androidx.health.services.client.data.UserActivityState> supportedUserActivityStates);
-    method public androidx.health.services.client.proto.DataProto.PassiveMonitoringCapabilities getProto();
     method public java.util.Set<androidx.health.services.client.data.DataType<?,?>> getSupportedDataTypesPassiveGoals();
     method public java.util.Set<androidx.health.services.client.data.DataType<?,?>> getSupportedDataTypesPassiveMonitoring();
     method public java.util.Set<androidx.health.services.client.data.HealthEvent.Type> getSupportedHealthEventTypes();
@@ -784,43 +737,14 @@
     property public final java.util.Set<androidx.health.services.client.data.DataType<?,?>> supportedDataTypesPassiveMonitoring;
     property public final java.util.Set<androidx.health.services.client.data.HealthEvent.Type> supportedHealthEventTypes;
     property public final java.util.Set<androidx.health.services.client.data.UserActivityState> supportedUserActivityStates;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.PassiveMonitoringCapabilities> CREATOR;
-    field public static final androidx.health.services.client.data.PassiveMonitoringCapabilities.Companion Companion;
   }
 
-  public static final class PassiveMonitoringCapabilities.Companion {
-  }
-
-  public final class PassiveMonitoringUpdate extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.PassiveMonitoringUpdate> {
+  public final class PassiveMonitoringUpdate {
     ctor public PassiveMonitoringUpdate(androidx.health.services.client.data.DataPointContainer dataPoints, java.util.List<androidx.health.services.client.data.UserActivityInfo> userActivityInfoUpdates);
-    method public static androidx.health.services.client.data.PassiveMonitoringUpdate? fromIntent(android.content.Intent intent);
     method public androidx.health.services.client.data.DataPointContainer getDataPoints();
-    method public androidx.health.services.client.proto.DataProto.PassiveMonitoringUpdate getProto();
     method public java.util.List<androidx.health.services.client.data.UserActivityInfo> getUserActivityInfoUpdates();
-    method public void putToIntent(android.content.Intent intent);
     property public final androidx.health.services.client.data.DataPointContainer dataPoints;
     property public final java.util.List<androidx.health.services.client.data.UserActivityInfo> userActivityInfoUpdates;
-    field public static final String ACTION_DATA = "hs.passivemonitoring.DATA";
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.PassiveMonitoringUpdate> CREATOR;
-    field public static final androidx.health.services.client.data.PassiveMonitoringUpdate.Companion Companion;
-  }
-
-  public static final class PassiveMonitoringUpdate.Companion {
-    method public androidx.health.services.client.data.PassiveMonitoringUpdate? fromIntent(android.content.Intent intent);
-  }
-
-  public abstract class ProtoParcelable<T extends com.google.protobuf.MessageLite> implements android.os.Parcelable {
-    ctor public ProtoParcelable();
-    method public int describeContents();
-    method protected final byte[] getBytes();
-    method public abstract T getProto();
-    method public void writeToParcel(android.os.Parcel dest, int flags);
-    property protected final byte[] bytes;
-    property public abstract T proto;
-    field public static final androidx.health.services.client.data.ProtoParcelable.Companion Companion;
-  }
-
-  public static final class ProtoParcelable.Companion {
   }
 
   public final class SampleDataPoint<T> extends androidx.health.services.client.data.DataPoint<T> {
@@ -856,20 +780,18 @@
   public static final class StatisticalDataPoint.Companion {
   }
 
-  public final class UserActivityInfo extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.UserActivityInfo> {
+  public final class UserActivityInfo {
     ctor public UserActivityInfo(androidx.health.services.client.data.UserActivityState userActivityState, androidx.health.services.client.data.ExerciseInfo? exerciseInfo, java.time.Instant stateChangeTime);
     method public static androidx.health.services.client.data.UserActivityInfo createActiveExerciseState(androidx.health.services.client.data.ExerciseInfo exerciseInfo, java.time.Instant stateChangeTime);
     method public static androidx.health.services.client.data.UserActivityInfo createAsleepState(java.time.Instant stateChangeTime);
     method public static androidx.health.services.client.data.UserActivityInfo createPassiveActivityState(java.time.Instant stateChangeTime);
     method public static androidx.health.services.client.data.UserActivityInfo createUnknownTypeState(java.time.Instant stateChangeTime);
     method public androidx.health.services.client.data.ExerciseInfo? getExerciseInfo();
-    method public androidx.health.services.client.proto.DataProto.UserActivityInfo getProto();
     method public java.time.Instant getStateChangeTime();
     method public androidx.health.services.client.data.UserActivityState getUserActivityState();
     property public final androidx.health.services.client.data.ExerciseInfo? exerciseInfo;
     property public final java.time.Instant stateChangeTime;
     property public final androidx.health.services.client.data.UserActivityState userActivityState;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.UserActivityInfo> CREATOR;
     field public static final androidx.health.services.client.data.UserActivityInfo.Companion Companion;
   }
 
@@ -896,18 +818,12 @@
   public static final class UserActivityState.Companion {
   }
 
-  public final class WarmUpConfig extends androidx.health.services.client.data.ProtoParcelable<androidx.health.services.client.proto.DataProto.WarmUpConfig> {
+  public final class WarmUpConfig {
     ctor public WarmUpConfig(androidx.health.services.client.data.ExerciseType exerciseType, java.util.Set<? extends androidx.health.services.client.data.DeltaDataType<?,?>> dataTypes);
     method public java.util.Set<androidx.health.services.client.data.DeltaDataType<?,?>> getDataTypes();
     method public androidx.health.services.client.data.ExerciseType getExerciseType();
-    method public androidx.health.services.client.proto.DataProto.WarmUpConfig getProto();
     property public final java.util.Set<androidx.health.services.client.data.DeltaDataType<?,?>> dataTypes;
     property public final androidx.health.services.client.data.ExerciseType exerciseType;
-    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.WarmUpConfig> CREATOR;
-    field public static final androidx.health.services.client.data.WarmUpConfig.Companion Companion;
-  }
-
-  public static final class WarmUpConfig.Companion {
   }
 
 }
diff --git a/health/health-services-client/src/main/java/androidx/health/services/client/PassiveListenerService.kt b/health/health-services-client/src/main/java/androidx/health/services/client/PassiveListenerService.kt
index 7b3f66d33..a497e64 100644
--- a/health/health-services-client/src/main/java/androidx/health/services/client/PassiveListenerService.kt
+++ b/health/health-services-client/src/main/java/androidx/health/services/client/PassiveListenerService.kt
@@ -60,28 +60,28 @@
      *
      * @param dataPoints a list of new [DataPoint]s generated
      */
-    public fun onNewDataPointsReceived(dataPoints: DataPointContainer) {}
+    public open fun onNewDataPointsReceived(dataPoints: DataPointContainer) {}
 
     /**
      * Called when new [UserActivityInfo] is generated.
      *
      * @param info a new [UserActivityInfo] representing the current state
      */
-    public fun onUserActivityInfoReceived(info: UserActivityInfo) {}
+    public open fun onUserActivityInfoReceived(info: UserActivityInfo) {}
 
     /**
      * Called when a [PassiveGoal] has been completed.
      *
      * @param goal the [PassiveGoal] that has been completed
      */
-    public fun onGoalCompleted(goal: PassiveGoal) {}
+    public open fun onGoalCompleted(goal: PassiveGoal) {}
 
     /**
      * Called when a [HealthEvent] has been detected.
      *
      * @param event the [HealthEvent] that has been detected
      */
-    public fun onHealthEventReceived(event: HealthEvent) {}
+    public open fun onHealthEventReceived(event: HealthEvent) {}
 
     /**
      * Called when the client has lost permission for the passive listener request. If this happens,
@@ -89,7 +89,7 @@
      * client can use this callback to detect the problem and either prompt the user to re-grant the
      * permissions or re-register while requesting only that which the app does have permission for.
      */
-    public fun onPermissionLost() {}
+    public open fun onPermissionLost() {}
 
     private inner class IPassiveListenerServiceWrapper : IPassiveListenerService.Stub() {
 
@@ -130,6 +130,6 @@
     }
 
     private companion object {
-        const val TAG = "PassiveListenerService"
+        private const val TAG = "PassiveListenerService"
     }
 }
diff --git a/health/health-services-client/src/main/java/androidx/health/services/client/data/DataPointAccuracy.kt b/health/health-services-client/src/main/java/androidx/health/services/client/data/DataPointAccuracy.kt
index ac2b286..7f2069a 100644
--- a/health/health-services-client/src/main/java/androidx/health/services/client/data/DataPointAccuracy.kt
+++ b/health/health-services-client/src/main/java/androidx/health/services/client/data/DataPointAccuracy.kt
@@ -23,7 +23,14 @@
 
 /** Accuracy of a [DataPoint]. */
 @Suppress("ParcelCreator", "ParcelNotFinal")
-public abstract class DataPointAccuracy : ProtoParcelable<DataProto.DataPointAccuracy>() {
+public abstract class DataPointAccuracy {
+
+    internal val proto: DataProto.DataPointAccuracy
+        get() = when (this) {
+            is LocationAccuracy -> getDataPointAccuracyProto()
+            is HeartRateAccuracy -> getDataPointAccuracyProto()
+            else -> throw IllegalStateException("No serialization available for this type.")
+        }
 
     internal companion object {
         internal fun fromProto(proto: DataProto.DataPointAccuracy): DataPointAccuracy =
diff --git a/health/health-services-client/src/main/java/androidx/health/services/client/data/ExerciseCapabilities.kt b/health/health-services-client/src/main/java/androidx/health/services/client/data/ExerciseCapabilities.kt
index 1767b9a..d2a684e 100644
--- a/health/health-services-client/src/main/java/androidx/health/services/client/data/ExerciseCapabilities.kt
+++ b/health/health-services-client/src/main/java/androidx/health/services/client/data/ExerciseCapabilities.kt
@@ -16,7 +16,6 @@
 
 package androidx.health.services.client.data
 
-import android.os.Parcelable
 import androidx.health.services.client.proto.DataProto
 import androidx.health.services.client.proto.DataProto.ExerciseCapabilities.TypeToCapabilitiesEntry
 
@@ -30,7 +29,7 @@
      * Mapping for each supported [ExerciseType] to its [ExerciseTypeCapabilities] on this device.
      */
     public val typeToCapabilities: Map<ExerciseType, ExerciseTypeCapabilities>,
-) : ProtoParcelable<DataProto.ExerciseCapabilities>() {
+) {
 
     internal constructor(
         proto: DataProto.ExerciseCapabilities
@@ -43,8 +42,7 @@
             .toMap()
     )
 
-    /** @hide */
-    override val proto: DataProto.ExerciseCapabilities =
+    internal val proto: DataProto.ExerciseCapabilities =
         DataProto.ExerciseCapabilities.newBuilder()
             .addAllTypeToCapabilities(
                 typeToCapabilities
@@ -85,13 +83,4 @@
         }
 
     override fun toString(): String = "ExerciseCapabilities(typeToCapabilities=$typeToCapabilities)"
-
-    public companion object {
-
-        @JvmField
-        public val CREATOR: Parcelable.Creator<ExerciseCapabilities> = newCreator { bytes ->
-            val proto = DataProto.ExerciseCapabilities.parseFrom(bytes)
-            ExerciseCapabilities(proto)
-        }
-    }
 }
diff --git a/health/health-services-client/src/main/java/androidx/health/services/client/data/ExerciseGoal.kt b/health/health-services-client/src/main/java/androidx/health/services/client/data/ExerciseGoal.kt
index d09a670..f88d779 100644
--- a/health/health-services-client/src/main/java/androidx/health/services/client/data/ExerciseGoal.kt
+++ b/health/health-services-client/src/main/java/androidx/health/services/client/data/ExerciseGoal.kt
@@ -16,11 +16,14 @@
 
 package androidx.health.services.client.data
 
+import android.annotation.SuppressLint
+import android.os.Parcel
 import android.os.Parcelable
 import androidx.health.services.client.proto.DataProto
 import java.util.Objects
 
 /** Defines a goal for an exercise. */
+@SuppressLint("BanParcelableUsage") // Uses proto in implementation for compat
 class ExerciseGoal<T : Number>
 internal constructor(
     /**
@@ -30,21 +33,25 @@
     val exerciseGoalType: ExerciseGoalType,
     val dataTypeCondition: DataTypeCondition<T, AggregateDataType<T, *>>,
     val period: T? = null,
-) : ProtoParcelable<DataProto.ExerciseGoal>() {
+) : Parcelable {
 
-    /** @hide */
-    override val proto: DataProto.ExerciseGoal = getDataProtoExerciseGoalProto()
+    public override fun describeContents(): Int = 0
 
-    private fun getDataProtoExerciseGoalProto(): DataProto.ExerciseGoal {
-        val builder =
-            DataProto.ExerciseGoal.newBuilder().setExerciseGoalType(exerciseGoalType.toProto())
-                .setDataTypeCondition(dataTypeCondition.proto)
-        if (period != null) {
-            builder.period = dataTypeCondition.dataType.toProtoFromValue(period)
-        }
-        return builder.build()
+    public override fun writeToParcel(dest: Parcel, flags: Int) {
+        dest.writeByteArray(proto.toByteArray())
     }
 
+    internal val proto: DataProto.ExerciseGoal
+        get() {
+            val builder =
+                DataProto.ExerciseGoal.newBuilder().setExerciseGoalType(exerciseGoalType.toProto())
+                    .setDataTypeCondition(dataTypeCondition.proto)
+            if (period != null) {
+                builder.period = dataTypeCondition.dataType.toProtoFromValue(period)
+            }
+            return builder.build()
+        }
+
     // TODO(yeabkal): try to unify equality logic across goal types.
     // TODO(b/186899729): We need a better way to match on achieved goals.
     override fun equals(other: Any?): Boolean {
@@ -83,10 +90,16 @@
 
     companion object {
         @JvmField
-        public val CREATOR: Parcelable.Creator<ExerciseGoal<*>> = newCreator {
-            val proto = DataProto.ExerciseGoal.parseFrom(it)
-            fromProto(proto)
-        }
+        val CREATOR: Parcelable.Creator<ExerciseGoal<*>> =
+            object : Parcelable.Creator<ExerciseGoal<*>> {
+                override fun createFromParcel(source: Parcel): ExerciseGoal<*>? {
+                    val bytes: ByteArray = source.createByteArray() ?: return null
+                    val proto = DataProto.ExerciseGoal.parseFrom(bytes)
+                    return fromProto(proto)
+                }
+
+                override fun newArray(size: Int) = arrayOfNulls<ExerciseGoal<*>>(size)
+            }
 
         @Suppress("UNCHECKED_CAST")
         internal fun fromProto(proto: DataProto.ExerciseGoal): ExerciseGoal<Number> {
diff --git a/health/health-services-client/src/main/java/androidx/health/services/client/data/ExerciseInfo.kt b/health/health-services-client/src/main/java/androidx/health/services/client/data/ExerciseInfo.kt
index 1784790..926b0ee 100644
--- a/health/health-services-client/src/main/java/androidx/health/services/client/data/ExerciseInfo.kt
+++ b/health/health-services-client/src/main/java/androidx/health/services/client/data/ExerciseInfo.kt
@@ -16,7 +16,6 @@
 
 package androidx.health.services.client.data
 
-import android.os.Parcelable
 import androidx.health.services.client.data.ExerciseTrackedStatus.Companion.toProto
 import androidx.health.services.client.proto.DataProto
 
@@ -31,7 +30,7 @@
      * active exercise.
      */
     public val exerciseType: ExerciseType,
-) : ProtoParcelable<DataProto.ExerciseInfo>() {
+) {
 
     internal constructor(
         proto: DataProto.ExerciseInfo
@@ -40,18 +39,9 @@
         ExerciseType.fromProto(proto.exerciseType)
     )
 
-    /** @hide */
-    override val proto: DataProto.ExerciseInfo =
+    internal val proto: DataProto.ExerciseInfo =
         DataProto.ExerciseInfo.newBuilder()
             .setExerciseTrackedStatus(exerciseTrackedStatus.toProto())
             .setExerciseType(exerciseType.toProto())
             .build()
-
-    public companion object {
-        @JvmField
-        public val CREATOR: Parcelable.Creator<ExerciseInfo> = newCreator { bytes ->
-            val proto = DataProto.ExerciseInfo.parseFrom(bytes)
-            ExerciseInfo(proto)
-        }
-    }
 }
diff --git a/health/health-services-client/src/main/java/androidx/health/services/client/data/ExerciseState.kt b/health/health-services-client/src/main/java/androidx/health/services/client/data/ExerciseState.kt
index 29999ed..ef7649f 100644
--- a/health/health-services-client/src/main/java/androidx/health/services/client/data/ExerciseState.kt
+++ b/health/health-services-client/src/main/java/androidx/health/services/client/data/ExerciseState.kt
@@ -152,7 +152,7 @@
          * Used only in the manually started exercise.
          */
         @JvmField
-        public val USER_ENDING: ExerciseState = ExerciseState(9, "USER_ENDING")
+        internal val USER_ENDING: ExerciseState = ExerciseState(9, "USER_ENDING")
 
         /**
          * The exercise has been ended by the user. No new metrics will be exported and a final
@@ -170,7 +170,7 @@
          * Used only in the manually started exercise.
          */
         @JvmField
-        public val AUTO_ENDING: ExerciseState = ExerciseState(11, "AUTO_ENDING")
+        internal val AUTO_ENDING: ExerciseState = ExerciseState(11, "AUTO_ENDING")
 
         /**
          * The exercise has been automatically ended due to a lack of exercise updates being
@@ -187,7 +187,7 @@
          * data for the exercise.
          */
         @JvmField
-        public val AUTO_ENDING_PERMISSION_LOST: ExerciseState =
+        internal val AUTO_ENDING_PERMISSION_LOST: ExerciseState =
             ExerciseState(16, "AUTO_ENDING_PERMISSION_LOST")
 
         /**
@@ -205,7 +205,7 @@
          * Used in both of the manually started exercise and the automatic exercise detection.
          */
         @JvmField
-        public val TERMINATING: ExerciseState = ExerciseState(13, "TERMINATING")
+        internal val TERMINATING: ExerciseState = ExerciseState(13, "TERMINATING")
 
         /**
          * The exercise has been ended because it was superseded by a new exercise being started by
diff --git a/health/health-services-client/src/main/java/androidx/health/services/client/data/ExerciseTypeCapabilities.kt b/health/health-services-client/src/main/java/androidx/health/services/client/data/ExerciseTypeCapabilities.kt
index 9f3b533..9c3dbc9 100644
--- a/health/health-services-client/src/main/java/androidx/health/services/client/data/ExerciseTypeCapabilities.kt
+++ b/health/health-services-client/src/main/java/androidx/health/services/client/data/ExerciseTypeCapabilities.kt
@@ -16,7 +16,6 @@
 
 package androidx.health.services.client.data
 
-import android.os.Parcelable
 import androidx.health.services.client.proto.DataProto
 import androidx.health.services.client.proto.DataProto.ExerciseTypeCapabilities.SupportedGoalEntry
 import androidx.health.services.client.proto.DataProto.ExerciseTypeCapabilities.SupportedMilestoneEntry
@@ -32,7 +31,7 @@
     public val supportedMilestones: Map<AggregateDataType<*, *>, Set<ComparisonType>>,
     /** Returns `true` if the given exercise supports auto pause and resume. */
     public val supportsAutoPauseAndResume: Boolean,
-) : ProtoParcelable<DataProto.ExerciseTypeCapabilities>() {
+) {
 
     internal constructor(
         proto: DataProto.ExerciseTypeCapabilities
@@ -65,8 +64,7 @@
         supportsAutoPauseAndResume = proto.isAutoPauseAndResumeSupported,
     )
 
-    /** @hide */
-    override val proto: DataProto.ExerciseTypeCapabilities =
+    internal val proto: DataProto.ExerciseTypeCapabilities =
         DataProto.ExerciseTypeCapabilities.newBuilder()
             .addAllSupportedDataTypes(supportedDataTypes.map { it.proto })
             .addAllSupportedGoals(
@@ -98,12 +96,4 @@
             "supportedGoals=$supportedGoals, " +
             "supportedMilestones=$supportedMilestones, " +
             "supportsAutoPauseAndResume=$supportsAutoPauseAndResume, "
-
-    public companion object {
-        @JvmField
-        public val CREATOR: Parcelable.Creator<ExerciseTypeCapabilities> = newCreator { bytes ->
-            val proto = DataProto.ExerciseTypeCapabilities.parseFrom(bytes)
-            ExerciseTypeCapabilities(proto)
-        }
-    }
 }
diff --git a/health/health-services-client/src/main/java/androidx/health/services/client/data/ExerciseUpdate.kt b/health/health-services-client/src/main/java/androidx/health/services/client/data/ExerciseUpdate.kt
index 1796d82..243938b 100644
--- a/health/health-services-client/src/main/java/androidx/health/services/client/data/ExerciseUpdate.kt
+++ b/health/health-services-client/src/main/java/androidx/health/services/client/data/ExerciseUpdate.kt
@@ -17,7 +17,6 @@
 package androidx.health.services.client.data
 
 import androidx.health.services.client.proto.DataProto.ExerciseUpdate.LatestMetricsEntry as LatestMetricsEntryProto
-import android.os.Parcelable
 import androidx.annotation.RestrictTo
 import androidx.health.services.client.data.ExerciseEndReason.Companion.toProto
 import androidx.health.services.client.data.ExerciseUpdate.ActiveDurationCheckpoint
@@ -29,15 +28,6 @@
 /** Contains the latest updated state and metrics for the current exercise. */
 @Suppress("ParcelCreator")
 public class ExerciseUpdate(
-    /**
-     * Returns the time at which the exercise was started or `null` if the exercise is in prepare
-     * phase and hasn't started yet.
-     */
-    public val startTime: Instant?,
-
-    /** The duration since boot when this ExerciseUpdate was created. */
-    private val updateDurationFromBoot: Duration?,
-
     /** Returns the list of the latest [DataPoint]s. */
     public val latestMetrics: DataPointContainer,
 
@@ -52,10 +42,16 @@
     public val latestMilestoneMarkerSummaries: Set<MilestoneMarkerSummary>,
 
     /**
+     * Returns the [ExerciseStateInfo] containing the current [ExerciseState] and
+     * [ExerciseEndReason], if applicable.
+     */
+    public val exerciseStateInfo: ExerciseStateInfo,
+
+    /**
      * Returns the [ExerciseConfig] used by the exercise when the [ExerciseUpdate] was dispatched
      * and returns `null` if the exercise is in prepare phase and hasn't been started yet.
      */
-    public val exerciseConfig: ExerciseConfig?,
+    public val exerciseConfig: ExerciseConfig? = null,
 
     /**
      * Returns the [ActiveDurationCheckpoint] which can be used to determine the active duration of
@@ -63,39 +59,42 @@
      * application timers against this to ensure their view of the active duration matches the view
      * of Health Services.
      */
-    public val activeDurationCheckpoint: ActiveDurationCheckpoint?,
+    public val activeDurationCheckpoint: ActiveDurationCheckpoint? = null,
+
+    /** The duration since boot when this ExerciseUpdate was created. */
+    private val updateDurationFromBoot: Duration? = null,
 
     /**
-     * Returns the [ExerciseStateInfo] containing the current [ExerciseState] and
-     * [ExerciseEndReason], if applicable.
+     * Returns the time at which the exercise was started or `null` if the exercise is in prepare
+     * phase and hasn't started yet.
      */
-    public val exerciseStateInfo: ExerciseStateInfo,
-) : ProtoParcelable<DataProto.ExerciseUpdate>() {
+    public val startTime: Instant? = null,
+) {
     /** @hide */
     @RestrictTo(RestrictTo.Scope.LIBRARY)
     public constructor(
         proto: DataProto.ExerciseUpdate
     ) : this(
-        if (proto.hasStartTimeEpochMs()) Instant.ofEpochMilli(proto.startTimeEpochMs) else null,
-        if (proto.hasUpdateDurationFromBootMs()) {
-            Duration.ofMillis(proto.updateDurationFromBootMs)
-        } else {
-            null
-        },
         exerciseUpdateProtoToDataPointContainer(proto),
         proto.latestAchievedGoalsList.map { ExerciseGoal.fromProto(it.exerciseGoal) }.toSet(),
         proto.mileStoneMarkerSummariesList.map { MilestoneMarkerSummary(it) }.toSet(),
+        ExerciseStateInfo(
+            ExerciseState.fromProto(proto.state)
+                ?: throw IllegalArgumentException("Invalid ExerciseState: ${proto.state}"),
+            ExerciseEndReason.fromProto(proto.exerciseEndReason)
+        ),
         if (proto.hasExerciseConfig()) ExerciseConfig(proto.exerciseConfig) else null,
         if (proto.hasActiveDurationCheckpoint()) {
             ActiveDurationCheckpoint.fromProto(proto.activeDurationCheckpoint)
         } else {
             null
         },
-        ExerciseStateInfo(
-            ExerciseState.fromProto(proto.state)
-                ?: throw IllegalStateException("Invalid ExerciseState: ${proto.state}"),
-            ExerciseEndReason.fromProto(proto.exerciseEndReason)
-        ),
+        if (proto.hasUpdateDurationFromBootMs()) {
+            Duration.ofMillis(proto.updateDurationFromBootMs)
+        } else {
+            null
+        },
+        if (proto.hasStartTimeEpochMs()) Instant.ofEpochMilli(proto.startTimeEpochMs) else null,
     )
 
     /**
@@ -165,8 +164,7 @@
         }
     }
 
-    /** @hide */
-    override val proto: DataProto.ExerciseUpdate = getExerciseUpdateProto()
+    internal val proto: DataProto.ExerciseUpdate = getExerciseUpdateProto()
 
     private fun getExerciseUpdateProto(): DataProto.ExerciseUpdate {
         val builder =
@@ -326,12 +324,6 @@
     }
 
     public companion object {
-        @JvmField
-        public val CREATOR: Parcelable.Creator<ExerciseUpdate> = newCreator { bytes ->
-            val proto = DataProto.ExerciseUpdate.parseFrom(bytes)
-            ExerciseUpdate(proto)
-        }
-
         internal fun exerciseUpdateProtoToDataPointContainer(
             proto: DataProto.ExerciseUpdate
         ): DataPointContainer {
diff --git a/health/health-services-client/src/main/java/androidx/health/services/client/data/HeartRateAccuracy.kt b/health/health-services-client/src/main/java/androidx/health/services/client/data/HeartRateAccuracy.kt
index 84162b1..3756fbe 100644
--- a/health/health-services-client/src/main/java/androidx/health/services/client/data/HeartRateAccuracy.kt
+++ b/health/health-services-client/src/main/java/androidx/health/services/client/data/HeartRateAccuracy.kt
@@ -16,7 +16,6 @@
 
 package androidx.health.services.client.data
 
-import android.os.Parcelable
 import androidx.annotation.RestrictTo
 import androidx.health.services.client.proto.DataProto
 import androidx.health.services.client.proto.DataProto.DataPointAccuracy.HrAccuracy as HrAccuracyProto
@@ -99,19 +98,11 @@
         }
     }
 
-    /** @hide */
-    override val proto: DataProto.DataPointAccuracy =
-        DataProto.DataPointAccuracy.newBuilder()
+    internal fun getDataPointAccuracyProto(): DataProto.DataPointAccuracy {
+        return DataProto.DataPointAccuracy.newBuilder()
             .setHrAccuracy(HrAccuracyProto.newBuilder().setSensorStatus(sensorStatus.toProto()))
             .build()
+    }
 
     override fun toString(): String = "HrAccuracy(sensorStatus=$sensorStatus)"
-
-    public companion object {
-        @JvmField
-        public val CREATOR: Parcelable.Creator<HeartRateAccuracy> = newCreator {
-            val proto = DataProto.DataPointAccuracy.parseFrom(it)
-            HeartRateAccuracy(proto)
-        }
-    }
 }
diff --git a/health/health-services-client/src/main/java/androidx/health/services/client/data/LocationAccuracy.kt b/health/health-services-client/src/main/java/androidx/health/services/client/data/LocationAccuracy.kt
index 04225c2..25aa2a8 100644
--- a/health/health-services-client/src/main/java/androidx/health/services/client/data/LocationAccuracy.kt
+++ b/health/health-services-client/src/main/java/androidx/health/services/client/data/LocationAccuracy.kt
@@ -16,7 +16,6 @@
 
 package androidx.health.services.client.data
 
-import android.os.Parcelable
 import androidx.health.services.client.proto.DataProto
 import androidx.health.services.client.proto.DataProto.DataPointAccuracy.LocationAccuracy as LocationAccuracyProto
 import android.util.Log
@@ -64,10 +63,7 @@
         }
     )
 
-    /** @hide */
-    override val proto: DataProto.DataPointAccuracy = getDataPointAccuracyProto()
-
-    private fun getDataPointAccuracyProto(): DataProto.DataPointAccuracy {
+    internal fun getDataPointAccuracyProto(): DataProto.DataPointAccuracy {
         val locationAccuracyProtoBuilder =
             LocationAccuracyProto.newBuilder()
                 .setHorizontalPositionError(horizontalPositionErrorMeters)
@@ -84,10 +80,5 @@
 
     public companion object {
         private const val TAG = "LocationAccuracy"
-        @JvmField
-        public val CREATOR: Parcelable.Creator<LocationAccuracy> = newCreator {
-            val proto = DataProto.DataPointAccuracy.parseFrom(it)
-            LocationAccuracy(proto)
-        }
     }
 }
diff --git a/health/health-services-client/src/main/java/androidx/health/services/client/data/MeasureCapabilities.kt b/health/health-services-client/src/main/java/androidx/health/services/client/data/MeasureCapabilities.kt
index 11513be..c32ed46 100644
--- a/health/health-services-client/src/main/java/androidx/health/services/client/data/MeasureCapabilities.kt
+++ b/health/health-services-client/src/main/java/androidx/health/services/client/data/MeasureCapabilities.kt
@@ -16,7 +16,6 @@
 
 package androidx.health.services.client.data
 
-import android.os.Parcelable
 import androidx.health.services.client.proto.DataProto
 
 /**
@@ -32,26 +31,17 @@
      * data (e.g. HR).
      */
     public val supportedDataTypesMeasure: Set<DeltaDataType<*, *>>,
-) : ProtoParcelable<DataProto.MeasureCapabilities>() {
+) {
 
     internal constructor(
         proto: DataProto.MeasureCapabilities
     ) : this(proto.supportedDataTypesList.map { DataType.deltaFromProto(it) }.toSet())
 
-    /** @hide */
-    override val proto: DataProto.MeasureCapabilities =
+    internal val proto: DataProto.MeasureCapabilities =
         DataProto.MeasureCapabilities.newBuilder()
             .addAllSupportedDataTypes(supportedDataTypesMeasure.map { it.proto })
             .build()
 
     override fun toString(): String =
         "MeasureCapabilities(supportedDataTypesMeasure=$supportedDataTypesMeasure)"
-
-    public companion object {
-        @JvmField
-        public val CREATOR: Parcelable.Creator<MeasureCapabilities> = newCreator { bytes ->
-            val proto = DataProto.MeasureCapabilities.parseFrom(bytes)
-            MeasureCapabilities(proto)
-        }
-    }
 }
diff --git a/health/health-services-client/src/main/java/androidx/health/services/client/data/MilestoneMarkerSummary.kt b/health/health-services-client/src/main/java/androidx/health/services/client/data/MilestoneMarkerSummary.kt
index 8d27dba..26b4b51 100644
--- a/health/health-services-client/src/main/java/androidx/health/services/client/data/MilestoneMarkerSummary.kt
+++ b/health/health-services-client/src/main/java/androidx/health/services/client/data/MilestoneMarkerSummary.kt
@@ -16,7 +16,6 @@
 
 package androidx.health.services.client.data
 
-import android.os.Parcelable
 import androidx.health.services.client.proto.DataProto
 import androidx.health.services.client.proto.DataProto.AchievedExerciseGoal
 import androidx.health.services.client.proto.DataProto.MilestoneMarkerSummary.SummaryMetricsEntry
@@ -49,7 +48,7 @@
      * [DataPoint]s for [AggregateDataType]s.
      */
     public val summaryMetrics: DataPointContainer,
-) : ProtoParcelable<DataProto.MilestoneMarkerSummary>() {
+) {
 
     internal constructor(
         proto: DataProto.MilestoneMarkerSummary
@@ -63,8 +62,7 @@
         })
     )
 
-    /** @hide */
-    override val proto: DataProto.MilestoneMarkerSummary =
+    internal val proto: DataProto.MilestoneMarkerSummary =
         DataProto.MilestoneMarkerSummary.newBuilder()
             .setStartTimeEpochMs(startTime.toEpochMilli())
             .setEndTimeEpochMs(endTime.toEpochMilli())
@@ -100,12 +98,4 @@
             "endTime=$endTime, " +
             "achievedGoal=$achievedGoal, " +
             "summaryMetrics=$summaryMetrics)"
-
-    public companion object {
-        @JvmField
-        public val CREATOR: Parcelable.Creator<MilestoneMarkerSummary> = newCreator { bytes ->
-            val proto = DataProto.MilestoneMarkerSummary.parseFrom(bytes)
-            MilestoneMarkerSummary(proto)
-        }
-    }
 }
diff --git a/health/health-services-client/src/main/java/androidx/health/services/client/data/PassiveListenerConfig.kt b/health/health-services-client/src/main/java/androidx/health/services/client/data/PassiveListenerConfig.kt
index 7a094e7..c7df7b5 100644
--- a/health/health-services-client/src/main/java/androidx/health/services/client/data/PassiveListenerConfig.kt
+++ b/health/health-services-client/src/main/java/androidx/health/services/client/data/PassiveListenerConfig.kt
@@ -16,7 +16,6 @@
 
 package androidx.health.services.client.data
 
-import android.os.Parcelable
 import androidx.health.services.client.PassiveListenerCallback
 import androidx.health.services.client.proto.DataProto
 
@@ -28,9 +27,9 @@
  *
  * @property dataTypes set of [DataType]s which should be tracked. Requested data will be returned
  * by [PassiveListenerCallback.onNewDataPointsReceived].
- * @property shouldRequestUserActivityState whether to request [UserActivityInfo] updates. Data will
- * be returned by [PassiveListenerCallback.onUserActivityInfoReceived]. If set to true, calling app
- * must have [android.Manifest.permission.ACTIVITY_RECOGNITION].
+ * @property shouldUserActivityInfoBeRequested whether to request [UserActivityInfo] updates. Data
+ * will be returned by [PassiveListenerCallback.onUserActivityInfoReceived]. If set to true, calling
+ * app must have [android.Manifest.permission.ACTIVITY_RECOGNITION].
  * @property dailyGoals set of daily [PassiveGoal]s which should be tracked. Achieved goals will be
  * returned by [PassiveListenerCallback.onGoalCompleted].
  * @property healthEventTypes set of [HealthEvent.Type] which should be tracked. Detected health
@@ -39,11 +38,11 @@
 @Suppress("ParcelCreator")
 public class PassiveListenerConfig(
     public val dataTypes: Set<DataType<out Any, out DataPoint<out Any>>>,
-    @get:JvmName("shouldRequestUserActivityState")
-    public val shouldRequestUserActivityState: Boolean,
+    @get:JvmName("shouldUserActivityInfoBeRequested")
+    public val shouldUserActivityInfoBeRequested: Boolean,
     public val dailyGoals: Set<PassiveGoal>,
     public val healthEventTypes: Set<HealthEvent.Type>
-) : ProtoParcelable<DataProto.PassiveListenerConfig>() {
+) {
 
     internal constructor(
         proto: DataProto.PassiveListenerConfig
@@ -74,11 +73,13 @@
          * included by default and [PassiveListenerCallback.onUserActivityInfoReceived] will not be invoked.
          * [UserActivityState] requires [android.Manifest.permission.ACTIVITY_RECOGNITION].
          *
-         * @param requestUserActivityState whether to request user activity state tracking
+         * @param shouldUserActivityInfoBeRequested whether to request user activity state tracking
          */
         @Suppress("MissingGetterMatchingBuilder")
-        public fun setShouldRequestUserActivityState(requestUserActivityState: Boolean): Builder {
-            this.requestUserActivityState = requestUserActivityState
+        fun setShouldUserActivityInfoBeRequested(
+            shouldUserActivityInfoBeRequested: Boolean
+        ): Builder {
+            this.requestUserActivityState = shouldUserActivityInfoBeRequested
             return this
         }
 
@@ -113,11 +114,10 @@
         }
     }
 
-    /** @hide */
-    override val proto: DataProto.PassiveListenerConfig =
+    internal val proto: DataProto.PassiveListenerConfig =
         DataProto.PassiveListenerConfig.newBuilder()
             .addAllDataTypes(dataTypes.map { it.proto })
-            .setIncludeUserActivityState(shouldRequestUserActivityState)
+            .setIncludeUserActivityState(shouldUserActivityInfoBeRequested)
             .addAllPassiveGoals(dailyGoals.map { it.proto })
             .addAllHealthEventTypes(healthEventTypes.map { it.toProto() })
             .build()
@@ -125,11 +125,5 @@
     public companion object {
         @JvmStatic
         public fun builder(): Builder = Builder()
-
-        @JvmField
-        public val CREATOR: Parcelable.Creator<PassiveListenerConfig> = newCreator { bytes ->
-            val proto = DataProto.PassiveListenerConfig.parseFrom(bytes)
-            PassiveListenerConfig(proto)
-        }
     }
 }
diff --git a/health/health-services-client/src/main/java/androidx/health/services/client/data/PassiveMonitoringCapabilities.kt b/health/health-services-client/src/main/java/androidx/health/services/client/data/PassiveMonitoringCapabilities.kt
index 90b5916..5e0f4ad 100644
--- a/health/health-services-client/src/main/java/androidx/health/services/client/data/PassiveMonitoringCapabilities.kt
+++ b/health/health-services-client/src/main/java/androidx/health/services/client/data/PassiveMonitoringCapabilities.kt
@@ -16,7 +16,6 @@
 
 package androidx.health.services.client.data
 
-import android.os.Parcelable
 import androidx.health.services.client.proto.DataProto
 import androidx.health.services.client.proto.DataProto.PassiveMonitoringCapabilities as PassiveMonitoringCapabilitiesProto
 
@@ -42,7 +41,7 @@
 
     /** Set of supported [UserActivityState]s on this device. */
     public val supportedUserActivityStates: Set<UserActivityState>,
-) : ProtoParcelable<PassiveMonitoringCapabilitiesProto>() {
+) {
     internal constructor(
         proto: DataProto.PassiveMonitoringCapabilities
     ) : this(
@@ -52,8 +51,7 @@
         proto.supportedUserActivityStatesList.mapNotNull { UserActivityState.fromProto(it) }.toSet()
     )
 
-    /** @hide */
-    override val proto: PassiveMonitoringCapabilitiesProto =
+    internal val proto: PassiveMonitoringCapabilitiesProto =
         PassiveMonitoringCapabilitiesProto.newBuilder()
             .addAllSupportedDataTypesPassiveMonitoring(
                 supportedDataTypesPassiveMonitoring.map { it.proto }
@@ -69,13 +67,4 @@
             "supportedDataTypesPassiveGoals=$supportedDataTypesPassiveGoals, " +
             "supportedHealthEventTypes=$supportedHealthEventTypes, " +
             "supportedUserActivityStates=$supportedUserActivityStates)"
-
-    public companion object {
-        @JvmField
-        public val CREATOR: Parcelable.Creator<PassiveMonitoringCapabilities> =
-            newCreator { bytes ->
-                val proto = PassiveMonitoringCapabilitiesProto.parseFrom(bytes)
-                PassiveMonitoringCapabilities(proto)
-            }
-    }
 }
diff --git a/health/health-services-client/src/main/java/androidx/health/services/client/data/PassiveMonitoringUpdate.kt b/health/health-services-client/src/main/java/androidx/health/services/client/data/PassiveMonitoringUpdate.kt
index 41410f2..61b74cb 100644
--- a/health/health-services-client/src/main/java/androidx/health/services/client/data/PassiveMonitoringUpdate.kt
+++ b/health/health-services-client/src/main/java/androidx/health/services/client/data/PassiveMonitoringUpdate.kt
@@ -16,10 +16,8 @@
 
 package androidx.health.services.client.data
 
-import android.content.Intent
-import android.os.Parcelable
-import androidx.health.services.client.proto.DataProto
 import androidx.health.services.client.proto.DataProto.PassiveMonitoringUpdate as PassiveMonitoringUpdateProto
+import androidx.health.services.client.proto.DataProto
 
 /**
  * Represents an update from Passive tracking.
@@ -34,7 +32,7 @@
 
     /** The [UserActivityInfo] of the user from Passive tracking. */
     public val userActivityInfoUpdates: List<UserActivityInfo>,
-) : ProtoParcelable<PassiveMonitoringUpdateProto>() {
+) {
 
     internal constructor(
         proto: DataProto.PassiveMonitoringUpdate
@@ -43,16 +41,7 @@
         proto.userActivityInfoUpdatesList.map { UserActivityInfo(it) }
     )
 
-    /**
-     * Puts the state as an extra into a given [Intent]. The state can then be obtained from the
-     * intent via [PassiveMonitoringUpdate.fromIntent].
-     */
-    public fun putToIntent(intent: Intent) {
-        intent.putExtra(EXTRA_KEY, this)
-    }
-
-    /** @hide */
-    override val proto: PassiveMonitoringUpdateProto =
+    internal val proto: PassiveMonitoringUpdateProto =
         PassiveMonitoringUpdateProto.newBuilder()
             .addAllDataPoints(dataPoints.sampleDataPoints.map { it.proto })
             .addAllDataPoints(dataPoints.intervalDataPoints.map { it.proto })
@@ -63,24 +52,4 @@
         "PassiveMonitoringUpdate(" +
             "dataPoints=$dataPoints, " +
             "userActivityInfoUpdates=$userActivityInfoUpdates)"
-
-    public companion object {
-        private const val EXTRA_KEY = "hs.passive_monitoring_update"
-        @Suppress("ActionValue") public const val ACTION_DATA: String = "hs.passivemonitoring.DATA"
-
-        @JvmField
-        public val CREATOR: Parcelable.Creator<PassiveMonitoringUpdate> = newCreator { bytes ->
-            val proto = PassiveMonitoringUpdateProto.parseFrom(bytes)
-            PassiveMonitoringUpdate(proto)
-        }
-
-        /**
-         * Creates a [PassiveMonitoringUpdate] from an [Intent]. Returns null if no
-         * [PassiveMonitoringUpdate] is stored in the given intent.
-         */
-        @Suppress("DEPRECATION")
-        @JvmStatic
-        public fun fromIntent(intent: Intent): PassiveMonitoringUpdate? =
-            intent.getParcelableExtra(EXTRA_KEY)
-    }
 }
diff --git a/health/health-services-client/src/main/java/androidx/health/services/client/data/ProtoParcelable.kt b/health/health-services-client/src/main/java/androidx/health/services/client/data/ProtoParcelable.kt
index b60d79a..8ef1bea 100644
--- a/health/health-services-client/src/main/java/androidx/health/services/client/data/ProtoParcelable.kt
+++ b/health/health-services-client/src/main/java/androidx/health/services/client/data/ProtoParcelable.kt
@@ -27,8 +27,11 @@
  *
  * Provided [proto] represents everything important to subclasses, they need not implement [equals]
  * and [hashCode].
+ *
+ * @hide
  */
 @Suppress("ParcelCreator", "ParcelNotFinal")
+@RestrictTo(RestrictTo.Scope.LIBRARY)
 public abstract class ProtoParcelable<T : MessageLite> : Parcelable {
 
     /** Proto representation of this object. */
diff --git a/health/health-services-client/src/main/java/androidx/health/services/client/data/UserActivityInfo.kt b/health/health-services-client/src/main/java/androidx/health/services/client/data/UserActivityInfo.kt
index a9f7b6c..fcff041 100644
--- a/health/health-services-client/src/main/java/androidx/health/services/client/data/UserActivityInfo.kt
+++ b/health/health-services-client/src/main/java/androidx/health/services/client/data/UserActivityInfo.kt
@@ -16,7 +16,6 @@
 
 package androidx.health.services.client.data
 
-import android.os.Parcelable
 import androidx.health.services.client.data.UserActivityState.Companion.USER_ACTIVITY_ASLEEP
 import androidx.health.services.client.data.UserActivityState.Companion.USER_ACTIVITY_EXERCISE
 import androidx.health.services.client.data.UserActivityState.Companion.USER_ACTIVITY_PASSIVE
@@ -44,7 +43,7 @@
 
     /** The time at which the current state took effect. */
     public val stateChangeTime: Instant,
-) : ProtoParcelable<UserActivityInfoProto>() {
+) {
 
     internal constructor(
         proto: DataProto.UserActivityInfo
@@ -54,8 +53,7 @@
         Instant.ofEpochMilli(proto.stateChangeTimeEpochMs)
     )
 
-    /** @hide */
-    override val proto: UserActivityInfoProto = getUserActivityInfoProto()
+    internal val proto: UserActivityInfoProto = getUserActivityInfoProto()
 
     private fun getUserActivityInfoProto(): UserActivityInfoProto {
         val builder =
@@ -74,12 +72,6 @@
             "exerciseInfo=$exerciseInfo)"
 
     public companion object {
-        @JvmField
-        public val CREATOR: Parcelable.Creator<UserActivityInfo> = newCreator { bytes ->
-            val proto = UserActivityInfoProto.parseFrom(bytes)
-            UserActivityInfo(proto)
-        }
-
         /** Creates a [UserActivityInfo] for [USER_ACTIVITY_UNKNOWN]. */
         @JvmStatic
         public fun createUnknownTypeState(stateChangeTime: Instant): UserActivityInfo =
diff --git a/health/health-services-client/src/main/java/androidx/health/services/client/data/WarmUpConfig.kt b/health/health-services-client/src/main/java/androidx/health/services/client/data/WarmUpConfig.kt
index abd637b..8a43e85 100644
--- a/health/health-services-client/src/main/java/androidx/health/services/client/data/WarmUpConfig.kt
+++ b/health/health-services-client/src/main/java/androidx/health/services/client/data/WarmUpConfig.kt
@@ -16,7 +16,6 @@
 
 package androidx.health.services.client.data
 
-import android.os.Parcelable
 import androidx.health.services.client.proto.DataProto
 
 /**
@@ -31,7 +30,7 @@
 public class WarmUpConfig(
     public val exerciseType: ExerciseType,
     public val dataTypes: Set<DeltaDataType<*, *>>,
-) : ProtoParcelable<DataProto.WarmUpConfig>() {
+) {
 
     internal constructor(
         proto: DataProto.WarmUpConfig
@@ -44,8 +43,7 @@
         require(dataTypes.isNotEmpty()) { "Must specify the desired data types." }
     }
 
-    /** @hide */
-    override val proto: DataProto.WarmUpConfig =
+    internal val proto: DataProto.WarmUpConfig =
         DataProto.WarmUpConfig.newBuilder()
             .setExerciseType(exerciseType.toProto())
             .addAllDataTypes(dataTypes.map { it.proto })
@@ -53,12 +51,4 @@
 
     override fun toString(): String =
         "WarmUpConfig(exerciseType=$exerciseType, dataTypes=$dataTypes)"
-
-    public companion object {
-        @JvmField
-        public val CREATOR: Parcelable.Creator<WarmUpConfig> = newCreator { bytes ->
-            val proto = DataProto.WarmUpConfig.parseFrom(bytes)
-            WarmUpConfig(proto)
-        }
-    }
 }
diff --git a/health/health-services-client/src/test/java/androidx/health/services/client/data/ExerciseUpdateTest.kt b/health/health-services-client/src/test/java/androidx/health/services/client/data/ExerciseUpdateTest.kt
index 591f8fd..e5c0a69 100644
--- a/health/health-services-client/src/test/java/androidx/health/services/client/data/ExerciseUpdateTest.kt
+++ b/health/health-services-client/src/test/java/androidx/health/services/client/data/ExerciseUpdateTest.kt
@@ -40,8 +40,6 @@
             DataTypeCondition(CALORIES_TOTAL, 125.0, GREATER_THAN_OR_EQUAL)
         )
         val proto = ExerciseUpdate(
-            startTime = 10.instant(),
-            updateDurationFromBoot = 42.duration(),
             latestMetrics = DataPointContainer(
                 listOf(DataPoints.calories(130.0, 15.duration(), 35.duration()))
             ),
@@ -57,6 +55,7 @@
                     )
                 )
             ),
+            exerciseStateInfo = ExerciseStateInfo(ExerciseState.ACTIVE, ExerciseEndReason.UNKNOWN),
             exerciseConfig = ExerciseConfig(
                 WALKING,
                 setOf(CALORIES_TOTAL),
@@ -65,7 +64,8 @@
                 exerciseGoals = listOf(goal)
             ),
             activeDurationCheckpoint = ActiveDurationCheckpoint(42.instant(), 30.duration()),
-            exerciseStateInfo = ExerciseStateInfo(ExerciseState.ACTIVE, ExerciseEndReason.UNKNOWN)
+            updateDurationFromBoot = 42.duration(),
+            startTime = 10.instant()
         ).proto
 
         val update = ExerciseUpdate(proto)
diff --git a/health/health-services-client/src/test/java/androidx/health/services/client/impl/ServiceBackedPassiveMonitoringClientTest.kt b/health/health-services-client/src/test/java/androidx/health/services/client/impl/ServiceBackedPassiveMonitoringClientTest.kt
index 637de44..13e1f40 100644
--- a/health/health-services-client/src/test/java/androidx/health/services/client/impl/ServiceBackedPassiveMonitoringClientTest.kt
+++ b/health/health-services-client/src/test/java/androidx/health/services/client/impl/ServiceBackedPassiveMonitoringClientTest.kt
@@ -95,7 +95,7 @@
     fun registersPassiveListenerService() {
         val config = PassiveListenerConfig(
             dataTypes = setOf(STEPS_DAILY, CALORIES_DAILY),
-            shouldRequestUserActivityState = true,
+            shouldUserActivityInfoBeRequested = true,
             dailyGoals = setOf(),
             healthEventTypes = setOf()
         )
@@ -110,7 +110,7 @@
         assertThat(request.passiveListenerConfig.dataTypes).containsExactly(
             STEPS_DAILY, CALORIES_DAILY
         )
-        assertThat(request.passiveListenerConfig.shouldRequestUserActivityState).isTrue()
+        assertThat(request.passiveListenerConfig.shouldUserActivityInfoBeRequested).isTrue()
         assertThat(request.packageName).isEqualTo("androidx.health.services.client.test")
     }
 
@@ -118,7 +118,7 @@
     fun registersPassiveListenerCallback() {
         val config = PassiveListenerConfig(
             dataTypes = setOf(STEPS_DAILY),
-            shouldRequestUserActivityState = true,
+            shouldUserActivityInfoBeRequested = true,
             dailyGoals = setOf(),
             healthEventTypes = setOf()
         )
@@ -131,7 +131,7 @@
         assertThat(callback.onRegisteredCalls).isEqualTo(1)
         val request = fakeService.registerCallbackRequests[0]
         assertThat(request.passiveListenerConfig.dataTypes).containsExactly(STEPS_DAILY)
-        assertThat(request.passiveListenerConfig.shouldRequestUserActivityState).isTrue()
+        assertThat(request.passiveListenerConfig.shouldUserActivityInfoBeRequested).isTrue()
         assertThat(request.packageName).isEqualTo("androidx.health.services.client.test")
     }
 
@@ -140,7 +140,7 @@
         shadowOf(Looper.getMainLooper()).idle() // ?????
         val config = PassiveListenerConfig(
             dataTypes = setOf(STEPS_DAILY),
-            shouldRequestUserActivityState = true,
+            shouldUserActivityInfoBeRequested = true,
             dailyGoals = setOf(),
             healthEventTypes = setOf()
         )
@@ -185,7 +185,7 @@
     fun callbackReceivesCompletedGoals() {
         val config = PassiveListenerConfig(
             dataTypes = setOf(STEPS_DAILY),
-            shouldRequestUserActivityState = false,
+            shouldUserActivityInfoBeRequested = false,
             dailyGoals = setOf(
                 PassiveGoal(DataTypeCondition(STEPS_DAILY, 87, GREATER_THAN))
             ),
@@ -226,7 +226,7 @@
     fun callbackReceivesHealthEvents() {
         val config = PassiveListenerConfig(
             dataTypes = setOf(),
-            shouldRequestUserActivityState = false,
+            shouldUserActivityInfoBeRequested = false,
             dailyGoals = setOf(),
             healthEventTypes = setOf(FALL_DETECTED)
         )
@@ -257,7 +257,7 @@
     fun callbackReceivesPermissionsLost() {
         val config = PassiveListenerConfig(
             dataTypes = setOf(STEPS_DAILY),
-            shouldRequestUserActivityState = false,
+            shouldUserActivityInfoBeRequested = false,
             dailyGoals = setOf(
                 PassiveGoal(DataTypeCondition(STEPS_DAILY, 87, GREATER_THAN))
             ),
diff --git a/health/health-services-client/src/test/java/androidx/health/services/client/impl/request/ExerciseGoalRequestTest.kt b/health/health-services-client/src/test/java/androidx/health/services/client/impl/request/ExerciseGoalRequestTest.kt
new file mode 100644
index 0000000..d7745be
--- /dev/null
+++ b/health/health-services-client/src/test/java/androidx/health/services/client/impl/request/ExerciseGoalRequestTest.kt
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.health.services.client.impl.request
+
+import android.os.Parcel
+import androidx.health.services.client.data.ComparisonType
+import androidx.health.services.client.data.DataType
+import androidx.health.services.client.data.DataTypeCondition
+import androidx.health.services.client.data.ExerciseGoal
+import com.google.common.truth.Truth
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.robolectric.RobolectricTestRunner
+
+@RunWith(RobolectricTestRunner::class)
+class ExerciseGoalRequestTest {
+    @Test
+    fun parcelableRoundTrip() {
+        val request =
+            ExerciseGoalRequest(
+                "package",
+                ExerciseGoal.createOneTimeGoal(
+                    DataTypeCondition(
+                        DataType.HEART_RATE_BPM_STATS,
+                        192.0,
+                        ComparisonType.GREATER_THAN
+                    )
+                )
+            )
+        val parcel = Parcel.obtain()
+
+        request.writeToParcel(parcel, 0)
+        parcel.setDataPosition(0)
+        val fromParcel = ExerciseGoalRequest.CREATOR.createFromParcel(parcel)
+
+        Truth.assertThat(request).isEqualTo(fromParcel)
+    }
+}
\ No newline at end of file
diff --git a/hilt/hilt-compiler/build.gradle b/hilt/hilt-compiler/build.gradle
index 3533f49..8f08622 100644
--- a/hilt/hilt-compiler/build.gradle
+++ b/hilt/hilt-compiler/build.gradle
@@ -46,6 +46,11 @@
             include : "android.jar"))
 }
 
+tasks.withType(Test).configureEach {
+    // https://github.com/google/compile-testing/issues/222
+    it.jvmArgs "--add-opens=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED"
+}
+
 androidx {
     name = "AndroidX Hilt Extension Compiler"
     type = LibraryType.ANNOTATION_PROCESSOR
diff --git a/input/OWNERS b/input/OWNERS
new file mode 100644
index 0000000..492d141
--- /dev/null
+++ b/input/OWNERS
@@ -0,0 +1,3 @@
[email protected]
[email protected]
[email protected]
\ No newline at end of file
diff --git a/input/input-motionprediction/api/current.txt b/input/input-motionprediction/api/current.txt
new file mode 100644
index 0000000..a2cdf99
--- /dev/null
+++ b/input/input-motionprediction/api/current.txt
@@ -0,0 +1,12 @@
+// Signature format: 4.0
+package androidx.input.motionprediction {
+
+  public interface MotionEventPredictor {
+    method public void dispose();
+    method public static androidx.input.motionprediction.MotionEventPredictor newInstance(android.view.View);
+    method public android.view.MotionEvent? predict();
+    method public void recordMovement(android.view.MotionEvent);
+  }
+
+}
+
diff --git a/input/input-motionprediction/api/public_plus_experimental_current.txt b/input/input-motionprediction/api/public_plus_experimental_current.txt
new file mode 100644
index 0000000..a2cdf99
--- /dev/null
+++ b/input/input-motionprediction/api/public_plus_experimental_current.txt
@@ -0,0 +1,12 @@
+// Signature format: 4.0
+package androidx.input.motionprediction {
+
+  public interface MotionEventPredictor {
+    method public void dispose();
+    method public static androidx.input.motionprediction.MotionEventPredictor newInstance(android.view.View);
+    method public android.view.MotionEvent? predict();
+    method public void recordMovement(android.view.MotionEvent);
+  }
+
+}
+
diff --git a/input/input-motionprediction/api/res-current.txt b/input/input-motionprediction/api/res-current.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/input/input-motionprediction/api/res-current.txt
diff --git a/input/input-motionprediction/api/restricted_current.txt b/input/input-motionprediction/api/restricted_current.txt
new file mode 100644
index 0000000..a2cdf99
--- /dev/null
+++ b/input/input-motionprediction/api/restricted_current.txt
@@ -0,0 +1,12 @@
+// Signature format: 4.0
+package androidx.input.motionprediction {
+
+  public interface MotionEventPredictor {
+    method public void dispose();
+    method public static androidx.input.motionprediction.MotionEventPredictor newInstance(android.view.View);
+    method public android.view.MotionEvent? predict();
+    method public void recordMovement(android.view.MotionEvent);
+  }
+
+}
+
diff --git a/input/input-motionprediction/build.gradle b/input/input-motionprediction/build.gradle
new file mode 100644
index 0000000..9475cdb
--- /dev/null
+++ b/input/input-motionprediction/build.gradle
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import androidx.build.LibraryType
+
+plugins {
+    id("AndroidXPlugin")
+    id("com.android.library")
+}
+
+dependencies {
+    api("androidx.annotation:annotation:1.2.0")
+
+    androidTestImplementation(libs.testExtJunit)
+    androidTestImplementation(libs.testCore)
+    androidTestImplementation(libs.testRunner)
+    androidTestImplementation(libs.testRules)
+    androidTestImplementation(libs.espressoCore, excludes.espresso)
+}
+
+android {
+    defaultConfig {
+        minSdkVersion 16
+    }
+    namespace "androidx.input.motionprediction"
+}
+
+androidx {
+    name = "Android Motion Prediction"
+    type = LibraryType.PUBLISHED_LIBRARY
+    mavenVersion = LibraryVersions.INPUT_MOTIONPREDICTION
+    mavenGroup = LibraryGroups.INPUT
+    inceptionYear = "2022"
+    description = "reduce the latency of input interactions by predicting future MotionEvents"
+}
diff --git a/input/input-motionprediction/src/main/AndroidManifest.xml b/input/input-motionprediction/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..e4e6dc1f
--- /dev/null
+++ b/input/input-motionprediction/src/main/AndroidManifest.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2022 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<manifest />
\ No newline at end of file
diff --git a/input/input-motionprediction/src/main/java/androidx/input/motionprediction/MotionEventPredictor.java b/input/input-motionprediction/src/main/java/androidx/input/motionprediction/MotionEventPredictor.java
new file mode 100644
index 0000000..c27d293
--- /dev/null
+++ b/input/input-motionprediction/src/main/java/androidx/input/motionprediction/MotionEventPredictor.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.input.motionprediction;
+
+import android.view.MotionEvent;
+import android.view.View;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.input.motionprediction.kalman.KalmanMotionEventPredictor;
+
+/**
+ * There is a gap between the time a user touches the screen and that information is reported to the
+ * app; a motion predictor is a utility that provides predicted {@link android.view.MotionEvent}
+ * based on the previously received ones. Obtain a new predictor instance using
+ * {@link #newInstance(android.view.View)}; put the motion events you receive into it with
+ * {@link #recordMovement(android.view.MotionEvent)}, and call {@link #predict()} to retrieve the
+ * predicted  {@link android.view.MotionEvent} that would occur at the moment the next frame is
+ * rendered on the display. Once no more predictions are needed, call {@link #dispose()} to stop it
+ * and clean up resources.
+ */
+public interface MotionEventPredictor {
+    /**
+     * Record a user's movement to the predictor. You should call this for every
+     * {@link android.view.MotionEvent} that is received by the associated
+     * {@link android.view.View}.
+     * @param event the {@link android.view.MotionEvent} the associated view received and that
+     *              needs to be recorded.
+     */
+    void recordMovement(@NonNull MotionEvent event);
+
+    /**
+     * Compute a prediction
+     * @return the predicted {@link android.view.MotionEvent}, or null if not possible to make a
+     * prediction.
+     */
+    @Nullable
+    MotionEvent predict();
+
+    /**
+     * Notify the predictor that no more predictions are needed. Any subsequent call to
+     * {@link #predict()} will return null.
+     */
+    void dispose();
+
+    /**
+     * Create a new motion predictor associated to a specific {@link android.view.View}
+     * @param view the view to associated to this predictor
+     * @return the new predictor instance
+     */
+    static @NonNull MotionEventPredictor newInstance(@NonNull View view) {
+        return new KalmanMotionEventPredictor();
+    }
+}
diff --git a/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/BatchedMotionEvent.java b/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/BatchedMotionEvent.java
new file mode 100644
index 0000000..6392b40
--- /dev/null
+++ b/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/BatchedMotionEvent.java
@@ -0,0 +1,118 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.input.motionprediction.kalman;
+
+import static androidx.annotation.RestrictTo.Scope.LIBRARY;
+
+import android.view.MotionEvent;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+
+import java.util.Iterator;
+
+/**
+ * This class contains a list of historical {@link MotionEvent.PointerCoords} for a given time
+ *
+ * @hide
+ */
+@RestrictTo(LIBRARY)
+public class BatchedMotionEvent {
+    /**
+     * Historical pointer coordinate data as per {@link MotionEvent#getPointerCoords}, that occurred
+     * between this event and the previous event for the given pointer. Only applies to ACTION_MOVE
+     * events.
+     */
+    public final MotionEvent.PointerCoords[] coords;
+    /**
+     * The time this event occurred in the {@link android.os.SystemClock#uptimeMillis} time base.
+     */
+    public long timeMs;
+
+    public BatchedMotionEvent(int pointerCount) {
+        coords = new MotionEvent.PointerCoords[pointerCount];
+        for (int i = 0; i < pointerCount; ++i) {
+            coords[i] = new MotionEvent.PointerCoords();
+        }
+    }
+
+    /**
+     * This method creates an {@link Iterable} that will iterate over the historical {@link
+     * MotionEvent}s.
+     */
+    public static @NonNull IterableMotionEvent iterate(@NonNull MotionEvent ev) {
+        return new IterableMotionEvent(ev);
+    }
+
+    /** An {@link Iterable} list of {@link BatchedMotionEvent} objects. */
+    public static class IterableMotionEvent implements Iterable<BatchedMotionEvent> {
+        private final int mPointerCount;
+        private final MotionEvent mMotionEvent;
+
+        IterableMotionEvent(@NonNull MotionEvent motionEvent) {
+            mMotionEvent = motionEvent;
+            mPointerCount = motionEvent.getPointerCount();
+        }
+
+        public @NonNull MotionEvent getMotionEvent() {
+            return mMotionEvent;
+        }
+
+        public @NonNull int getPointerCount() {
+            return mPointerCount;
+        }
+
+        @Override
+        @NonNull
+        public Iterator<BatchedMotionEvent> iterator() {
+            return new Iterator<BatchedMotionEvent>() {
+                private int mHistoryId = 0;
+
+                @Override
+                public boolean hasNext() {
+                    return mHistoryId < (getMotionEvent().getHistorySize() + 1);
+                }
+
+                @Override
+                public BatchedMotionEvent next() {
+                    MotionEvent motionEvent = getMotionEvent();
+                    int pointerCount = getPointerCount();
+
+                    if (mHistoryId > motionEvent.getHistorySize()) {
+                        return null;
+                    }
+                    BatchedMotionEvent batchedEvent = new BatchedMotionEvent(pointerCount);
+                    if (mHistoryId < motionEvent.getHistorySize()) {
+                        for (int pointerId = 0; pointerId < pointerCount; ++pointerId) {
+                            motionEvent.getHistoricalPointerCoords(
+                                    pointerId, mHistoryId, batchedEvent.coords[pointerId]);
+                        }
+                        batchedEvent.timeMs = motionEvent.getHistoricalEventTime(mHistoryId);
+                    } else { // (mHistoryId == mMotionEvent.getHistorySize()) {
+                        for (int pointerId = 0; pointerId < pointerCount; ++pointerId) {
+                            motionEvent.getPointerCoords(
+                                    pointerId, batchedEvent.coords[pointerId]);
+                        }
+                        batchedEvent.timeMs = motionEvent.getEventTime();
+                    }
+                    mHistoryId++;
+                    return batchedEvent;
+                }
+            };
+        }
+    }
+}
diff --git a/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/InkPredictor.java b/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/InkPredictor.java
new file mode 100644
index 0000000..98f4a44
--- /dev/null
+++ b/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/InkPredictor.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.input.motionprediction.kalman;
+
+import static androidx.annotation.RestrictTo.Scope.LIBRARY;
+
+import android.view.MotionEvent;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RestrictTo;
+
+/**
+ * Simple interface for predicting ink points.
+ *
+ * @hide
+ */
+@RestrictTo(LIBRARY)
+public interface InkPredictor {
+
+    /** Gets the current prediction target */
+    int getPredictionTarget();
+
+    /** Sets the current prediction target */
+    void setPredictionTarget(int predictionTargetMillis);
+
+    /** Sets the report rate */
+    void setReportRate(int reportRateMs);
+
+    /** Reports the motion events */
+    boolean onTouchEvent(@NonNull MotionEvent event);
+
+    /** @return null if not possible to make a prediction. */
+    @Nullable
+    MotionEvent predict();
+}
diff --git a/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/KalmanFilter.java b/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/KalmanFilter.java
new file mode 100644
index 0000000..cfcec00
--- /dev/null
+++ b/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/KalmanFilter.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.input.motionprediction.kalman;
+
+import static androidx.annotation.RestrictTo.Scope.LIBRARY;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+import androidx.input.motionprediction.kalman.matrix.Matrix;
+
+/**
+ * Kalman filter implementation following http://filterpy.readthedocs.io/en/latest/
+ *
+ * <p>To keep a reasonable naming scheme we are not following android naming conventions in this
+ * class.
+ *
+ * <p>To improve performance, this filter is specialized to use a 4 dimensional state, with single
+ * dimension measurements.
+ *
+ * @hide
+ */
+@RestrictTo(LIBRARY)
+public class KalmanFilter {
+    // State estimate
+    public @NonNull Matrix x;
+
+    // State estimate covariance
+    public @NonNull Matrix P;
+
+    // Process noise
+    public @NonNull Matrix Q;
+
+    // Measurement noise (mZDim, mZDim)
+    public @NonNull Matrix R;
+
+    // State transition matrix
+    public @NonNull Matrix F;
+
+    // Measurement matrix
+    public @NonNull Matrix H;
+
+    // Kalman gain
+    public @NonNull Matrix K;
+
+    public KalmanFilter(int xDim, int zDim) {
+        x = new Matrix(xDim, 1);
+        P = Matrix.identity(xDim);
+        Q = Matrix.identity(xDim);
+        R = Matrix.identity(zDim);
+        F = new Matrix(xDim, xDim);
+        H = new Matrix(zDim, xDim);
+        K = new Matrix(xDim, zDim);
+    }
+
+    /** Resets the internal state of this Kalman filter. */
+    public void reset() {
+        // NOTE: It is not necessary to reset Q, R, F, and H matrices.
+        x.fill(0);
+        Matrix.setIdentity(P);
+        K.fill(0);
+    }
+
+    /**
+     * Performs the prediction phase of the filter, using the state estimate to produce a new
+     * estimate for the current timestep.
+     */
+    public void predict() {
+        x = F.dot(x);
+        P = F.dot(P).dotTranspose(F).plus(Q);
+    }
+
+    /** Updates the state estimate to incorporate the new observation z. */
+    public void update(@NonNull Matrix z) {
+        Matrix y = z.minus(H.dot(x));
+        Matrix tS = H.dot(P).dotTranspose(H).plus(R);
+        K = P.dotTranspose(H).dot(tS.inverse());
+        x = x.plus(K.dot(y));
+        P = P.minus(K.dot(H).dot(P));
+    }
+}
diff --git a/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/KalmanInkPredictor.java b/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/KalmanInkPredictor.java
new file mode 100644
index 0000000..73c1f4a
--- /dev/null
+++ b/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/KalmanInkPredictor.java
@@ -0,0 +1,326 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.input.motionprediction.kalman;
+
+import static androidx.annotation.RestrictTo.Scope.LIBRARY;
+
+import android.util.Log;
+import android.view.MotionEvent;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RestrictTo;
+import androidx.input.motionprediction.kalman.matrix.DVector2;
+
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Locale;
+
+/**
+ * @hide
+ */
+@RestrictTo(LIBRARY)
+public class KalmanInkPredictor implements InkPredictor {
+    private static final String TAG = "KalmanInkPredictor";
+
+    // Influence of jank during each prediction sample
+    private static final float JANK_INFLUENCE = 0.1f;
+
+    // Influence of acceleration during each prediction sample
+    private static final float ACCELERATION_INFLUENCE = 0.5f;
+
+    // Influence of velocity during each prediction sample
+    private static final float VELOCITY_INFLUENCE = 1.0f;
+
+    // Range of jank values to expect.
+    // Low value will use maximum prediction, high value will use no prediction.
+    private static final float LOW_JANK = 0.02f;
+    private static final float HIGH_JANK = 0.2f;
+
+    // Range of pen speed to expect (in dp / ms).
+    // Low value will not use prediction, high value will use full prediction.
+    private static final float LOW_SPEED = 0.0f;
+    private static final float HIGH_SPEED = 2.0f;
+
+    private static final int EVENT_TIME_IGNORED_THRESHOLD_MS = 20;
+
+    // Minimum number of Kalman filter samples needed for predicting the next point
+    private static final int MIN_KALMAN_FILTER_ITERATIONS = 4;
+
+    // Target time in milliseconds to predict.
+    private float mPredictionTargetMs = 0.0f;
+
+    // The Kalman filter is tuned to smooth noise while maintaining fast reaction to direction
+    // changes. The stronger the filter, the smoother the prediction result will be, at the
+    // cost of possible prediction errors.
+    private final PenKalmanFilter mKalman = new PenKalmanFilter(0.01, 1.0);
+
+    private final DVector2 mLastPosition = new DVector2();
+    private long mPrevEventTime;
+    private List<Float> mReportRates = new LinkedList<>();
+    private int mExpectedPredictionSampleSize = -1;
+    private float mReportRateMs = 0;
+
+    private final DVector2 mPosition = new DVector2();
+    private final DVector2 mVelocity = new DVector2();
+    private final DVector2 mAcceleration = new DVector2();
+    private final DVector2 mJank = new DVector2();
+
+    /* pointer of the gesture that require prediction */
+    private int mPointerId = 0;
+
+    private double mPressure = 0;
+
+    /**
+     * Kalman based ink predictor, predicting the location of the pen `predictionTarget`
+     * milliseconds into the future.
+     *
+     * <p>This filter can provide solid prediction up to 25ms into the future. If you are not
+     * achieving close-to-zero latency, prediction errors can be more visible and the target should
+     * be reduced to 20ms.
+     */
+    public KalmanInkPredictor() {
+        mKalman.reset();
+        mPrevEventTime = 0;
+    }
+
+    void initStrokePrediction(int pointerId) {
+        mKalman.reset();
+        mPrevEventTime = 0;
+        mPointerId = pointerId;
+    }
+
+    private void update(float x, float y, float pressure, long eventTime) {
+        if (x == mLastPosition.a1
+                && y == mLastPosition.a2
+                && (eventTime <= (mPrevEventTime + EVENT_TIME_IGNORED_THRESHOLD_MS))) {
+            // Reduce Kalman filter jank by ignoring input event with similar coordinates
+            // and eventTime as previous input event.
+            // This is particularly useful when multiple pointer are on screen as in this case the
+            // application will receive simultaneously multiple ACTION_MOVE MotionEvent
+            // where position on screen and eventTime is unchanged.
+            // This behavior that happens only in ARC++ and is likely due to Chrome Aura
+            // implementation.
+            return;
+        }
+
+        mKalman.update(x, y, pressure);
+        mLastPosition.a1 = x;
+        mLastPosition.a2 = y;
+
+        // Calculate average report rate over the first 20 samples. Most sensors will not
+        // provide reliable timestamps and do not report at an even interval, so this is just
+        // to be used as an estimate.
+        if (mReportRates != null && mReportRates.size() < 20) {
+            if (mPrevEventTime > 0) {
+                float dt = eventTime - mPrevEventTime;
+                mReportRates.add(dt);
+                float sum = 0;
+                for (float rate : mReportRates) {
+                    sum += rate;
+                }
+                mReportRateMs = sum / mReportRates.size();
+            }
+        }
+        mPrevEventTime = eventTime;
+    }
+
+    @Override
+    public int getPredictionTarget() {
+        // Prediction target should always be an int, so no precision lost in the cast
+        return (int) mPredictionTargetMs;
+    }
+
+    @Override
+    public void setPredictionTarget(int predictionTargetMillis) {
+        if (predictionTargetMillis < 0) {
+            predictionTargetMillis = 0;
+        }
+        mPredictionTargetMs = predictionTargetMillis;
+        if (mReportRates == null) {
+            mExpectedPredictionSampleSize = (int) Math.ceil(mPredictionTargetMs / mReportRateMs);
+        }
+    }
+
+    @Override
+    public void setReportRate(int reportRateMs) {
+        if (reportRateMs <= 0) {
+            throw new IllegalArgumentException(
+                    "reportRateMs should always be a strictly" + "positive number");
+        }
+        mReportRateMs = reportRateMs;
+        mReportRates = null;
+
+        mExpectedPredictionSampleSize = (int) Math.ceil(mPredictionTargetMs / mReportRateMs);
+    }
+
+    @Override
+    public boolean onTouchEvent(@NonNull MotionEvent event) {
+        if (event.getActionMasked() == MotionEvent.ACTION_CANCEL) {
+            mKalman.reset();
+            mPrevEventTime = 0;
+            return false;
+        }
+        int pointerIndex = event.findPointerIndex(mPointerId);
+        if (pointerIndex == -1) {
+            Log.i(
+                    TAG,
+                    String.format(
+                            Locale.ROOT,
+                            "onTouchEvent: Cannot find pointerId=%d in motionEvent=%s",
+                            mPointerId,
+                            event));
+            return false;
+        }
+        for (BatchedMotionEvent ev : BatchedMotionEvent.iterate(event)) {
+            MotionEvent.PointerCoords pointerCoords = ev.coords[pointerIndex];
+            update(pointerCoords.x, pointerCoords.y, pointerCoords.pressure, ev.timeMs);
+        }
+        return true;
+    }
+
+    @Override
+    public @Nullable MotionEvent predict() {
+        if (mExpectedPredictionSampleSize == -1
+                && mKalman.getNumIterations() < MIN_KALMAN_FILTER_ITERATIONS) {
+            return null;
+        }
+
+        mPosition.set(mLastPosition);
+        mVelocity.set(mKalman.getVelocity());
+        mAcceleration.set(mKalman.getAcceleration());
+        mJank.set(mKalman.getJank());
+
+        mPressure = mKalman.getPressure();
+        double pressureChange = mKalman.getPressureChange();
+
+        // Adjust prediction distance based on confidence of mKalman filter as well as movement
+        // speed.
+        double speedAbs = mVelocity.magnitude() / mReportRateMs;
+        double speedFactor = normalizeRange(speedAbs, LOW_SPEED, HIGH_SPEED);
+        double jankAbs = mJank.magnitude();
+        double jankFactor = 1.0 - normalizeRange(jankAbs, LOW_JANK, HIGH_JANK);
+        double confidenceFactor = speedFactor * jankFactor;
+
+        MotionEvent predictedEvent = null;
+        final MotionEvent.PointerProperties[] pointerProperties =
+                new MotionEvent.PointerProperties[1];
+        pointerProperties[0] = new MotionEvent.PointerProperties();
+        pointerProperties[0].id = mPointerId;
+
+        // Project physical state of the pen into the future.
+        int predictionTargetInSamples =
+                (int) Math.ceil(mPredictionTargetMs / mReportRateMs * confidenceFactor);
+
+        // Normally this should always be false as confidenceFactor should be less than 1.0
+        if (mExpectedPredictionSampleSize != -1
+                && predictionTargetInSamples > mExpectedPredictionSampleSize) {
+            predictionTargetInSamples = mExpectedPredictionSampleSize;
+        }
+
+        int i = 0;
+        for (; i < predictionTargetInSamples; i++) {
+            mAcceleration.a1 += mJank.a1 * JANK_INFLUENCE;
+            mAcceleration.a2 += mJank.a2 * JANK_INFLUENCE;
+            mVelocity.a1 += mAcceleration.a1 * ACCELERATION_INFLUENCE;
+            mVelocity.a2 += mAcceleration.a2 * ACCELERATION_INFLUENCE;
+            mPosition.a1 += mVelocity.a1 * VELOCITY_INFLUENCE;
+            mPosition.a2 += mVelocity.a2 * VELOCITY_INFLUENCE;
+            mPressure += pressureChange;
+
+            // Abort prediction if the pen is to be lifted.
+            if (mPressure < 0.1) {
+                //TODO: Should we generate ACTION_UP MotionEvent instead of ACTION_MOVE?
+                break;
+            }
+            mPressure = Math.min(mPressure, 1.0f);
+
+            MotionEvent.PointerCoords[] coords = {new MotionEvent.PointerCoords()};
+            coords[0].x = (float) mPosition.a1;
+            coords[0].y = (float) mPosition.a2;
+            coords[0].pressure = (float) mPressure;
+            if (predictedEvent == null) {
+                predictedEvent =
+                        MotionEvent.obtain(
+                                0 /* downTime */,
+                                0 /* eventTime */,
+                                MotionEvent.ACTION_MOVE /* action */,
+                                1 /* pointerCount */,
+                                pointerProperties /* pointer properties */,
+                                coords /* pointerCoords */,
+                                0 /* metaState */,
+                                0 /* button state */,
+                                1.0f /* xPrecision */,
+                                1.0f /* yPrecision */,
+                                0 /* deviceId */,
+                                0 /* edgeFlags */,
+                                0 /* source */,
+                                0 /* flags */);
+            } else {
+                predictedEvent.addBatch(0, coords, 0);
+            }
+        }
+
+        return predictedEvent;
+    }
+
+    private double normalizeRange(double x, double min, double max) {
+        double normalized = (x - min) / (max - min);
+        return Math.min(1.0, Math.max(normalized, 0.0));
+    }
+
+    /**
+     * Append predicted event with samples where position and pressure are constant if predictor
+     * consumer expect more samples
+     *
+     * @param predictedEvent
+     */
+    protected @Nullable MotionEvent appendPredictedEvent(@Nullable MotionEvent predictedEvent) {
+        int predictedEventSize = (predictedEvent == null) ? 0 : predictedEvent.getHistorySize();
+        for (int i = predictedEventSize; i < mExpectedPredictionSampleSize; i++) {
+            MotionEvent.PointerCoords[] coords = {new MotionEvent.PointerCoords()};
+            coords[0].x = (float) mPosition.a1;
+            coords[0].y = (float) mPosition.a2;
+            coords[0].pressure = (float) mPressure;
+            if (predictedEvent == null) {
+                final MotionEvent.PointerProperties[] pointerProperties =
+                        new MotionEvent.PointerProperties[1];
+                pointerProperties[0] = new MotionEvent.PointerProperties();
+                pointerProperties[0].id = mPointerId;
+                predictedEvent =
+                        MotionEvent.obtain(
+                                0 /* downTime */,
+                                0 /* eventTime */,
+                                MotionEvent.ACTION_MOVE /* action */,
+                                1 /* pointerCount */,
+                                pointerProperties /* pointer properties */,
+                                coords /* pointerCoords */,
+                                0 /* metaState */,
+                                0 /* buttonState */,
+                                1.0f /* xPrecision */,
+                                1.0f /* yPrecision */,
+                                0 /* deviceId */,
+                                0 /* edgeFlags */,
+                                0 /* source */,
+                                0 /* flags */);
+            } else {
+                predictedEvent.addBatch(0, coords, 0);
+            }
+        }
+        return predictedEvent;
+    }
+}
diff --git a/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/KalmanMotionEventPredictor.java b/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/KalmanMotionEventPredictor.java
new file mode 100644
index 0000000..e5abbd9
--- /dev/null
+++ b/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/KalmanMotionEventPredictor.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.input.motionprediction.kalman;
+
+import static androidx.annotation.RestrictTo.Scope.LIBRARY;
+
+import android.view.MotionEvent;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RestrictTo;
+import androidx.input.motionprediction.MotionEventPredictor;
+
+/**
+ * @hide
+ */
+@RestrictTo(LIBRARY)
+public class KalmanMotionEventPredictor implements MotionEventPredictor {
+    private MultiPointerPredictor mMultiPointerPredictor;
+    private boolean mDisposed = false;
+
+    public KalmanMotionEventPredictor() {
+        mMultiPointerPredictor = new MultiPointerPredictor();
+        // 1 may seem arbitrary, but this basically tells the predictor to
+        // just predict the next MotionEvent.
+        // This will need to change as we want to build a prediction depending
+        // on the expected time that the frame will arrive to the screen.
+        mMultiPointerPredictor.setPredictionTarget(1);
+    }
+
+    @Override
+    public void recordMovement(@NonNull MotionEvent event) {
+        mMultiPointerPredictor.onTouchEvent(event);
+    }
+
+    @Nullable
+    @Override
+    public MotionEvent predict() {
+        if (mDisposed) {
+            return null;
+        }
+        return mMultiPointerPredictor.predict();
+    }
+
+    @Override
+    public void dispose() {
+        mDisposed = true;
+    }
+}
diff --git a/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/MultiPointerPredictor.java b/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/MultiPointerPredictor.java
new file mode 100644
index 0000000..d223ddb
--- /dev/null
+++ b/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/MultiPointerPredictor.java
@@ -0,0 +1,221 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.input.motionprediction.kalman;
+
+import static androidx.annotation.RestrictTo.Scope.LIBRARY;
+
+import android.util.Log;
+import android.util.SparseArray;
+import android.view.MotionEvent;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RestrictTo;
+
+import java.util.Locale;
+
+/**
+ * @hide
+ */
+@RestrictTo(LIBRARY)
+public class MultiPointerPredictor implements InkPredictor {
+    private static final String TAG = "MultiPointerPredictor";
+    private static final boolean DEBUG_PREDICTION = Log.isLoggable(TAG, Log.DEBUG);
+
+    private SparseArray<KalmanInkPredictor> mPredictorMap = new SparseArray<>();
+    private int mPredictionTargetMs = 0;
+    private int mReportRateMs = 0;
+
+    public MultiPointerPredictor() {}
+
+    @Override
+    public int getPredictionTarget() {
+        return mPredictionTargetMs;
+    }
+
+    @Override
+    public void setPredictionTarget(int predictionTargetMillis) {
+        if (predictionTargetMillis < 0) {
+            predictionTargetMillis = 0;
+        }
+        mPredictionTargetMs = predictionTargetMillis;
+
+        for (int i = 0; i < mPredictorMap.size(); ++i) {
+            mPredictorMap.valueAt(i).setPredictionTarget(predictionTargetMillis);
+        }
+    }
+
+    @Override
+    public void setReportRate(int reportRateMs) {
+        if (reportRateMs <= 0) {
+            throw new IllegalArgumentException(
+                    "reportRateMs should always be a strictly" + "positive number");
+        }
+        mReportRateMs = reportRateMs;
+
+        for (int i = 0; i < mPredictorMap.size(); ++i) {
+            mPredictorMap.valueAt(i).setReportRate(mReportRateMs);
+        }
+    }
+
+    @Override
+    public boolean onTouchEvent(@NonNull MotionEvent event) {
+        int action = event.getActionMasked();
+        int pointerId = event.getPointerId(event.getActionIndex());
+        if (action == MotionEvent.ACTION_DOWN || action == MotionEvent.ACTION_POINTER_DOWN) {
+            KalmanInkPredictor predictor = new KalmanInkPredictor();
+            predictor.setPredictionTarget(mPredictionTargetMs);
+            predictor.setReportRate(mReportRateMs);
+            predictor.initStrokePrediction(pointerId);
+            predictor.onTouchEvent(event);
+            mPredictorMap.put(pointerId, predictor);
+        } else if (action == MotionEvent.ACTION_UP) {
+            KalmanInkPredictor predictor = mPredictorMap.get(pointerId);
+            if (predictor != null) {
+                mPredictorMap.remove(pointerId);
+                predictor.onTouchEvent(event);
+            }
+            mPredictorMap.clear();
+        } else if (action == MotionEvent.ACTION_POINTER_UP) {
+            KalmanInkPredictor predictor = mPredictorMap.get(pointerId);
+            if (predictor != null) {
+                mPredictorMap.remove(pointerId);
+                predictor.onTouchEvent(event);
+            }
+        } else if (action == MotionEvent.ACTION_CANCEL) {
+            mPredictorMap.clear();
+        } else if (action == MotionEvent.ACTION_MOVE) {
+            for (int i = 0; i < mPredictorMap.size(); ++i) {
+                mPredictorMap.valueAt(i).onTouchEvent(event);
+            }
+        } else {
+            // ignore other events
+            return false;
+        }
+        return true;
+    }
+
+    /** Support eventTime */
+    @Override
+    public @Nullable MotionEvent predict() {
+        final int pointerCount = mPredictorMap.size();
+        // Shortcut for likely case where only zero or one pointer is on the screen
+        // this logic exists only to make sure logic when one pointer is on screen then
+        // there is no performance degradation of using MultiPointerPredictor vs KalmanInkPredictor
+        // TODO: verify performance is not degraded by removing this shortcut logic.
+        if (pointerCount == 0) {
+            if (DEBUG_PREDICTION) {
+                Log.d(TAG, "predict() -> null: no pointer on screen");
+            }
+            return null;
+        }
+        if (pointerCount == 1) {
+            KalmanInkPredictor predictor = mPredictorMap.valueAt(0);
+            MotionEvent predictedEv = predictor.predict();
+            if (DEBUG_PREDICTION) {
+                Log.d(TAG, "predict() -> MotionEvent: " + predictedEv);
+            }
+            return predictedEv;
+        }
+
+        // Predict MotionEvent for each pointer
+        int[] pointerIds = new int[pointerCount];
+        MotionEvent[] singlePointerEvents = new MotionEvent[pointerCount];
+        for (int i = 0; i < pointerCount; ++i) {
+            pointerIds[i] = mPredictorMap.keyAt(i);
+            KalmanInkPredictor predictor = mPredictorMap.valueAt(i);
+            singlePointerEvents[i] = predictor.predict();
+            // If predictor consumer expect more sample, generate sample where position and
+            // pressure are constant
+            singlePointerEvents[i] = predictor.appendPredictedEvent(singlePointerEvents[i]);
+        }
+
+        // Compute minimal history size for every predicted single pointer MotionEvent
+        int minHistorySize = Integer.MAX_VALUE;
+        for (MotionEvent ev : singlePointerEvents) {
+            if (ev.getHistorySize() < minHistorySize) {
+                minHistorySize = ev.getHistorySize();
+            }
+        }
+        // Take into account the current event of each predicted MotionEvent
+        minHistorySize += 1;
+
+        // Merge single pointer MotionEvent into a single MotionEvent
+        MotionEvent.PointerCoords[][] pointerCoords =
+                new MotionEvent.PointerCoords[minHistorySize][pointerCount];
+        for (int pointerIndex = 0; pointerIndex < pointerCount; pointerIndex++) {
+            int historyIndex = 0;
+            for (BatchedMotionEvent ev :
+                    BatchedMotionEvent.iterate(singlePointerEvents[pointerIndex])) {
+                pointerCoords[historyIndex][pointerIndex] = ev.coords[0];
+                if (minHistorySize <= ++historyIndex) {
+                    break;
+                }
+            }
+        }
+
+        // Recycle single pointer predicted MotionEvent
+        for (MotionEvent ev : singlePointerEvents) {
+            ev.recycle();
+        }
+
+        // Generate predicted multi-pointer MotionEvent
+        final MotionEvent.PointerProperties[] pointerProperties =
+                new MotionEvent.PointerProperties[pointerCount];
+        for (int i = 0; i < pointerCount; i++) {
+            pointerProperties[i] = new MotionEvent.PointerProperties();
+            pointerProperties[i].id = pointerIds[i];
+        }
+        MotionEvent multiPointerEvent =
+                MotionEvent.obtain(
+                        0 /* down time */,
+                        0 /* event time */,
+                        MotionEvent.ACTION_MOVE /* action */,
+                        pointerCount /* pointer count */,
+                        pointerProperties /* pointer properties */,
+                        pointerCoords[0] /* pointer coordinates */,
+                        0 /* meta state */,
+                        0 /* button state */,
+                        1.0f /* x */,
+                        1.0f /* y */,
+                        0 /* device ID */,
+                        0 /* edge flags */,
+                        0 /* source */,
+                        0 /* flags */);
+        for (int historyIndex = 1; historyIndex < minHistorySize; historyIndex++) {
+            multiPointerEvent.addBatch(0, pointerCoords[historyIndex], 0);
+        }
+        if (DEBUG_PREDICTION) {
+            final StringBuilder builder =
+                    new StringBuilder(
+                            String.format(
+                                    Locale.ROOT,
+                                    "predict() -> MotionEvent: (pointerCount=%d, historySize=%d);",
+                                    multiPointerEvent.getPointerCount(),
+                                    multiPointerEvent.getHistorySize()));
+            for (BatchedMotionEvent motionEvent : BatchedMotionEvent.iterate(multiPointerEvent)) {
+                builder.append("      ");
+                for (MotionEvent.PointerCoords coord : motionEvent.coords) {
+                    builder.append(String.format(Locale.ROOT, "(%f, %f)", coord.x, coord.y));
+                }
+                builder.append("\n");
+            }
+            Log.d(TAG, builder.toString());
+        }
+        return multiPointerEvent;
+    }
+}
diff --git a/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/PenKalmanFilter.java b/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/PenKalmanFilter.java
new file mode 100644
index 0000000..a70b21e
--- /dev/null
+++ b/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/PenKalmanFilter.java
@@ -0,0 +1,170 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.input.motionprediction.kalman;
+
+import static androidx.annotation.RestrictTo.Scope.LIBRARY;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+import androidx.input.motionprediction.kalman.matrix.DVector2;
+import androidx.input.motionprediction.kalman.matrix.Matrix;
+
+/**
+ * Class that independently applies the Kalman Filter to each axis of the pen.
+ *
+ * @hide
+ */
+@RestrictTo(LIBRARY)
+public class PenKalmanFilter {
+    private KalmanFilter mXKalman;
+    private KalmanFilter mYKalman;
+    private KalmanFilter mPKalman;
+
+    private DVector2 mPosition = new DVector2();
+    private DVector2 mVelocity = new DVector2();
+    private DVector2 mAcceleration = new DVector2();
+    private DVector2 mJank = new DVector2();
+    private double mPressure = 0;
+    private double mPressureChange = 0;
+
+    private double mSigmaProcess;
+    private double mSigmaMeasurement;
+
+    private int mNumIterations = 0;
+
+    private Matrix mNewX = new Matrix(1, 1);
+    private Matrix mNewY = new Matrix(1, 1);
+    private Matrix mNewP = new Matrix(1, 1);
+
+    /**
+     * @param sigmaProcess lower value = more filtering
+     * @param sigmaMeasurement higher value = more filtering
+     */
+    public PenKalmanFilter(double sigmaProcess, double sigmaMeasurement) {
+        mSigmaProcess = sigmaProcess;
+        mSigmaMeasurement = sigmaMeasurement;
+        mXKalman = createAxisKalmanFilter();
+        mYKalman = createAxisKalmanFilter();
+        mPKalman = createAxisKalmanFilter();
+    }
+
+    /** Reset filter into a neutral state. */
+    public void reset() {
+        mXKalman.reset();
+        mYKalman.reset();
+        mPKalman.reset();
+        mNumIterations = 0;
+    }
+
+    /**
+     * Update internal model of pen with new measurement. The state of the model can be obtained by
+     * the getPosition, getVelocity, etc methods.
+     */
+    public void update(float x, float y, float pressure) {
+        if (mNumIterations == 0) {
+            mXKalman.x.put(0, 0, x);
+            mYKalman.x.put(0, 0, y);
+            mPKalman.x.put(0, 0, pressure);
+        } else {
+            mNewX.put(0, 0, x);
+            mXKalman.predict();
+            mXKalman.update(mNewX);
+
+            mNewY.put(0, 0, y);
+            mYKalman.predict();
+            mYKalman.update(mNewY);
+
+            mNewP.put(0, 0, pressure);
+            mPKalman.predict();
+            mPKalman.update(mNewP);
+        }
+        mNumIterations += 1;
+
+        mPosition.a1 = mXKalman.x.get(0, 0);
+        mPosition.a2 = mYKalman.x.get(0, 0);
+        mVelocity.a1 = mXKalman.x.get(1, 0);
+        mVelocity.a2 = mYKalman.x.get(1, 0);
+        mAcceleration.a1 = mXKalman.x.get(2, 0);
+        mAcceleration.a2 = mYKalman.x.get(2, 0);
+        mJank.a1 = mXKalman.x.get(3, 0);
+        mJank.a2 = mYKalman.x.get(3, 0);
+        mPressure = mPKalman.x.get(0, 0);
+        mPressureChange = mPKalman.x.get(1, 0);
+    }
+
+    public @NonNull DVector2 getPosition() {
+        return mPosition;
+    }
+
+    public @NonNull DVector2 getVelocity() {
+        return mVelocity;
+    }
+
+    public @NonNull DVector2 getAcceleration() {
+        return mAcceleration;
+    }
+
+    public @NonNull DVector2 getJank() {
+        return mJank;
+    }
+
+    public double getPressure() {
+        return mPressure;
+    }
+
+    public double getPressureChange() {
+        return mPressureChange;
+    }
+
+    public int getNumIterations() {
+        return mNumIterations;
+    }
+
+    private KalmanFilter createAxisKalmanFilter() {
+        // We tune the filter with a normalized dt=1, then apply the actual report rate during
+        // prediction.
+        final double dt = 1.0;
+
+        final KalmanFilter kalman = new KalmanFilter(4, 1);
+
+        // State transition matrix is derived from basic physics:
+        // new_x = x + v * dt + 1/2 * a * dt^2 + 1/6 * jank * dt^3
+        // new_v = v + a * dt + 1/2 * jank * dt^2
+        // ...
+        kalman.F = new Matrix(4,
+                new double[]{
+                        1.0, dt, 0.5 * dt * dt, 0.16 * dt * dt * dt,
+                        0.0, 1.0, dt, 0.5 * dt * dt,
+                        0.0, 0.0, 1.0, dt,
+                        0, 0, 0, 1.0
+                });
+
+        // We model the system noise as a noisy force on the pen.
+        // The matrix G describes the impact of that noise on each state.
+        final Matrix g = new Matrix(1, new double[] {0.16 * dt * dt * dt, 0.5 * dt * dt, dt, 1});
+        g.dotTranspose(g, kalman.Q);
+        kalman.Q.scale(mSigmaProcess);
+
+        // Measurements only impact the location
+        kalman.H = new Matrix(4, new double[] {1.0, 0.0, 0.0, 0.0});
+
+        // Measurement noise is a 1-D normal distribution
+        kalman.R.put(0, 0, mSigmaMeasurement);
+
+        return kalman;
+    }
+}
diff --git a/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/matrix/DVector2.java b/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/matrix/DVector2.java
new file mode 100644
index 0000000..fffd454
--- /dev/null
+++ b/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/matrix/DVector2.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.input.motionprediction.kalman.matrix;
+
+import static androidx.annotation.RestrictTo.Scope.LIBRARY;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+
+/**
+ * A 2 element fixed sized vector, where each element is a double. This class can represent a (2x1)
+ * or (1x2) matrix.
+ *
+ * @hide
+ */
+@RestrictTo(LIBRARY)
+public class DVector2 {
+    public double a1;
+    public double a2;
+
+    public DVector2() {}
+
+    /** Returns the vector magnitude (abs, length). */
+    public double magnitude() {
+        return Math.hypot(a1, a2);
+    }
+
+    /** Sets the elements to the values from {@code newValue}. */
+    public void set(@NonNull DVector2 newValue) {
+        a1 = newValue.a1;
+        a2 = newValue.a2;
+    }
+}
diff --git a/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/matrix/Matrix.java b/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/matrix/Matrix.java
new file mode 100644
index 0000000..d41772e
--- /dev/null
+++ b/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/matrix/Matrix.java
@@ -0,0 +1,458 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.input.motionprediction.kalman.matrix;
+
+import static androidx.annotation.RestrictTo.Scope.LIBRARY;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+
+import java.util.Arrays;
+import java.util.Locale;
+
+// Based on http://androidxref.com/9.0.0_r3/xref/frameworks/opt/net/wifi/service/java/com/android/server/wifi/util/Matrix.java
+/**
+ * Utility for basic Matrix calculations.
+ *
+ * @hide
+ */
+@RestrictTo(LIBRARY)
+public class Matrix {
+
+    private final int mRows;
+    private final int mCols;
+    private final double[] mMem;
+
+    /**
+     * Creates a new matrix, initialized to zeros.
+     *
+     * @param rows number of mRows
+     * @param cols number of columns
+     */
+    public Matrix(int rows, int cols) {
+        mRows = rows;
+        mCols = cols;
+        mMem = new double[rows * cols];
+    }
+
+    /**
+     * Creates a new matrix using the provided array of values
+     *
+     * <p>Values are in row-major order.
+     *
+     * @param stride the number of columns
+     * @param values the array of values
+     * @throws IllegalArgumentException if length of values array not a multiple of stride
+     */
+    public Matrix(int stride, @NonNull double[] values) {
+        mRows = (values.length + stride - 1) / stride;
+        mCols = stride;
+        mMem = values;
+        if (mMem.length != mRows * mCols) {
+            throw new IllegalArgumentException(
+                    String.format(
+                            Locale.ROOT,
+                            "Invalid number of elements in 'values' Expected:%d Actual:%d",
+                            mMem.length,
+                            (mRows & mCols)));
+        }
+    }
+
+    /**
+     * Creates a new matrix, and copies the contents from the given {@code src} matrix.
+     *
+     * @param src the matrix to copy from
+     */
+    public Matrix(@NonNull Matrix src) {
+        mRows = src.mRows;
+        mCols = src.mCols;
+        mMem = new double[mRows * mCols];
+        System.arraycopy(src.mMem, 0, mMem, 0, mMem.length);
+    }
+
+    /** Returns the number of rows in the matrix. */
+    public int getNumRows() {
+        return mRows;
+    }
+
+    /** Returns the number of columns in the matrix. */
+    public int getNumCols() {
+        return mCols;
+    }
+
+    /**
+     * Creates an identity matrix with the given {@code width}.
+     *
+     * @param width the height and width of the identity matrix
+     * @return newly created identity matrix
+     */
+    public static @NonNull Matrix identity(int width) {
+        final Matrix ret = new Matrix(width, width);
+        setIdentity(ret);
+        return ret;
+    }
+
+    /**
+     * Sets all the diagonal elements to one and everything else to zero. If this is a square
+     * matrix, then it will be an identity matrix.
+     *
+     * @param matrix the matrix to perform the operation
+     */
+    public static void setIdentity(@NonNull Matrix matrix) {
+        Arrays.fill(matrix.mMem, 0.);
+        final int width = matrix.mRows < matrix.mCols ? matrix.mRows : matrix.mCols;
+        for (int i = 0; i < width; i++) {
+            matrix.put(i, i, 1);
+        }
+    }
+
+    /**
+     * Gets the value from row i, column j.
+     *
+     * @param i row number
+     * @param j column number
+     * @return the value at at i,j
+     * @throws IndexOutOfBoundsException if an index is out of bounds
+     */
+    public double get(int i, int j) {
+        if (!(0 <= i && i < mRows && 0 <= j && j < mCols)) {
+            throw new IndexOutOfBoundsException(
+                    String.format(
+                            Locale.ROOT,
+                            "Invalid matrix index value. i:%d j:%d not available in %s",
+                            i,
+                            j,
+                            shortString()));
+        }
+        return mMem[i * mCols + j];
+    }
+
+    /**
+     * Store a value in row i, column j.
+     *
+     * @param i row number
+     * @param j column number
+     * @param v value to store at i,j
+     * @throws IndexOutOfBoundsException if an index is out of bounds
+     */
+    public void put(int i, int j, double v) {
+        if (!(0 <= i && i < mRows && 0 <= j && j < mCols)) {
+            throw new IndexOutOfBoundsException(
+                    String.format(
+                            Locale.ROOT,
+                            "Invalid matrix index value. i:%d j:%d not available in %s",
+                            i,
+                            j,
+                            shortString()));
+        }
+        mMem[i * mCols + j] = v;
+    }
+
+    /**
+     * Sets all the elements to {@code value}.
+     *
+     * @param value the value to fill the matrix
+     */
+    public void fill(double value) {
+        Arrays.fill(mMem, value);
+    }
+
+    /**
+     * Scales every element by {@code alpha}.
+     *
+     * @param alpha the amount each element is multiplied by
+     */
+    public void scale(double alpha) {
+        final int size = mRows * mCols;
+        for (int i = 0; i < size; ++i) {
+            mMem[i] *= alpha;
+        }
+    }
+
+    /**
+     * Adds all elements of this matrix with {@code that}.
+     *
+     * @param that the other matrix
+     * @return a newly created matrix representing the sum of this and that
+     * @throws IllegalArgumentException if the dimensions differ
+     */
+    public @NonNull Matrix plus(@NonNull Matrix that) {
+        if (!(mRows == that.mRows && mCols == that.mCols)) {
+            throw new IllegalArgumentException(
+                    String.format(
+                            Locale.ROOT,
+                            "The matrix dimensions are not the same. this:%s that:%s",
+                            shortString(),
+                            that.shortString()));
+        }
+        for (int i = 0; i < mMem.length; i++) {
+            mMem[i] = mMem[i] + that.mMem[i];
+        }
+        return this;
+    }
+
+    /**
+     * Calculates the difference this matrix and {@code that}.
+     *
+     * @param that the other matrix
+     * @return newly created matrix representing the difference of this and that
+     * @throws IllegalArgumentException if the dimensions differ
+     */
+    public @NonNull Matrix minus(@NonNull Matrix that) {
+        if (!(mRows == that.mRows && mCols == that.mCols)) {
+            throw new IllegalArgumentException(
+                    String.format(
+                            Locale.ROOT,
+                            "The matrix dimensions are not the same. this:%s that:%s",
+                            shortString(),
+                            that.shortString()));
+        }
+        for (int i = 0; i < mMem.length; i++) {
+            mMem[i] = mMem[i] - that.mMem[i];
+        }
+        return this;
+    }
+
+    /**
+     * Calculates the matrix product of this matrix and {@code that}.
+     *
+     * @param that the other matrix
+     * @return newly created matrix representing the matrix product of this and that
+     * @throws IllegalArgumentException if the dimensions differ
+     */
+    public @NonNull Matrix dot(@NonNull Matrix that) {
+        try {
+            return dot(that, new Matrix(mRows, that.mCols));
+        } catch (IllegalArgumentException e) {
+            throw new IllegalArgumentException(
+                    String.format(
+                            Locale.ROOT,
+                            "The matrices dimensions are not conformant for a dot matrix "
+                                    + "operation. this:%s that:%s",
+                            shortString(),
+                            that.shortString()));
+        }
+    }
+
+    /**
+     * Calculates the matrix product of this matrix and {@code that}.
+     *
+     * @param that the other matrix
+     * @param result matrix to hold the result
+     * @return result, filled with the matrix product
+     * @throws IllegalArgumentException if the dimensions differ
+     */
+    public @NonNull Matrix dot(@NonNull Matrix that, @NonNull Matrix result) {
+        if (!(mRows == result.mRows && mCols == that.mRows && that.mCols == result.mCols)) {
+            throw new IllegalArgumentException(
+                    String.format(
+                            Locale.ROOT,
+                            "The matrices dimensions are not conformant for a dot matrix "
+                                    + "operation. this:%s that:%s result:%s",
+                            shortString(),
+                            that.shortString(),
+                            result.shortString()));
+        }
+        for (int i = 0; i < mRows; i++) {
+            for (int j = 0; j < that.mCols; j++) {
+                double s = 0.0;
+                for (int k = 0; k < mCols; k++) {
+                    s += get(i, k) * that.get(k, j);
+                }
+                result.put(i, j, s);
+            }
+        }
+        return result;
+    }
+
+    /**
+     * Calculates the inverse of a square matrix
+     *
+     * @return newly created matrix representing the matrix inverse
+     * @throws ArithmeticException if the matrix is not invertible
+     */
+    public @NonNull Matrix inverse() {
+        if (!(mRows == mCols)) {
+            throw new IllegalArgumentException(
+                    String.format(Locale.ROOT, "The matrix is not square. this:%s", shortString()));
+        }
+        final Matrix scratch = new Matrix(mRows, 2 * mCols);
+
+        for (int i = 0; i < mRows; i++) {
+            for (int j = 0; j < mCols; j++) {
+                scratch.put(i, j, get(i, j));
+                scratch.put(i, mCols + j, i == j ? 1.0 : 0.0);
+            }
+        }
+
+        for (int i = 0; i < mRows; i++) {
+            int ibest = i;
+            double vbest = Math.abs(scratch.get(ibest, ibest));
+            for (int ii = i + 1; ii < mRows; ii++) {
+                double v = Math.abs(scratch.get(ii, i));
+                if (v > vbest) {
+                    ibest = ii;
+                    vbest = v;
+                }
+            }
+            if (ibest != i) {
+                for (int j = 0; j < scratch.mCols; j++) {
+                    double t = scratch.get(i, j);
+                    scratch.put(i, j, scratch.get(ibest, j));
+                    scratch.put(ibest, j, t);
+                }
+            }
+            double d = scratch.get(i, i);
+            if (d == 0.0) {
+                throw new ArithmeticException("Singular matrix");
+            }
+            for (int j = 0; j < scratch.mCols; j++) {
+                scratch.put(i, j, scratch.get(i, j) / d);
+            }
+            for (int ii = i + 1; ii < mRows; ii++) {
+                d = scratch.get(ii, i);
+                for (int j = 0; j < scratch.mCols; j++) {
+                    scratch.put(ii, j, scratch.get(ii, j) - d * scratch.get(i, j));
+                }
+            }
+        }
+        for (int i = mRows - 1; i >= 0; i--) {
+            for (int ii = 0; ii < i; ii++) {
+                double d = scratch.get(ii, i);
+                for (int j = 0; j < scratch.mCols; j++) {
+                    scratch.put(ii, j, scratch.get(ii, j) - d * scratch.get(i, j));
+                }
+            }
+        }
+        for (int i = 0; i < mRows; i++) {
+            for (int j = 0; j < mCols; j++) {
+                put(i, j, scratch.get(i, mCols + j));
+            }
+        }
+        return this;
+    }
+
+    /**
+     * Calculates the matrix product with the transpose of a second matrix.
+     *
+     * @param that the other matrix
+     * @return newly created matrix representing the matrix product of this and that.transpose()
+     * @throws IllegalArgumentException if shapes are not conformant
+     */
+    public @NonNull Matrix dotTranspose(@NonNull Matrix that) {
+        try {
+            return dotTranspose(that, new Matrix(mRows, that.mRows));
+        } catch (IllegalArgumentException e) {
+            throw new IllegalArgumentException(
+                    String.format(
+                            Locale.ROOT,
+                            "The matrices dimensions are not conformant for a transpose "
+                                    + "operation. this:%s that:%s",
+                            shortString(),
+                            that.shortString()));
+        }
+    }
+
+    /**
+     * Calculates the matrix product with the transpose of a second matrix.
+     *
+     * @param that the other matrix
+     * @param result space to hold the result
+     * @return result, filled with the matrix product of this and that.transpose()
+     * @throws IllegalArgumentException if shapes are not conformant
+     */
+    public @NonNull Matrix dotTranspose(@NonNull Matrix that, @NonNull Matrix result) {
+        if (!(mRows == result.mRows && mCols == that.mCols && that.mRows == result.mCols)) {
+            throw new IllegalArgumentException(
+                    String.format(
+                            Locale.ROOT,
+                            "The matrices dimensions are not conformant for a transpose "
+                                    + "operation. this:%s that:%s result:%s",
+                            shortString(),
+                            that.shortString(),
+                            result.shortString()));
+        }
+        for (int i = 0; i < mRows; i++) {
+            for (int j = 0; j < that.mRows; j++) {
+                double s = 0.0;
+                for (int k = 0; k < mCols; k++) {
+                    s += get(i, k) * that.get(j, k);
+                }
+                result.put(i, j, s);
+            }
+        }
+        return result;
+    }
+
+    /** Tests for equality. */
+    @Override
+    public boolean equals(Object that) {
+        if (this == that) {
+            return true;
+        }
+        if (!(that instanceof Matrix)) {
+            return false;
+        }
+        Matrix other = (Matrix) that;
+        if (mRows != other.mRows) {
+            return false;
+        }
+        if (mCols != other.mCols) {
+            return false;
+        }
+        for (int i = 0; i < mMem.length; i++) {
+            if (mMem[i] != other.mMem[i]) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /** Calculates a hash code of this matrix. */
+    @Override
+    public int hashCode() {
+        int h = mRows * 101 + mCols;
+        for (double m : mMem) {
+            h = h * 37 + Double.hashCode(m);
+        }
+        return h;
+    }
+
+    /**
+     * Returns a string representation of this matrix.
+     *
+     * @return string like "2x2 [a, b; c, d]"
+     */
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder(mRows * mCols * 8);
+        sb.append(mRows).append("x").append(mCols).append(" [");
+        for (int i = 0; i < mMem.length; i++) {
+            if (i > 0) {
+                sb.append(i % mCols == 0 ? "; " : ", ");
+            }
+            sb.append(mMem[i]);
+        }
+        sb.append("]");
+        return sb.toString();
+    }
+
+    /** Returns the size of the matrix as a String. */
+    private String shortString() {
+        return "(" + mRows + "x" + mCols + ")";
+    }
+}
diff --git a/inspection/inspection-gradle-plugin/src/main/kotlin/androidx/inspection/gradle/InspectionPlugin.kt b/inspection/inspection-gradle-plugin/src/main/kotlin/androidx/inspection/gradle/InspectionPlugin.kt
index a5ff9d6..5ba8684 100644
--- a/inspection/inspection-gradle-plugin/src/main/kotlin/androidx/inspection/gradle/InspectionPlugin.kt
+++ b/inspection/inspection-gradle-plugin/src/main/kotlin/androidx/inspection/gradle/InspectionPlugin.kt
@@ -20,10 +20,8 @@
 import com.android.build.api.variant.Variant
 import com.android.build.gradle.LibraryExtension
 import com.google.protobuf.gradle.GenerateProtoTask
-import com.google.protobuf.gradle.ProtobufConvention
+import com.google.protobuf.gradle.ProtobufExtension
 import com.google.protobuf.gradle.ProtobufPlugin
-import com.google.protobuf.gradle.generateProtoTasks
-import com.google.protobuf.gradle.protoc
 import org.gradle.api.Plugin
 import org.gradle.api.Project
 import org.gradle.api.artifacts.Configuration
@@ -32,7 +30,6 @@
 import org.gradle.kotlin.dsl.apply
 import org.gradle.kotlin.dsl.create
 import org.gradle.kotlin.dsl.dependencies
-import org.gradle.kotlin.dsl.getPlugin
 import java.io.File
 import org.gradle.api.GradleException
 import org.gradle.api.artifacts.MinimalExternalModuleDependency
@@ -98,15 +95,13 @@
         project.apply(plugin = "com.google.protobuf")
         project.plugins.all {
             if (it is ProtobufPlugin) {
-                // https://github.com/google/protobuf-gradle-plugin/issues/505
-                @Suppress("DEPRECATION")
-                val protobufConvention = project.convention.getPlugin<ProtobufConvention>()
-                protobufConvention.protobuf.apply {
+                val protobufExtension = project.extensions.getByType(ProtobufExtension::class.java)
+                protobufExtension.apply {
                     protoc {
-                        this.artifact = project.getLibraryByName("protobufCompiler").toString()
+                        it.artifact = project.getLibraryByName("protobufCompiler").toString()
                     }
                     generateProtoTasks {
-                        all().forEach { task: GenerateProtoTask ->
+                        it.all().forEach { task: GenerateProtoTask ->
                             task.builtins.create("java") { options ->
                                 options.option("lite")
                             }
diff --git a/leanback/leanback/src/main/java/androidx/leanback/media/MediaPlayerGlue.java b/leanback/leanback/src/main/java/androidx/leanback/media/MediaPlayerGlue.java
index 74a0f83..f2fd711 100644
--- a/leanback/leanback/src/main/java/androidx/leanback/media/MediaPlayerGlue.java
+++ b/leanback/leanback/src/main/java/androidx/leanback/media/MediaPlayerGlue.java
@@ -476,7 +476,7 @@
      * This implementation is required in order to detect KEY_DOWN events
      * on the {@link androidx.leanback.widget.PlaybackControlsRow.FastForwardAction} and
      * {@link androidx.leanback.widget.PlaybackControlsRow.RewindAction}. Thus you
-     * should <u>NOT</u> set another {@link OnItemViewSelectedListener} on your
+     * should <b>NOT</b> set another {@link OnItemViewSelectedListener} on your
      * Fragment. Instead, override this method and call its super (this)
      * implementation.
      *
diff --git a/leanback/leanback/src/main/java/androidx/leanback/widget/ImageCardView.java b/leanback/leanback/src/main/java/androidx/leanback/widget/ImageCardView.java
index a670247..af5b59a 100644
--- a/leanback/leanback/src/main/java/androidx/leanback/widget/ImageCardView.java
+++ b/leanback/leanback/src/main/java/androidx/leanback/widget/ImageCardView.java
@@ -43,7 +43,7 @@
  * No matter what way you use, all your styles applied to an ImageCardView have to extend the style
  * {@link R.style#Widget_Leanback_ImageCardViewStyle}.
  * <p>
- * <u>Example:</u><br>
+ * <b>Example:</b><br>
  *
  * <pre>
  * {@code
@@ -69,7 +69,7 @@
  * You can do this by using a the {@link #ImageCardView(Context)} constructor and passing a
  * ContextThemeWrapper with the custom ImageCardView theme id.
  * <p>
- * <u>Example (using constructor):</u><br>
+ * <b>Example (using constructor):</b><br>
  *
  * <pre>
  * {@code
@@ -94,7 +94,7 @@
  * You can combine the following values:
  * <code>Title, Content, IconOnRight, IconOnLeft, ImageOnly</code>.
  * <p>
- * <u>Examples:</u><br>
+ * <b>Examples:</b><br>
  *
  * <pre>
  * {@code <style name="CustomImageCardViewStyle" parent="Widget.Leanback.ImageCardViewStyle">
diff --git a/libraryversions.toml b/libraryversions.toml
index bf07b12..66c401d 100644
--- a/libraryversions.toml
+++ b/libraryversions.toml
@@ -63,6 +63,7 @@
 HEIFWRITER = "1.1.0-alpha02"
 HILT = "1.1.0-alpha01"
 HILT_NAVIGATION_COMPOSE = "1.1.0-alpha01"
+INPUT_MOTIONPREDICTION = "1.0.0-alpha01"
 INSPECTION = "1.0.0"
 INTERPOLATOR = "1.1.0-alpha01"
 JAVASCRIPTENGINE = "1.0.0-alpha03"
@@ -128,7 +129,7 @@
 VIEWPAGER = "1.1.0-alpha02"
 VIEWPAGER2 = "1.2.0-alpha01"
 WEAR = "1.3.0-alpha04"
-WEAR_COMPOSE = "1.1.0-alpha08"
+WEAR_COMPOSE = "1.1.0-beta01"
 WEAR_INPUT = "1.2.0-alpha03"
 WEAR_INPUT_TESTING = "1.2.0-alpha03"
 WEAR_ONGOING = "1.1.0-alpha01"
@@ -195,6 +196,7 @@
 HEALTH_CONNECT = { group = "androidx.health.connect", atomicGroupVersion = "versions.HEALTH_CONNECT" }
 HEIFWRITER = { group = "androidx.heifwriter", atomicGroupVersion = "versions.HEIFWRITER" }
 HILT = { group = "androidx.hilt" }
+INPUT = { group = "androidx.input" }
 INSPECTION = { group = "androidx.inspection", atomicGroupVersion = "versions.INSPECTION" }
 INSPECTION_EXTENSIONS = { group = "androidx.inspection.extensions", atomicGroupVersion = "versions.SQLITE_INSPECTOR" }
 INTERPOLATOR = { group = "androidx.interpolator", atomicGroupVersion = "versions.INTERPOLATOR" }
diff --git a/lifecycle/lifecycle-compiler/build.gradle b/lifecycle/lifecycle-compiler/build.gradle
index b90583d..a1b7aba 100644
--- a/lifecycle/lifecycle-compiler/build.gradle
+++ b/lifecycle/lifecycle-compiler/build.gradle
@@ -47,6 +47,11 @@
     destinationDirectory.set(file("src/test/test-data/lib/"))
 }
 
+tasks.withType(Test).configureEach {
+    // https://github.com/google/compile-testing/issues/222
+    it.jvmArgs "--add-opens=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED"
+}
+
 androidx {
     name = "Android Lifecycles Compiler"
     type = LibraryType.ANNOTATION_PROCESSOR
diff --git a/mediarouter/mediarouter/src/main/java/androidx/mediarouter/app/SystemOutputSwitcherDialogController.java b/mediarouter/mediarouter/src/main/java/androidx/mediarouter/app/SystemOutputSwitcherDialogController.java
index 914f852..1446b74 100644
--- a/mediarouter/mediarouter/src/main/java/androidx/mediarouter/app/SystemOutputSwitcherDialogController.java
+++ b/mediarouter/mediarouter/src/main/java/androidx/mediarouter/app/SystemOutputSwitcherDialogController.java
@@ -23,6 +23,7 @@
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 import android.os.Build;
+import android.provider.Settings;
 
 import androidx.annotation.NonNull;
 
@@ -66,15 +67,26 @@
      * @return {@code true} if the dialog was shown successfully and {@code false} otherwise
      */
     public static boolean showDialog(@NonNull Context context) {
+        boolean result = false;
+
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
-            return showDialogForAndroidSAndAbove(context)
+            result = showDialogForAndroidSAndAbove(context)
                     // The intent action and related string constants are changed in S,
                     // however they are not public API yet. Try opening the output switcher with the
                     // old constants for devices that have prior version of the constants.
                     || showDialogForAndroidR(context);
         } else if (Build.VERSION.SDK_INT == Build.VERSION_CODES.R) {
-            return showDialogForAndroidR(context);
+            result = showDialogForAndroidR(context);
         }
+
+        if (result) {
+            return true;
+        }
+
+        if (isRunningOnWear(context) && showBluetoothSettingsFragment(context)) {
+            return true;
+        }
+
         return false;
     }
 
@@ -130,4 +142,37 @@
         }
         return false;
     }
+
+    private static boolean showBluetoothSettingsFragment(@NonNull Context context) {
+        // Wear OS specific intent. This is a default behaviour
+        // for devices without the output switcher dialog.
+        // See https://developer.android.com/training/wearables/overlays/audio.
+        Intent intent = new Intent(Settings.ACTION_BLUETOOTH_SETTINGS)
+                .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK)
+                .putExtra("EXTRA_CONNECTION_ONLY", true)
+                .putExtra("EXTRA_CLOSE_ON_CONNECT", true)
+                .putExtra("android.bluetooth.devicepicker.extra.FILTER_TYPE", 1);
+
+        PackageManager packageManager = context.getPackageManager();
+        List<ResolveInfo> resolveInfos = packageManager.queryIntentActivities(intent,
+                0 /* flags */);
+        for (ResolveInfo resolveInfo : resolveInfos) {
+            ActivityInfo activityInfo = resolveInfo.activityInfo;
+            if (activityInfo == null || activityInfo.applicationInfo == null) {
+                continue;
+            }
+            ApplicationInfo appInfo = activityInfo.applicationInfo;
+            if (((ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_UPDATED_SYSTEM_APP)
+                    & appInfo.flags) != 0) {
+                context.startActivity(intent);
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private static boolean isRunningOnWear(@NonNull Context context) {
+        PackageManager packageManager = context.getPackageManager();
+        return packageManager.hasSystemFeature(PackageManager.FEATURE_WATCH);
+    }
 }
diff --git a/mediarouter/mediarouter/src/test/java/androidx/mediarouter/app/SystemOutputSwitcherDialogControllerTest.java b/mediarouter/mediarouter/src/test/java/androidx/mediarouter/app/SystemOutputSwitcherDialogControllerTest.java
index ba00cd1..b3314fa 100644
--- a/mediarouter/mediarouter/src/test/java/androidx/mediarouter/app/SystemOutputSwitcherDialogControllerTest.java
+++ b/mediarouter/mediarouter/src/test/java/androidx/mediarouter/app/SystemOutputSwitcherDialogControllerTest.java
@@ -27,6 +27,7 @@
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
 import android.os.Build;
+import android.provider.Settings;
 
 import androidx.annotation.NonNull;
 import androidx.test.core.app.ApplicationProvider;
@@ -87,7 +88,6 @@
 
     private static void assertAndroidROrBelowOutputSwitcherIntent(
             @NonNull Intent intent, @NonNull Context context) {
-        assertThat(intent).isNotNull();
         assertThat(intent.getAction()).isEqualTo(OUTPUT_SWITCHER_INTENT_ACTION_ANDROID_R);
         assertThat(intent.getStringExtra("com.android.settings.panel.extra.PACKAGE_NAME"))
                 .isEqualTo(context.getPackageName());
@@ -101,6 +101,15 @@
         assertThat(intent.getStringExtra("package_name")).isEqualTo(context.getPackageName());
     }
 
+    private static void assertWearOsBluetoothSettingsIntent(@NonNull Intent intent) {
+        assertThat(intent.getAction())
+                .isEqualTo(Settings.ACTION_BLUETOOTH_SETTINGS);
+        assertThat(intent.getBooleanExtra("EXTRA_CONNECTION_ONLY", false)).isTrue();
+        assertThat(intent.getBooleanExtra("EXTRA_CLOSE_ON_CONNECT", false)).isTrue();
+        assertThat(intent.getIntExtra("android.bluetooth.devicepicker.extra.FILTER_TYPE", 0))
+                .isEqualTo(1);
+    }
+
     @RunWith(RobolectricTestRunner.class)
     @Config(sdk = Build.VERSION_CODES.R)
     public static class SystemOutputSwitcherDialogControllerAndroidRTest {
@@ -142,6 +151,28 @@
             // check that no API S code was called
             assertThat(mShadowApplication.getBroadcastIntents()).isEmpty();
         }
+
+        @Test
+        public void testThatShowsBluetoothSettingsDialogOnWearOs() {
+            try {
+                registerSystemUiIntentResolver(mShadowPackageManager,
+                        Settings.ACTION_BLUETOOTH_SETTINGS,
+                        SystemIntentResolverType.ACTIVITY);
+            } catch (PackageManager.NameNotFoundException e) {
+                assertWithMessage("Cannot register Settings Bluetooth").fail();
+            }
+
+            // enable wear os
+            mShadowPackageManager.setSystemFeature(PackageManager.FEATURE_WATCH, true);
+
+            assertThat(SystemOutputSwitcherDialogController.showDialog(mContext)).isTrue();
+
+            Intent intent = mShadowApplication.getNextStartedActivity();
+            assertWearOsBluetoothSettingsIntent(intent);
+
+            // check that no API S code was called
+            assertThat(mShadowApplication.getBroadcastIntents()).isEmpty();
+        }
     }
 
     @RunWith(RobolectricTestRunner.class)
@@ -236,5 +267,27 @@
             // check that no API R code was called
             assertThat(mShadowApplication.getNextStartedActivity()).isNull();
         }
+
+        @Test
+        public void testThatShowsBluetoothSettingsDialogOnWearOs() {
+            try {
+                registerSystemUiIntentResolver(mShadowPackageManager,
+                        Settings.ACTION_BLUETOOTH_SETTINGS,
+                        SystemIntentResolverType.ACTIVITY);
+            } catch (PackageManager.NameNotFoundException e) {
+                assertWithMessage("Cannot register Settings Bluetooth").fail();
+            }
+
+            // enable wear os
+            mShadowPackageManager.setSystemFeature(PackageManager.FEATURE_WATCH, true);
+
+            assertThat(SystemOutputSwitcherDialogController.showDialog(mContext)).isTrue();
+
+            Intent intent = mShadowApplication.getNextStartedActivity();
+            assertWearOsBluetoothSettingsIntent(intent);
+
+            // check that no API S code was as there is no receiver to resolve broadcast
+            assertThat(mShadowApplication.getBroadcastIntents()).isEmpty();
+        }
     }
 }
diff --git a/navigation/navigation-safe-args-generator/build.gradle b/navigation/navigation-safe-args-generator/build.gradle
index 26fd7d6..1741903 100644
--- a/navigation/navigation-safe-args-generator/build.gradle
+++ b/navigation/navigation-safe-args-generator/build.gradle
@@ -53,6 +53,11 @@
     def androidJar = classpath.find { it.name == "android.jar" }
     it.classpath = files(classpath.minus(androidJar).plus(androidJar))
 }
+tasks.withType(Test).configureEach {
+    // https://github.com/google/compile-testing/issues/222
+    it.jvmArgs "--add-opens=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED"
+}
+
 
 androidx {
     name = "Android Navigation TypeSafe Arguments Generator"
diff --git a/paging/integration-tests/testapp/build.gradle b/paging/integration-tests/testapp/build.gradle
index 77e84de..5ae97ce 100644
--- a/paging/integration-tests/testapp/build.gradle
+++ b/paging/integration-tests/testapp/build.gradle
@@ -50,8 +50,8 @@
 
 kapt {
     javacOptions {
-        option("-source", "8")
-        option("-target", "8")
+        option("--source", "8")
+        option("--target", "8")
     }
 }
 
diff --git a/playground-common/playground-plugin/src/main/kotlin/androidx/playground/PlaygroundPlugin.kt b/playground-common/playground-plugin/src/main/kotlin/androidx/playground/PlaygroundPlugin.kt
index ff190ae..2f21f7a 100644
--- a/playground-common/playground-plugin/src/main/kotlin/androidx/playground/PlaygroundPlugin.kt
+++ b/playground-common/playground-plugin/src/main/kotlin/androidx/playground/PlaygroundPlugin.kt
@@ -28,23 +28,24 @@
 
     private fun validateJvm(settings: Settings) {
         // validate JVM version to print an understandable error if it is not set to the
-        // required value (11)
+        // required value (17)
         val jvmVersion = System.getProperty("java.vm.specification.version")
-        check(jvmVersion == "11") {
+        check(jvmVersion == "17") {
             """
-                AndroidX build must be invoked with JDK 11.
+                AndroidX build must be invoked with JDK 17.
                 ${
                     if (settings.gradle.startParameter.projectProperties.containsKey(
                             "android.injected.invoked.from.ide"
                         )
                     ) {
                         """
-                            Make sure to set the Gradle JDK to JDK 11 in the project settings.
-                            File -> Settings -> Build, Execution, Deployment -> Build Tools ->
+                            Make sure to set the Gradle JDK to JDK 17 in the project settings.
+                            File -> Settings (on Mac Android Studio -> Preferences) ->
+                            Build, Execution, Deployment -> Build Tools ->
                             Gradle -> Gradle JDK"
                         """
                         } else {
-                        "Make sure your JAVA_HOME environment variable points to Java 11 JDK."
+                        "Make sure your JAVA_HOME environment variable points to Java 17 JDK."
                     }
                 }
                 Current version: $jvmVersion
diff --git a/playground-common/playground.properties b/playground-common/playground.properties
index 2277543..bfd8234 100644
--- a/playground-common/playground.properties
+++ b/playground-common/playground.properties
@@ -25,7 +25,7 @@
 kotlin.code.style=official
 # Disable docs
 androidx.enableDocumentation=false
-androidx.playground.snapshotBuildId=9138201
+androidx.playground.snapshotBuildId=9163047
 androidx.playground.metalavaBuildId=8993580
 androidx.playground.dokkaBuildId=7472101
 androidx.studio.type=playground
diff --git a/privacysandbox/tools/tools-apicompiler/src/main/java/androidx/privacysandbox/tools/apicompiler/generator/SdkCodeGenerator.kt b/privacysandbox/tools/tools-apicompiler/src/main/java/androidx/privacysandbox/tools/apicompiler/generator/SdkCodeGenerator.kt
index 59e6f44..8f6bb5c 100644
--- a/privacysandbox/tools/tools-apicompiler/src/main/java/androidx/privacysandbox/tools/apicompiler/generator/SdkCodeGenerator.kt
+++ b/privacysandbox/tools/tools-apicompiler/src/main/java/androidx/privacysandbox/tools/apicompiler/generator/SdkCodeGenerator.kt
@@ -19,6 +19,8 @@
 import androidx.privacysandbox.tools.core.model.ParsedApi
 import androidx.privacysandbox.tools.core.generator.AidlCompiler
 import androidx.privacysandbox.tools.core.generator.AidlGenerator
+import androidx.privacysandbox.tools.core.generator.ValueConverterFileGenerator
+import androidx.privacysandbox.tools.core.generator.converterNameSpec
 import com.google.devtools.ksp.processing.CodeGenerator
 import com.google.devtools.ksp.processing.Dependencies
 import java.nio.file.Files.createTempDirectory
@@ -31,10 +33,21 @@
 ) {
     fun generate() {
         generateAidlSources()
+        generateValueConverters()
         AbstractSdkProviderGenerator(codeGenerator, api).generate()
         StubDelegatesGenerator(codeGenerator, api).generate()
     }
 
+    private fun generateValueConverters() {
+        api.values.forEach { value ->
+            val file = ValueConverterFileGenerator(api, value).generate()
+            codeGenerator.createNewFile(
+                Dependencies(false), value.converterNameSpec().packageName,
+                value.converterNameSpec().simpleName,
+            ).write(file)
+        }
+    }
+
     private fun generateAidlSources() {
         val workingDir = createTempDirectory("aidl")
         try {
diff --git a/privacysandbox/tools/tools-apicompiler/src/main/java/androidx/privacysandbox/tools/apicompiler/generator/StubDelegatesGenerator.kt b/privacysandbox/tools/tools-apicompiler/src/main/java/androidx/privacysandbox/tools/apicompiler/generator/StubDelegatesGenerator.kt
index 24bc632..d8e59d1 100644
--- a/privacysandbox/tools/tools-apicompiler/src/main/java/androidx/privacysandbox/tools/apicompiler/generator/StubDelegatesGenerator.kt
+++ b/privacysandbox/tools/tools-apicompiler/src/main/java/androidx/privacysandbox/tools/apicompiler/generator/StubDelegatesGenerator.kt
@@ -20,8 +20,12 @@
 import androidx.privacysandbox.tools.core.generator.SpecNames
 import androidx.privacysandbox.tools.core.generator.addCode
 import androidx.privacysandbox.tools.core.generator.addControlFlow
+import androidx.privacysandbox.tools.core.generator.addStatement
 import androidx.privacysandbox.tools.core.generator.aidlName
 import androidx.privacysandbox.tools.core.generator.build
+import androidx.privacysandbox.tools.core.generator.toParcelableNameSpec
+import androidx.privacysandbox.tools.core.generator.fromParcelableNameSpec
+import androidx.privacysandbox.tools.core.generator.parcelableNameSpec
 import androidx.privacysandbox.tools.core.generator.poetSpec
 import androidx.privacysandbox.tools.core.generator.primaryConstructor
 import androidx.privacysandbox.tools.core.generator.transactionCallbackName
@@ -32,6 +36,7 @@
 import com.google.devtools.ksp.processing.CodeGenerator
 import com.google.devtools.ksp.processing.Dependencies
 import com.squareup.kotlinpoet.ClassName
+import com.squareup.kotlinpoet.CodeBlock
 import com.squareup.kotlinpoet.FileSpec
 import com.squareup.kotlinpoet.FunSpec
 import com.squareup.kotlinpoet.KModifier
@@ -40,6 +45,7 @@
 import com.squareup.kotlinpoet.PropertySpec
 import com.squareup.kotlinpoet.TypeSpec
 import com.squareup.kotlinpoet.asTypeName
+import com.squareup.kotlinpoet.joinToCode
 
 class StubDelegatesGenerator(
     private val codeGenerator: CodeGenerator,
@@ -90,8 +96,6 @@
     }
 
     private fun toSuspendFunSpec(method: Method): FunSpec {
-        val resultStatement =
-            "delegate.${method.name}(${method.parameters.joinToString(", ") { it.name }})"
         return FunSpec.builder(method.name).build {
             addModifiers(KModifier.OVERRIDE)
             addParameters(getParameters(method))
@@ -103,8 +107,19 @@
                     SpecNames.dispatchersMainClass
                 ) {
                     addControlFlow("try") {
-                        addStatement("val result = $resultStatement")
-                        addStatement("transactionCallback.onSuccess(result)")
+                        addStatement {
+                            add("val result = ")
+                            add(getDelegateCallBlock(method))
+                        }
+                        val value = api.valueMap[method.returnType]
+                        if (value != null) {
+                            addStatement(
+                                "transactionCallback.onSuccess(%M(result))",
+                                value.toParcelableNameSpec()
+                            )
+                        } else {
+                            addStatement("transactionCallback.onSuccess(result)")
+                        }
                     }
                     addControlFlow("catch (t: Throwable)") {
                         addStatement("transactionCallback.onFailure(404, t.message)")
@@ -119,17 +134,16 @@
     }
 
     private fun toNonSuspendFunSpec(method: Method) = FunSpec.builder(method.name).build {
-        val returnStatement =
-            "return delegate.${method.name}(${method.parameters.joinToString(", ") { it.name }})"
         addModifiers(KModifier.OVERRIDE)
         addParameters(getParameters(method))
-        returns(method.returnType.poetSpec())
-        addStatement(returnStatement).build()
+        addStatement { add(getDelegateCallBlock(method)) }
     }
 
     private fun getParameters(method: Method) = buildList {
         addAll(method.parameters.map { parameter ->
-            ParameterSpec(parameter.name, parameter.type.poetSpec())
+            api.valueMap[parameter.type]?.let { value ->
+                ParameterSpec(parameter.name, value.parcelableNameSpec())
+            } ?: ParameterSpec(parameter.name, parameter.type.poetSpec())
         })
         if (method.isSuspend) add(
             ParameterSpec(
@@ -141,6 +155,20 @@
         )
     }
 
+    private fun getDelegateCallBlock(method: Method) = CodeBlock.builder().build {
+        val parameters = method.parameters.map {
+            val value = api.valueMap[it.type]
+            if (value != null) {
+                CodeBlock.of("%M(${it.name})", value.fromParcelableNameSpec())
+            } else {
+                CodeBlock.of(it.name)
+            }
+        }
+        add("delegate.${method.name}(")
+        add(parameters.joinToCode())
+        add(")")
+    }
+
     private fun generateTransportCancellationCallback() {
         val packageName = api.getOnlyService().type.packageName
         val className = "TransportCancellationCallback"
diff --git a/privacysandbox/tools/tools-apicompiler/src/test/java/androidx/privacysandbox/tools/apicompiler/PrivacySandboxKspCompilerTest.kt b/privacysandbox/tools/tools-apicompiler/src/test/java/androidx/privacysandbox/tools/apicompiler/PrivacySandboxKspCompilerTest.kt
index 535f9b4..73bde7b 100644
--- a/privacysandbox/tools/tools-apicompiler/src/test/java/androidx/privacysandbox/tools/apicompiler/PrivacySandboxKspCompilerTest.kt
+++ b/privacysandbox/tools/tools-apicompiler/src/test/java/androidx/privacysandbox/tools/apicompiler/PrivacySandboxKspCompilerTest.kt
@@ -52,6 +52,11 @@
                 "com/mysdk/AbstractSandboxedSdkProvider.kt",
                 "com/mysdk/MySdkStubDelegate.kt",
                 "com/mysdk/TransportCancellationCallback.kt",
+                "com/mysdk/ResponseConverter.kt",
+                "com/mysdk/RequestConverter.kt",
+                "com/mysdk/ParcelableRequest.java",
+                "com/mysdk/ParcelableResponse.java",
+                "com/mysdk/IResponseTransactionCallback.java",
             )
         }.also {
             it.generatesSourcesWithContents(expectedOutput)
diff --git a/privacysandbox/tools/tools-apicompiler/src/test/test-data/testinterface/input/com/mysdk/MySdk.kt b/privacysandbox/tools/tools-apicompiler/src/test/test-data/testinterface/input/com/mysdk/MySdk.kt
index 353655c..cf15f15 100644
--- a/privacysandbox/tools/tools-apicompiler/src/test/test-data/testinterface/input/com/mysdk/MySdk.kt
+++ b/privacysandbox/tools/tools-apicompiler/src/test/test-data/testinterface/input/com/mysdk/MySdk.kt
@@ -1,10 +1,19 @@
 package com.mysdk
 
 import androidx.privacysandbox.tools.PrivacySandboxService
+import androidx.privacysandbox.tools.PrivacySandboxValue
 
 @PrivacySandboxService
 interface MySdk {
     suspend fun doStuff(x: Int, y: Int): String
 
+    suspend fun handleRequest(request: Request): Response
+
     fun doMoreStuff()
-}
\ No newline at end of file
+}
+
+@PrivacySandboxValue
+data class Request(val query: String)
+
+@PrivacySandboxValue
+data class Response(val response: String)
\ No newline at end of file
diff --git a/privacysandbox/tools/tools-apicompiler/src/test/test-data/testinterface/output/com/mysdk/MySdkStubDelegate.kt b/privacysandbox/tools/tools-apicompiler/src/test/test-data/testinterface/output/com/mysdk/MySdkStubDelegate.kt
index ff15a02..4b22ebc 100644
--- a/privacysandbox/tools/tools-apicompiler/src/test/test-data/testinterface/output/com/mysdk/MySdkStubDelegate.kt
+++ b/privacysandbox/tools/tools-apicompiler/src/test/test-data/testinterface/output/com/mysdk/MySdkStubDelegate.kt
@@ -1,5 +1,7 @@
 package com.mysdk
 
+import com.mysdk.RequestConverter.fromParcelable
+import com.mysdk.ResponseConverter.toParcelable
 import kotlin.Int
 import kotlin.Unit
 import kotlinx.coroutines.Dispatchers
@@ -27,5 +29,22 @@
     transactionCallback.onCancellable(cancellationSignal)
   }
 
-  public override fun doMoreStuff(): Unit = delegate.doMoreStuff()
+  public override fun handleRequest(request: ParcelableRequest,
+      transactionCallback: IResponseTransactionCallback): Unit {
+    val job = GlobalScope.launch(Dispatchers.Main) {
+      try {
+        val result = delegate.handleRequest(fromParcelable(request))
+        transactionCallback.onSuccess(toParcelable(result))
+      }
+      catch (t: Throwable) {
+        transactionCallback.onFailure(404, t.message)
+      }
+    }
+    val cancellationSignal = TransportCancellationCallback() { job.cancel() }
+    transactionCallback.onCancellable(cancellationSignal)
+  }
+
+  public override fun doMoreStuff(): Unit {
+    delegate.doMoreStuff()
+  }
 }
diff --git a/privacysandbox/tools/tools-apigenerator/src/main/java/androidx/privacysandbox/tools/apigenerator/ClientProxyTypeGenerator.kt b/privacysandbox/tools/tools-apigenerator/src/main/java/androidx/privacysandbox/tools/apigenerator/ClientProxyTypeGenerator.kt
index 28d44cf..2f418c9 100644
--- a/privacysandbox/tools/tools-apigenerator/src/main/java/androidx/privacysandbox/tools/apigenerator/ClientProxyTypeGenerator.kt
+++ b/privacysandbox/tools/tools-apigenerator/src/main/java/androidx/privacysandbox/tools/apigenerator/ClientProxyTypeGenerator.kt
@@ -16,12 +16,19 @@
 
 package androidx.privacysandbox.tools.apigenerator
 
+import androidx.privacysandbox.tools.core.generator.addCode
+import androidx.privacysandbox.tools.core.generator.addControlFlow
+import androidx.privacysandbox.tools.core.generator.addStatement
 import androidx.privacysandbox.tools.core.generator.build
+import androidx.privacysandbox.tools.core.generator.fromParcelableNameSpec
+import androidx.privacysandbox.tools.core.generator.parcelableNameSpec
 import androidx.privacysandbox.tools.core.generator.poetSpec
 import androidx.privacysandbox.tools.core.generator.primaryConstructor
+import androidx.privacysandbox.tools.core.generator.toParcelableNameSpec
+import androidx.privacysandbox.tools.core.generator.transactionCallbackName
 import androidx.privacysandbox.tools.core.model.AnnotatedInterface
 import androidx.privacysandbox.tools.core.model.Method
-import androidx.privacysandbox.tools.core.model.Parameter
+import androidx.privacysandbox.tools.core.model.ParsedApi
 import com.squareup.kotlinpoet.ClassName
 import com.squareup.kotlinpoet.CodeBlock
 import com.squareup.kotlinpoet.FunSpec
@@ -29,8 +36,12 @@
 import com.squareup.kotlinpoet.MemberName
 import com.squareup.kotlinpoet.PropertySpec
 import com.squareup.kotlinpoet.TypeSpec
+import com.squareup.kotlinpoet.joinToCode
 
-internal class ClientProxyTypeGenerator(private val service: AnnotatedInterface) {
+internal class ClientProxyTypeGenerator(
+    private val api: ParsedApi,
+    private val service: AnnotatedInterface
+) {
     internal val className =
         ClassName(service.type.packageName, "${service.type.simpleName}ClientProxy")
     internal val remoteBinderClassName =
@@ -61,16 +72,7 @@
             addModifiers(KModifier.OVERRIDE)
             addParameters(method.parameters.map { it.poetSpec() })
 
-            val parameterList = method.parameters.map(Parameter::name)
-            if (method.returnsUnit) {
-                addStatement(
-                    "remote.${method.name}(${parameterList.joinToString()})"
-                )
-            } else {
-                addStatement(
-                    "return remote.${method.name}(${parameterList.joinToString()})"
-                )
-            }
+            addCode(generateRemoteCall(method))
         }
 
     private fun generateSuspendProxyMethodImplementation(method: Method) =
@@ -80,67 +82,95 @@
             addParameters(method.parameters.map { it.poetSpec() })
             returns(method.returnType.poetSpec())
 
-            beginControlFlow("return suspendCancellableCoroutine")
+            addCode {
+                addControlFlow("return suspendCancellableCoroutine") {
+                    addStatement("var mCancellationSignal: %T? = null", cancellationSignalClassName)
 
-            addStatement("var mCancellationSignal: %T? = null", cancellationSignalClassName)
+                    add(generateTransactionCallbackObject(method))
+                    add(generateRemoteCall(method, listOf(CodeBlock.of("transactionCallback"))))
 
-            addCode(generateTransactionCallbackObject(method))
-
-            val parameterList = buildList {
-                addAll(method.parameters.map(Parameter::name))
-                add("transactionCallback")
+                    addControlFlow("it.invokeOnCancellation") {
+                        addStatement("mCancellationSignal?.cancel()")
+                    }
+                }
             }
-            addStatement("remote.${method.name}(${parameterList.joinToString()})")
-
-            beginControlFlow("it.invokeOnCancellation")
-            addStatement("mCancellationSignal?.cancel()")
-            endControlFlow()
-
-            endControlFlow()
         }
 
     private fun generateTransactionCallbackObject(method: Method) = CodeBlock.builder().build {
         val transactionCallbackClassName = ClassName(
             service.type.packageName,
-            "I${method.returnType.poetSpec().simpleName}TransactionCallback",
+            method.returnType.transactionCallbackName(),
             "Stub"
         )
-        beginControlFlow(
-            "val transactionCallback = object: %T()",
-            transactionCallbackClassName
-        )
 
-        beginControlFlow(
-            "override fun onCancellable(cancellationSignal: %T)",
-            cancellationSignalClassName
-        )
-        beginControlFlow("if (it.isCancelled)")
-        addStatement("cancellationSignal.cancel()")
-        endControlFlow()
-        addStatement("mCancellationSignal = cancellationSignal")
-        endControlFlow()
+        addControlFlow("val transactionCallback = object: %T()", transactionCallbackClassName) {
+            addControlFlow(
+                "override fun onCancellable(cancellationSignal: %T)",
+                cancellationSignalClassName
+            ) {
+                addControlFlow("if (it.isCancelled)") {
+                    addStatement("cancellationSignal.cancel()")
+                }
+                addStatement("mCancellationSignal = cancellationSignal")
+            }
 
+            add(generateTransactionCallbackOnSuccess(method))
+
+            addControlFlow("override fun onFailure(errorCode: Int, errorMessage: String)") {
+                addStatement(
+                    "it.%M(RuntimeException(errorMessage))",
+                    MemberName("kotlin.coroutines", "resumeWithException")
+                )
+            }
+        }
+    }
+
+    private fun generateTransactionCallbackOnSuccess(method: Method): CodeBlock {
         if (method.returnsUnit) {
-            beginControlFlow("override fun onSuccess()")
-            addStatement("it.resumeWith(Result.success(Unit))")
-            endControlFlow()
-        } else {
-            beginControlFlow(
-                "override fun onSuccess(result: %T)",
-                method.returnType.poetSpec()
-            )
-            addStatement("it.resumeWith(Result.success(result))")
-            endControlFlow()
+            return CodeBlock.builder().build {
+                addControlFlow("override fun onSuccess()") {
+                    addStatement("it.resumeWith(Result.success(Unit))")
+                }
+            }
         }
 
-        beginControlFlow("override fun onFailure(errorCode: Int, errorMessage: String)")
-        addStatement(
-            "it.%M(RuntimeException(errorMessage))",
-            MemberName("kotlin.coroutines", "resumeWithException")
-        )
-        endControlFlow()
+        val value = api.valueMap[method.returnType]
+        if (value != null) {
+            return CodeBlock.builder().build {
+                addControlFlow(
+                    "override fun onSuccess(result: %T)",
+                    value.parcelableNameSpec()
+                ) {
+                    addStatement("it.resumeWith(Result.success(%M(result)))",
+                        value.fromParcelableNameSpec())
+                }
+            }
+        }
 
-        endControlFlow()
+        return CodeBlock.builder().build {
+            addControlFlow(
+                "override fun onSuccess(result: %T)",
+                method.returnType.poetSpec()
+            ) {
+                addStatement("it.resumeWith(Result.success(result))")
+            }
+        }
+    }
+
+    private fun generateRemoteCall(
+        method: Method,
+        extraParameters: List<CodeBlock> = emptyList(),
+    ) = CodeBlock.builder().build {
+        val parameters = method.parameters.map { parameter ->
+            api.valueMap[parameter.type]?.toParcelableNameSpec()?.let { converterFunctionName ->
+                CodeBlock.of("%M(${parameter.name})", converterFunctionName)
+            } ?: CodeBlock.of(parameter.name)
+        } + extraParameters
+        addStatement {
+            add("remote.${method.name}(")
+            add(parameters.joinToCode())
+            add(")")
+        }
     }
 
     private val Method.returnsUnit: Boolean
diff --git a/privacysandbox/tools/tools-apigenerator/src/main/java/androidx/privacysandbox/tools/apigenerator/PrivacySandboxApiGenerator.kt b/privacysandbox/tools/tools-apigenerator/src/main/java/androidx/privacysandbox/tools/apigenerator/PrivacySandboxApiGenerator.kt
index 08b8cb2..0affdc1 100644
--- a/privacysandbox/tools/tools-apigenerator/src/main/java/androidx/privacysandbox/tools/apigenerator/PrivacySandboxApiGenerator.kt
+++ b/privacysandbox/tools/tools-apigenerator/src/main/java/androidx/privacysandbox/tools/apigenerator/PrivacySandboxApiGenerator.kt
@@ -20,6 +20,8 @@
 import androidx.privacysandbox.tools.core.model.ParsedApi
 import androidx.privacysandbox.tools.core.generator.AidlCompiler
 import androidx.privacysandbox.tools.core.generator.AidlGenerator
+import androidx.privacysandbox.tools.core.generator.ValueConverterFileGenerator
+import androidx.privacysandbox.tools.core.generator.ValueFileGenerator
 import java.io.File
 import java.nio.file.Files
 import java.nio.file.Path
@@ -52,9 +54,13 @@
         val sdkApi = ApiStubParser.parse(sdkInterfaceDescriptors)
         generateBinders(sdkApi, AidlCompiler(aidlCompiler), output)
 
+        sdkApi.values.forEach {
+            ValueFileGenerator(it).generate().writeTo(output)
+            ValueConverterFileGenerator(sdkApi, it).generate().writeTo(output)
+        }
         sdkApi.services.forEach {
             ServiceInterfaceFileGenerator(it).generate().writeTo(output)
-            ServiceFactoryFileGenerator(it).generate().writeTo(output)
+            ServiceFactoryFileGenerator(sdkApi, it).generate().writeTo(output)
         }
     }
 
diff --git a/privacysandbox/tools/tools-apigenerator/src/main/java/androidx/privacysandbox/tools/apigenerator/ServiceFactoryFileGenerator.kt b/privacysandbox/tools/tools-apigenerator/src/main/java/androidx/privacysandbox/tools/apigenerator/ServiceFactoryFileGenerator.kt
index 42daf61..444aac5 100644
--- a/privacysandbox/tools/tools-apigenerator/src/main/java/androidx/privacysandbox/tools/apigenerator/ServiceFactoryFileGenerator.kt
+++ b/privacysandbox/tools/tools-apigenerator/src/main/java/androidx/privacysandbox/tools/apigenerator/ServiceFactoryFileGenerator.kt
@@ -17,26 +17,32 @@
 package androidx.privacysandbox.tools.apigenerator
 
 import androidx.privacysandbox.tools.core.generator.addCode
+import androidx.privacysandbox.tools.core.generator.addCommonSettings
 import androidx.privacysandbox.tools.core.generator.addControlFlow
+import androidx.privacysandbox.tools.core.generator.addStatement
 import androidx.privacysandbox.tools.core.generator.build
 import androidx.privacysandbox.tools.core.model.AnnotatedInterface
+import androidx.privacysandbox.tools.core.model.ParsedApi
 import com.squareup.kotlinpoet.ClassName
+import com.squareup.kotlinpoet.CodeBlock
 import com.squareup.kotlinpoet.FileSpec
 import com.squareup.kotlinpoet.FunSpec
 import com.squareup.kotlinpoet.KModifier
 import com.squareup.kotlinpoet.ParameterSpec
+import com.squareup.kotlinpoet.joinToCode
 
-internal class ServiceFactoryFileGenerator(private val service: AnnotatedInterface) {
-    private val proxyTypeGenerator by lazy {
-        ClientProxyTypeGenerator(service)
-    }
+internal class ServiceFactoryFileGenerator(
+    private val api: ParsedApi,
+    private val service: AnnotatedInterface
+) {
+    private val proxyTypeGenerator = ClientProxyTypeGenerator(api, service)
 
     fun generate(): FileSpec =
         FileSpec.builder(service.type.packageName, "${service.type.simpleName}Factory").build {
+            addCommonSettings()
             addImport("kotlinx.coroutines", "suspendCancellableCoroutine")
             addImport("kotlin.coroutines", "resume")
             addImport("kotlin.coroutines", "resumeWithException")
-            addKotlinDefaultImports(includeJvm = false, includeJs = false)
 
             addFunction(generateFactoryFunction())
 
@@ -76,13 +82,17 @@
                             addStatement("it.resumeWithException(error)")
                         }
                     }
-                    addStatement("""
-                        |sdkSandboxManager.loadSdk(
-                        |%S,
-                        |%T.EMPTY,
-                        |{ obj: Runnable -> obj.run() },
-                        |outcomeReceiver)
-                    """.trimMargin(), service.type.packageName, AndroidClassNames.bundle)
+                    val loadSdkParameters = listOf(
+                        CodeBlock.of("%S", service.type.packageName),
+                        CodeBlock.of("%T.EMPTY", AndroidClassNames.bundle),
+                        CodeBlock.of("Runnable::run"),
+                        CodeBlock.of("outcomeReceiver"),
+                    )
+                    addStatement {
+                        add("sdkSandboxManager.loadSdk(")
+                        add(loadSdkParameters.joinToCode())
+                        add(")")
+                    }
                 }
             }
         }
diff --git a/privacysandbox/tools/tools-apigenerator/src/main/java/androidx/privacysandbox/tools/apigenerator/ServiceInterfaceFileGenerator.kt b/privacysandbox/tools/tools-apigenerator/src/main/java/androidx/privacysandbox/tools/apigenerator/ServiceInterfaceFileGenerator.kt
index 3fee088..c0a5e9e 100644
--- a/privacysandbox/tools/tools-apigenerator/src/main/java/androidx/privacysandbox/tools/apigenerator/ServiceInterfaceFileGenerator.kt
+++ b/privacysandbox/tools/tools-apigenerator/src/main/java/androidx/privacysandbox/tools/apigenerator/ServiceInterfaceFileGenerator.kt
@@ -16,6 +16,7 @@
 
 package androidx.privacysandbox.tools.apigenerator
 
+import androidx.privacysandbox.tools.core.generator.addCommonSettings
 import androidx.privacysandbox.tools.core.model.AnnotatedInterface
 import androidx.privacysandbox.tools.core.model.Method
 import androidx.privacysandbox.tools.core.generator.build
@@ -34,7 +35,7 @@
             }
 
         return FileSpec.get(service.type.packageName, annotatedInterface).toBuilder().build {
-            addKotlinDefaultImports(includeJvm = false, includeJs = false)
+            addCommonSettings()
         }
     }
 
diff --git a/privacysandbox/tools/tools-apigenerator/src/main/java/androidx/privacysandbox/tools/apigenerator/parser/AnnotatedClassReader.kt b/privacysandbox/tools/tools-apigenerator/src/main/java/androidx/privacysandbox/tools/apigenerator/parser/AnnotatedClassReader.kt
index 129bb37..38b8a19 100644
--- a/privacysandbox/tools/tools-apigenerator/src/main/java/androidx/privacysandbox/tools/apigenerator/parser/AnnotatedClassReader.kt
+++ b/privacysandbox/tools/tools-apigenerator/src/main/java/androidx/privacysandbox/tools/apigenerator/parser/AnnotatedClassReader.kt
@@ -16,6 +16,7 @@
 
 package androidx.privacysandbox.tools.apigenerator.parser
 
+import androidx.privacysandbox.tools.PrivacySandboxCallback
 import androidx.privacysandbox.tools.PrivacySandboxService
 import androidx.privacysandbox.tools.PrivacySandboxValue
 import java.nio.file.Path
@@ -29,13 +30,18 @@
 import org.objectweb.asm.tree.AnnotationNode
 import org.objectweb.asm.tree.ClassNode
 
-data class AnnotatedClasses(val services: Set<KmClass>, val values: Set<KmClass>)
+data class AnnotatedClasses(
+    val services: Set<KmClass>,
+    val values: Set<KmClass>,
+    val callbacks: Set<KmClass>,
+)
 internal object AnnotatedClassReader {
     val annotations = listOf(PrivacySandboxService::class)
 
     fun readAnnotatedClasses(stubClassPath: Path): AnnotatedClasses {
         val services = mutableSetOf<KmClass>()
         val values = mutableSetOf<KmClass>()
+        val callbacks = mutableSetOf<KmClass>()
         readClassNodes(stubClassPath).forEach { classNode ->
             if (classNode.isAnnotatedWith<PrivacySandboxService>()) {
                 services.add(parseKotlinMetadata(classNode))
@@ -43,8 +49,11 @@
             if (classNode.isAnnotatedWith<PrivacySandboxValue>()) {
                 values.add(parseKotlinMetadata(classNode))
             }
+            if (classNode.isAnnotatedWith<PrivacySandboxCallback>()) {
+                callbacks.add(parseKotlinMetadata(classNode))
+            }
         }
-        return AnnotatedClasses(services = services.toSet(), values = values.toSet())
+        return AnnotatedClasses(services.toSet(), values.toSet(), callbacks.toSet())
     }
 
     private fun readClassNodes(stubClassPath: Path): List<ClassNode> =
diff --git a/privacysandbox/tools/tools-apigenerator/src/main/java/androidx/privacysandbox/tools/apigenerator/parser/ApiStubParser.kt b/privacysandbox/tools/tools-apigenerator/src/main/java/androidx/privacysandbox/tools/apigenerator/parser/ApiStubParser.kt
index 90db073..6a3fa930 100644
--- a/privacysandbox/tools/tools-apigenerator/src/main/java/androidx/privacysandbox/tools/apigenerator/parser/ApiStubParser.kt
+++ b/privacysandbox/tools/tools-apigenerator/src/main/java/androidx/privacysandbox/tools/apigenerator/parser/ApiStubParser.kt
@@ -42,24 +42,25 @@
      *      Kotlin interface annotated with @PrivacySandboxService.
      */
     internal fun parse(sdkInterfaceDescriptors: Path): ParsedApi {
-        val (services, values) =
+        val (services, values, callbacks) =
             AnnotatedClassReader.readAnnotatedClasses(sdkInterfaceDescriptors)
         if (services.isEmpty()) throw PrivacySandboxParsingException(
             "Unable to find valid interfaces annotated with @PrivacySandboxService."
         )
         return ParsedApi(
-            services.map(::parseInterface).toSet(),
-            values.map(::parseValue).toSet()
+            services.map { parseInterface(it, "PrivacySandboxService") }.toSet(),
+            values.map(::parseValue).toSet(),
+            callbacks.map { parseInterface(it, "PrivacySandboxCallback") }.toSet(),
         ).also(::validate)
     }
 
-    private fun parseInterface(service: KmClass): AnnotatedInterface {
+    private fun parseInterface(service: KmClass, annotationName: String): AnnotatedInterface {
         val type = parseClassName(service.name)
 
         if (!Flag.Class.IS_INTERFACE(service.flags)) {
             throw PrivacySandboxParsingException(
                 "${type.qualifiedName} is not a Kotlin interface but it's annotated with " +
-                    "@PrivacySandboxService."
+                    "@$annotationName."
             )
         }
 
diff --git a/privacysandbox/tools/tools-apigenerator/src/test/java/androidx/privacysandbox/tools/apigenerator/BaseApiGeneratorTest.kt b/privacysandbox/tools/tools-apigenerator/src/test/java/androidx/privacysandbox/tools/apigenerator/BaseApiGeneratorTest.kt
new file mode 100644
index 0000000..005e8b9
--- /dev/null
+++ b/privacysandbox/tools/tools-apigenerator/src/test/java/androidx/privacysandbox/tools/apigenerator/BaseApiGeneratorTest.kt
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.privacysandbox.tools.apigenerator
+
+import androidx.privacysandbox.tools.testing.CompilationTestHelper.assertCompiles
+import androidx.privacysandbox.tools.testing.loadSourcesFromDirectory
+import androidx.room.compiler.processing.util.Source
+import com.google.common.truth.Truth.assertThat
+import java.io.File
+import java.nio.file.Files
+import kotlin.io.path.Path
+import org.junit.Test
+
+abstract class BaseApiGeneratorTest {
+    abstract val inputDirectory: File
+    abstract val outputDirectory: File
+    abstract val relativePathsToExpectedAidlClasses: List<String>
+
+    private val generatedSources: List<Source> by lazy {
+        val descriptors =
+            compileIntoInterfaceDescriptorsJar(
+                *loadSourcesFromDirectory(inputDirectory).toTypedArray()
+            )
+        val aidlPath = System.getProperty("aidl_compiler_path")?.let(::Path)
+            ?: throw IllegalArgumentException("aidl_compiler_path flag not set.")
+
+        val generator = PrivacySandboxApiGenerator()
+
+        val outputDir = Files.createTempDirectory("output").also { it.toFile().deleteOnExit() }
+        generator.generate(descriptors, aidlPath, outputDir)
+        loadSourcesFromDirectory(outputDir.toFile())
+    }
+
+    @Test
+    fun generatedApi_compiles() {
+      assertCompiles(generatedSources)
+    }
+
+    @Test
+    fun generatedApi_hasExpectedContents() {
+        val expectedSources = loadSourcesFromDirectory(outputDirectory)
+        assertThat(generatedSources.map(Source::relativePath))
+            .containsExactlyElementsIn(
+                expectedSources.map(Source::relativePath) + relativePathsToExpectedAidlClasses
+            )
+
+        val outputSourceMap = generatedSources.associateBy(Source::relativePath)
+        for (expected in expectedSources) {
+            assertThat(outputSourceMap[expected.relativePath]?.contents)
+                .isEqualTo(expected.contents)
+        }
+    }
+}
\ No newline at end of file
diff --git a/privacysandbox/tools/tools-apigenerator/src/test/java/androidx/privacysandbox/tools/apigenerator/PrimitivesApiGeneratorTest.kt b/privacysandbox/tools/tools-apigenerator/src/test/java/androidx/privacysandbox/tools/apigenerator/PrimitivesApiGeneratorTest.kt
new file mode 100644
index 0000000..411a357
--- /dev/null
+++ b/privacysandbox/tools/tools-apigenerator/src/test/java/androidx/privacysandbox/tools/apigenerator/PrimitivesApiGeneratorTest.kt
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.privacysandbox.tools.apigenerator
+
+import java.io.File
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+@RunWith(JUnit4::class)
+class PrimitivesApiGeneratorTest : BaseApiGeneratorTest() {
+    override val inputDirectory = File("src/test/test-data/primitives/input")
+    override val outputDirectory = File("src/test/test-data/primitives/output")
+    override val relativePathsToExpectedAidlClasses = listOf(
+        "com/mysdk/ITestSandboxSdk.java",
+        "com/mysdk/IBooleanTransactionCallback.java",
+        "com/mysdk/ICancellationSignal.java",
+        "com/mysdk/IUnitTransactionCallback.java",
+    )
+}
\ No newline at end of file
diff --git a/privacysandbox/tools/tools-apigenerator/src/test/java/androidx/privacysandbox/tools/apigenerator/PrivacySandboxApiGeneratorTest.kt b/privacysandbox/tools/tools-apigenerator/src/test/java/androidx/privacysandbox/tools/apigenerator/PrivacySandboxApiGeneratorTest.kt
deleted file mode 100644
index 589c6cc..0000000
--- a/privacysandbox/tools/tools-apigenerator/src/test/java/androidx/privacysandbox/tools/apigenerator/PrivacySandboxApiGeneratorTest.kt
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright 2022 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.privacysandbox.tools.apigenerator
-
-import androidx.room.compiler.processing.util.Source
-import androidx.privacysandbox.tools.testing.loadSourcesFromDirectory
-import androidx.privacysandbox.tools.testing.CompilationTestHelper.assertCompiles
-import com.google.common.truth.Truth.assertThat
-import com.google.common.truth.Truth.assertWithMessage
-import java.io.File
-import java.nio.file.Files
-import kotlin.io.path.Path
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.JUnit4
-
-@RunWith(JUnit4::class)
-class PrivacySandboxApiGeneratorTest {
-    @Test
-    fun testSandboxSdk_compilesAndGeneratesExpectedOutput() {
-        val descriptors =
-            compileIntoInterfaceDescriptorsJar(
-                *loadSourcesFromDirectory(inputTestDataDir).toTypedArray()
-            )
-        val aidlPath = System.getProperty("aidl_compiler_path")?.let(::Path)
-            ?: throw IllegalArgumentException("aidl_compiler_path flag not set.")
-
-        val generator = PrivacySandboxApiGenerator()
-
-        val outputDir = Files.createTempDirectory("output").also { it.toFile().deleteOnExit() }
-        generator.generate(descriptors, aidlPath, outputDir)
-        val outputSources = loadSourcesFromDirectory(outputDir.toFile())
-
-        assertCompiles(outputSources)
-
-        val expectedSources = loadSourcesFromDirectory(outputTestDataDir)
-        assertThat(outputSources.map(Source::relativePath))
-            .containsExactlyElementsIn(
-                expectedSources.map(Source::relativePath) + listOf(
-                    "com/mysdk/ITestSandboxSdk.java",
-                    "com/mysdk/IBooleanTransactionCallback.java",
-                    "com/mysdk/ICancellationSignal.java",
-                    "com/mysdk/IUnitTransactionCallback.java",
-                )
-            )
-
-        val outputSourceMap = outputSources.associateBy(Source::relativePath)
-        for (expected in expectedSources) {
-            assertWithMessage("Contents of file ${expected.relativePath} don't match.")
-                .that(outputSourceMap[expected.relativePath]?.contents).isEqualTo(expected.contents)
-        }
-    }
-
-    companion object {
-        val inputTestDataDir = File("src/test/test-data/input")
-        val outputTestDataDir = File("src/test/test-data/output")
-    }
-}
\ No newline at end of file
diff --git a/privacysandbox/tools/tools-apigenerator/src/test/java/androidx/privacysandbox/tools/apigenerator/ValuesApiGeneratorTest.kt b/privacysandbox/tools/tools-apigenerator/src/test/java/androidx/privacysandbox/tools/apigenerator/ValuesApiGeneratorTest.kt
new file mode 100644
index 0000000..c6a0b26
--- /dev/null
+++ b/privacysandbox/tools/tools-apigenerator/src/test/java/androidx/privacysandbox/tools/apigenerator/ValuesApiGeneratorTest.kt
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.privacysandbox.tools.apigenerator
+
+import java.io.File
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+@RunWith(JUnit4::class)
+class ValuesApiGeneratorTest : BaseApiGeneratorTest() {
+    override val inputDirectory = File("src/test/test-data/values/input")
+    override val outputDirectory = File("src/test/test-data/values/output")
+    override val relativePathsToExpectedAidlClasses = listOf(
+        "com/sdkwithvalues/ISdkInterface.java",
+        "com/sdkwithvalues/ISdkResponseTransactionCallback.java",
+        "com/sdkwithvalues/ParcelableInnerSdkValue.java",
+        "com/sdkwithvalues/ParcelableSdkRequest.java",
+        "com/sdkwithvalues/ParcelableSdkResponse.java",
+        "com/sdkwithvalues/ICancellationSignal.java",
+    )
+}
diff --git a/privacysandbox/tools/tools-apigenerator/src/test/java/androidx/privacysandbox/tools/apigenerator/parser/ApiStubParserTest.kt b/privacysandbox/tools/tools-apigenerator/src/test/java/androidx/privacysandbox/tools/apigenerator/parser/ApiStubParserTest.kt
index d2fb002..3489840 100644
--- a/privacysandbox/tools/tools-apigenerator/src/test/java/androidx/privacysandbox/tools/apigenerator/parser/ApiStubParserTest.kt
+++ b/privacysandbox/tools/tools-apigenerator/src/test/java/androidx/privacysandbox/tools/apigenerator/parser/ApiStubParserTest.kt
@@ -39,6 +39,7 @@
         val source = Source.kotlin(
             "com/mysdk/TestSandboxSdk.kt", """
                     package com.mysdk
+                    import androidx.privacysandbox.tools.PrivacySandboxCallback
                     import androidx.privacysandbox.tools.PrivacySandboxService
                     import androidx.privacysandbox.tools.PrivacySandboxValue
                     @PrivacySandboxService
@@ -52,6 +53,10 @@
                     data class PayloadResponse(val url: String)
                     @PrivacySandboxValue
                     data class PayloadRequest(val type: PayloadType)
+                    @PrivacySandboxCallback
+                    interface CustomCallback {
+                      fun onComplete(status: Int)
+                    }
                 """
         )
 
@@ -104,6 +109,23 @@
                 )
             )
 
+        val expectedCallback = AnnotatedInterface(
+            type = Type(packageName = "com.mysdk", simpleName = "CustomCallback"),
+                methods = listOf(
+                    Method(
+                        name = "onComplete",
+                        parameters = listOf(
+                            Parameter(
+                                "status",
+                                Types.int
+                            ),
+                        ),
+                        returnType = Types.unit,
+                        isSuspend = false,
+                    ),
+                )
+        )
+
         val actualApi = compileAndParseApi(source)
         assertThat(actualApi.services).containsExactly(expectedService)
         assertThat(actualApi.values).containsExactly(
@@ -111,6 +133,7 @@
             expectedPayloadRequest,
             expectedPayloadResponse,
         )
+        assertThat(actualApi.callbacks).containsExactly(expectedCallback)
     }
 
     @Test
diff --git a/privacysandbox/tools/tools-apigenerator/src/test/test-data/output/com/mysdk/TestSandboxSdk.kt b/privacysandbox/tools/tools-apigenerator/src/test/test-data/output/com/mysdk/TestSandboxSdk.kt
deleted file mode 100644
index d0f8209..0000000
--- a/privacysandbox/tools/tools-apigenerator/src/test/test-data/output/com/mysdk/TestSandboxSdk.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.mysdk
-
-public interface TestSandboxSdk {
-  public suspend fun doSomethingAsync(
-    first: Int,
-    second: String,
-    third: Long,
-  ): Boolean
-
-  public fun echoBoolean(input: Boolean): Unit
-
-  public fun echoChar(input: Char): Unit
-
-  public fun echoDouble(input: Double): Unit
-
-  public fun echoFloat(input: Float): Unit
-
-  public fun echoInt(input: Int): Unit
-
-  public fun echoLong(input: Long): Unit
-
-  public fun echoString(input: String): Unit
-
-  public fun receiveAndReturnNothing(): Unit
-
-  public suspend fun receiveAndReturnNothingAsync(): Unit
-
-  public fun receiveMultipleArguments(
-    first: Int,
-    second: String,
-    third: Long,
-  ): Unit
-}
diff --git a/privacysandbox/tools/tools-apigenerator/src/test/test-data/output/com/mysdk/TestSandboxSdkFactory.kt b/privacysandbox/tools/tools-apigenerator/src/test/test-data/output/com/mysdk/TestSandboxSdkFactory.kt
deleted file mode 100644
index 33dd00f..0000000
--- a/privacysandbox/tools/tools-apigenerator/src/test/test-data/output/com/mysdk/TestSandboxSdkFactory.kt
+++ /dev/null
@@ -1,121 +0,0 @@
-package com.mysdk
-
-import android.app.sdksandbox.LoadSdkException
-import android.app.sdksandbox.SandboxedSdk
-import android.app.sdksandbox.SdkSandboxManager
-import android.content.Context
-import android.os.Bundle
-import android.os.OutcomeReceiver
-import kotlin.coroutines.resume
-import kotlin.coroutines.resumeWithException
-import kotlinx.coroutines.suspendCancellableCoroutine
-
-public suspend fun createTestSandboxSdk(context: Context): TestSandboxSdk =
-    suspendCancellableCoroutine {
-  val sdkSandboxManager = context.getSystemService(SdkSandboxManager::class.java)
-  val outcomeReceiver = object: OutcomeReceiver<SandboxedSdk, LoadSdkException> {
-    override fun onResult(result: SandboxedSdk) {
-      it.resume(TestSandboxSdkClientProxy(ITestSandboxSdk.Stub.asInterface(result.getInterface())))
-    }
-    override fun onError(error: LoadSdkException) {
-      it.resumeWithException(error)
-    }
-  }
-  sdkSandboxManager.loadSdk(
-      "com.mysdk",
-      Bundle.EMPTY,
-      { obj: Runnable -> obj.run() },
-      outcomeReceiver)
-}
-
-private class TestSandboxSdkClientProxy(
-  private val remote: ITestSandboxSdk,
-) : TestSandboxSdk {
-  public override suspend fun doSomethingAsync(
-    first: Int,
-    second: String,
-    third: Long,
-  ): Boolean = suspendCancellableCoroutine {
-    var mCancellationSignal: ICancellationSignal? = null
-    val transactionCallback = object: IBooleanTransactionCallback.Stub() {
-      override fun onCancellable(cancellationSignal: ICancellationSignal) {
-        if (it.isCancelled) {
-          cancellationSignal.cancel()
-        }
-        mCancellationSignal = cancellationSignal
-      }
-      override fun onSuccess(result: Boolean) {
-        it.resumeWith(Result.success(result))
-      }
-      override fun onFailure(errorCode: Int, errorMessage: String) {
-        it.resumeWithException(RuntimeException(errorMessage))
-      }
-    }
-    remote.doSomethingAsync(first, second, third, transactionCallback)
-    it.invokeOnCancellation {
-      mCancellationSignal?.cancel()
-    }
-  }
-
-  public override fun echoBoolean(input: Boolean): Unit {
-    remote.echoBoolean(input)
-  }
-
-  public override fun echoChar(input: Char): Unit {
-    remote.echoChar(input)
-  }
-
-  public override fun echoDouble(input: Double): Unit {
-    remote.echoDouble(input)
-  }
-
-  public override fun echoFloat(input: Float): Unit {
-    remote.echoFloat(input)
-  }
-
-  public override fun echoInt(input: Int): Unit {
-    remote.echoInt(input)
-  }
-
-  public override fun echoLong(input: Long): Unit {
-    remote.echoLong(input)
-  }
-
-  public override fun echoString(input: String): Unit {
-    remote.echoString(input)
-  }
-
-  public override fun receiveAndReturnNothing(): Unit {
-    remote.receiveAndReturnNothing()
-  }
-
-  public override suspend fun receiveAndReturnNothingAsync(): Unit = suspendCancellableCoroutine {
-    var mCancellationSignal: ICancellationSignal? = null
-    val transactionCallback = object: IUnitTransactionCallback.Stub() {
-      override fun onCancellable(cancellationSignal: ICancellationSignal) {
-        if (it.isCancelled) {
-          cancellationSignal.cancel()
-        }
-        mCancellationSignal = cancellationSignal
-      }
-      override fun onSuccess() {
-        it.resumeWith(Result.success(Unit))
-      }
-      override fun onFailure(errorCode: Int, errorMessage: String) {
-        it.resumeWithException(RuntimeException(errorMessage))
-      }
-    }
-    remote.receiveAndReturnNothingAsync(transactionCallback)
-    it.invokeOnCancellation {
-      mCancellationSignal?.cancel()
-    }
-  }
-
-  public override fun receiveMultipleArguments(
-    first: Int,
-    second: String,
-    third: Long,
-  ): Unit {
-    remote.receiveMultipleArguments(first, second, third)
-  }
-}
diff --git a/privacysandbox/tools/tools-apigenerator/src/test/test-data/input/com/mysdk/TestSandboxSdk.kt b/privacysandbox/tools/tools-apigenerator/src/test/test-data/primitives/input/com/mysdk/TestSandboxSdk.kt
similarity index 100%
rename from privacysandbox/tools/tools-apigenerator/src/test/test-data/input/com/mysdk/TestSandboxSdk.kt
rename to privacysandbox/tools/tools-apigenerator/src/test/test-data/primitives/input/com/mysdk/TestSandboxSdk.kt
diff --git a/privacysandbox/tools/tools-apigenerator/src/test/test-data/primitives/output/com/mysdk/TestSandboxSdk.kt b/privacysandbox/tools/tools-apigenerator/src/test/test-data/primitives/output/com/mysdk/TestSandboxSdk.kt
new file mode 100644
index 0000000..c6132b1
--- /dev/null
+++ b/privacysandbox/tools/tools-apigenerator/src/test/test-data/primitives/output/com/mysdk/TestSandboxSdk.kt
@@ -0,0 +1,33 @@
+package com.mysdk
+
+public interface TestSandboxSdk {
+    public suspend fun doSomethingAsync(
+        first: Int,
+        second: String,
+        third: Long,
+    ): Boolean
+
+    public fun echoBoolean(input: Boolean): Unit
+
+    public fun echoChar(input: Char): Unit
+
+    public fun echoDouble(input: Double): Unit
+
+    public fun echoFloat(input: Float): Unit
+
+    public fun echoInt(input: Int): Unit
+
+    public fun echoLong(input: Long): Unit
+
+    public fun echoString(input: String): Unit
+
+    public fun receiveAndReturnNothing(): Unit
+
+    public suspend fun receiveAndReturnNothingAsync(): Unit
+
+    public fun receiveMultipleArguments(
+        first: Int,
+        second: String,
+        third: Long,
+    ): Unit
+}
diff --git a/privacysandbox/tools/tools-apigenerator/src/test/test-data/primitives/output/com/mysdk/TestSandboxSdkFactory.kt b/privacysandbox/tools/tools-apigenerator/src/test/test-data/primitives/output/com/mysdk/TestSandboxSdkFactory.kt
new file mode 100644
index 0000000..db64c34
--- /dev/null
+++ b/privacysandbox/tools/tools-apigenerator/src/test/test-data/primitives/output/com/mysdk/TestSandboxSdkFactory.kt
@@ -0,0 +1,117 @@
+package com.mysdk
+
+import android.app.sdksandbox.LoadSdkException
+import android.app.sdksandbox.SandboxedSdk
+import android.app.sdksandbox.SdkSandboxManager
+import android.content.Context
+import android.os.Bundle
+import android.os.OutcomeReceiver
+import kotlin.coroutines.resume
+import kotlin.coroutines.resumeWithException
+import kotlinx.coroutines.suspendCancellableCoroutine
+
+public suspend fun createTestSandboxSdk(context: Context): TestSandboxSdk =
+        suspendCancellableCoroutine {
+    val sdkSandboxManager = context.getSystemService(SdkSandboxManager::class.java)
+    val outcomeReceiver = object: OutcomeReceiver<SandboxedSdk, LoadSdkException> {
+        override fun onResult(result: SandboxedSdk) {
+            it.resume(TestSandboxSdkClientProxy(ITestSandboxSdk.Stub.asInterface(result.getInterface())))
+        }
+        override fun onError(error: LoadSdkException) {
+            it.resumeWithException(error)
+        }
+    }
+    sdkSandboxManager.loadSdk("com.mysdk", Bundle.EMPTY, Runnable::run, outcomeReceiver)
+}
+
+private class TestSandboxSdkClientProxy(
+    private val remote: ITestSandboxSdk,
+) : TestSandboxSdk {
+    public override suspend fun doSomethingAsync(
+        first: Int,
+        second: String,
+        third: Long,
+    ): Boolean = suspendCancellableCoroutine {
+        var mCancellationSignal: ICancellationSignal? = null
+        val transactionCallback = object: IBooleanTransactionCallback.Stub() {
+            override fun onCancellable(cancellationSignal: ICancellationSignal) {
+                if (it.isCancelled) {
+                    cancellationSignal.cancel()
+                }
+                mCancellationSignal = cancellationSignal
+            }
+            override fun onSuccess(result: Boolean) {
+                it.resumeWith(Result.success(result))
+            }
+            override fun onFailure(errorCode: Int, errorMessage: String) {
+                it.resumeWithException(RuntimeException(errorMessage))
+            }
+        }
+        remote.doSomethingAsync(first, second, third, transactionCallback)
+        it.invokeOnCancellation {
+            mCancellationSignal?.cancel()
+        }
+    }
+
+    public override fun echoBoolean(input: Boolean): Unit {
+        remote.echoBoolean(input)
+    }
+
+    public override fun echoChar(input: Char): Unit {
+        remote.echoChar(input)
+    }
+
+    public override fun echoDouble(input: Double): Unit {
+        remote.echoDouble(input)
+    }
+
+    public override fun echoFloat(input: Float): Unit {
+        remote.echoFloat(input)
+    }
+
+    public override fun echoInt(input: Int): Unit {
+        remote.echoInt(input)
+    }
+
+    public override fun echoLong(input: Long): Unit {
+        remote.echoLong(input)
+    }
+
+    public override fun echoString(input: String): Unit {
+        remote.echoString(input)
+    }
+
+    public override fun receiveAndReturnNothing(): Unit {
+        remote.receiveAndReturnNothing()
+    }
+
+    public override suspend fun receiveAndReturnNothingAsync(): Unit = suspendCancellableCoroutine {
+        var mCancellationSignal: ICancellationSignal? = null
+        val transactionCallback = object: IUnitTransactionCallback.Stub() {
+            override fun onCancellable(cancellationSignal: ICancellationSignal) {
+                if (it.isCancelled) {
+                    cancellationSignal.cancel()
+                }
+                mCancellationSignal = cancellationSignal
+            }
+            override fun onSuccess() {
+                it.resumeWith(Result.success(Unit))
+            }
+            override fun onFailure(errorCode: Int, errorMessage: String) {
+                it.resumeWithException(RuntimeException(errorMessage))
+            }
+        }
+        remote.receiveAndReturnNothingAsync(transactionCallback)
+        it.invokeOnCancellation {
+            mCancellationSignal?.cancel()
+        }
+    }
+
+    public override fun receiveMultipleArguments(
+        first: Int,
+        second: String,
+        third: Long,
+    ): Unit {
+        remote.receiveMultipleArguments(first, second, third)
+    }
+}
diff --git a/privacysandbox/tools/tools-apigenerator/src/test/test-data/values/input/com/sdkwithvalues/SdkInterface.kt b/privacysandbox/tools/tools-apigenerator/src/test/test-data/values/input/com/sdkwithvalues/SdkInterface.kt
new file mode 100644
index 0000000..1fd19d0
--- /dev/null
+++ b/privacysandbox/tools/tools-apigenerator/src/test/test-data/values/input/com/sdkwithvalues/SdkInterface.kt
@@ -0,0 +1,26 @@
+package com.sdkwithvalues
+
+import androidx.privacysandbox.tools.PrivacySandboxService
+import androidx.privacysandbox.tools.PrivacySandboxValue
+
+@PrivacySandboxService
+interface SdkInterface {
+    suspend fun exampleMethod(request: SdkRequest): SdkResponse
+}
+
+@PrivacySandboxValue
+data class InnerSdkValue(
+    val id: Int,
+    val bigLong: Long,
+    val shouldBeAwesome: Boolean,
+    val separator: Char,
+    val message: String,
+    val floatingPoint: Float,
+    val hugeNumber: Double,
+)
+
+@PrivacySandboxValue
+data class SdkRequest(val id: Long, val innerValue: InnerSdkValue)
+
+@PrivacySandboxValue
+data class SdkResponse(val success: Boolean, val originalRequest: SdkRequest)
diff --git a/privacysandbox/tools/tools-apigenerator/src/test/test-data/values/output/com/sdkwithvalues/InnerSdkValue.kt b/privacysandbox/tools/tools-apigenerator/src/test/test-data/values/output/com/sdkwithvalues/InnerSdkValue.kt
new file mode 100644
index 0000000..295f659
--- /dev/null
+++ b/privacysandbox/tools/tools-apigenerator/src/test/test-data/values/output/com/sdkwithvalues/InnerSdkValue.kt
@@ -0,0 +1,11 @@
+package com.sdkwithvalues
+
+public data class InnerSdkValue(
+    public val bigLong: Long,
+    public val floatingPoint: Float,
+    public val hugeNumber: Double,
+    public val id: Int,
+    public val message: String,
+    public val separator: Char,
+    public val shouldBeAwesome: Boolean,
+)
diff --git a/privacysandbox/tools/tools-apigenerator/src/test/test-data/values/output/com/sdkwithvalues/InnerSdkValueConverter.kt b/privacysandbox/tools/tools-apigenerator/src/test/test-data/values/output/com/sdkwithvalues/InnerSdkValueConverter.kt
new file mode 100644
index 0000000..7bb55c5
--- /dev/null
+++ b/privacysandbox/tools/tools-apigenerator/src/test/test-data/values/output/com/sdkwithvalues/InnerSdkValueConverter.kt
@@ -0,0 +1,27 @@
+package com.sdkwithvalues
+
+public object InnerSdkValueConverter {
+    public fun fromParcelable(parcelable: ParcelableInnerSdkValue): InnerSdkValue {
+        val annotatedValue = InnerSdkValue(
+                bigLong = parcelable.bigLong,
+                floatingPoint = parcelable.floatingPoint,
+                hugeNumber = parcelable.hugeNumber,
+                id = parcelable.id,
+                message = parcelable.message,
+                separator = parcelable.separator,
+                shouldBeAwesome = parcelable.shouldBeAwesome)
+        return annotatedValue
+    }
+
+    public fun toParcelable(annotatedValue: InnerSdkValue): ParcelableInnerSdkValue {
+        val parcelable = ParcelableInnerSdkValue()
+        parcelable.bigLong = annotatedValue.bigLong
+        parcelable.floatingPoint = annotatedValue.floatingPoint
+        parcelable.hugeNumber = annotatedValue.hugeNumber
+        parcelable.id = annotatedValue.id
+        parcelable.message = annotatedValue.message
+        parcelable.separator = annotatedValue.separator
+        parcelable.shouldBeAwesome = annotatedValue.shouldBeAwesome
+        return parcelable
+    }
+}
diff --git a/privacysandbox/tools/tools-apigenerator/src/test/test-data/values/output/com/sdkwithvalues/SdkInterface.kt b/privacysandbox/tools/tools-apigenerator/src/test/test-data/values/output/com/sdkwithvalues/SdkInterface.kt
new file mode 100644
index 0000000..2912b22
--- /dev/null
+++ b/privacysandbox/tools/tools-apigenerator/src/test/test-data/values/output/com/sdkwithvalues/SdkInterface.kt
@@ -0,0 +1,5 @@
+package com.sdkwithvalues
+
+public interface SdkInterface {
+    public suspend fun exampleMethod(request: SdkRequest): SdkResponse
+}
diff --git a/privacysandbox/tools/tools-apigenerator/src/test/test-data/values/output/com/sdkwithvalues/SdkInterfaceFactory.kt b/privacysandbox/tools/tools-apigenerator/src/test/test-data/values/output/com/sdkwithvalues/SdkInterfaceFactory.kt
new file mode 100644
index 0000000..e362d37
--- /dev/null
+++ b/privacysandbox/tools/tools-apigenerator/src/test/test-data/values/output/com/sdkwithvalues/SdkInterfaceFactory.kt
@@ -0,0 +1,54 @@
+package com.sdkwithvalues
+
+import android.app.sdksandbox.LoadSdkException
+import android.app.sdksandbox.SandboxedSdk
+import android.app.sdksandbox.SdkSandboxManager
+import android.content.Context
+import android.os.Bundle
+import android.os.OutcomeReceiver
+import com.sdkwithvalues.SdkRequestConverter.toParcelable
+import com.sdkwithvalues.SdkResponseConverter.fromParcelable
+import kotlin.coroutines.resume
+import kotlin.coroutines.resumeWithException
+import kotlinx.coroutines.suspendCancellableCoroutine
+
+public suspend fun createSdkInterface(context: Context): SdkInterface =
+        suspendCancellableCoroutine {
+    val sdkSandboxManager = context.getSystemService(SdkSandboxManager::class.java)
+    val outcomeReceiver = object: OutcomeReceiver<SandboxedSdk, LoadSdkException> {
+        override fun onResult(result: SandboxedSdk) {
+            it.resume(SdkInterfaceClientProxy(ISdkInterface.Stub.asInterface(result.getInterface())))
+        }
+        override fun onError(error: LoadSdkException) {
+            it.resumeWithException(error)
+        }
+    }
+    sdkSandboxManager.loadSdk("com.sdkwithvalues", Bundle.EMPTY, Runnable::run, outcomeReceiver)
+}
+
+private class SdkInterfaceClientProxy(
+    private val remote: ISdkInterface,
+) : SdkInterface {
+    public override suspend fun exampleMethod(request: SdkRequest): SdkResponse =
+            suspendCancellableCoroutine {
+        var mCancellationSignal: ICancellationSignal? = null
+        val transactionCallback = object: ISdkResponseTransactionCallback.Stub() {
+            override fun onCancellable(cancellationSignal: ICancellationSignal) {
+                if (it.isCancelled) {
+                    cancellationSignal.cancel()
+                }
+                mCancellationSignal = cancellationSignal
+            }
+            override fun onSuccess(result: ParcelableSdkResponse) {
+                it.resumeWith(Result.success(fromParcelable(result)))
+            }
+            override fun onFailure(errorCode: Int, errorMessage: String) {
+                it.resumeWithException(RuntimeException(errorMessage))
+            }
+        }
+        remote.exampleMethod(toParcelable(request), transactionCallback)
+        it.invokeOnCancellation {
+            mCancellationSignal?.cancel()
+        }
+    }
+}
diff --git a/privacysandbox/tools/tools-apigenerator/src/test/test-data/values/output/com/sdkwithvalues/SdkRequest.kt b/privacysandbox/tools/tools-apigenerator/src/test/test-data/values/output/com/sdkwithvalues/SdkRequest.kt
new file mode 100644
index 0000000..8909acc
--- /dev/null
+++ b/privacysandbox/tools/tools-apigenerator/src/test/test-data/values/output/com/sdkwithvalues/SdkRequest.kt
@@ -0,0 +1,6 @@
+package com.sdkwithvalues
+
+public data class SdkRequest(
+    public val id: Long,
+    public val innerValue: InnerSdkValue,
+)
diff --git a/privacysandbox/tools/tools-apigenerator/src/test/test-data/values/output/com/sdkwithvalues/SdkRequestConverter.kt b/privacysandbox/tools/tools-apigenerator/src/test/test-data/values/output/com/sdkwithvalues/SdkRequestConverter.kt
new file mode 100644
index 0000000..4ada52a
--- /dev/null
+++ b/privacysandbox/tools/tools-apigenerator/src/test/test-data/values/output/com/sdkwithvalues/SdkRequestConverter.kt
@@ -0,0 +1,19 @@
+package com.sdkwithvalues
+
+public object SdkRequestConverter {
+    public fun fromParcelable(parcelable: ParcelableSdkRequest): SdkRequest {
+        val annotatedValue = SdkRequest(
+                id = parcelable.id,
+                innerValue =
+                        com.sdkwithvalues.InnerSdkValueConverter.fromParcelable(parcelable.innerValue))
+        return annotatedValue
+    }
+
+    public fun toParcelable(annotatedValue: SdkRequest): ParcelableSdkRequest {
+        val parcelable = ParcelableSdkRequest()
+        parcelable.id = annotatedValue.id
+        parcelable.innerValue =
+                com.sdkwithvalues.InnerSdkValueConverter.toParcelable(annotatedValue.innerValue)
+        return parcelable
+    }
+}
diff --git a/privacysandbox/tools/tools-apigenerator/src/test/test-data/values/output/com/sdkwithvalues/SdkResponse.kt b/privacysandbox/tools/tools-apigenerator/src/test/test-data/values/output/com/sdkwithvalues/SdkResponse.kt
new file mode 100644
index 0000000..0a25953
--- /dev/null
+++ b/privacysandbox/tools/tools-apigenerator/src/test/test-data/values/output/com/sdkwithvalues/SdkResponse.kt
@@ -0,0 +1,6 @@
+package com.sdkwithvalues
+
+public data class SdkResponse(
+    public val originalRequest: SdkRequest,
+    public val success: Boolean,
+)
diff --git a/privacysandbox/tools/tools-apigenerator/src/test/test-data/values/output/com/sdkwithvalues/SdkResponseConverter.kt b/privacysandbox/tools/tools-apigenerator/src/test/test-data/values/output/com/sdkwithvalues/SdkResponseConverter.kt
new file mode 100644
index 0000000..ecf8683
--- /dev/null
+++ b/privacysandbox/tools/tools-apigenerator/src/test/test-data/values/output/com/sdkwithvalues/SdkResponseConverter.kt
@@ -0,0 +1,19 @@
+package com.sdkwithvalues
+
+public object SdkResponseConverter {
+    public fun fromParcelable(parcelable: ParcelableSdkResponse): SdkResponse {
+        val annotatedValue = SdkResponse(
+                originalRequest =
+                        com.sdkwithvalues.SdkRequestConverter.fromParcelable(parcelable.originalRequest),
+                success = parcelable.success)
+        return annotatedValue
+    }
+
+    public fun toParcelable(annotatedValue: SdkResponse): ParcelableSdkResponse {
+        val parcelable = ParcelableSdkResponse()
+        parcelable.originalRequest =
+                com.sdkwithvalues.SdkRequestConverter.toParcelable(annotatedValue.originalRequest)
+        parcelable.success = annotatedValue.success
+        return parcelable
+    }
+}
diff --git a/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/AidlGenerator.kt b/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/AidlGenerator.kt
index 08f47b9..fe9167a 100644
--- a/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/AidlGenerator.kt
+++ b/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/AidlGenerator.kt
@@ -43,9 +43,6 @@
         check(api.services.count() <= 1) { "Multiple services are not supported." }
     }
 
-    private val valueMap = api.values.associateBy { it.type }
-    private val callbackMap = api.callbacks.associateBy { it.type }
-
     companion object {
         fun generate(
             aidlCompiler: AidlCompiler,
@@ -125,7 +122,7 @@
         addParameter(
             parameter.name,
             getAidlTypeDeclaration(parameter.type),
-            isIn = valueMap.containsKey(parameter.type)
+            isIn = api.valueMap.containsKey(parameter.type)
         )
     }
 
@@ -156,7 +153,7 @@
 
     private fun generateValue(value: AnnotatedValue): AidlFileSpec {
         val typesToImport =
-            value.properties.mapNotNull { valueMap[it.type]?.aidlType()?.innerType }.toSet()
+            value.properties.mapNotNull { api.valueMap[it.type]?.aidlType()?.innerType }.toSet()
         return AidlParcelableSpec(type = value.aidlType().innerType,
             typesToImport = typesToImport,
             properties = value.properties.map {
@@ -183,8 +180,8 @@
         AidlTypeSpec(Type(api.getOnlyService().type.packageName, type.transactionCallbackName()))
 
     private fun getAidlTypeDeclaration(type: Type): AidlTypeSpec {
-        valueMap[type]?.let { return it.aidlType() }
-        callbackMap[type]?.let { return it.aidlType() }
+        api.valueMap[type]?.let { return it.aidlType() }
+        api.callbackMap[type]?.let { return it.aidlType() }
         return when (type.qualifiedName) {
             Boolean::class.qualifiedName -> primitive("boolean")
             Int::class.qualifiedName -> primitive("int")
diff --git a/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/KotlinPoetSpecs.kt b/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/KotlinPoetSpecs.kt
index b4825d2..85cbd2f 100644
--- a/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/KotlinPoetSpecs.kt
+++ b/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/KotlinPoetSpecs.kt
@@ -16,6 +16,7 @@
 
 package androidx.privacysandbox.tools.core.generator
 
+import androidx.privacysandbox.tools.core.model.AnnotatedValue
 import androidx.privacysandbox.tools.core.model.Parameter
 import androidx.privacysandbox.tools.core.model.Type
 import com.squareup.kotlinpoet.ClassName
@@ -37,6 +38,15 @@
 /** [TypeName] equivalent to this parameter. */
 fun Type.poetSpec() = ClassName(packageName, simpleName)
 
+fun AnnotatedValue.converterNameSpec() =
+    ClassName(type.packageName, "${type.simpleName}Converter")
+fun AnnotatedValue.toParcelableNameSpec() =
+    MemberName(converterNameSpec(), "toParcelable")
+fun AnnotatedValue.fromParcelableNameSpec() =
+    MemberName(converterNameSpec(), "fromParcelable")
+fun AnnotatedValue.parcelableNameSpec() =
+    ClassName(type.packageName, "Parcelable${type.simpleName}")
+
 /**
  * Defines the primary constructor of this type with the given list of properties.
  *
@@ -83,10 +93,19 @@
     return build()
 }
 
+fun FileSpec.Builder.addCommonSettings() {
+    indent("    ")
+    addKotlinDefaultImports(includeJvm = false, includeJs = false)
+}
+
 fun FunSpec.Builder.addCode(block: CodeBlock.Builder.() -> Unit) {
     addCode(CodeBlock.builder().build { block() })
 }
 
+fun FunSpec.Builder.addStatement(block: CodeBlock.Builder.() -> Unit) {
+    addCode(CodeBlock.builder().build { addStatement(block) })
+}
+
 /** Auto-closing control flow construct and its code. */
 fun CodeBlock.Builder.addControlFlow(
     controlFlow: String,
@@ -98,6 +117,16 @@
     endControlFlow()
 }
 
+/** Auto-closing statement block. Useful for adding multiple [CodeBlock]s in a single statement. */
+fun CodeBlock.Builder.addStatement(builderBlock: CodeBlock.Builder.() -> Unit) {
+    add("«")
+    builderBlock()
+    add("\n»")
+}
+
+fun CodeBlock.Companion.statement(builderBlock: CodeBlock.Builder.() -> Unit) =
+    builder().build { addStatement(builderBlock) }
+
 object SpecNames {
     val dispatchersMainClass = ClassName("kotlinx.coroutines", "Dispatchers", "Main")
     val globalScopeClass = ClassName("kotlinx.coroutines", "GlobalScope")
diff --git a/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/ValueConverterFileGenerator.kt b/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/ValueConverterFileGenerator.kt
new file mode 100644
index 0000000..872f586
--- /dev/null
+++ b/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/ValueConverterFileGenerator.kt
@@ -0,0 +1,94 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.privacysandbox.tools.core.generator
+
+import androidx.privacysandbox.tools.core.model.AnnotatedValue
+import androidx.privacysandbox.tools.core.model.ParsedApi
+import androidx.privacysandbox.tools.core.model.ValueProperty
+import com.squareup.kotlinpoet.CodeBlock
+import com.squareup.kotlinpoet.FileSpec
+import com.squareup.kotlinpoet.FunSpec
+import com.squareup.kotlinpoet.TypeSpec
+import com.squareup.kotlinpoet.joinToCode
+
+/**
+ * Generates a file that defines a converter for an SDK defined value and its AIDL parcelable
+ * counterpart.
+ */
+class ValueConverterFileGenerator(private val api: ParsedApi, private val value: AnnotatedValue) {
+
+    fun generate() =
+        FileSpec.builder(
+            value.converterNameSpec().packageName,
+            value.converterNameSpec().simpleName
+        ).build {
+            addCommonSettings()
+            addType(generateConverter())
+        }
+
+    private fun generateConverter() = TypeSpec.objectBuilder(value.converterNameSpec()).build {
+        addFunction(generateFromParcelable())
+        addFunction(generateToParcelable())
+    }
+
+    private fun generateToParcelable() =
+        FunSpec.builder(value.toParcelableNameSpec().simpleName).build {
+            addParameter("annotatedValue", value.type.poetSpec())
+            returns(value.parcelableNameSpec())
+            addStatement("val parcelable = %T()", value.parcelableNameSpec())
+            value.properties.map(::generateToParcelablePropertyConversion).forEach(::addCode)
+            addStatement("return parcelable")
+        }
+
+    private fun generateToParcelablePropertyConversion(property: ValueProperty) =
+        CodeBlock.builder().build {
+            val innerValue = api.valueMap[property.type]
+            if (innerValue != null) {
+                addStatement(
+                    "parcelable.${property.name} = %M(annotatedValue.${property.name})",
+                    innerValue.toParcelableNameSpec())
+            } else {
+                addStatement("parcelable.${property.name} = annotatedValue.${property.name}")
+            }
+        }
+
+    private fun generateFromParcelable() =
+        FunSpec.builder(value.fromParcelableNameSpec().simpleName).build {
+            addParameter("parcelable", value.parcelableNameSpec())
+            returns(value.type.poetSpec())
+            val parameters = value.properties.map(::generateFromParcelablePropertyConversion)
+            addStatement {
+                add("val annotatedValue = %T(\n", value.type.poetSpec())
+                add(parameters.joinToCode(separator = ",\n"))
+                add(")")
+            }
+            addStatement("return annotatedValue")
+        }
+
+    private fun generateFromParcelablePropertyConversion(property: ValueProperty) =
+        CodeBlock.builder().build {
+            val innerValue = api.valueMap[property.type]
+            if (innerValue != null) {
+                add(
+                    "${property.name} = %M(parcelable.${property.name})",
+                    innerValue.fromParcelableNameSpec()
+                )
+            } else {
+                add("${property.name} = parcelable.${property.name}")
+            }
+        }
+}
\ No newline at end of file
diff --git a/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/ValueFileGenerator.kt b/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/ValueFileGenerator.kt
new file mode 100644
index 0000000..20dbe57
--- /dev/null
+++ b/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/ValueFileGenerator.kt
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.privacysandbox.tools.core.generator
+
+import androidx.privacysandbox.tools.core.model.AnnotatedValue
+import com.squareup.kotlinpoet.FileSpec
+import com.squareup.kotlinpoet.KModifier
+import com.squareup.kotlinpoet.PropertySpec
+import com.squareup.kotlinpoet.TypeSpec
+
+/**
+ * Generates a file that defines a previously declared SDK value.
+ */
+class ValueFileGenerator(private val value: AnnotatedValue) {
+    fun generate() = FileSpec.builder(value.type.packageName, value.type.simpleName).build {
+        addCommonSettings()
+        addType(generateValue())
+    }
+
+    private fun generateValue() = TypeSpec.classBuilder(value.type.poetSpec()).build {
+        addModifiers(KModifier.DATA)
+        primaryConstructor(value.properties.map {
+            PropertySpec.builder(it.name, it.type.poetSpec())
+                .mutable(false)
+                .build()
+        })
+    }
+}
\ No newline at end of file
diff --git a/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/model/ParsedApi.kt b/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/model/ParsedApi.kt
index 4b26982..4506afe 100644
--- a/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/model/ParsedApi.kt
+++ b/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/model/ParsedApi.kt
@@ -21,4 +21,7 @@
     val services: Set<AnnotatedInterface>,
     val values: Set<AnnotatedValue> = emptySet(),
     val callbacks: Set<AnnotatedInterface> = emptySet(),
-)
+) {
+    val valueMap = values.associateBy { it.type }
+    val callbackMap = callbacks.associateBy { it.type }
+}
diff --git a/privacysandbox/tools/tools/src/main/java/androidx/privacysandbox/tools/PrivacySandboxCallback.kt b/privacysandbox/tools/tools/src/main/java/androidx/privacysandbox/tools/PrivacySandboxCallback.kt
index 4a83830..9ef876b 100644
--- a/privacysandbox/tools/tools/src/main/java/androidx/privacysandbox/tools/PrivacySandboxCallback.kt
+++ b/privacysandbox/tools/tools/src/main/java/androidx/privacysandbox/tools/PrivacySandboxCallback.kt
@@ -22,6 +22,6 @@
  * Callbacks should be public interfaces that only declare functions without implementation.
  * Callback functions should be fire-and-forget: non-suspending functions that have no return value.
  */
+@Retention(AnnotationRetention.RUNTIME)
 @Target(AnnotationTarget.CLASS)
-@Retention(AnnotationRetention.BINARY)
-annotation class PrivacySandboxCallback()
\ No newline at end of file
+annotation class PrivacySandboxCallback
\ No newline at end of file
diff --git a/privacysandbox/tools/tools/src/main/java/androidx/privacysandbox/tools/PrivacySandboxValue.kt b/privacysandbox/tools/tools/src/main/java/androidx/privacysandbox/tools/PrivacySandboxValue.kt
index 658d5f9..b9ceb51 100644
--- a/privacysandbox/tools/tools/src/main/java/androidx/privacysandbox/tools/PrivacySandboxValue.kt
+++ b/privacysandbox/tools/tools/src/main/java/androidx/privacysandbox/tools/PrivacySandboxValue.kt
@@ -25,4 +25,4 @@
  */
 @Retention(AnnotationRetention.RUNTIME)
 @Target(AnnotationTarget.CLASS)
-annotation class PrivacySandboxValue()
+annotation class PrivacySandboxValue
diff --git a/resourceinspection/resourceinspection-processor/build.gradle b/resourceinspection/resourceinspection-processor/build.gradle
index 07c18f2..5e7e101 100644
--- a/resourceinspection/resourceinspection-processor/build.gradle
+++ b/resourceinspection/resourceinspection-processor/build.gradle
@@ -56,3 +56,8 @@
     inceptionYear = "2021"
     description = "Annotation processors for Android resource and layout inspection"
 }
+
+tasks.withType(Test).configureEach {
+    // https://github.com/google/compile-testing/issues/222
+    it.jvmArgs "--add-opens=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED"
+}
diff --git a/room/room-compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/compiler/DiagnosticsMessageCollector.kt b/room/room-compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/compiler/DiagnosticsMessageCollector.kt
index dfd0add..2ea0c14 100644
--- a/room/room-compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/compiler/DiagnosticsMessageCollector.kt
+++ b/room/room-compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/compiler/DiagnosticsMessageCollector.kt
@@ -17,10 +17,10 @@
 package androidx.room.compiler.processing.util.compiler
 
 import androidx.room.compiler.processing.util.compiler.steps.RawDiagnosticMessage
+import javax.tools.Diagnostic
 import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
 import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSourceLocation
 import org.jetbrains.kotlin.cli.common.messages.MessageCollector
-import javax.tools.Diagnostic
 
 /**
  * Custom message collector for Kotlin compilation that collects messages into
@@ -30,7 +30,9 @@
  * they embed location into the messages. This collector parses these messages to recover the
  * location.
  */
-internal class DiagnosticsMessageCollector : MessageCollector {
+internal class DiagnosticsMessageCollector(
+    private val stepName: String
+) : MessageCollector {
     private val diagnostics = mutableListOf<RawDiagnosticMessage>()
 
     fun getDiagnostics(): List<RawDiagnosticMessage> = diagnostics
@@ -57,6 +59,21 @@
         message: String,
         location: CompilerMessageSourceLocation?
     ) {
+        val diagnosticKind =
+            if (stepName == "kapt" && getJavaVersion() >= 17) {
+                // Workaround for KT-54030
+                message.getSeverityFromPrefix() ?: severity.kind
+            } else {
+                severity.kind
+            }
+        doReport(diagnosticKind, message, location)
+    }
+
+    private fun doReport(
+        diagnosticKind: Diagnostic.Kind,
+        message: String,
+        location: CompilerMessageSourceLocation?
+    ) {
         if (message == KSP_ADDITIONAL_ERROR_MESSAGE) {
             // ignore this as it will impact error counts.
             return
@@ -64,13 +81,13 @@
         // Both KSP and KAPT reports null location but instead put the location into the message.
         // We parse it back here to recover the location.
         val (strippedMessage, rawLocation) = if (location == null) {
-            message.parseLocation() ?: message.stripPrefixes() to null
+            message.parseLocation() ?: (message.stripPrefixes() to null)
         } else {
             message.stripPrefixes() to location.toRawLocation()
         }
         diagnostics.add(
             RawDiagnosticMessage(
-                kind = severity.kind,
+                kind = diagnosticKind,
                 message = strippedMessage,
                 location = rawLocation
             )
@@ -88,10 +105,10 @@
      */
     private fun String.parseLocation(): Pair<String, RawDiagnosticMessage.Location>? {
         val firstLine = lineSequence().firstOrNull() ?: return null
-        val match =
-            KSP_LOCATION_REGEX.find(firstLine) ?: KAPT_LOCATION_AND_KIND_REGEX.find(firstLine)
-                ?: return null
-        if (match.groups.size != 4) return null
+        val match = KSP_LOCATION_REGEX.find(firstLine)
+            ?: KAPT_LOCATION_AND_KIND_REGEX.find(firstLine)
+            ?: return null
+        if (match.groups.size < 4) return null
         return substring(match.range.last + 1) to RawDiagnosticMessage.Location(
             path = match.groupValues[1],
             line = match.groupValues[3].toInt(),
@@ -141,9 +158,30 @@
             else -> Diagnostic.Kind.OTHER
         }
 
+    private fun String.getSeverityFromPrefix(): Diagnostic.Kind? {
+        val kindMatch =
+            // The (\w+) for the kind prefix is is the 4th capture group
+            KAPT_LOCATION_AND_KIND_REGEX.find(this)?.groupValues?.getOrNull(4)
+                // The (\w+) is the 1st capture group
+                ?: KIND_REGEX.find(this)?.groupValues?.getOrNull(1)
+                ?: return null
+        return if (kindMatch.equals("error", ignoreCase = true)) {
+            Diagnostic.Kind.ERROR
+        } else if (kindMatch.equals("warning", ignoreCase = true)) {
+            Diagnostic.Kind.WARNING
+        } else if (kindMatch.equals("note", ignoreCase = true)) {
+            Diagnostic.Kind.NOTE
+        } else {
+            null
+        }
+    }
+
+    private fun getJavaVersion(): Int =
+        System.getProperty("java.specification.version")?.substringAfter('.')?.toIntOrNull() ?: 6
+
     companion object {
         // example: foo/bar/Subject.kt:2: warning: the real message
-        private val KAPT_LOCATION_AND_KIND_REGEX = """^(.*\.(kt|java)):(\d+): \w+: """.toRegex()
+        private val KAPT_LOCATION_AND_KIND_REGEX = """^(.*\.(kt|java)):(\d+): (\w+): """.toRegex()
         // example: [ksp] /foo/bar/Subject.kt:3: the real message
         private val KSP_LOCATION_REGEX = """^\[ksp] (.*\.(kt|java)):(\d+): """.toRegex()
 
@@ -151,7 +189,7 @@
         // We could limit this to known diagnostic kinds (instead of matching \w:) but it is always
         // added so not really necessary until we hit a parser bug :)
         // example: "error: the real message"
-        private val KIND_REGEX = """^\w+: """.toRegex()
+        private val KIND_REGEX = """^(\w+): """.toRegex()
         // example: "[ksp] the real message"
         private val KSP_PREFIX_REGEX = """^\[ksp] """.toRegex()
 
diff --git a/room/room-compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/compiler/KotlinCliRunner.kt b/room/room-compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/compiler/KotlinCliRunner.kt
index 3a8777c..9b1f573 100644
--- a/room/room-compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/compiler/KotlinCliRunner.kt
+++ b/room/room-compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/compiler/KotlinCliRunner.kt
@@ -19,14 +19,14 @@
 import androidx.room.compiler.processing.util.compiler.steps.CompilationStepArguments
 import androidx.room.compiler.processing.util.compiler.steps.RawDiagnosticMessage
 import androidx.room.compiler.processing.util.getSystemClasspaths
+import java.io.File
+import java.net.URLClassLoader
 import org.jetbrains.kotlin.cli.common.ExitCode
 import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments
 import org.jetbrains.kotlin.cli.jvm.K2JVMCompiler
 import org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
 import org.jetbrains.kotlin.config.JvmDefaultMode
 import org.jetbrains.kotlin.config.JvmTarget
-import java.io.File
-import java.net.URLClassLoader
 
 /**
  * Utility object to run kotlin compiler via its CLI API.
@@ -97,7 +97,7 @@
         arguments.copyToCliArguments(cliArguments)
         compiler.parseArguments(arguments.kotlincArguments.toTypedArray(), cliArguments)
 
-        val diagnosticsMessageCollector = DiagnosticsMessageCollector()
+        val diagnosticsMessageCollector = DiagnosticsMessageCollector("kotlinc")
         val exitCode = DelegatingTestRegistrar.runCompilation(
             compiler = compiler,
             messageCollector = diagnosticsMessageCollector,
diff --git a/room/room-compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/compiler/TestKapt3Registrar.kt b/room/room-compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/compiler/TestKapt3Registrar.kt
index d794e56..f38d3ad 100644
--- a/room/room-compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/compiler/TestKapt3Registrar.kt
+++ b/room/room-compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/compiler/TestKapt3Registrar.kt
@@ -44,6 +44,7 @@
 import org.jetbrains.kotlin.resolve.jvm.extensions.PartialAnalysisHandlerExtension
 import java.io.File
 import javax.annotation.processing.Processor
+import org.jetbrains.kotlin.kapt3.util.doOpenInternalPackagesIfRequired
 
 /**
  * Registers the KAPT component for the kotlin compilation.
@@ -61,6 +62,7 @@
         project: MockProject,
         configuration: CompilerConfiguration
     ) {
+        doOpenInternalPackagesIfRequired()
         val contentRoots = configuration[CLIConfigurationKeys.CONTENT_ROOTS] ?: emptyList()
 
         val optionsBuilder = baseOptions.apply {
diff --git a/room/room-compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/compiler/steps/KaptCompilationStep.kt b/room/room-compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/compiler/steps/KaptCompilationStep.kt
index 332aa52..e968381 100644
--- a/room/room-compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/compiler/steps/KaptCompilationStep.kt
+++ b/room/room-compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/compiler/steps/KaptCompilationStep.kt
@@ -20,12 +20,12 @@
 import androidx.room.compiler.processing.util.compiler.KotlinCliRunner
 import androidx.room.compiler.processing.util.compiler.TestKapt3Registrar
 import androidx.room.compiler.processing.util.compiler.toSourceSet
+import java.io.File
+import javax.annotation.processing.Processor
 import org.jetbrains.kotlin.base.kapt3.AptMode
 import org.jetbrains.kotlin.base.kapt3.KaptFlag
 import org.jetbrains.kotlin.base.kapt3.KaptOptions
 import org.jetbrains.kotlin.cli.common.ExitCode
-import java.io.File
-import javax.annotation.processing.Processor
 import org.jetbrains.kotlin.compiler.plugin.parsePluginOption
 
 /**
@@ -79,7 +79,7 @@
         if (annotationProcessors.isEmpty()) {
             return CompilationStepResult.skip(arguments)
         }
-        val kaptMessages = DiagnosticsMessageCollector()
+        val kaptMessages = DiagnosticsMessageCollector(name)
         val result = KotlinCliRunner.runKotlinCli(
             arguments = arguments, // output is ignored,
             destinationDir = workingDir.resolve(CLASS_OUT_FOLDER_NAME),
diff --git a/room/room-compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/compiler/steps/KspCompilationStep.kt b/room/room-compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/compiler/steps/KspCompilationStep.kt
index 0905320..392de38 100644
--- a/room/room-compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/compiler/steps/KspCompilationStep.kt
+++ b/room/room-compiler-processing-testing/src/main/java/androidx/room/compiler/processing/util/compiler/steps/KspCompilationStep.kt
@@ -22,8 +22,8 @@
 import androidx.room.compiler.processing.util.compiler.toSourceSet
 import com.google.devtools.ksp.KspOptions
 import com.google.devtools.ksp.processing.SymbolProcessorProvider
-import org.jetbrains.kotlin.cli.common.ExitCode
 import java.io.File
+import org.jetbrains.kotlin.cli.common.ExitCode
 
 /**
  * Runs the Symbol Processors
@@ -51,7 +51,7 @@
         if (symbolProcessorProviders.isEmpty()) {
             return CompilationStepResult.skip(arguments)
         }
-        val kspMessages = DiagnosticsMessageCollector()
+        val kspMessages = DiagnosticsMessageCollector(name)
         val result = KotlinCliRunner.runKotlinCli(
             arguments = arguments,
             destinationDir = workingDir.resolve(CLASS_OUT_FOLDER_NAME),
diff --git a/room/room-compiler-processing-testing/src/test/java/androidx/room/compiler/processing/util/DiagnosticMessageCollectorTest.kt b/room/room-compiler-processing-testing/src/test/java/androidx/room/compiler/processing/util/DiagnosticMessageCollectorTest.kt
index ed8c35c..eac3111 100644
--- a/room/room-compiler-processing-testing/src/test/java/androidx/room/compiler/processing/util/DiagnosticMessageCollectorTest.kt
+++ b/room/room-compiler-processing-testing/src/test/java/androidx/room/compiler/processing/util/DiagnosticMessageCollectorTest.kt
@@ -20,11 +20,11 @@
 import androidx.room.compiler.processing.util.compiler.steps.RawDiagnosticMessage
 import androidx.room.compiler.processing.util.compiler.steps.RawDiagnosticMessage.Location
 import com.google.common.truth.Truth.assertThat
+import javax.tools.Diagnostic
 import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
 import org.junit.Test
 import org.junit.runner.RunWith
 import org.junit.runners.Parameterized
-import javax.tools.Diagnostic
 
 @RunWith(Parameterized::class)
 internal class DiagnosticMessageCollectorTest(
@@ -32,7 +32,7 @@
 ) {
     @Test
     fun parseDiagnosticMessage() {
-        val collector = DiagnosticsMessageCollector()
+        val collector = DiagnosticsMessageCollector("test")
         collector.report(
             severity = params.severity,
             message = params.message
diff --git a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XProcessingEnvTest.kt b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XProcessingEnvTest.kt
index 4e4fe97..eddaa86 100644
--- a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XProcessingEnvTest.kt
+++ b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XProcessingEnvTest.kt
@@ -274,6 +274,7 @@
                     """.trimIndent()
                 )
             ),
+            javacArguments = listOf("-source", "11"),
             kotlincArguments = listOf("-Xjvm-target 11")
         ) {
             if (it.processingEnv.backend == XProcessingEnv.Backend.KSP) {
diff --git a/room/room-paging/build.gradle b/room/room-paging/build.gradle
index 5be305e..b6d0d5c 100644
--- a/room/room-paging/build.gradle
+++ b/room/room-paging/build.gradle
@@ -52,6 +52,7 @@
     androidTestImplementation(libs.truth)
     androidTestImplementation("androidx.arch.core:core-testing:2.0.1")
     androidTestImplementation(project(":internal-testutils-common"))
+    androidTestImplementation(projectOrArtifact(":paging:paging-testing"))
 }
 
 androidx {
diff --git a/room/room-paging/src/androidTest/kotlin/androidx/room/paging/LimitOffsetPagingSourceTest.kt b/room/room-paging/src/androidTest/kotlin/androidx/room/paging/LimitOffsetPagingSourceTest.kt
index 991314c..09a9564 100644
--- a/room/room-paging/src/androidTest/kotlin/androidx/room/paging/LimitOffsetPagingSourceTest.kt
+++ b/room/room-paging/src/androidTest/kotlin/androidx/room/paging/LimitOffsetPagingSourceTest.kt
@@ -18,11 +18,11 @@
 
 import android.database.Cursor
 import androidx.arch.core.executor.testing.CountingTaskExecutorRule
-import androidx.paging.LoadType
 import androidx.paging.PagingConfig
 import androidx.paging.PagingSource
+import androidx.paging.PagingSource.LoadParams
 import androidx.paging.PagingSource.LoadResult
-import androidx.paging.PagingState
+import androidx.paging.testing.TestPager
 import androidx.room.Room
 import androidx.room.RoomDatabase
 import androidx.room.RoomSQLiteQuery
@@ -39,7 +39,6 @@
 import kotlinx.coroutines.launch
 import kotlinx.coroutines.runBlocking
 import kotlinx.coroutines.test.advanceUntilIdle
-import kotlinx.coroutines.test.runTest
 import org.junit.After
 import org.junit.Before
 import org.junit.Rule
@@ -51,6 +50,7 @@
 import kotlin.test.assertFalse
 import kotlin.test.assertTrue
 import kotlinx.coroutines.Job
+import kotlinx.coroutines.test.runTest
 
 private const val tableName: String = "TestItem"
 
@@ -121,575 +121,477 @@
     }
 
     @Test
-    fun test_itemCount() {
+    fun test_itemCount() = runPagingSourceTest { pager, pagingSource ->
         dao.addAllItems(ITEMS_LIST)
-        val pagingSource = LimitOffsetPagingSourceImpl(database)
-        runBlocking {
-            // count query is executed on first load
-            pagingSource.refresh()
-
-            assertThat(pagingSource.itemCount.get()).isEqualTo(100)
-        }
+        // count query is executed on first load
+        pager.refresh()
+        assertThat(pagingSource.itemCount.get()).isEqualTo(100)
     }
 
     @Test
-    fun test_itemCountWithSuppliedLimitOffset() {
-        dao.addAllItems(ITEMS_LIST)
-        val pagingSource = LimitOffsetPagingSourceImpl(
+    fun test_itemCountWithSuppliedLimitOffset() = runPagingSourceTest(
+        LimitOffsetPagingSourceImpl(
             db = database,
             queryString = "SELECT * FROM $tableName ORDER BY id ASC LIMIT 60 OFFSET 30",
         )
-        runBlocking {
-            // count query is executed on first load
-            pagingSource.refresh()
-            // should be 60 instead of 100
-            assertThat(pagingSource.itemCount.get()).isEqualTo(60)
-        }
-    }
-
-    @Test
-    fun dbInsert_pagingSourceInvalidates() {
+    ) { pager, pagingSource ->
         dao.addAllItems(ITEMS_LIST)
-        val pagingSource = LimitOffsetPagingSourceImpl(database)
-        runBlocking {
-            // load once to register db observers
-            pagingSource.refresh()
-            assertThat(pagingSource.invalid).isFalse()
-            // paging source should be invalidated when insert into db
-            val result = dao.addTestItem(TestItem(101))
-            countingTaskExecutorRule.drainTasks(500, TimeUnit.MILLISECONDS)
-            assertThat(result).isEqualTo(101)
-            assertTrue(pagingSource.invalid)
-        }
+        // count query is executed on first load
+        pager.refresh()
+        // should be 60 instead of 100
+        assertThat(pagingSource.itemCount.get()).isEqualTo(60)
     }
 
     @Test
-    fun dbDelete_pagingSourceInvalidates() {
+    fun dbInsert_pagingSourceInvalidates() = runPagingSourceTest { pager, pagingSource ->
         dao.addAllItems(ITEMS_LIST)
-        val pagingSource = LimitOffsetPagingSourceImpl(database)
-        runBlocking {
-            // load once to register db observers
-            pagingSource.refresh()
-            assertThat(pagingSource.invalid).isFalse()
-            // paging source should be invalidated when delete from db
-            dao.deleteTestItem(TestItem(50))
-            countingTaskExecutorRule.drainTasks(5, TimeUnit.SECONDS)
-            assertTrue(pagingSource.invalid)
-        }
+        // load once to register db observers
+        pager.refresh()
+        assertThat(pagingSource.invalid).isFalse()
+        // paging source should be invalidated when insert into db
+        val result = dao.addTestItem(TestItem(101))
+        countingTaskExecutorRule.drainTasks(500, TimeUnit.MILLISECONDS)
+        assertThat(result).isEqualTo(101)
+        assertTrue(pagingSource.invalid)
     }
 
     @Test
-    fun invalidDbQuery_pagingSourceDoesNotInvalidate() {
+    fun dbDelete_pagingSourceInvalidates() = runPagingSourceTest { pager, pagingSource ->
         dao.addAllItems(ITEMS_LIST)
-        val pagingSource = LimitOffsetPagingSourceImpl(database)
-        runBlocking {
-            // load once to register db observers
-            pagingSource.refresh()
-            assertThat(pagingSource.invalid).isFalse()
-
-            val result = dao.deleteTestItem(TestItem(1000))
-
-            // invalid delete. Should have 0 items deleted and paging source remains valid
-            assertThat(result).isEqualTo(0)
-            assertFalse(pagingSource.invalid)
-        }
+        // load once to register db observers
+        pager.refresh()
+        assertThat(pagingSource.invalid).isFalse()
+        // paging source should be invalidated when delete from db
+        dao.deleteTestItem(TestItem(50))
+        countingTaskExecutorRule.drainTasks(5, TimeUnit.SECONDS)
+        assertTrue(pagingSource.invalid)
     }
 
     @Test
-    fun load_initialLoad() {
-        val pagingSource = LimitOffsetPagingSourceImpl(database)
+    fun invalidDbQuery_pagingSourceDoesNotInvalidate() = runPagingSourceTest {
+            pager, pagingSource ->
+
         dao.addAllItems(ITEMS_LIST)
-        runBlocking {
-            val result = pagingSource.refresh() as LoadResult.Page
+        // load once to register db observers
+        pager.refresh()
+        assertThat(pagingSource.invalid).isFalse()
 
-            assertThat(result.data).containsExactlyElementsIn(
-                ITEMS_LIST.subList(0, 15)
-            )
-        }
+        val result = dao.deleteTestItem(TestItem(1000))
+
+        // invalid delete. Should have 0 items deleted and paging source remains valid
+        assertThat(result).isEqualTo(0)
+        assertFalse(pagingSource.invalid)
     }
 
     @Test
-    fun load_initialEmptyLoad() {
-        val pagingSource = LimitOffsetPagingSourceImpl(database)
-        runBlocking {
-            val result = pagingSource.refresh() as LoadResult.Page
-
-            assertTrue(result.data.isEmpty())
-
-            // now add items
-            dao.addAllItems(ITEMS_LIST)
-
-            // invalidate pagingSource to imitate invalidation from running refreshVersionSync
-            pagingSource.invalidate()
-            assertTrue(pagingSource.invalid)
-
-            // this refresh should check pagingSource's invalid status, realize it is invalid, and
-            // return a LoadResult.Invalid
-            assertThat(pagingSource.refresh()).isInstanceOf(
-                LoadResult.Invalid::class.java
-            )
-        }
-    }
-
-    @Test
-    fun load_initialLoadWithInitialKey() {
+    fun load_initialLoad() = runPagingSourceTest { pager, _ ->
         dao.addAllItems(ITEMS_LIST)
-        val pagingSource = LimitOffsetPagingSourceImpl(database)
-        // refresh with initial key = 20
-        runBlocking {
-            val result = pagingSource.refresh(key = 20) as LoadResult.Page
-
-            // item in pos 21-35 (TestItemId 20-34) loaded
-            assertThat(result.data).containsExactlyElementsIn(
-                ITEMS_LIST.subList(20, 35)
-            )
-        }
+        val result = pager.refresh() as LoadResult.Page
+        assertThat(result.data).containsExactlyElementsIn(
+            ITEMS_LIST.subList(0, 15)
+        )
     }
 
     @Test
-    fun load_initialLoadWithSuppliedLimitOffset() {
+    fun load_initialEmptyLoad() = runPagingSourceTest { pager, _ ->
+        val result = pager.refresh(initialKey = 20) as LoadResult.Page
+
+        assertTrue(result.data.isEmpty())
+        // check that this returns a terminal load
+        assertThat(result.nextKey).isNull()
+        assertThat(result.prevKey).isNull()
+        assertThat(result.itemsBefore).isEqualTo(0)
+        assertThat(result.itemsAfter).isEqualTo(0)
+    }
+
+    @Test
+    fun load_initialLoadWithInitialKey() = runPagingSourceTest { pager, _ ->
         dao.addAllItems(ITEMS_LIST)
-        val pagingSource = LimitOffsetPagingSourceImpl(
+        val result = pager.refresh(initialKey = 20) as LoadResult.Page
+        assertThat(result.data).containsExactlyElementsIn(
+            ITEMS_LIST.subList(20, 35)
+        )
+    }
+
+    @Test
+    fun load_initialLoadWithSuppliedLimitOffset() = runPagingSourceTest(
+        LimitOffsetPagingSourceImpl(
             db = database,
             queryString = "SELECT * FROM $tableName ORDER BY id ASC LIMIT 10 OFFSET 30",
         )
-        runBlocking {
-            val result = pagingSource.refresh() as LoadResult.Page
-
-            // default initial loadSize = 15 starting from index 0.
-            // user supplied limit offset should cause initial loadSize = 10, starting from index 30
-            assertThat(result.data).containsExactlyElementsIn(
-                ITEMS_LIST.subList(30, 40)
-            )
-            // check that no append/prepend can be triggered after this terminal load
-            assertThat(result.nextKey).isNull()
-            assertThat(result.prevKey).isNull()
-            assertThat(result.itemsBefore).isEqualTo(0)
-            assertThat(result.itemsAfter).isEqualTo(0)
-        }
+    ) { pager, _ ->
+        dao.addAllItems(ITEMS_LIST)
+        val result = pager.refresh() as LoadResult.Page
+        // default initial loadSize = 15 starting from index 0.
+        // user supplied limit offset should cause initial loadSize = 10, starting from index 30
+        assertThat(result.data).containsExactlyElementsIn(
+            ITEMS_LIST.subList(30, 40)
+        )
+        // check that no append/prepend can be triggered after this terminal load
+        assertThat(result.nextKey).isNull()
+        assertThat(result.prevKey).isNull()
+        assertThat(result.itemsBefore).isEqualTo(0)
+        assertThat(result.itemsAfter).isEqualTo(0)
     }
 
     @Test
-    fun load_oneAdditionalQueryArguments() {
-        dao.addAllItems(ITEMS_LIST)
-        val pagingSource = LimitOffsetPagingSourceImpl(
+    fun load_oneAdditionalQueryArguments() = runPagingSourceTest(
+        LimitOffsetPagingSourceImpl(
             db = database,
             queryString = "SELECT * FROM $tableName WHERE id < 50 ORDER BY id ASC",
         )
-        // refresh with initial key = 40
-        runBlocking {
-            val result = pagingSource.refresh(key = 40) as LoadResult.Page
+    ) { pager, pagingSource ->
 
-            // initial loadSize = 15, but limited by id < 50, should only load items 40 - 50
-            assertThat(result.data).containsExactlyElementsIn(
-                ITEMS_LIST.subList(40, 50)
-            )
-            // should have 50 items fulfilling condition of id < 50 (TestItem id 0 - 49)
-            assertThat(pagingSource.itemCount.get()).isEqualTo(50)
-        }
+        dao.addAllItems(ITEMS_LIST)
+        val result = pager.refresh(initialKey = 40) as LoadResult.Page
+
+        // initial loadSize = 15, but limited by id < 50, should only load items 40 - 50
+        assertThat(result.data).containsExactlyElementsIn(
+            ITEMS_LIST.subList(40, 50)
+        )
+        // should have 50 items fulfilling condition of id < 50 (TestItem id 0 - 49)
+        assertThat(pagingSource.itemCount.get()).isEqualTo(50)
     }
 
     @Test
-    fun load_multipleQueryArguments() {
-        dao.addAllItems(ITEMS_LIST)
-        val pagingSource = LimitOffsetPagingSourceImpl(
+    fun load_multipleQueryArguments() = runPagingSourceTest(
+        LimitOffsetPagingSourceImpl(
             db = database,
             queryString = "SELECT * " +
                 "FROM $tableName " +
                 "WHERE id > 50 AND value LIKE 'item 90'" +
                 "ORDER BY id ASC",
         )
-        runBlocking {
-            val result = pagingSource.refresh() as LoadResult.Page
+    ) { pager, pagingSource ->
+        dao.addAllItems(ITEMS_LIST)
+        val result = pager.refresh() as LoadResult.Page
 
-            assertThat(result.data).containsExactly(ITEMS_LIST[90])
-            assertThat(pagingSource.itemCount.get()).isEqualTo(1)
-        }
+        assertThat(result.data).containsExactly(ITEMS_LIST[90])
+        assertThat(pagingSource.itemCount.get()).isEqualTo(1)
     }
 
     @Test
-    fun load_InvalidUserSuppliedOffset_returnEmpty() {
-        dao.addAllItems(ITEMS_LIST)
-        val pagingSource = LimitOffsetPagingSourceImpl(
+    fun load_InvalidUserSuppliedOffset_returnEmpty() = runPagingSourceTest(
+        LimitOffsetPagingSourceImpl(
             db = database,
             queryString = "SELECT * FROM $tableName ORDER BY id ASC LIMIT 10 OFFSET 500",
         )
-        runBlocking {
-            val result = pagingSource.refresh() as LoadResult.Page
+    ) { pager, pagingSource ->
+        dao.addAllItems(ITEMS_LIST)
 
-            // invalid OFFSET = 500 should return empty data
-            assertThat(result.data).isEmpty()
+        val result = pager.refresh() as LoadResult.Page
 
-            // check that no append/prepend can be triggered
-            assertThat(pagingSource.itemCount.get()).isEqualTo(0)
-            assertThat(result.nextKey).isNull()
-            assertThat(result.prevKey).isNull()
-            assertThat(result.itemsBefore).isEqualTo(0)
-            assertThat(result.itemsAfter).isEqualTo(0)
-        }
+        // invalid OFFSET = 500 should return empty data
+        assertThat(result.data).isEmpty()
+
+        // check that no append/prepend can be triggered
+        assertThat(pagingSource.itemCount.get()).isEqualTo(0)
+        assertThat(result.nextKey).isNull()
+        assertThat(result.prevKey).isNull()
+        assertThat(result.itemsBefore).isEqualTo(0)
+        assertThat(result.itemsAfter).isEqualTo(0)
     }
 
     @Test
-    fun load_UserSuppliedNegativeLimit() {
-        dao.addAllItems(ITEMS_LIST)
-        val pagingSource = LimitOffsetPagingSourceImpl(
+    fun load_UserSuppliedNegativeLimit() = runPagingSourceTest(
+        LimitOffsetPagingSourceImpl(
             db = database,
             queryString = "SELECT * FROM $tableName ORDER BY id ASC LIMIT -1",
         )
-        runBlocking {
-            val result = pagingSource.refresh() as LoadResult.Page
-
-            // ensure that it respects SQLite's default behavior for negative LIMIT
-            assertThat(result.data).containsExactlyElementsIn(
-                ITEMS_LIST.subList(0, 15)
-            )
-            // should behave as if no LIMIT were set
-            assertThat(pagingSource.itemCount.get()).isEqualTo(100)
-            assertThat(result.nextKey).isEqualTo(15)
-            assertThat(result.prevKey).isNull()
-            assertThat(result.itemsBefore).isEqualTo(0)
-            assertThat(result.itemsAfter).isEqualTo(85)
-        }
-    }
-
-    @Test
-    fun invalidInitialKey_dbEmpty_returnsEmpty() {
-        val pagingSource = LimitOffsetPagingSourceImpl(database)
-        runBlocking {
-            val result = pagingSource.refresh(key = 101) as LoadResult.Page
-
-            assertThat(result.data).isEmpty()
-        }
-    }
-
-    @Test
-    fun invalidInitialKey_keyTooLarge_returnsLastPage() {
-        val pagingSource = LimitOffsetPagingSourceImpl(database)
+    ) { pager, pagingSource ->
         dao.addAllItems(ITEMS_LIST)
-        runBlocking {
-            val result = pagingSource.refresh(key = 101) as LoadResult.Page
+        val result = pager.refresh() as LoadResult.Page
 
-            // should load the last page
-            assertThat(result.data).containsExactlyElementsIn(
-                ITEMS_LIST.subList(85, 100)
-            )
-        }
+        // ensure that it respects SQLite's default behavior for negative LIMIT
+        assertThat(result.data).containsExactlyElementsIn(
+            ITEMS_LIST.subList(0, 15)
+        )
+        // should behave as if no LIMIT were set
+        assertThat(pagingSource.itemCount.get()).isEqualTo(100)
+        assertThat(result.nextKey).isEqualTo(15)
+        assertThat(result.prevKey).isNull()
+        assertThat(result.itemsBefore).isEqualTo(0)
+        assertThat(result.itemsAfter).isEqualTo(85)
     }
 
     @Test
-    fun invalidInitialKey_negativeKey() {
-        val pagingSource = LimitOffsetPagingSourceImpl(database)
-        dao.addAllItems(ITEMS_LIST)
-        runBlocking {
-            // should throw error when initial key is negative
-            val expectedException = assertFailsWith<IllegalArgumentException> {
-                pagingSource.refresh(key = -1)
-            }
-            // default message from Paging 3 for negative initial key
-            assertThat(expectedException.message).isEqualTo(
-                "itemsBefore cannot be negative"
-            )
-        }
+    fun invalidInitialKey_dbEmpty_returnsEmpty() = runPagingSourceTest { pager, _ ->
+        assertThat(
+            (pager.refresh(initialKey = 101) as LoadResult.Page).data
+        ).isEmpty()
     }
 
     @Test
-    fun append_middleOfList() {
-        val pagingSource = LimitOffsetPagingSourceImpl(database)
-        dao.addAllItems(ITEMS_LIST)
-        // to bypass check for initial load and run as non-initial load
-        pagingSource.itemCount.set(100)
-        runBlocking {
-            val result = pagingSource.append(key = 20) as LoadResult.Page
+    fun invalidInitialKey_keyTooLarge_returnsLastPage() = runPagingSourceTest {
+            pager, _ ->
 
-            // item in pos 21-25 (TestItemId 20-24) loaded
-            assertThat(result.data).containsExactlyElementsIn(
-                ITEMS_LIST.subList(20, 25)
-            )
-            assertThat(result.nextKey).isEqualTo(25)
-            assertThat(result.prevKey).isEqualTo(20)
-        }
+        dao.addAllItems(ITEMS_LIST)
+        val result = pager.refresh(initialKey = 101) as LoadResult.Page
+
+        // should load the last page
+        assertThat(result.data).containsExactlyElementsIn(
+            ITEMS_LIST.subList(85, 100)
+        )
     }
 
     @Test
-    fun append_availableItemsLessThanLoadSize() {
-        val pagingSource = LimitOffsetPagingSourceImpl(database)
+    fun invalidInitialKey_negativeKey() = runPagingSourceTest { pager, _ ->
         dao.addAllItems(ITEMS_LIST)
-        // to bypass check for initial load and run as non-initial load
-        pagingSource.itemCount.set(100)
-        runBlocking {
-            val result = pagingSource.append(key = 97) as LoadResult.Page
-
-            // item in pos 98-100 (TestItemId 97-99) loaded
-            assertThat(result.data).containsExactlyElementsIn(
-                ITEMS_LIST.subList(97, 100)
-            )
-            assertThat(result.nextKey).isEqualTo(null)
-            assertThat(result.prevKey).isEqualTo(97)
+        // should throw error when initial key is negative
+        val expectedException = assertFailsWith<IllegalArgumentException> {
+            pager.refresh(initialKey = -1)
         }
+        // default message from Paging 3 for negative initial key
+        assertThat(expectedException.message).isEqualTo(
+            "itemsBefore cannot be negative"
+        )
     }
 
     @Test
-    fun load_consecutiveAppend() {
-        val pagingSource = LimitOffsetPagingSourceImpl(database)
+    fun append_middleOfList() = runPagingSourceTest { pager, _ ->
         dao.addAllItems(ITEMS_LIST)
-        // to bypass check for initial load and run as non-initial load
-        pagingSource.itemCount.set(100)
-        runBlocking {
+        val result = pager.run {
+            refresh(initialKey = 5)
+            append() as LoadResult.Page
+        }
+
+        // item in pos 21-25 (TestItemId 20-24) loaded
+        assertThat(result.data).containsExactlyElementsIn(
+            ITEMS_LIST.subList(20, 25)
+        )
+        assertThat(result.nextKey).isEqualTo(25)
+        assertThat(result.prevKey).isEqualTo(20)
+    }
+
+    @Test
+    fun append_availableItemsLessThanLoadSize() = runPagingSourceTest { pager, _ ->
+        dao.addAllItems(ITEMS_LIST)
+        val result = pager.run {
+            refresh(82)
+            append() as LoadResult.Page
+        }
+
+        // item in pos 98-100 (TestItemId 97-99) loaded
+        assertThat(result.data).containsExactlyElementsIn(
+            ITEMS_LIST.subList(97, 100)
+        )
+        assertThat(result.nextKey).isEqualTo(null)
+        assertThat(result.prevKey).isEqualTo(97)
+    }
+
+    @Test
+    fun load_consecutiveAppend() = runPagingSourceTest { pager, _ ->
+        dao.addAllItems(ITEMS_LIST)
+        val result1 = pager.run {
+            refresh(15)
             // first append
-            val result = pagingSource.append(key = 30) as LoadResult.Page
-
-            // TestItemId 30-34 loaded
-            assertThat(result.data).containsExactlyElementsIn(
-                ITEMS_LIST.subList(30, 35)
-            )
-            // second append using nextKey from previous load
-            val result2 = pagingSource.append(key = result.nextKey) as LoadResult.Page
-
-            // TestItemId 35 - 39 loaded
-            assertThat(result2.data).containsExactlyElementsIn(
-                ITEMS_LIST.subList(35, 40)
-            )
+            append() as LoadResult.Page
         }
+
+        // TestItemId 30-34 loaded from the append
+        assertThat(result1.data).containsExactlyElementsIn(
+            ITEMS_LIST.subList(30, 35)
+        )
+
+        // second append
+        val result2 = pager.append() as LoadResult.Page
+
+        // TestItemId 35 - 39 loaded
+        assertThat(result2.data).containsExactlyElementsIn(
+            ITEMS_LIST.subList(35, 40)
+        )
     }
 
     @Test
-    fun append_invalidResult() {
-        val pagingSource = LimitOffsetPagingSourceImpl(database)
+    fun append_invalidResult() = runPagingSourceTest { pager, pagingSource ->
         dao.addAllItems(ITEMS_LIST)
-        // to bypass check for initial load and run as non-initial load
-        pagingSource.itemCount.set(100)
-        runBlocking {
-            // first append
-            val result = pagingSource.append(key = 30) as LoadResult.Page
-
-            // TestItemId 30-34 loaded
-            assertThat(result.data).containsExactlyElementsIn(
-                ITEMS_LIST.subList(30, 35)
-            )
-
-            // invalidate pagingSource to imitate invalidation from running refreshVersionSync
-            pagingSource.invalidate()
-
-            // this append should check pagingSource's invalid status, realize it is invalid, and
-            // return a LoadResult.Invalid
-            val result2 = pagingSource.append(key = result.nextKey)
-
-            assertThat(result2).isInstanceOf(LoadResult.Invalid::class.java)
+        val result = pager.run {
+            refresh(initialKey = 15)
+            append() as LoadResult.Page
         }
+        // TestItemId 30-34 loaded
+        assertThat(result.data).containsExactlyElementsIn(
+            ITEMS_LIST.subList(30, 35)
+        )
+        // invalidate pagingSource to imitate invalidation from running refreshVersionSync
+        pagingSource.invalidate()
+
+        // this append should check pagingSource's invalid status, realize it is invalid, and
+        // return a LoadResult.Invalid
+        val result2 = pager.append()
+
+        assertThat(result2).isInstanceOf(LoadResult.Invalid::class.java)
     }
 
     @Test
-    fun prepend_middleOfList() {
-        val pagingSource = LimitOffsetPagingSourceImpl(database)
+    fun prepend_middleOfList() = runPagingSourceTest { pager, _ ->
         dao.addAllItems(ITEMS_LIST)
-        // to bypass check for initial load and run as non-initial load
-        pagingSource.itemCount.set(100)
-        runBlocking {
-            val result = pagingSource.prepend(key = 30) as LoadResult.Page
-
-            assertThat(result.data).containsExactlyElementsIn(
-                ITEMS_LIST.subList(25, 30)
-            )
-            assertThat(result.nextKey).isEqualTo(30)
-            assertThat(result.prevKey).isEqualTo(25)
+        val result = pager.run {
+            refresh(initialKey = 30)
+            prepend() as LoadResult.Page
         }
+
+        assertThat(result.data).containsExactlyElementsIn(
+            ITEMS_LIST.subList(25, 30)
+        )
+        assertThat(result.nextKey).isEqualTo(30)
+        assertThat(result.prevKey).isEqualTo(25)
     }
 
     @Test
-    fun prepend_availableItemsLessThanLoadSize() {
-        val pagingSource = LimitOffsetPagingSourceImpl(database)
+    fun prepend_availableItemsLessThanLoadSize() = runPagingSourceTest { pager, _ ->
         dao.addAllItems(ITEMS_LIST)
-        // to bypass check for initial load and run as non-initial load
-        pagingSource.itemCount.set(100)
-        runBlocking {
-            val result = pagingSource.prepend(key = 3) as LoadResult.Page
-
-            // items in pos 0 - 2 (TestItemId 0 - 2) loaded
-            assertThat(result.data).containsExactlyElementsIn(
-                ITEMS_LIST.subList(0, 3)
-            )
-            assertThat(result.nextKey).isEqualTo(3)
-            assertThat(result.prevKey).isEqualTo(null)
+        val result = pager.run {
+            refresh(initialKey = 3)
+            prepend() as LoadResult.Page
         }
+
+        // items in pos 0 - 2 (TestItemId 0 - 2) loaded
+        assertThat(result.data).containsExactlyElementsIn(
+            ITEMS_LIST.subList(0, 3)
+        )
+        assertThat(result.nextKey).isEqualTo(3)
+        assertThat(result.prevKey).isEqualTo(null)
     }
 
     @Test
-    fun load_consecutivePrepend() {
-        val pagingSource = LimitOffsetPagingSourceImpl(database)
+    fun load_consecutivePrepend() = runPagingSourceTest { pager, _ ->
         dao.addAllItems(ITEMS_LIST)
-        // to bypass check for initial load and run as non-initial load
-        pagingSource.itemCount.set(100)
-        runBlocking {
-            // first prepend
-            val result = pagingSource.prepend(key = 20) as LoadResult.Page
-
-            // items pos 16-20 (TestItemId 15-19) loaded
-            assertThat(result.data).containsExactlyElementsIn(
-                ITEMS_LIST.subList(15, 20)
-            )
-            // second prepend using prevKey from previous load
-            val result2 = pagingSource.prepend(key = result.prevKey) as LoadResult.Page
-
-            // items pos 11-15 (TestItemId 10 - 14) loaded
-            assertThat(result2.data).containsExactlyElementsIn(
-                ITEMS_LIST.subList(10, 15)
-            )
+        val result1 = pager.run {
+            refresh(initialKey = 20)
+            prepend() as LoadResult.Page // first prepend
         }
+        // items pos 16-20 (TestItemId 15-19) loaded
+        assertThat(result1.data).containsExactlyElementsIn(
+            ITEMS_LIST.subList(15, 20)
+        )
+
+        // second prepend
+        val result2 = pager.prepend() as LoadResult.Page
+
+        // items pos 11-15 (TestItemId 10 - 14) loaded
+        assertThat(result2.data).containsExactlyElementsIn(
+            ITEMS_LIST.subList(10, 15)
+        )
     }
 
     @Test
-    fun prepend_invalidResult() {
-        val pagingSource = LimitOffsetPagingSourceImpl(database)
+    fun prepend_invalidResult() = runPagingSourceTest { pager, pagingSource ->
         dao.addAllItems(ITEMS_LIST)
-        // to bypass check for initial load and run as non-initial load
-        pagingSource.itemCount.set(100)
-        runBlocking {
-            // first prepend
-            val result = pagingSource.prepend(key = 20) as LoadResult.Page
-
-            // items pos 16-20 (TestItemId 15-19) loaded
-            assertThat(result.data).containsExactlyElementsIn(
-                ITEMS_LIST.subList(15, 20)
-            )
-
-            // invalidate pagingSource to imitate invalidation from running refreshVersionSync
-            pagingSource.invalidate()
-
-            // this prepend should check pagingSource's invalid status, realize it is invalid, and
-            // return LoadResult.Invalid
-            val result2 = pagingSource.prepend(key = result.prevKey)
-
-            assertThat(result2).isInstanceOf(LoadResult.Invalid::class.java)
+        val result = pager.run {
+            refresh(initialKey = 20)
+            prepend() as LoadResult.Page
         }
+        // items pos 16-20 (TestItemId 15-19) loaded
+        assertThat(result.data).containsExactlyElementsIn(
+            ITEMS_LIST.subList(15, 20)
+        )
+
+        // invalidate pagingSource to imitate invalidation from running refreshVersionSync
+        pagingSource.invalidate()
+
+        // this prepend should check pagingSource's invalid status, realize it is invalid, and
+        // return LoadResult.Invalid
+        val result2 = pager.prepend()
+
+        assertThat(result2).isInstanceOf(LoadResult.Invalid::class.java)
     }
 
     @Test
-    fun test_itemsBefore() {
-        val pagingSource = LimitOffsetPagingSourceImpl(database)
+    fun test_itemsBefore() = runPagingSourceTest { pager, _ ->
         dao.addAllItems(ITEMS_LIST)
-        runBlocking {
-            // for initial load
-            val result = pagingSource.refresh(key = 50) as LoadResult.Page
+        // initial loads items in pos 51 - 65, should have 50 items before
+        assertThat(
+            (pager.refresh(50) as LoadResult.Page).itemsBefore
+        ).isEqualTo(50)
 
-            // initial loads items in pos 51 - 65, should have 50 items before
-            assertThat(result.itemsBefore).isEqualTo(50)
+        // prepend loads items in pos 46 - 50, should have 45 item before
+        assertThat(
+            (pager.prepend() as LoadResult.Page).itemsBefore
+        ).isEqualTo(45)
 
-            // prepend from initial load
-            val result2 = pagingSource.prepend(key = result.prevKey) as LoadResult.Page
-
-            // prepend loads items in pos 46 - 50, should have 45 item before
-            assertThat(result2.itemsBefore).isEqualTo(45)
-
-            // append from initial load
-            val result3 = pagingSource.append(key = result.nextKey) as LoadResult.Page
-
-            // append loads items in position 66 - 70 , should have 65 item before
-            assertThat(result3.itemsBefore).isEqualTo(65)
-        }
+        // append loads items in position 66 - 70 , should have 65 item before
+        assertThat(
+            (pager.append() as LoadResult.Page).itemsBefore
+        ).isEqualTo(65)
     }
 
     @Test
-    fun test_itemsAfter() {
-        val pagingSource = LimitOffsetPagingSourceImpl(database)
+    fun test_itemsAfter() = runPagingSourceTest { pager, _ ->
         dao.addAllItems(ITEMS_LIST)
-        runBlocking {
-            // for initial load
-            val result = pagingSource.refresh(key = 30) as LoadResult.Page
+        // initial loads items in position 31 - 45, should have 55 items after
+        assertThat(
+            (pager.refresh(30) as LoadResult.Page).itemsAfter
+        ).isEqualTo(55)
 
-            // initial loads items in position 31 - 45, should have 55 items after
-            assertThat(result.itemsAfter).isEqualTo(55)
+        // prepend loads items in position 26 - 30, should have 70 item after
+        assertThat(
+            (pager.prepend() as LoadResult.Page).itemsAfter
+        ).isEqualTo(70)
 
-            // prepend from initial load
-            val result2 = pagingSource.prepend(key = result.prevKey) as LoadResult.Page
-
-            // prepend loads items in position 26 - 30, should have 70 item after
-            assertThat(result2.itemsAfter).isEqualTo(70)
-
-            // append from initial load
-            val result3 = pagingSource.append(result.nextKey) as LoadResult.Page
-
-            // append loads items in position 46 - 50 , should have 50 item after
-            assertThat(result3.itemsAfter).isEqualTo(50)
-        }
+        // append loads items in position 46 - 50 , should have 50 item after
+        assertThat(
+            (pager.append() as LoadResult.Page).itemsAfter
+        ).isEqualTo(50)
     }
 
     @Test
-    fun test_getRefreshKey() {
-        val pagingSource = LimitOffsetPagingSourceImpl(database)
+    fun test_getRefreshKey() = runPagingSourceTest { pager, pagingSource ->
         dao.addAllItems(ITEMS_LIST)
-        runBlocking {
-            // initial load
-            val result = pagingSource.refresh() as LoadResult.Page
+        val pagingState1 = pager.run {
+            refresh()
             // 15 items loaded, assuming anchorPosition = 14 as the last item loaded
-            var refreshKey = pagingSource.getRefreshKey(
-                PagingState(
-                    pages = listOf(result),
-                    anchorPosition = 14,
-                    config = CONFIG,
-                    leadingPlaceholderCount = 0
-                )
-            )
-            // should load around anchor position
-            // Initial load size = 15, refresh key should be (15/2 = 7) items
-            // before anchorPosition (14 - 7 = 7)
-            assertThat(refreshKey).isEqualTo(7)
-
-            // append after refresh
-            val result2 = pagingSource.append(key = result.nextKey) as LoadResult.Page
-
-            assertThat(result2.data).isEqualTo(
-                ITEMS_LIST.subList(15, 20)
-            )
-            refreshKey = pagingSource.getRefreshKey(
-                PagingState(
-                    pages = listOf(result, result2),
-                    // 20 items loaded, assume anchorPosition = 19 as the last item loaded
-                    anchorPosition = 19,
-                    config = CONFIG,
-                    leadingPlaceholderCount = 0
-                )
-            )
-            // initial load size 15. Refresh key should be (15/2 = 7) items before anchorPosition
-            // (19 - 7 = 12)
-            assertThat(refreshKey).isEqualTo(12)
+            getPagingState(14)
         }
+        // should load around anchor position
+        // Initial load size = 15, refresh key should be (15/2 = 7) items
+        // before anchorPosition (14 - 7 = 7)
+        assertThat(pagingSource.getRefreshKey(pagingState1)).isEqualTo(7)
+
+        // append after refresh
+        val append = pager.append() as LoadResult.Page
+        assertThat(append.data).isEqualTo(
+            ITEMS_LIST.subList(15, 20)
+        )
+        // 20 items loaded, assume anchorPosition = 19 as the last item loaded
+        val pagingState2 = pager.getPagingState(19)
+        // initial load size 15. Refresh key should be (15/2 = 7) items before anchorPosition
+        // (19 - 7 = 12)
+        assertThat(pagingSource.getRefreshKey(pagingState2)).isEqualTo(12)
     }
 
     @Test
-    fun load_refreshKeyGreaterThanItemCount_lastPage() {
-        val pagingSource = LimitOffsetPagingSourceImpl(database)
+    fun load_refreshKeyGreaterThanItemCount_lastPage() = runPagingSourceTest {
+            pager, _ ->
+
         dao.addAllItems(ITEMS_LIST)
-        runBlocking {
+        pager.refresh(initialKey = 70)
+        dao.deleteTestItems(40, 100)
 
-            pagingSource.refresh(key = 70)
+        // assume user was viewing last item of the refresh load with anchorPosition = 85,
+        // initialLoadSize = 15. This mimics how getRefreshKey() calculates refresh key.
+        val refreshKey = 85 - (15 / 2)
 
-            dao.deleteTestItems(40, 100)
+        val pagingSource2 = LimitOffsetPagingSourceImpl(database)
+        val pager2 = TestPager(pagingSource2, CONFIG)
+        val result = pager2.refresh(initialKey = refreshKey) as LoadResult.Page
 
-            // assume user was viewing last item of the refresh load with anchorPosition = 85,
-            // initialLoadSize = 15. This mimics how getRefreshKey() calculates refresh key.
-            val refreshKey = 85 - (15 / 2)
-            assertThat(refreshKey).isEqualTo(78)
+        // database should only have 40 items left. Refresh key is invalid at this point
+        // (greater than item count after deletion)
+        assertThat(pagingSource2.itemCount.get()).isEqualTo(40)
+        // ensure that paging source can handle invalid refresh key properly
+        // should load last page with items 25 - 40
+        assertThat(result.data).containsExactlyElementsIn(
+            ITEMS_LIST.subList(25, 40)
+        )
 
-            val pagingSource2 = LimitOffsetPagingSourceImpl(database)
-            val result2 = pagingSource2.refresh(key = refreshKey) as LoadResult.Page
-
-            // database should only have 40 items left. Refresh key is invalid at this point
-            // (greater than item count after deletion)
-            assertThat(pagingSource2.itemCount.get()).isEqualTo(40)
-            // ensure that paging source can handle invalid refresh key properly
-            // should load last page with items 25 - 40
-            assertThat(result2.data).containsExactlyElementsIn(
-                ITEMS_LIST.subList(25, 40)
-            )
-
-            // should account for updated item count to return correct itemsBefore, itemsAfter,
-            // prevKey, nextKey
-            assertThat(result2.itemsBefore).isEqualTo(25)
-            assertThat(result2.itemsAfter).isEqualTo(0)
-            // no append can be triggered
-            assertThat(result2.prevKey).isEqualTo(25)
-            assertThat(result2.nextKey).isEqualTo(null)
-        }
+        // should account for updated item count to return correct itemsBefore, itemsAfter,
+        // prevKey, nextKey
+        assertThat(result.itemsBefore).isEqualTo(25)
+        assertThat(result.itemsAfter).isEqualTo(0)
+        // no append can be triggered
+        assertThat(result.prevKey).isEqualTo(25)
+        assertThat(result.nextKey).isEqualTo(null)
     }
 
     /**
@@ -704,73 +606,65 @@
      * Ideally, in the future Paging will be able to handle this case better.
      */
     @Test
-    fun load_refreshKeyGreaterThanItemCount_firstPage() {
-        val pagingSource = LimitOffsetPagingSourceImpl(database)
+    fun load_refreshKeyGreaterThanItemCount_firstPage() = runPagingSourceTest {
+            pager, pagingSource ->
+
         dao.addAllItems(ITEMS_LIST)
-        runBlocking {
-            pagingSource.refresh()
+        pager.refresh()
+        assertThat(pagingSource.itemCount.get()).isEqualTo(100)
+        // items id 0 - 29 deleted (30 items removed)
+        dao.deleteTestItems(0, 29)
 
-            assertThat(pagingSource.itemCount.get()).isEqualTo(100)
+        val pagingSource2 = LimitOffsetPagingSourceImpl(database)
+        val pager2 = TestPager(pagingSource2, CONFIG)
+        // assume user was viewing first few items with anchorPosition = 0 and refresh key
+        // clips to 0
+        val result = pager2.refresh(initialKey = 0) as LoadResult.Page
 
-            // items id 0 - 29 deleted (30 items removed)
-            dao.deleteTestItems(0, 29)
+        // database should only have 70 items left
+        assertThat(pagingSource2.itemCount.get()).isEqualTo(70)
+        // first 30 items deleted, refresh should load starting from pos 31 (item id 30 - 45)
+        assertThat(result.data).containsExactlyElementsIn(
+            ITEMS_LIST.subList(30, 45)
+        )
 
-            val pagingSource2 = LimitOffsetPagingSourceImpl(database)
-            // assume user was viewing first few items with anchorPosition = 0 and refresh key
-            // clips to 0
-            val refreshKey = 0
-
-            val result2 = pagingSource2.refresh(key = refreshKey) as LoadResult.Page
-
-            // database should only have 70 items left
-            assertThat(pagingSource2.itemCount.get()).isEqualTo(70)
-            // first 30 items deleted, refresh should load starting from pos 31 (item id 30 - 45)
-            assertThat(result2.data).containsExactlyElementsIn(
-                ITEMS_LIST.subList(30, 45)
-            )
-
-            // should account for updated item count to return correct itemsBefore, itemsAfter,
-            // prevKey, nextKey
-            assertThat(result2.itemsBefore).isEqualTo(0)
-            assertThat(result2.itemsAfter).isEqualTo(55)
-            // no prepend can be triggered
-            assertThat(result2.prevKey).isEqualTo(null)
-            assertThat(result2.nextKey).isEqualTo(15)
-        }
+        // should account for updated item count to return correct itemsBefore, itemsAfter,
+        // prevKey, nextKey
+        assertThat(result.itemsBefore).isEqualTo(0)
+        assertThat(result.itemsAfter).isEqualTo(55)
+        // no prepend can be triggered
+        assertThat(result.prevKey).isEqualTo(null)
+        assertThat(result.nextKey).isEqualTo(15)
     }
 
     @Test
-    fun load_loadSizeAndRefreshKeyGreaterThanItemCount() {
-        val pagingSource = LimitOffsetPagingSourceImpl(database)
+    fun load_loadSizeAndRefreshKeyGreaterThanItemCount() = runPagingSourceTest {
+            pager, pagingSource ->
+
         dao.addAllItems(ITEMS_LIST)
-        runBlocking {
+        pager.refresh(initialKey = 30)
+        assertThat(pagingSource.itemCount.get()).isEqualTo(100)
+        // items id 0 - 94 deleted (95 items removed)
+        dao.deleteTestItems(0, 94)
 
-            pagingSource.refresh(key = 30)
+        val pagingSource2 = LimitOffsetPagingSourceImpl(database)
+        val pager2 = TestPager(pagingSource2, CONFIG)
+        // assume user was viewing first few items with anchorPosition = 0 and refresh key
+        // clips to 0
+        val result = pager2.refresh(initialKey = 0) as LoadResult.Page
 
-            assertThat(pagingSource.itemCount.get()).isEqualTo(100)
-            // items id 0 - 94 deleted (95 items removed)
-            dao.deleteTestItems(0, 94)
+        // database should only have 5 items left
+        assertThat(pagingSource2.itemCount.get()).isEqualTo(5)
+        // only 5 items should be loaded with offset = 0
+        assertThat(result.data).containsExactlyElementsIn(
+            ITEMS_LIST.subList(95, 100)
+        )
 
-            val pagingSource2 = LimitOffsetPagingSourceImpl(database)
-            // assume user was viewing first few items with anchorPosition = 0 and refresh key
-            // clips to 0
-            val refreshKey = 0
-
-            val result2 = pagingSource2.refresh(key = refreshKey) as LoadResult.Page
-
-            // database should only have 5 items left
-            assertThat(pagingSource2.itemCount.get()).isEqualTo(5)
-            // only 5 items should be loaded with offset = 0
-            assertThat(result2.data).containsExactlyElementsIn(
-                ITEMS_LIST.subList(95, 100)
-            )
-
-            // should recognize that this is a terminal load
-            assertThat(result2.itemsBefore).isEqualTo(0)
-            assertThat(result2.itemsAfter).isEqualTo(0)
-            assertThat(result2.prevKey).isEqualTo(null)
-            assertThat(result2.nextKey).isEqualTo(null)
-        }
+        // should recognize that this is a terminal load
+        assertThat(result.itemsBefore).isEqualTo(0)
+        assertThat(result.itemsAfter).isEqualTo(0)
+        assertThat(result.prevKey).isEqualTo(null)
+        assertThat(result.nextKey).isEqualTo(null)
     }
 
     @Test
@@ -778,8 +672,22 @@
         val pagingSource = LimitOffsetPagingSourceImpl(database)
         assertTrue(pagingSource.jumpingSupported)
     }
+
+    private fun runPagingSourceTest(
+        pagingSource: LimitOffsetPagingSourceImpl = LimitOffsetPagingSourceImpl(database),
+        config: PagingConfig = CONFIG,
+        block: suspend (
+            pager: TestPager<Int, TestItem>,
+            pagingSource: LimitOffsetPagingSourceImpl
+        ) -> Unit
+    ) {
+        runBlocking {
+            block(TestPager(pagingSource, config), pagingSource)
+        }
+    }
 }
 
+@OptIn(ExperimentalCoroutinesApi::class)
 @RunWith(AndroidJUnit4::class)
 @SmallTest
 class LimitOffsetPagingSourceTestWithFilteringExecutor {
@@ -826,102 +734,69 @@
     }
 
     @Test
-    fun invalid_refresh() {
+    fun invalid_append() = runTest {
         val pagingSource = LimitOffsetPagingSourceImpl(db)
-        runBlocking {
-            val result = pagingSource.refresh() as LoadResult.Page
+        val pager = TestPager(pagingSource, CONFIG)
+        dao.addAllItems(ITEMS_LIST)
 
-            assertTrue(result.data.isEmpty())
+        val result = pager.refresh() as LoadResult.Page
+        // initial load
+        assertThat(result.data).containsExactlyElementsIn(
+            ITEMS_LIST.subList(0, 15)
+        )
 
-            // blocks invalidation notification from Room
-            queryExecutor.filterFunction = { runnable ->
-                runnable !== db.invalidationTracker.refreshRunnable
-            }
-
-            // now write to database
-            dao.addAllItems(ITEMS_LIST)
-
-            // make sure room requests a refresh
-            db.invalidationTracker.awaitPendingRefresh()
-            // and that this is blocked to simulate delayed notification from room
-            queryExecutor.awaitDeferredSizeAtLeast(1)
-
-            // the db write should cause pagingSource to realize it is invalid
-            assertThat(pagingSource.refresh()).isInstanceOf(
-                LoadResult.Invalid::class.java
-            )
-            assertTrue(pagingSource.invalid)
+        // blocks invalidation notification from Room
+        queryExecutor.filterFunction = { runnable ->
+            runnable !== db.invalidationTracker.refreshRunnable
         }
+
+        // now write to the database
+        dao.deleteTestItem(ITEMS_LIST[30])
+
+        // make sure room requests a refresh
+        db.invalidationTracker.awaitPendingRefresh()
+        // and that this is blocked to simulate delayed notification from room
+        queryExecutor.awaitDeferredSizeAtLeast(1)
+
+        // the db write should cause pagingSource to realize it is invalid when it tries to
+        // append
+        assertThat(pager.append()).isInstanceOf(
+            LoadResult.Invalid::class.java
+        )
+        assertThat(pagingSource.invalid).isTrue()
     }
 
     @Test
-    fun invalid_append() {
+    fun invalid_prepend() = runTest {
         val pagingSource = LimitOffsetPagingSourceImpl(db)
+        val pager = TestPager(pagingSource, CONFIG)
         dao.addAllItems(ITEMS_LIST)
 
-        runBlocking {
-            val result = pagingSource.refresh() as LoadResult.Page
+        val result = pager.refresh(initialKey = 20) as LoadResult.Page
+        // initial load
+        assertThat(result.data).containsExactlyElementsIn(
+            ITEMS_LIST.subList(20, 35)
+        )
 
-            // initial load
-            assertThat(result.data).containsExactlyElementsIn(
-                ITEMS_LIST.subList(0, 15)
-            )
-
-            // blocks invalidation notification from Room
-            queryExecutor.filterFunction = { runnable ->
-                runnable !== db.invalidationTracker.refreshRunnable
-            }
-
-            // now write to the database
-            dao.deleteTestItem(ITEMS_LIST[30])
-
-            // make sure room requests a refresh
-            db.invalidationTracker.awaitPendingRefresh()
-            // and that this is blocked to simulate delayed notification from room
-            queryExecutor.awaitDeferredSizeAtLeast(1)
-
-            // the db write should cause pagingSource to realize it is invalid when it tries to
-            // append
-            assertThat(pagingSource.append(15)).isInstanceOf(
-                LoadResult.Invalid::class.java
-            )
-            assertTrue(pagingSource.invalid)
+        // blocks invalidation notification from Room
+        queryExecutor.filterFunction = { runnable ->
+            runnable !== db.invalidationTracker.refreshRunnable
         }
-    }
 
-    @Test
-    fun invalid_prepend() {
-        val pagingSource = LimitOffsetPagingSourceImpl(db)
-        dao.addAllItems(ITEMS_LIST)
+        // now write to the database
+        dao.deleteTestItem(ITEMS_LIST[30])
 
-        runBlocking {
-            val result = pagingSource.refresh(key = 20) as LoadResult.Page
+        // make sure room requests a refresh
+        db.invalidationTracker.awaitPendingRefresh()
+        // and that this is blocked to simulate delayed notification from room
+        queryExecutor.awaitDeferredSizeAtLeast(1)
 
-            // initial load
-            assertThat(result.data).containsExactlyElementsIn(
-                ITEMS_LIST.subList(20, 35)
-            )
-
-            // blocks invalidation notification from Room
-            queryExecutor.filterFunction = { runnable ->
-                runnable !== db.invalidationTracker.refreshRunnable
-            }
-
-            // now write to the database
-            dao.deleteTestItem(ITEMS_LIST[30])
-
-            // make sure room requests a refresh
-            db.invalidationTracker.awaitPendingRefresh()
-            // and that this is blocked to simulate delayed notification from room
-            queryExecutor.awaitDeferredSizeAtLeast(1)
-
-            // the db write should cause pagingSource to realize it is invalid when it tries to
-            // append
-            assertThat(pagingSource.prepend(20)).isInstanceOf(
-                LoadResult.Invalid::class.java
-            )
-            assertTrue(pagingSource.invalid)
-        }
+        // the db write should cause pagingSource to realize it is invalid when it tries to
+        // prepend
+        assertThat(pager.prepend()).isInstanceOf(
+            LoadResult.Invalid::class.java
+        )
+        assertThat(pagingSource.invalid).isTrue()
     }
 }
 
@@ -956,75 +831,10 @@
 
 private val ITEMS_LIST = createItemsForDb(0, 100)
 
-private fun createLoadParam(
-    loadType: LoadType,
-    key: Int? = null,
-    initialLoadSize: Int = CONFIG.initialLoadSize,
-    pageSize: Int = CONFIG.pageSize,
-    placeholdersEnabled: Boolean = CONFIG.enablePlaceholders
-): PagingSource.LoadParams<Int> {
-    return when (loadType) {
-        LoadType.REFRESH -> {
-            PagingSource.LoadParams.Refresh(
-                key = key,
-                loadSize = initialLoadSize,
-                placeholdersEnabled = placeholdersEnabled
-            )
-        }
-        LoadType.APPEND -> {
-            PagingSource.LoadParams.Append(
-                key = key ?: -1,
-                loadSize = pageSize,
-                placeholdersEnabled = placeholdersEnabled
-            )
-        }
-        LoadType.PREPEND -> {
-            PagingSource.LoadParams.Prepend(
-                key = key ?: -1,
-                loadSize = pageSize,
-                placeholdersEnabled = placeholdersEnabled
-            )
-        }
-    }
-}
-
 private fun createItemsForDb(startId: Int, count: Int): List<TestItem> {
     return List(count) {
         TestItem(
             id = it + startId,
         )
     }
-}
-
-private suspend fun PagingSource<Int, TestItem>.refresh(
-    key: Int? = null,
-): LoadResult<Int, TestItem> {
-    return this.load(
-        createLoadParam(
-            loadType = LoadType.REFRESH,
-            key = key,
-        )
-    )
-}
-
-private suspend fun PagingSource<Int, TestItem>.append(
-    key: Int? = -1,
-): LoadResult<Int, TestItem> {
-    return this.load(
-        createLoadParam(
-            loadType = LoadType.APPEND,
-            key = key,
-        )
-    )
-}
-
-private suspend fun PagingSource<Int, TestItem>.prepend(
-    key: Int? = -1,
-): LoadResult<Int, TestItem> {
-    return this.load(
-        createLoadParam(
-            loadType = LoadType.PREPEND,
-            key = key,
-        )
-    )
-}
+}
\ No newline at end of file
diff --git a/security/security-crypto/src/androidTest/java/androidx/security/crypto/EncryptedFileTest.java b/security/security-crypto/src/androidTest/java/androidx/security/crypto/EncryptedFileTest.java
index e2ed7a5..9c0d7fd 100644
--- a/security/security-crypto/src/androidTest/java/androidx/security/crypto/EncryptedFileTest.java
+++ b/security/security-crypto/src/androidTest/java/androidx/security/crypto/EncryptedFileTest.java
@@ -340,7 +340,7 @@
         outputStream.close();
 
         StreamingAeadConfig.register();
-        KeysetHandle streadmingAeadKeysetHandle = new AndroidKeysetManager.Builder()
+        KeysetHandle streamingAeadKeysetHandle = new AndroidKeysetManager.Builder()
                 .withKeyTemplate(AesGcmHkdfStreamingKeyManager.aes256GcmHkdf4KBTemplate())
                 .withSharedPref(mContext,
                         "__androidx_security_crypto_encrypted_file_keyset__",
@@ -349,7 +349,7 @@
                 .build().getKeysetHandle();
 
         StreamingAead streamingAead = com.google.crypto.tink.streamingaead.StreamingAeadFactory
-                .getPrimitive(streadmingAeadKeysetHandle);
+                .getPrimitive(streamingAeadKeysetHandle);
 
         FileInputStream fileInputStream = new FileInputStream(file);
         InputStream inputStream = streamingAead.newDecryptingStream(fileInputStream,
diff --git a/security/security-crypto/src/main/java/androidx/security/crypto/EncryptedFile.java b/security/security-crypto/src/main/java/androidx/security/crypto/EncryptedFile.java
index 6b0bd91..1699c64 100644
--- a/security/security-crypto/src/main/java/androidx/security/crypto/EncryptedFile.java
+++ b/security/security-crypto/src/main/java/androidx/security/crypto/EncryptedFile.java
@@ -194,14 +194,14 @@
         public EncryptedFile build() throws GeneralSecurityException, IOException {
             StreamingAeadConfig.register();
 
-            KeysetHandle streadmingAeadKeysetHandle = new AndroidKeysetManager.Builder()
+            KeysetHandle streamingAeadKeysetHandle = new AndroidKeysetManager.Builder()
                     .withKeyTemplate(mFileEncryptionScheme.getKeyTemplate())
                     .withSharedPref(mContext, mKeysetAlias, mKeysetPrefName)
                     .withMasterKeyUri(KEYSTORE_PATH_URI + mMasterKeyAlias)
                     .build().getKeysetHandle();
 
             StreamingAead streamingAead =
-                    streadmingAeadKeysetHandle.getPrimitive(StreamingAead.class);
+                    streamingAeadKeysetHandle.getPrimitive(StreamingAead.class);
 
             return new EncryptedFile(mFile, mKeysetAlias, streamingAead, mContext);
         }
diff --git a/settings.gradle b/settings.gradle
index 3e517c5..519cfb3 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -415,6 +415,7 @@
 includeProject(":camera:camera-camera2-pipe-testing", [BuildType.CAMERA])
 includeProject(":camera:camera-core", [BuildType.CAMERA])
 includeProject(":camera:camera-effects", [BuildType.CAMERA])
+includeProject(":camera:camera-effects-still-portrait", [BuildType.CAMERA])
 includeProject(":camera:camera-extensions", [BuildType.CAMERA])
 includeProject(":camera:camera-extensions-stub", [BuildType.CAMERA])
 includeProject(":camera:camera-lifecycle", [BuildType.CAMERA])
@@ -674,6 +675,7 @@
 includeProject(":hilt:hilt-work", [BuildType.MAIN])
 includeProject(":hilt:integration-tests:hilt-testapp-viewmodel", "hilt/integration-tests/viewmodelapp", [BuildType.MAIN])
 includeProject(":hilt:integration-tests:hilt-testapp-worker", "hilt/integration-tests/workerapp", [BuildType.MAIN])
+includeProject(":input:input-motionprediction", [BuildType.MAIN])
 includeProject(":inspection:inspection", [BuildType.MAIN, BuildType.COMPOSE])
 includeProject(":inspection:inspection-gradle-plugin", [BuildType.MAIN])
 includeProject(":inspection:inspection-testing", [BuildType.MAIN, BuildType.COMPOSE])
@@ -767,7 +769,7 @@
 includeProject(":paging:paging-rxjava2-ktx", [BuildType.MAIN])
 includeProject(":paging:paging-rxjava3", [BuildType.MAIN])
 includeProject(":paging:paging-samples", "paging/samples", [BuildType.MAIN, BuildType.COMPOSE])
-includeProject(":paging:paging-testing", [BuildType.MAIN])
+includeProject(":paging:paging-testing", [BuildType.MAIN, BuildType.COMPOSE])
 includeProject(":palette:palette", [BuildType.MAIN])
 includeProject(":palette:palette-ktx", [BuildType.MAIN])
 includeProject(":percentlayout:percentlayout", [BuildType.MAIN])
diff --git a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/Configurator.java b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/Configurator.java
index de67051..0a626d7 100644
--- a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/Configurator.java
+++ b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/Configurator.java
@@ -29,7 +29,6 @@
  * the original value of any parameter that you are modifying. After running your
  * tests with the modified parameters, make sure to also restore
  * the original parameter values, otherwise this will impact other tests cases.
- * @since API Level 18
  */
 public final class Configurator {
     private long mWaitForIdleTimeout = 10 * 1000;
@@ -61,7 +60,6 @@
      * Retrieves a singleton instance of Configurator.
      *
      * @return Configurator instance
-     * @since API Level 18
      */
     public static @NonNull Configurator getInstance() {
         if (sConfigurator == null) {
@@ -83,7 +81,6 @@
      *
      * @param timeout Timeout value in milliseconds
      * @return self
-     * @since API Level 18
      */
     public @NonNull Configurator setWaitForIdleTimeout(long timeout) {
         mWaitForIdleTimeout = timeout;
@@ -102,7 +99,6 @@
      * See {@link #setWaitForSelectorTimeout(long)}
      *
      * @return Current timeout value in milliseconds
-     * @since API Level 18
      */
     public long getWaitForIdleTimeout() {
         return mWaitForIdleTimeout;
@@ -119,7 +115,6 @@
      *
      * @param timeout Timeout value in milliseconds.
      * @return self
-     * @since API Level 18
      */
     public @NonNull Configurator setWaitForSelectorTimeout(long timeout) {
         mWaitForSelector = timeout;
@@ -136,7 +131,6 @@
      * the timeout elapses.
      *
      * @return Current timeout value in milliseconds
-     * @since API Level 18
      */
     public long getWaitForSelectorTimeout() {
         return mWaitForSelector;
@@ -153,7 +147,6 @@
      *
      * @param timeout Timeout value in milliseconds
      * @return self
-     * @since API Level 18
      */
     public @NonNull Configurator setScrollAcknowledgmentTimeout(long timeout) {
         mScrollEventWaitTimeout = timeout;
@@ -170,7 +163,6 @@
      * See {@link UiScrollable}
      *
      * @return current timeout in milliseconds
-     * @since API Level 18
      */
     public long getScrollAcknowledgmentTimeout() {
         return mScrollEventWaitTimeout;
@@ -187,7 +179,6 @@
      *
      * @param timeout Timeout value in milliseconds
      * @return self
-     * @since API Level 18
      */
     public @NonNull Configurator setActionAcknowledgmentTimeout(long timeout) {
         mWaitForActionAcknowledgment = timeout;
@@ -204,7 +195,6 @@
      * See {@link UiObject}
      *
      * @return current timeout in milliseconds
-     * @since API Level 18
      */
     public long getActionAcknowledgmentTimeout() {
         return mWaitForActionAcknowledgment;
@@ -216,7 +206,6 @@
      *
      * @param delay Delay value in milliseconds
      * @return self
-     * @since API Level 18
      */
     public @NonNull Configurator setKeyInjectionDelay(long delay) {
         mKeyInjectionDelay = delay;
@@ -228,7 +217,6 @@
      * See {@link UiObject#setText(String)}
      *
      * @return current delay in milliseconds
-     * @since API Level 18
      */
     public long getKeyInjectionDelay() {
         return mKeyInjectionDelay;
diff --git a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/IAutomationSupport.java b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/IAutomationSupport.java
index 17d6879..e74908f 100644
--- a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/IAutomationSupport.java
+++ b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/IAutomationSupport.java
@@ -22,8 +22,6 @@
 
 /**
  * Provides auxiliary support for running test cases
- *
- * @since API Level 16
  */
 public interface IAutomationSupport {
 
@@ -32,7 +30,6 @@
      *
      * @param resultCode
      * @param status status report, consisting of key value pairs
-     * @since API Level 16
      */
     void sendStatus(int resultCode, @NonNull Bundle status);
 
diff --git a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/InteractionController.java b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/InteractionController.java
index f4d2ecb..ee4b9dc 100644
--- a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/InteractionController.java
+++ b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/InteractionController.java
@@ -721,7 +721,6 @@
      *        path. Each {@link PointerCoords} in an array constitute a point on a pointer's path.
      * @return <code>true</code> if all points on all paths are injected successfully, <code>false
      *        </code>otherwise
-     * @since API Level 18
      */
     public boolean performMultiPointerGesture(PointerCoords[] ... touches) {
         boolean ret = true;
@@ -805,7 +804,6 @@
      * Simulates a short press on the Recent Apps button.
      *
      * @return true if successful, else return false
-     * @since API Level 18
      */
     public boolean toggleRecentApps() {
         return getUiAutomation().performGlobalAction(AccessibilityService.GLOBAL_ACTION_RECENTS);
@@ -815,7 +813,6 @@
      * Opens the notification shade
      *
      * @return true if successful, else return false
-     * @since API Level 18
      */
     public boolean openNotification() {
         return getUiAutomation().performGlobalAction(AccessibilityService.GLOBAL_ACTION_NOTIFICATIONS);
@@ -825,7 +822,6 @@
      * Opens the quick settings shade
      *
      * @return true if successful, else return false
-     * @since API Level 18
      */
     public boolean openQuickSettings() {
         return getUiAutomation().performGlobalAction(AccessibilityService.GLOBAL_ACTION_QUICK_SETTINGS);
diff --git a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiAutomatorTestCase.java b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiAutomatorTestCase.java
index 8c8c71a8..914f9b3 100644
--- a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiAutomatorTestCase.java
+++ b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiAutomatorTestCase.java
@@ -37,7 +37,6 @@
     /**
      * Get current instance of {@link UiDevice}. Works similar to calling the static
      * {@link UiDevice#getInstance()} from anywhere in the test classes.
-     * @since API Level 16
      */
     public UiDevice getUiDevice() {
         return mDevice;
@@ -47,7 +46,6 @@
      * Get command line parameters. On the command line when passing <code>-e key value</code>
      * pairs, the {@link Bundle} will have the key value pairs conveniently available to the
      * tests.
-     * @since API Level 16
      */
     public Bundle getParams() {
         return mParams;
@@ -57,7 +55,6 @@
      * Provides support for running tests to report interim status
      *
      * @return IAutomationSupport
-     * @since API Level 16
      * @deprecated Use {@link Instrumentation#sendStatus(int, Bundle)} instead
      */
     @Deprecated
@@ -91,7 +88,6 @@
     /**
      * Calls {@link SystemClock#sleep(long)} to sleep
      * @param ms is in milliseconds.
-     * @since API Level 16
      * @deprecated Use {@link SystemClock#sleep(long)} instead.
      */
     @Deprecated
diff --git a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiCollection.java b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiCollection.java
index 3225209..40b8b2a 100644
--- a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiCollection.java
+++ b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiCollection.java
@@ -21,7 +21,6 @@
 /**
  * Used to enumerate a container's UI elements for the purpose of counting,
  * or targeting a sub elements by a child's text or description.
- * @since API Level 16
  */
 public class UiCollection extends UiObject {
 
@@ -29,7 +28,6 @@
      * Constructs an instance as described by the selector
      *
      * @param selector
-     * @since API Level 16
      */
     public UiCollection(@NonNull UiSelector selector) {
         super(selector);
@@ -48,7 +46,6 @@
      * @param text String of the identifying child contents of of the <code>childPattern</code>
      * @return {@link UiObject} pointing at and instance of <code>childPattern</code>
      * @throws UiObjectNotFoundException
-     * @since API Level 16
      */
     @NonNull
     public UiObject getChildByDescription(@NonNull UiSelector childPattern, @NonNull String text)
@@ -83,7 +80,6 @@
      * @param childPattern {@link UiSelector} selector of the child pattern to match and return
      * @param instance int the desired matched instance of this <code>childPattern</code>
      * @return {@link UiObject} pointing at and instance of <code>childPattern</code>
-     * @since API Level 16
      */
     @NonNull
     public UiObject getChildByInstance(@NonNull UiSelector childPattern, int instance)
@@ -108,7 +104,6 @@
      * @param text String of the identifying child contents of of the <code>childPattern</code>
      * @return {@link UiObject} pointing at and instance of <code>childPattern</code>
      * @throws UiObjectNotFoundException
-     * @since API Level 16
      */
     @NonNull
     public UiObject getChildByText(@NonNull UiSelector childPattern, @NonNull String text)
@@ -140,7 +135,6 @@
      * @param childPattern a {@link UiSelector} that represents the matching child UI
      * elements to count
      * @return the number of matched childPattern under the current {@link UiCollection}
-     * @since API Level 16
      */
     public int getChildCount(@NonNull UiSelector childPattern) {
         Tracer.trace(childPattern);
diff --git a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiDevice.java b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiDevice.java
index 6290872..4af6bca 100644
--- a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiDevice.java
+++ b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiDevice.java
@@ -59,6 +59,7 @@
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.TimeoutException;
 
@@ -66,40 +67,29 @@
  * UiDevice provides access to state information about the device.
  * You can also use this class to simulate user actions on the device,
  * such as pressing the d-pad or pressing the Home and Menu buttons.
- * @since API Level 16
  */
 public class UiDevice implements Searchable {
 
     private static final String LOG_TAG = UiDevice.class.getSimpleName();
 
-    // Sometimes HOME and BACK key presses will generate no events if already on
-    // home page or there is nothing to go back to, Set low timeouts.
-    private static final long KEY_PRESS_EVENT_TIMEOUT = 1 * 1000;
+    // Use a short timeout after HOME or BACK key presses, as no events might be generated if
+    // already on the home page or if there is nothing to go back to.
+    private static final long KEY_PRESS_EVENT_TIMEOUT = 1_000; // ms
 
-    // store for registered UiWatchers
-    private final HashMap<String, UiWatcher> mWatchers = new HashMap<String, UiWatcher>();
-    private final List<String> mWatchersTriggers = new ArrayList<String>();
-
-    // remember if we're executing in the context of a UiWatcher
-    private boolean mInWatcherContext = false;
-
-    /** keep a reference of {@link Instrumentation} instance*/
-    private Instrumentation mInstrumentation;
-    private QueryController mQueryController;
-    private InteractionController mInteractionController;
-    private DisplayManager mDisplayManager;
-
-    // Singleton instance
+    // Singleton instance.
     private static UiDevice sInstance;
 
-    // Get wait functionality from a mixin
-    private WaitMixin<UiDevice> mWaitMixin = new WaitMixin<UiDevice>(this);
+    private final Instrumentation mInstrumentation;
+    private final QueryController mQueryController;
+    private final InteractionController mInteractionController;
+    private final DisplayManager mDisplayManager;
+    private final WaitMixin<UiDevice> mWaitMixin = new WaitMixin<>(this);
+    private final Context mUiContext;
 
-    /**
-     * @deprecated Should use {@link UiDevice#UiDevice(Instrumentation)} instead.
-     */
-    @Deprecated
-    private UiDevice() {}
+    // Track registered UiWatchers, and whether currently in a UiWatcher execution.
+    private final Map<String, UiWatcher> mWatchers = new HashMap<>();
+    private final List<String> mWatchersTriggers = new ArrayList<>();
+    private boolean mInWatcherContext = false;
 
     /** Private constructor. Clients should use {@link UiDevice#getInstance(Instrumentation)}. */
     UiDevice(Instrumentation instrumentation) {
@@ -109,13 +99,20 @@
         mDisplayManager = (DisplayManager) instrumentation.getContext().getSystemService(
                 Service.DISPLAY_SERVICE);
 
-        // Enable multi-window support for API level 21 and up
+        // Enable multi-window support by subscribing to window information for API 21+.
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
-            // Subscribe to window information
             AccessibilityServiceInfo info = getUiAutomation().getServiceInfo();
             info.flags |= AccessibilityServiceInfo.FLAG_RETRIEVE_INTERACTIVE_WINDOWS;
             getUiAutomation().setServiceInfo(info);
         }
+
+        // Create UI context to access UI components for API 31+.
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+            mUiContext = Api31Impl.createWindowContext(
+                    mInstrumentation.getContext(), getDefaultDisplay());
+        } else {
+            mUiContext = mInstrumentation.getContext();
+        }
     }
 
     boolean isInWatcherContext() {
@@ -230,7 +227,6 @@
      * and searching the hierarchy inefficient are removed.
      *
      * @param compressed true to enable compression; else, false to disable
-     * @since API Level 18
      */
     public void setCompressedLayoutHeirarchy(boolean compressed) {
         AccessibilityServiceInfo info = getUiAutomation().getServiceInfo();
@@ -247,7 +243,6 @@
      * @deprecated Should use {@link #getInstance(Instrumentation)} instead. This version hides
      * UiDevice's dependency on having an Instrumentation reference and is prone to misuse.
      * @return UiDevice instance
-     * @since API Level 16
      */
     @Deprecated
     @NonNull
@@ -301,7 +296,6 @@
      * the same as returned by invoking #adb shell getprop ro.product.name.
      *
      * @return product name of the device
-     * @since API Level 17
      */
     @NonNull
     public String getProductName() {
@@ -322,7 +316,6 @@
      * DOM instead.
      *
      * @return text of the last traversal event, else return an empty string
-     * @since API Level 16
      */
     @SuppressLint("UnknownNullness") // Avoid unnecessary null checks from nullable testing APIs.
     public String getLastTraversedText() {
@@ -333,7 +326,6 @@
     /**
      * Clears the text from the last UI traversal event.
      * See {@link #getLastTraversedText()}.
-     * @since API Level 16
      */
     public void clearLastTraversedText() {
         Tracer.trace();
@@ -343,7 +335,6 @@
     /**
      * Simulates a short press on the MENU button.
      * @return true if successful, else return false
-     * @since API Level 16
      */
     public boolean pressMenu() {
         Tracer.trace();
@@ -356,7 +347,6 @@
     /**
      * Simulates a short press on the BACK button.
      * @return true if successful, else return false
-     * @since API Level 16
      */
     public boolean pressBack() {
         Tracer.trace();
@@ -369,7 +359,6 @@
     /**
      * Simulates a short press on the HOME button.
      * @return true if successful, else return false
-     * @since API Level 16
      */
     public boolean pressHome() {
         Tracer.trace();
@@ -382,7 +371,6 @@
     /**
      * Simulates a short press on the SEARCH button.
      * @return true if successful, else return false
-     * @since API Level 16
      */
     public boolean pressSearch() {
         Tracer.trace();
@@ -392,7 +380,6 @@
     /**
      * Simulates a short press on the CENTER button.
      * @return true if successful, else return false
-     * @since API Level 16
      */
     public boolean pressDPadCenter() {
         Tracer.trace();
@@ -402,7 +389,6 @@
     /**
      * Simulates a short press on the DOWN button.
      * @return true if successful, else return false
-     * @since API Level 16
      */
     public boolean pressDPadDown() {
         Tracer.trace();
@@ -412,7 +398,6 @@
     /**
      * Simulates a short press on the UP button.
      * @return true if successful, else return false
-     * @since API Level 16
      */
     public boolean pressDPadUp() {
         Tracer.trace();
@@ -422,7 +407,6 @@
     /**
      * Simulates a short press on the LEFT button.
      * @return true if successful, else return false
-     * @since API Level 16
      */
     public boolean pressDPadLeft() {
         Tracer.trace();
@@ -432,7 +416,6 @@
     /**
      * Simulates a short press on the RIGHT button.
      * @return true if successful, else return false
-     * @since API Level 16
      */
     public boolean pressDPadRight() {
         Tracer.trace();
@@ -442,7 +425,6 @@
     /**
      * Simulates a short press on the DELETE key.
      * @return true if successful, else return false
-     * @since API Level 16
      */
     public boolean pressDelete() {
         Tracer.trace();
@@ -452,7 +434,6 @@
     /**
      * Simulates a short press on the ENTER key.
      * @return true if successful, else return false
-     * @since API Level 16
      */
     public boolean pressEnter() {
         Tracer.trace();
@@ -464,7 +445,6 @@
      *
      * See {@link KeyEvent}
      * @return true if successful, else return false
-     * @since API Level 16
      */
     public boolean pressKeyCode(int keyCode) {
         Tracer.trace(keyCode);
@@ -479,7 +459,6 @@
      * @param keyCode the key code of the event.
      * @param metaState an integer in which each bit set to 1 represents a pressed meta key
      * @return true if successful, else return false
-     * @since API Level 16
      */
     public boolean pressKeyCode(int keyCode, int metaState) {
         Tracer.trace(keyCode, metaState);
@@ -492,7 +471,6 @@
      *
      * @return true if successful, else return false
      * @throws RemoteException
-     * @since API Level 16
      */
     public boolean pressRecentApps() throws RemoteException {
         Tracer.trace();
@@ -504,7 +482,6 @@
      * Opens the notification shade.
      *
      * @return true if successful, else return false
-     * @since API Level 18
      */
     public boolean openNotification() {
         Tracer.trace();
@@ -516,7 +493,6 @@
      * Opens the Quick Settings shade.
      *
      * @return true if successful, else return false
-     * @since API Level 18
      */
     public boolean openQuickSettings() {
         Tracer.trace();
@@ -528,7 +504,6 @@
      * Gets the width of the display, in pixels. The width and height details
      * are reported based on the current orientation of the display.
      * @return width in pixels or zero on failure
-     * @since API Level 16
      */
     public int getDisplayWidth() {
         Tracer.trace();
@@ -542,7 +517,6 @@
      * Gets the height of the display, in pixels. The size is adjusted based
      * on the current orientation of the display.
      * @return height in pixels or zero on failure
-     * @since API Level 16
      */
     public int getDisplayHeight() {
         Tracer.trace();
@@ -558,7 +532,6 @@
      * @param x coordinate
      * @param y coordinate
      * @return true if the click succeeded else false
-     * @since API Level 16
      */
     public boolean click(int x, int y) {
         Tracer.trace(x, y);
@@ -579,7 +552,6 @@
      * @param endY
      * @param steps is the number of move steps sent to the system
      * @return false if the operation fails or the coordinates are invalid
-     * @since API Level 16
      */
     public boolean swipe(int startX, int startY, int endX, int endY, int steps) {
         Tracer.trace(startX, startY, endX, endY, steps);
@@ -600,7 +572,6 @@
      * @param steps is the number of steps for the swipe action
      * @return true if swipe is performed, false if the operation fails
      * or the coordinates are invalid
-     * @since API Level 18
      */
     public boolean drag(int startX, int startY, int endX, int endY, int steps) {
         Tracer.trace(startX, startY, endX, endY, steps);
@@ -615,7 +586,6 @@
      * @param segments is Point array containing at least one Point object
      * @param segmentSteps steps to inject between two Points
      * @return true on success
-     * @since API Level 16
      */
     public boolean swipe(@NonNull Point[] segments, int segmentSteps) {
         Tracer.trace(segments, segmentSteps);
@@ -625,7 +595,6 @@
     /**
      * Waits for the current application to idle.
      * Default wait timeout is 10 seconds
-     * @since API Level 16
      */
     public void waitForIdle() {
         Tracer.trace();
@@ -635,7 +604,6 @@
     /**
      * Waits for the current application to idle.
      * @param timeout in milliseconds
-     * @since API Level 16
      */
     public void waitForIdle(long timeout) {
         Tracer.trace(timeout);
@@ -646,7 +614,6 @@
      * Retrieves the last activity to report accessibility events.
      * @deprecated The results returned should be considered unreliable
      * @return String name of activity
-     * @since API Level 16
      */
     @Deprecated
     @SuppressLint("UnknownNullness") // Avoid unnecessary null checks from nullable testing APIs.
@@ -658,7 +625,6 @@
     /**
      * Retrieves the name of the last package to report accessibility events.
      * @return String name of package
-     * @since API Level 16
      */
     @SuppressLint("UnknownNullness") // Avoid unnecessary null checks from nullable testing APIs.
     public String getCurrentPackageName() {
@@ -672,7 +638,6 @@
      *
      * @param name to register the UiWatcher
      * @param watcher {@link UiWatcher}
-     * @since API Level 16
      */
     public void registerWatcher(@Nullable String name, @Nullable UiWatcher watcher) {
         Tracer.trace(name, watcher);
@@ -687,7 +652,6 @@
      *
      * See {@link #registerWatcher(String, UiWatcher)}
      * @param name used to register the UiWatcher
-     * @since API Level 16
      */
     public void removeWatcher(@Nullable String name) {
         Tracer.trace(name);
@@ -700,7 +664,6 @@
     /**
      * This method forces all registered watchers to run.
      * See {@link #registerWatcher(String, UiWatcher)}
-     * @since API Level 16
      */
     public void runWatchers() {
         Tracer.trace();
@@ -730,7 +693,6 @@
      * If a UiWatcher runs and its {@link UiWatcher#checkForCondition()} call
      * returned <code>true</code>, then the UiWatcher is considered triggered.
      * See {@link #registerWatcher(String, UiWatcher)}
-     * @since API Level 16
      */
     public void resetWatcherTriggers() {
         Tracer.trace();
@@ -746,7 +708,6 @@
      *
      * @param watcherName
      * @return true if triggered else false
-     * @since API Level 16
      */
     public boolean hasWatcherTriggered(@Nullable String watcherName) {
         Tracer.trace(watcherName);
@@ -758,7 +719,6 @@
      *
      * See {@link #registerWatcher(String, UiWatcher)}
      * See {@link #hasWatcherTriggered(String)}
-     * @since API Level 16
      */
     public boolean hasAnyWatcherTriggered() {
         Tracer.trace();
@@ -780,7 +740,6 @@
      * Check if the device is in its natural orientation. This is determined by checking if the
      * orientation is at 0 or 180 degrees.
      * @return true if it is in natural orientation
-     * @since API Level 17
      */
     public boolean isNaturalOrientation() {
         Tracer.trace();
@@ -792,7 +751,6 @@
 
     /**
      * Returns the current rotation of the display, as defined in {@link Surface}
-     * @since API Level 17
      */
     public int getDisplayRotation() {
         Tracer.trace();
@@ -804,7 +762,6 @@
      * Disables the sensors and freezes the device rotation at its
      * current rotation state.
      * @throws RemoteException
-     * @since API Level 16
      */
     public void freezeRotation() throws RemoteException {
         Tracer.trace();
@@ -829,7 +786,6 @@
      * If you want to un-freeze the rotation and re-enable the sensors
      * see {@link #unfreezeRotation()}.
      * @throws RemoteException
-     * @since API Level 17
      */
     public void setOrientationLeft() throws RemoteException {
         Tracer.trace();
@@ -844,7 +800,6 @@
      * If you want to un-freeze the rotation and re-enable the sensors
      * see {@link #unfreezeRotation()}.
      * @throws RemoteException
-     * @since API Level 17
      */
     public void setOrientationRight() throws RemoteException {
         Tracer.trace();
@@ -859,7 +814,6 @@
      * If you want to un-freeze the rotation and re-enable the sensors
      * see {@link #unfreezeRotation()}.
      * @throws RemoteException
-     * @since API Level 17
      */
     public void setOrientationNatural() throws RemoteException {
         Tracer.trace();
@@ -874,7 +828,6 @@
      * If the screen was OFF and it just got turned ON, this method will insert a 500ms delay
      * to allow the device time to wake up and accept input.
      * @throws RemoteException
-     * @since API Level 16
      */
     public void wakeUp() throws RemoteException {
         Tracer.trace();
@@ -890,7 +843,6 @@
      *
      * @return true if the screen is ON else false
      * @throws RemoteException
-     * @since API Level 16
      */
     public boolean isScreenOn() throws RemoteException {
         Tracer.trace();
@@ -902,7 +854,6 @@
      * it does nothing if the screen is already OFF.
      *
      * @throws RemoteException
-     * @since API Level 16
      */
     public void sleep() throws RemoteException {
         Tracer.trace();
@@ -914,7 +865,6 @@
      * Relative file paths are stored the application's internal private storage location.
      *
      * @param fileName
-     * @since API Level 16
      * @deprecated Use {@link UiDevice#dumpWindowHierarchy(File)} or
      *     {@link UiDevice#dumpWindowHierarchy(OutputStream)} instead.
      */
@@ -967,7 +917,6 @@
      *
      * @return true if a window update occurred, false if timeout has elapsed or if the current
      *         window does not have the specified package name
-     * @since API Level 16
      */
     public boolean waitForWindowUpdate(@Nullable String packageName, long timeout) {
         Tracer.trace(packageName, timeout);
@@ -1010,7 +959,6 @@
      *
      * @param storePath where the PNG should be written to
      * @return true if screen shot is created successfully, false otherwise
-     * @since API Level 17
      */
     public boolean takeScreenshot(@NonNull File storePath) {
         Tracer.trace(storePath);
@@ -1026,7 +974,6 @@
      * @param scale scale the screenshot down if needed; 1.0f for original size
      * @param quality quality of the PNG compression; range: 0-100
      * @return true if screen shot is created successfully, false otherwise
-     * @since API Level 17
      */
     public boolean takeScreenshot(@NonNull File storePath, float scale, int quality) {
         Tracer.trace(storePath, scale, quality);
@@ -1050,7 +997,18 @@
     }
 
     /**
-     * Retrieves default launcher package name
+     * Retrieves the default launcher package name.
+     *
+     * <p>As of Android 11 (API level 30), apps must declare the packages and intents they intend
+     * to query. To use this method, an app will need to include the following in its manifest:
+     * <pre>{@code
+     * <queries>
+     *   <intent>
+     *     <action android:name="android.intent.action.MAIN"/>
+     *     <category android:name="android.intent.category.HOME"/>
+     *   </intent>
+     * </queries>
+     * }</pre>
      *
      * @return package name of the default launcher
      */
@@ -1072,7 +1030,6 @@
      * @param cmd the command to run
      * @return the standard output of the command
      * @throws IOException
-     * @since API Level 21
      * @hide
      */
     @RequiresApi(21)
@@ -1143,11 +1100,7 @@
     }
 
     Context getUiContext() {
-        Context context = mInstrumentation.getContext();
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
-            return Api31Impl.createWindowContext(context, getDefaultDisplay());
-        }
-        return context;
+        return mUiContext;
     }
 
     static UiAutomation getUiAutomation(final Instrumentation instrumentation) {
diff --git a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiObject.java b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiObject.java
index 7894b1e..58e73a7 100644
--- a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiObject.java
+++ b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiObject.java
@@ -35,38 +35,19 @@
  * locate a matching view at runtime based on the {@link UiSelector} properties specified in
  * its constructor. Once you create an instance of a UiObject, it can
  * be reused for different views that match the selector criteria.
- * @since API Level 16
  */
 public class UiObject {
     private static final String LOG_TAG = UiObject.class.getSimpleName();
-    /**
-     * @since API Level 16
-     * @deprecated use {@link Configurator#setWaitForSelectorTimeout(long)}
-     **/
+    /** @deprecated use {@link Configurator#setWaitForSelectorTimeout(long)} */
     @Deprecated
     protected static final long WAIT_FOR_SELECTOR_TIMEOUT = 10 * 1000;
-    /**
-     * @since API Level 16
-     **/
     protected static final long WAIT_FOR_SELECTOR_POLL = 1000;
     // set a default timeout to 5.5s, since ANR threshold is 5s
-    /**
-     * @since API Level 16
-     **/
     protected static final long WAIT_FOR_WINDOW_TMEOUT = 5500;
-    /**
-     * @since API Level 16
-     **/
     protected static final int SWIPE_MARGIN_LIMIT = 5;
-    /**
-     * @since API Level 17
-     * @deprecated use {@link Configurator#setScrollAcknowledgmentTimeout(long)}
-     **/
+    /** @deprecated use {@link Configurator#setScrollAcknowledgmentTimeout(long)} */
     @Deprecated
     protected static final long WAIT_FOR_EVENT_TMEOUT = 3 * 1000;
-    /**
-     * @since API Level 18
-     **/
     protected static final int FINGER_TOUCH_HALF_WIDTH = 20;
 
     private final UiSelector mUiSelector;
@@ -81,7 +62,6 @@
      * @deprecated Use {@link UiDevice#findObject(UiSelector)} instead. This version hides
      * UiObject's dependency on UiDevice and is prone to misuse.
      * @param selector
-     * @since API Level 16
      */
     @Deprecated
     public UiObject(UiSelector selector) {
@@ -103,7 +83,6 @@
      * to its logs if needed. <code>getSelector().toString();</code>
      *
      * @return {@link UiSelector}
-     * @since API Level 16
      */
     @NonNull
     public final UiSelector getSelector() {
@@ -143,7 +122,6 @@
      *
      * @param selector for child view to match
      * @return a new UiObject representing the child view
-     * @since API Level 16
      */
     @NonNull
     public UiObject getChild(@NonNull UiSelector selector) throws UiObjectNotFoundException {
@@ -158,7 +136,6 @@
      * @param selector for a sibling view or children of the sibling view
      * @return a new UiObject representing the matched view
      * @throws UiObjectNotFoundException
-     * @since API Level 16
      */
     @NonNull
     public UiObject getFromParent(@NonNull UiSelector selector) throws UiObjectNotFoundException {
@@ -171,7 +148,6 @@
      *
      * @return the count of child views.
      * @throws UiObjectNotFoundException
-     * @since API Level 16
      */
     public int getChildCount() throws UiObjectNotFoundException {
         Tracer.trace();
@@ -188,7 +164,6 @@
      *
      * @param timeout in milliseconds
      * @return AccessibilityNodeInfo if found else null
-     * @since API Level 16
      */
     @Nullable
     protected AccessibilityNodeInfo findAccessibilityNodeInfo(long timeout) {
@@ -221,7 +196,6 @@
      * @param steps usually 40 steps. You can increase or decrease the steps to change the speed.
      * @return true if successful
      * @throws UiObjectNotFoundException
-     * @since API Level 18
      */
     public boolean dragTo(@NonNull UiObject destObj, int steps) throws UiObjectNotFoundException {
         Rect srcRect = getVisibleBounds();
@@ -241,7 +215,6 @@
      * @param steps usually 40 steps. You can increase or decrease the steps to change the speed.
      * @return true if successful
      * @throws UiObjectNotFoundException
-     * @since API Level 18
      */
     public boolean dragTo(int destX, int destY, int steps) throws UiObjectNotFoundException {
         Rect srcRect = getVisibleBounds();
@@ -263,7 +236,6 @@
      * injected about 5ms apart. So a 100 steps may take about 1/2 second to complete.
      * @return true of successful
      * @throws UiObjectNotFoundException
-     * @since API Level 16
      */
     public boolean swipeUp(int steps) throws UiObjectNotFoundException {
         Tracer.trace(steps);
@@ -291,7 +263,6 @@
      * injected about 5ms apart. So a 100 steps may take about 1/2 second to complete.
      * @return true if successful
      * @throws UiObjectNotFoundException
-     * @since API Level 16
      */
     public boolean swipeDown(int steps) throws UiObjectNotFoundException {
         Tracer.trace(steps);
@@ -319,7 +290,6 @@
      * injected about 5ms apart. So a 100 steps may take about 1/2 second to complete.
      * @return true if successful
      * @throws UiObjectNotFoundException
-     * @since API Level 16
      */
     public boolean swipeLeft(int steps) throws UiObjectNotFoundException {
         Tracer.trace(steps);
@@ -346,7 +316,6 @@
      * injected about 5ms apart. So a 100 steps may take about 1/2 second to complete.
      * @return true if successful
      * @throws UiObjectNotFoundException
-     * @since API Level 16
      */
     public boolean swipeRight(int steps) throws UiObjectNotFoundException {
         Tracer.trace(steps);
@@ -415,7 +384,6 @@
      *
      * @return true id successful else false
      * @throws UiObjectNotFoundException
-     * @since API Level 16
      */
     public boolean click() throws UiObjectNotFoundException {
         Tracer.trace();
@@ -435,7 +403,6 @@
      *
      * @return true if the event was triggered, else false
      * @throws UiObjectNotFoundException
-     * @since API Level 16
      */
     public boolean clickAndWaitForNewWindow() throws UiObjectNotFoundException {
         Tracer.trace();
@@ -457,7 +424,6 @@
      * @param timeout timeout before giving up on waiting for a new window
      * @return true if the event was triggered, else false
      * @throws UiObjectNotFoundException
-     * @since API Level 16
      */
     public boolean clickAndWaitForNewWindow(long timeout) throws UiObjectNotFoundException {
         Tracer.trace(timeout);
@@ -475,7 +441,6 @@
      *
      * @return true on success
      * @throws UiObjectNotFoundException
-     * @since API Level 16
      */
     public boolean clickTopLeft() throws UiObjectNotFoundException {
         Tracer.trace();
@@ -493,7 +458,6 @@
      *
      * @return true if operation was successful
      * @throws UiObjectNotFoundException
-     * @since API Level 16
      */
     public boolean longClickBottomRight() throws UiObjectNotFoundException  {
         Tracer.trace();
@@ -511,7 +475,6 @@
      *
      * @return true on success
      * @throws UiObjectNotFoundException
-     * @since API Level 16
      */
     public boolean clickBottomRight() throws UiObjectNotFoundException {
         Tracer.trace();
@@ -529,7 +492,6 @@
      *
      * @return true if operation was successful
      * @throws UiObjectNotFoundException
-     * @since API Level 16
      */
     public boolean longClick() throws UiObjectNotFoundException  {
         Tracer.trace();
@@ -547,7 +509,6 @@
      *
      * @return true if operation was successful
      * @throws UiObjectNotFoundException
-     * @since API Level 16
      */
     public boolean longClickTopLeft() throws UiObjectNotFoundException {
         Tracer.trace();
@@ -565,7 +526,6 @@
      *
      * @return text value of the current node represented by this UiObject
      * @throws UiObjectNotFoundException if no match could be found
-     * @since API Level 16
      */
     @NonNull
     public String getText() throws UiObjectNotFoundException {
@@ -584,7 +544,6 @@
      *
      * @return class name of the current node represented by this UiObject
      * @throws UiObjectNotFoundException if no match was found
-     * @since API Level 18
      */
     @NonNull
     public String getClassName() throws UiObjectNotFoundException {
@@ -603,7 +562,6 @@
      *
      * @return value of node attribute "content_desc"
      * @throws UiObjectNotFoundException
-     * @since API Level 16
      */
     @NonNull
     public String getContentDescription() throws UiObjectNotFoundException {
@@ -667,7 +625,6 @@
      * @param text string to set
      * @return true if operation is successful
      * @throws UiObjectNotFoundException
-     * @since API Level 16
      */
     public boolean setText(@Nullable String text) throws UiObjectNotFoundException {
         // per framework convention, setText with null means clearing it
@@ -700,7 +657,6 @@
      * existing content, and clears it by sending a DELETE key press
      *
      * @throws UiObjectNotFoundException
-     * @since API Level 16
      */
     public void clearTextField() throws UiObjectNotFoundException {
         Tracer.trace();
@@ -738,7 +694,6 @@
      * Check if the UI element's <code>checked</code> property is currently true
      *
      * @return true if it is else false
-     * @since API Level 16
      */
     public boolean isChecked() throws UiObjectNotFoundException {
         Tracer.trace();
@@ -754,7 +709,6 @@
      *
      * @return true if it is else false
      * @throws UiObjectNotFoundException
-     * @since API Level 16
      */
     public boolean isSelected() throws UiObjectNotFoundException {
         Tracer.trace();
@@ -770,7 +724,6 @@
      *
      * @return true if it is else false
      * @throws UiObjectNotFoundException
-     * @since API Level 16
      */
     public boolean isCheckable() throws UiObjectNotFoundException {
         Tracer.trace();
@@ -786,7 +739,6 @@
      *
      * @return true if it is else false
      * @throws UiObjectNotFoundException
-     * @since API Level 16
      */
     public boolean isEnabled() throws UiObjectNotFoundException {
         Tracer.trace();
@@ -802,7 +754,6 @@
      *
      * @return true if it is else false
      * @throws UiObjectNotFoundException
-     * @since API Level 16
      */
     public boolean isClickable() throws UiObjectNotFoundException {
         Tracer.trace();
@@ -818,7 +769,6 @@
      *
      * @return true if it is else false
      * @throws UiObjectNotFoundException
-     * @since API Level 16
      */
     public boolean isFocused() throws UiObjectNotFoundException {
         Tracer.trace();
@@ -834,7 +784,6 @@
      *
      * @return true if it is else false
      * @throws UiObjectNotFoundException
-     * @since API Level 16
      */
     public boolean isFocusable() throws UiObjectNotFoundException {
         Tracer.trace();
@@ -850,7 +799,6 @@
      *
      * @return true if it is else false
      * @throws UiObjectNotFoundException
-     * @since API Level 16
      */
     public boolean isScrollable() throws UiObjectNotFoundException {
         Tracer.trace();
@@ -866,7 +814,6 @@
      *
      * @return true if it is else false
      * @throws UiObjectNotFoundException
-     * @since API Level 16
      */
     public boolean isLongClickable() throws UiObjectNotFoundException {
         Tracer.trace();
@@ -882,7 +829,6 @@
      *
      * @return true if it is else false
      * @throws UiObjectNotFoundException
-     * @since API Level 16
      */
     @NonNull
     public String getPackageName() throws UiObjectNotFoundException {
@@ -903,8 +849,6 @@
      * @return Rect
      * @throws UiObjectNotFoundException
      * @see #getBounds()
-     *
-     * @since API Level 17
      */
     @NonNull
     public Rect getVisibleBounds() throws UiObjectNotFoundException {
@@ -921,7 +865,6 @@
      *
      * @return Rect
      * @throws UiObjectNotFoundException
-     * @since API Level 16
      */
     @NonNull
     public Rect getBounds() throws UiObjectNotFoundException {
@@ -945,7 +888,6 @@
      *
      * @param timeout the amount of time to wait (in milliseconds)
      * @return true if the view is displayed, else false if timeout elapsed while waiting
-     * @since API Level 16
      */
     public boolean waitForExists(long timeout) {
         Tracer.trace(timeout);
@@ -971,7 +913,6 @@
      * @param timeout time to wait (in milliseconds)
      * @return true if the element is gone before timeout elapsed, else false if timeout elapsed
      * but a matching element is still found.
-     * @since API Level 16
      */
     public boolean waitUntilGone(long timeout) {
         Tracer.trace(timeout);
@@ -996,7 +937,6 @@
      * {@link #waitForExists(long)}.
      *
      * @return true if the view represented by this UiObject does exist
-     * @since API Level 16
      */
     public boolean exists() {
         Tracer.trace();
@@ -1019,7 +959,6 @@
      * @return <code>true</code> if all touch events for this gesture are injected successfully,
      *         <code>false</code> otherwise
      * @throws UiObjectNotFoundException
-     * @since API Level 18
      */
     public boolean pinchOut(int percent, int steps) throws UiObjectNotFoundException {
         // make value between 1 and 100
@@ -1057,7 +996,6 @@
      * @return <code>true</code> if all touch events for this gesture are injected successfully,
      *         <code>false</code> otherwise
      * @throws UiObjectNotFoundException
-     * @since API Level 18
      */
     public boolean pinchIn(int percent, int steps) throws UiObjectNotFoundException {
         // make value between 1 and 100
@@ -1095,7 +1033,6 @@
      * about 5 milliseconds apart, so 100 steps may take around 0.5 seconds to complete.
      * @return <code>true</code> if all touch events for this gesture are injected successfully,
      *         <code>false</code> otherwise
-     * @since API Level 18
      */
     public boolean performTwoPointerGesture(@NonNull Point startPoint1, @NonNull Point startPoint2,
             @NonNull Point endPoint1, @NonNull Point endPoint2, int steps) {
@@ -1179,7 +1116,6 @@
      * array element represents a touch point on a pointer's path.
      * @return <code>true</code> if all touch events for this gesture are injected successfully,
      *         <code>false</code> otherwise
-     * @since API Level 18
      */
     public boolean performMultiPointerGesture(@NonNull PointerCoords[]... touches) {
         return getInteractionController().performMultiPointerGesture(touches);
diff --git a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiObjectNotFoundException.java b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiObjectNotFoundException.java
index db0c494..9fc254a 100644
--- a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiObjectNotFoundException.java
+++ b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiObjectNotFoundException.java
@@ -22,29 +22,19 @@
 /**
  * Generated in test runs when a {@link UiSelector} selector could not be matched
  * to any UI element displayed.
- * @since API Level 16
  */
 public class UiObjectNotFoundException extends Exception {
 
     private static final long serialVersionUID = 1L;
 
-    /**
-     * @since API Level 16
-     **/
     public UiObjectNotFoundException(@NonNull String msg) {
         super(msg);
     }
 
-    /**
-     * @since API Level 16
-     **/
     public UiObjectNotFoundException(@NonNull String detailMessage, @Nullable Throwable throwable) {
         super(detailMessage, throwable);
     }
 
-    /**
-     * @since API Level 16
-     **/
     public UiObjectNotFoundException(@Nullable Throwable throwable) {
         super(throwable);
     }
diff --git a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiScrollable.java b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiScrollable.java
index bc2e4f7..c60e8c0 100644
--- a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiScrollable.java
+++ b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiScrollable.java
@@ -26,7 +26,6 @@
  * UiScrollable is a {@link UiCollection} and provides support for searching
  * for items in scrollable layout elements. This class can be used with
  * horizontally or vertically scrollable controls.
- * @since API Level 16
  */
 public class UiScrollable extends UiCollection {
     private static final String LOG_TAG = UiScrollable.class.getSimpleName();
@@ -52,7 +51,6 @@
      *
      * @param container a {@link UiSelector} selector to identify the scrollable
      *     layout element.
-     * @since API Level 16
      */
     public UiScrollable(@NonNull UiSelector container) {
         // wrap the container selector with container so that QueryController can handle
@@ -63,7 +61,6 @@
     /**
      * Set the direction of swipes to be vertical when performing scroll actions.
      * @return reference to itself
-     * @since API Level 16
      */
     @NonNull
     public UiScrollable setAsVerticalList() {
@@ -75,7 +72,6 @@
     /**
      * Set the direction of swipes to be horizontal when performing scroll actions.
      * @return reference to itself
-     * @since API Level 16
      */
     @NonNull
     public UiScrollable setAsHorizontalList() {
@@ -90,7 +86,6 @@
      *
      * @param selector
      * @return true if found else false
-     * @since API Level 16
      */
     protected boolean exists(@NonNull UiSelector selector) {
         if(getQueryController().findAccessibilityNodeInfo(selector) != null) {
@@ -114,7 +109,6 @@
      * the <code>childPattern</code> match
      * @return {@link UiObject} representing the child element that matches the search conditions
      * @throws UiObjectNotFoundException
-     * @since API Level 16
      */
     @NonNull
     @Override
@@ -139,7 +133,6 @@
      * @param allowScrollSearch set to true if scrolling is allowed
      * @return {@link UiObject} representing the child element that matches the search conditions
      * @throws UiObjectNotFoundException
-     * @since API Level 16
      */
     @NonNull
     public UiObject getChildByDescription(@NonNull UiSelector childPattern, @NonNull String text,
@@ -163,7 +156,6 @@
      * @param instance int number representing the occurance of 
      * a <code>childPattern</code> match
      * @return {@link UiObject} representing the child element that matches the search conditions
-     * @since API Level 16
      */
     @NonNull
     @Override
@@ -189,7 +181,6 @@
      * @param text String to find in the children of the <code>childPattern</code> match
      * @return {@link UiObject} representing the child element that matches the search conditions
      * @throws UiObjectNotFoundException
-     * @since API Level 16
      */
     @NonNull
     @Override
@@ -212,7 +203,6 @@
      * @param allowScrollSearch set to true if scrolling is allowed
      * @return {@link UiObject} representing the child element that matches the search conditions
      * @throws UiObjectNotFoundException
-     * @since API Level 16
      */
     @NonNull
     public UiObject getChildByText(@NonNull UiSelector childPattern,
@@ -236,7 +226,6 @@
      * @param text content-description to find within the contents of this scrollable layout
      * element.
      * @return true if item is found; else, false
-     * @since API Level 16
      */
     public boolean scrollDescriptionIntoView(@NonNull String text)
             throws UiObjectNotFoundException {
@@ -250,7 +239,6 @@
      *
      * @param obj {@link UiObject}
      * @return true if the item was found and now is in view else false
-     * @since API Level 16
      */
     public boolean scrollIntoView(@NonNull UiObject obj) throws UiObjectNotFoundException {
         Tracer.trace(obj.getSelector());
@@ -265,7 +253,6 @@
      *
      * @param selector {@link UiSelector} selector
      * @return true if the item was found and now is in view; else, false
-     * @since API Level 16
      */
     public boolean scrollIntoView(@NonNull UiSelector selector) throws UiObjectNotFoundException {
         Tracer.trace(selector);
@@ -343,7 +330,6 @@
      *
      * @param text test to look for
      * @return true if item is found; else, false
-     * @since API Level 16
      */
     public boolean scrollTextIntoView(@NonNull String text) throws UiObjectNotFoundException {
         Tracer.trace(text);
@@ -358,7 +344,6 @@
      *
      * @param swipes the number of search swipes to perform until giving up
      * @return reference to itself
-     * @since API Level 16
      */
     @NonNull
     public UiScrollable setMaxSearchSwipes(int swipes) {
@@ -374,7 +359,6 @@
      * {@link #getChildByText(UiSelector, String)}.
      *
      * @return max the number of search swipes to perform until giving up
-     * @since API Level 16
      */
     public int getMaxSearchSwipes() {
         Tracer.trace();
@@ -390,7 +374,6 @@
      * right-to-left languages like Arabic and Hebrew.
      *
      * @return true if scrolled, false if can't scroll anymore
-     * @since API Level 16
      */
     public boolean flingForward() throws UiObjectNotFoundException {
         Tracer.trace();
@@ -406,7 +389,6 @@
      * right-to-left languages like Arabic and Hebrew.
      *
      * @return true if scrolled, false if can't scroll anymore
-     * @since API Level 16
      */
     public boolean scrollForward() throws UiObjectNotFoundException {
         Tracer.trace();
@@ -422,7 +404,6 @@
      *
      * @param steps number of steps. Use this to control the speed of the scroll action
      * @return true if scrolled, false if can't scroll anymore
-     * @since API Level 16
      */
     public boolean scrollForward(int steps) throws UiObjectNotFoundException {
         Tracer.trace(steps);
@@ -469,7 +450,6 @@
      * right-to-left languages like Arabic and Hebrew.
      *
      * @return true if scrolled, and false if can't scroll anymore
-     * @since API Level 16
      */
     public boolean flingBackward() throws UiObjectNotFoundException {
         Tracer.trace();
@@ -485,7 +465,6 @@
      * right-to-left languages like Arabic and Hebrew.
      *
      * @return true if scrolled, and false if can't scroll anymore
-     * @since API Level 16
      */
     public boolean scrollBackward() throws UiObjectNotFoundException {
         Tracer.trace();
@@ -501,7 +480,6 @@
      *
      * @param steps number of steps. Use this to control the speed of the scroll action.
      * @return true if scrolled, false if can't scroll anymore
-     * @since API Level 16
      */
     public boolean scrollBackward(int steps) throws UiObjectNotFoundException {
         Tracer.trace(steps);
@@ -549,7 +527,6 @@
      *
      * @param steps use steps to control the speed, so that it may be a scroll, or fling
      * @return true on scrolled else false
-     * @since API Level 16
      */
     public boolean scrollToBeginning(int maxSwipes, int steps) throws UiObjectNotFoundException {
         Tracer.trace(maxSwipes, steps);
@@ -571,7 +548,6 @@
      *
      * @param maxSwipes
      * @return true on scrolled else false
-     * @since API Level 16
      */
     public boolean scrollToBeginning(int maxSwipes) throws UiObjectNotFoundException {
         Tracer.trace(maxSwipes);
@@ -586,7 +562,6 @@
      *
      * @param maxSwipes
      * @return true on scrolled else false
-     * @since API Level 16
      */
     public boolean flingToBeginning(int maxSwipes) throws UiObjectNotFoundException {
         Tracer.trace(maxSwipes);
@@ -601,7 +576,6 @@
      *
      * @param steps use steps to control the speed, so that it may be a scroll, or fling
      * @return true on scrolled else false
-     * @since API Level 16
      */
     public boolean scrollToEnd(int maxSwipes, int steps) throws UiObjectNotFoundException {
         Tracer.trace(maxSwipes, steps);
@@ -622,7 +596,6 @@
      *
      * @param maxSwipes
      * @return true on scrolled, else false
-     * @since API Level 16
      */
     public boolean scrollToEnd(int maxSwipes) throws UiObjectNotFoundException {
         Tracer.trace(maxSwipes);
@@ -637,7 +610,6 @@
      *
      * @param maxSwipes
      * @return true on scrolled, else false
-     * @since API Level 16
      */
     public boolean flingToEnd(int maxSwipes) throws UiObjectNotFoundException {
         Tracer.trace(maxSwipes);
@@ -653,7 +625,6 @@
      * too near to the edge. The default is 10% from either edge.
      *
      * @return a value between 0 and 1
-     * @since API Level 16
      */
     public double getSwipeDeadZonePercentage() {
         Tracer.trace();
@@ -671,7 +642,6 @@
      *
      * @param swipeDeadZonePercentage is a value between 0 and 1
      * @return reference to itself
-     * @since API Level 16
      */
     @NonNull
     public UiScrollable setSwipeDeadZonePercentage(double swipeDeadZonePercentage) {
diff --git a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiSelector.java b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiSelector.java
index d50782d..074b7aa 100644
--- a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiSelector.java
+++ b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiSelector.java
@@ -28,7 +28,6 @@
  * by properties such as text value, content-description, class name, and state
  * information. You can also target an element by its location in a layout
  * hierarchy.
- * @since API Level 16
  */
 public class UiSelector {
     static final int SELECTOR_NIL = 0;
@@ -66,9 +65,6 @@
 
     private SparseArray<Object> mSelectorAttributes = new SparseArray<Object>();
 
-    /**
-     * @since API Level 16
-     */
     public UiSelector() {
     }
 
@@ -76,9 +72,6 @@
         mSelectorAttributes = selector.cloneSelector().mSelectorAttributes;
     }
 
-    /**
-     * @since API Level 17
-     */
     @NonNull
     protected UiSelector cloneSelector() {
         UiSelector ret = new UiSelector();
@@ -113,7 +106,6 @@
      *
      * @param text Value to match
      * @return UiSelector with the specified search criteria
-     * @since API Level 16
      */
     @NonNull
     public UiSelector text(@NonNull String text) {
@@ -132,7 +124,6 @@
      *
      * @param regex a regular expression
      * @return UiSelector with the specified search criteria
-     * @since API Level 17
      */
     @NonNull
     public UiSelector textMatches(@NonNull String regex) {
@@ -150,7 +141,6 @@
      *
      * @param text Value to match
      * @return UiSelector with the specified search criteria
-     * @since API Level 16
      */
     @NonNull
     public UiSelector textStartsWith(@NonNull String text) {
@@ -168,7 +158,6 @@
      *
      * @param text Value to match
      * @return UiSelector with the specified search criteria
-     * @since API Level 16
      */
     @NonNull
     public UiSelector textContains(@NonNull String text) {
@@ -184,7 +173,6 @@
      *
      * @param className Value to match
      * @return UiSelector with the specified search criteria
-     * @since API Level 16
      */
     @NonNull
     public UiSelector className(@NonNull String className) {
@@ -200,7 +188,6 @@
      *
      * @param regex a regular expression
      * @return UiSelector with the specified search criteria
-     * @since API Level 17
      */
     @NonNull
     public UiSelector classNameMatches(@NonNull String regex) {
@@ -216,7 +203,6 @@
      *
      * @param type type
      * @return UiSelector with the specified search criteria
-     * @since API Level 17
      */
     @NonNull
     public <T> UiSelector className(@NonNull Class<T> type) {
@@ -241,7 +227,6 @@
      *
      * @param desc Value to match
      * @return UiSelector with the specified search criteria
-     * @since API Level 16
      */
     @NonNull
     public UiSelector description(@NonNull String desc) {
@@ -264,7 +249,6 @@
      *
      * @param regex a regular expression
      * @return UiSelector with the specified search criteria
-     * @since API Level 17
      */
     @NonNull
     public UiSelector descriptionMatches(@NonNull String regex) {
@@ -289,7 +273,6 @@
      *
      * @param desc Value to match
      * @return UiSelector with the specified search criteria
-     * @since API Level 16
      */
     @NonNull
     public UiSelector descriptionStartsWith(@NonNull String desc) {
@@ -314,7 +297,6 @@
      *
      * @param desc Value to match
      * @return UiSelector with the specified search criteria
-     * @since API Level 16
      */
     @NonNull
     public UiSelector descriptionContains(@NonNull String desc) {
@@ -329,7 +311,6 @@
      *
      * @param id Value to match
      * @return UiSelector with the specified search criteria
-     * @since API Level 18
      */
     @NonNull
     public UiSelector resourceId(@NonNull String id) {
@@ -345,7 +326,6 @@
      *
      * @param regex a regular expression
      * @return UiSelector with the specified search criteria
-     * @since API Level 18
      */
     @NonNull
     public UiSelector resourceIdMatches(@NonNull String regex) {
@@ -367,7 +347,6 @@
      *
      * @param index Value to match
      * @return UiSelector with the specified search criteria
-     * @since API Level 16
      */
     @NonNull
     public UiSelector index(final int index) {
@@ -394,7 +373,6 @@
      *
      * @param instance Value to match
      * @return UiSelector with the specified search criteria
-     * @since API Level 16
      */
     @NonNull
     public UiSelector instance(final int instance) {
@@ -414,7 +392,6 @@
      *
      * @param val Value to match
      * @return UiSelector with the specified search criteria
-     * @since API Level 16
      */
     @NonNull
     public UiSelector enabled(boolean val) {
@@ -434,7 +411,6 @@
      *
      * @param val Value to match
      * @return UiSelector with the specified search criteria
-     * @since API Level 16
      */
     @NonNull
     public UiSelector focused(boolean val) {
@@ -454,7 +430,6 @@
      *
      * @param val Value to match
      * @return UiSelector with the specified search criteria
-     * @since API Level 16
      */
     @NonNull
     public UiSelector focusable(boolean val) {
@@ -474,7 +449,6 @@
      *
      * @param val Value to match
      * @return UiSelector with the specified search criteria
-     * @since API Level 16
      */
     @NonNull
     public UiSelector scrollable(boolean val) {
@@ -495,7 +469,6 @@
      *
      * @param val Value to match
      * @return UiSelector with the specified search criteria
-     * @since API Level 16
      */
     @NonNull
     public UiSelector selected(boolean val) {
@@ -516,7 +489,6 @@
      *
      * @param val Value to match
      * @return UiSelector with the specified search criteria
-     * @since API Level 16
      */
     @NonNull
     public UiSelector checked(boolean val) {
@@ -536,7 +508,6 @@
      *
      * @param val Value to match
      * @return UiSelector with the specified search criteria
-     * @since API Level 16
      */
     @NonNull
     public UiSelector clickable(boolean val) {
@@ -556,7 +527,6 @@
      *
      * @param val Value to match
      * @return UiSelector with the specified search criteria
-     * @since API Level 18
      */
     @NonNull
     public UiSelector checkable(boolean val) {
@@ -576,7 +546,6 @@
      *
      * @param val Value to match
      * @return UiSelector with the specified search criteria
-     * @since API Level 17
      */
     @NonNull
     public UiSelector longClickable(boolean val) {
@@ -591,7 +560,6 @@
      *
      * @param selector
      * @return UiSelector with this added search criterion
-     * @since API Level 16
      */
     @NonNull
     public UiSelector childSelector(@NonNull UiSelector selector) {
@@ -618,7 +586,6 @@
      *
      * @param selector
      * @return UiSelector with this added search criterion
-     * @since API Level 16
      */
     @NonNull
     public UiSelector fromParent(@NonNull UiSelector selector) {
@@ -634,7 +601,6 @@
      *
      * @param name Value to match
      * @return UiSelector with the specified search criteria
-     * @since API Level 16
      */
     @NonNull
     public UiSelector packageName(@NonNull String name) {
@@ -650,7 +616,6 @@
      *
      * @param regex a regular expression
      * @return UiSelector with the specified search criteria
-     * @since API Level 17
      */
     @NonNull
     public UiSelector packageNameMatches(@NonNull String regex) {
diff --git a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiWatcher.java b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiWatcher.java
index 31c81d3..ed07f0c 100644
--- a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiWatcher.java
+++ b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiWatcher.java
@@ -22,7 +22,6 @@
  * invoke checkForCondition() only when a regular API call is in retry mode because it is unable
  * to locate its selector yet. Only during this time, the watchers are invoked to check if there is
  * something else unexpected on the screen.
- * @since API Level 16
  */
 public interface UiWatcher {
 
@@ -43,7 +42,6 @@
      * currently under test.
      *
      * @return true to indicate a matched condition or false for nothing was matched
-     * @since API Level 16
      */
     public boolean checkForCondition();
 }
diff --git a/wear/compose/compose-foundation/api/1.1.0-beta01.txt b/wear/compose/compose-foundation/api/1.1.0-beta01.txt
new file mode 100644
index 0000000..4d7713c
--- /dev/null
+++ b/wear/compose/compose-foundation/api/1.1.0-beta01.txt
@@ -0,0 +1,177 @@
+// Signature format: 4.0
+package androidx.wear.compose.foundation {
+
+  @kotlin.jvm.JvmInline public final value class AnchorType {
+    field public static final androidx.wear.compose.foundation.AnchorType.Companion Companion;
+  }
+
+  public static final class AnchorType.Companion {
+    method public float getCenter();
+    method public float getEnd();
+    method public float getStart();
+    property public final float Center;
+    property public final float End;
+    property public final float Start;
+  }
+
+  @androidx.compose.runtime.Stable public interface ArcPaddingValues {
+    method public float calculateAfterPadding(androidx.compose.ui.unit.LayoutDirection layoutDirection, int angularDirection);
+    method public float calculateBeforePadding(androidx.compose.ui.unit.LayoutDirection layoutDirection, int angularDirection);
+    method public float calculateInnerPadding(int radialDirection);
+    method public float calculateOuterPadding(int radialDirection);
+  }
+
+  public final class BasicCurvedTextKt {
+    method public static void basicCurvedText(androidx.wear.compose.foundation.CurvedScope, String text, optional androidx.wear.compose.foundation.CurvedModifier modifier, optional androidx.wear.compose.foundation.CurvedDirection.Angular? angularDirection, optional int overflow, optional kotlin.jvm.functions.Function0<androidx.wear.compose.foundation.CurvedTextStyle> style);
+    method public static void basicCurvedText(androidx.wear.compose.foundation.CurvedScope, String text, androidx.wear.compose.foundation.CurvedTextStyle style, optional androidx.wear.compose.foundation.CurvedModifier modifier, optional androidx.wear.compose.foundation.CurvedDirection.Angular? angularDirection, optional int overflow);
+  }
+
+  public interface CurvedAlignment {
+  }
+
+  @kotlin.jvm.JvmInline public static final value class CurvedAlignment.Angular {
+    field public static final androidx.wear.compose.foundation.CurvedAlignment.Angular.Companion Companion;
+  }
+
+  public static final class CurvedAlignment.Angular.Companion {
+    method public float Custom(float ratio);
+    method public float getCenter();
+    method public float getEnd();
+    method public float getStart();
+    property public final float Center;
+    property public final float End;
+    property public final float Start;
+  }
+
+  @kotlin.jvm.JvmInline public static final value class CurvedAlignment.Radial {
+    field public static final androidx.wear.compose.foundation.CurvedAlignment.Radial.Companion Companion;
+  }
+
+  public static final class CurvedAlignment.Radial.Companion {
+    method public float Custom(float ratio);
+    method public float getCenter();
+    method public float getInner();
+    method public float getOuter();
+    property public final float Center;
+    property public final float Inner;
+    property public final float Outer;
+  }
+
+  public final class CurvedColumnKt {
+    method public static void curvedColumn(androidx.wear.compose.foundation.CurvedScope, optional androidx.wear.compose.foundation.CurvedModifier modifier, optional androidx.wear.compose.foundation.CurvedDirection.Radial? radialDirection, optional androidx.wear.compose.foundation.CurvedAlignment.Angular? angularAlignment, kotlin.jvm.functions.Function1<? super androidx.wear.compose.foundation.CurvedScope,kotlin.Unit> contentBuilder);
+  }
+
+  public final class CurvedComposableKt {
+    method public static void curvedComposable(androidx.wear.compose.foundation.CurvedScope, optional androidx.wear.compose.foundation.CurvedModifier modifier, optional float radialAlignment, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+  }
+
+  public interface CurvedDirection {
+  }
+
+  @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public static final value class CurvedDirection.Angular {
+    field public static final androidx.wear.compose.foundation.CurvedDirection.Angular.Companion Companion;
+  }
+
+  public static final class CurvedDirection.Angular.Companion {
+    method public int getClockwise();
+    method public int getCounterClockwise();
+    method public int getNormal();
+    method public int getReversed();
+    property public final int Clockwise;
+    property public final int CounterClockwise;
+    property public final int Normal;
+    property public final int Reversed;
+  }
+
+  @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public static final value class CurvedDirection.Radial {
+    field public static final androidx.wear.compose.foundation.CurvedDirection.Radial.Companion Companion;
+  }
+
+  public static final class CurvedDirection.Radial.Companion {
+    method public int getInsideOut();
+    method public int getOutsideIn();
+    property public final int InsideOut;
+    property public final int OutsideIn;
+  }
+
+  public final class CurvedDrawKt {
+    method public static androidx.wear.compose.foundation.CurvedModifier angularGradientBackground(androidx.wear.compose.foundation.CurvedModifier, kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional int cap);
+    method public static androidx.wear.compose.foundation.CurvedModifier angularGradientBackground(androidx.wear.compose.foundation.CurvedModifier, java.util.List<androidx.compose.ui.graphics.Color> colors, optional int cap);
+    method public static androidx.wear.compose.foundation.CurvedModifier background(androidx.wear.compose.foundation.CurvedModifier, long color, optional int cap);
+    method public static androidx.wear.compose.foundation.CurvedModifier radialGradientBackground(androidx.wear.compose.foundation.CurvedModifier, kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional int cap);
+    method public static androidx.wear.compose.foundation.CurvedModifier radialGradientBackground(androidx.wear.compose.foundation.CurvedModifier, java.util.List<androidx.compose.ui.graphics.Color> colors, optional int cap);
+  }
+
+  public final class CurvedLayoutKt {
+    method @androidx.compose.runtime.Composable public static void CurvedLayout(optional androidx.compose.ui.Modifier modifier, optional float anchor, optional float anchorType, optional androidx.wear.compose.foundation.CurvedAlignment.Radial? radialAlignment, optional int angularDirection, kotlin.jvm.functions.Function1<? super androidx.wear.compose.foundation.CurvedScope,kotlin.Unit> contentBuilder);
+  }
+
+  @androidx.compose.runtime.Stable public sealed interface CurvedModifier {
+    method public default infix androidx.wear.compose.foundation.CurvedModifier then(androidx.wear.compose.foundation.CurvedModifier other);
+    field public static final androidx.wear.compose.foundation.CurvedModifier.Companion Companion;
+  }
+
+  public static final class CurvedModifier.Companion implements androidx.wear.compose.foundation.CurvedModifier {
+  }
+
+  public final class CurvedModifierKt {
+  }
+
+  public final class CurvedPaddingKt {
+    method public static androidx.wear.compose.foundation.ArcPaddingValues ArcPaddingValues(optional float outer, optional float inner, optional float before, optional float after);
+    method public static androidx.wear.compose.foundation.ArcPaddingValues ArcPaddingValues(float all);
+    method public static androidx.wear.compose.foundation.ArcPaddingValues ArcPaddingValues(optional float radial, optional float angular);
+    method public static androidx.wear.compose.foundation.CurvedModifier padding(androidx.wear.compose.foundation.CurvedModifier, androidx.wear.compose.foundation.ArcPaddingValues paddingValues);
+    method public static androidx.wear.compose.foundation.CurvedModifier padding(androidx.wear.compose.foundation.CurvedModifier, float outer, float inner, float before, float after);
+    method public static androidx.wear.compose.foundation.CurvedModifier padding(androidx.wear.compose.foundation.CurvedModifier, optional float radial, optional float angular);
+    method public static androidx.wear.compose.foundation.CurvedModifier padding(androidx.wear.compose.foundation.CurvedModifier, optional float all);
+  }
+
+  public final class CurvedParentDataKt {
+    method public static androidx.wear.compose.foundation.CurvedModifier parentDataModifier(androidx.wear.compose.foundation.CurvedModifier, kotlin.jvm.functions.Function1<java.lang.Object,?> modifyParentData);
+    method public static androidx.wear.compose.foundation.CurvedModifier weight(androidx.wear.compose.foundation.CurvedModifier, float weight);
+  }
+
+  public final class CurvedRowKt {
+    method public static void curvedRow(androidx.wear.compose.foundation.CurvedScope, optional androidx.wear.compose.foundation.CurvedModifier modifier, optional androidx.wear.compose.foundation.CurvedAlignment.Radial? radialAlignment, optional androidx.wear.compose.foundation.CurvedDirection.Angular? angularDirection, kotlin.jvm.functions.Function1<? super androidx.wear.compose.foundation.CurvedScope,kotlin.Unit> contentBuilder);
+  }
+
+  @androidx.compose.foundation.layout.LayoutScopeMarker public final class CurvedScope {
+  }
+
+  public final class CurvedSizeKt {
+    method public static androidx.wear.compose.foundation.CurvedModifier angularSize(androidx.wear.compose.foundation.CurvedModifier, float sweepDegrees);
+    method public static androidx.wear.compose.foundation.CurvedModifier radialSize(androidx.wear.compose.foundation.CurvedModifier, float thickness);
+    method public static androidx.wear.compose.foundation.CurvedModifier size(androidx.wear.compose.foundation.CurvedModifier, float sweepDegrees, float thickness);
+    method public static androidx.wear.compose.foundation.CurvedModifier sizeIn(androidx.wear.compose.foundation.CurvedModifier, optional float minSweepDegrees, optional float maxSweepDegrees, optional float minThickness, optional float maxThickness);
+  }
+
+  public final class CurvedTextStyle {
+    ctor public CurvedTextStyle(optional long background, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis);
+    ctor public CurvedTextStyle(androidx.compose.ui.text.TextStyle style);
+    ctor @Deprecated public CurvedTextStyle(optional long background, optional long color, optional long fontSize);
+    method @Deprecated public androidx.wear.compose.foundation.CurvedTextStyle copy(optional long background, optional long color, optional long fontSize);
+    method public androidx.wear.compose.foundation.CurvedTextStyle copy(optional long background, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis);
+    method public long getBackground();
+    method public long getColor();
+    method public androidx.compose.ui.text.font.FontFamily? getFontFamily();
+    method public long getFontSize();
+    method public androidx.compose.ui.text.font.FontStyle? getFontStyle();
+    method public androidx.compose.ui.text.font.FontSynthesis? getFontSynthesis();
+    method public androidx.compose.ui.text.font.FontWeight? getFontWeight();
+    method public androidx.wear.compose.foundation.CurvedTextStyle merge(optional androidx.wear.compose.foundation.CurvedTextStyle? other);
+    method public operator androidx.wear.compose.foundation.CurvedTextStyle plus(androidx.wear.compose.foundation.CurvedTextStyle other);
+    property public final long background;
+    property public final long color;
+    property public final androidx.compose.ui.text.font.FontFamily? fontFamily;
+    property public final long fontSize;
+    property public final androidx.compose.ui.text.font.FontStyle? fontStyle;
+    property public final androidx.compose.ui.text.font.FontSynthesis? fontSynthesis;
+    property public final androidx.compose.ui.text.font.FontWeight? fontWeight;
+  }
+
+  public final class CurvedTextStyleKt {
+  }
+
+}
+
diff --git a/wear/compose/compose-foundation/api/public_plus_experimental_1.1.0-beta01.txt b/wear/compose/compose-foundation/api/public_plus_experimental_1.1.0-beta01.txt
new file mode 100644
index 0000000..4d7713c
--- /dev/null
+++ b/wear/compose/compose-foundation/api/public_plus_experimental_1.1.0-beta01.txt
@@ -0,0 +1,177 @@
+// Signature format: 4.0
+package androidx.wear.compose.foundation {
+
+  @kotlin.jvm.JvmInline public final value class AnchorType {
+    field public static final androidx.wear.compose.foundation.AnchorType.Companion Companion;
+  }
+
+  public static final class AnchorType.Companion {
+    method public float getCenter();
+    method public float getEnd();
+    method public float getStart();
+    property public final float Center;
+    property public final float End;
+    property public final float Start;
+  }
+
+  @androidx.compose.runtime.Stable public interface ArcPaddingValues {
+    method public float calculateAfterPadding(androidx.compose.ui.unit.LayoutDirection layoutDirection, int angularDirection);
+    method public float calculateBeforePadding(androidx.compose.ui.unit.LayoutDirection layoutDirection, int angularDirection);
+    method public float calculateInnerPadding(int radialDirection);
+    method public float calculateOuterPadding(int radialDirection);
+  }
+
+  public final class BasicCurvedTextKt {
+    method public static void basicCurvedText(androidx.wear.compose.foundation.CurvedScope, String text, optional androidx.wear.compose.foundation.CurvedModifier modifier, optional androidx.wear.compose.foundation.CurvedDirection.Angular? angularDirection, optional int overflow, optional kotlin.jvm.functions.Function0<androidx.wear.compose.foundation.CurvedTextStyle> style);
+    method public static void basicCurvedText(androidx.wear.compose.foundation.CurvedScope, String text, androidx.wear.compose.foundation.CurvedTextStyle style, optional androidx.wear.compose.foundation.CurvedModifier modifier, optional androidx.wear.compose.foundation.CurvedDirection.Angular? angularDirection, optional int overflow);
+  }
+
+  public interface CurvedAlignment {
+  }
+
+  @kotlin.jvm.JvmInline public static final value class CurvedAlignment.Angular {
+    field public static final androidx.wear.compose.foundation.CurvedAlignment.Angular.Companion Companion;
+  }
+
+  public static final class CurvedAlignment.Angular.Companion {
+    method public float Custom(float ratio);
+    method public float getCenter();
+    method public float getEnd();
+    method public float getStart();
+    property public final float Center;
+    property public final float End;
+    property public final float Start;
+  }
+
+  @kotlin.jvm.JvmInline public static final value class CurvedAlignment.Radial {
+    field public static final androidx.wear.compose.foundation.CurvedAlignment.Radial.Companion Companion;
+  }
+
+  public static final class CurvedAlignment.Radial.Companion {
+    method public float Custom(float ratio);
+    method public float getCenter();
+    method public float getInner();
+    method public float getOuter();
+    property public final float Center;
+    property public final float Inner;
+    property public final float Outer;
+  }
+
+  public final class CurvedColumnKt {
+    method public static void curvedColumn(androidx.wear.compose.foundation.CurvedScope, optional androidx.wear.compose.foundation.CurvedModifier modifier, optional androidx.wear.compose.foundation.CurvedDirection.Radial? radialDirection, optional androidx.wear.compose.foundation.CurvedAlignment.Angular? angularAlignment, kotlin.jvm.functions.Function1<? super androidx.wear.compose.foundation.CurvedScope,kotlin.Unit> contentBuilder);
+  }
+
+  public final class CurvedComposableKt {
+    method public static void curvedComposable(androidx.wear.compose.foundation.CurvedScope, optional androidx.wear.compose.foundation.CurvedModifier modifier, optional float radialAlignment, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+  }
+
+  public interface CurvedDirection {
+  }
+
+  @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public static final value class CurvedDirection.Angular {
+    field public static final androidx.wear.compose.foundation.CurvedDirection.Angular.Companion Companion;
+  }
+
+  public static final class CurvedDirection.Angular.Companion {
+    method public int getClockwise();
+    method public int getCounterClockwise();
+    method public int getNormal();
+    method public int getReversed();
+    property public final int Clockwise;
+    property public final int CounterClockwise;
+    property public final int Normal;
+    property public final int Reversed;
+  }
+
+  @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public static final value class CurvedDirection.Radial {
+    field public static final androidx.wear.compose.foundation.CurvedDirection.Radial.Companion Companion;
+  }
+
+  public static final class CurvedDirection.Radial.Companion {
+    method public int getInsideOut();
+    method public int getOutsideIn();
+    property public final int InsideOut;
+    property public final int OutsideIn;
+  }
+
+  public final class CurvedDrawKt {
+    method public static androidx.wear.compose.foundation.CurvedModifier angularGradientBackground(androidx.wear.compose.foundation.CurvedModifier, kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional int cap);
+    method public static androidx.wear.compose.foundation.CurvedModifier angularGradientBackground(androidx.wear.compose.foundation.CurvedModifier, java.util.List<androidx.compose.ui.graphics.Color> colors, optional int cap);
+    method public static androidx.wear.compose.foundation.CurvedModifier background(androidx.wear.compose.foundation.CurvedModifier, long color, optional int cap);
+    method public static androidx.wear.compose.foundation.CurvedModifier radialGradientBackground(androidx.wear.compose.foundation.CurvedModifier, kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional int cap);
+    method public static androidx.wear.compose.foundation.CurvedModifier radialGradientBackground(androidx.wear.compose.foundation.CurvedModifier, java.util.List<androidx.compose.ui.graphics.Color> colors, optional int cap);
+  }
+
+  public final class CurvedLayoutKt {
+    method @androidx.compose.runtime.Composable public static void CurvedLayout(optional androidx.compose.ui.Modifier modifier, optional float anchor, optional float anchorType, optional androidx.wear.compose.foundation.CurvedAlignment.Radial? radialAlignment, optional int angularDirection, kotlin.jvm.functions.Function1<? super androidx.wear.compose.foundation.CurvedScope,kotlin.Unit> contentBuilder);
+  }
+
+  @androidx.compose.runtime.Stable public sealed interface CurvedModifier {
+    method public default infix androidx.wear.compose.foundation.CurvedModifier then(androidx.wear.compose.foundation.CurvedModifier other);
+    field public static final androidx.wear.compose.foundation.CurvedModifier.Companion Companion;
+  }
+
+  public static final class CurvedModifier.Companion implements androidx.wear.compose.foundation.CurvedModifier {
+  }
+
+  public final class CurvedModifierKt {
+  }
+
+  public final class CurvedPaddingKt {
+    method public static androidx.wear.compose.foundation.ArcPaddingValues ArcPaddingValues(optional float outer, optional float inner, optional float before, optional float after);
+    method public static androidx.wear.compose.foundation.ArcPaddingValues ArcPaddingValues(float all);
+    method public static androidx.wear.compose.foundation.ArcPaddingValues ArcPaddingValues(optional float radial, optional float angular);
+    method public static androidx.wear.compose.foundation.CurvedModifier padding(androidx.wear.compose.foundation.CurvedModifier, androidx.wear.compose.foundation.ArcPaddingValues paddingValues);
+    method public static androidx.wear.compose.foundation.CurvedModifier padding(androidx.wear.compose.foundation.CurvedModifier, float outer, float inner, float before, float after);
+    method public static androidx.wear.compose.foundation.CurvedModifier padding(androidx.wear.compose.foundation.CurvedModifier, optional float radial, optional float angular);
+    method public static androidx.wear.compose.foundation.CurvedModifier padding(androidx.wear.compose.foundation.CurvedModifier, optional float all);
+  }
+
+  public final class CurvedParentDataKt {
+    method public static androidx.wear.compose.foundation.CurvedModifier parentDataModifier(androidx.wear.compose.foundation.CurvedModifier, kotlin.jvm.functions.Function1<java.lang.Object,?> modifyParentData);
+    method public static androidx.wear.compose.foundation.CurvedModifier weight(androidx.wear.compose.foundation.CurvedModifier, float weight);
+  }
+
+  public final class CurvedRowKt {
+    method public static void curvedRow(androidx.wear.compose.foundation.CurvedScope, optional androidx.wear.compose.foundation.CurvedModifier modifier, optional androidx.wear.compose.foundation.CurvedAlignment.Radial? radialAlignment, optional androidx.wear.compose.foundation.CurvedDirection.Angular? angularDirection, kotlin.jvm.functions.Function1<? super androidx.wear.compose.foundation.CurvedScope,kotlin.Unit> contentBuilder);
+  }
+
+  @androidx.compose.foundation.layout.LayoutScopeMarker public final class CurvedScope {
+  }
+
+  public final class CurvedSizeKt {
+    method public static androidx.wear.compose.foundation.CurvedModifier angularSize(androidx.wear.compose.foundation.CurvedModifier, float sweepDegrees);
+    method public static androidx.wear.compose.foundation.CurvedModifier radialSize(androidx.wear.compose.foundation.CurvedModifier, float thickness);
+    method public static androidx.wear.compose.foundation.CurvedModifier size(androidx.wear.compose.foundation.CurvedModifier, float sweepDegrees, float thickness);
+    method public static androidx.wear.compose.foundation.CurvedModifier sizeIn(androidx.wear.compose.foundation.CurvedModifier, optional float minSweepDegrees, optional float maxSweepDegrees, optional float minThickness, optional float maxThickness);
+  }
+
+  public final class CurvedTextStyle {
+    ctor public CurvedTextStyle(optional long background, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis);
+    ctor public CurvedTextStyle(androidx.compose.ui.text.TextStyle style);
+    ctor @Deprecated public CurvedTextStyle(optional long background, optional long color, optional long fontSize);
+    method @Deprecated public androidx.wear.compose.foundation.CurvedTextStyle copy(optional long background, optional long color, optional long fontSize);
+    method public androidx.wear.compose.foundation.CurvedTextStyle copy(optional long background, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis);
+    method public long getBackground();
+    method public long getColor();
+    method public androidx.compose.ui.text.font.FontFamily? getFontFamily();
+    method public long getFontSize();
+    method public androidx.compose.ui.text.font.FontStyle? getFontStyle();
+    method public androidx.compose.ui.text.font.FontSynthesis? getFontSynthesis();
+    method public androidx.compose.ui.text.font.FontWeight? getFontWeight();
+    method public androidx.wear.compose.foundation.CurvedTextStyle merge(optional androidx.wear.compose.foundation.CurvedTextStyle? other);
+    method public operator androidx.wear.compose.foundation.CurvedTextStyle plus(androidx.wear.compose.foundation.CurvedTextStyle other);
+    property public final long background;
+    property public final long color;
+    property public final androidx.compose.ui.text.font.FontFamily? fontFamily;
+    property public final long fontSize;
+    property public final androidx.compose.ui.text.font.FontStyle? fontStyle;
+    property public final androidx.compose.ui.text.font.FontSynthesis? fontSynthesis;
+    property public final androidx.compose.ui.text.font.FontWeight? fontWeight;
+  }
+
+  public final class CurvedTextStyleKt {
+  }
+
+}
+
diff --git a/wear/compose/compose-foundation/api/res-1.1.0-beta01.txt b/wear/compose/compose-foundation/api/res-1.1.0-beta01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/wear/compose/compose-foundation/api/res-1.1.0-beta01.txt
diff --git a/wear/compose/compose-foundation/api/restricted_1.1.0-beta01.txt b/wear/compose/compose-foundation/api/restricted_1.1.0-beta01.txt
new file mode 100644
index 0000000..4d7713c
--- /dev/null
+++ b/wear/compose/compose-foundation/api/restricted_1.1.0-beta01.txt
@@ -0,0 +1,177 @@
+// Signature format: 4.0
+package androidx.wear.compose.foundation {
+
+  @kotlin.jvm.JvmInline public final value class AnchorType {
+    field public static final androidx.wear.compose.foundation.AnchorType.Companion Companion;
+  }
+
+  public static final class AnchorType.Companion {
+    method public float getCenter();
+    method public float getEnd();
+    method public float getStart();
+    property public final float Center;
+    property public final float End;
+    property public final float Start;
+  }
+
+  @androidx.compose.runtime.Stable public interface ArcPaddingValues {
+    method public float calculateAfterPadding(androidx.compose.ui.unit.LayoutDirection layoutDirection, int angularDirection);
+    method public float calculateBeforePadding(androidx.compose.ui.unit.LayoutDirection layoutDirection, int angularDirection);
+    method public float calculateInnerPadding(int radialDirection);
+    method public float calculateOuterPadding(int radialDirection);
+  }
+
+  public final class BasicCurvedTextKt {
+    method public static void basicCurvedText(androidx.wear.compose.foundation.CurvedScope, String text, optional androidx.wear.compose.foundation.CurvedModifier modifier, optional androidx.wear.compose.foundation.CurvedDirection.Angular? angularDirection, optional int overflow, optional kotlin.jvm.functions.Function0<androidx.wear.compose.foundation.CurvedTextStyle> style);
+    method public static void basicCurvedText(androidx.wear.compose.foundation.CurvedScope, String text, androidx.wear.compose.foundation.CurvedTextStyle style, optional androidx.wear.compose.foundation.CurvedModifier modifier, optional androidx.wear.compose.foundation.CurvedDirection.Angular? angularDirection, optional int overflow);
+  }
+
+  public interface CurvedAlignment {
+  }
+
+  @kotlin.jvm.JvmInline public static final value class CurvedAlignment.Angular {
+    field public static final androidx.wear.compose.foundation.CurvedAlignment.Angular.Companion Companion;
+  }
+
+  public static final class CurvedAlignment.Angular.Companion {
+    method public float Custom(float ratio);
+    method public float getCenter();
+    method public float getEnd();
+    method public float getStart();
+    property public final float Center;
+    property public final float End;
+    property public final float Start;
+  }
+
+  @kotlin.jvm.JvmInline public static final value class CurvedAlignment.Radial {
+    field public static final androidx.wear.compose.foundation.CurvedAlignment.Radial.Companion Companion;
+  }
+
+  public static final class CurvedAlignment.Radial.Companion {
+    method public float Custom(float ratio);
+    method public float getCenter();
+    method public float getInner();
+    method public float getOuter();
+    property public final float Center;
+    property public final float Inner;
+    property public final float Outer;
+  }
+
+  public final class CurvedColumnKt {
+    method public static void curvedColumn(androidx.wear.compose.foundation.CurvedScope, optional androidx.wear.compose.foundation.CurvedModifier modifier, optional androidx.wear.compose.foundation.CurvedDirection.Radial? radialDirection, optional androidx.wear.compose.foundation.CurvedAlignment.Angular? angularAlignment, kotlin.jvm.functions.Function1<? super androidx.wear.compose.foundation.CurvedScope,kotlin.Unit> contentBuilder);
+  }
+
+  public final class CurvedComposableKt {
+    method public static void curvedComposable(androidx.wear.compose.foundation.CurvedScope, optional androidx.wear.compose.foundation.CurvedModifier modifier, optional float radialAlignment, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+  }
+
+  public interface CurvedDirection {
+  }
+
+  @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public static final value class CurvedDirection.Angular {
+    field public static final androidx.wear.compose.foundation.CurvedDirection.Angular.Companion Companion;
+  }
+
+  public static final class CurvedDirection.Angular.Companion {
+    method public int getClockwise();
+    method public int getCounterClockwise();
+    method public int getNormal();
+    method public int getReversed();
+    property public final int Clockwise;
+    property public final int CounterClockwise;
+    property public final int Normal;
+    property public final int Reversed;
+  }
+
+  @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public static final value class CurvedDirection.Radial {
+    field public static final androidx.wear.compose.foundation.CurvedDirection.Radial.Companion Companion;
+  }
+
+  public static final class CurvedDirection.Radial.Companion {
+    method public int getInsideOut();
+    method public int getOutsideIn();
+    property public final int InsideOut;
+    property public final int OutsideIn;
+  }
+
+  public final class CurvedDrawKt {
+    method public static androidx.wear.compose.foundation.CurvedModifier angularGradientBackground(androidx.wear.compose.foundation.CurvedModifier, kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional int cap);
+    method public static androidx.wear.compose.foundation.CurvedModifier angularGradientBackground(androidx.wear.compose.foundation.CurvedModifier, java.util.List<androidx.compose.ui.graphics.Color> colors, optional int cap);
+    method public static androidx.wear.compose.foundation.CurvedModifier background(androidx.wear.compose.foundation.CurvedModifier, long color, optional int cap);
+    method public static androidx.wear.compose.foundation.CurvedModifier radialGradientBackground(androidx.wear.compose.foundation.CurvedModifier, kotlin.Pair<java.lang.Float,androidx.compose.ui.graphics.Color>![] colorStops, optional int cap);
+    method public static androidx.wear.compose.foundation.CurvedModifier radialGradientBackground(androidx.wear.compose.foundation.CurvedModifier, java.util.List<androidx.compose.ui.graphics.Color> colors, optional int cap);
+  }
+
+  public final class CurvedLayoutKt {
+    method @androidx.compose.runtime.Composable public static void CurvedLayout(optional androidx.compose.ui.Modifier modifier, optional float anchor, optional float anchorType, optional androidx.wear.compose.foundation.CurvedAlignment.Radial? radialAlignment, optional int angularDirection, kotlin.jvm.functions.Function1<? super androidx.wear.compose.foundation.CurvedScope,kotlin.Unit> contentBuilder);
+  }
+
+  @androidx.compose.runtime.Stable public sealed interface CurvedModifier {
+    method public default infix androidx.wear.compose.foundation.CurvedModifier then(androidx.wear.compose.foundation.CurvedModifier other);
+    field public static final androidx.wear.compose.foundation.CurvedModifier.Companion Companion;
+  }
+
+  public static final class CurvedModifier.Companion implements androidx.wear.compose.foundation.CurvedModifier {
+  }
+
+  public final class CurvedModifierKt {
+  }
+
+  public final class CurvedPaddingKt {
+    method public static androidx.wear.compose.foundation.ArcPaddingValues ArcPaddingValues(optional float outer, optional float inner, optional float before, optional float after);
+    method public static androidx.wear.compose.foundation.ArcPaddingValues ArcPaddingValues(float all);
+    method public static androidx.wear.compose.foundation.ArcPaddingValues ArcPaddingValues(optional float radial, optional float angular);
+    method public static androidx.wear.compose.foundation.CurvedModifier padding(androidx.wear.compose.foundation.CurvedModifier, androidx.wear.compose.foundation.ArcPaddingValues paddingValues);
+    method public static androidx.wear.compose.foundation.CurvedModifier padding(androidx.wear.compose.foundation.CurvedModifier, float outer, float inner, float before, float after);
+    method public static androidx.wear.compose.foundation.CurvedModifier padding(androidx.wear.compose.foundation.CurvedModifier, optional float radial, optional float angular);
+    method public static androidx.wear.compose.foundation.CurvedModifier padding(androidx.wear.compose.foundation.CurvedModifier, optional float all);
+  }
+
+  public final class CurvedParentDataKt {
+    method public static androidx.wear.compose.foundation.CurvedModifier parentDataModifier(androidx.wear.compose.foundation.CurvedModifier, kotlin.jvm.functions.Function1<java.lang.Object,?> modifyParentData);
+    method public static androidx.wear.compose.foundation.CurvedModifier weight(androidx.wear.compose.foundation.CurvedModifier, float weight);
+  }
+
+  public final class CurvedRowKt {
+    method public static void curvedRow(androidx.wear.compose.foundation.CurvedScope, optional androidx.wear.compose.foundation.CurvedModifier modifier, optional androidx.wear.compose.foundation.CurvedAlignment.Radial? radialAlignment, optional androidx.wear.compose.foundation.CurvedDirection.Angular? angularDirection, kotlin.jvm.functions.Function1<? super androidx.wear.compose.foundation.CurvedScope,kotlin.Unit> contentBuilder);
+  }
+
+  @androidx.compose.foundation.layout.LayoutScopeMarker public final class CurvedScope {
+  }
+
+  public final class CurvedSizeKt {
+    method public static androidx.wear.compose.foundation.CurvedModifier angularSize(androidx.wear.compose.foundation.CurvedModifier, float sweepDegrees);
+    method public static androidx.wear.compose.foundation.CurvedModifier radialSize(androidx.wear.compose.foundation.CurvedModifier, float thickness);
+    method public static androidx.wear.compose.foundation.CurvedModifier size(androidx.wear.compose.foundation.CurvedModifier, float sweepDegrees, float thickness);
+    method public static androidx.wear.compose.foundation.CurvedModifier sizeIn(androidx.wear.compose.foundation.CurvedModifier, optional float minSweepDegrees, optional float maxSweepDegrees, optional float minThickness, optional float maxThickness);
+  }
+
+  public final class CurvedTextStyle {
+    ctor public CurvedTextStyle(optional long background, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis);
+    ctor public CurvedTextStyle(androidx.compose.ui.text.TextStyle style);
+    ctor @Deprecated public CurvedTextStyle(optional long background, optional long color, optional long fontSize);
+    method @Deprecated public androidx.wear.compose.foundation.CurvedTextStyle copy(optional long background, optional long color, optional long fontSize);
+    method public androidx.wear.compose.foundation.CurvedTextStyle copy(optional long background, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis);
+    method public long getBackground();
+    method public long getColor();
+    method public androidx.compose.ui.text.font.FontFamily? getFontFamily();
+    method public long getFontSize();
+    method public androidx.compose.ui.text.font.FontStyle? getFontStyle();
+    method public androidx.compose.ui.text.font.FontSynthesis? getFontSynthesis();
+    method public androidx.compose.ui.text.font.FontWeight? getFontWeight();
+    method public androidx.wear.compose.foundation.CurvedTextStyle merge(optional androidx.wear.compose.foundation.CurvedTextStyle? other);
+    method public operator androidx.wear.compose.foundation.CurvedTextStyle plus(androidx.wear.compose.foundation.CurvedTextStyle other);
+    property public final long background;
+    property public final long color;
+    property public final androidx.compose.ui.text.font.FontFamily? fontFamily;
+    property public final long fontSize;
+    property public final androidx.compose.ui.text.font.FontStyle? fontStyle;
+    property public final androidx.compose.ui.text.font.FontSynthesis? fontSynthesis;
+    property public final androidx.compose.ui.text.font.FontWeight? fontWeight;
+  }
+
+  public final class CurvedTextStyleKt {
+  }
+
+}
+
diff --git a/wear/compose/compose-foundation/build.gradle b/wear/compose/compose-foundation/build.gradle
index dabca07..e793aa9 100644
--- a/wear/compose/compose-foundation/build.gradle
+++ b/wear/compose/compose-foundation/build.gradle
@@ -23,78 +23,34 @@
     id("AndroidXComposePlugin")
 }
 
-AndroidXComposePlugin.applyAndConfigureKotlinPlugin(project)
+// Disable multi-platform.
+AndroidXComposePlugin.applyAndConfigureKotlinPlugin(project, /* isMultiplatformEnabled= */false)
 
 dependencies {
 
-    if(!AndroidXComposePlugin.isMultiplatformEnabled(project)) {
-        api(project(":compose:foundation:foundation"))
-        api(project(":compose:ui:ui"))
-        api(project(":compose:ui:ui-text"))
-        api(project(":compose:runtime:runtime"))
+    api("androidx.compose.foundation:foundation:1.3.0-rc01")
+    api("androidx.compose.ui:ui:1.3.0-rc01")
+    api("androidx.compose.ui:ui-text:1.3.0-rc01")
+    api("androidx.compose.runtime:runtime:1.3.0-rc01")
 
-        implementation(libs.kotlinStdlib)
-        implementation(project(":compose:foundation:foundation-layout"))
-        implementation(project(":compose:ui:ui-util"))
-        implementation("androidx.profileinstaller:profileinstaller:1.2.0")
+    implementation(libs.kotlinStdlib)
+    implementation("androidx.compose.foundation:foundation-layout:1.3.0-rc01")
+    implementation("androidx.compose.ui:ui-util:1.3.0-rc01")
+    implementation("androidx.profileinstaller:profileinstaller:1.2.0")
 
-        testImplementation(libs.testRules)
-        testImplementation(libs.testRunner)
-        testImplementation(libs.junit)
+    testImplementation(libs.testRules)
+    testImplementation(libs.testRunner)
+    testImplementation(libs.junit)
 
-        androidTestImplementation(project(":compose:ui:ui-test"))
-        androidTestImplementation(project(":compose:ui:ui-test-junit4"))
-        androidTestImplementation(project(":compose:test-utils"))
-        androidTestImplementation(libs.testRunner)
-        androidTestImplementation(libs.kotlinTest)
+    androidTestImplementation(project(":compose:ui:ui-test"))
+    androidTestImplementation(project(":compose:ui:ui-test-junit4"))
+    androidTestImplementation(project(":compose:test-utils"))
+    androidTestImplementation(libs.testRunner)
+    androidTestImplementation(libs.kotlinTest)
 
-        samples(project(":wear:compose:compose-foundation-samples"))
-    }
+    samples("androidx.wear.compose:compose-foundation-samples:1.1.0-beta01")
 }
 
-if(AndroidXComposePlugin.isMultiplatformEnabled(project)) {
-    androidXComposeMultiplatform {
-        android()
-        desktop()
-    }
-
-    kotlin {
-        /*
-         * When updating dependencies, make sure to make the an an analogous update in the
-         * corresponding block above
-         */
-        sourceSets {
-            commonMain.dependencies {
-                api(project(":compose:foundation:foundation"))
-                api(project(":compose:ui:ui"))
-                api(project(":compose:ui:ui-text"))
-                api(project(":compose:runtime:runtime"))
-
-                implementation(libs.kotlinStdlib)
-                implementation(project(":compose:foundation:foundation-layout"))
-                implementation(project(":compose:ui:ui-util"))
-            }
-            jvmMain.dependencies {
-                implementation(libs.kotlinStdlib)
-            }
-
-            commonTest.dependencies {
-                implementation(kotlin("test-junit"))
-            }
-            androidAndroidTest.dependencies {
-                implementation(project(":compose:ui:ui-test"))
-                implementation(project(":compose:ui:ui-test-junit4"))
-                implementation(project(":compose:test-utils"))
-                implementation(libs.testRunner)
-            }
-        }
-    }
-    dependencies {
-        samples(project(":wear:compose:compose-foundation-samples"))
-    }
-}
-
-
 android {
     defaultConfig {
         minSdkVersion 25
diff --git a/wear/compose/compose-material/api/1.1.0-beta01.txt b/wear/compose/compose-material/api/1.1.0-beta01.txt
new file mode 100644
index 0000000..7c9473c
--- /dev/null
+++ b/wear/compose/compose-material/api/1.1.0-beta01.txt
@@ -0,0 +1,784 @@
+// Signature format: 4.0
+package androidx.wear.compose.material {
+
+  public final class AnimationKt {
+  }
+
+  @androidx.compose.runtime.Immutable public final class AutoCenteringParams {
+    ctor public AutoCenteringParams(optional int itemIndex, optional int itemOffset);
+  }
+
+  @androidx.compose.runtime.Stable public interface ButtonBorder {
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.foundation.BorderStroke> borderStroke(boolean enabled);
+  }
+
+  @androidx.compose.runtime.Stable public interface ButtonColors {
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> backgroundColor(boolean enabled);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> contentColor(boolean enabled);
+  }
+
+  public final class ButtonDefaults {
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ButtonBorder buttonBorder(optional androidx.compose.foundation.BorderStroke? borderStroke, optional androidx.compose.foundation.BorderStroke? disabledBorderStroke);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ButtonColors buttonColors(optional long backgroundColor, optional long contentColor, optional long disabledBackgroundColor, optional long disabledContentColor);
+    method public float getCompactButtonBackgroundPadding();
+    method public float getDefaultButtonSize();
+    method public float getDefaultIconSize();
+    method public float getExtraSmallButtonSize();
+    method public float getLargeButtonSize();
+    method public float getLargeIconSize();
+    method public float getSmallButtonSize();
+    method public float getSmallIconSize();
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ButtonColors iconButtonColors(optional long contentColor);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ButtonBorder outlinedButtonBorder(optional long borderColor, optional long disabledBorderColor, optional float borderWidth);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ButtonColors outlinedButtonColors(optional long contentColor);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ButtonColors primaryButtonColors(optional long backgroundColor, optional long contentColor);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ButtonColors secondaryButtonColors(optional long backgroundColor, optional long contentColor);
+    property public final float CompactButtonBackgroundPadding;
+    property public final float DefaultButtonSize;
+    property public final float DefaultIconSize;
+    property public final float ExtraSmallButtonSize;
+    property public final float LargeButtonSize;
+    property public final float LargeIconSize;
+    property public final float SmallButtonSize;
+    property public final float SmallIconSize;
+    field public static final androidx.wear.compose.material.ButtonDefaults INSTANCE;
+  }
+
+  public final class ButtonKt {
+    method @androidx.compose.runtime.Composable public static void Button(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ButtonBorder border, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Button(kotlin.jvm.functions.Function0<? extends kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void CompactButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional float backgroundPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ButtonBorder border, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void CompactButton(kotlin.jvm.functions.Function0<? extends kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional float backgroundPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void OutlinedButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ButtonBorder border, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void OutlinedCompactButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional float backgroundPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ButtonBorder border, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+  }
+
+  public final class CardDefaults {
+    method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.painter.Painter cardBackgroundPainter(optional long startBackgroundColor, optional long endBackgroundColor, optional androidx.compose.ui.unit.LayoutDirection gradientDirection);
+    method public float getAppImageSize();
+    method public androidx.compose.foundation.layout.PaddingValues getContentPadding();
+    method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.painter.Painter imageWithScrimBackgroundPainter(androidx.compose.ui.graphics.painter.Painter backgroundImagePainter, optional androidx.compose.ui.graphics.Brush backgroundImageScrimBrush);
+    property public final float AppImageSize;
+    property public final androidx.compose.foundation.layout.PaddingValues ContentPadding;
+    field public static final androidx.wear.compose.material.CardDefaults INSTANCE;
+  }
+
+  public final class CardKt {
+    method @androidx.compose.runtime.Composable public static void AppCard(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> appName, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> time, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? appImage, optional androidx.compose.ui.graphics.painter.Painter backgroundPainter, optional long contentColor, optional long appColor, optional long timeColor, optional long titleColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void Card(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.graphics.painter.Painter backgroundPainter, optional long contentColor, optional boolean enabled, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void TitleCard(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? time, optional androidx.compose.ui.graphics.painter.Painter backgroundPainter, optional long contentColor, optional long titleColor, optional long timeColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
+  }
+
+  @androidx.compose.runtime.Stable public interface CheckboxColors {
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> boxColor(boolean enabled, boolean checked);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> checkmarkColor(boolean enabled, boolean checked);
+  }
+
+  public final class CheckboxDefaults {
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.CheckboxColors colors(optional long checkedBoxColor, optional long checkedCheckmarkColor, optional long uncheckedBoxColor, optional long uncheckedCheckmarkColor);
+    field public static final androidx.wear.compose.material.CheckboxDefaults INSTANCE;
+  }
+
+  @androidx.compose.runtime.Stable public interface ChipBorder {
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.foundation.BorderStroke> borderStroke(boolean enabled);
+  }
+
+  @androidx.compose.runtime.Stable public interface ChipColors {
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.painter.Painter> background(boolean enabled);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> contentColor(boolean enabled);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> iconColor(boolean enabled);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> secondaryContentColor(boolean enabled);
+  }
+
+  public final class ChipDefaults {
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipColors childChipColors(optional long contentColor, optional long secondaryContentColor, optional long iconColor);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipBorder chipBorder(optional androidx.compose.foundation.BorderStroke? borderStroke, optional androidx.compose.foundation.BorderStroke? disabledBorderStroke);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipColors chipColors(optional long backgroundColor, optional long contentColor, optional long secondaryContentColor, optional long iconColor, optional long disabledBackgroundColor, optional long disabledContentColor, optional long disabledSecondaryContentColor, optional long disabledIconColor);
+    method public androidx.compose.foundation.layout.PaddingValues getCompactChipContentPadding();
+    method public androidx.compose.foundation.layout.PaddingValues getContentPadding();
+    method public float getIconSize();
+    method public float getLargeIconSize();
+    method public float getSmallIconSize();
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipColors gradientBackgroundChipColors(optional long startBackgroundColor, optional long endBackgroundColor, optional long contentColor, optional long secondaryContentColor, optional long iconColor, optional androidx.compose.ui.unit.LayoutDirection gradientDirection);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipColors imageBackgroundChipColors(androidx.compose.ui.graphics.painter.Painter backgroundImagePainter, optional androidx.compose.ui.graphics.Brush backgroundImageScrimBrush, optional long contentColor, optional long secondaryContentColor, optional long iconColor);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipBorder outlinedChipBorder(optional long borderColor, optional long disabledBorderColor, optional float borderWidth);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipColors outlinedChipColors(optional long contentColor, optional long secondaryContentColor, optional long iconColor);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipColors primaryChipColors(optional long backgroundColor, optional long contentColor, optional long secondaryContentColor, optional long iconColor);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipColors secondaryChipColors(optional long backgroundColor, optional long contentColor, optional long secondaryContentColor, optional long iconColor);
+    property public final androidx.compose.foundation.layout.PaddingValues CompactChipContentPadding;
+    property public final androidx.compose.foundation.layout.PaddingValues ContentPadding;
+    property public final float IconSize;
+    property public final float LargeIconSize;
+    property public final float SmallIconSize;
+    field public static final androidx.wear.compose.material.ChipDefaults INSTANCE;
+  }
+
+  public final class ChipKt {
+    method @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.wear.compose.material.ChipColors colors, androidx.wear.compose.material.ChipBorder border, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> label, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? secondaryLabel, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ChipBorder border);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function0<? extends kotlin.Unit> onClick, androidx.wear.compose.material.ChipColors colors, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,? extends kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,? extends kotlin.Unit> label, kotlin.jvm.functions.Function0<? extends kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,? extends kotlin.Unit>? secondaryLabel, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding);
+    method @androidx.compose.runtime.Composable public static void CompactChip(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? label, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ChipBorder border);
+    method @Deprecated @androidx.compose.runtime.Composable public static void CompactChip(kotlin.jvm.functions.Function0<? extends kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding);
+    method @androidx.compose.runtime.Composable public static void OutlinedChip(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> label, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? secondaryLabel, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ChipBorder border);
+    method @androidx.compose.runtime.Composable public static void OutlinedCompactChip(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? label, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ChipBorder border);
+  }
+
+  @androidx.compose.runtime.Stable public final class Colors {
+    ctor public Colors(optional long primary, optional long primaryVariant, optional long secondary, optional long secondaryVariant, optional long background, optional long surface, optional long error, optional long onPrimary, optional long onSecondary, optional long onBackground, optional long onSurface, optional long onSurfaceVariant, optional long onError);
+    method public androidx.wear.compose.material.Colors copy(optional long primary, optional long primaryVariant, optional long secondary, optional long secondaryVariant, optional long background, optional long surface, optional long error, optional long onPrimary, optional long onSecondary, optional long onBackground, optional long onSurface, optional long onSurfaceVariant, optional long onError);
+    method public long getBackground();
+    method public long getError();
+    method public long getOnBackground();
+    method public long getOnError();
+    method public long getOnPrimary();
+    method public long getOnSecondary();
+    method public long getOnSurface();
+    method public long getOnSurfaceVariant();
+    method public long getPrimary();
+    method public long getPrimaryVariant();
+    method public long getSecondary();
+    method public long getSecondaryVariant();
+    method public long getSurface();
+    property public final long background;
+    property public final long error;
+    property public final long onBackground;
+    property public final long onError;
+    property public final long onPrimary;
+    property public final long onSecondary;
+    property public final long onSurface;
+    property public final long onSurfaceVariant;
+    property public final long primary;
+    property public final long primaryVariant;
+    property public final long secondary;
+    property public final long secondaryVariant;
+    property public final long surface;
+  }
+
+  public final class ColorsKt {
+    method public static long contentColorFor(androidx.wear.compose.material.Colors, long backgroundColor);
+    method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static long contentColorFor(long backgroundColor);
+  }
+
+  public final class ContentAlpha {
+    method @androidx.compose.runtime.Composable public float getDisabled();
+    method @androidx.compose.runtime.Composable public float getHigh();
+    method @androidx.compose.runtime.Composable public float getMedium();
+    property @androidx.compose.runtime.Composable public final float disabled;
+    property @androidx.compose.runtime.Composable public final float high;
+    property @androidx.compose.runtime.Composable public final float medium;
+    field public static final androidx.wear.compose.material.ContentAlpha INSTANCE;
+  }
+
+  public final class ContentAlphaKt {
+    method public static androidx.compose.runtime.ProvidableCompositionLocal<java.lang.Float> getLocalContentAlpha();
+    property public static final androidx.compose.runtime.ProvidableCompositionLocal<java.lang.Float> LocalContentAlpha;
+  }
+
+  public final class ContentColorKt {
+    method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.graphics.Color> getLocalContentColor();
+    property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.graphics.Color> LocalContentColor;
+  }
+
+  public final class CurvedTextKt {
+    method public static void curvedText(androidx.wear.compose.foundation.CurvedScope, String text, optional androidx.wear.compose.foundation.CurvedModifier modifier, optional long background, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.wear.compose.foundation.CurvedTextStyle? style, optional androidx.wear.compose.foundation.CurvedDirection.Angular? angularDirection, optional int overflow);
+    method @Deprecated public static void curvedText(androidx.wear.compose.foundation.CurvedScope, String text, optional androidx.wear.compose.foundation.CurvedModifier modifier, optional long background, optional long color, optional long fontSize, optional androidx.wear.compose.foundation.CurvedTextStyle? style, optional androidx.wear.compose.foundation.CurvedDirection.Angular? angularDirection, optional int overflow);
+  }
+
+  public final class DefaultTimeSourceKt {
+  }
+
+  public final class HorizontalPageIndicatorKt {
+    method @androidx.compose.runtime.Composable public static void HorizontalPageIndicator(androidx.wear.compose.material.PageIndicatorState pageIndicatorState, optional androidx.compose.ui.Modifier modifier, optional int indicatorStyle, optional long selectedColor, optional long unselectedColor, optional float indicatorSize, optional float spacing, optional androidx.compose.ui.graphics.Shape indicatorShape);
+  }
+
+  public final class IconKt {
+    method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.vector.ImageVector imageVector, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
+    method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.ImageBitmap bitmap, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
+    method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.painter.Painter painter, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
+  }
+
+  @androidx.compose.runtime.Stable public interface InlineSliderColors {
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> backgroundColor(boolean enabled);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> barColor(boolean enabled, boolean selected);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> spacerColor(boolean enabled);
+  }
+
+  public final class InlineSliderDefaults {
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.InlineSliderColors colors(optional long backgroundColor, optional long spacerColor, optional long selectedBarColor, optional long unselectedBarColor, optional long disabledBackgroundColor, optional long disabledSpacerColor, optional long disabledSelectedBarColor, optional long disabledUnselectedBarColor);
+    method public androidx.compose.ui.graphics.vector.ImageVector getDecrease();
+    method public androidx.compose.ui.graphics.vector.ImageVector getIncrease();
+    property public final androidx.compose.ui.graphics.vector.ImageVector Decrease;
+    property public final androidx.compose.ui.graphics.vector.ImageVector Increase;
+    field public static final androidx.wear.compose.material.InlineSliderDefaults INSTANCE;
+  }
+
+  public final class ListHeaderKt {
+    method @androidx.compose.runtime.Composable public static void ListHeader(optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+  }
+
+  public final class MaterialTextSelectionColorsKt {
+  }
+
+  public final class MaterialTheme {
+    method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public androidx.wear.compose.material.Colors getColors();
+    method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public androidx.wear.compose.material.Shapes getShapes();
+    method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public androidx.wear.compose.material.Typography getTypography();
+    property @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public final androidx.wear.compose.material.Colors colors;
+    property @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public final androidx.wear.compose.material.Shapes shapes;
+    property @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public final androidx.wear.compose.material.Typography typography;
+    field public static final androidx.wear.compose.material.MaterialTheme INSTANCE;
+  }
+
+  public final class MaterialThemeKt {
+    method @androidx.compose.runtime.Composable public static void MaterialTheme(optional androidx.wear.compose.material.Colors colors, optional androidx.wear.compose.material.Typography typography, optional androidx.wear.compose.material.Shapes shapes, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+  }
+
+  public final class PageIndicatorDefaults {
+    method @androidx.compose.runtime.Composable public int style();
+    field public static final androidx.wear.compose.material.PageIndicatorDefaults INSTANCE;
+  }
+
+  public interface PageIndicatorState {
+    method public int getPageCount();
+    method public float getPageOffset();
+    method public int getSelectedPage();
+    property public abstract int pageCount;
+    property public abstract float pageOffset;
+    property public abstract int selectedPage;
+  }
+
+  @kotlin.jvm.JvmInline public final value class PageIndicatorStyle {
+    field public static final androidx.wear.compose.material.PageIndicatorStyle.Companion Companion;
+  }
+
+  public static final class PageIndicatorStyle.Companion {
+    method public int getCurved();
+    method public int getLinear();
+    property public final int Curved;
+    property public final int Linear;
+  }
+
+  public final class PickerDefaults {
+    method @androidx.compose.runtime.Composable public androidx.compose.foundation.gestures.FlingBehavior flingBehavior(androidx.wear.compose.material.PickerState state, optional androidx.compose.animation.core.DecayAnimationSpec<java.lang.Float> decay);
+    method public float getDefaultGradientRatio();
+    method public androidx.wear.compose.material.ScalingParams scalingParams(optional float edgeScale, optional float edgeAlpha, optional float minElementHeight, optional float maxElementHeight, optional float minTransitionArea, optional float maxTransitionArea, optional androidx.compose.animation.core.Easing scaleInterpolator, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Constraints,java.lang.Integer> viewportVerticalOffsetResolver);
+    property public final float DefaultGradientRatio;
+    field public static final androidx.wear.compose.material.PickerDefaults INSTANCE;
+  }
+
+  public final class PickerKt {
+    method @androidx.compose.runtime.Composable public static void Picker(androidx.wear.compose.material.PickerState state, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional boolean readOnly, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? readOnlyLabel, optional kotlin.jvm.functions.Function0<kotlin.Unit> onSelected, optional androidx.wear.compose.material.ScalingParams scalingParams, optional float separation, optional float gradientRatio, optional long gradientColor, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, kotlin.jvm.functions.Function2<? super androidx.wear.compose.material.PickerScope,? super java.lang.Integer,kotlin.Unit> option);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Picker(androidx.wear.compose.material.PickerState state, optional androidx.compose.ui.Modifier modifier, optional boolean readOnly, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? readOnlyLabel, optional androidx.wear.compose.material.ScalingParams scalingParams, optional float separation, optional float gradientRatio, optional long gradientColor, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, kotlin.jvm.functions.Function2<? super androidx.wear.compose.material.PickerScope,? super java.lang.Integer,kotlin.Unit> option);
+    method @androidx.compose.runtime.Composable public static androidx.wear.compose.material.PickerState rememberPickerState(int initialNumberOfOptions, optional int initiallySelectedOption, optional boolean repeatItems);
+  }
+
+  public interface PickerScope {
+    method public int getSelectedOption();
+    property public abstract int selectedOption;
+  }
+
+  @androidx.compose.runtime.Stable public final class PickerState implements androidx.compose.foundation.gestures.ScrollableState {
+    ctor public PickerState(int initialNumberOfOptions, optional int initiallySelectedOption, optional boolean repeatItems);
+    method public float dispatchRawDelta(float delta);
+    method public int getNumberOfOptions();
+    method public boolean getRepeatItems();
+    method public int getSelectedOption();
+    method public boolean isScrollInProgress();
+    method public suspend Object? scroll(androidx.compose.foundation.MutatePriority scrollPriority, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.gestures.ScrollScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    method public suspend Object? scrollToOption(int index, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    method public void setNumberOfOptions(int);
+    property public boolean isScrollInProgress;
+    property public final int numberOfOptions;
+    property public final boolean repeatItems;
+    property public final int selectedOption;
+    field public static final androidx.wear.compose.material.PickerState.Companion Companion;
+  }
+
+  public static final class PickerState.Companion {
+    method public androidx.compose.runtime.saveable.Saver<androidx.wear.compose.material.PickerState,java.lang.Object> getSaver();
+    property public final androidx.compose.runtime.saveable.Saver<androidx.wear.compose.material.PickerState,java.lang.Object> Saver;
+  }
+
+  public final class PlaceholderKt {
+  }
+
+  @kotlin.jvm.JvmInline public final value class PositionIndicatorAlignment {
+    field public static final androidx.wear.compose.material.PositionIndicatorAlignment.Companion Companion;
+  }
+
+  public static final class PositionIndicatorAlignment.Companion {
+    method public int getEnd();
+    method public int getLeft();
+    method public int getOppositeRsb();
+    method public int getRight();
+    property public final int End;
+    property public final int Left;
+    property public final int OppositeRsb;
+    property public final int Right;
+  }
+
+  public final class PositionIndicatorKt {
+    method @androidx.compose.runtime.Composable public static void PositionIndicator(androidx.compose.foundation.ScrollState scrollState, optional androidx.compose.ui.Modifier modifier, optional boolean reverseDirection);
+    method @androidx.compose.runtime.Composable public static void PositionIndicator(androidx.wear.compose.material.ScalingLazyListState scalingLazyListState, optional androidx.compose.ui.Modifier modifier, optional boolean reverseDirection);
+    method @androidx.compose.runtime.Composable public static void PositionIndicator(androidx.compose.foundation.lazy.LazyListState lazyListState, optional androidx.compose.ui.Modifier modifier, optional boolean reverseDirection);
+    method @androidx.compose.runtime.Composable public static void PositionIndicator(kotlin.jvm.functions.Function0<java.lang.Float> value, optional androidx.compose.ui.Modifier modifier, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> range, optional long color, optional boolean reverseDirection, optional int position);
+    method @androidx.compose.runtime.Composable public static void PositionIndicator(androidx.wear.compose.material.PositionIndicatorState state, float indicatorHeight, float indicatorWidth, float paddingHorizontal, optional androidx.compose.ui.Modifier modifier, optional long background, optional long color, optional boolean reverseDirection, optional int position);
+  }
+
+  @androidx.compose.runtime.Stable public interface PositionIndicatorState {
+    method public float getPositionFraction();
+    method public float sizeFraction(float scrollableContainerSizePx);
+    method public int visibility(float scrollableContainerSizePx);
+    property public abstract float positionFraction;
+  }
+
+  @kotlin.jvm.JvmInline public final value class PositionIndicatorVisibility {
+    field public static final androidx.wear.compose.material.PositionIndicatorVisibility.Companion Companion;
+  }
+
+  public static final class PositionIndicatorVisibility.Companion {
+    method public int getAutoHide();
+    method public int getHide();
+    method public int getShow();
+    property public final int AutoHide;
+    property public final int Hide;
+    property public final int Show;
+  }
+
+  public final class ProgressIndicatorDefaults {
+    method public androidx.compose.animation.core.SpringSpec<java.lang.Float> getProgressAnimationSpec();
+    method public float getStrokeWidth();
+    property public final androidx.compose.animation.core.SpringSpec<java.lang.Float> ProgressAnimationSpec;
+    property public final float StrokeWidth;
+    field public static final androidx.wear.compose.material.ProgressIndicatorDefaults INSTANCE;
+  }
+
+  public final class ProgressIndicatorKt {
+    method @androidx.compose.runtime.Composable public static void CircularProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional float startAngle, optional float endAngle, optional long indicatorColor, optional long trackColor, optional float strokeWidth);
+    method @androidx.compose.runtime.Composable public static void CircularProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional float startAngle, optional long indicatorColor, optional long trackColor, optional float strokeWidth);
+  }
+
+  @androidx.compose.runtime.Stable public interface RadioButtonColors {
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> dotColor(boolean enabled, boolean selected);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> ringColor(boolean enabled, boolean selected);
+  }
+
+  public final class RadioButtonDefaults {
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.RadioButtonColors colors(optional long selectedRingColor, optional long selectedDotColor, optional long unselectedRingColor, optional long unselectedDotColor);
+    field public static final androidx.wear.compose.material.RadioButtonDefaults INSTANCE;
+  }
+
+  public final class RangeDefaultsKt {
+  }
+
+  public final class Resources_androidKt {
+  }
+
+  public final class ScaffoldKt {
+    method @androidx.compose.runtime.Composable public static void Scaffold(optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? vignette, optional kotlin.jvm.functions.Function0<kotlin.Unit>? positionIndicator, optional kotlin.jvm.functions.Function0<kotlin.Unit>? pageIndicator, optional kotlin.jvm.functions.Function0<kotlin.Unit>? timeText, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+  }
+
+  public final class ScalingLazyColumnDefaults {
+    method public androidx.wear.compose.material.ScalingParams scalingParams(optional float edgeScale, optional float edgeAlpha, optional float minElementHeight, optional float maxElementHeight, optional float minTransitionArea, optional float maxTransitionArea, optional androidx.compose.animation.core.Easing scaleInterpolator, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Constraints,java.lang.Integer> viewportVerticalOffsetResolver);
+    method @androidx.compose.runtime.Composable public androidx.compose.foundation.gestures.FlingBehavior snapFlingBehavior(androidx.wear.compose.material.ScalingLazyListState state, optional float snapOffset, optional androidx.compose.animation.core.DecayAnimationSpec<java.lang.Float> decay);
+    field public static final androidx.wear.compose.material.ScalingLazyColumnDefaults INSTANCE;
+  }
+
+  public final class ScalingLazyColumnKt {
+    method @androidx.compose.runtime.Composable public static void ScalingLazyColumn(optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.material.ScalingLazyListState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.ui.Alignment.Horizontal horizontalAlignment, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, optional boolean userScrollEnabled, optional androidx.wear.compose.material.ScalingParams scalingParams, optional int anchorType, optional androidx.wear.compose.material.AutoCenteringParams? autoCentering, kotlin.jvm.functions.Function1<? super androidx.wear.compose.material.ScalingLazyListScope,kotlin.Unit> content);
+    method public static inline <T> void items(androidx.wear.compose.material.ScalingLazyListScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function1<? super T,?>? key, kotlin.jvm.functions.Function2<? super androidx.wear.compose.material.ScalingLazyListItemScope,? super T,kotlin.Unit> itemContent);
+    method public static inline <T> void items(androidx.wear.compose.material.ScalingLazyListScope, T![] items, optional kotlin.jvm.functions.Function1<? super T,?>? key, kotlin.jvm.functions.Function2<? super androidx.wear.compose.material.ScalingLazyListItemScope,? super T,kotlin.Unit> itemContent);
+    method public static inline <T> void itemsIndexed(androidx.wear.compose.material.ScalingLazyListScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, kotlin.jvm.functions.Function3<? super androidx.wear.compose.material.ScalingLazyListItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
+    method public static inline <T> void itemsIndexed(androidx.wear.compose.material.ScalingLazyListScope, T![] items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, kotlin.jvm.functions.Function3<? super androidx.wear.compose.material.ScalingLazyListItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
+  }
+
+  public final class ScalingLazyColumnMeasureKt {
+  }
+
+  @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class ScalingLazyListAnchorType {
+    field public static final androidx.wear.compose.material.ScalingLazyListAnchorType.Companion Companion;
+  }
+
+  public static final class ScalingLazyListAnchorType.Companion {
+    method public int getItemCenter();
+    method public int getItemStart();
+    property public final int ItemCenter;
+    property public final int ItemStart;
+  }
+
+  public sealed interface ScalingLazyListItemInfo {
+    method public float getAlpha();
+    method public int getIndex();
+    method public Object getKey();
+    method public int getOffset();
+    method public float getScale();
+    method public int getSize();
+    method public int getUnadjustedOffset();
+    method public int getUnadjustedSize();
+    property public abstract float alpha;
+    property public abstract int index;
+    property public abstract Object key;
+    property public abstract int offset;
+    property public abstract float scale;
+    property public abstract int size;
+    property public abstract int unadjustedOffset;
+    property public abstract int unadjustedSize;
+  }
+
+  @androidx.compose.runtime.Stable @androidx.wear.compose.material.ScalingLazyScopeMarker public sealed interface ScalingLazyListItemScope {
+    method public androidx.compose.ui.Modifier fillParentMaxHeight(androidx.compose.ui.Modifier, optional float fraction);
+    method public androidx.compose.ui.Modifier fillParentMaxSize(androidx.compose.ui.Modifier, optional float fraction);
+    method public androidx.compose.ui.Modifier fillParentMaxWidth(androidx.compose.ui.Modifier, optional float fraction);
+  }
+
+  public sealed interface ScalingLazyListLayoutInfo {
+    method public int getAfterAutoCenteringPadding();
+    method public int getAfterContentPadding();
+    method public int getBeforeAutoCenteringPadding();
+    method public int getBeforeContentPadding();
+    method public androidx.compose.foundation.gestures.Orientation getOrientation();
+    method public boolean getReverseLayout();
+    method public int getTotalItemsCount();
+    method public int getViewportEndOffset();
+    method public long getViewportSize();
+    method public int getViewportStartOffset();
+    method public java.util.List<androidx.wear.compose.material.ScalingLazyListItemInfo> getVisibleItemsInfo();
+    property public abstract int afterAutoCenteringPadding;
+    property public abstract int afterContentPadding;
+    property public abstract int beforeAutoCenteringPadding;
+    property public abstract int beforeContentPadding;
+    property public abstract androidx.compose.foundation.gestures.Orientation orientation;
+    property public abstract boolean reverseLayout;
+    property public abstract int totalItemsCount;
+    property public abstract int viewportEndOffset;
+    property public abstract long viewportSize;
+    property public abstract int viewportStartOffset;
+    property public abstract java.util.List<androidx.wear.compose.material.ScalingLazyListItemInfo> visibleItemsInfo;
+  }
+
+  @androidx.wear.compose.material.ScalingLazyScopeMarker public sealed interface ScalingLazyListScope {
+    method public void item(optional Object? key, kotlin.jvm.functions.Function1<? super androidx.wear.compose.material.ScalingLazyListItemScope,kotlin.Unit> content);
+    method public void items(int count, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,?>? key, kotlin.jvm.functions.Function2<? super androidx.wear.compose.material.ScalingLazyListItemScope,? super java.lang.Integer,kotlin.Unit> itemContent);
+  }
+
+  @androidx.compose.runtime.Stable public final class ScalingLazyListState implements androidx.compose.foundation.gestures.ScrollableState {
+    ctor public ScalingLazyListState(optional int initialCenterItemIndex, optional int initialCenterItemScrollOffset);
+    method public suspend Object? animateScrollToItem(int index, optional int scrollOffset, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    method public float dispatchRawDelta(float delta);
+    method public int getCenterItemIndex();
+    method public int getCenterItemScrollOffset();
+    method public androidx.wear.compose.material.ScalingLazyListLayoutInfo getLayoutInfo();
+    method public boolean isScrollInProgress();
+    method public suspend Object? scroll(androidx.compose.foundation.MutatePriority scrollPriority, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.gestures.ScrollScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    method public suspend Object? scrollToItem(int index, optional int scrollOffset, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    property public final int centerItemIndex;
+    property public final int centerItemScrollOffset;
+    property public boolean isScrollInProgress;
+    property public final androidx.wear.compose.material.ScalingLazyListLayoutInfo layoutInfo;
+    field public static final androidx.wear.compose.material.ScalingLazyListState.Companion Companion;
+  }
+
+  public static final class ScalingLazyListState.Companion {
+    method public androidx.compose.runtime.saveable.Saver<androidx.wear.compose.material.ScalingLazyListState,java.lang.Object> getSaver();
+    property public final androidx.compose.runtime.saveable.Saver<androidx.wear.compose.material.ScalingLazyListState,java.lang.Object> Saver;
+  }
+
+  public final class ScalingLazyListStateKt {
+    method @androidx.compose.runtime.Composable public static androidx.wear.compose.material.ScalingLazyListState rememberScalingLazyListState(optional int initialCenterItemIndex, optional int initialCenterItemScrollOffset);
+  }
+
+  @kotlin.DslMarker public @interface ScalingLazyScopeMarker {
+  }
+
+  @androidx.compose.runtime.Stable public interface ScalingParams {
+    method public float getEdgeAlpha();
+    method public float getEdgeScale();
+    method public float getMaxElementHeight();
+    method public float getMaxTransitionArea();
+    method public float getMinElementHeight();
+    method public float getMinTransitionArea();
+    method public androidx.compose.animation.core.Easing getScaleInterpolator();
+    method public int resolveViewportVerticalOffset(long viewportConstraints);
+    property public abstract float edgeAlpha;
+    property public abstract float edgeScale;
+    property public abstract float maxElementHeight;
+    property public abstract float maxTransitionArea;
+    property public abstract float minElementHeight;
+    property public abstract float minTransitionArea;
+    property public abstract androidx.compose.animation.core.Easing scaleInterpolator;
+  }
+
+  public final class ScrollAwayKt {
+    method public static androidx.compose.ui.Modifier scrollAway(androidx.compose.ui.Modifier, androidx.compose.foundation.ScrollState scrollState, optional float offset);
+    method public static androidx.compose.ui.Modifier scrollAway(androidx.compose.ui.Modifier, androidx.compose.foundation.lazy.LazyListState scrollState, optional int itemIndex, optional float offset);
+    method public static androidx.compose.ui.Modifier scrollAway(androidx.compose.ui.Modifier, androidx.wear.compose.material.ScalingLazyListState scrollState, optional int itemIndex, optional float offset);
+  }
+
+  @androidx.compose.runtime.Immutable public final class Shapes {
+    ctor public Shapes(optional androidx.compose.foundation.shape.CornerBasedShape small, optional androidx.compose.foundation.shape.CornerBasedShape medium, optional androidx.compose.foundation.shape.CornerBasedShape large);
+    method public androidx.wear.compose.material.Shapes copy(optional androidx.compose.foundation.shape.CornerBasedShape small, optional androidx.compose.foundation.shape.CornerBasedShape medium, optional androidx.compose.foundation.shape.CornerBasedShape large);
+    method public androidx.compose.foundation.shape.CornerBasedShape getLarge();
+    method public androidx.compose.foundation.shape.CornerBasedShape getMedium();
+    method public androidx.compose.foundation.shape.CornerBasedShape getSmall();
+    property public final androidx.compose.foundation.shape.CornerBasedShape large;
+    property public final androidx.compose.foundation.shape.CornerBasedShape medium;
+    property public final androidx.compose.foundation.shape.CornerBasedShape small;
+  }
+
+  public final class ShapesKt {
+  }
+
+  public final class SliderKt {
+    method @androidx.compose.runtime.Composable public static void InlineSlider(float value, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onValueChange, int steps, kotlin.jvm.functions.Function0<kotlin.Unit> decreaseIcon, kotlin.jvm.functions.Function0<kotlin.Unit> increaseIcon, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange, optional boolean segmented, optional androidx.wear.compose.material.InlineSliderColors colors);
+    method @androidx.compose.runtime.Composable public static void InlineSlider(int value, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> onValueChange, kotlin.ranges.IntProgression valueProgression, kotlin.jvm.functions.Function0<kotlin.Unit> decreaseIcon, kotlin.jvm.functions.Function0<kotlin.Unit> increaseIcon, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean segmented, optional androidx.wear.compose.material.InlineSliderColors colors);
+  }
+
+  @androidx.compose.runtime.Stable public interface SplitToggleChipColors {
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> backgroundColor(boolean enabled);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> contentColor(boolean enabled);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> secondaryContentColor(boolean enabled);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> splitBackgroundOverlay(boolean enabled, boolean checked);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> toggleControlColor(boolean enabled, boolean checked);
+  }
+
+  public final class StepperDefaults {
+    method public androidx.compose.ui.graphics.vector.ImageVector getDecrease();
+    method public androidx.compose.ui.graphics.vector.ImageVector getIncrease();
+    property public final androidx.compose.ui.graphics.vector.ImageVector Decrease;
+    property public final androidx.compose.ui.graphics.vector.ImageVector Increase;
+    field public static final androidx.wear.compose.material.StepperDefaults INSTANCE;
+  }
+
+  public final class StepperKt {
+    method @androidx.compose.runtime.Composable public static void Stepper(float value, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onValueChange, int steps, kotlin.jvm.functions.Function0<kotlin.Unit> decreaseIcon, kotlin.jvm.functions.Function0<kotlin.Unit> increaseIcon, optional androidx.compose.ui.Modifier modifier, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange, optional long backgroundColor, optional long contentColor, optional long iconColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void Stepper(int value, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> onValueChange, kotlin.ranges.IntProgression valueProgression, kotlin.jvm.functions.Function0<kotlin.Unit> decreaseIcon, kotlin.jvm.functions.Function0<kotlin.Unit> increaseIcon, optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional long iconColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+  }
+
+  public final class SwipeToDismissBoxDefaults {
+    method public androidx.compose.animation.core.SpringSpec<java.lang.Float> getAnimationSpec();
+    method public float getEdgeWidth();
+    property public final androidx.compose.animation.core.SpringSpec<java.lang.Float> AnimationSpec;
+    property public final float EdgeWidth;
+    field public static final androidx.wear.compose.material.SwipeToDismissBoxDefaults INSTANCE;
+  }
+
+  public final class SwipeToDismissBoxKt {
+    method @androidx.compose.runtime.Composable public static void SwipeToDismissBox(androidx.wear.compose.material.SwipeToDismissBoxState state, optional androidx.compose.ui.Modifier modifier, optional long backgroundScrimColor, optional long contentScrimColor, optional Object backgroundKey, optional Object contentKey, optional boolean hasBackground, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.layout.BoxScope,? super java.lang.Boolean,kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void SwipeToDismissBox(kotlin.jvm.functions.Function0<kotlin.Unit> onDismissed, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.material.SwipeToDismissBoxState state, optional long backgroundScrimColor, optional long contentScrimColor, optional Object backgroundKey, optional Object contentKey, optional boolean hasBackground, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.layout.BoxScope,? super java.lang.Boolean,kotlin.Unit> content);
+    method public static androidx.compose.ui.Modifier edgeSwipeToDismiss(androidx.compose.ui.Modifier, androidx.wear.compose.material.SwipeToDismissBoxState swipeToDismissBoxState, optional float edgeWidth);
+    method @androidx.compose.runtime.Composable public static androidx.wear.compose.material.SwipeToDismissBoxState rememberSwipeToDismissBoxState(optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.wear.compose.material.SwipeToDismissValue,java.lang.Boolean> confirmStateChange);
+  }
+
+  @androidx.compose.runtime.Stable public final class SwipeToDismissBoxState {
+    ctor public SwipeToDismissBoxState(optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.wear.compose.material.SwipeToDismissValue,java.lang.Boolean> confirmStateChange);
+    method public androidx.wear.compose.material.SwipeToDismissValue getCurrentValue();
+    method public androidx.wear.compose.material.SwipeToDismissValue getTargetValue();
+    method public boolean isAnimationRunning();
+    method public suspend Object? snapTo(androidx.wear.compose.material.SwipeToDismissValue targetValue, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    property public final androidx.wear.compose.material.SwipeToDismissValue currentValue;
+    property public final boolean isAnimationRunning;
+    property public final androidx.wear.compose.material.SwipeToDismissValue targetValue;
+  }
+
+  public enum SwipeToDismissKeys {
+    method public static androidx.wear.compose.material.SwipeToDismissKeys valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.wear.compose.material.SwipeToDismissKeys[] values();
+    enum_constant public static final androidx.wear.compose.material.SwipeToDismissKeys Background;
+    enum_constant public static final androidx.wear.compose.material.SwipeToDismissKeys Content;
+  }
+
+  public enum SwipeToDismissValue {
+    method public static androidx.wear.compose.material.SwipeToDismissValue valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.wear.compose.material.SwipeToDismissValue[] values();
+    enum_constant public static final androidx.wear.compose.material.SwipeToDismissValue Default;
+    enum_constant public static final androidx.wear.compose.material.SwipeToDismissValue Dismissed;
+  }
+
+  public final class SwipeableKt {
+  }
+
+  @androidx.compose.runtime.Stable public interface SwitchColors {
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> thumbColor(boolean enabled, boolean checked);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> trackColor(boolean enabled, boolean checked);
+  }
+
+  public final class SwitchDefaults {
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.SwitchColors colors(optional long checkedThumbColor, optional long checkedTrackColor, optional long uncheckedThumbColor, optional long uncheckedTrackColor);
+    field public static final androidx.wear.compose.material.SwitchDefaults INSTANCE;
+  }
+
+  public final class TextKt {
+    method @androidx.compose.runtime.Composable public static void ProvideTextStyle(androidx.compose.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+    method @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+    method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> getLocalTextStyle();
+    property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> LocalTextStyle;
+  }
+
+  public interface TimeSource {
+    method @androidx.compose.runtime.Composable public String getCurrentTime();
+    property @androidx.compose.runtime.Composable public abstract String currentTime;
+  }
+
+  public final class TimeTextDefaults {
+    method public void CurvedTextSeparator(androidx.wear.compose.foundation.CurvedScope, optional androidx.wear.compose.foundation.CurvedTextStyle? curvedTextStyle, optional androidx.wear.compose.foundation.ArcPaddingValues contentArcPadding);
+    method @androidx.compose.runtime.Composable public void TextSeparator(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.layout.PaddingValues contentPadding);
+    method public androidx.compose.foundation.layout.PaddingValues getContentPadding();
+    method @androidx.compose.runtime.Composable public String timeFormat();
+    method public androidx.wear.compose.material.TimeSource timeSource(String timeFormat);
+    method @androidx.compose.runtime.Composable public androidx.compose.ui.text.TextStyle timeTextStyle(optional long background, optional long color, optional long fontSize);
+    property public final androidx.compose.foundation.layout.PaddingValues ContentPadding;
+    field public static final androidx.wear.compose.material.TimeTextDefaults INSTANCE;
+    field public static final String TimeFormat12Hours = "h:mm a";
+    field public static final String TimeFormat24Hours = "HH:mm";
+  }
+
+  public final class TimeTextKt {
+    method @androidx.compose.runtime.Composable public static void TimeText(optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.material.TimeSource timeSource, optional androidx.compose.ui.text.TextStyle timeTextStyle, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional kotlin.jvm.functions.Function0<kotlin.Unit>? startLinearContent, optional kotlin.jvm.functions.Function1<? super androidx.wear.compose.foundation.CurvedScope,kotlin.Unit>? startCurvedContent, optional kotlin.jvm.functions.Function0<kotlin.Unit>? endLinearContent, optional kotlin.jvm.functions.Function1<? super androidx.wear.compose.foundation.CurvedScope,kotlin.Unit>? endCurvedContent, optional kotlin.jvm.functions.Function0<kotlin.Unit> textLinearSeparator, optional kotlin.jvm.functions.Function1<? super androidx.wear.compose.foundation.CurvedScope,kotlin.Unit> textCurvedSeparator);
+  }
+
+  @androidx.compose.runtime.Stable public interface ToggleButtonColors {
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> backgroundColor(boolean enabled, boolean checked);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> contentColor(boolean enabled, boolean checked);
+  }
+
+  public final class ToggleButtonDefaults {
+    method public float getDefaultIconSize();
+    method public float getDefaultToggleButtonSize();
+    method public float getSmallIconSize();
+    method public float getSmallToggleButtonSize();
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ToggleButtonColors toggleButtonColors(optional long checkedBackgroundColor, optional long checkedContentColor, optional long disabledCheckedBackgroundColor, optional long disabledCheckedContentColor, optional long uncheckedBackgroundColor, optional long uncheckedContentColor, optional long disabledUncheckedBackgroundColor, optional long disabledUncheckedContentColor);
+    property public final float DefaultIconSize;
+    property public final float DefaultToggleButtonSize;
+    property public final float SmallIconSize;
+    property public final float SmallToggleButtonSize;
+    field public static final androidx.wear.compose.material.ToggleButtonDefaults INSTANCE;
+  }
+
+  public final class ToggleButtonKt {
+    method @androidx.compose.runtime.Composable public static void ToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ToggleButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void ToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,? extends kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ToggleButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit> content);
+  }
+
+  @androidx.compose.runtime.Stable public interface ToggleChipColors {
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.painter.Painter> background(boolean enabled, boolean checked);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> contentColor(boolean enabled, boolean checked);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> secondaryContentColor(boolean enabled, boolean checked);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> toggleControlColor(boolean enabled, boolean checked);
+  }
+
+  public final class ToggleChipDefaults {
+    method public androidx.compose.ui.graphics.vector.ImageVector checkboxIcon(boolean checked);
+    method public androidx.compose.ui.graphics.vector.ImageVector getCheckboxOn();
+    method public androidx.compose.foundation.layout.PaddingValues getContentPadding();
+    method public float getIconSize();
+    method public androidx.compose.ui.graphics.vector.ImageVector getRadioOff();
+    method public androidx.compose.ui.graphics.vector.ImageVector getRadioOn();
+    method @androidx.compose.runtime.Composable public long getSwitchUncheckedIconColor();
+    method public androidx.compose.ui.graphics.vector.ImageVector radioIcon(boolean checked);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.SplitToggleChipColors splitToggleChipColors(optional long backgroundColor, optional long contentColor, optional long secondaryContentColor, optional long checkedToggleControlColor, optional long uncheckedToggleControlColor, optional long splitBackgroundOverlayColor);
+    method public androidx.compose.ui.graphics.vector.ImageVector switchIcon(boolean checked);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ToggleChipColors toggleChipColors(optional long checkedStartBackgroundColor, optional long checkedEndBackgroundColor, optional long checkedContentColor, optional long checkedSecondaryContentColor, optional long checkedToggleControlColor, optional long uncheckedStartBackgroundColor, optional long uncheckedEndBackgroundColor, optional long uncheckedContentColor, optional long uncheckedSecondaryContentColor, optional long uncheckedToggleControlColor, optional androidx.compose.ui.unit.LayoutDirection gradientDirection);
+    property public final androidx.compose.ui.graphics.vector.ImageVector CheckboxOn;
+    property public final androidx.compose.foundation.layout.PaddingValues ContentPadding;
+    property public final float IconSize;
+    property public final androidx.compose.ui.graphics.vector.ImageVector RadioOff;
+    property public final androidx.compose.ui.graphics.vector.ImageVector RadioOn;
+    property @androidx.compose.runtime.Composable public final long SwitchUncheckedIconColor;
+    field public static final androidx.wear.compose.material.ToggleChipDefaults INSTANCE;
+  }
+
+  public final class ToggleChipKt {
+    method @androidx.compose.runtime.Composable public static void SplitToggleChip(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> label, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> toggleControl, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? secondaryLabel, optional androidx.wear.compose.material.SplitToggleChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource checkedInteractionSource, optional androidx.compose.foundation.interaction.MutableInteractionSource clickInteractionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape);
+    method @androidx.compose.runtime.Composable public static void ToggleChip(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> label, kotlin.jvm.functions.Function0<kotlin.Unit> toggleControl, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? appIcon, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? secondaryLabel, optional androidx.wear.compose.material.ToggleChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape);
+  }
+
+  public final class ToggleControlKt {
+    method @androidx.compose.runtime.Composable public static void Checkbox(boolean checked, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.material.CheckboxColors colors, optional boolean enabled, optional kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onCheckedChange, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource);
+    method @androidx.compose.runtime.Composable public static void RadioButton(boolean selected, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.material.RadioButtonColors colors, optional boolean enabled, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onClick, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource);
+    method @androidx.compose.runtime.Composable public static void Switch(boolean checked, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.material.SwitchColors colors, optional boolean enabled, optional kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onCheckedChange, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource);
+  }
+
+  @androidx.compose.runtime.Immutable public final class Typography {
+    ctor public Typography(optional androidx.compose.ui.text.font.FontFamily defaultFontFamily, optional androidx.compose.ui.text.TextStyle display1, optional androidx.compose.ui.text.TextStyle display2, optional androidx.compose.ui.text.TextStyle display3, optional androidx.compose.ui.text.TextStyle title1, optional androidx.compose.ui.text.TextStyle title2, optional androidx.compose.ui.text.TextStyle title3, optional androidx.compose.ui.text.TextStyle body1, optional androidx.compose.ui.text.TextStyle body2, optional androidx.compose.ui.text.TextStyle button, optional androidx.compose.ui.text.TextStyle caption1, optional androidx.compose.ui.text.TextStyle caption2, optional androidx.compose.ui.text.TextStyle caption3);
+    method public androidx.wear.compose.material.Typography copy(optional androidx.compose.ui.text.TextStyle display1, optional androidx.compose.ui.text.TextStyle display2, optional androidx.compose.ui.text.TextStyle display3, optional androidx.compose.ui.text.TextStyle title1, optional androidx.compose.ui.text.TextStyle title2, optional androidx.compose.ui.text.TextStyle title3, optional androidx.compose.ui.text.TextStyle body1, optional androidx.compose.ui.text.TextStyle body2, optional androidx.compose.ui.text.TextStyle button, optional androidx.compose.ui.text.TextStyle caption1, optional androidx.compose.ui.text.TextStyle caption2, optional androidx.compose.ui.text.TextStyle caption3);
+    method public androidx.compose.ui.text.TextStyle getBody1();
+    method public androidx.compose.ui.text.TextStyle getBody2();
+    method public androidx.compose.ui.text.TextStyle getButton();
+    method public androidx.compose.ui.text.TextStyle getCaption1();
+    method public androidx.compose.ui.text.TextStyle getCaption2();
+    method public androidx.compose.ui.text.TextStyle getCaption3();
+    method public androidx.compose.ui.text.TextStyle getDisplay1();
+    method public androidx.compose.ui.text.TextStyle getDisplay2();
+    method public androidx.compose.ui.text.TextStyle getDisplay3();
+    method public androidx.compose.ui.text.TextStyle getTitle1();
+    method public androidx.compose.ui.text.TextStyle getTitle2();
+    method public androidx.compose.ui.text.TextStyle getTitle3();
+    property public final androidx.compose.ui.text.TextStyle body1;
+    property public final androidx.compose.ui.text.TextStyle body2;
+    property public final androidx.compose.ui.text.TextStyle button;
+    property public final androidx.compose.ui.text.TextStyle caption1;
+    property public final androidx.compose.ui.text.TextStyle caption2;
+    property public final androidx.compose.ui.text.TextStyle caption3;
+    property public final androidx.compose.ui.text.TextStyle display1;
+    property public final androidx.compose.ui.text.TextStyle display2;
+    property public final androidx.compose.ui.text.TextStyle display3;
+    property public final androidx.compose.ui.text.TextStyle title1;
+    property public final androidx.compose.ui.text.TextStyle title2;
+    property public final androidx.compose.ui.text.TextStyle title3;
+  }
+
+  public final class TypographyKt {
+  }
+
+  public final class VignetteKt {
+    method @androidx.compose.runtime.Composable public static void Vignette(int vignettePosition, optional androidx.compose.ui.Modifier modifier);
+  }
+
+  @kotlin.jvm.JvmInline public final value class VignettePosition {
+    ctor public VignettePosition(int key);
+    field public static final androidx.wear.compose.material.VignettePosition.Companion Companion;
+  }
+
+  public static final class VignettePosition.Companion {
+    method public int getBottom();
+    method public int getTop();
+    method public int getTopAndBottom();
+    property public final int Bottom;
+    property public final int Top;
+    property public final int TopAndBottom;
+  }
+
+}
+
+package androidx.wear.compose.material.dialog {
+
+  public final class DialogDefaults {
+    method public androidx.compose.foundation.layout.Arrangement.Vertical getAlertVerticalArrangement();
+    method public androidx.compose.foundation.layout.Arrangement.Vertical getConfirmationVerticalArrangement();
+    method public androidx.compose.foundation.layout.PaddingValues getContentPadding();
+    method public long getIndefiniteDurationMillis();
+    method public long getLongDurationMillis();
+    method public long getShortDurationMillis();
+    property public final androidx.compose.foundation.layout.Arrangement.Vertical AlertVerticalArrangement;
+    property public final androidx.compose.foundation.layout.Arrangement.Vertical ConfirmationVerticalArrangement;
+    property public final androidx.compose.foundation.layout.PaddingValues ContentPadding;
+    property public final long IndefiniteDurationMillis;
+    property public final long LongDurationMillis;
+    property public final long ShortDurationMillis;
+    field public static final androidx.wear.compose.material.dialog.DialogDefaults INSTANCE;
+  }
+
+  public final class DialogKt {
+    method @androidx.compose.runtime.Composable public static void Alert(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> title, kotlin.jvm.functions.Function0<kotlin.Unit> negativeButton, kotlin.jvm.functions.Function0<kotlin.Unit> positiveButton, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ScalingLazyListState scrollState, optional long backgroundColor, optional long contentColor, optional long titleColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? content);
+    method @androidx.compose.runtime.Composable public static void Alert(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? icon, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? message, optional androidx.wear.compose.material.ScalingLazyListState scrollState, optional long backgroundColor, optional long titleColor, optional long messageColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.wear.compose.material.ScalingLazyListScope,kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void Confirmation(kotlin.jvm.functions.Function0<kotlin.Unit> onTimeout, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ScalingLazyListState scrollState, optional long durationMillis, optional long backgroundColor, optional long contentColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
+  }
+
+  public final class Dialog_androidKt {
+    method @androidx.compose.runtime.Composable public static void Dialog(boolean showDialog, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.material.ScalingLazyListState? scrollState, optional androidx.compose.ui.window.DialogProperties properties, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+  }
+
+}
+
diff --git a/wear/compose/compose-material/api/public_plus_experimental_1.1.0-beta01.txt b/wear/compose/compose-material/api/public_plus_experimental_1.1.0-beta01.txt
new file mode 100644
index 0000000..1180309
--- /dev/null
+++ b/wear/compose/compose-material/api/public_plus_experimental_1.1.0-beta01.txt
@@ -0,0 +1,885 @@
+// Signature format: 4.0
+package androidx.wear.compose.material {
+
+  public final class AnimationKt {
+  }
+
+  @androidx.compose.runtime.Immutable public final class AutoCenteringParams {
+    ctor public AutoCenteringParams(optional int itemIndex, optional int itemOffset);
+  }
+
+  @androidx.compose.runtime.Stable public interface ButtonBorder {
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.foundation.BorderStroke> borderStroke(boolean enabled);
+  }
+
+  @androidx.compose.runtime.Stable public interface ButtonColors {
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> backgroundColor(boolean enabled);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> contentColor(boolean enabled);
+  }
+
+  public final class ButtonDefaults {
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ButtonBorder buttonBorder(optional androidx.compose.foundation.BorderStroke? borderStroke, optional androidx.compose.foundation.BorderStroke? disabledBorderStroke);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ButtonColors buttonColors(optional long backgroundColor, optional long contentColor, optional long disabledBackgroundColor, optional long disabledContentColor);
+    method public float getCompactButtonBackgroundPadding();
+    method public float getDefaultButtonSize();
+    method public float getDefaultIconSize();
+    method public float getExtraSmallButtonSize();
+    method public float getLargeButtonSize();
+    method public float getLargeIconSize();
+    method public float getSmallButtonSize();
+    method public float getSmallIconSize();
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ButtonColors iconButtonColors(optional long contentColor);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ButtonBorder outlinedButtonBorder(optional long borderColor, optional long disabledBorderColor, optional float borderWidth);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ButtonColors outlinedButtonColors(optional long contentColor);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ButtonColors primaryButtonColors(optional long backgroundColor, optional long contentColor);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ButtonColors secondaryButtonColors(optional long backgroundColor, optional long contentColor);
+    property public final float CompactButtonBackgroundPadding;
+    property public final float DefaultButtonSize;
+    property public final float DefaultIconSize;
+    property public final float ExtraSmallButtonSize;
+    property public final float LargeButtonSize;
+    property public final float LargeIconSize;
+    property public final float SmallButtonSize;
+    property public final float SmallIconSize;
+    field public static final androidx.wear.compose.material.ButtonDefaults INSTANCE;
+  }
+
+  public final class ButtonKt {
+    method @androidx.compose.runtime.Composable public static void Button(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ButtonBorder border, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Button(kotlin.jvm.functions.Function0<? extends kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void CompactButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional float backgroundPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ButtonBorder border, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void CompactButton(kotlin.jvm.functions.Function0<? extends kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional float backgroundPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void OutlinedButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ButtonBorder border, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void OutlinedCompactButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional float backgroundPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ButtonBorder border, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+  }
+
+  public final class CardDefaults {
+    method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.painter.Painter cardBackgroundPainter(optional long startBackgroundColor, optional long endBackgroundColor, optional androidx.compose.ui.unit.LayoutDirection gradientDirection);
+    method public float getAppImageSize();
+    method public androidx.compose.foundation.layout.PaddingValues getContentPadding();
+    method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.painter.Painter imageWithScrimBackgroundPainter(androidx.compose.ui.graphics.painter.Painter backgroundImagePainter, optional androidx.compose.ui.graphics.Brush backgroundImageScrimBrush);
+    property public final float AppImageSize;
+    property public final androidx.compose.foundation.layout.PaddingValues ContentPadding;
+    field public static final androidx.wear.compose.material.CardDefaults INSTANCE;
+  }
+
+  public final class CardKt {
+    method @androidx.compose.runtime.Composable public static void AppCard(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> appName, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> time, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? appImage, optional androidx.compose.ui.graphics.painter.Painter backgroundPainter, optional long contentColor, optional long appColor, optional long timeColor, optional long titleColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void Card(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.graphics.painter.Painter backgroundPainter, optional long contentColor, optional boolean enabled, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void TitleCard(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? time, optional androidx.compose.ui.graphics.painter.Painter backgroundPainter, optional long contentColor, optional long titleColor, optional long timeColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
+  }
+
+  @androidx.compose.runtime.Stable public interface CheckboxColors {
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> boxColor(boolean enabled, boolean checked);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> checkmarkColor(boolean enabled, boolean checked);
+  }
+
+  public final class CheckboxDefaults {
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.CheckboxColors colors(optional long checkedBoxColor, optional long checkedCheckmarkColor, optional long uncheckedBoxColor, optional long uncheckedCheckmarkColor);
+    field public static final androidx.wear.compose.material.CheckboxDefaults INSTANCE;
+  }
+
+  @androidx.compose.runtime.Stable public interface ChipBorder {
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.foundation.BorderStroke> borderStroke(boolean enabled);
+  }
+
+  @androidx.compose.runtime.Stable public interface ChipColors {
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.painter.Painter> background(boolean enabled);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> contentColor(boolean enabled);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> iconColor(boolean enabled);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> secondaryContentColor(boolean enabled);
+  }
+
+  public final class ChipDefaults {
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipColors childChipColors(optional long contentColor, optional long secondaryContentColor, optional long iconColor);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipBorder chipBorder(optional androidx.compose.foundation.BorderStroke? borderStroke, optional androidx.compose.foundation.BorderStroke? disabledBorderStroke);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipColors chipColors(optional long backgroundColor, optional long contentColor, optional long secondaryContentColor, optional long iconColor, optional long disabledBackgroundColor, optional long disabledContentColor, optional long disabledSecondaryContentColor, optional long disabledIconColor);
+    method @androidx.wear.compose.material.ExperimentalWearMaterialApi public androidx.wear.compose.material.ChipColors chipColors(androidx.compose.ui.graphics.painter.Painter backgroundPainter, long contentColor, long secondaryContentColor, long iconColor, androidx.compose.ui.graphics.painter.Painter disabledBackgroundPainter, long disabledContentColor, long disabledSecondaryContentColor, long disabledIconColor);
+    method public androidx.compose.foundation.layout.PaddingValues getCompactChipContentPadding();
+    method public androidx.compose.foundation.layout.PaddingValues getContentPadding();
+    method public float getIconSize();
+    method public float getLargeIconSize();
+    method public float getSmallIconSize();
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipColors gradientBackgroundChipColors(optional long startBackgroundColor, optional long endBackgroundColor, optional long contentColor, optional long secondaryContentColor, optional long iconColor, optional androidx.compose.ui.unit.LayoutDirection gradientDirection);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipColors imageBackgroundChipColors(androidx.compose.ui.graphics.painter.Painter backgroundImagePainter, optional androidx.compose.ui.graphics.Brush backgroundImageScrimBrush, optional long contentColor, optional long secondaryContentColor, optional long iconColor);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipBorder outlinedChipBorder(optional long borderColor, optional long disabledBorderColor, optional float borderWidth);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipColors outlinedChipColors(optional long contentColor, optional long secondaryContentColor, optional long iconColor);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipColors primaryChipColors(optional long backgroundColor, optional long contentColor, optional long secondaryContentColor, optional long iconColor);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipColors secondaryChipColors(optional long backgroundColor, optional long contentColor, optional long secondaryContentColor, optional long iconColor);
+    property public final androidx.compose.foundation.layout.PaddingValues CompactChipContentPadding;
+    property public final androidx.compose.foundation.layout.PaddingValues ContentPadding;
+    property public final float IconSize;
+    property public final float LargeIconSize;
+    property public final float SmallIconSize;
+    field public static final androidx.wear.compose.material.ChipDefaults INSTANCE;
+  }
+
+  public final class ChipKt {
+    method @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.wear.compose.material.ChipColors colors, androidx.wear.compose.material.ChipBorder border, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> label, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? secondaryLabel, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ChipBorder border);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function0<? extends kotlin.Unit> onClick, androidx.wear.compose.material.ChipColors colors, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,? extends kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,? extends kotlin.Unit> label, kotlin.jvm.functions.Function0<? extends kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,? extends kotlin.Unit>? secondaryLabel, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding);
+    method @androidx.compose.runtime.Composable public static void CompactChip(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? label, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ChipBorder border);
+    method @Deprecated @androidx.compose.runtime.Composable public static void CompactChip(kotlin.jvm.functions.Function0<? extends kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding);
+    method @androidx.compose.runtime.Composable public static void OutlinedChip(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> label, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? secondaryLabel, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ChipBorder border);
+    method @androidx.compose.runtime.Composable public static void OutlinedCompactChip(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? label, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ChipBorder border);
+  }
+
+  @androidx.compose.runtime.Stable public final class Colors {
+    ctor public Colors(optional long primary, optional long primaryVariant, optional long secondary, optional long secondaryVariant, optional long background, optional long surface, optional long error, optional long onPrimary, optional long onSecondary, optional long onBackground, optional long onSurface, optional long onSurfaceVariant, optional long onError);
+    method public androidx.wear.compose.material.Colors copy(optional long primary, optional long primaryVariant, optional long secondary, optional long secondaryVariant, optional long background, optional long surface, optional long error, optional long onPrimary, optional long onSecondary, optional long onBackground, optional long onSurface, optional long onSurfaceVariant, optional long onError);
+    method public long getBackground();
+    method public long getError();
+    method public long getOnBackground();
+    method public long getOnError();
+    method public long getOnPrimary();
+    method public long getOnSecondary();
+    method public long getOnSurface();
+    method public long getOnSurfaceVariant();
+    method public long getPrimary();
+    method public long getPrimaryVariant();
+    method public long getSecondary();
+    method public long getSecondaryVariant();
+    method public long getSurface();
+    property public final long background;
+    property public final long error;
+    property public final long onBackground;
+    property public final long onError;
+    property public final long onPrimary;
+    property public final long onSecondary;
+    property public final long onSurface;
+    property public final long onSurfaceVariant;
+    property public final long primary;
+    property public final long primaryVariant;
+    property public final long secondary;
+    property public final long secondaryVariant;
+    property public final long surface;
+  }
+
+  public final class ColorsKt {
+    method public static long contentColorFor(androidx.wear.compose.material.Colors, long backgroundColor);
+    method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static long contentColorFor(long backgroundColor);
+  }
+
+  public final class ContentAlpha {
+    method @androidx.compose.runtime.Composable public float getDisabled();
+    method @androidx.compose.runtime.Composable public float getHigh();
+    method @androidx.compose.runtime.Composable public float getMedium();
+    property @androidx.compose.runtime.Composable public final float disabled;
+    property @androidx.compose.runtime.Composable public final float high;
+    property @androidx.compose.runtime.Composable public final float medium;
+    field public static final androidx.wear.compose.material.ContentAlpha INSTANCE;
+  }
+
+  public final class ContentAlphaKt {
+    method public static androidx.compose.runtime.ProvidableCompositionLocal<java.lang.Float> getLocalContentAlpha();
+    property public static final androidx.compose.runtime.ProvidableCompositionLocal<java.lang.Float> LocalContentAlpha;
+  }
+
+  public final class ContentColorKt {
+    method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.graphics.Color> getLocalContentColor();
+    property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.graphics.Color> LocalContentColor;
+  }
+
+  public final class CurvedTextKt {
+    method public static void curvedText(androidx.wear.compose.foundation.CurvedScope, String text, optional androidx.wear.compose.foundation.CurvedModifier modifier, optional long background, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.wear.compose.foundation.CurvedTextStyle? style, optional androidx.wear.compose.foundation.CurvedDirection.Angular? angularDirection, optional int overflow);
+    method @Deprecated public static void curvedText(androidx.wear.compose.foundation.CurvedScope, String text, optional androidx.wear.compose.foundation.CurvedModifier modifier, optional long background, optional long color, optional long fontSize, optional androidx.wear.compose.foundation.CurvedTextStyle? style, optional androidx.wear.compose.foundation.CurvedDirection.Angular? angularDirection, optional int overflow);
+  }
+
+  public final class DefaultTimeSourceKt {
+  }
+
+  @kotlin.RequiresOptIn(message="This Wear Material API is experimental and is likely to change or to be removed in" + " the future.") public @interface ExperimentalWearMaterialApi {
+  }
+
+  @androidx.compose.runtime.Immutable @androidx.wear.compose.material.ExperimentalWearMaterialApi public final class FixedThreshold implements androidx.wear.compose.material.ThresholdConfig {
+    ctor public FixedThreshold(float offset);
+    method public float computeThreshold(androidx.compose.ui.unit.Density, float fromValue, float toValue);
+    method public androidx.wear.compose.material.FixedThreshold copy-0680j_4(float offset);
+  }
+
+  @androidx.compose.runtime.Immutable @androidx.wear.compose.material.ExperimentalWearMaterialApi public final class FractionalThreshold implements androidx.wear.compose.material.ThresholdConfig {
+    ctor public FractionalThreshold(float fraction);
+    method public float computeThreshold(androidx.compose.ui.unit.Density, float fromValue, float toValue);
+    method public androidx.wear.compose.material.FractionalThreshold copy(float fraction);
+  }
+
+  public final class HorizontalPageIndicatorKt {
+    method @androidx.compose.runtime.Composable public static void HorizontalPageIndicator(androidx.wear.compose.material.PageIndicatorState pageIndicatorState, optional androidx.compose.ui.Modifier modifier, optional int indicatorStyle, optional long selectedColor, optional long unselectedColor, optional float indicatorSize, optional float spacing, optional androidx.compose.ui.graphics.Shape indicatorShape);
+  }
+
+  public final class IconKt {
+    method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.vector.ImageVector imageVector, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
+    method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.ImageBitmap bitmap, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
+    method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.painter.Painter painter, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
+  }
+
+  @androidx.compose.runtime.Stable public interface InlineSliderColors {
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> backgroundColor(boolean enabled);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> barColor(boolean enabled, boolean selected);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> spacerColor(boolean enabled);
+  }
+
+  public final class InlineSliderDefaults {
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.InlineSliderColors colors(optional long backgroundColor, optional long spacerColor, optional long selectedBarColor, optional long unselectedBarColor, optional long disabledBackgroundColor, optional long disabledSpacerColor, optional long disabledSelectedBarColor, optional long disabledUnselectedBarColor);
+    method public androidx.compose.ui.graphics.vector.ImageVector getDecrease();
+    method public androidx.compose.ui.graphics.vector.ImageVector getIncrease();
+    property public final androidx.compose.ui.graphics.vector.ImageVector Decrease;
+    property public final androidx.compose.ui.graphics.vector.ImageVector Increase;
+    field public static final androidx.wear.compose.material.InlineSliderDefaults INSTANCE;
+  }
+
+  public final class ListHeaderKt {
+    method @androidx.compose.runtime.Composable public static void ListHeader(optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+  }
+
+  public final class MaterialTextSelectionColorsKt {
+  }
+
+  public final class MaterialTheme {
+    method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public androidx.wear.compose.material.Colors getColors();
+    method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public androidx.wear.compose.material.Shapes getShapes();
+    method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public androidx.wear.compose.material.Typography getTypography();
+    property @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public final androidx.wear.compose.material.Colors colors;
+    property @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public final androidx.wear.compose.material.Shapes shapes;
+    property @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public final androidx.wear.compose.material.Typography typography;
+    field public static final androidx.wear.compose.material.MaterialTheme INSTANCE;
+  }
+
+  public final class MaterialThemeKt {
+    method @androidx.compose.runtime.Composable public static void MaterialTheme(optional androidx.wear.compose.material.Colors colors, optional androidx.wear.compose.material.Typography typography, optional androidx.wear.compose.material.Shapes shapes, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+  }
+
+  public final class PageIndicatorDefaults {
+    method @androidx.compose.runtime.Composable public int style();
+    field public static final androidx.wear.compose.material.PageIndicatorDefaults INSTANCE;
+  }
+
+  public interface PageIndicatorState {
+    method public int getPageCount();
+    method public float getPageOffset();
+    method public int getSelectedPage();
+    property public abstract int pageCount;
+    property public abstract float pageOffset;
+    property public abstract int selectedPage;
+  }
+
+  @kotlin.jvm.JvmInline public final value class PageIndicatorStyle {
+    field public static final androidx.wear.compose.material.PageIndicatorStyle.Companion Companion;
+  }
+
+  public static final class PageIndicatorStyle.Companion {
+    method public int getCurved();
+    method public int getLinear();
+    property public final int Curved;
+    property public final int Linear;
+  }
+
+  public final class PickerDefaults {
+    method @androidx.compose.runtime.Composable public androidx.compose.foundation.gestures.FlingBehavior flingBehavior(androidx.wear.compose.material.PickerState state, optional androidx.compose.animation.core.DecayAnimationSpec<java.lang.Float> decay);
+    method public float getDefaultGradientRatio();
+    method public androidx.wear.compose.material.ScalingParams scalingParams(optional float edgeScale, optional float edgeAlpha, optional float minElementHeight, optional float maxElementHeight, optional float minTransitionArea, optional float maxTransitionArea, optional androidx.compose.animation.core.Easing scaleInterpolator, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Constraints,java.lang.Integer> viewportVerticalOffsetResolver);
+    property public final float DefaultGradientRatio;
+    field public static final androidx.wear.compose.material.PickerDefaults INSTANCE;
+  }
+
+  public final class PickerKt {
+    method @androidx.compose.runtime.Composable public static void Picker(androidx.wear.compose.material.PickerState state, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional boolean readOnly, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? readOnlyLabel, optional kotlin.jvm.functions.Function0<kotlin.Unit> onSelected, optional androidx.wear.compose.material.ScalingParams scalingParams, optional float separation, optional float gradientRatio, optional long gradientColor, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, kotlin.jvm.functions.Function2<? super androidx.wear.compose.material.PickerScope,? super java.lang.Integer,kotlin.Unit> option);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Picker(androidx.wear.compose.material.PickerState state, optional androidx.compose.ui.Modifier modifier, optional boolean readOnly, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? readOnlyLabel, optional androidx.wear.compose.material.ScalingParams scalingParams, optional float separation, optional float gradientRatio, optional long gradientColor, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, kotlin.jvm.functions.Function2<? super androidx.wear.compose.material.PickerScope,? super java.lang.Integer,kotlin.Unit> option);
+    method @androidx.compose.runtime.Composable public static androidx.wear.compose.material.PickerState rememberPickerState(int initialNumberOfOptions, optional int initiallySelectedOption, optional boolean repeatItems);
+  }
+
+  public interface PickerScope {
+    method public int getSelectedOption();
+    property public abstract int selectedOption;
+  }
+
+  @androidx.compose.runtime.Stable public final class PickerState implements androidx.compose.foundation.gestures.ScrollableState {
+    ctor public PickerState(int initialNumberOfOptions, optional int initiallySelectedOption, optional boolean repeatItems);
+    method public float dispatchRawDelta(float delta);
+    method public int getNumberOfOptions();
+    method public boolean getRepeatItems();
+    method public int getSelectedOption();
+    method public boolean isScrollInProgress();
+    method public suspend Object? scroll(androidx.compose.foundation.MutatePriority scrollPriority, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.gestures.ScrollScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    method public suspend Object? scrollToOption(int index, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    method public void setNumberOfOptions(int);
+    property public boolean isScrollInProgress;
+    property public final int numberOfOptions;
+    property public final boolean repeatItems;
+    property public final int selectedOption;
+    field public static final androidx.wear.compose.material.PickerState.Companion Companion;
+  }
+
+  public static final class PickerState.Companion {
+    method public androidx.compose.runtime.saveable.Saver<androidx.wear.compose.material.PickerState,java.lang.Object> getSaver();
+    property public final androidx.compose.runtime.saveable.Saver<androidx.wear.compose.material.PickerState,java.lang.Object> Saver;
+  }
+
+  @androidx.wear.compose.material.ExperimentalWearMaterialApi public final class PlaceholderDefaults {
+    method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.painter.Painter painterWithPlaceholderOverlayBackgroundBrush(androidx.wear.compose.material.PlaceholderState placeholderState, androidx.compose.ui.graphics.painter.Painter painter, optional long color);
+    method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.painter.Painter placeholderBackgroundBrush(androidx.wear.compose.material.PlaceholderState placeholderState, optional long color);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipColors placeholderChipColors(androidx.wear.compose.material.ChipColors originalChipColors, androidx.wear.compose.material.PlaceholderState placeholderState, optional long color);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipColors placeholderChipColors(androidx.wear.compose.material.PlaceholderState placeholderState, optional long color);
+    field public static final androidx.wear.compose.material.PlaceholderDefaults INSTANCE;
+  }
+
+  public final class PlaceholderKt {
+    method @androidx.compose.runtime.Composable @androidx.wear.compose.material.ExperimentalWearMaterialApi public static androidx.compose.ui.Modifier placeholder(androidx.compose.ui.Modifier, androidx.wear.compose.material.PlaceholderState placeholderState, optional androidx.compose.ui.graphics.Shape shape, optional long color);
+    method @androidx.compose.runtime.Composable @androidx.wear.compose.material.ExperimentalWearMaterialApi public static androidx.compose.ui.Modifier placeholderShimmer(androidx.compose.ui.Modifier, androidx.wear.compose.material.PlaceholderState placeholderState, optional androidx.compose.ui.graphics.Shape shape, optional long color);
+    method @androidx.compose.runtime.Composable @androidx.wear.compose.material.ExperimentalWearMaterialApi public static androidx.wear.compose.material.PlaceholderState rememberPlaceholderState(kotlin.jvm.functions.Function0<java.lang.Boolean> isContentReady);
+  }
+
+  @androidx.compose.runtime.Stable @androidx.wear.compose.material.ExperimentalWearMaterialApi public final class PlaceholderState {
+    method public float getPlaceholderProgression();
+    method public boolean isShowContent();
+    method public boolean isWipeOff();
+    method public suspend Object? startPlaceholderAnimation(kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    property public final boolean isShowContent;
+    property public final boolean isWipeOff;
+    property public final float placeholderProgression;
+  }
+
+  @kotlin.jvm.JvmInline public final value class PositionIndicatorAlignment {
+    field public static final androidx.wear.compose.material.PositionIndicatorAlignment.Companion Companion;
+  }
+
+  public static final class PositionIndicatorAlignment.Companion {
+    method public int getEnd();
+    method public int getLeft();
+    method public int getOppositeRsb();
+    method public int getRight();
+    property public final int End;
+    property public final int Left;
+    property public final int OppositeRsb;
+    property public final int Right;
+  }
+
+  public final class PositionIndicatorKt {
+    method @androidx.compose.runtime.Composable public static void PositionIndicator(androidx.compose.foundation.ScrollState scrollState, optional androidx.compose.ui.Modifier modifier, optional boolean reverseDirection);
+    method @androidx.compose.runtime.Composable public static void PositionIndicator(androidx.wear.compose.material.ScalingLazyListState scalingLazyListState, optional androidx.compose.ui.Modifier modifier, optional boolean reverseDirection);
+    method @androidx.compose.runtime.Composable public static void PositionIndicator(androidx.compose.foundation.lazy.LazyListState lazyListState, optional androidx.compose.ui.Modifier modifier, optional boolean reverseDirection);
+    method @androidx.compose.runtime.Composable public static void PositionIndicator(kotlin.jvm.functions.Function0<java.lang.Float> value, optional androidx.compose.ui.Modifier modifier, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> range, optional long color, optional boolean reverseDirection, optional int position);
+    method @androidx.compose.runtime.Composable public static void PositionIndicator(androidx.wear.compose.material.PositionIndicatorState state, float indicatorHeight, float indicatorWidth, float paddingHorizontal, optional androidx.compose.ui.Modifier modifier, optional long background, optional long color, optional boolean reverseDirection, optional int position);
+  }
+
+  @androidx.compose.runtime.Stable public interface PositionIndicatorState {
+    method public float getPositionFraction();
+    method public float sizeFraction(float scrollableContainerSizePx);
+    method public int visibility(float scrollableContainerSizePx);
+    property public abstract float positionFraction;
+  }
+
+  @kotlin.jvm.JvmInline public final value class PositionIndicatorVisibility {
+    field public static final androidx.wear.compose.material.PositionIndicatorVisibility.Companion Companion;
+  }
+
+  public static final class PositionIndicatorVisibility.Companion {
+    method public int getAutoHide();
+    method public int getHide();
+    method public int getShow();
+    property public final int AutoHide;
+    property public final int Hide;
+    property public final int Show;
+  }
+
+  public final class ProgressIndicatorDefaults {
+    method public androidx.compose.animation.core.SpringSpec<java.lang.Float> getProgressAnimationSpec();
+    method public float getStrokeWidth();
+    property public final androidx.compose.animation.core.SpringSpec<java.lang.Float> ProgressAnimationSpec;
+    property public final float StrokeWidth;
+    field public static final androidx.wear.compose.material.ProgressIndicatorDefaults INSTANCE;
+  }
+
+  public final class ProgressIndicatorKt {
+    method @androidx.compose.runtime.Composable public static void CircularProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional float startAngle, optional float endAngle, optional long indicatorColor, optional long trackColor, optional float strokeWidth);
+    method @androidx.compose.runtime.Composable public static void CircularProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional float startAngle, optional long indicatorColor, optional long trackColor, optional float strokeWidth);
+  }
+
+  @androidx.compose.runtime.Stable public interface RadioButtonColors {
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> dotColor(boolean enabled, boolean selected);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> ringColor(boolean enabled, boolean selected);
+  }
+
+  public final class RadioButtonDefaults {
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.RadioButtonColors colors(optional long selectedRingColor, optional long selectedDotColor, optional long unselectedRingColor, optional long unselectedDotColor);
+    field public static final androidx.wear.compose.material.RadioButtonDefaults INSTANCE;
+  }
+
+  public final class RangeDefaultsKt {
+  }
+
+  @androidx.compose.runtime.Immutable @androidx.wear.compose.material.ExperimentalWearMaterialApi public final class ResistanceConfig {
+    ctor public ResistanceConfig(float basis, optional float factorAtMin, optional float factorAtMax);
+    method public float computeResistance(float overflow);
+    method public float getBasis();
+    method public float getFactorAtMax();
+    method public float getFactorAtMin();
+    property public final float basis;
+    property public final float factorAtMax;
+    property public final float factorAtMin;
+  }
+
+  public final class Resources_androidKt {
+  }
+
+  public final class ScaffoldKt {
+    method @androidx.compose.runtime.Composable public static void Scaffold(optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? vignette, optional kotlin.jvm.functions.Function0<kotlin.Unit>? positionIndicator, optional kotlin.jvm.functions.Function0<kotlin.Unit>? pageIndicator, optional kotlin.jvm.functions.Function0<kotlin.Unit>? timeText, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+  }
+
+  public final class ScalingLazyColumnDefaults {
+    method public androidx.wear.compose.material.ScalingParams scalingParams(optional float edgeScale, optional float edgeAlpha, optional float minElementHeight, optional float maxElementHeight, optional float minTransitionArea, optional float maxTransitionArea, optional androidx.compose.animation.core.Easing scaleInterpolator, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Constraints,java.lang.Integer> viewportVerticalOffsetResolver);
+    method @androidx.compose.runtime.Composable public androidx.compose.foundation.gestures.FlingBehavior snapFlingBehavior(androidx.wear.compose.material.ScalingLazyListState state, optional float snapOffset, optional androidx.compose.animation.core.DecayAnimationSpec<java.lang.Float> decay);
+    field public static final androidx.wear.compose.material.ScalingLazyColumnDefaults INSTANCE;
+  }
+
+  public final class ScalingLazyColumnKt {
+    method @androidx.compose.runtime.Composable public static void ScalingLazyColumn(optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.material.ScalingLazyListState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.ui.Alignment.Horizontal horizontalAlignment, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, optional boolean userScrollEnabled, optional androidx.wear.compose.material.ScalingParams scalingParams, optional int anchorType, optional androidx.wear.compose.material.AutoCenteringParams? autoCentering, kotlin.jvm.functions.Function1<? super androidx.wear.compose.material.ScalingLazyListScope,kotlin.Unit> content);
+    method public static inline <T> void items(androidx.wear.compose.material.ScalingLazyListScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function1<? super T,?>? key, kotlin.jvm.functions.Function2<? super androidx.wear.compose.material.ScalingLazyListItemScope,? super T,kotlin.Unit> itemContent);
+    method public static inline <T> void items(androidx.wear.compose.material.ScalingLazyListScope, T![] items, optional kotlin.jvm.functions.Function1<? super T,?>? key, kotlin.jvm.functions.Function2<? super androidx.wear.compose.material.ScalingLazyListItemScope,? super T,kotlin.Unit> itemContent);
+    method public static inline <T> void itemsIndexed(androidx.wear.compose.material.ScalingLazyListScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, kotlin.jvm.functions.Function3<? super androidx.wear.compose.material.ScalingLazyListItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
+    method public static inline <T> void itemsIndexed(androidx.wear.compose.material.ScalingLazyListScope, T![] items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, kotlin.jvm.functions.Function3<? super androidx.wear.compose.material.ScalingLazyListItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
+  }
+
+  public final class ScalingLazyColumnMeasureKt {
+  }
+
+  @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class ScalingLazyListAnchorType {
+    field public static final androidx.wear.compose.material.ScalingLazyListAnchorType.Companion Companion;
+  }
+
+  public static final class ScalingLazyListAnchorType.Companion {
+    method public int getItemCenter();
+    method public int getItemStart();
+    property public final int ItemCenter;
+    property public final int ItemStart;
+  }
+
+  public sealed interface ScalingLazyListItemInfo {
+    method public float getAlpha();
+    method public int getIndex();
+    method public Object getKey();
+    method public int getOffset();
+    method public float getScale();
+    method public int getSize();
+    method public int getUnadjustedOffset();
+    method public int getUnadjustedSize();
+    property public abstract float alpha;
+    property public abstract int index;
+    property public abstract Object key;
+    property public abstract int offset;
+    property public abstract float scale;
+    property public abstract int size;
+    property public abstract int unadjustedOffset;
+    property public abstract int unadjustedSize;
+  }
+
+  @androidx.compose.runtime.Stable @androidx.wear.compose.material.ScalingLazyScopeMarker public sealed interface ScalingLazyListItemScope {
+    method public androidx.compose.ui.Modifier fillParentMaxHeight(androidx.compose.ui.Modifier, optional float fraction);
+    method public androidx.compose.ui.Modifier fillParentMaxSize(androidx.compose.ui.Modifier, optional float fraction);
+    method public androidx.compose.ui.Modifier fillParentMaxWidth(androidx.compose.ui.Modifier, optional float fraction);
+  }
+
+  public sealed interface ScalingLazyListLayoutInfo {
+    method public int getAfterAutoCenteringPadding();
+    method public int getAfterContentPadding();
+    method public int getBeforeAutoCenteringPadding();
+    method public int getBeforeContentPadding();
+    method public androidx.compose.foundation.gestures.Orientation getOrientation();
+    method public boolean getReverseLayout();
+    method public int getTotalItemsCount();
+    method public int getViewportEndOffset();
+    method public long getViewportSize();
+    method public int getViewportStartOffset();
+    method public java.util.List<androidx.wear.compose.material.ScalingLazyListItemInfo> getVisibleItemsInfo();
+    property public abstract int afterAutoCenteringPadding;
+    property public abstract int afterContentPadding;
+    property public abstract int beforeAutoCenteringPadding;
+    property public abstract int beforeContentPadding;
+    property public abstract androidx.compose.foundation.gestures.Orientation orientation;
+    property public abstract boolean reverseLayout;
+    property public abstract int totalItemsCount;
+    property public abstract int viewportEndOffset;
+    property public abstract long viewportSize;
+    property public abstract int viewportStartOffset;
+    property public abstract java.util.List<androidx.wear.compose.material.ScalingLazyListItemInfo> visibleItemsInfo;
+  }
+
+  @androidx.wear.compose.material.ScalingLazyScopeMarker public sealed interface ScalingLazyListScope {
+    method public void item(optional Object? key, kotlin.jvm.functions.Function1<? super androidx.wear.compose.material.ScalingLazyListItemScope,kotlin.Unit> content);
+    method public void items(int count, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,?>? key, kotlin.jvm.functions.Function2<? super androidx.wear.compose.material.ScalingLazyListItemScope,? super java.lang.Integer,kotlin.Unit> itemContent);
+  }
+
+  @androidx.compose.runtime.Stable public final class ScalingLazyListState implements androidx.compose.foundation.gestures.ScrollableState {
+    ctor public ScalingLazyListState(optional int initialCenterItemIndex, optional int initialCenterItemScrollOffset);
+    method public suspend Object? animateScrollToItem(int index, optional int scrollOffset, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    method public float dispatchRawDelta(float delta);
+    method public int getCenterItemIndex();
+    method public int getCenterItemScrollOffset();
+    method public androidx.wear.compose.material.ScalingLazyListLayoutInfo getLayoutInfo();
+    method public boolean isScrollInProgress();
+    method public suspend Object? scroll(androidx.compose.foundation.MutatePriority scrollPriority, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.gestures.ScrollScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    method public suspend Object? scrollToItem(int index, optional int scrollOffset, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    property public final int centerItemIndex;
+    property public final int centerItemScrollOffset;
+    property public boolean isScrollInProgress;
+    property public final androidx.wear.compose.material.ScalingLazyListLayoutInfo layoutInfo;
+    field public static final androidx.wear.compose.material.ScalingLazyListState.Companion Companion;
+  }
+
+  public static final class ScalingLazyListState.Companion {
+    method public androidx.compose.runtime.saveable.Saver<androidx.wear.compose.material.ScalingLazyListState,java.lang.Object> getSaver();
+    property public final androidx.compose.runtime.saveable.Saver<androidx.wear.compose.material.ScalingLazyListState,java.lang.Object> Saver;
+  }
+
+  public final class ScalingLazyListStateKt {
+    method @androidx.compose.runtime.Composable public static androidx.wear.compose.material.ScalingLazyListState rememberScalingLazyListState(optional int initialCenterItemIndex, optional int initialCenterItemScrollOffset);
+  }
+
+  @kotlin.DslMarker public @interface ScalingLazyScopeMarker {
+  }
+
+  @androidx.compose.runtime.Stable public interface ScalingParams {
+    method public float getEdgeAlpha();
+    method public float getEdgeScale();
+    method public float getMaxElementHeight();
+    method public float getMaxTransitionArea();
+    method public float getMinElementHeight();
+    method public float getMinTransitionArea();
+    method public androidx.compose.animation.core.Easing getScaleInterpolator();
+    method public int resolveViewportVerticalOffset(long viewportConstraints);
+    property public abstract float edgeAlpha;
+    property public abstract float edgeScale;
+    property public abstract float maxElementHeight;
+    property public abstract float maxTransitionArea;
+    property public abstract float minElementHeight;
+    property public abstract float minTransitionArea;
+    property public abstract androidx.compose.animation.core.Easing scaleInterpolator;
+  }
+
+  public final class ScrollAwayKt {
+    method public static androidx.compose.ui.Modifier scrollAway(androidx.compose.ui.Modifier, androidx.compose.foundation.ScrollState scrollState, optional float offset);
+    method public static androidx.compose.ui.Modifier scrollAway(androidx.compose.ui.Modifier, androidx.compose.foundation.lazy.LazyListState scrollState, optional int itemIndex, optional float offset);
+    method public static androidx.compose.ui.Modifier scrollAway(androidx.compose.ui.Modifier, androidx.wear.compose.material.ScalingLazyListState scrollState, optional int itemIndex, optional float offset);
+  }
+
+  @androidx.compose.runtime.Immutable public final class Shapes {
+    ctor public Shapes(optional androidx.compose.foundation.shape.CornerBasedShape small, optional androidx.compose.foundation.shape.CornerBasedShape medium, optional androidx.compose.foundation.shape.CornerBasedShape large);
+    method public androidx.wear.compose.material.Shapes copy(optional androidx.compose.foundation.shape.CornerBasedShape small, optional androidx.compose.foundation.shape.CornerBasedShape medium, optional androidx.compose.foundation.shape.CornerBasedShape large);
+    method public androidx.compose.foundation.shape.CornerBasedShape getLarge();
+    method public androidx.compose.foundation.shape.CornerBasedShape getMedium();
+    method public androidx.compose.foundation.shape.CornerBasedShape getSmall();
+    property public final androidx.compose.foundation.shape.CornerBasedShape large;
+    property public final androidx.compose.foundation.shape.CornerBasedShape medium;
+    property public final androidx.compose.foundation.shape.CornerBasedShape small;
+  }
+
+  public final class ShapesKt {
+  }
+
+  public final class SliderKt {
+    method @androidx.compose.runtime.Composable public static void InlineSlider(float value, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onValueChange, int steps, kotlin.jvm.functions.Function0<kotlin.Unit> decreaseIcon, kotlin.jvm.functions.Function0<kotlin.Unit> increaseIcon, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange, optional boolean segmented, optional androidx.wear.compose.material.InlineSliderColors colors);
+    method @androidx.compose.runtime.Composable public static void InlineSlider(int value, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> onValueChange, kotlin.ranges.IntProgression valueProgression, kotlin.jvm.functions.Function0<kotlin.Unit> decreaseIcon, kotlin.jvm.functions.Function0<kotlin.Unit> increaseIcon, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean segmented, optional androidx.wear.compose.material.InlineSliderColors colors);
+  }
+
+  @androidx.compose.runtime.Stable public interface SplitToggleChipColors {
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> backgroundColor(boolean enabled);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> contentColor(boolean enabled);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> secondaryContentColor(boolean enabled);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> splitBackgroundOverlay(boolean enabled, boolean checked);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> toggleControlColor(boolean enabled, boolean checked);
+  }
+
+  public final class StepperDefaults {
+    method public androidx.compose.ui.graphics.vector.ImageVector getDecrease();
+    method public androidx.compose.ui.graphics.vector.ImageVector getIncrease();
+    property public final androidx.compose.ui.graphics.vector.ImageVector Decrease;
+    property public final androidx.compose.ui.graphics.vector.ImageVector Increase;
+    field public static final androidx.wear.compose.material.StepperDefaults INSTANCE;
+  }
+
+  public final class StepperKt {
+    method @androidx.compose.runtime.Composable public static void Stepper(float value, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onValueChange, int steps, kotlin.jvm.functions.Function0<kotlin.Unit> decreaseIcon, kotlin.jvm.functions.Function0<kotlin.Unit> increaseIcon, optional androidx.compose.ui.Modifier modifier, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange, optional long backgroundColor, optional long contentColor, optional long iconColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void Stepper(int value, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> onValueChange, kotlin.ranges.IntProgression valueProgression, kotlin.jvm.functions.Function0<kotlin.Unit> decreaseIcon, kotlin.jvm.functions.Function0<kotlin.Unit> increaseIcon, optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional long iconColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+  }
+
+  @androidx.compose.runtime.Immutable @androidx.wear.compose.material.ExperimentalWearMaterialApi public final class SwipeProgress<T> {
+    ctor public SwipeProgress(T? from, T? to, float fraction);
+    method public float getFraction();
+    method public T! getFrom();
+    method public T! getTo();
+    property public final float fraction;
+    property public final T! from;
+    property public final T! to;
+  }
+
+  public final class SwipeToDismissBoxDefaults {
+    method public androidx.compose.animation.core.SpringSpec<java.lang.Float> getAnimationSpec();
+    method public float getEdgeWidth();
+    property public final androidx.compose.animation.core.SpringSpec<java.lang.Float> AnimationSpec;
+    property public final float EdgeWidth;
+    field public static final androidx.wear.compose.material.SwipeToDismissBoxDefaults INSTANCE;
+  }
+
+  public final class SwipeToDismissBoxKt {
+    method @androidx.compose.runtime.Composable public static void SwipeToDismissBox(androidx.wear.compose.material.SwipeToDismissBoxState state, optional androidx.compose.ui.Modifier modifier, optional long backgroundScrimColor, optional long contentScrimColor, optional Object backgroundKey, optional Object contentKey, optional boolean hasBackground, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.layout.BoxScope,? super java.lang.Boolean,kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void SwipeToDismissBox(kotlin.jvm.functions.Function0<kotlin.Unit> onDismissed, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.material.SwipeToDismissBoxState state, optional long backgroundScrimColor, optional long contentScrimColor, optional Object backgroundKey, optional Object contentKey, optional boolean hasBackground, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.layout.BoxScope,? super java.lang.Boolean,kotlin.Unit> content);
+    method public static androidx.compose.ui.Modifier edgeSwipeToDismiss(androidx.compose.ui.Modifier, androidx.wear.compose.material.SwipeToDismissBoxState swipeToDismissBoxState, optional float edgeWidth);
+    method @androidx.compose.runtime.Composable public static androidx.wear.compose.material.SwipeToDismissBoxState rememberSwipeToDismissBoxState(optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.wear.compose.material.SwipeToDismissValue,java.lang.Boolean> confirmStateChange);
+  }
+
+  @androidx.compose.runtime.Stable public final class SwipeToDismissBoxState {
+    ctor public SwipeToDismissBoxState(optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.wear.compose.material.SwipeToDismissValue,java.lang.Boolean> confirmStateChange);
+    method public androidx.wear.compose.material.SwipeToDismissValue getCurrentValue();
+    method public androidx.wear.compose.material.SwipeToDismissValue getTargetValue();
+    method public boolean isAnimationRunning();
+    method public suspend Object? snapTo(androidx.wear.compose.material.SwipeToDismissValue targetValue, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    property public final androidx.wear.compose.material.SwipeToDismissValue currentValue;
+    property public final boolean isAnimationRunning;
+    property public final androidx.wear.compose.material.SwipeToDismissValue targetValue;
+  }
+
+  public enum SwipeToDismissKeys {
+    method public static androidx.wear.compose.material.SwipeToDismissKeys valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.wear.compose.material.SwipeToDismissKeys[] values();
+    enum_constant public static final androidx.wear.compose.material.SwipeToDismissKeys Background;
+    enum_constant public static final androidx.wear.compose.material.SwipeToDismissKeys Content;
+  }
+
+  public enum SwipeToDismissValue {
+    method public static androidx.wear.compose.material.SwipeToDismissValue valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.wear.compose.material.SwipeToDismissValue[] values();
+    enum_constant public static final androidx.wear.compose.material.SwipeToDismissValue Default;
+    enum_constant public static final androidx.wear.compose.material.SwipeToDismissValue Dismissed;
+  }
+
+  @androidx.wear.compose.material.ExperimentalWearMaterialApi public final class SwipeableDefaults {
+    method public androidx.compose.animation.core.SpringSpec<java.lang.Float> getAnimationSpec();
+    method public float getVelocityThreshold();
+    method public androidx.wear.compose.material.ResistanceConfig? resistanceConfig(java.util.Set<java.lang.Float> anchors, optional float factorAtMin, optional float factorAtMax);
+    property public final androidx.compose.animation.core.SpringSpec<java.lang.Float> AnimationSpec;
+    property public final float VelocityThreshold;
+    field public static final androidx.wear.compose.material.SwipeableDefaults INSTANCE;
+    field public static final float StandardResistanceFactor = 10.0f;
+    field public static final float StiffResistanceFactor = 20.0f;
+  }
+
+  public final class SwipeableKt {
+    method @androidx.compose.runtime.Composable @androidx.wear.compose.material.ExperimentalWearMaterialApi public static <T> androidx.wear.compose.material.SwipeableState<T> rememberSwipeableState(T initialValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> confirmStateChange);
+    method @androidx.wear.compose.material.ExperimentalWearMaterialApi public static <T> androidx.compose.ui.Modifier swipeable(androidx.compose.ui.Modifier, androidx.wear.compose.material.SwipeableState<T> state, java.util.Map<java.lang.Float,? extends T> anchors, androidx.compose.foundation.gestures.Orientation orientation, optional boolean enabled, optional boolean reverseDirection, optional androidx.compose.foundation.interaction.MutableInteractionSource? interactionSource, optional kotlin.jvm.functions.Function2<? super T,? super T,? extends androidx.wear.compose.material.ThresholdConfig> thresholds, optional androidx.wear.compose.material.ResistanceConfig? resistance, optional float velocityThreshold);
+  }
+
+  @androidx.compose.runtime.Stable @androidx.wear.compose.material.ExperimentalWearMaterialApi public class SwipeableState<T> {
+    ctor public SwipeableState(T? initialValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> confirmStateChange);
+    method @androidx.wear.compose.material.ExperimentalWearMaterialApi public final suspend Object? animateTo(T? targetValue, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> anim, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    method public final T! getCurrentValue();
+    method public final float getDirection();
+    method public final androidx.compose.runtime.State<java.lang.Float> getOffset();
+    method public final androidx.compose.runtime.State<java.lang.Float> getOverflow();
+    method public final androidx.wear.compose.material.SwipeProgress<T> getProgress();
+    method public final T! getTargetValue();
+    method public final boolean isAnimationRunning();
+    method @androidx.wear.compose.material.ExperimentalWearMaterialApi public final suspend Object? performFling(float velocity, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    method @androidx.wear.compose.material.ExperimentalWearMaterialApi public final suspend Object? snapTo(T? targetValue, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    property public final T! currentValue;
+    property public final float direction;
+    property public final boolean isAnimationRunning;
+    property public final androidx.compose.runtime.State<java.lang.Float> offset;
+    property public final androidx.compose.runtime.State<java.lang.Float> overflow;
+    property public final androidx.wear.compose.material.SwipeProgress<T> progress;
+    property public final T! targetValue;
+    field public static final androidx.wear.compose.material.SwipeableState.Companion Companion;
+  }
+
+  public static final class SwipeableState.Companion {
+    method public <T> androidx.compose.runtime.saveable.Saver<androidx.wear.compose.material.SwipeableState<T>,T> Saver(androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> confirmStateChange);
+  }
+
+  @androidx.compose.runtime.Stable public interface SwitchColors {
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> thumbColor(boolean enabled, boolean checked);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> trackColor(boolean enabled, boolean checked);
+  }
+
+  public final class SwitchDefaults {
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.SwitchColors colors(optional long checkedThumbColor, optional long checkedTrackColor, optional long uncheckedThumbColor, optional long uncheckedTrackColor);
+    field public static final androidx.wear.compose.material.SwitchDefaults INSTANCE;
+  }
+
+  public final class TextKt {
+    method @androidx.compose.runtime.Composable public static void ProvideTextStyle(androidx.compose.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+    method @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+    method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> getLocalTextStyle();
+    property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> LocalTextStyle;
+  }
+
+  @androidx.compose.runtime.Stable @androidx.wear.compose.material.ExperimentalWearMaterialApi public interface ThresholdConfig {
+    method public float computeThreshold(androidx.compose.ui.unit.Density, float fromValue, float toValue);
+  }
+
+  public interface TimeSource {
+    method @androidx.compose.runtime.Composable public String getCurrentTime();
+    property @androidx.compose.runtime.Composable public abstract String currentTime;
+  }
+
+  public final class TimeTextDefaults {
+    method public void CurvedTextSeparator(androidx.wear.compose.foundation.CurvedScope, optional androidx.wear.compose.foundation.CurvedTextStyle? curvedTextStyle, optional androidx.wear.compose.foundation.ArcPaddingValues contentArcPadding);
+    method @androidx.compose.runtime.Composable public void TextSeparator(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.layout.PaddingValues contentPadding);
+    method public androidx.compose.foundation.layout.PaddingValues getContentPadding();
+    method @androidx.compose.runtime.Composable public String timeFormat();
+    method public androidx.wear.compose.material.TimeSource timeSource(String timeFormat);
+    method @androidx.compose.runtime.Composable public androidx.compose.ui.text.TextStyle timeTextStyle(optional long background, optional long color, optional long fontSize);
+    property public final androidx.compose.foundation.layout.PaddingValues ContentPadding;
+    field public static final androidx.wear.compose.material.TimeTextDefaults INSTANCE;
+    field public static final String TimeFormat12Hours = "h:mm a";
+    field public static final String TimeFormat24Hours = "HH:mm";
+  }
+
+  public final class TimeTextKt {
+    method @androidx.compose.runtime.Composable public static void TimeText(optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.material.TimeSource timeSource, optional androidx.compose.ui.text.TextStyle timeTextStyle, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional kotlin.jvm.functions.Function0<kotlin.Unit>? startLinearContent, optional kotlin.jvm.functions.Function1<? super androidx.wear.compose.foundation.CurvedScope,kotlin.Unit>? startCurvedContent, optional kotlin.jvm.functions.Function0<kotlin.Unit>? endLinearContent, optional kotlin.jvm.functions.Function1<? super androidx.wear.compose.foundation.CurvedScope,kotlin.Unit>? endCurvedContent, optional kotlin.jvm.functions.Function0<kotlin.Unit> textLinearSeparator, optional kotlin.jvm.functions.Function1<? super androidx.wear.compose.foundation.CurvedScope,kotlin.Unit> textCurvedSeparator);
+  }
+
+  @androidx.compose.runtime.Stable public interface ToggleButtonColors {
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> backgroundColor(boolean enabled, boolean checked);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> contentColor(boolean enabled, boolean checked);
+  }
+
+  public final class ToggleButtonDefaults {
+    method public float getDefaultIconSize();
+    method public float getDefaultToggleButtonSize();
+    method public float getSmallIconSize();
+    method public float getSmallToggleButtonSize();
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ToggleButtonColors toggleButtonColors(optional long checkedBackgroundColor, optional long checkedContentColor, optional long disabledCheckedBackgroundColor, optional long disabledCheckedContentColor, optional long uncheckedBackgroundColor, optional long uncheckedContentColor, optional long disabledUncheckedBackgroundColor, optional long disabledUncheckedContentColor);
+    property public final float DefaultIconSize;
+    property public final float DefaultToggleButtonSize;
+    property public final float SmallIconSize;
+    property public final float SmallToggleButtonSize;
+    field public static final androidx.wear.compose.material.ToggleButtonDefaults INSTANCE;
+  }
+
+  public final class ToggleButtonKt {
+    method @androidx.compose.runtime.Composable public static void ToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ToggleButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void ToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,? extends kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ToggleButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit> content);
+  }
+
+  @androidx.compose.runtime.Stable public interface ToggleChipColors {
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.painter.Painter> background(boolean enabled, boolean checked);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> contentColor(boolean enabled, boolean checked);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> secondaryContentColor(boolean enabled, boolean checked);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> toggleControlColor(boolean enabled, boolean checked);
+  }
+
+  public final class ToggleChipDefaults {
+    method public androidx.compose.ui.graphics.vector.ImageVector checkboxIcon(boolean checked);
+    method public androidx.compose.ui.graphics.vector.ImageVector getCheckboxOn();
+    method public androidx.compose.foundation.layout.PaddingValues getContentPadding();
+    method public float getIconSize();
+    method public androidx.compose.ui.graphics.vector.ImageVector getRadioOff();
+    method public androidx.compose.ui.graphics.vector.ImageVector getRadioOn();
+    method @androidx.compose.runtime.Composable public long getSwitchUncheckedIconColor();
+    method public androidx.compose.ui.graphics.vector.ImageVector radioIcon(boolean checked);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.SplitToggleChipColors splitToggleChipColors(optional long backgroundColor, optional long contentColor, optional long secondaryContentColor, optional long checkedToggleControlColor, optional long uncheckedToggleControlColor, optional long splitBackgroundOverlayColor);
+    method public androidx.compose.ui.graphics.vector.ImageVector switchIcon(boolean checked);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ToggleChipColors toggleChipColors(optional long checkedStartBackgroundColor, optional long checkedEndBackgroundColor, optional long checkedContentColor, optional long checkedSecondaryContentColor, optional long checkedToggleControlColor, optional long uncheckedStartBackgroundColor, optional long uncheckedEndBackgroundColor, optional long uncheckedContentColor, optional long uncheckedSecondaryContentColor, optional long uncheckedToggleControlColor, optional androidx.compose.ui.unit.LayoutDirection gradientDirection);
+    property public final androidx.compose.ui.graphics.vector.ImageVector CheckboxOn;
+    property public final androidx.compose.foundation.layout.PaddingValues ContentPadding;
+    property public final float IconSize;
+    property public final androidx.compose.ui.graphics.vector.ImageVector RadioOff;
+    property public final androidx.compose.ui.graphics.vector.ImageVector RadioOn;
+    property @androidx.compose.runtime.Composable public final long SwitchUncheckedIconColor;
+    field public static final androidx.wear.compose.material.ToggleChipDefaults INSTANCE;
+  }
+
+  public final class ToggleChipKt {
+    method @androidx.compose.runtime.Composable public static void SplitToggleChip(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> label, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> toggleControl, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? secondaryLabel, optional androidx.wear.compose.material.SplitToggleChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource checkedInteractionSource, optional androidx.compose.foundation.interaction.MutableInteractionSource clickInteractionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape);
+    method @androidx.compose.runtime.Composable public static void ToggleChip(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> label, kotlin.jvm.functions.Function0<kotlin.Unit> toggleControl, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? appIcon, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? secondaryLabel, optional androidx.wear.compose.material.ToggleChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape);
+  }
+
+  public final class ToggleControlKt {
+    method @androidx.compose.runtime.Composable public static void Checkbox(boolean checked, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.material.CheckboxColors colors, optional boolean enabled, optional kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onCheckedChange, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource);
+    method @androidx.compose.runtime.Composable public static void RadioButton(boolean selected, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.material.RadioButtonColors colors, optional boolean enabled, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onClick, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource);
+    method @androidx.compose.runtime.Composable public static void Switch(boolean checked, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.material.SwitchColors colors, optional boolean enabled, optional kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onCheckedChange, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource);
+  }
+
+  @androidx.compose.runtime.Immutable public final class Typography {
+    ctor public Typography(optional androidx.compose.ui.text.font.FontFamily defaultFontFamily, optional androidx.compose.ui.text.TextStyle display1, optional androidx.compose.ui.text.TextStyle display2, optional androidx.compose.ui.text.TextStyle display3, optional androidx.compose.ui.text.TextStyle title1, optional androidx.compose.ui.text.TextStyle title2, optional androidx.compose.ui.text.TextStyle title3, optional androidx.compose.ui.text.TextStyle body1, optional androidx.compose.ui.text.TextStyle body2, optional androidx.compose.ui.text.TextStyle button, optional androidx.compose.ui.text.TextStyle caption1, optional androidx.compose.ui.text.TextStyle caption2, optional androidx.compose.ui.text.TextStyle caption3);
+    method public androidx.wear.compose.material.Typography copy(optional androidx.compose.ui.text.TextStyle display1, optional androidx.compose.ui.text.TextStyle display2, optional androidx.compose.ui.text.TextStyle display3, optional androidx.compose.ui.text.TextStyle title1, optional androidx.compose.ui.text.TextStyle title2, optional androidx.compose.ui.text.TextStyle title3, optional androidx.compose.ui.text.TextStyle body1, optional androidx.compose.ui.text.TextStyle body2, optional androidx.compose.ui.text.TextStyle button, optional androidx.compose.ui.text.TextStyle caption1, optional androidx.compose.ui.text.TextStyle caption2, optional androidx.compose.ui.text.TextStyle caption3);
+    method public androidx.compose.ui.text.TextStyle getBody1();
+    method public androidx.compose.ui.text.TextStyle getBody2();
+    method public androidx.compose.ui.text.TextStyle getButton();
+    method public androidx.compose.ui.text.TextStyle getCaption1();
+    method public androidx.compose.ui.text.TextStyle getCaption2();
+    method public androidx.compose.ui.text.TextStyle getCaption3();
+    method public androidx.compose.ui.text.TextStyle getDisplay1();
+    method public androidx.compose.ui.text.TextStyle getDisplay2();
+    method public androidx.compose.ui.text.TextStyle getDisplay3();
+    method public androidx.compose.ui.text.TextStyle getTitle1();
+    method public androidx.compose.ui.text.TextStyle getTitle2();
+    method public androidx.compose.ui.text.TextStyle getTitle3();
+    property public final androidx.compose.ui.text.TextStyle body1;
+    property public final androidx.compose.ui.text.TextStyle body2;
+    property public final androidx.compose.ui.text.TextStyle button;
+    property public final androidx.compose.ui.text.TextStyle caption1;
+    property public final androidx.compose.ui.text.TextStyle caption2;
+    property public final androidx.compose.ui.text.TextStyle caption3;
+    property public final androidx.compose.ui.text.TextStyle display1;
+    property public final androidx.compose.ui.text.TextStyle display2;
+    property public final androidx.compose.ui.text.TextStyle display3;
+    property public final androidx.compose.ui.text.TextStyle title1;
+    property public final androidx.compose.ui.text.TextStyle title2;
+    property public final androidx.compose.ui.text.TextStyle title3;
+  }
+
+  public final class TypographyKt {
+  }
+
+  public final class VignetteKt {
+    method @androidx.compose.runtime.Composable public static void Vignette(int vignettePosition, optional androidx.compose.ui.Modifier modifier);
+  }
+
+  @kotlin.jvm.JvmInline public final value class VignettePosition {
+    ctor public VignettePosition(int key);
+    field public static final androidx.wear.compose.material.VignettePosition.Companion Companion;
+  }
+
+  public static final class VignettePosition.Companion {
+    method public int getBottom();
+    method public int getTop();
+    method public int getTopAndBottom();
+    property public final int Bottom;
+    property public final int Top;
+    property public final int TopAndBottom;
+  }
+
+}
+
+package androidx.wear.compose.material.dialog {
+
+  public final class DialogDefaults {
+    method public androidx.compose.foundation.layout.Arrangement.Vertical getAlertVerticalArrangement();
+    method public androidx.compose.foundation.layout.Arrangement.Vertical getConfirmationVerticalArrangement();
+    method public androidx.compose.foundation.layout.PaddingValues getContentPadding();
+    method public long getIndefiniteDurationMillis();
+    method public long getLongDurationMillis();
+    method public long getShortDurationMillis();
+    property public final androidx.compose.foundation.layout.Arrangement.Vertical AlertVerticalArrangement;
+    property public final androidx.compose.foundation.layout.Arrangement.Vertical ConfirmationVerticalArrangement;
+    property public final androidx.compose.foundation.layout.PaddingValues ContentPadding;
+    property public final long IndefiniteDurationMillis;
+    property public final long LongDurationMillis;
+    property public final long ShortDurationMillis;
+    field public static final androidx.wear.compose.material.dialog.DialogDefaults INSTANCE;
+  }
+
+  public final class DialogKt {
+    method @androidx.compose.runtime.Composable public static void Alert(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> title, kotlin.jvm.functions.Function0<kotlin.Unit> negativeButton, kotlin.jvm.functions.Function0<kotlin.Unit> positiveButton, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ScalingLazyListState scrollState, optional long backgroundColor, optional long contentColor, optional long titleColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? content);
+    method @androidx.compose.runtime.Composable public static void Alert(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? icon, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? message, optional androidx.wear.compose.material.ScalingLazyListState scrollState, optional long backgroundColor, optional long titleColor, optional long messageColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.wear.compose.material.ScalingLazyListScope,kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void Confirmation(kotlin.jvm.functions.Function0<kotlin.Unit> onTimeout, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ScalingLazyListState scrollState, optional long durationMillis, optional long backgroundColor, optional long contentColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
+  }
+
+  public final class Dialog_androidKt {
+    method @androidx.compose.runtime.Composable public static void Dialog(boolean showDialog, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.material.ScalingLazyListState? scrollState, optional androidx.compose.ui.window.DialogProperties properties, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+  }
+
+}
+
diff --git a/wear/compose/compose-material/api/res-1.1.0-beta01.txt b/wear/compose/compose-material/api/res-1.1.0-beta01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/wear/compose/compose-material/api/res-1.1.0-beta01.txt
diff --git a/wear/compose/compose-material/api/restricted_1.1.0-beta01.txt b/wear/compose/compose-material/api/restricted_1.1.0-beta01.txt
new file mode 100644
index 0000000..7c9473c
--- /dev/null
+++ b/wear/compose/compose-material/api/restricted_1.1.0-beta01.txt
@@ -0,0 +1,784 @@
+// Signature format: 4.0
+package androidx.wear.compose.material {
+
+  public final class AnimationKt {
+  }
+
+  @androidx.compose.runtime.Immutable public final class AutoCenteringParams {
+    ctor public AutoCenteringParams(optional int itemIndex, optional int itemOffset);
+  }
+
+  @androidx.compose.runtime.Stable public interface ButtonBorder {
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.foundation.BorderStroke> borderStroke(boolean enabled);
+  }
+
+  @androidx.compose.runtime.Stable public interface ButtonColors {
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> backgroundColor(boolean enabled);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> contentColor(boolean enabled);
+  }
+
+  public final class ButtonDefaults {
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ButtonBorder buttonBorder(optional androidx.compose.foundation.BorderStroke? borderStroke, optional androidx.compose.foundation.BorderStroke? disabledBorderStroke);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ButtonColors buttonColors(optional long backgroundColor, optional long contentColor, optional long disabledBackgroundColor, optional long disabledContentColor);
+    method public float getCompactButtonBackgroundPadding();
+    method public float getDefaultButtonSize();
+    method public float getDefaultIconSize();
+    method public float getExtraSmallButtonSize();
+    method public float getLargeButtonSize();
+    method public float getLargeIconSize();
+    method public float getSmallButtonSize();
+    method public float getSmallIconSize();
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ButtonColors iconButtonColors(optional long contentColor);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ButtonBorder outlinedButtonBorder(optional long borderColor, optional long disabledBorderColor, optional float borderWidth);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ButtonColors outlinedButtonColors(optional long contentColor);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ButtonColors primaryButtonColors(optional long backgroundColor, optional long contentColor);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ButtonColors secondaryButtonColors(optional long backgroundColor, optional long contentColor);
+    property public final float CompactButtonBackgroundPadding;
+    property public final float DefaultButtonSize;
+    property public final float DefaultIconSize;
+    property public final float ExtraSmallButtonSize;
+    property public final float LargeButtonSize;
+    property public final float LargeIconSize;
+    property public final float SmallButtonSize;
+    property public final float SmallIconSize;
+    field public static final androidx.wear.compose.material.ButtonDefaults INSTANCE;
+  }
+
+  public final class ButtonKt {
+    method @androidx.compose.runtime.Composable public static void Button(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ButtonBorder border, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Button(kotlin.jvm.functions.Function0<? extends kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void CompactButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional float backgroundPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ButtonBorder border, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void CompactButton(kotlin.jvm.functions.Function0<? extends kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional float backgroundPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void OutlinedButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ButtonBorder border, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void OutlinedCompactButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional float backgroundPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ButtonBorder border, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+  }
+
+  public final class CardDefaults {
+    method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.painter.Painter cardBackgroundPainter(optional long startBackgroundColor, optional long endBackgroundColor, optional androidx.compose.ui.unit.LayoutDirection gradientDirection);
+    method public float getAppImageSize();
+    method public androidx.compose.foundation.layout.PaddingValues getContentPadding();
+    method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.painter.Painter imageWithScrimBackgroundPainter(androidx.compose.ui.graphics.painter.Painter backgroundImagePainter, optional androidx.compose.ui.graphics.Brush backgroundImageScrimBrush);
+    property public final float AppImageSize;
+    property public final androidx.compose.foundation.layout.PaddingValues ContentPadding;
+    field public static final androidx.wear.compose.material.CardDefaults INSTANCE;
+  }
+
+  public final class CardKt {
+    method @androidx.compose.runtime.Composable public static void AppCard(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> appName, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> time, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? appImage, optional androidx.compose.ui.graphics.painter.Painter backgroundPainter, optional long contentColor, optional long appColor, optional long timeColor, optional long titleColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void Card(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.graphics.painter.Painter backgroundPainter, optional long contentColor, optional boolean enabled, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void TitleCard(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? time, optional androidx.compose.ui.graphics.painter.Painter backgroundPainter, optional long contentColor, optional long titleColor, optional long timeColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
+  }
+
+  @androidx.compose.runtime.Stable public interface CheckboxColors {
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> boxColor(boolean enabled, boolean checked);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> checkmarkColor(boolean enabled, boolean checked);
+  }
+
+  public final class CheckboxDefaults {
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.CheckboxColors colors(optional long checkedBoxColor, optional long checkedCheckmarkColor, optional long uncheckedBoxColor, optional long uncheckedCheckmarkColor);
+    field public static final androidx.wear.compose.material.CheckboxDefaults INSTANCE;
+  }
+
+  @androidx.compose.runtime.Stable public interface ChipBorder {
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.foundation.BorderStroke> borderStroke(boolean enabled);
+  }
+
+  @androidx.compose.runtime.Stable public interface ChipColors {
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.painter.Painter> background(boolean enabled);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> contentColor(boolean enabled);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> iconColor(boolean enabled);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> secondaryContentColor(boolean enabled);
+  }
+
+  public final class ChipDefaults {
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipColors childChipColors(optional long contentColor, optional long secondaryContentColor, optional long iconColor);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipBorder chipBorder(optional androidx.compose.foundation.BorderStroke? borderStroke, optional androidx.compose.foundation.BorderStroke? disabledBorderStroke);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipColors chipColors(optional long backgroundColor, optional long contentColor, optional long secondaryContentColor, optional long iconColor, optional long disabledBackgroundColor, optional long disabledContentColor, optional long disabledSecondaryContentColor, optional long disabledIconColor);
+    method public androidx.compose.foundation.layout.PaddingValues getCompactChipContentPadding();
+    method public androidx.compose.foundation.layout.PaddingValues getContentPadding();
+    method public float getIconSize();
+    method public float getLargeIconSize();
+    method public float getSmallIconSize();
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipColors gradientBackgroundChipColors(optional long startBackgroundColor, optional long endBackgroundColor, optional long contentColor, optional long secondaryContentColor, optional long iconColor, optional androidx.compose.ui.unit.LayoutDirection gradientDirection);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipColors imageBackgroundChipColors(androidx.compose.ui.graphics.painter.Painter backgroundImagePainter, optional androidx.compose.ui.graphics.Brush backgroundImageScrimBrush, optional long contentColor, optional long secondaryContentColor, optional long iconColor);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipBorder outlinedChipBorder(optional long borderColor, optional long disabledBorderColor, optional float borderWidth);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipColors outlinedChipColors(optional long contentColor, optional long secondaryContentColor, optional long iconColor);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipColors primaryChipColors(optional long backgroundColor, optional long contentColor, optional long secondaryContentColor, optional long iconColor);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipColors secondaryChipColors(optional long backgroundColor, optional long contentColor, optional long secondaryContentColor, optional long iconColor);
+    property public final androidx.compose.foundation.layout.PaddingValues CompactChipContentPadding;
+    property public final androidx.compose.foundation.layout.PaddingValues ContentPadding;
+    property public final float IconSize;
+    property public final float LargeIconSize;
+    property public final float SmallIconSize;
+    field public static final androidx.wear.compose.material.ChipDefaults INSTANCE;
+  }
+
+  public final class ChipKt {
+    method @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.wear.compose.material.ChipColors colors, androidx.wear.compose.material.ChipBorder border, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> label, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? secondaryLabel, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ChipBorder border);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function0<? extends kotlin.Unit> onClick, androidx.wear.compose.material.ChipColors colors, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,? extends kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,? extends kotlin.Unit> label, kotlin.jvm.functions.Function0<? extends kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,? extends kotlin.Unit>? secondaryLabel, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding);
+    method @androidx.compose.runtime.Composable public static void CompactChip(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? label, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ChipBorder border);
+    method @Deprecated @androidx.compose.runtime.Composable public static void CompactChip(kotlin.jvm.functions.Function0<? extends kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,? extends kotlin.Unit>? label, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding);
+    method @androidx.compose.runtime.Composable public static void OutlinedChip(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> label, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? secondaryLabel, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ChipBorder border);
+    method @androidx.compose.runtime.Composable public static void OutlinedCompactChip(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? label, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.wear.compose.material.ChipBorder border);
+  }
+
+  @androidx.compose.runtime.Stable public final class Colors {
+    ctor public Colors(optional long primary, optional long primaryVariant, optional long secondary, optional long secondaryVariant, optional long background, optional long surface, optional long error, optional long onPrimary, optional long onSecondary, optional long onBackground, optional long onSurface, optional long onSurfaceVariant, optional long onError);
+    method public androidx.wear.compose.material.Colors copy(optional long primary, optional long primaryVariant, optional long secondary, optional long secondaryVariant, optional long background, optional long surface, optional long error, optional long onPrimary, optional long onSecondary, optional long onBackground, optional long onSurface, optional long onSurfaceVariant, optional long onError);
+    method public long getBackground();
+    method public long getError();
+    method public long getOnBackground();
+    method public long getOnError();
+    method public long getOnPrimary();
+    method public long getOnSecondary();
+    method public long getOnSurface();
+    method public long getOnSurfaceVariant();
+    method public long getPrimary();
+    method public long getPrimaryVariant();
+    method public long getSecondary();
+    method public long getSecondaryVariant();
+    method public long getSurface();
+    property public final long background;
+    property public final long error;
+    property public final long onBackground;
+    property public final long onError;
+    property public final long onPrimary;
+    property public final long onSecondary;
+    property public final long onSurface;
+    property public final long onSurfaceVariant;
+    property public final long primary;
+    property public final long primaryVariant;
+    property public final long secondary;
+    property public final long secondaryVariant;
+    property public final long surface;
+  }
+
+  public final class ColorsKt {
+    method public static long contentColorFor(androidx.wear.compose.material.Colors, long backgroundColor);
+    method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static long contentColorFor(long backgroundColor);
+  }
+
+  public final class ContentAlpha {
+    method @androidx.compose.runtime.Composable public float getDisabled();
+    method @androidx.compose.runtime.Composable public float getHigh();
+    method @androidx.compose.runtime.Composable public float getMedium();
+    property @androidx.compose.runtime.Composable public final float disabled;
+    property @androidx.compose.runtime.Composable public final float high;
+    property @androidx.compose.runtime.Composable public final float medium;
+    field public static final androidx.wear.compose.material.ContentAlpha INSTANCE;
+  }
+
+  public final class ContentAlphaKt {
+    method public static androidx.compose.runtime.ProvidableCompositionLocal<java.lang.Float> getLocalContentAlpha();
+    property public static final androidx.compose.runtime.ProvidableCompositionLocal<java.lang.Float> LocalContentAlpha;
+  }
+
+  public final class ContentColorKt {
+    method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.graphics.Color> getLocalContentColor();
+    property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.graphics.Color> LocalContentColor;
+  }
+
+  public final class CurvedTextKt {
+    method public static void curvedText(androidx.wear.compose.foundation.CurvedScope, String text, optional androidx.wear.compose.foundation.CurvedModifier modifier, optional long background, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, optional androidx.wear.compose.foundation.CurvedTextStyle? style, optional androidx.wear.compose.foundation.CurvedDirection.Angular? angularDirection, optional int overflow);
+    method @Deprecated public static void curvedText(androidx.wear.compose.foundation.CurvedScope, String text, optional androidx.wear.compose.foundation.CurvedModifier modifier, optional long background, optional long color, optional long fontSize, optional androidx.wear.compose.foundation.CurvedTextStyle? style, optional androidx.wear.compose.foundation.CurvedDirection.Angular? angularDirection, optional int overflow);
+  }
+
+  public final class DefaultTimeSourceKt {
+  }
+
+  public final class HorizontalPageIndicatorKt {
+    method @androidx.compose.runtime.Composable public static void HorizontalPageIndicator(androidx.wear.compose.material.PageIndicatorState pageIndicatorState, optional androidx.compose.ui.Modifier modifier, optional int indicatorStyle, optional long selectedColor, optional long unselectedColor, optional float indicatorSize, optional float spacing, optional androidx.compose.ui.graphics.Shape indicatorShape);
+  }
+
+  public final class IconKt {
+    method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.vector.ImageVector imageVector, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
+    method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.ImageBitmap bitmap, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
+    method @androidx.compose.runtime.Composable public static void Icon(androidx.compose.ui.graphics.painter.Painter painter, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
+  }
+
+  @androidx.compose.runtime.Stable public interface InlineSliderColors {
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> backgroundColor(boolean enabled);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> barColor(boolean enabled, boolean selected);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> spacerColor(boolean enabled);
+  }
+
+  public final class InlineSliderDefaults {
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.InlineSliderColors colors(optional long backgroundColor, optional long spacerColor, optional long selectedBarColor, optional long unselectedBarColor, optional long disabledBackgroundColor, optional long disabledSpacerColor, optional long disabledSelectedBarColor, optional long disabledUnselectedBarColor);
+    method public androidx.compose.ui.graphics.vector.ImageVector getDecrease();
+    method public androidx.compose.ui.graphics.vector.ImageVector getIncrease();
+    property public final androidx.compose.ui.graphics.vector.ImageVector Decrease;
+    property public final androidx.compose.ui.graphics.vector.ImageVector Increase;
+    field public static final androidx.wear.compose.material.InlineSliderDefaults INSTANCE;
+  }
+
+  public final class ListHeaderKt {
+    method @androidx.compose.runtime.Composable public static void ListHeader(optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+  }
+
+  public final class MaterialTextSelectionColorsKt {
+  }
+
+  public final class MaterialTheme {
+    method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public androidx.wear.compose.material.Colors getColors();
+    method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public androidx.wear.compose.material.Shapes getShapes();
+    method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public androidx.wear.compose.material.Typography getTypography();
+    property @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public final androidx.wear.compose.material.Colors colors;
+    property @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public final androidx.wear.compose.material.Shapes shapes;
+    property @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public final androidx.wear.compose.material.Typography typography;
+    field public static final androidx.wear.compose.material.MaterialTheme INSTANCE;
+  }
+
+  public final class MaterialThemeKt {
+    method @androidx.compose.runtime.Composable public static void MaterialTheme(optional androidx.wear.compose.material.Colors colors, optional androidx.wear.compose.material.Typography typography, optional androidx.wear.compose.material.Shapes shapes, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+  }
+
+  public final class PageIndicatorDefaults {
+    method @androidx.compose.runtime.Composable public int style();
+    field public static final androidx.wear.compose.material.PageIndicatorDefaults INSTANCE;
+  }
+
+  public interface PageIndicatorState {
+    method public int getPageCount();
+    method public float getPageOffset();
+    method public int getSelectedPage();
+    property public abstract int pageCount;
+    property public abstract float pageOffset;
+    property public abstract int selectedPage;
+  }
+
+  @kotlin.jvm.JvmInline public final value class PageIndicatorStyle {
+    field public static final androidx.wear.compose.material.PageIndicatorStyle.Companion Companion;
+  }
+
+  public static final class PageIndicatorStyle.Companion {
+    method public int getCurved();
+    method public int getLinear();
+    property public final int Curved;
+    property public final int Linear;
+  }
+
+  public final class PickerDefaults {
+    method @androidx.compose.runtime.Composable public androidx.compose.foundation.gestures.FlingBehavior flingBehavior(androidx.wear.compose.material.PickerState state, optional androidx.compose.animation.core.DecayAnimationSpec<java.lang.Float> decay);
+    method public float getDefaultGradientRatio();
+    method public androidx.wear.compose.material.ScalingParams scalingParams(optional float edgeScale, optional float edgeAlpha, optional float minElementHeight, optional float maxElementHeight, optional float minTransitionArea, optional float maxTransitionArea, optional androidx.compose.animation.core.Easing scaleInterpolator, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Constraints,java.lang.Integer> viewportVerticalOffsetResolver);
+    property public final float DefaultGradientRatio;
+    field public static final androidx.wear.compose.material.PickerDefaults INSTANCE;
+  }
+
+  public final class PickerKt {
+    method @androidx.compose.runtime.Composable public static void Picker(androidx.wear.compose.material.PickerState state, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional boolean readOnly, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? readOnlyLabel, optional kotlin.jvm.functions.Function0<kotlin.Unit> onSelected, optional androidx.wear.compose.material.ScalingParams scalingParams, optional float separation, optional float gradientRatio, optional long gradientColor, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, kotlin.jvm.functions.Function2<? super androidx.wear.compose.material.PickerScope,? super java.lang.Integer,kotlin.Unit> option);
+    method @Deprecated @androidx.compose.runtime.Composable public static void Picker(androidx.wear.compose.material.PickerState state, optional androidx.compose.ui.Modifier modifier, optional boolean readOnly, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? readOnlyLabel, optional androidx.wear.compose.material.ScalingParams scalingParams, optional float separation, optional float gradientRatio, optional long gradientColor, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, kotlin.jvm.functions.Function2<? super androidx.wear.compose.material.PickerScope,? super java.lang.Integer,kotlin.Unit> option);
+    method @androidx.compose.runtime.Composable public static androidx.wear.compose.material.PickerState rememberPickerState(int initialNumberOfOptions, optional int initiallySelectedOption, optional boolean repeatItems);
+  }
+
+  public interface PickerScope {
+    method public int getSelectedOption();
+    property public abstract int selectedOption;
+  }
+
+  @androidx.compose.runtime.Stable public final class PickerState implements androidx.compose.foundation.gestures.ScrollableState {
+    ctor public PickerState(int initialNumberOfOptions, optional int initiallySelectedOption, optional boolean repeatItems);
+    method public float dispatchRawDelta(float delta);
+    method public int getNumberOfOptions();
+    method public boolean getRepeatItems();
+    method public int getSelectedOption();
+    method public boolean isScrollInProgress();
+    method public suspend Object? scroll(androidx.compose.foundation.MutatePriority scrollPriority, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.gestures.ScrollScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    method public suspend Object? scrollToOption(int index, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    method public void setNumberOfOptions(int);
+    property public boolean isScrollInProgress;
+    property public final int numberOfOptions;
+    property public final boolean repeatItems;
+    property public final int selectedOption;
+    field public static final androidx.wear.compose.material.PickerState.Companion Companion;
+  }
+
+  public static final class PickerState.Companion {
+    method public androidx.compose.runtime.saveable.Saver<androidx.wear.compose.material.PickerState,java.lang.Object> getSaver();
+    property public final androidx.compose.runtime.saveable.Saver<androidx.wear.compose.material.PickerState,java.lang.Object> Saver;
+  }
+
+  public final class PlaceholderKt {
+  }
+
+  @kotlin.jvm.JvmInline public final value class PositionIndicatorAlignment {
+    field public static final androidx.wear.compose.material.PositionIndicatorAlignment.Companion Companion;
+  }
+
+  public static final class PositionIndicatorAlignment.Companion {
+    method public int getEnd();
+    method public int getLeft();
+    method public int getOppositeRsb();
+    method public int getRight();
+    property public final int End;
+    property public final int Left;
+    property public final int OppositeRsb;
+    property public final int Right;
+  }
+
+  public final class PositionIndicatorKt {
+    method @androidx.compose.runtime.Composable public static void PositionIndicator(androidx.compose.foundation.ScrollState scrollState, optional androidx.compose.ui.Modifier modifier, optional boolean reverseDirection);
+    method @androidx.compose.runtime.Composable public static void PositionIndicator(androidx.wear.compose.material.ScalingLazyListState scalingLazyListState, optional androidx.compose.ui.Modifier modifier, optional boolean reverseDirection);
+    method @androidx.compose.runtime.Composable public static void PositionIndicator(androidx.compose.foundation.lazy.LazyListState lazyListState, optional androidx.compose.ui.Modifier modifier, optional boolean reverseDirection);
+    method @androidx.compose.runtime.Composable public static void PositionIndicator(kotlin.jvm.functions.Function0<java.lang.Float> value, optional androidx.compose.ui.Modifier modifier, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> range, optional long color, optional boolean reverseDirection, optional int position);
+    method @androidx.compose.runtime.Composable public static void PositionIndicator(androidx.wear.compose.material.PositionIndicatorState state, float indicatorHeight, float indicatorWidth, float paddingHorizontal, optional androidx.compose.ui.Modifier modifier, optional long background, optional long color, optional boolean reverseDirection, optional int position);
+  }
+
+  @androidx.compose.runtime.Stable public interface PositionIndicatorState {
+    method public float getPositionFraction();
+    method public float sizeFraction(float scrollableContainerSizePx);
+    method public int visibility(float scrollableContainerSizePx);
+    property public abstract float positionFraction;
+  }
+
+  @kotlin.jvm.JvmInline public final value class PositionIndicatorVisibility {
+    field public static final androidx.wear.compose.material.PositionIndicatorVisibility.Companion Companion;
+  }
+
+  public static final class PositionIndicatorVisibility.Companion {
+    method public int getAutoHide();
+    method public int getHide();
+    method public int getShow();
+    property public final int AutoHide;
+    property public final int Hide;
+    property public final int Show;
+  }
+
+  public final class ProgressIndicatorDefaults {
+    method public androidx.compose.animation.core.SpringSpec<java.lang.Float> getProgressAnimationSpec();
+    method public float getStrokeWidth();
+    property public final androidx.compose.animation.core.SpringSpec<java.lang.Float> ProgressAnimationSpec;
+    property public final float StrokeWidth;
+    field public static final androidx.wear.compose.material.ProgressIndicatorDefaults INSTANCE;
+  }
+
+  public final class ProgressIndicatorKt {
+    method @androidx.compose.runtime.Composable public static void CircularProgressIndicator(float progress, optional androidx.compose.ui.Modifier modifier, optional float startAngle, optional float endAngle, optional long indicatorColor, optional long trackColor, optional float strokeWidth);
+    method @androidx.compose.runtime.Composable public static void CircularProgressIndicator(optional androidx.compose.ui.Modifier modifier, optional float startAngle, optional long indicatorColor, optional long trackColor, optional float strokeWidth);
+  }
+
+  @androidx.compose.runtime.Stable public interface RadioButtonColors {
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> dotColor(boolean enabled, boolean selected);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> ringColor(boolean enabled, boolean selected);
+  }
+
+  public final class RadioButtonDefaults {
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.RadioButtonColors colors(optional long selectedRingColor, optional long selectedDotColor, optional long unselectedRingColor, optional long unselectedDotColor);
+    field public static final androidx.wear.compose.material.RadioButtonDefaults INSTANCE;
+  }
+
+  public final class RangeDefaultsKt {
+  }
+
+  public final class Resources_androidKt {
+  }
+
+  public final class ScaffoldKt {
+    method @androidx.compose.runtime.Composable public static void Scaffold(optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? vignette, optional kotlin.jvm.functions.Function0<kotlin.Unit>? positionIndicator, optional kotlin.jvm.functions.Function0<kotlin.Unit>? pageIndicator, optional kotlin.jvm.functions.Function0<kotlin.Unit>? timeText, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+  }
+
+  public final class ScalingLazyColumnDefaults {
+    method public androidx.wear.compose.material.ScalingParams scalingParams(optional float edgeScale, optional float edgeAlpha, optional float minElementHeight, optional float maxElementHeight, optional float minTransitionArea, optional float maxTransitionArea, optional androidx.compose.animation.core.Easing scaleInterpolator, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Constraints,java.lang.Integer> viewportVerticalOffsetResolver);
+    method @androidx.compose.runtime.Composable public androidx.compose.foundation.gestures.FlingBehavior snapFlingBehavior(androidx.wear.compose.material.ScalingLazyListState state, optional float snapOffset, optional androidx.compose.animation.core.DecayAnimationSpec<java.lang.Float> decay);
+    field public static final androidx.wear.compose.material.ScalingLazyColumnDefaults INSTANCE;
+  }
+
+  public final class ScalingLazyColumnKt {
+    method @androidx.compose.runtime.Composable public static void ScalingLazyColumn(optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.material.ScalingLazyListState state, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional boolean reverseLayout, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.ui.Alignment.Horizontal horizontalAlignment, optional androidx.compose.foundation.gestures.FlingBehavior flingBehavior, optional boolean userScrollEnabled, optional androidx.wear.compose.material.ScalingParams scalingParams, optional int anchorType, optional androidx.wear.compose.material.AutoCenteringParams? autoCentering, kotlin.jvm.functions.Function1<? super androidx.wear.compose.material.ScalingLazyListScope,kotlin.Unit> content);
+    method public static inline <T> void items(androidx.wear.compose.material.ScalingLazyListScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function1<? super T,?>? key, kotlin.jvm.functions.Function2<? super androidx.wear.compose.material.ScalingLazyListItemScope,? super T,kotlin.Unit> itemContent);
+    method public static inline <T> void items(androidx.wear.compose.material.ScalingLazyListScope, T![] items, optional kotlin.jvm.functions.Function1<? super T,?>? key, kotlin.jvm.functions.Function2<? super androidx.wear.compose.material.ScalingLazyListItemScope,? super T,kotlin.Unit> itemContent);
+    method public static inline <T> void itemsIndexed(androidx.wear.compose.material.ScalingLazyListScope, java.util.List<? extends T> items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, kotlin.jvm.functions.Function3<? super androidx.wear.compose.material.ScalingLazyListItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
+    method public static inline <T> void itemsIndexed(androidx.wear.compose.material.ScalingLazyListScope, T![] items, optional kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,?>? key, kotlin.jvm.functions.Function3<? super androidx.wear.compose.material.ScalingLazyListItemScope,? super java.lang.Integer,? super T,kotlin.Unit> itemContent);
+  }
+
+  public final class ScalingLazyColumnMeasureKt {
+  }
+
+  @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class ScalingLazyListAnchorType {
+    field public static final androidx.wear.compose.material.ScalingLazyListAnchorType.Companion Companion;
+  }
+
+  public static final class ScalingLazyListAnchorType.Companion {
+    method public int getItemCenter();
+    method public int getItemStart();
+    property public final int ItemCenter;
+    property public final int ItemStart;
+  }
+
+  public sealed interface ScalingLazyListItemInfo {
+    method public float getAlpha();
+    method public int getIndex();
+    method public Object getKey();
+    method public int getOffset();
+    method public float getScale();
+    method public int getSize();
+    method public int getUnadjustedOffset();
+    method public int getUnadjustedSize();
+    property public abstract float alpha;
+    property public abstract int index;
+    property public abstract Object key;
+    property public abstract int offset;
+    property public abstract float scale;
+    property public abstract int size;
+    property public abstract int unadjustedOffset;
+    property public abstract int unadjustedSize;
+  }
+
+  @androidx.compose.runtime.Stable @androidx.wear.compose.material.ScalingLazyScopeMarker public sealed interface ScalingLazyListItemScope {
+    method public androidx.compose.ui.Modifier fillParentMaxHeight(androidx.compose.ui.Modifier, optional float fraction);
+    method public androidx.compose.ui.Modifier fillParentMaxSize(androidx.compose.ui.Modifier, optional float fraction);
+    method public androidx.compose.ui.Modifier fillParentMaxWidth(androidx.compose.ui.Modifier, optional float fraction);
+  }
+
+  public sealed interface ScalingLazyListLayoutInfo {
+    method public int getAfterAutoCenteringPadding();
+    method public int getAfterContentPadding();
+    method public int getBeforeAutoCenteringPadding();
+    method public int getBeforeContentPadding();
+    method public androidx.compose.foundation.gestures.Orientation getOrientation();
+    method public boolean getReverseLayout();
+    method public int getTotalItemsCount();
+    method public int getViewportEndOffset();
+    method public long getViewportSize();
+    method public int getViewportStartOffset();
+    method public java.util.List<androidx.wear.compose.material.ScalingLazyListItemInfo> getVisibleItemsInfo();
+    property public abstract int afterAutoCenteringPadding;
+    property public abstract int afterContentPadding;
+    property public abstract int beforeAutoCenteringPadding;
+    property public abstract int beforeContentPadding;
+    property public abstract androidx.compose.foundation.gestures.Orientation orientation;
+    property public abstract boolean reverseLayout;
+    property public abstract int totalItemsCount;
+    property public abstract int viewportEndOffset;
+    property public abstract long viewportSize;
+    property public abstract int viewportStartOffset;
+    property public abstract java.util.List<androidx.wear.compose.material.ScalingLazyListItemInfo> visibleItemsInfo;
+  }
+
+  @androidx.wear.compose.material.ScalingLazyScopeMarker public sealed interface ScalingLazyListScope {
+    method public void item(optional Object? key, kotlin.jvm.functions.Function1<? super androidx.wear.compose.material.ScalingLazyListItemScope,kotlin.Unit> content);
+    method public void items(int count, optional kotlin.jvm.functions.Function1<? super java.lang.Integer,?>? key, kotlin.jvm.functions.Function2<? super androidx.wear.compose.material.ScalingLazyListItemScope,? super java.lang.Integer,kotlin.Unit> itemContent);
+  }
+
+  @androidx.compose.runtime.Stable public final class ScalingLazyListState implements androidx.compose.foundation.gestures.ScrollableState {
+    ctor public ScalingLazyListState(optional int initialCenterItemIndex, optional int initialCenterItemScrollOffset);
+    method public suspend Object? animateScrollToItem(int index, optional int scrollOffset, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    method public float dispatchRawDelta(float delta);
+    method public int getCenterItemIndex();
+    method public int getCenterItemScrollOffset();
+    method public androidx.wear.compose.material.ScalingLazyListLayoutInfo getLayoutInfo();
+    method public boolean isScrollInProgress();
+    method public suspend Object? scroll(androidx.compose.foundation.MutatePriority scrollPriority, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.gestures.ScrollScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    method public suspend Object? scrollToItem(int index, optional int scrollOffset, optional kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    property public final int centerItemIndex;
+    property public final int centerItemScrollOffset;
+    property public boolean isScrollInProgress;
+    property public final androidx.wear.compose.material.ScalingLazyListLayoutInfo layoutInfo;
+    field public static final androidx.wear.compose.material.ScalingLazyListState.Companion Companion;
+  }
+
+  public static final class ScalingLazyListState.Companion {
+    method public androidx.compose.runtime.saveable.Saver<androidx.wear.compose.material.ScalingLazyListState,java.lang.Object> getSaver();
+    property public final androidx.compose.runtime.saveable.Saver<androidx.wear.compose.material.ScalingLazyListState,java.lang.Object> Saver;
+  }
+
+  public final class ScalingLazyListStateKt {
+    method @androidx.compose.runtime.Composable public static androidx.wear.compose.material.ScalingLazyListState rememberScalingLazyListState(optional int initialCenterItemIndex, optional int initialCenterItemScrollOffset);
+  }
+
+  @kotlin.DslMarker public @interface ScalingLazyScopeMarker {
+  }
+
+  @androidx.compose.runtime.Stable public interface ScalingParams {
+    method public float getEdgeAlpha();
+    method public float getEdgeScale();
+    method public float getMaxElementHeight();
+    method public float getMaxTransitionArea();
+    method public float getMinElementHeight();
+    method public float getMinTransitionArea();
+    method public androidx.compose.animation.core.Easing getScaleInterpolator();
+    method public int resolveViewportVerticalOffset(long viewportConstraints);
+    property public abstract float edgeAlpha;
+    property public abstract float edgeScale;
+    property public abstract float maxElementHeight;
+    property public abstract float maxTransitionArea;
+    property public abstract float minElementHeight;
+    property public abstract float minTransitionArea;
+    property public abstract androidx.compose.animation.core.Easing scaleInterpolator;
+  }
+
+  public final class ScrollAwayKt {
+    method public static androidx.compose.ui.Modifier scrollAway(androidx.compose.ui.Modifier, androidx.compose.foundation.ScrollState scrollState, optional float offset);
+    method public static androidx.compose.ui.Modifier scrollAway(androidx.compose.ui.Modifier, androidx.compose.foundation.lazy.LazyListState scrollState, optional int itemIndex, optional float offset);
+    method public static androidx.compose.ui.Modifier scrollAway(androidx.compose.ui.Modifier, androidx.wear.compose.material.ScalingLazyListState scrollState, optional int itemIndex, optional float offset);
+  }
+
+  @androidx.compose.runtime.Immutable public final class Shapes {
+    ctor public Shapes(optional androidx.compose.foundation.shape.CornerBasedShape small, optional androidx.compose.foundation.shape.CornerBasedShape medium, optional androidx.compose.foundation.shape.CornerBasedShape large);
+    method public androidx.wear.compose.material.Shapes copy(optional androidx.compose.foundation.shape.CornerBasedShape small, optional androidx.compose.foundation.shape.CornerBasedShape medium, optional androidx.compose.foundation.shape.CornerBasedShape large);
+    method public androidx.compose.foundation.shape.CornerBasedShape getLarge();
+    method public androidx.compose.foundation.shape.CornerBasedShape getMedium();
+    method public androidx.compose.foundation.shape.CornerBasedShape getSmall();
+    property public final androidx.compose.foundation.shape.CornerBasedShape large;
+    property public final androidx.compose.foundation.shape.CornerBasedShape medium;
+    property public final androidx.compose.foundation.shape.CornerBasedShape small;
+  }
+
+  public final class ShapesKt {
+  }
+
+  public final class SliderKt {
+    method @androidx.compose.runtime.Composable public static void InlineSlider(float value, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onValueChange, int steps, kotlin.jvm.functions.Function0<kotlin.Unit> decreaseIcon, kotlin.jvm.functions.Function0<kotlin.Unit> increaseIcon, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange, optional boolean segmented, optional androidx.wear.compose.material.InlineSliderColors colors);
+    method @androidx.compose.runtime.Composable public static void InlineSlider(int value, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> onValueChange, kotlin.ranges.IntProgression valueProgression, kotlin.jvm.functions.Function0<kotlin.Unit> decreaseIcon, kotlin.jvm.functions.Function0<kotlin.Unit> increaseIcon, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional boolean segmented, optional androidx.wear.compose.material.InlineSliderColors colors);
+  }
+
+  @androidx.compose.runtime.Stable public interface SplitToggleChipColors {
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> backgroundColor(boolean enabled);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> contentColor(boolean enabled);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> secondaryContentColor(boolean enabled);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> splitBackgroundOverlay(boolean enabled, boolean checked);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> toggleControlColor(boolean enabled, boolean checked);
+  }
+
+  public final class StepperDefaults {
+    method public androidx.compose.ui.graphics.vector.ImageVector getDecrease();
+    method public androidx.compose.ui.graphics.vector.ImageVector getIncrease();
+    property public final androidx.compose.ui.graphics.vector.ImageVector Decrease;
+    property public final androidx.compose.ui.graphics.vector.ImageVector Increase;
+    field public static final androidx.wear.compose.material.StepperDefaults INSTANCE;
+  }
+
+  public final class StepperKt {
+    method @androidx.compose.runtime.Composable public static void Stepper(float value, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onValueChange, int steps, kotlin.jvm.functions.Function0<kotlin.Unit> decreaseIcon, kotlin.jvm.functions.Function0<kotlin.Unit> increaseIcon, optional androidx.compose.ui.Modifier modifier, optional kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange, optional long backgroundColor, optional long contentColor, optional long iconColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void Stepper(int value, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> onValueChange, kotlin.ranges.IntProgression valueProgression, kotlin.jvm.functions.Function0<kotlin.Unit> decreaseIcon, kotlin.jvm.functions.Function0<kotlin.Unit> increaseIcon, optional androidx.compose.ui.Modifier modifier, optional long backgroundColor, optional long contentColor, optional long iconColor, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+  }
+
+  public final class SwipeToDismissBoxDefaults {
+    method public androidx.compose.animation.core.SpringSpec<java.lang.Float> getAnimationSpec();
+    method public float getEdgeWidth();
+    property public final androidx.compose.animation.core.SpringSpec<java.lang.Float> AnimationSpec;
+    property public final float EdgeWidth;
+    field public static final androidx.wear.compose.material.SwipeToDismissBoxDefaults INSTANCE;
+  }
+
+  public final class SwipeToDismissBoxKt {
+    method @androidx.compose.runtime.Composable public static void SwipeToDismissBox(androidx.wear.compose.material.SwipeToDismissBoxState state, optional androidx.compose.ui.Modifier modifier, optional long backgroundScrimColor, optional long contentScrimColor, optional Object backgroundKey, optional Object contentKey, optional boolean hasBackground, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.layout.BoxScope,? super java.lang.Boolean,kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void SwipeToDismissBox(kotlin.jvm.functions.Function0<kotlin.Unit> onDismissed, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.material.SwipeToDismissBoxState state, optional long backgroundScrimColor, optional long contentScrimColor, optional Object backgroundKey, optional Object contentKey, optional boolean hasBackground, kotlin.jvm.functions.Function2<? super androidx.compose.foundation.layout.BoxScope,? super java.lang.Boolean,kotlin.Unit> content);
+    method public static androidx.compose.ui.Modifier edgeSwipeToDismiss(androidx.compose.ui.Modifier, androidx.wear.compose.material.SwipeToDismissBoxState swipeToDismissBoxState, optional float edgeWidth);
+    method @androidx.compose.runtime.Composable public static androidx.wear.compose.material.SwipeToDismissBoxState rememberSwipeToDismissBoxState(optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.wear.compose.material.SwipeToDismissValue,java.lang.Boolean> confirmStateChange);
+  }
+
+  @androidx.compose.runtime.Stable public final class SwipeToDismissBoxState {
+    ctor public SwipeToDismissBoxState(optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional kotlin.jvm.functions.Function1<? super androidx.wear.compose.material.SwipeToDismissValue,java.lang.Boolean> confirmStateChange);
+    method public androidx.wear.compose.material.SwipeToDismissValue getCurrentValue();
+    method public androidx.wear.compose.material.SwipeToDismissValue getTargetValue();
+    method public boolean isAnimationRunning();
+    method public suspend Object? snapTo(androidx.wear.compose.material.SwipeToDismissValue targetValue, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+    property public final androidx.wear.compose.material.SwipeToDismissValue currentValue;
+    property public final boolean isAnimationRunning;
+    property public final androidx.wear.compose.material.SwipeToDismissValue targetValue;
+  }
+
+  public enum SwipeToDismissKeys {
+    method public static androidx.wear.compose.material.SwipeToDismissKeys valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.wear.compose.material.SwipeToDismissKeys[] values();
+    enum_constant public static final androidx.wear.compose.material.SwipeToDismissKeys Background;
+    enum_constant public static final androidx.wear.compose.material.SwipeToDismissKeys Content;
+  }
+
+  public enum SwipeToDismissValue {
+    method public static androidx.wear.compose.material.SwipeToDismissValue valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.wear.compose.material.SwipeToDismissValue[] values();
+    enum_constant public static final androidx.wear.compose.material.SwipeToDismissValue Default;
+    enum_constant public static final androidx.wear.compose.material.SwipeToDismissValue Dismissed;
+  }
+
+  public final class SwipeableKt {
+  }
+
+  @androidx.compose.runtime.Stable public interface SwitchColors {
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> thumbColor(boolean enabled, boolean checked);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> trackColor(boolean enabled, boolean checked);
+  }
+
+  public final class SwitchDefaults {
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.SwitchColors colors(optional long checkedThumbColor, optional long checkedTrackColor, optional long uncheckedThumbColor, optional long uncheckedTrackColor);
+    field public static final androidx.wear.compose.material.SwitchDefaults INSTANCE;
+  }
+
+  public final class TextKt {
+    method @androidx.compose.runtime.Composable public static void ProvideTextStyle(androidx.compose.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void Text(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+    method @androidx.compose.runtime.Composable public static void Text(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+    method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> getLocalTextStyle();
+    property public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> LocalTextStyle;
+  }
+
+  public interface TimeSource {
+    method @androidx.compose.runtime.Composable public String getCurrentTime();
+    property @androidx.compose.runtime.Composable public abstract String currentTime;
+  }
+
+  public final class TimeTextDefaults {
+    method public void CurvedTextSeparator(androidx.wear.compose.foundation.CurvedScope, optional androidx.wear.compose.foundation.CurvedTextStyle? curvedTextStyle, optional androidx.wear.compose.foundation.ArcPaddingValues contentArcPadding);
+    method @androidx.compose.runtime.Composable public void TextSeparator(optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.text.TextStyle textStyle, optional androidx.compose.foundation.layout.PaddingValues contentPadding);
+    method public androidx.compose.foundation.layout.PaddingValues getContentPadding();
+    method @androidx.compose.runtime.Composable public String timeFormat();
+    method public androidx.wear.compose.material.TimeSource timeSource(String timeFormat);
+    method @androidx.compose.runtime.Composable public androidx.compose.ui.text.TextStyle timeTextStyle(optional long background, optional long color, optional long fontSize);
+    property public final androidx.compose.foundation.layout.PaddingValues ContentPadding;
+    field public static final androidx.wear.compose.material.TimeTextDefaults INSTANCE;
+    field public static final String TimeFormat12Hours = "h:mm a";
+    field public static final String TimeFormat24Hours = "HH:mm";
+  }
+
+  public final class TimeTextKt {
+    method @androidx.compose.runtime.Composable public static void TimeText(optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.material.TimeSource timeSource, optional androidx.compose.ui.text.TextStyle timeTextStyle, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional kotlin.jvm.functions.Function0<kotlin.Unit>? startLinearContent, optional kotlin.jvm.functions.Function1<? super androidx.wear.compose.foundation.CurvedScope,kotlin.Unit>? startCurvedContent, optional kotlin.jvm.functions.Function0<kotlin.Unit>? endLinearContent, optional kotlin.jvm.functions.Function1<? super androidx.wear.compose.foundation.CurvedScope,kotlin.Unit>? endCurvedContent, optional kotlin.jvm.functions.Function0<kotlin.Unit> textLinearSeparator, optional kotlin.jvm.functions.Function1<? super androidx.wear.compose.foundation.CurvedScope,kotlin.Unit> textCurvedSeparator);
+  }
+
+  @androidx.compose.runtime.Stable public interface ToggleButtonColors {
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> backgroundColor(boolean enabled, boolean checked);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> contentColor(boolean enabled, boolean checked);
+  }
+
+  public final class ToggleButtonDefaults {
+    method public float getDefaultIconSize();
+    method public float getDefaultToggleButtonSize();
+    method public float getSmallIconSize();
+    method public float getSmallToggleButtonSize();
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ToggleButtonColors toggleButtonColors(optional long checkedBackgroundColor, optional long checkedContentColor, optional long disabledCheckedBackgroundColor, optional long disabledCheckedContentColor, optional long uncheckedBackgroundColor, optional long uncheckedContentColor, optional long disabledUncheckedBackgroundColor, optional long disabledUncheckedContentColor);
+    property public final float DefaultIconSize;
+    property public final float DefaultToggleButtonSize;
+    property public final float SmallIconSize;
+    property public final float SmallToggleButtonSize;
+    field public static final androidx.wear.compose.material.ToggleButtonDefaults INSTANCE;
+  }
+
+  public final class ToggleButtonKt {
+    method @androidx.compose.runtime.Composable public static void ToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ToggleButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void ToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,? extends kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ToggleButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,? extends kotlin.Unit> content);
+  }
+
+  @androidx.compose.runtime.Stable public interface ToggleChipColors {
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.painter.Painter> background(boolean enabled, boolean checked);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> contentColor(boolean enabled, boolean checked);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> secondaryContentColor(boolean enabled, boolean checked);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> toggleControlColor(boolean enabled, boolean checked);
+  }
+
+  public final class ToggleChipDefaults {
+    method public androidx.compose.ui.graphics.vector.ImageVector checkboxIcon(boolean checked);
+    method public androidx.compose.ui.graphics.vector.ImageVector getCheckboxOn();
+    method public androidx.compose.foundation.layout.PaddingValues getContentPadding();
+    method public float getIconSize();
+    method public androidx.compose.ui.graphics.vector.ImageVector getRadioOff();
+    method public androidx.compose.ui.graphics.vector.ImageVector getRadioOn();
+    method @androidx.compose.runtime.Composable public long getSwitchUncheckedIconColor();
+    method public androidx.compose.ui.graphics.vector.ImageVector radioIcon(boolean checked);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.SplitToggleChipColors splitToggleChipColors(optional long backgroundColor, optional long contentColor, optional long secondaryContentColor, optional long checkedToggleControlColor, optional long uncheckedToggleControlColor, optional long splitBackgroundOverlayColor);
+    method public androidx.compose.ui.graphics.vector.ImageVector switchIcon(boolean checked);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ToggleChipColors toggleChipColors(optional long checkedStartBackgroundColor, optional long checkedEndBackgroundColor, optional long checkedContentColor, optional long checkedSecondaryContentColor, optional long checkedToggleControlColor, optional long uncheckedStartBackgroundColor, optional long uncheckedEndBackgroundColor, optional long uncheckedContentColor, optional long uncheckedSecondaryContentColor, optional long uncheckedToggleControlColor, optional androidx.compose.ui.unit.LayoutDirection gradientDirection);
+    property public final androidx.compose.ui.graphics.vector.ImageVector CheckboxOn;
+    property public final androidx.compose.foundation.layout.PaddingValues ContentPadding;
+    property public final float IconSize;
+    property public final androidx.compose.ui.graphics.vector.ImageVector RadioOff;
+    property public final androidx.compose.ui.graphics.vector.ImageVector RadioOn;
+    property @androidx.compose.runtime.Composable public final long SwitchUncheckedIconColor;
+    field public static final androidx.wear.compose.material.ToggleChipDefaults INSTANCE;
+  }
+
+  public final class ToggleChipKt {
+    method @androidx.compose.runtime.Composable public static void SplitToggleChip(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> label, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> toggleControl, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? secondaryLabel, optional androidx.wear.compose.material.SplitToggleChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource checkedInteractionSource, optional androidx.compose.foundation.interaction.MutableInteractionSource clickInteractionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape);
+    method @androidx.compose.runtime.Composable public static void ToggleChip(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> label, kotlin.jvm.functions.Function0<kotlin.Unit> toggleControl, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit>? appIcon, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit>? secondaryLabel, optional androidx.wear.compose.material.ToggleChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape);
+  }
+
+  public final class ToggleControlKt {
+    method @androidx.compose.runtime.Composable public static void Checkbox(boolean checked, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.material.CheckboxColors colors, optional boolean enabled, optional kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onCheckedChange, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource);
+    method @androidx.compose.runtime.Composable public static void RadioButton(boolean selected, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.material.RadioButtonColors colors, optional boolean enabled, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onClick, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource);
+    method @androidx.compose.runtime.Composable public static void Switch(boolean checked, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.material.SwitchColors colors, optional boolean enabled, optional kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onCheckedChange, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource);
+  }
+
+  @androidx.compose.runtime.Immutable public final class Typography {
+    ctor public Typography(optional androidx.compose.ui.text.font.FontFamily defaultFontFamily, optional androidx.compose.ui.text.TextStyle display1, optional androidx.compose.ui.text.TextStyle display2, optional androidx.compose.ui.text.TextStyle display3, optional androidx.compose.ui.text.TextStyle title1, optional androidx.compose.ui.text.TextStyle title2, optional androidx.compose.ui.text.TextStyle title3, optional androidx.compose.ui.text.TextStyle body1, optional androidx.compose.ui.text.TextStyle body2, optional androidx.compose.ui.text.TextStyle button, optional androidx.compose.ui.text.TextStyle caption1, optional androidx.compose.ui.text.TextStyle caption2, optional androidx.compose.ui.text.TextStyle caption3);
+    method public androidx.wear.compose.material.Typography copy(optional androidx.compose.ui.text.TextStyle display1, optional androidx.compose.ui.text.TextStyle display2, optional androidx.compose.ui.text.TextStyle display3, optional androidx.compose.ui.text.TextStyle title1, optional androidx.compose.ui.text.TextStyle title2, optional androidx.compose.ui.text.TextStyle title3, optional androidx.compose.ui.text.TextStyle body1, optional androidx.compose.ui.text.TextStyle body2, optional androidx.compose.ui.text.TextStyle button, optional androidx.compose.ui.text.TextStyle caption1, optional androidx.compose.ui.text.TextStyle caption2, optional androidx.compose.ui.text.TextStyle caption3);
+    method public androidx.compose.ui.text.TextStyle getBody1();
+    method public androidx.compose.ui.text.TextStyle getBody2();
+    method public androidx.compose.ui.text.TextStyle getButton();
+    method public androidx.compose.ui.text.TextStyle getCaption1();
+    method public androidx.compose.ui.text.TextStyle getCaption2();
+    method public androidx.compose.ui.text.TextStyle getCaption3();
+    method public androidx.compose.ui.text.TextStyle getDisplay1();
+    method public androidx.compose.ui.text.TextStyle getDisplay2();
+    method public androidx.compose.ui.text.TextStyle getDisplay3();
+    method public androidx.compose.ui.text.TextStyle getTitle1();
+    method public androidx.compose.ui.text.TextStyle getTitle2();
+    method public androidx.compose.ui.text.TextStyle getTitle3();
+    property public final androidx.compose.ui.text.TextStyle body1;
+    property public final androidx.compose.ui.text.TextStyle body2;
+    property public final androidx.compose.ui.text.TextStyle button;
+    property public final androidx.compose.ui.text.TextStyle caption1;
+    property public final androidx.compose.ui.text.TextStyle caption2;
+    property public final androidx.compose.ui.text.TextStyle caption3;
+    property public final androidx.compose.ui.text.TextStyle display1;
+    property public final androidx.compose.ui.text.TextStyle display2;
+    property public final androidx.compose.ui.text.TextStyle display3;
+    property public final androidx.compose.ui.text.TextStyle title1;
+    property public final androidx.compose.ui.text.TextStyle title2;
+    property public final androidx.compose.ui.text.TextStyle title3;
+  }
+
+  public final class TypographyKt {
+  }
+
+  public final class VignetteKt {
+    method @androidx.compose.runtime.Composable public static void Vignette(int vignettePosition, optional androidx.compose.ui.Modifier modifier);
+  }
+
+  @kotlin.jvm.JvmInline public final value class VignettePosition {
+    ctor public VignettePosition(int key);
+    field public static final androidx.wear.compose.material.VignettePosition.Companion Companion;
+  }
+
+  public static final class VignettePosition.Companion {
+    method public int getBottom();
+    method public int getTop();
+    method public int getTopAndBottom();
+    property public final int Bottom;
+    property public final int Top;
+    property public final int TopAndBottom;
+  }
+
+}
+
+package androidx.wear.compose.material.dialog {
+
+  public final class DialogDefaults {
+    method public androidx.compose.foundation.layout.Arrangement.Vertical getAlertVerticalArrangement();
+    method public androidx.compose.foundation.layout.Arrangement.Vertical getConfirmationVerticalArrangement();
+    method public androidx.compose.foundation.layout.PaddingValues getContentPadding();
+    method public long getIndefiniteDurationMillis();
+    method public long getLongDurationMillis();
+    method public long getShortDurationMillis();
+    property public final androidx.compose.foundation.layout.Arrangement.Vertical AlertVerticalArrangement;
+    property public final androidx.compose.foundation.layout.Arrangement.Vertical ConfirmationVerticalArrangement;
+    property public final androidx.compose.foundation.layout.PaddingValues ContentPadding;
+    property public final long IndefiniteDurationMillis;
+    property public final long LongDurationMillis;
+    property public final long ShortDurationMillis;
+    field public static final androidx.wear.compose.material.dialog.DialogDefaults INSTANCE;
+  }
+
+  public final class DialogKt {
+    method @androidx.compose.runtime.Composable public static void Alert(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> title, kotlin.jvm.functions.Function0<kotlin.Unit> negativeButton, kotlin.jvm.functions.Function0<kotlin.Unit> positiveButton, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ScalingLazyListState scrollState, optional long backgroundColor, optional long contentColor, optional long titleColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? content);
+    method @androidx.compose.runtime.Composable public static void Alert(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> title, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? icon, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? message, optional androidx.wear.compose.material.ScalingLazyListState scrollState, optional long backgroundColor, optional long titleColor, optional long messageColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.wear.compose.material.ScalingLazyListScope,kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void Confirmation(kotlin.jvm.functions.Function0<kotlin.Unit> onTimeout, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit>? icon, optional androidx.wear.compose.material.ScalingLazyListState scrollState, optional long durationMillis, optional long backgroundColor, optional long contentColor, optional long iconColor, optional androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, optional androidx.compose.foundation.layout.PaddingValues contentPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> content);
+  }
+
+  public final class Dialog_androidKt {
+    method @androidx.compose.runtime.Composable public static void Dialog(boolean showDialog, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.material.ScalingLazyListState? scrollState, optional androidx.compose.ui.window.DialogProperties properties, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+  }
+
+}
+
diff --git a/wear/compose/compose-material/build.gradle b/wear/compose/compose-material/build.gradle
index 7407174..04c0215 100644
--- a/wear/compose/compose-material/build.gradle
+++ b/wear/compose/compose-material/build.gradle
@@ -24,90 +24,37 @@
     id("AndroidXComposePlugin")
 }
 
-AndroidXComposePlugin.applyAndConfigureKotlinPlugin(project)
+// Disable multi-platform.
+AndroidXComposePlugin.applyAndConfigureKotlinPlugin(project, /* isMultiplatformEnabled= */false)
 
 dependencies {
 
-    if(!AndroidXComposePlugin.isMultiplatformEnabled(project)) {
-        api(project(":compose:foundation:foundation"))
-        api(project(":compose:ui:ui"))
-        api(project(":compose:ui:ui-text"))
-        api(project(":compose:runtime:runtime"))
+    api("androidx.compose.foundation:foundation:1.3.0-rc01")
+    api("androidx.compose.ui:ui:1.3.0-rc01")
+    api("androidx.compose.ui:ui-text:1.3.0-rc01")
+    api("androidx.compose.runtime:runtime:1.3.0-rc01")
 
-        implementation(libs.kotlinStdlib)
-        implementation(project(":compose:animation:animation"))
-        implementation(project(":compose:material:material"))
-        implementation(project(":compose:material:material-ripple"))
-        implementation(project(":compose:ui:ui-util"))
-        implementation(project(":wear:compose:compose-foundation"))
-        implementation("androidx.profileinstaller:profileinstaller:1.2.0")
+    implementation(libs.kotlinStdlib)
+    implementation("androidx.compose.animation:animation:1.3.0-rc01")
+    implementation("androidx.compose.material:material:1.3.0-rc01")
+    implementation("androidx.compose.material:material-ripple:1.3.0-rc01")
+    implementation("androidx.compose.ui:ui-util:1.3.0-rc01")
+    implementation(project(":wear:compose:compose-foundation"))
+    implementation("androidx.profileinstaller:profileinstaller:1.2.0")
 
-        androidTestImplementation(project(":compose:ui:ui-test"))
-        androidTestImplementation(project(":compose:ui:ui-test-junit4"))
-        androidTestImplementation(project(":compose:test-utils"))
+    androidTestImplementation(project(":compose:ui:ui-test"))
+    androidTestImplementation(project(":compose:ui:ui-test-junit4"))
+    androidTestImplementation(project(":compose:test-utils"))
 
-        androidTestImplementation(project(":test:screenshot:screenshot"))
-        androidTestImplementation(libs.testRunner)
-        androidTestImplementation(libs.truth)
+    androidTestImplementation(project(":test:screenshot:screenshot"))
+    androidTestImplementation(libs.testRunner)
+    androidTestImplementation(libs.truth)
 
-        testImplementation(libs.testRules)
-        testImplementation(libs.testRunner)
-        testImplementation(libs.junit)
+    testImplementation(libs.testRules)
+    testImplementation(libs.testRunner)
+    testImplementation(libs.junit)
 
-        samples(project(":wear:compose:compose-material-samples"))
-    }
-}
-
-if(AndroidXComposePlugin.isMultiplatformEnabled(project)) {
-    androidXComposeMultiplatform {
-        android()
-        desktop()
-    }
-
-    kotlin {
-        /*
-         * When updating dependencies, make sure to make the an an analogous update in the
-         * corresponding block above
-         */
-        sourceSets {
-            commonMain.dependencies {
-                implementation(libs.kotlinStdlibCommon)
-
-                api(project(":compose:foundation:foundation"))
-                api(project(":compose:ui:ui"))
-                api(project(":compose:ui:ui-text"))
-                api(project(":compose:runtime:runtime"))
-                api("androidx.annotation:annotation:1.1.0")
-
-                implementation(project(":compose:animation:animation"))
-                implementation(project(":compose:material:material"))
-                implementation(project(":compose:material:material-ripple"))
-                implementation(project(":compose:ui:ui-util"))
-                implementation(project(":wear:compose:compose-foundation"))
-            }
-            jvmMain.dependencies {
-                implementation(libs.kotlinStdlib)
-            }
-
-            commonTest.dependencies {
-                implementation(kotlin("test-junit"))
-            }
-            androidAndroidTest.dependencies {
-                implementation(libs.testExtJunit)
-                implementation(libs.testRules)
-                implementation(libs.testRunner)
-                implementation(libs.truth)
-                implementation(project(":compose:ui:ui-util"))
-                implementation(project(":compose:ui:ui-test"))
-                implementation(project(":compose:ui:ui-test-junit4"))
-                implementation(project(":compose:test-utils"))
-                implementation(project(":test:screenshot:screenshot"))
-            }
-        }
-    }
-    dependencies {
-        samples(project(":wear:compose:compose-material-samples"))
-    }
+    samples("androidx.wear.compose:compose-material-samples:1.1.0-beta01")
 }
 
 android {
diff --git a/wear/compose/compose-navigation/api/1.1.0-beta01.txt b/wear/compose/compose-navigation/api/1.1.0-beta01.txt
new file mode 100644
index 0000000..49ccd87d
--- /dev/null
+++ b/wear/compose/compose-navigation/api/1.1.0-beta01.txt
@@ -0,0 +1,33 @@
+// Signature format: 4.0
+package androidx.wear.compose.navigation {
+
+  public final class NavGraphBuilderKt {
+    method public static void composable(androidx.navigation.NavGraphBuilder, String route, optional java.util.List<androidx.navigation.NamedNavArgument> arguments, optional java.util.List<androidx.navigation.NavDeepLink> deepLinks, kotlin.jvm.functions.Function1<? super androidx.navigation.NavBackStackEntry,kotlin.Unit> content);
+  }
+
+  public final class SwipeDismissableNavHostControllerKt {
+    method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.navigation.NavBackStackEntry> currentBackStackEntryAsState(androidx.navigation.NavController);
+    method @androidx.compose.runtime.Composable public static androidx.navigation.NavHostController rememberSwipeDismissableNavController();
+  }
+
+  public final class SwipeDismissableNavHostKt {
+    method @androidx.compose.runtime.Composable public static void SwipeDismissableNavHost(androidx.navigation.NavHostController navController, String startDestination, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.navigation.SwipeDismissableNavHostState state, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
+    method @androidx.compose.runtime.Composable public static void SwipeDismissableNavHost(androidx.navigation.NavHostController navController, androidx.navigation.NavGraph graph, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.navigation.SwipeDismissableNavHostState state);
+    method @androidx.compose.runtime.Composable public static androidx.wear.compose.navigation.SwipeDismissableNavHostState rememberSwipeDismissableNavHostState(optional androidx.wear.compose.material.SwipeToDismissBoxState swipeToDismissBoxState);
+  }
+
+  public final class SwipeDismissableNavHostState {
+    ctor public SwipeDismissableNavHostState(androidx.wear.compose.material.SwipeToDismissBoxState swipeToDismissBoxState);
+  }
+
+  @androidx.navigation.Navigator.Name("wear-navigator") public final class WearNavigator extends androidx.navigation.Navigator<androidx.wear.compose.navigation.WearNavigator.Destination> {
+    ctor public WearNavigator();
+    method public androidx.wear.compose.navigation.WearNavigator.Destination createDestination();
+  }
+
+  @androidx.navigation.NavDestination.ClassType(Composable::class) public static final class WearNavigator.Destination extends androidx.navigation.NavDestination {
+    ctor public WearNavigator.Destination(androidx.wear.compose.navigation.WearNavigator navigator, kotlin.jvm.functions.Function1<? super androidx.navigation.NavBackStackEntry,kotlin.Unit> content);
+  }
+
+}
+
diff --git a/wear/compose/compose-navigation/api/public_plus_experimental_1.1.0-beta01.txt b/wear/compose/compose-navigation/api/public_plus_experimental_1.1.0-beta01.txt
new file mode 100644
index 0000000..49ccd87d
--- /dev/null
+++ b/wear/compose/compose-navigation/api/public_plus_experimental_1.1.0-beta01.txt
@@ -0,0 +1,33 @@
+// Signature format: 4.0
+package androidx.wear.compose.navigation {
+
+  public final class NavGraphBuilderKt {
+    method public static void composable(androidx.navigation.NavGraphBuilder, String route, optional java.util.List<androidx.navigation.NamedNavArgument> arguments, optional java.util.List<androidx.navigation.NavDeepLink> deepLinks, kotlin.jvm.functions.Function1<? super androidx.navigation.NavBackStackEntry,kotlin.Unit> content);
+  }
+
+  public final class SwipeDismissableNavHostControllerKt {
+    method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.navigation.NavBackStackEntry> currentBackStackEntryAsState(androidx.navigation.NavController);
+    method @androidx.compose.runtime.Composable public static androidx.navigation.NavHostController rememberSwipeDismissableNavController();
+  }
+
+  public final class SwipeDismissableNavHostKt {
+    method @androidx.compose.runtime.Composable public static void SwipeDismissableNavHost(androidx.navigation.NavHostController navController, String startDestination, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.navigation.SwipeDismissableNavHostState state, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
+    method @androidx.compose.runtime.Composable public static void SwipeDismissableNavHost(androidx.navigation.NavHostController navController, androidx.navigation.NavGraph graph, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.navigation.SwipeDismissableNavHostState state);
+    method @androidx.compose.runtime.Composable public static androidx.wear.compose.navigation.SwipeDismissableNavHostState rememberSwipeDismissableNavHostState(optional androidx.wear.compose.material.SwipeToDismissBoxState swipeToDismissBoxState);
+  }
+
+  public final class SwipeDismissableNavHostState {
+    ctor public SwipeDismissableNavHostState(androidx.wear.compose.material.SwipeToDismissBoxState swipeToDismissBoxState);
+  }
+
+  @androidx.navigation.Navigator.Name("wear-navigator") public final class WearNavigator extends androidx.navigation.Navigator<androidx.wear.compose.navigation.WearNavigator.Destination> {
+    ctor public WearNavigator();
+    method public androidx.wear.compose.navigation.WearNavigator.Destination createDestination();
+  }
+
+  @androidx.navigation.NavDestination.ClassType(Composable::class) public static final class WearNavigator.Destination extends androidx.navigation.NavDestination {
+    ctor public WearNavigator.Destination(androidx.wear.compose.navigation.WearNavigator navigator, kotlin.jvm.functions.Function1<? super androidx.navigation.NavBackStackEntry,kotlin.Unit> content);
+  }
+
+}
+
diff --git a/wear/compose/compose-navigation/api/res-1.1.0-beta01.txt b/wear/compose/compose-navigation/api/res-1.1.0-beta01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/wear/compose/compose-navigation/api/res-1.1.0-beta01.txt
diff --git a/wear/compose/compose-navigation/api/restricted_1.1.0-beta01.txt b/wear/compose/compose-navigation/api/restricted_1.1.0-beta01.txt
new file mode 100644
index 0000000..49ccd87d
--- /dev/null
+++ b/wear/compose/compose-navigation/api/restricted_1.1.0-beta01.txt
@@ -0,0 +1,33 @@
+// Signature format: 4.0
+package androidx.wear.compose.navigation {
+
+  public final class NavGraphBuilderKt {
+    method public static void composable(androidx.navigation.NavGraphBuilder, String route, optional java.util.List<androidx.navigation.NamedNavArgument> arguments, optional java.util.List<androidx.navigation.NavDeepLink> deepLinks, kotlin.jvm.functions.Function1<? super androidx.navigation.NavBackStackEntry,kotlin.Unit> content);
+  }
+
+  public final class SwipeDismissableNavHostControllerKt {
+    method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.navigation.NavBackStackEntry> currentBackStackEntryAsState(androidx.navigation.NavController);
+    method @androidx.compose.runtime.Composable public static androidx.navigation.NavHostController rememberSwipeDismissableNavController();
+  }
+
+  public final class SwipeDismissableNavHostKt {
+    method @androidx.compose.runtime.Composable public static void SwipeDismissableNavHost(androidx.navigation.NavHostController navController, String startDestination, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.navigation.SwipeDismissableNavHostState state, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
+    method @androidx.compose.runtime.Composable public static void SwipeDismissableNavHost(androidx.navigation.NavHostController navController, androidx.navigation.NavGraph graph, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.navigation.SwipeDismissableNavHostState state);
+    method @androidx.compose.runtime.Composable public static androidx.wear.compose.navigation.SwipeDismissableNavHostState rememberSwipeDismissableNavHostState(optional androidx.wear.compose.material.SwipeToDismissBoxState swipeToDismissBoxState);
+  }
+
+  public final class SwipeDismissableNavHostState {
+    ctor public SwipeDismissableNavHostState(androidx.wear.compose.material.SwipeToDismissBoxState swipeToDismissBoxState);
+  }
+
+  @androidx.navigation.Navigator.Name("wear-navigator") public final class WearNavigator extends androidx.navigation.Navigator<androidx.wear.compose.navigation.WearNavigator.Destination> {
+    ctor public WearNavigator();
+    method public androidx.wear.compose.navigation.WearNavigator.Destination createDestination();
+  }
+
+  @androidx.navigation.NavDestination.ClassType(Composable::class) public static final class WearNavigator.Destination extends androidx.navigation.NavDestination {
+    ctor public WearNavigator.Destination(androidx.wear.compose.navigation.WearNavigator navigator, kotlin.jvm.functions.Function1<? super androidx.navigation.NavBackStackEntry,kotlin.Unit> content);
+  }
+
+}
+
diff --git a/wear/compose/compose-navigation/build.gradle b/wear/compose/compose-navigation/build.gradle
index 2f3d8cc..c3cda37 100644
--- a/wear/compose/compose-navigation/build.gradle
+++ b/wear/compose/compose-navigation/build.gradle
@@ -25,8 +25,8 @@
 
 dependencies {
 
-    api(project(":compose:ui:ui"))
-    api(project(":compose:runtime:runtime"))
+    api("androidx.compose.ui:ui:1.3.0-rc01")
+    api("androidx.compose.runtime:runtime:1.3.0-rc01")
     api("androidx.navigation:navigation-runtime:2.4.0")
     api(project(":wear:compose:compose-material"))
 
@@ -42,7 +42,7 @@
     androidTestImplementation(libs.truth)
     androidTestImplementation("androidx.lifecycle:lifecycle-runtime-testing:2.3.1")
 
-    samples(project(":wear:compose:compose-navigation-samples"))
+    samples("androidx.wear.compose:compose-navigation-samples:1.1.0-beta01")
 }
 
 android {
diff --git a/wear/tiles/tiles-proto/build.gradle b/wear/tiles/tiles-proto/build.gradle
index 90f691b..b2ebf91 100644
--- a/wear/tiles/tiles-proto/build.gradle
+++ b/wear/tiles/tiles-proto/build.gradle
@@ -80,25 +80,11 @@
         artifact = libs.protobufCompiler.get()
     }
 
-    // Generates the java proto-lite code for the protos in this project. See
-    // https://github.com/google/protobuf-gradle-plugin#customizing-protobuf-compilation
-    // for more information.
     generateProtoTasks {
+        ofSourceSet("main").each { task ->
+            sourceSets.main.java.srcDir(task)
+        }
         all().each { task ->
-            project.tasks.named("sourceJar").configure {
-                it.dependsOn(task)
-            }
-            project.tasks.named("runErrorProne").configure {
-                it.dependsOn(task)
-            }
-            project.tasks.named("lint").configure {
-                it.dependsOn(task)
-                it.enabled = false
-            }
-            project.tasks.named("lintAnalyze").configure {
-                it.dependsOn(task)
-                it.enabled = false
-            }
             task.builtins {
                 java {
                     option 'lite'
@@ -108,6 +94,15 @@
     }
 }
 
+afterEvaluate {
+    lint {
+        lintOptions {
+            // protobuf generates unannotated and synthetic accessor methods
+            disable("UnknownNullness", "SyntheticAccessor")
+        }
+    }
+}
+
 androidx {
     name = "Wear Tiles Proto"
     publish = Publish.SNAPSHOT_AND_RELEASE
diff --git a/wear/watchface/watchface-data/src/main/aidl/android/support/wearable/watchface/IWatchFaceService.aidl b/wear/watchface/watchface-data/src/main/aidl/android/support/wearable/watchface/IWatchFaceService.aidl
index eacc2ff..93cea18 100644
--- a/wear/watchface/watchface-data/src/main/aidl/android/support/wearable/watchface/IWatchFaceService.aidl
+++ b/wear/watchface/watchface-data/src/main/aidl/android/support/wearable/watchface/IWatchFaceService.aidl
@@ -19,6 +19,7 @@
 import android.content.ComponentName;
 import android.os.Bundle;
 import android.support.wearable.watchface.accessibility.ContentDescriptionLabel;
+import android.support.wearable.watchface.ParcelableWrapper;
 import android.support.wearable.watchface.WatchFaceStyle;
 import androidx.wear.watchface.style.data.UserStyleWireFormat;
 import androidx.wear.watchface.style.data.UserStyleSchemaWireFormat;
@@ -75,7 +76,7 @@
     void setContentDescriptionLabels(in ContentDescriptionLabel[] labels) = 4;
 
     /** Reserved. Do not use. */
-    void reserved5() = 5;
+    void reserved5(in ParcelableWrapper wrapper) = 5;
 
     /**
      * Sets the default provider for a complication, choosing the first element
@@ -99,5 +100,5 @@
     int getApiVersion() = 7;
 
     /** Reserved. Do not use. */
-    void reserved8() = 8;
+    void reserved8(in ParcelableWrapper wrapper, in IBinder binder) = 8;
 }
diff --git a/wear/watchface/watchface-data/src/main/aidl/android/support/wearable/watchface/ParcelableWrapper.aidl b/wear/watchface/watchface-data/src/main/aidl/android/support/wearable/watchface/ParcelableWrapper.aidl
new file mode 100644
index 0000000..80fe65b
--- /dev/null
+++ b/wear/watchface/watchface-data/src/main/aidl/android/support/wearable/watchface/ParcelableWrapper.aidl
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.wearable.watchface;
+
+/** @hide */
+parcelable ParcelableWrapper;
\ No newline at end of file
diff --git a/wear/watchface/watchface-data/src/main/java/android/support/wearable/watchface/ParcelableWrapper.kt b/wear/watchface/watchface-data/src/main/java/android/support/wearable/watchface/ParcelableWrapper.kt
new file mode 100644
index 0000000..735eeaa
--- /dev/null
+++ b/wear/watchface/watchface-data/src/main/java/android/support/wearable/watchface/ParcelableWrapper.kt
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.wearable.watchface
+
+import android.annotation.SuppressLint
+import android.os.Parcel
+import android.os.Parcelable
+import androidx.annotation.RestrictTo
+
+/**
+ * Wraps a Parcelable.
+ *
+ * @hide
+ */
+@SuppressLint("BanParcelableUsage")
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+class ParcelableWrapper(val parcelable: Parcelable) : Parcelable {
+
+    constructor(parcel: Parcel) : this(unparcel(parcel))
+
+    override fun writeToParcel(dest: Parcel, flags: Int) {
+        parcelable.writeToParcel(dest, flags)
+    }
+
+    override fun describeContents(): Int = parcelable.describeContents()
+
+    public companion object {
+        @JvmField
+        @Suppress("DEPRECATION")
+        public val CREATOR: Parcelable.Creator<ParcelableWrapper> =
+            object : Parcelable.Creator<ParcelableWrapper> {
+                override fun createFromParcel(parcel: Parcel) = ParcelableWrapper(parcel)
+
+                override fun newArray(size: Int) = arrayOfNulls<ParcelableWrapper?>(size)
+            }
+
+        internal var unparcel: (Parcel) -> Parcelable = {
+            throw RuntimeException("setUnparceler not called")
+        }
+
+        public fun setUnparceler(unparceler: (Parcel) -> Parcelable) {
+            unparcel = unparceler
+        }
+    }
+}
\ No newline at end of file
diff --git a/wear/watchface/watchface/src/test/java/androidx/wear/watchface/TestCommon.kt b/wear/watchface/watchface/src/test/java/androidx/wear/watchface/TestCommon.kt
index d6930a3..67b8777 100644
--- a/wear/watchface/watchface/src/test/java/androidx/wear/watchface/TestCommon.kt
+++ b/wear/watchface/watchface/src/test/java/androidx/wear/watchface/TestCommon.kt
@@ -24,9 +24,11 @@
 import android.graphics.Canvas
 import android.graphics.Rect
 import android.os.Handler
+import android.os.IBinder
 import android.support.wearable.complications.ComplicationData
 import android.support.wearable.complications.ComplicationText
 import android.support.wearable.watchface.IWatchFaceService
+import android.support.wearable.watchface.ParcelableWrapper
 import android.support.wearable.watchface.WatchFaceStyle
 import android.support.wearable.watchface.accessibility.ContentDescriptionLabel
 import android.view.SurfaceHolder
@@ -218,8 +220,8 @@
         iWatchFaceService.setContentDescriptionLabels(labels)
     }
 
-    override fun reserved5() {
-        iWatchFaceService.reserved5()
+    override fun reserved5(wrapper: ParcelableWrapper) {
+        iWatchFaceService.reserved5(wrapper)
     }
 
     override fun setDefaultComplicationProviderWithFallbacks(
@@ -233,8 +235,8 @@
         )
     }
 
-    override fun reserved8() {
-        iWatchFaceService.reserved8()
+    override fun reserved8(wrapper: ParcelableWrapper, binder: IBinder) {
+        iWatchFaceService.reserved8(wrapper, binder)
     }
 }
 
diff --git a/window/extensions/extensions/api/current.txt b/window/extensions/extensions/api/current.txt
index 8425531..8867f5f6c 100644
--- a/window/extensions/extensions/api/current.txt
+++ b/window/extensions/extensions/api/current.txt
@@ -16,6 +16,7 @@
 package androidx.window.extensions.embedding {
 
   public interface ActivityEmbeddingComponent {
+    method public void clearSplitInfoCallback();
     method public boolean isActivityEmbedded(android.app.Activity);
     method public void setEmbeddingRules(java.util.Set<androidx.window.extensions.embedding.EmbeddingRule!>);
     method public void setSplitInfoCallback(java.util.function.Consumer<java.util.List<androidx.window.extensions.embedding.SplitInfo!>!>);
diff --git a/window/extensions/extensions/api/public_plus_experimental_current.txt b/window/extensions/extensions/api/public_plus_experimental_current.txt
index 8425531..8867f5f6c 100644
--- a/window/extensions/extensions/api/public_plus_experimental_current.txt
+++ b/window/extensions/extensions/api/public_plus_experimental_current.txt
@@ -16,6 +16,7 @@
 package androidx.window.extensions.embedding {
 
   public interface ActivityEmbeddingComponent {
+    method public void clearSplitInfoCallback();
     method public boolean isActivityEmbedded(android.app.Activity);
     method public void setEmbeddingRules(java.util.Set<androidx.window.extensions.embedding.EmbeddingRule!>);
     method public void setSplitInfoCallback(java.util.function.Consumer<java.util.List<androidx.window.extensions.embedding.SplitInfo!>!>);
diff --git a/window/extensions/extensions/api/restricted_current.txt b/window/extensions/extensions/api/restricted_current.txt
index 8425531..8867f5f6c 100644
--- a/window/extensions/extensions/api/restricted_current.txt
+++ b/window/extensions/extensions/api/restricted_current.txt
@@ -16,6 +16,7 @@
 package androidx.window.extensions.embedding {
 
   public interface ActivityEmbeddingComponent {
+    method public void clearSplitInfoCallback();
     method public boolean isActivityEmbedded(android.app.Activity);
     method public void setEmbeddingRules(java.util.Set<androidx.window.extensions.embedding.EmbeddingRule!>);
     method public void setSplitInfoCallback(java.util.function.Consumer<java.util.List<androidx.window.extensions.embedding.SplitInfo!>!>);
diff --git a/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/ActivityEmbeddingComponent.java b/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/ActivityEmbeddingComponent.java
index 18c6793..16caa61 100644
--- a/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/ActivityEmbeddingComponent.java
+++ b/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/ActivityEmbeddingComponent.java
@@ -19,6 +19,7 @@
 import android.app.Activity;
 
 import androidx.annotation.NonNull;
+import androidx.window.extensions.WindowExtensions;
 
 import java.util.List;
 import java.util.Set;
@@ -45,10 +46,18 @@
      * re-posted to the executors provided by developers.
      */
     @SuppressWarnings("ExecutorRegistration") // Jetpack will post it on the app-provided executor.
-    // TODO (b/241973352): Change setSplitInfoCallback to setSplitInfoListener
     void setSplitInfoCallback(@NonNull Consumer<List<SplitInfo>> consumer);
 
     /**
+     * Clears the callback that was set in
+     * {@link ActivityEmbeddingComponent#setSplitInfoCallback(Consumer)}.
+     * Added in {@link WindowExtensions#getVendorApiLevel()} 2, calling an earlier version will
+     * throw {@link java.lang.NoSuchMethodError}.
+     * @since {@link androidx.window.extensions.WindowExtensions#VENDOR_API_LEVEL_2}
+     */
+    void clearSplitInfoCallback();
+
+    /**
      * Checks if an activity's' presentation is customized by its or any other process and only
      * occupies a portion of Task bounds.
      */