Merge "Refactor LimitOffsetPagingSourceTest to use paging-testing artifact" 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/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/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-tests/src/test/kotlin/androidx/build/AndroidXPluginTest.kt b/buildSrc-tests/src/test/kotlin/androidx/build/AndroidXPluginTest.kt
index dbb04ec..52c1135 100644
--- a/buildSrc-tests/src/test/kotlin/androidx/build/AndroidXPluginTest.kt
+++ b/buildSrc-tests/src/test/kotlin/androidx/build/AndroidXPluginTest.kt
@@ -58,7 +58,8 @@
     fun androidLibraryAndKotlinAndroid() = pluginTest {
         val project = cubaneProject.copy(
             buildGradleTextTemplate = cubaneBuildGradleText(
-                listOf("com.android.library", "kotlin-android", "AndroidXPlugin")
+                listOf("com.android.library", "kotlin-android", "AndroidXPlugin"),
+                moreConfig = "android { namespace \"androidx.foo\"}"
             )
         )
         writeBuildFiles(project)
@@ -69,7 +70,8 @@
     fun kotlinAndroidAndAndroidLibrary() = pluginTest {
         val project = cubaneProject.copy(
             buildGradleTextTemplate = cubaneBuildGradleText(
-                plugins = listOf("kotlin-android", "com.android.library", "AndroidXPlugin")
+                plugins = listOf("kotlin-android", "com.android.library", "AndroidXPlugin"),
+                moreConfig = "android { namespace \"androidx.foo\"}"
             )
         )
         writeBuildFiles(project)
@@ -85,7 +87,8 @@
                     "org.jetbrains.kotlin.android",
                     "AndroidXPlugin"
                 ),
-                version = null
+                version = null,
+                moreConfig = "android { namespace \"androidx.foo\"}"
             )
         )
         writeBuildFiles(project)
diff --git a/buildSrc-tests/src/test/kotlin/androidx/build/AndroidXRootPluginTest.kt b/buildSrc-tests/src/test/kotlin/androidx/build/AndroidXRootPluginTest.kt
index 30fb2d6..51040ef 100644
--- a/buildSrc-tests/src/test/kotlin/androidx/build/AndroidXRootPluginTest.kt
+++ b/buildSrc-tests/src/test/kotlin/androidx/build/AndroidXRootPluginTest.kt
@@ -122,6 +122,8 @@
                |  mavenLocal()
                |}
                |
+               |android { namespace "androidx.docs.docspublic" }
+               |
                |dependencies {
                |  ${sourceDependencies.joinToString("\n") { "docs(\"$it\")" }}
                |}
diff --git a/buildSrc-tests/src/test/kotlin/androidx/build/integrationtests/BuildInfoTest.kt b/buildSrc-tests/src/test/kotlin/androidx/build/integrationtests/BuildInfoTest.kt
index be9ff70..6af0bdc 100644
--- a/buildSrc-tests/src/test/kotlin/androidx/build/integrationtests/BuildInfoTest.kt
+++ b/buildSrc-tests/src/test/kotlin/androidx/build/integrationtests/BuildInfoTest.kt
@@ -80,7 +80,8 @@
         writeBuildFiles(
             AndroidXSelfTestProject.cubaneProject.copy(
                 buildGradleTextTemplate = AndroidXSelfTestProject.cubaneBuildGradleText(
-                    plugins = listOf("com.android.library", "AndroidXPlugin")
+                    plugins = listOf("com.android.library", "AndroidXPlugin"),
+                    moreConfig = "android { namespace \"androidx.foo\"}"
                 )
             )
         )
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/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/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 b0c5afee..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/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/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/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/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/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-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-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/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/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/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/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/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/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 4b64dae..ab4badc 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
@@ -26,6 +26,7 @@
 import org.jetbrains.kotlin.ir.declarations.IrAnnotationContainer
 import org.jetbrains.kotlin.ir.types.IrType
 import org.jetbrains.kotlin.ir.util.hasAnnotation
+import org.jetbrains.kotlin.name.CallableId
 import org.jetbrains.kotlin.name.ClassId
 import org.jetbrains.kotlin.name.FqName
 import org.jetbrains.kotlin.name.Name
@@ -36,64 +37,116 @@
 import org.jetbrains.kotlin.types.TypeUtils.UNIT_EXPECTED_TYPE
 import org.jetbrains.kotlin.types.typeUtil.replaceAnnotations
 
+private const val root = "androidx.compose.runtime"
+private const val internalRoot = "$root.internal"
+private val rootFqName = FqName(root)
+private val internalRootFqName = FqName(internalRoot)
+
+object ComposeClassIds {
+    private fun classIdFor(cname: String) =
+        ClassId(rootFqName, Name.identifier(cname))
+    internal fun internalClassIdFor(cname: String) =
+        ClassId(internalRootFqName, Name.identifier(cname))
+
+    val Composable = classIdFor("Composable")
+    val ComposableInferredTarget = classIdFor("ComposableInferredTarget")
+    val ComposableLambda = internalClassIdFor("ComposableLambda")
+    val ComposableOpenTarget = classIdFor("ComposableOpenTarget")
+    val ComposableTarget = classIdFor("ComposableTarget")
+    val ComposeVersion = classIdFor("ComposeVersion")
+    val Composer = classIdFor("Composer")
+    val FunctionKeyMetaClass = internalClassIdFor("FunctionKeyMetaClass")
+    val FunctionKeyMeta = internalClassIdFor("FunctionKeyMeta")
+    val LiveLiteralFileInfo = internalClassIdFor("LiveLiteralFileInfo")
+    val LiveLiteralInfo = internalClassIdFor("LiveLiteralInfo")
+    val NoLiveLiterals = classIdFor("NoLiveLiterals")
+    val State = classIdFor("State")
+    val StabilityInferred = internalClassIdFor("StabilityInferred")
+}
+
+object ComposeCallableIds {
+    private fun topLevelCallableId(name: String) =
+        CallableId(rootFqName, Name.identifier(name))
+    internal fun internalTopLevelCallableId(name: String) =
+        CallableId(internalRootFqName, Name.identifier(name))
+
+    val cache = topLevelCallableId("cache")
+    val composableLambda = internalTopLevelCallableId("composableLambda")
+    val composableLambdaInstance =
+        internalTopLevelCallableId("composableLambdaInstance")
+    val composableLambdaN = internalTopLevelCallableId("composableLambdaN")
+    val composableLambdaNInstance =
+        internalTopLevelCallableId("composableLambdaNInstance")
+    val currentComposer = topLevelCallableId("currentComposer")
+    val isLiveLiteralsEnabled =
+        internalTopLevelCallableId("isLiveLiteralsEnabled")
+    val isTraceInProgress =
+        topLevelCallableId(KtxNameConventions.IS_TRACE_IN_PROGRESS)
+    val liveLiteral = internalTopLevelCallableId("liveLiteral")
+    val remember = topLevelCallableId("remember")
+    val sourceInformation =
+        topLevelCallableId(KtxNameConventions.SOURCEINFORMATION)
+    val sourceInformationMarkerEnd =
+        topLevelCallableId(KtxNameConventions.SOURCEINFORMATIONMARKEREND)
+    val sourceInformationMarkerStart =
+        topLevelCallableId(KtxNameConventions.SOURCEINFORMATIONMARKERSTART)
+    val traceEventEnd = topLevelCallableId(KtxNameConventions.TRACE_EVENT_END)
+    val traceEventStart = topLevelCallableId(KtxNameConventions.TRACE_EVENT_START)
+}
+
 object ComposeFqNames {
-    private const val root = "androidx.compose.runtime"
-    private const val internalRoot = "$root.internal"
-    fun fqNameFor(cname: String) = FqName("$root.$cname")
-    fun internalFqNameFor(cname: String) = FqName("$internalRoot.$cname")
-    fun composablesFqNameFor(cname: String) = fqNameFor("ComposablesKt.$cname")
-    val Composable = fqNameFor("Composable")
-    val ComposableTarget = fqNameFor("ComposableTarget")
+    internal fun fqNameFor(cname: String) = FqName("$root.$cname")
+    private fun internalFqNameFor(cname: String) = FqName("$internalRoot.$cname")
+    private fun composablesFqNameFor(cname: String) = fqNameFor("ComposablesKt.$cname")
+
+    val Composable = ComposeClassIds.Composable.asSingleFqName()
+    val ComposableTarget = ComposeClassIds.ComposableTarget.asSingleFqName()
     val ComposableTargetMarker = fqNameFor("ComposableTargetMarker")
     val ComposableTargetMarkerDescription = "description"
-    val ComposableTargetMarkerDescriptionName = Name.identifier("description")
     val ComposableTargetApplierArgument = Name.identifier("applier")
-    val ComposableOpenTarget = fqNameFor("ComposableOpenTarget")
+    val ComposableOpenTarget = ComposeClassIds.ComposableOpenTarget.asSingleFqName()
     val ComposableOpenTargetIndexArgument = Name.identifier("index")
-    val ComposableInferredTarget = fqNameFor("ComposableInferredTarget")
+    val ComposableInferredTarget = ComposeClassIds.ComposableInferredTarget.asSingleFqName()
     val ComposableInferredTargetSchemeArgument = Name.identifier("scheme")
-    val internal = fqNameFor("internal")
     val CurrentComposerIntrinsic = fqNameFor("<get-currentComposer>")
     val getCurrentComposerFullName = composablesFqNameFor("<get-currentComposer>")
     val DisallowComposableCalls = fqNameFor("DisallowComposableCalls")
     val ReadOnlyComposable = fqNameFor("ReadOnlyComposable")
     val ExplicitGroupsComposable = fqNameFor("ExplicitGroupsComposable")
     val NonRestartableComposable = fqNameFor("NonRestartableComposable")
-    val composableLambdaType = internalFqNameFor("ComposableLambda")
-    val composableLambda = internalFqNameFor("composableLambda")
+    val composableLambdaType = ComposeClassIds.ComposableLambda.asSingleFqName()
+    val composableLambda = ComposeCallableIds.composableLambda.asSingleFqName()
     val composableLambdaFullName =
         internalFqNameFor("ComposableLambdaKt.composableLambda")
-    val composableLambdaInstance = internalFqNameFor("composableLambdaInstance")
-    val remember = fqNameFor("remember")
+    val remember = ComposeCallableIds.remember.asSingleFqName()
     val key = fqNameFor("key")
     val StableMarker = fqNameFor("StableMarker")
     val Stable = fqNameFor("Stable")
-    val Composer = fqNameFor("Composer")
-    val ComposeVersion = fqNameFor("ComposeVersion")
-    val Package = FqName(root)
-    val StabilityInferred = internalFqNameFor("StabilityInferred")
-    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]"
-        }
+    val Composer = ComposeClassIds.Composer.asSingleFqName()
+    val StabilityInferred = ComposeClassIds.StabilityInferred.asSingleFqName()
 }
 
+private fun makeComposableAnnotation(module: ModuleDescriptor): AnnotationDescriptor =
+    object : AnnotationDescriptor {
+        override val type: KotlinType
+            get() = module.findClassAcrossModuleDependencies(
+                ComposeClassIds.Composable
+            )!!.defaultType
+        override val allValueArguments: Map<Name, ConstantValue<*>> get() = emptyMap()
+        override val source: SourceElement get() = SourceElement.NO_SOURCE
+        override fun toString() = "[@Composable]"
+    }
+
 fun KotlinType.makeComposable(module: ModuleDescriptor): KotlinType {
     if (hasComposableAnnotation()) return this
-    val annotation = ComposeFqNames.makeComposableAnnotation(module)
+    val annotation = makeComposableAnnotation(module)
     return replaceAnnotations(Annotations.create(annotations + annotation))
 }
 
 fun AnonymousFunctionDescriptor.annotateAsComposable(module: ModuleDescriptor) =
     AnonymousFunctionDescriptor(
         containingDeclaration,
-        Annotations.create(annotations + ComposeFqNames.makeComposableAnnotation(module)),
+        Annotations.create(annotations + makeComposableAnnotation(module)),
         kind,
         source,
         isSuspend
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/VersionChecker.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/VersionChecker.kt
index 7e5a40d..45044c7 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/VersionChecker.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/VersionChecker.kt
@@ -115,13 +115,13 @@
         // version checker accesses bodies of the functions that are not deserialized in KLIB
         if (!context.platform.isJvm()) return
 
-        val versionClass = context.referenceClass(ComposeFqNames.ComposeVersion)
+        val versionClass = context.referenceClass(ComposeClassIds.ComposeVersion)
         if (versionClass == null) {
             // If the version class isn't present, it likely means that compose runtime isn't on the
             // classpath anywhere. But also for dev03-dev15 there wasn't any ComposeVersion class at
             // all, so we check for the presence of the Composer class here to try and check for the
             // case that an older version of Compose runtime is available.
-            val composerClass = context.referenceClass(ComposeFqNames.Composer)
+            val composerClass = context.referenceClass(ComposeClassIds.Composer)
             if (composerClass != null) {
                 outdatedRuntimeWithUnknownVersionNumber()
             } else {
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/AbstractComposeLowering.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/AbstractComposeLowering.kt
index f8c2c8a..b66b59c 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/AbstractComposeLowering.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/AbstractComposeLowering.kt
@@ -16,6 +16,7 @@
 
 package androidx.compose.compiler.plugins.kotlin.lower
 
+import androidx.compose.compiler.plugins.kotlin.ComposeClassIds
 import androidx.compose.compiler.plugins.kotlin.ComposeFqNames
 import androidx.compose.compiler.plugins.kotlin.FunctionMetrics
 import androidx.compose.compiler.plugins.kotlin.KtxNameConventions
@@ -142,6 +143,8 @@
 import org.jetbrains.kotlin.ir.util.primaryConstructor
 import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
 import org.jetbrains.kotlin.load.kotlin.computeJvmDescriptor
+import org.jetbrains.kotlin.name.CallableId
+import org.jetbrains.kotlin.name.ClassId
 import org.jetbrains.kotlin.name.FqName
 import org.jetbrains.kotlin.name.Name
 import org.jetbrains.kotlin.platform.jvm.isJvm
@@ -171,7 +174,7 @@
     protected val builtIns = context.irBuiltIns
 
     private val _composerIrClass =
-        context.referenceClass(ComposeFqNames.Composer)?.owner
+        context.referenceClass(ComposeClassIds.Composer)?.owner
             ?: error("Cannot find the Composer class in the classpath")
 
     // this ensures that composer always references up-to-date composer class symbol
@@ -192,46 +195,31 @@
         return symbolRemapper.getReferencedConstructor(symbol)
     }
 
-    fun getTopLevelClass(fqName: FqName): IrClassSymbol {
-        return getTopLevelClassOrNull(fqName) ?: error("Class not found in the classpath: $fqName")
+    fun getTopLevelClass(classId: ClassId): IrClassSymbol {
+        return getTopLevelClassOrNull(classId)
+            ?: error("Class not found in the classpath: ${classId.asSingleFqName()}")
     }
 
-    fun getTopLevelClassOrNull(fqName: FqName): IrClassSymbol? {
-        return context.referenceClass(fqName)
+    fun getTopLevelClassOrNull(classId: ClassId): IrClassSymbol? {
+        return context.referenceClass(classId)
     }
 
-    fun getTopLevelFunction(fqName: FqName): IrFunctionSymbol {
-        return getTopLevelFunctionOrNull(fqName)
-            ?: error("Function not found in the classpath: $fqName")
+    fun getTopLevelFunction(callableId: CallableId): IrSimpleFunctionSymbol {
+        return getTopLevelFunctionOrNull(callableId)
+            ?: error("Function not found in the classpath: ${callableId.asSingleFqName()}")
     }
 
-    fun getTopLevelFunctionOrNull(fqName: FqName): IrFunctionSymbol? {
-        return context.referenceFunctions(fqName).firstOrNull()
+    fun getTopLevelFunctionOrNull(callableId: CallableId): IrSimpleFunctionSymbol? {
+        return context.referenceFunctions(callableId).firstOrNull()
     }
 
-    fun getTopLevelFunctions(fqName: FqName): List<IrSimpleFunctionSymbol> {
-        return context.referenceFunctions(fqName).toList()
+    fun getTopLevelFunctions(callableId: CallableId): List<IrSimpleFunctionSymbol> {
+        return context.referenceFunctions(callableId).toList()
     }
 
-    fun getInternalFunction(name: String) = getTopLevelFunction(
-        ComposeFqNames.internalFqNameFor(name)
-    )
-
-    fun getInternalProperty(name: String) = getTopLevelPropertyGetter(
-        ComposeFqNames.internalFqNameFor(name)
-    )
-
-    fun getInternalClass(name: String) = getTopLevelClass(
-        ComposeFqNames.internalFqNameFor(name)
-    )
-
-    fun getInternalClassOrNull(name: String) = getTopLevelClassOrNull(
-        ComposeFqNames.internalFqNameFor(name)
-    )
-
-    fun getTopLevelPropertyGetter(fqName: FqName): IrFunctionSymbol {
-        val propertySymbol = context.referenceProperties(fqName).firstOrNull()
-            ?: error("Property was not found $fqName")
+    fun getTopLevelPropertyGetter(callableId: CallableId): IrFunctionSymbol {
+        val propertySymbol = context.referenceProperties(callableId).firstOrNull()
+            ?: error("Property was not found ${callableId.asSingleFqName()}")
         return symbolRemapper.getReferencedFunction(
             propertySymbol.owner.getter!!.symbol
         )
@@ -1281,8 +1269,10 @@
     name == KtxNameConventions.COMPOSER_PARAMETER &&
         type.constructor.declarationDescriptor?.fqNameSafe == ComposeFqNames.Composer
 
+// FIXME: There is a `functionN` factory in `IrBuiltIns`, but it currently produces unbound symbols.
+//        We can switch to this and remove this function once KT-54230 is fixed.
 fun IrPluginContext.function(arity: Int): IrClassSymbol =
-    referenceClass(FqName("kotlin.Function$arity"))!!
+    referenceClass(ClassId(FqName("kotlin"), Name.identifier("Function$arity")))!!
 
 val DeclarationDescriptorWithSource.startOffset: Int? get() =
     (this.source as? PsiSourceElement)?.psi?.startOffset
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ClassStabilityTransformer.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ClassStabilityTransformer.kt
index 5203f4d..7ca2185 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ClassStabilityTransformer.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ClassStabilityTransformer.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.compiler.plugins.kotlin.lower
 
-import androidx.compose.compiler.plugins.kotlin.ComposeFqNames
+import androidx.compose.compiler.plugins.kotlin.ComposeClassIds
 import androidx.compose.compiler.plugins.kotlin.ModuleMetrics
 import androidx.compose.compiler.plugins.kotlin.analysis.Stability
 import androidx.compose.compiler.plugins.kotlin.analysis.forEach
@@ -66,7 +66,7 @@
     ClassLoweringPass,
     ModuleLoweringPass {
 
-    private val StabilityInferredClass = getTopLevelClass(ComposeFqNames.StabilityInferred)
+    private val StabilityInferredClass = getTopLevelClass(ComposeClassIds.StabilityInferred)
     private val UNSTABLE = StabilityBits.UNSTABLE.bitsForSlot(0)
     private val STABLE = StabilityBits.STABLE.bitsForSlot(0)
 
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 ffd6daa..43327d5 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
@@ -16,6 +16,7 @@
 
 package androidx.compose.compiler.plugins.kotlin.lower
 
+import androidx.compose.compiler.plugins.kotlin.ComposeCallableIds
 import androidx.compose.compiler.plugins.kotlin.ComposeFqNames
 import androidx.compose.compiler.plugins.kotlin.FunctionMetrics
 import androidx.compose.compiler.plugins.kotlin.KtxNameConventions
@@ -609,52 +610,40 @@
     }
 
     private val sourceInformationFunction by guardedLazy {
-        getTopLevelFunctions(
-            ComposeFqNames.fqNameFor(KtxNameConventions.SOURCEINFORMATION)
-        ).map { it.owner }.first()
+        getTopLevelFunction(ComposeCallableIds.sourceInformation).owner
     }
 
     private val sourceInformationMarkerStartFunction by guardedLazy {
-        getTopLevelFunctions(
-            ComposeFqNames.fqNameFor(KtxNameConventions.SOURCEINFORMATIONMARKERSTART)
-        ).map { it.owner }.first()
+        getTopLevelFunction(ComposeCallableIds.sourceInformationMarkerStart).owner
     }
 
     private val isTraceInProgressFunction by guardedLazy {
-        getTopLevelFunctions(
-            ComposeFqNames.fqNameFor(KtxNameConventions.IS_TRACE_IN_PROGRESS)
-        ).map { it.owner }.singleOrNull {
-            it.valueParameters.isEmpty()
-        }
+        getTopLevelFunctions(ComposeCallableIds.isTraceInProgress).singleOrNull {
+            it.owner.valueParameters.isEmpty()
+        }?.owner
     }
 
     private val traceEventStartFunction by guardedLazy {
-        getTopLevelFunctions(
-            ComposeFqNames.fqNameFor(KtxNameConventions.TRACE_EVENT_START)
-        ).map { it.owner }.singleOrNull {
-            it.valueParameters.map { p -> p.type } == listOf(
+        getTopLevelFunctions(ComposeCallableIds.traceEventStart).singleOrNull {
+            it.owner.valueParameters.map { p -> p.type } == listOf(
                 context.irBuiltIns.intType,
                 context.irBuiltIns.intType,
                 context.irBuiltIns.intType,
                 context.irBuiltIns.stringType
             )
-        }
+        }?.owner
     }
 
     private val traceEventEndFunction by guardedLazy {
-        getTopLevelFunctions(
-            ComposeFqNames.fqNameFor(KtxNameConventions.TRACE_EVENT_END)
-        ).map { it.owner }.singleOrNull {
-            it.valueParameters.isEmpty()
-        }
+        getTopLevelFunctions(ComposeCallableIds.traceEventEnd).singleOrNull {
+            it.owner.valueParameters.isEmpty()
+        }?.owner
     }
 
     private val traceEventMarkersEnabled get() = traceEventEndFunction != null
 
     private val sourceInformationMarkerEndFunction by guardedLazy {
-        getTopLevelFunctions(
-            ComposeFqNames.fqNameFor(KtxNameConventions.SOURCEINFORMATIONMARKEREND)
-        ).map { it.owner }.first()
+        getTopLevelFunction(ComposeCallableIds.sourceInformationMarkerEnd).owner
     }
 
     private val IrType.arguments: List<IrTypeArgument>
@@ -702,9 +691,9 @@
     }
 
     private val cacheFunction by guardedLazy {
-        getTopLevelFunctions(ComposeFqNames.fqNameFor("cache")).map { it.owner }.first {
-            it.valueParameters.size == 2 && it.extensionReceiverParameter != null
-        }
+        getTopLevelFunctions(ComposeCallableIds.cache).first {
+            it.owner.valueParameters.size == 2 && it.owner.extensionReceiverParameter != null
+        }.owner
     }
 
     private var currentScope: Scope = Scope.RootScope()
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableTargetAnnotationsTransformer.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableTargetAnnotationsTransformer.kt
index 24e0a00..c01152a 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableTargetAnnotationsTransformer.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableTargetAnnotationsTransformer.kt
@@ -16,6 +16,7 @@
 
 package androidx.compose.compiler.plugins.kotlin.lower
 
+import androidx.compose.compiler.plugins.kotlin.ComposeClassIds
 import androidx.compose.compiler.plugins.kotlin.ComposeFqNames
 import androidx.compose.compiler.plugins.kotlin.KtxNameConventions
 import androidx.compose.compiler.plugins.kotlin.ModuleMetrics
@@ -102,13 +103,13 @@
     metrics: ModuleMetrics
 ) : AbstractComposeLowering(context, symbolRemapper, metrics) {
     private val ComposableTargetClass = symbolRemapper.getReferencedClassOrNull(
-        getTopLevelClassOrNull(ComposeFqNames.ComposableTarget)
+        getTopLevelClassOrNull(ComposeClassIds.ComposableTarget)
     )
     private val ComposableOpenTargetClass = symbolRemapper.getReferencedClassOrNull(
-        getTopLevelClassOrNull(ComposeFqNames.ComposableOpenTarget)
+        getTopLevelClassOrNull(ComposeClassIds.ComposableOpenTarget)
     )
     private val ComposableInferredTargetClass = symbolRemapper.getReferencedClassOrNull(
-        getTopLevelClassOrNull(ComposeFqNames.ComposableInferredTarget)
+        getTopLevelClassOrNull(ComposeClassIds.ComposableInferredTarget)
     )
 
     /**
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposerLambdaMemoization.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposerLambdaMemoization.kt
index 2ad1a72..03f2262 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposerLambdaMemoization.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposerLambdaMemoization.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.compiler.plugins.kotlin.lower
 
-import androidx.compose.compiler.plugins.kotlin.ComposeFqNames
+import androidx.compose.compiler.plugins.kotlin.ComposeCallableIds
 import androidx.compose.compiler.plugins.kotlin.ModuleMetrics
 import androidx.compose.compiler.plugins.kotlin.analysis.ComposeWritableSlices
 import androidx.compose.compiler.plugins.kotlin.analysis.knownStable
@@ -283,11 +283,6 @@
     }
 }
 
-const val COMPOSABLE_LAMBDA = "composableLambda"
-const val COMPOSABLE_LAMBDA_N = "composableLambdaN"
-const val COMPOSABLE_LAMBDA_INSTANCE = "composableLambdaInstance"
-const val COMPOSABLE_LAMBDA_N_INSTANCE = "composableLambdaNInstance"
-
 class ComposerLambdaMemoization(
     context: IrPluginContext,
     symbolRemapper: DeepCopySymbolRemapper,
@@ -393,9 +388,7 @@
     }
 
     private fun irCurrentComposer(): IrExpression {
-        val currentComposerSymbol = getTopLevelPropertyGetter(
-            ComposeFqNames.fqNameFor("currentComposer")
-        )
+        val currentComposerSymbol = getTopLevelPropertyGetter(ComposeCallableIds.currentComposer)
 
         return IrCallImpl(
             UNDEFINED_OFFSET,
@@ -720,13 +713,13 @@
         val restartFunctionFactory =
             if (useComposableFactory)
                 if (useComposableLambdaN)
-                    COMPOSABLE_LAMBDA_N
-                else COMPOSABLE_LAMBDA
+                    ComposeCallableIds.composableLambdaN
+                else ComposeCallableIds.composableLambda
             else if (useComposableLambdaN)
-                COMPOSABLE_LAMBDA_N_INSTANCE
-            else COMPOSABLE_LAMBDA_INSTANCE
+                ComposeCallableIds.composableLambdaNInstance
+            else ComposeCallableIds.composableLambdaInstance
         val restartFactorySymbol =
-            getTopLevelFunction(ComposeFqNames.internalFqNameFor(restartFunctionFactory))
+            getTopLevelFunction(restartFunctionFactory)
         val irBuilder = DeclarationIrBuilder(
             context,
             symbol = declarationContext.symbol,
@@ -815,9 +808,7 @@
         // Otherwise memoize the expression based on the stable captured values
         val rememberParameterCount = captures.size + 1 // One additional parameter for the lambda
         val declaration = functionContext.declaration
-        val rememberFunctions = getTopLevelFunctions(
-            ComposeFqNames.fqNameFor("remember")
-        ).map { it.owner }
+        val rememberFunctions = getTopLevelFunctions(ComposeCallableIds.remember).map { it.owner }
 
         val directRememberFunction = // Exclude the varargs version
             rememberFunctions.singleOrNull {
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposerParamTransformer.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposerParamTransformer.kt
index dd0640f..523769d 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposerParamTransformer.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposerParamTransformer.kt
@@ -87,6 +87,7 @@
 import org.jetbrains.kotlin.ir.visitors.acceptVoid
 import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
 import org.jetbrains.kotlin.load.java.JvmAbi
+import org.jetbrains.kotlin.name.StandardClassIds
 import org.jetbrains.kotlin.platform.js.isJs
 import org.jetbrains.kotlin.platform.jvm.isJvm
 import org.jetbrains.kotlin.resolve.DescriptorUtils
@@ -439,7 +440,7 @@
     }
 
     private fun jvmNameAnnotation(name: String): IrConstructorCall {
-        val jvmName = getTopLevelClass(DescriptorUtils.JVM_NAME)
+        val jvmName = getTopLevelClass(StandardClassIds.Annotations.JvmName)
         val ctor = jvmName.constructors.first { it.owner.isPrimary }
         val type = jvmName.createType(false, emptyList())
         return IrConstructorCallImpl(
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/DurableFunctionKeyTransformer.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/DurableFunctionKeyTransformer.kt
index b1c804b..615d019 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/DurableFunctionKeyTransformer.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/DurableFunctionKeyTransformer.kt
@@ -16,6 +16,7 @@
 
 package androidx.compose.compiler.plugins.kotlin.lower
 
+import androidx.compose.compiler.plugins.kotlin.ComposeClassIds
 import androidx.compose.compiler.plugins.kotlin.ModuleMetrics
 import androidx.compose.compiler.plugins.kotlin.analysis.ComposeWritableSlices.DURABLE_FUNCTION_KEY
 import androidx.compose.compiler.plugins.kotlin.analysis.ComposeWritableSlices.DURABLE_FUNCTION_KEYS
@@ -150,9 +151,9 @@
     var currentKeys = mutableListOf<KeyInfo>()
 
     private val keyMetaAnnotation =
-        getInternalClassOrNull("FunctionKeyMeta")
+        getTopLevelClassOrNull(ComposeClassIds.FunctionKeyMeta)
     private val metaClassAnnotation =
-        getInternalClassOrNull("FunctionKeyMetaClass")
+        getTopLevelClassOrNull(ComposeClassIds.FunctionKeyMetaClass)
 
     private fun irKeyMetaAnnotation(
         key: KeyInfo
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/LiveLiteralTransformer.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/LiveLiteralTransformer.kt
index 3a947158..169258c 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/LiveLiteralTransformer.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/LiveLiteralTransformer.kt
@@ -16,7 +16,8 @@
 
 package androidx.compose.compiler.plugins.kotlin.lower
 
-import androidx.compose.compiler.plugins.kotlin.ComposeFqNames
+import androidx.compose.compiler.plugins.kotlin.ComposeCallableIds
+import androidx.compose.compiler.plugins.kotlin.ComposeClassIds
 import androidx.compose.compiler.plugins.kotlin.ModuleMetrics
 import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
 import org.jetbrains.kotlin.backend.common.lower.DeclarationIrBuilder
@@ -170,19 +171,17 @@
     }
 
     private val liveLiteral =
-        getInternalFunction("liveLiteral")
-    private val derivedStateOf =
-        getTopLevelFunction(ComposeFqNames.fqNameFor("derivedStateOf"))
+        getTopLevelFunction(ComposeCallableIds.liveLiteral)
     private val isLiveLiteralsEnabled =
-        getInternalProperty("isLiveLiteralsEnabled")
+        getTopLevelPropertyGetter(ComposeCallableIds.isLiveLiteralsEnabled)
     private val liveLiteralInfoAnnotation =
-        getInternalClass("LiveLiteralInfo")
+        getTopLevelClass(ComposeClassIds.LiveLiteralInfo)
     private val liveLiteralFileInfoAnnotation =
-        getInternalClass("LiveLiteralFileInfo")
+        getTopLevelClass(ComposeClassIds.LiveLiteralFileInfo)
     private val stateInterface =
-        getTopLevelClass(ComposeFqNames.fqNameFor("State"))
+        getTopLevelClass(ComposeClassIds.State)
     private val NoLiveLiteralsAnnotation =
-        getTopLevelClass(ComposeFqNames.fqNameFor("NoLiveLiterals"))
+        getTopLevelClass(ComposeClassIds.NoLiveLiterals)
 
     private fun IrAnnotationContainer.hasNoLiveLiteralsAnnotation(): Boolean = annotations.any {
         it.symbol.owner == NoLiveLiteralsAnnotation.owner.primaryConstructor
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/WrapJsComposableLambdaLowering.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/WrapJsComposableLambdaLowering.kt
index ba60e0b0..1f74d01 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/WrapJsComposableLambdaLowering.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/WrapJsComposableLambdaLowering.kt
@@ -16,7 +16,8 @@
 
 package androidx.compose.compiler.plugins.kotlin.lower
 
-import androidx.compose.compiler.plugins.kotlin.ComposeFqNames
+import androidx.compose.compiler.plugins.kotlin.ComposeCallableIds
+import androidx.compose.compiler.plugins.kotlin.ComposeClassIds
 import androidx.compose.compiler.plugins.kotlin.ModuleMetrics
 import androidx.compose.compiler.plugins.kotlin.lower.decoys.AbstractDecoysLowering
 import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
@@ -46,7 +47,9 @@
 import org.jetbrains.kotlin.ir.util.isVararg
 import org.jetbrains.kotlin.ir.util.patchDeclarationParents
 import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
+import org.jetbrains.kotlin.name.CallableId
 import org.jetbrains.kotlin.name.FqName
+import org.jetbrains.kotlin.name.Name
 import org.jetbrains.kotlin.name.SpecialNames
 
 /**
@@ -81,10 +84,10 @@
 ) : AbstractDecoysLowering(context, symbolRemapper, metrics, signatureBuilder) {
 
     private val composableLambdaSymbol = symbolRemapper.getReferencedSimpleFunction(
-        getTopLevelFunctions(ComposeFqNames.composableLambda).first()
+        getTopLevelFunction(ComposeCallableIds.composableLambda)
     )
     private val composableLambdaInstanceSymbol = symbolRemapper.getReferencedSimpleFunction(
-        getTopLevelFunctions(ComposeFqNames.composableLambdaInstance).first()
+        getTopLevelFunction(ComposeCallableIds.composableLambdaInstance)
     )
 
     override fun lower(module: IrModuleFragment) {
@@ -113,7 +116,7 @@
             if (lambda.function.extensionReceiverParameter != null) 1 else 0
 
         val invokeSymbol = symbolRemapper.getReferencedClass(
-            getTopLevelClass(ComposeFqNames.composableLambdaType)
+            getTopLevelClass(ComposeClassIds.ComposableLambda)
         ).functions.single {
             it.owner.name.asString() == "invoke" &&
                 argumentsCount == it.owner.valueParameters.size
@@ -143,9 +146,9 @@
         )
 
         val rememberFunSymbol = symbolRemapper.getReferencedSimpleFunction(
-            getTopLevelFunctions(ComposeFqNames.remember).map { it.owner }.first {
-                it.valueParameters.size == 2 && !it.valueParameters.first().isVararg
-            }.symbol
+            getTopLevelFunctions(ComposeCallableIds.remember).first {
+                it.owner.valueParameters.size == 2 && !it.owner.valueParameters.first().isVararg
+            }
         ).owner.getComposableForDecoy() as IrSimpleFunctionSymbol
 
         val calculationFunSymbol = IrSimpleFunctionSymbolImpl()
@@ -193,7 +196,9 @@
     }
 
     private fun callRun(returnType: IrType, runBlock: IrFunctionExpressionImpl): IrCall {
-        val runSymbol = getTopLevelFunctions(FqName("kotlin.run")).first()
+        val runSymbol = getTopLevelFunction(
+            CallableId(FqName("kotlin"), Name.identifier("run"))
+        )
         return IrCallImpl(
             startOffset = SYNTHETIC_OFFSET,
             endOffset = SYNTHETIC_OFFSET,
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/decoys/CreateDecoysTransformer.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/decoys/CreateDecoysTransformer.kt
index 5ea4a05..e9df6af 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/decoys/CreateDecoysTransformer.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/decoys/CreateDecoysTransformer.kt
@@ -100,18 +100,18 @@
     private val originalFunctions: MutableMap<IrFunction, IrDeclarationParent> = mutableMapOf()
 
     private val decoyAnnotation by lazy {
-        getTopLevelClass(DecoyFqNames.Decoy).owner
+        getTopLevelClass(DecoyClassIds.Decoy).owner
     }
 
     private val decoyImplementationAnnotation by lazy {
-        getTopLevelClass(DecoyFqNames.DecoyImplementation).owner
+        getTopLevelClass(DecoyClassIds.DecoyImplementation).owner
     }
 
     private val decoyImplementationDefaultsBitmaskAnnotation =
-        getTopLevelClass(DecoyFqNames.DecoyImplementationDefaultsBitMask).owner
+        getTopLevelClass(DecoyClassIds.DecoyImplementationDefaultsBitMask).owner
 
     private val decoyStub by lazy {
-        getInternalFunction("illegalDecoyCallException").owner
+        getTopLevelFunction(DecoyCallableIds.illegalDecoyCallException).owner
     }
 
     override fun lower(module: IrModuleFragment) {
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/decoys/DecoyFqNames.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/decoys/DecoyFqNames.kt
index e834acb..37a409f 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/decoys/DecoyFqNames.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/decoys/DecoyFqNames.kt
@@ -16,14 +16,28 @@
 
 package androidx.compose.compiler.plugins.kotlin.lower.decoys
 
+import androidx.compose.compiler.plugins.kotlin.ComposeCallableIds
+import androidx.compose.compiler.plugins.kotlin.ComposeClassIds
 import androidx.compose.compiler.plugins.kotlin.ComposeFqNames
 
-object DecoyFqNames {
-    val Decoy = ComposeFqNames.internalFqNameFor("Decoy")
-    val DecoyImplementation = ComposeFqNames.internalFqNameFor("DecoyImplementation")
+object DecoyClassIds {
+    val Decoy = ComposeClassIds.internalClassIdFor("Decoy")
+    val DecoyImplementation = ComposeClassIds.internalClassIdFor("DecoyImplementation")
     val DecoyImplementationDefaultsBitMask =
-        ComposeFqNames.internalFqNameFor("DecoyImplementationDefaultsBitMask")
-    val CurrentComposerIntrinsic =
-        ComposeFqNames.fqNameFor("\$get-currentComposer\$\$composable")
+        ComposeClassIds.internalClassIdFor("DecoyImplementationDefaultsBitMask")
+}
+
+object DecoyCallableIds {
+    val illegalDecoyCallException =
+        ComposeCallableIds.internalTopLevelCallableId("illegalDecoyCallException")
+}
+
+object DecoyFqNames {
+    val Decoy = DecoyClassIds.Decoy.asSingleFqName()
+    val DecoyImplementation = DecoyClassIds.DecoyImplementation.asSingleFqName()
+    val DecoyImplementationDefaultsBitMask =
+        DecoyClassIds.DecoyImplementationDefaultsBitMask.asSingleFqName()
+
+    val CurrentComposerIntrinsic = ComposeFqNames.fqNameFor("\$get-currentComposer\$\$composable")
     val key = ComposeFqNames.fqNameFor("key\$composable")
 }
diff --git a/compose/compiler/compiler/integration-tests/src/test/kotlin/androidx/compose/compiler/test/CompilerPluginRuntimeVersionCheckTest.kt b/compose/compiler/compiler/integration-tests/src/test/kotlin/androidx/compose/compiler/test/CompilerPluginRuntimeVersionCheckTest.kt
index ae4c7d3..c3191b3 100644
--- a/compose/compiler/compiler/integration-tests/src/test/kotlin/androidx/compose/compiler/test/CompilerPluginRuntimeVersionCheckTest.kt
+++ b/compose/compiler/compiler/integration-tests/src/test/kotlin/androidx/compose/compiler/test/CompilerPluginRuntimeVersionCheckTest.kt
@@ -168,6 +168,7 @@
             apply plugin: "kotlin-android"
 
             android {
+                namespace "androidx.compose.compiler.test"
                 compileSdkVersion ${projectSetup.props.compileSdkVersion}
                 buildToolsVersion "${projectSetup.props.buildToolsVersion}"
                 defaultConfig {
@@ -206,9 +207,7 @@
         addFileWithContent(
             "$MAIN_DIR/AndroidManifest.xml",
             """
-            <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-                package="androidx.compose.compiler.test">
-            </manifest>
+            <manifest/>
             """.trimIndent()
         )
     }
diff --git a/compose/foundation/foundation-layout/api/public_plus_experimental_current.txt b/compose/foundation/foundation-layout/api/public_plus_experimental_current.txt
index 75303a4..f788920 100644
--- a/compose/foundation/foundation-layout/api/public_plus_experimental_current.txt
+++ b/compose/foundation/foundation-layout/api/public_plus_experimental_current.txt
@@ -310,6 +310,8 @@
     method public static boolean getConsumeWindowInsets(androidx.compose.ui.platform.ComposeView);
     method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getDisplayCutout(androidx.compose.foundation.layout.WindowInsets.Companion);
     method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getIme(androidx.compose.foundation.layout.WindowInsets.Companion);
+    method @androidx.compose.foundation.layout.ExperimentalLayoutApi @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getImeAnimationSource(androidx.compose.foundation.layout.WindowInsets.Companion);
+    method @androidx.compose.foundation.layout.ExperimentalLayoutApi @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getImeAnimationTarget(androidx.compose.foundation.layout.WindowInsets.Companion);
     method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getMandatorySystemGestures(androidx.compose.foundation.layout.WindowInsets.Companion);
     method @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getNavigationBars(androidx.compose.foundation.layout.WindowInsets.Companion);
     method @androidx.compose.foundation.layout.ExperimentalLayoutApi @androidx.compose.runtime.Composable @androidx.compose.runtime.NonRestartableComposable public static androidx.compose.foundation.layout.WindowInsets getNavigationBarsIgnoringVisibility(androidx.compose.foundation.layout.WindowInsets.Companion);
diff --git a/compose/foundation/foundation-layout/src/androidAndroidTest/AndroidManifest.xml b/compose/foundation/foundation-layout/src/androidAndroidTest/AndroidManifest.xml
index 9f5c83b..32edf28 100644
--- a/compose/foundation/foundation-layout/src/androidAndroidTest/AndroidManifest.xml
+++ b/compose/foundation/foundation-layout/src/androidAndroidTest/AndroidManifest.xml
@@ -23,5 +23,9 @@
             android:name="androidx.compose.foundation.layout.WindowInsetsActivity"
             android:windowSoftInputMode="adjustResize"
             android:theme="@android:style/Theme.Material.NoActionBar.Fullscreen" />
+        <activity
+            android:name="androidx.compose.foundation.layout.WindowInsetsActionBarActivity"
+            android:windowSoftInputMode="adjustResize"
+            android:theme="@android:style/Theme.Material.Light" />
     </application>
 </manifest>
diff --git a/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/WindowInsetsActivity.kt b/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/WindowInsetsActivity.kt
index cc38754..245cff1 100644
--- a/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/WindowInsetsActivity.kt
+++ b/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/WindowInsetsActivity.kt
@@ -20,7 +20,7 @@
 import androidx.core.view.WindowCompat
 import java.util.concurrent.CountDownLatch
 
-class WindowInsetsActivity : ComponentActivity() {
+open class WindowInsetsActivity : ComponentActivity() {
     val createdLatch = CountDownLatch(1)
     val attachedToWindowLatch = CountDownLatch(1)
 
@@ -35,3 +35,5 @@
         super.onAttachedToWindow()
     }
 }
+
+class WindowInsetsActionBarActivity : WindowInsetsActivity()
\ No newline at end of file
diff --git a/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/WindowInsetsAnimationTest.kt b/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/WindowInsetsAnimationTest.kt
new file mode 100644
index 0000000..894b35c
--- /dev/null
+++ b/compose/foundation/foundation-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/WindowInsetsAnimationTest.kt
@@ -0,0 +1,136 @@
+/*
+ * 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.foundation.layout
+
+import android.view.View
+import androidx.compose.foundation.text.BasicTextField
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.focus.FocusRequester
+import androidx.compose.ui.focus.focusRequester
+import androidx.compose.ui.platform.LocalDensity
+import androidx.compose.ui.platform.LocalView
+import androidx.compose.ui.test.junit4.createAndroidComposeRule
+import androidx.core.view.WindowInsetsCompat
+import androidx.core.view.WindowInsetsControllerCompat
+import androidx.test.filters.MediumTest
+import java.util.concurrent.TimeUnit
+import org.junit.After
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+
+@MediumTest
+class WindowInsetsAnimationTest {
+    @get:Rule
+    val rule = createAndroidComposeRule<WindowInsetsActionBarActivity>()
+
+    @Before
+    fun setup() {
+        rule.activity.createdLatch.await(1, TimeUnit.SECONDS)
+        rule.activity.attachedToWindowLatch.await(1, TimeUnit.SECONDS)
+    }
+
+    @After
+    fun teardown() {
+        rule.runOnUiThread {
+            val window = rule.activity.window
+            val view = window.decorView
+            WindowInsetsControllerCompat(window, view).hide(WindowInsetsCompat.Type.ime())
+        }
+    }
+
+    @OptIn(ExperimentalLayoutApi::class)
+    @Test
+    fun imeAnimationWhenShowingIme() {
+        val imeAnimationSourceValues = mutableListOf<Int>()
+        val imeAnimationTargetValues = mutableListOf<Int>()
+        val focusRequester = FocusRequester()
+        rule.setContent {
+            val density = LocalDensity.current
+            val source = WindowInsets.imeAnimationSource
+            val target = WindowInsets.imeAnimationTarget
+            val sourceBottom = source.getBottom(density)
+            imeAnimationSourceValues += sourceBottom
+            val targetBottom = target.getBottom(density)
+            imeAnimationTargetValues += targetBottom
+            BasicTextField(
+                value = "Hello World",
+                onValueChange = {},
+                Modifier.focusRequester(focusRequester)
+            )
+        }
+
+        rule.waitForIdle()
+        rule.runOnUiThread {
+            focusRequester.requestFocus()
+        }
+
+        rule.waitForIdle()
+        rule.waitUntil(timeoutMillis = 3000) {
+            imeAnimationSourceValues.last() > imeAnimationTargetValues.first()
+        }
+
+        rule.waitUntil(timeoutMillis = 3000) {
+            imeAnimationTargetValues.last() == imeAnimationSourceValues.last()
+        }
+    }
+
+    @OptIn(ExperimentalLayoutApi::class)
+    @Test
+    fun imeAnimationWhenHidingIme() {
+        val imeAnimationSourceValues = mutableListOf<Int>()
+        val imeAnimationTargetValues = mutableListOf<Int>()
+        val focusRequester = FocusRequester()
+        lateinit var view: View
+        rule.setContent {
+            view = LocalView.current
+            val density = LocalDensity.current
+            val source = WindowInsets.imeAnimationSource
+            val target = WindowInsets.imeAnimationTarget
+            val sourceBottom = source.getBottom(density)
+            imeAnimationSourceValues += sourceBottom
+            val targetBottom = target.getBottom(density)
+            imeAnimationTargetValues += targetBottom
+            BasicTextField(
+                value = "Hello World",
+                onValueChange = {},
+                Modifier.focusRequester(focusRequester)
+            )
+        }
+
+        rule.waitForIdle()
+        rule.runOnUiThread {
+            focusRequester.requestFocus()
+        }
+
+        rule.waitUntil(timeoutMillis = 3000) {
+            val target = imeAnimationTargetValues.last()
+            val source = imeAnimationSourceValues.last()
+            target > imeAnimationSourceValues.first() && target == source
+        }
+
+        rule.runOnUiThread {
+            val window = rule.activity.window
+            WindowInsetsControllerCompat(window, view).hide(WindowInsetsCompat.Type.ime())
+        }
+
+        rule.waitForIdle()
+
+        rule.waitUntil(timeoutMillis = 3000) {
+            imeAnimationTargetValues.last() == imeAnimationSourceValues.first()
+        }
+    }
+}
\ No newline at end of file
diff --git a/compose/foundation/foundation-layout/src/androidMain/kotlin/androidx/compose/foundation/layout/WindowInsets.android.kt b/compose/foundation/foundation-layout/src/androidMain/kotlin/androidx/compose/foundation/layout/WindowInsets.android.kt
index 1ea0f98..c77441a 100644
--- a/compose/foundation/foundation-layout/src/androidMain/kotlin/androidx/compose/foundation/layout/WindowInsets.android.kt
+++ b/compose/foundation/foundation-layout/src/androidMain/kotlin/androidx/compose/foundation/layout/WindowInsets.android.kt
@@ -373,6 +373,36 @@
     get() = WindowInsetsHolder.current().tappableElement.isVisible
 
 /**
+ * The [WindowInsets] for the IME before the IME started animating in. The current
+ * animated value is [WindowInsets.Companion.ime].
+ *
+ * This will be the same as [imeAnimationTarget] when there is no IME animation
+ * in progress.
+ */
+@ExperimentalLayoutApi
+val WindowInsets.Companion.imeAnimationSource: WindowInsets
+    @Suppress("OPT_IN_MARKER_ON_WRONG_TARGET")
+    @ExperimentalLayoutApi
+    @Composable
+    @NonRestartableComposable
+    get() = WindowInsetsHolder.current().imeAnimationSource
+
+/**
+ * The [WindowInsets] for the IME when the animation completes, if it is allowed
+ * to complete successfully. The current animated value is [WindowInsets.Companion.ime].
+ *
+ * This will be the same as [imeAnimationSource] when there is no IME animation
+ * in progress.
+ */
+@ExperimentalLayoutApi
+val WindowInsets.Companion.imeAnimationTarget: WindowInsets
+    @Suppress("OPT_IN_MARKER_ON_WRONG_TARGET")
+    @ExperimentalLayoutApi
+    @Composable
+    @NonRestartableComposable
+    get() = WindowInsetsHolder.current().imeAnimationTarget
+
+/**
  * The insets for various values in the current window.
  */
 internal class WindowInsetsHolder private constructor(insets: WindowInsetsCompat?, view: View) {
@@ -427,6 +457,16 @@
         WindowInsetsCompat.Type.tappableElement(),
         "tappableElementIgnoringVisibility"
     )
+    val imeAnimationTarget = valueInsetsIgnoringVisibility(
+        insets,
+        WindowInsetsCompat.Type.ime(),
+        "imeAnimationTarget"
+    )
+    val imeAnimationSource = valueInsetsIgnoringVisibility(
+        insets,
+        WindowInsetsCompat.Type.ime(),
+        "imeAnimationSource"
+    )
 
     /**
      * `true` unless the `ComposeView` [ComposeView.consumeWindowInsets] is set to `false`.
@@ -527,6 +567,24 @@
         Snapshot.sendApplyNotifications()
     }
 
+    /**
+     * Updates [WindowInsets.Companion.imeAnimationSource]. It should be called prior to
+     * [update].
+     */
+    fun updateImeAnimationSource(windowInsets: WindowInsetsCompat) {
+        imeAnimationSource.value =
+            windowInsets.getInsets(WindowInsetsCompat.Type.ime()).toInsetsValues()
+    }
+
+    /**
+     * Updates [WindowInsets.Companion.imeAnimationTarget]. It should be called prior to
+     * [update].
+     */
+    fun updateImeAnimationTarget(windowInsets: WindowInsetsCompat) {
+        imeAnimationTarget.value =
+            windowInsets.getInsets(WindowInsetsCompat.Type.ime()).toInsetsValues()
+    }
+
     companion object {
         /**
          * A mapping of AndroidComposeView to ComposeWindowInsets. Normally a tag is a great
@@ -649,6 +707,8 @@
         runningAnimation = false
         val insets = savedInsets
         if (animation.durationMillis != 0L && insets != null) {
+            composeInsets.updateImeAnimationSource(insets)
+            composeInsets.updateImeAnimationTarget(insets)
             composeInsets.update(insets)
         }
         savedInsets = null
@@ -659,6 +719,7 @@
         // Keep track of the most recent insets we've seen, to ensure onEnd will always use the
         // most recently acquired insets
         savedInsets = insets
+        composeInsets.updateImeAnimationTarget(insets)
         if (prepared) {
             // There may be no callback on R if the animation is canceled after onPrepare(),
             // so we won't know if the onPrepare() was canceled or if this is an
@@ -671,6 +732,7 @@
             // If an animation is running, rely on onProgress() to update the insets
             // On APIs less than 30 where the IME animation is backported, this avoids reporting
             // the final insets for a frame while the animation is running.
+            composeInsets.updateImeAnimationSource(insets)
             composeInsets.update(insets)
         }
         return if (composeInsets.consumes) WindowInsetsCompat.CONSUMED else insets
@@ -688,6 +750,7 @@
             prepared = false
             runningAnimation = false
             savedInsets?.let {
+                composeInsets.updateImeAnimationSource(it)
                 composeInsets.update(it)
                 savedInsets = null
             }
diff --git a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/StrokeDemo.kt b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/StrokeDemo.kt
new file mode 100644
index 0000000..c3c5211
--- /dev/null
+++ b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/StrokeDemo.kt
@@ -0,0 +1,176 @@
+/*
+ * 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.foundation.demos.text
+
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
+import androidx.compose.material.LocalTextStyle
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.RadioButton
+import androidx.compose.material.Slider
+import androidx.compose.material.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.derivedStateOf
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.graphics.Brush
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathEffect
+import androidx.compose.ui.graphics.StrokeCap
+import androidx.compose.ui.graphics.StrokeJoin
+import androidx.compose.ui.graphics.drawscope.Stroke
+import androidx.compose.ui.text.ExperimentalTextApi
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+
+@OptIn(ExperimentalTextApi::class)
+@Composable
+fun TextStrokeDemo() {
+    var dashInterval by remember { mutableStateOf(2f) }
+    var stroke by remember {
+        mutableStateOf(
+            Stroke(
+                width = 4f, pathEffect = PathEffect.dashPathEffect(
+                    floatArrayOf(2f, 2f)
+                )
+            )
+        )
+    }
+    var fontSize by remember { mutableStateOf(20.sp) }
+
+    val finalStroke by remember {
+        derivedStateOf {
+            stroke.copy(
+                pathEffect = PathEffect.dashPathEffect(
+                    floatArrayOf(
+                        dashInterval,
+                        dashInterval
+                    ), phase = 0f
+                )
+            )
+        }
+    }
+    Column(verticalArrangement = Arrangement.spacedBy(8.dp)) {
+        Text("Font Size")
+        Slider(
+            value = fontSize.value,
+            onValueChange = {
+                fontSize = it.sp
+            },
+            valueRange = 8f..144f
+        )
+        Text("Width")
+        Slider(
+            value = stroke.width,
+            onValueChange = {
+                stroke = stroke.copy(width = it)
+            },
+            valueRange = 0f..16f,
+            steps = 16
+        )
+        Text("Miter")
+        Slider(
+            value = stroke.miter,
+            onValueChange = {
+                stroke = stroke.copy(miter = it)
+            },
+            valueRange = 0f..16f,
+            steps = 16
+        )
+
+        Text("Dash on/off intervals")
+        Slider(
+            value = dashInterval,
+            onValueChange = { dashInterval = it },
+            valueRange = 0f..16f,
+            steps = 16
+        )
+
+        Text("Cap")
+        Row(
+            verticalAlignment = Alignment.CenterVertically,
+            horizontalArrangement = Arrangement.SpaceBetween
+        ) {
+            RadioButton(
+                selected = stroke.cap == StrokeCap.Butt,
+                onClick = { stroke = stroke.copy(cap = StrokeCap.Butt) })
+            Text(text = "Butt", style = MaterialTheme.typography.body2)
+
+            RadioButton(
+                selected = stroke.cap == StrokeCap.Round,
+                onClick = { stroke = stroke.copy(cap = StrokeCap.Round) })
+            Text(text = "Round", style = MaterialTheme.typography.body2)
+
+            RadioButton(
+                selected = stroke.cap == StrokeCap.Square,
+                onClick = { stroke = stroke.copy(cap = StrokeCap.Square) })
+            Text(text = "Square", style = MaterialTheme.typography.body2)
+        }
+
+        Text("Join")
+        Row(
+            verticalAlignment = Alignment.CenterVertically,
+            horizontalArrangement = Arrangement.SpaceBetween
+        ) {
+            RadioButton(
+                selected = stroke.join == StrokeJoin.Round,
+                onClick = { stroke = stroke.copy(join = StrokeJoin.Round) })
+            Text(text = "Round", style = MaterialTheme.typography.body2)
+
+            RadioButton(
+                selected = stroke.join == StrokeJoin.Miter,
+                onClick = { stroke = stroke.copy(join = StrokeJoin.Miter) })
+            Text(text = "Miter", style = MaterialTheme.typography.body2)
+
+            RadioButton(
+                selected = stroke.join == StrokeJoin.Bevel,
+                onClick = { stroke = stroke.copy(join = StrokeJoin.Bevel) })
+            Text(text = "Bevel", style = MaterialTheme.typography.body2)
+        }
+
+        Text(
+            text = "This text is drawn using stroke! 🎉",
+            style = LocalTextStyle.current.merge(
+                TextStyle(
+                    fontSize = fontSize,
+                    brush = Brush.horizontalGradient(
+                        listOf(
+                            Color.Red,
+                            Color.Green,
+                            Color.Blue
+                        )
+                    ), drawStyle = finalStroke
+                )
+            )
+        )
+    }
+}
+
+fun Stroke.copy(
+    width: Float = this.width,
+    miter: Float = this.miter,
+    cap: StrokeCap = this.cap,
+    join: StrokeJoin = this.join,
+    pathEffect: PathEffect? = this.pathEffect
+): Stroke {
+    return Stroke(width, miter, cap, join, pathEffect)
+}
\ No newline at end of file
diff --git a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/TextDemos.kt b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/TextDemos.kt
index d1889d6..e539ce9 100644
--- a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/TextDemos.kt
+++ b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/TextDemos.kt
@@ -24,8 +24,14 @@
     listOf(
         ComposableDemo("Hyphens") { TextDemoHyphens() },
         ComposableDemo("Static text") { TextDemo() },
-        ComposableDemo("Canvas") { DrawTextDemo() },
-        ComposableDemo("Brush") { TextBrushDemo() },
+        DemoCategory(
+            "Text Canvas",
+            listOf(
+                ComposableDemo("Brush") { TextBrushDemo() },
+                ComposableDemo("drawText") { DrawTextDemo() },
+                ComposableDemo("Stroke") { TextStrokeDemo() }
+            )
+        ),
         ComposableDemo("Ellipsize") { EllipsizeDemo() },
         ComposableDemo("Typeface") { TypefaceDemo() },
         ComposableDemo("Variable Fonts") { VariableFontsDemo() },
diff --git a/compose/integration-tests/material-catalog/build.gradle b/compose/integration-tests/material-catalog/build.gradle
index f3dfd03..e2398cd 100644
--- a/compose/integration-tests/material-catalog/build.gradle
+++ b/compose/integration-tests/material-catalog/build.gradle
@@ -29,8 +29,8 @@
 android {
     defaultConfig {
         applicationId "androidx.compose.material.catalog"
-        versionCode 2001
-        versionName "2.0.1"
+        versionCode 2100
+        versionName "2.1.0"
     }
     buildTypes {
         release {
diff --git a/compose/ui/ui-text/api/public_plus_experimental_current.txt b/compose/ui/ui-text/api/public_plus_experimental_current.txt
index b476a46..5a59852 100644
--- a/compose/ui/ui-text/api/public_plus_experimental_current.txt
+++ b/compose/ui/ui-text/api/public_plus_experimental_current.txt
@@ -142,7 +142,8 @@
     method public long getWordBoundary(int offset);
     method public boolean isLineEllipsized(int lineIndex);
     method public void paint(androidx.compose.ui.graphics.Canvas canvas, optional long color, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextDecoration? decoration);
-    method @androidx.compose.ui.text.ExperimentalTextApi public void paint(androidx.compose.ui.graphics.Canvas canvas, androidx.compose.ui.graphics.Brush brush, optional float alpha, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextDecoration? decoration);
+    method @androidx.compose.ui.text.ExperimentalTextApi public void paint(androidx.compose.ui.graphics.Canvas canvas, optional long color, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextDecoration? decoration, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle);
+    method @androidx.compose.ui.text.ExperimentalTextApi public void paint(androidx.compose.ui.graphics.Canvas canvas, androidx.compose.ui.graphics.Brush brush, optional float alpha, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextDecoration? decoration, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle);
     property public final boolean didExceedMaxLines;
     property public final float firstBaseline;
     property public final float height;
@@ -343,15 +344,18 @@
   @androidx.compose.runtime.Immutable public final class SpanStyle {
     ctor public SpanStyle(optional long color, optional long fontSize, 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.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow);
     ctor public SpanStyle(optional long color, optional long fontSize, 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.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.PlatformSpanStyle? platformStyle);
-    ctor @androidx.compose.ui.text.ExperimentalTextApi public SpanStyle(androidx.compose.ui.graphics.Brush? brush, optional float alpha, optional long fontSize, 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.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.PlatformSpanStyle? platformStyle);
+    ctor @androidx.compose.ui.text.ExperimentalTextApi public SpanStyle(optional long color, optional long fontSize, 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.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.PlatformSpanStyle? platformStyle, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle);
+    ctor @androidx.compose.ui.text.ExperimentalTextApi public SpanStyle(androidx.compose.ui.graphics.Brush? brush, optional float alpha, optional long fontSize, 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.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.PlatformSpanStyle? platformStyle, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle);
     method public androidx.compose.ui.text.SpanStyle copy(optional long color, optional long fontSize, 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.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow);
     method public androidx.compose.ui.text.SpanStyle copy(optional long color, optional long fontSize, 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.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.PlatformSpanStyle? platformStyle);
-    method @androidx.compose.ui.text.ExperimentalTextApi public androidx.compose.ui.text.SpanStyle copy(androidx.compose.ui.graphics.Brush? brush, optional float alpha, optional long fontSize, 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.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.PlatformSpanStyle? platformStyle);
+    method @androidx.compose.ui.text.ExperimentalTextApi public androidx.compose.ui.text.SpanStyle copy(optional long color, optional long fontSize, 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.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.PlatformSpanStyle? platformStyle, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle);
+    method @androidx.compose.ui.text.ExperimentalTextApi public androidx.compose.ui.text.SpanStyle copy(androidx.compose.ui.graphics.Brush? brush, optional float alpha, optional long fontSize, 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.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.PlatformSpanStyle? platformStyle, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle);
     method @androidx.compose.ui.text.ExperimentalTextApi public float getAlpha();
     method public long getBackground();
     method public androidx.compose.ui.text.style.BaselineShift? getBaselineShift();
     method @androidx.compose.ui.text.ExperimentalTextApi public androidx.compose.ui.graphics.Brush? getBrush();
     method public long getColor();
+    method @androidx.compose.ui.text.ExperimentalTextApi public androidx.compose.ui.graphics.drawscope.DrawStyle? getDrawStyle();
     method public androidx.compose.ui.text.font.FontFamily? getFontFamily();
     method public String? getFontFeatureSettings();
     method public long getFontSize();
@@ -371,6 +375,7 @@
     property public final androidx.compose.ui.text.style.BaselineShift? baselineShift;
     property @androidx.compose.ui.text.ExperimentalTextApi public final androidx.compose.ui.graphics.Brush? brush;
     property public final long color;
+    property @androidx.compose.ui.text.ExperimentalTextApi public final androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle;
     property public final androidx.compose.ui.text.font.FontFamily? fontFamily;
     property public final String? fontFeatureSettings;
     property public final long fontSize;
@@ -528,17 +533,18 @@
   @androidx.compose.runtime.Immutable public final class TextStyle {
     ctor public TextStyle(optional long color, optional long fontSize, 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.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent);
     ctor public TextStyle(optional long color, optional long fontSize, 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.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle);
-    ctor @androidx.compose.ui.text.ExperimentalTextApi public TextStyle(optional long color, optional long fontSize, 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.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens);
-    ctor @androidx.compose.ui.text.ExperimentalTextApi public TextStyle(androidx.compose.ui.graphics.Brush? brush, optional float alpha, optional long fontSize, 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.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens);
+    ctor @androidx.compose.ui.text.ExperimentalTextApi public TextStyle(optional long color, optional long fontSize, 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.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens);
+    ctor @androidx.compose.ui.text.ExperimentalTextApi public TextStyle(androidx.compose.ui.graphics.Brush? brush, optional float alpha, optional long fontSize, 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.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens);
     method public androidx.compose.ui.text.TextStyle copy(optional long color, optional long fontSize, 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.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent);
     method public androidx.compose.ui.text.TextStyle copy(optional long color, optional long fontSize, 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.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle);
-    method @androidx.compose.ui.text.ExperimentalTextApi public androidx.compose.ui.text.TextStyle copy(optional long color, optional long fontSize, 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.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens);
-    method @androidx.compose.ui.text.ExperimentalTextApi public androidx.compose.ui.text.TextStyle copy(androidx.compose.ui.graphics.Brush? brush, optional float alpha, optional long fontSize, 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.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens);
+    method @androidx.compose.ui.text.ExperimentalTextApi public androidx.compose.ui.text.TextStyle copy(optional long color, optional long fontSize, 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.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens);
+    method @androidx.compose.ui.text.ExperimentalTextApi public androidx.compose.ui.text.TextStyle copy(androidx.compose.ui.graphics.Brush? brush, optional float alpha, optional long fontSize, 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.compose.ui.text.font.FontFamily? fontFamily, optional String? fontFeatureSettings, optional long letterSpacing, optional androidx.compose.ui.text.style.BaselineShift? baselineShift, optional androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, optional androidx.compose.ui.text.intl.LocaleList? localeList, optional long background, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional androidx.compose.ui.text.style.TextDirection? textDirection, optional long lineHeight, optional androidx.compose.ui.text.style.TextIndent? textIndent, optional androidx.compose.ui.text.PlatformTextStyle? platformStyle, optional androidx.compose.ui.text.style.LineHeightStyle? lineHeightStyle, optional androidx.compose.ui.text.style.LineBreak? lineBreak, optional androidx.compose.ui.text.style.Hyphens? hyphens);
     method @androidx.compose.ui.text.ExperimentalTextApi public float getAlpha();
     method public long getBackground();
     method public androidx.compose.ui.text.style.BaselineShift? getBaselineShift();
     method @androidx.compose.ui.text.ExperimentalTextApi public androidx.compose.ui.graphics.Brush? getBrush();
     method public long getColor();
+    method @androidx.compose.ui.text.ExperimentalTextApi public androidx.compose.ui.graphics.drawscope.DrawStyle? getDrawStyle();
     method public androidx.compose.ui.text.font.FontFamily? getFontFamily();
     method public String? getFontFeatureSettings();
     method public long getFontSize();
@@ -572,6 +578,7 @@
     property public final androidx.compose.ui.text.style.BaselineShift? baselineShift;
     property @androidx.compose.ui.text.ExperimentalTextApi public final androidx.compose.ui.graphics.Brush? brush;
     property public final long color;
+    property @androidx.compose.ui.text.ExperimentalTextApi public final androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle;
     property public final androidx.compose.ui.text.font.FontFamily? fontFamily;
     property public final String? fontFeatureSettings;
     property public final long fontSize;
diff --git a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/AndroidParagraphTest.kt b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/AndroidParagraphTest.kt
index f7af201..9bc2c68 100644
--- a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/AndroidParagraphTest.kt
+++ b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/AndroidParagraphTest.kt
@@ -36,6 +36,7 @@
 import androidx.compose.ui.graphics.SolidColor
 import androidx.compose.ui.graphics.StrokeCap
 import androidx.compose.ui.graphics.StrokeJoin
+import androidx.compose.ui.graphics.drawscope.Fill
 import androidx.compose.ui.graphics.drawscope.Stroke
 import androidx.compose.ui.graphics.toArgb
 import androidx.compose.ui.text.FontTestData.Companion.BASIC_MEASURE_FONT
@@ -57,6 +58,7 @@
 import androidx.compose.ui.text.intl.LocaleList
 import androidx.compose.ui.text.matchers.assertThat
 import androidx.compose.ui.text.platform.bitmap
+import androidx.compose.ui.text.platform.style.DrawStyleSpan
 import androidx.compose.ui.text.platform.style.ShaderBrushSpan
 import androidx.compose.ui.text.style.BaselineShift
 import androidx.compose.ui.text.style.TextAlign
@@ -905,6 +907,80 @@
             }
     }
 
+    @OptIn(ExperimentalTextApi::class)
+    @Test
+    fun testAnnotatedString_setDrawStyle() {
+        val text = "abcde"
+        val strokeWidth = 8f
+        val strokeMiter = 4f
+        val strokeCap = StrokeCap.Round
+        val strokeJoin = StrokeJoin.Bevel
+        val spanStyle = SpanStyle(drawStyle = Stroke(
+            strokeWidth,
+            strokeMiter,
+            strokeCap,
+            strokeJoin
+        ))
+
+        val paragraph = simpleParagraph(
+            text = text,
+            spanStyles = listOf(
+                AnnotatedString.Range(spanStyle, start = 0, end = text.length)
+            ),
+            width = 0.0f
+        )
+
+        assertThat(paragraph.charSequence)
+            .hasSpan(DrawStyleSpan::class, start = 0, end = text.length) {
+                return@hasSpan it.drawStyle == Stroke(
+                    strokeWidth,
+                    strokeMiter,
+                    strokeCap,
+                    strokeJoin
+                )
+            }
+    }
+
+    @OptIn(ExperimentalTextApi::class)
+    @Test
+    fun testAnnotatedString_setDrawStyle_FillOnTopOfStroke() {
+        val text = "abcde"
+        val strokeWidth = 8f
+        val strokeMiter = 4f
+        val strokeCap = StrokeCap.Round
+        val strokeJoin = StrokeJoin.Bevel
+        val strokeSpanStyle = SpanStyle(drawStyle = Stroke(
+            strokeWidth,
+            strokeMiter,
+            strokeCap,
+            strokeJoin
+        ))
+        val fillSpanStyle = SpanStyle(drawStyle = Fill)
+
+        val paragraph = simpleParagraph(
+            text = text,
+            spanStyles = listOf(
+                AnnotatedString.Range(strokeSpanStyle, start = 0, end = text.length),
+                AnnotatedString.Range(fillSpanStyle, start = 1, end = 3)
+            ),
+            width = 0.0f
+        )
+
+        assertThat(paragraph.charSequence)
+            .hasSpan(DrawStyleSpan::class, start = 0, end = text.length) {
+                return@hasSpan it.drawStyle == Stroke(
+                    strokeWidth,
+                    strokeMiter,
+                    strokeCap,
+                    strokeJoin
+                )
+            }
+        assertThat(paragraph.charSequence)
+            .hasSpanOnTop(DrawStyleSpan::class, start = 1, end = 3) {
+                return@hasSpanOnTop it.drawStyle == Fill
+            }
+    }
+
     @Test
     fun testAnnotatedString_fontFeatureSetting_setSpanOnText() {
         val text = "abc"
@@ -1386,6 +1462,39 @@
             .hasSpan(TextDecorationSpan::class, 0, text.length) { it.isStrikethroughText }
     }
 
+    @OptIn(ExperimentalTextApi::class)
+    @Test
+    fun testSpanStyle_drawStyle_stroke_appliedOnTextPaint() {
+        val paragraph = simpleParagraph(
+            text = "",
+            style = TextStyle(drawStyle = Stroke(
+                width = 8f,
+                miter = 6f,
+                cap = StrokeCap.Round,
+                join = StrokeJoin.Bevel
+            )),
+            width = 0.0f
+        )
+
+        assertThat(paragraph.textPaint.style).isEqualTo(Paint.Style.STROKE)
+        assertThat(paragraph.textPaint.strokeWidth).isEqualTo(8f)
+        assertThat(paragraph.textPaint.strokeMiter).isEqualTo(6f)
+        assertThat(paragraph.textPaint.strokeCap).isEqualTo(Paint.Cap.ROUND)
+        assertThat(paragraph.textPaint.strokeJoin).isEqualTo(Paint.Join.BEVEL)
+    }
+
+    @OptIn(ExperimentalTextApi::class)
+    @Test
+    fun testSpanStyle_drawStyle_fill_appliedOnTextPaint() {
+        val paragraph = simpleParagraph(
+            text = "",
+            style = TextStyle(drawStyle = Fill),
+            width = 0.0f
+        )
+
+        assertThat(paragraph.textPaint.style).isEqualTo(Paint.Style.FILL)
+    }
+
     @Test
     fun testSpanStyle_background_appliedAsSpan() {
         // bgColor is reset in the Android Layout constructor.
@@ -1455,6 +1564,60 @@
         assertThat(paragraph.textPaint.isUnderlineText).isTrue()
     }
 
+    @OptIn(ExperimentalTextApi::class)
+    @Test
+    fun testPaint_can_change_DrawStyle_to_Stroke() {
+        val paragraph = simpleParagraph(
+            text = "",
+            style = TextStyle(drawStyle = null),
+            width = 0.0f
+        )
+        assertThat(paragraph.textPaint.style).isEqualTo(Paint.Style.FILL)
+
+        val stroke = Stroke(width = 4f, miter = 2f, cap = StrokeCap.Square, join = StrokeJoin.Bevel)
+        val canvas = Canvas(android.graphics.Canvas())
+        paragraph.paint(canvas, drawStyle = stroke)
+
+        assertThat(paragraph.textPaint.style).isEqualTo(Paint.Style.STROKE)
+        assertThat(paragraph.textPaint.strokeWidth).isEqualTo(4f)
+        assertThat(paragraph.textPaint.strokeMiter).isEqualTo(2f)
+        assertThat(paragraph.textPaint.strokeCap).isEqualTo(Paint.Cap.SQUARE)
+        assertThat(paragraph.textPaint.strokeJoin).isEqualTo(Paint.Join.BEVEL)
+    }
+
+    @OptIn(ExperimentalTextApi::class)
+    @Test
+    fun testPaint_can_change_DrawStyle_to_Fill() {
+        val paragraph = simpleParagraph(
+            text = "",
+            style = TextStyle(drawStyle = Stroke(8f)),
+            width = 0.0f
+        )
+        assertThat(paragraph.textPaint.style).isEqualTo(Paint.Style.STROKE)
+        assertThat(paragraph.textPaint.strokeWidth).isEqualTo(8f)
+
+        val canvas = Canvas(android.graphics.Canvas())
+        paragraph.paint(canvas, drawStyle = Fill)
+        assertThat(paragraph.textPaint.style).isEqualTo(Paint.Style.FILL)
+    }
+
+    @OptIn(ExperimentalTextApi::class)
+    @Test
+    fun testPaint_null_drawStyle_should_be_noop() {
+        val paragraph = simpleParagraph(
+            text = "",
+            style = TextStyle(drawStyle = Stroke(8f)),
+            width = 0.0f
+        )
+        assertThat(paragraph.textPaint.style).isEqualTo(Paint.Style.STROKE)
+        assertThat(paragraph.textPaint.strokeWidth).isEqualTo(8f)
+
+        val canvas = Canvas(android.graphics.Canvas())
+        paragraph.paint(canvas, drawStyle = null)
+        assertThat(paragraph.textPaint.style).isEqualTo(Paint.Style.STROKE)
+        assertThat(paragraph.textPaint.strokeWidth).isEqualTo(8f)
+    }
+
     @SdkSuppress(minSdkVersion = 29)
     @Test
     fun testPaint_can_change_Shadow() {
@@ -1664,24 +1827,6 @@
     }
 
     @Test
-    fun testPaint_can_change_drawStyle_to_Stroke() {
-        val paragraph = simpleParagraph(
-            text = "",
-            width = 0.0f
-        )
-        assertThat(paragraph.textPaint.style).isEqualTo(Paint.Style.FILL)
-
-        val stroke = Stroke(width = 4f, miter = 2f, cap = StrokeCap.Square, join = StrokeJoin.Bevel)
-        val canvas = Canvas(android.graphics.Canvas())
-        paragraph.paint(canvas, drawStyle = stroke)
-        assertThat(paragraph.textPaint.style).isEqualTo(Paint.Style.STROKE)
-        assertThat(paragraph.textPaint.strokeWidth).isEqualTo(4f)
-        assertThat(paragraph.textPaint.strokeMiter).isEqualTo(2f)
-        assertThat(paragraph.textPaint.strokeCap).isEqualTo(Paint.Cap.SQUARE)
-        assertThat(paragraph.textPaint.strokeJoin).isEqualTo(Paint.Join.BEVEL)
-    }
-
-    @Test
     fun testSpanStyle_baselineShift_appliedAsSpan() {
         // baselineShift is reset in the Android Layout constructor.
         // therefore we cannot apply them on paint, have to use spans.
diff --git a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/MultiParagraphIntegrationTest.kt b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/MultiParagraphIntegrationTest.kt
index 79d2d1c..c2d97d7 100644
--- a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/MultiParagraphIntegrationTest.kt
+++ b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/MultiParagraphIntegrationTest.kt
@@ -15,12 +15,14 @@
  */
 package androidx.compose.ui.text
 
+import android.graphics.Paint
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.geometry.Rect
 import androidx.compose.ui.graphics.Brush
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.Path
 import androidx.compose.ui.graphics.PathOperation
+import androidx.compose.ui.graphics.drawscope.Stroke
 import androidx.compose.ui.text.AnnotatedString.Range
 import androidx.compose.ui.text.FontTestData.Companion.BASIC_MEASURE_FONT
 import androidx.compose.ui.text.font.toFontFamily
@@ -1582,6 +1584,31 @@
             .isEqualToBitmap(multiParagraph2.bitmap(brush, 0.5f))
     }
 
+    @OptIn(ExperimentalTextApi::class)
+    @Test
+    fun multiParagraph_appliesDrawStyle_toAllParagraphs() = with(defaultDensity) {
+        val fontSize = 20.sp
+        val fontSizeInPx = fontSize.toPx()
+        val multiParagraph = simpleMultiParagraph(
+            text = buildAnnotatedString {
+                withStyle(ParagraphStyle(textAlign = TextAlign.Right)) {
+                    append("Lorem")
+                }
+                withStyle(ParagraphStyle()) {
+                    append("Ipsum")
+                }
+            },
+            style = TextStyle(fontSize = fontSize),
+            width = fontSizeInPx * 5
+        )
+
+        multiParagraph.bitmap(drawStyle = Stroke())
+
+        multiParagraph.paragraphInfoList.map { it.paragraph }.forEach {
+            assertThat((it as AndroidParagraph).textPaint.style).isEqualTo(Paint.Style.STROKE)
+        }
+    }
+
     private fun MultiParagraph.disableAntialias() {
         paragraphInfoList.forEach {
             (it.paragraph as AndroidParagraph).textPaint.isAntiAlias = false
diff --git a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntegrationTest.kt b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntegrationTest.kt
index 793fa1e..95c77fe 100644
--- a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntegrationTest.kt
+++ b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntegrationTest.kt
@@ -4415,8 +4415,8 @@
                 width = paragraphWidth
             )
 
-            assertThat(baseParagraph.bitmap(drawStyle = Stroke()))
-                .isNotEqualToBitmap(baseParagraph.bitmap())
+            assertThat(baseParagraph.bitmap())
+                .isNotEqualToBitmap(baseParagraph.bitmap(drawStyle = Stroke()))
         }
     }
 
diff --git a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/TextTestExtensions.kt b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/TextTestExtensions.kt
index a476fc4..80922f2 100644
--- a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/TextTestExtensions.kt
+++ b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/TextTestExtensions.kt
@@ -94,7 +94,9 @@
 @OptIn(ExperimentalTextApi::class)
 fun MultiParagraph.bitmap(
     brush: Brush? = null,
-    alpha: Float = Float.NaN
+    alpha: Float = Float.NaN,
+    textDecoration: TextDecoration? = null,
+    drawStyle: DrawStyle? = null
 ): Bitmap {
     val width = paragraphInfoList.maxByOrNull { it.paragraph.width }?.paragraph?.width ?: 0f
     val bitmap = Bitmap.createBitmap(
@@ -104,13 +106,17 @@
     )
     if (brush != null) {
         this.paint(
-            canvas = androidx.compose.ui.graphics.Canvas(Canvas(bitmap)),
-            brush = brush,
-            alpha = alpha
+            androidx.compose.ui.graphics.Canvas(Canvas(bitmap)),
+            brush,
+            alpha,
+            decoration = textDecoration,
+            drawStyle = drawStyle
         )
     } else {
         this.paint(
-            canvas = androidx.compose.ui.graphics.Canvas(Canvas(bitmap))
+            canvas = androidx.compose.ui.graphics.Canvas(Canvas(bitmap)),
+            decoration = textDecoration,
+            drawStyle = drawStyle
         )
     }
     return bitmap
diff --git a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/matchers/BitmapSubject.kt b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/matchers/BitmapSubject.kt
index ab87842..aaa1171 100644
--- a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/matchers/BitmapSubject.kt
+++ b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/matchers/BitmapSubject.kt
@@ -51,7 +51,7 @@
      * @param bitmap the [Bitmap] to be matched.
      */
     fun isNotEqualToBitmap(bitmap: Bitmap) {
-        if (subject != bitmap) return
+        if (subject == null) return
         check("sameAs()").that(subject.sameAs(bitmap)).isFalse()
     }
 
diff --git a/compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidMultiParagraphDraw.kt b/compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidMultiParagraphDraw.kt
index 8d7dead..80fb14c 100644
--- a/compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidMultiParagraphDraw.kt
+++ b/compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidMultiParagraphDraw.kt
@@ -23,6 +23,7 @@
 import androidx.compose.ui.graphics.ShaderBrush
 import androidx.compose.ui.graphics.Shadow
 import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.drawscope.DrawStyle
 import androidx.compose.ui.text.ExperimentalTextApi
 import androidx.compose.ui.text.MultiParagraph
 import androidx.compose.ui.text.style.TextDecoration
@@ -34,15 +35,16 @@
     brush: Brush,
     alpha: Float,
     shadow: Shadow?,
-    decoration: TextDecoration?
+    decoration: TextDecoration?,
+    drawStyle: DrawStyle?
 ) {
     canvas.save()
 
     if (paragraphInfoList.size <= 1) {
-        drawParagraphs(canvas, brush, alpha, shadow, decoration)
+        drawParagraphs(canvas, brush, alpha, shadow, decoration, drawStyle)
     } else {
         when (brush) {
-            is SolidColor -> drawParagraphs(canvas, brush, alpha, shadow, decoration)
+            is SolidColor -> drawParagraphs(canvas, brush, alpha, shadow, decoration, drawStyle)
             is ShaderBrush -> {
                 var height = 0f
                 var width = 0f
@@ -54,7 +56,14 @@
                 val matrix = Matrix()
                 shader.getLocalMatrix(matrix)
                 paragraphInfoList.fastForEach {
-                    it.paragraph.paint(canvas, ShaderBrush(shader), alpha, shadow, decoration)
+                    it.paragraph.paint(
+                        canvas = canvas,
+                        brush = ShaderBrush(shader),
+                        alpha = alpha,
+                        shadow = shadow,
+                        textDecoration = decoration,
+                        drawStyle = drawStyle
+                    )
                     canvas.translate(0f, it.paragraph.height)
                     matrix.setTranslate(0f, -it.paragraph.height)
                     shader.setLocalMatrix(matrix)
@@ -72,10 +81,11 @@
     brush: Brush,
     alpha: Float,
     shadow: Shadow?,
-    decoration: TextDecoration?
+    decoration: TextDecoration?,
+    drawStyle: DrawStyle?
 ) {
     paragraphInfoList.fastForEach {
-        it.paragraph.paint(canvas, brush, alpha, shadow, decoration)
+        it.paragraph.paint(canvas, brush, alpha, shadow, decoration, drawStyle)
         canvas.translate(0f, it.paragraph.height)
     }
 }
\ No newline at end of file
diff --git a/compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidTextPaint.android.kt b/compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidTextPaint.android.kt
index ebb94c0..3b6a1cc 100644
--- a/compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidTextPaint.android.kt
+++ b/compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidTextPaint.android.kt
@@ -139,7 +139,7 @@
     }
 }
 
-private fun StrokeJoin.toAndroidJoin(): Paint.Join {
+internal fun StrokeJoin.toAndroidJoin(): Paint.Join {
     return when (this) {
         StrokeJoin.Miter -> Paint.Join.MITER
         StrokeJoin.Round -> Paint.Join.ROUND
@@ -148,7 +148,7 @@
     }
 }
 
-private fun StrokeCap.toAndroidCap(): Paint.Cap {
+internal fun StrokeCap.toAndroidCap(): Paint.Cap {
     return when (this) {
         StrokeCap.Butt -> Paint.Cap.BUTT
         StrokeCap.Round -> Paint.Cap.ROUND
diff --git a/compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/platform/extensions/SpannableExtensions.android.kt b/compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/platform/extensions/SpannableExtensions.android.kt
index bc744a8..20dbff0 100644
--- a/compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/platform/extensions/SpannableExtensions.android.kt
+++ b/compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/platform/extensions/SpannableExtensions.android.kt
@@ -33,6 +33,7 @@
 import androidx.compose.ui.graphics.ShaderBrush
 import androidx.compose.ui.graphics.Shadow
 import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.drawscope.DrawStyle
 import androidx.compose.ui.graphics.isSpecified
 import androidx.compose.ui.graphics.toArgb
 import androidx.compose.ui.text.AnnotatedString
@@ -59,6 +60,7 @@
 import androidx.compose.ui.text.intersect
 import androidx.compose.ui.text.intl.Locale
 import androidx.compose.ui.text.intl.LocaleList
+import androidx.compose.ui.text.platform.style.DrawStyleSpan
 import androidx.compose.ui.text.platform.style.ShaderBrushSpan
 import androidx.compose.ui.text.style.BaselineShift
 import androidx.compose.ui.text.style.LineHeightStyle
@@ -237,6 +239,8 @@
 
     setShadow(style.shadow, start, end)
 
+    setDrawStyle(style.drawStyle, start, end)
+
     createLetterSpacingSpan(style.letterSpacing, density)?.let {
         lowPrioritySpans.add(
             SpanRange(it, start, end)
@@ -415,6 +419,13 @@
     }
 }
 
+@OptIn(InternalPlatformTextApi::class)
+private fun Spannable.setDrawStyle(drawStyle: DrawStyle?, start: Int, end: Int) {
+    drawStyle?.let {
+        setSpan(DrawStyleSpan(it), start, end)
+    }
+}
+
 internal fun Spannable.setBackground(color: Color, start: Int, end: Int) {
     if (color.isSpecified) {
         setSpan(
diff --git a/compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/platform/extensions/TextPaintExtensions.android.kt b/compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/platform/extensions/TextPaintExtensions.android.kt
index 12141cd..4a57356 100644
--- a/compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/platform/extensions/TextPaintExtensions.android.kt
+++ b/compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/platform/extensions/TextPaintExtensions.android.kt
@@ -107,6 +107,7 @@
     setBrush(style.brush, Size.Unspecified, style.alpha)
     setShadow(style.shadow)
     // Skip textDecoration (b/199939617). TextDecoration should be applied as a span.
+    setDrawStyle(style.drawStyle)
 
     // letterSpacing with unit Sp needs to be handled by span.
     // baselineShift and bgColor is reset in the Android Layout constructor,
diff --git a/compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/platform/style/DrawStyleSpan.android.kt b/compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/platform/style/DrawStyleSpan.android.kt
new file mode 100644
index 0000000..6b0a86c
--- /dev/null
+++ b/compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/platform/style/DrawStyleSpan.android.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.compose.ui.text.platform.style
+
+import android.graphics.Paint
+import android.text.TextPaint
+import android.text.style.CharacterStyle
+import android.text.style.UpdateAppearance
+import androidx.compose.ui.graphics.ShaderBrush
+import androidx.compose.ui.graphics.asAndroidPathEffect
+import androidx.compose.ui.graphics.drawscope.DrawStyle
+import androidx.compose.ui.graphics.drawscope.Fill
+import androidx.compose.ui.graphics.drawscope.Stroke
+import androidx.compose.ui.text.platform.toAndroidCap
+import androidx.compose.ui.text.platform.toAndroidJoin
+
+/**
+ * A span that applies [ShaderBrush] to TextPaint after receiving a specified size
+ */
+internal class DrawStyleSpan(
+    val drawStyle: DrawStyle
+) : CharacterStyle(), UpdateAppearance {
+    override fun updateDrawState(textPaint: TextPaint?) {
+        textPaint?.run {
+            when (drawStyle) {
+                Fill -> style = Paint.Style.FILL
+                is Stroke -> {
+                    style = Paint.Style.STROKE
+                    strokeWidth = drawStyle.width
+                    strokeMiter = drawStyle.miter
+                    strokeJoin = drawStyle.join.toAndroidJoin()
+                    strokeCap = drawStyle.cap.toAndroidCap()
+                    pathEffect = drawStyle.pathEffect?.asAndroidPathEffect()
+                }
+            }
+        }
+    }
+}
diff --git a/compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/MultiParagraph.kt b/compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/MultiParagraph.kt
index 3780431..b3cd8cd 100644
--- a/compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/MultiParagraph.kt
+++ b/compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/MultiParagraph.kt
@@ -23,6 +23,7 @@
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.Path
 import androidx.compose.ui.graphics.Shadow
+import androidx.compose.ui.graphics.drawscope.DrawStyle
 import androidx.compose.ui.text.font.Font
 import androidx.compose.ui.text.font.FontFamily
 import androidx.compose.ui.text.font.createFontFamilyResolver
@@ -402,12 +403,30 @@
     @ExperimentalTextApi
     fun paint(
         canvas: Canvas,
+        color: Color = Color.Unspecified,
+        shadow: Shadow? = null,
+        decoration: TextDecoration? = null,
+        drawStyle: DrawStyle? = null
+    ) {
+        canvas.save()
+        paragraphInfoList.fastForEach {
+            it.paragraph.paint(canvas, color, shadow, decoration, drawStyle)
+            canvas.translate(0f, it.paragraph.height)
+        }
+        canvas.restore()
+    }
+
+    /** Paint the paragraphs to canvas. */
+    @ExperimentalTextApi
+    fun paint(
+        canvas: Canvas,
         brush: Brush,
         alpha: Float = Float.NaN,
         shadow: Shadow? = null,
-        decoration: TextDecoration? = null
+        decoration: TextDecoration? = null,
+        drawStyle: DrawStyle? = null
     ) {
-        drawMultiParagraph(canvas, brush, alpha, shadow, decoration)
+        drawMultiParagraph(canvas, brush, alpha, shadow, decoration, drawStyle)
     }
 
     /** Returns path that enclose the given text range. */
diff --git a/compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/SpanStyle.kt b/compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/SpanStyle.kt
index a9c1504..aafe77a 100644
--- a/compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/SpanStyle.kt
+++ b/compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/SpanStyle.kt
@@ -21,6 +21,8 @@
 import androidx.compose.ui.graphics.Brush
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.Shadow
+import androidx.compose.ui.graphics.drawscope.DrawStyle
+import androidx.compose.ui.graphics.drawscope.Fill
 import androidx.compose.ui.graphics.lerp
 import androidx.compose.ui.graphics.takeOrElse
 import androidx.compose.ui.text.font.FontFamily
@@ -74,6 +76,8 @@
  * @param textDecoration The decorations to paint on the text (e.g., an underline).
  * @param shadow The shadow effect applied on the text.
  * @param platformStyle Platform specific [SpanStyle] parameters.
+ * @param drawStyle Drawing style of text, whether fill in the text while drawing or stroke around
+ * the edges.
  *
  * @see AnnotatedString
  * @see TextStyle
@@ -96,7 +100,10 @@
     val background: Color = Color.Unspecified,
     val textDecoration: TextDecoration? = null,
     val shadow: Shadow? = null,
-    val platformStyle: PlatformSpanStyle? = null
+    val platformStyle: PlatformSpanStyle? = null,
+    @Suppress("OPT_IN_MARKER_ON_WRONG_TARGET")
+    @property:ExperimentalTextApi
+    @get:ExperimentalTextApi val drawStyle: DrawStyle? = null
 ) {
 
     /**
@@ -236,6 +243,78 @@
      * in order to set paragraph level styling such as line height, or text alignment please see
      * [ParagraphStyle].
      *
+     * @sample androidx.compose.ui.text.samples.SpanStyleSample
+     *
+     * @sample androidx.compose.ui.text.samples.AnnotatedStringBuilderSample
+     *
+     * @param color The color to draw the text.
+     * @param fontSize The size of glyphs (in logical pixels) to use when painting the text. This
+     * may be [TextUnit.Unspecified] for inheriting from another [SpanStyle].
+     * @param fontWeight The typeface thickness to use when painting the text (e.g., bold).
+     * @param fontStyle The typeface variant to use when drawing the letters (e.g., italic).
+     * @param fontSynthesis Whether to synthesize font weight and/or style when the requested weight
+     * or style cannot be found in the provided font family.
+     * @param fontFamily The font family to be used when rendering the text.
+     * @param fontFeatureSettings The advanced typography settings provided by font. The format is
+     * the same as the CSS font-feature-settings attribute:
+     *  https://www.w3.org/TR/css-fonts-3/#font-feature-settings-prop
+     * @param letterSpacing The amount of space (in em) to add between each letter.
+     * @param baselineShift The amount by which the text is shifted up from the current baseline.
+     * @param textGeometricTransform The geometric transformation applied the text.
+     * @param localeList The locale list used to select region-specific glyphs.
+     * @param background The background color for the text.
+     * @param textDecoration The decorations to paint on the text (e.g., an underline).
+     * @param shadow The shadow effect applied on the text.
+     * @param platformStyle Platform specific [SpanStyle] parameters.
+     * @param drawStyle Drawing style of text, whether fill in the text while drawing or stroke
+     * around the edges.
+     *
+     * @see AnnotatedString
+     * @see TextStyle
+     * @see ParagraphStyle
+     */
+    @ExperimentalTextApi
+    constructor(
+        color: Color = Color.Unspecified,
+        fontSize: TextUnit = TextUnit.Unspecified,
+        fontWeight: FontWeight? = null,
+        fontStyle: FontStyle? = null,
+        fontSynthesis: FontSynthesis? = null,
+        fontFamily: FontFamily? = null,
+        fontFeatureSettings: String? = null,
+        letterSpacing: TextUnit = TextUnit.Unspecified,
+        baselineShift: BaselineShift? = null,
+        textGeometricTransform: TextGeometricTransform? = null,
+        localeList: LocaleList? = null,
+        background: Color = Color.Unspecified,
+        textDecoration: TextDecoration? = null,
+        shadow: Shadow? = null,
+        platformStyle: PlatformSpanStyle? = null,
+        drawStyle: DrawStyle? = null
+    ) : this(
+        textForegroundStyle = TextForegroundStyle.from(color),
+        fontSize = fontSize,
+        fontWeight = fontWeight,
+        fontStyle = fontStyle,
+        fontSynthesis = fontSynthesis,
+        fontFamily = fontFamily,
+        fontFeatureSettings = fontFeatureSettings,
+        letterSpacing = letterSpacing,
+        baselineShift = baselineShift,
+        textGeometricTransform = textGeometricTransform,
+        localeList = localeList,
+        background = background,
+        textDecoration = textDecoration,
+        shadow = shadow,
+        platformStyle = platformStyle,
+        drawStyle = drawStyle
+    )
+
+    /**
+     * Styling configuration for a text span. This configuration only allows character level styling,
+     * in order to set paragraph level styling such as line height, or text alignment please see
+     * [ParagraphStyle].
+     *
      * @sample androidx.compose.ui.text.samples.SpanStyleBrushSample
      *
      * @sample androidx.compose.ui.text.samples.AnnotatedStringBuilderSample
@@ -263,6 +342,8 @@
      * @param textDecoration The decorations to paint on the text (e.g., an underline).
      * @param shadow The shadow effect applied on the text.
      * @param platformStyle Platform specific [SpanStyle] parameters.
+     * @param drawStyle Drawing style of text, whether fill in the text while drawing or stroke
+     * around the edges.
      *
      * @see AnnotatedString
      * @see TextStyle
@@ -285,7 +366,8 @@
         background: Color = Color.Unspecified,
         textDecoration: TextDecoration? = null,
         shadow: Shadow? = null,
-        platformStyle: PlatformSpanStyle? = null
+        platformStyle: PlatformSpanStyle? = null,
+        drawStyle: DrawStyle? = null
     ) : this(
         textForegroundStyle = TextForegroundStyle.from(brush, alpha),
         fontSize = fontSize,
@@ -301,7 +383,8 @@
         background = background,
         textDecoration = textDecoration,
         shadow = shadow,
-        platformStyle = platformStyle
+        platformStyle = platformStyle,
+        drawStyle = drawStyle
     )
 
     /**
@@ -335,6 +418,7 @@
      *
      * If the given span style is null, returns this span style.
      */
+    @OptIn(ExperimentalTextApi::class)
     @Stable
     fun merge(other: SpanStyle? = null): SpanStyle {
         if (other == null) return this
@@ -358,7 +442,8 @@
             background = other.background.takeOrElse { this.background },
             textDecoration = other.textDecoration ?: this.textDecoration,
             shadow = other.shadow ?: this.shadow,
-            platformStyle = mergePlatformStyle(other.platformStyle)
+            platformStyle = mergePlatformStyle(other.platformStyle),
+            drawStyle = other.drawStyle ?: this.drawStyle
         )
     }
 
@@ -374,6 +459,7 @@
     @Stable
     operator fun plus(other: SpanStyle): SpanStyle = this.merge(other)
 
+    @OptIn(ExperimentalTextApi::class)
     fun copy(
         color: Color = this.color,
         fontSize: TextUnit = this.fontSize,
@@ -409,7 +495,8 @@
             background = background,
             textDecoration = textDecoration,
             shadow = shadow,
-            platformStyle = this.platformStyle
+            platformStyle = this.platformStyle,
+            drawStyle = this.drawStyle
         )
     }
 
@@ -455,6 +542,49 @@
 
     @ExperimentalTextApi
     fun copy(
+        color: Color = this.color,
+        fontSize: TextUnit = this.fontSize,
+        fontWeight: FontWeight? = this.fontWeight,
+        fontStyle: FontStyle? = this.fontStyle,
+        fontSynthesis: FontSynthesis? = this.fontSynthesis,
+        fontFamily: FontFamily? = this.fontFamily,
+        fontFeatureSettings: String? = this.fontFeatureSettings,
+        letterSpacing: TextUnit = this.letterSpacing,
+        baselineShift: BaselineShift? = this.baselineShift,
+        textGeometricTransform: TextGeometricTransform? = this.textGeometricTransform,
+        localeList: LocaleList? = this.localeList,
+        background: Color = this.background,
+        textDecoration: TextDecoration? = this.textDecoration,
+        shadow: Shadow? = this.shadow,
+        platformStyle: PlatformSpanStyle? = this.platformStyle,
+        drawStyle: DrawStyle? = this.drawStyle
+    ): SpanStyle {
+        return SpanStyle(
+            textForegroundStyle = if (color == this.color) {
+                textForegroundStyle
+            } else {
+                TextForegroundStyle.from(color)
+            },
+            fontSize = fontSize,
+            fontWeight = fontWeight,
+            fontStyle = fontStyle,
+            fontSynthesis = fontSynthesis,
+            fontFamily = fontFamily,
+            fontFeatureSettings = fontFeatureSettings,
+            letterSpacing = letterSpacing,
+            baselineShift = baselineShift,
+            textGeometricTransform = textGeometricTransform,
+            localeList = localeList,
+            background = background,
+            textDecoration = textDecoration,
+            shadow = shadow,
+            platformStyle = platformStyle,
+            drawStyle = drawStyle
+        )
+    }
+
+    @ExperimentalTextApi
+    fun copy(
         brush: Brush?,
         alpha: Float = this.alpha,
         fontSize: TextUnit = this.fontSize,
@@ -470,7 +600,8 @@
         background: Color = this.background,
         textDecoration: TextDecoration? = this.textDecoration,
         shadow: Shadow? = this.shadow,
-        platformStyle: PlatformSpanStyle? = this.platformStyle
+        platformStyle: PlatformSpanStyle? = this.platformStyle,
+        drawStyle: DrawStyle? = this.drawStyle
     ): SpanStyle {
         return SpanStyle(
             textForegroundStyle = TextForegroundStyle.from(brush, alpha),
@@ -487,7 +618,8 @@
             background = background,
             textDecoration = textDecoration,
             shadow = shadow,
-            platformStyle = platformStyle
+            platformStyle = platformStyle,
+            drawStyle = drawStyle
         )
     }
 
@@ -515,10 +647,12 @@
         return true
     }
 
+    @OptIn(ExperimentalTextApi::class)
     private fun hasSameNonLayoutAttributes(other: SpanStyle): Boolean {
         if (textForegroundStyle != other.textForegroundStyle) return false
         if (textDecoration != other.textDecoration) return false
         if (shadow != other.shadow) return false
+        if (drawStyle != other.drawStyle) return false
         return true
     }
 
@@ -541,6 +675,7 @@
         result = 31 * result + (textDecoration?.hashCode() ?: 0)
         result = 31 * result + (shadow?.hashCode() ?: 0)
         result = 31 * result + (platformStyle?.hashCode() ?: 0)
+        result = 31 * result + (drawStyle?.hashCode() ?: 0)
         return result
     }
 
@@ -579,7 +714,8 @@
             "background=$background, " +
             "textDecoration=$textDecoration, " +
             "shadow=$shadow, " +
-            "platformStyle=$platformStyle" +
+            "platformStyle=$platformStyle, " +
+            "drawStyle=$drawStyle" +
             ")"
     }
 }
@@ -612,6 +748,7 @@
  * between [start] and [stop]. The interpolation can be extrapolated beyond 0.0 and
  * 1.0, so negative values and values greater than 1.0 are valid.
  */
+@OptIn(ExperimentalTextApi::class)
 fun lerp(start: SpanStyle, stop: SpanStyle, fraction: Float): SpanStyle {
     return SpanStyle(
         textForegroundStyle = lerp(start.textForegroundStyle, stop.textForegroundStyle, fraction),
@@ -672,7 +809,12 @@
             stop.shadow ?: Shadow(),
             fraction
         ),
-        platformStyle = lerpPlatformStyle(start.platformStyle, stop.platformStyle, fraction)
+        platformStyle = lerpPlatformStyle(start.platformStyle, stop.platformStyle, fraction),
+        drawStyle = lerpDiscrete(
+            start.drawStyle,
+            stop.drawStyle,
+            fraction
+        )
     )
 }
 
@@ -687,6 +829,7 @@
     return lerp(startNonNull, stopNonNull, fraction)
 }
 
+@OptIn(ExperimentalTextApi::class)
 internal fun resolveSpanStyleDefaults(style: SpanStyle) = SpanStyle(
     textForegroundStyle = style.textForegroundStyle.takeOrElse {
         TextForegroundStyle.from(DefaultColor)
@@ -708,5 +851,6 @@
     background = style.background.takeOrElse { DefaultBackgroundColor },
     textDecoration = style.textDecoration ?: TextDecoration.None,
     shadow = style.shadow ?: Shadow.None,
-    platformStyle = style.platformStyle
+    platformStyle = style.platformStyle,
+    drawStyle = style.drawStyle ?: Fill
 )
\ No newline at end of file
diff --git a/compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/TextPainter.kt b/compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/TextPainter.kt
index b2ba6b9..4f565ed 100644
--- a/compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/TextPainter.kt
+++ b/compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/TextPainter.kt
@@ -64,14 +64,16 @@
                     brush,
                     textLayoutResult.layoutInput.style.alpha,
                     textLayoutResult.layoutInput.style.shadow,
-                    textLayoutResult.layoutInput.style.textDecoration
+                    textLayoutResult.layoutInput.style.textDecoration,
+                    textLayoutResult.layoutInput.style.drawStyle
                 )
             } else {
                 textLayoutResult.multiParagraph.paint(
                     canvas,
                     textLayoutResult.layoutInput.style.color,
                     textLayoutResult.layoutInput.style.shadow,
-                    textLayoutResult.layoutInput.style.textDecoration
+                    textLayoutResult.layoutInput.style.textDecoration,
+                    textLayoutResult.layoutInput.style.drawStyle
                 )
             }
         } finally {
diff --git a/compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/TextStyle.kt b/compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/TextStyle.kt
index 00bf72c..de73bcb 100644
--- a/compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/TextStyle.kt
+++ b/compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/TextStyle.kt
@@ -21,6 +21,7 @@
 import androidx.compose.ui.graphics.Brush
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.Shadow
+import androidx.compose.ui.graphics.drawscope.DrawStyle
 import androidx.compose.ui.text.font.FontFamily
 import androidx.compose.ui.text.font.FontStyle
 import androidx.compose.ui.text.font.FontSynthesis
@@ -261,6 +262,8 @@
      * @param background The background color for the text.
      * @param textDecoration The decorations to paint on the text (e.g., an underline).
      * @param shadow The shadow effect applied on the text.
+     * @param drawStyle Drawing style of text, whether fill in the text while drawing or stroke
+     * around the edges.
      * @param textAlign The alignment of the text within the lines of the paragraph.
      * @param textDirection The algorithm to be used to resolve the final text and paragraph
      * direction: Left To Right or Right To Left. If no value is provided the system will use the
@@ -291,6 +294,7 @@
         background: Color = Color.Unspecified,
         textDecoration: TextDecoration? = null,
         shadow: Shadow? = null,
+        drawStyle: DrawStyle? = null,
         textAlign: TextAlign? = null,
         textDirection: TextDirection? = null,
         lineHeight: TextUnit = TextUnit.Unspecified,
@@ -315,7 +319,8 @@
             background = background,
             textDecoration = textDecoration,
             shadow = shadow,
-            platformStyle = platformStyle?.spanStyle
+            platformStyle = platformStyle?.spanStyle,
+            drawStyle = drawStyle
         ),
         ParagraphStyle(
             textAlign = textAlign,
@@ -357,6 +362,8 @@
      * @param background The background color for the text.
      * @param textDecoration The decorations to paint on the text (e.g., an underline).
      * @param shadow The shadow effect applied on the text.
+     * @param drawStyle Drawing style of text, whether fill in the text while drawing or stroke
+     * around the edges.
      * @param textAlign The alignment of the text within the lines of the paragraph.
      * @param textDirection The algorithm to be used to resolve the final text and paragraph
      * direction: Left To Right or Right To Left. If no value is provided the system will use the
@@ -387,6 +394,7 @@
         background: Color = Color.Unspecified,
         textDecoration: TextDecoration? = null,
         shadow: Shadow? = null,
+        drawStyle: DrawStyle? = null,
         textAlign: TextAlign? = null,
         textDirection: TextDirection? = null,
         lineHeight: TextUnit = TextUnit.Unspecified,
@@ -412,7 +420,8 @@
             background = background,
             textDecoration = textDecoration,
             shadow = shadow,
-            platformStyle = platformStyle?.spanStyle
+            platformStyle = platformStyle?.spanStyle,
+            drawStyle = drawStyle
         ),
         ParagraphStyle(
             textAlign = textAlign,
@@ -536,7 +545,8 @@
                 background = background,
                 textDecoration = textDecoration,
                 shadow = shadow,
-                platformStyle = this.spanStyle.platformStyle
+                platformStyle = this.spanStyle.platformStyle,
+                drawStyle = this.spanStyle.drawStyle
             ),
             paragraphStyle = ParagraphStyle(
                 textAlign = textAlign,
@@ -628,6 +638,7 @@
         background: Color = this.spanStyle.background,
         textDecoration: TextDecoration? = this.spanStyle.textDecoration,
         shadow: Shadow? = this.spanStyle.shadow,
+        drawStyle: DrawStyle? = this.spanStyle.drawStyle,
         textAlign: TextAlign? = this.paragraphStyle.textAlign,
         textDirection: TextDirection? = this.paragraphStyle.textDirection,
         lineHeight: TextUnit = this.paragraphStyle.lineHeight,
@@ -657,7 +668,8 @@
                 background = background,
                 textDecoration = textDecoration,
                 shadow = shadow,
-                platformStyle = platformStyle?.spanStyle
+                platformStyle = platformStyle?.spanStyle,
+                drawStyle = drawStyle
             ),
             paragraphStyle = ParagraphStyle(
                 textAlign = textAlign,
@@ -690,6 +702,7 @@
         background: Color = this.spanStyle.background,
         textDecoration: TextDecoration? = this.spanStyle.textDecoration,
         shadow: Shadow? = this.spanStyle.shadow,
+        drawStyle: DrawStyle? = this.spanStyle.drawStyle,
         textAlign: TextAlign? = this.paragraphStyle.textAlign,
         textDirection: TextDirection? = this.paragraphStyle.textDirection,
         lineHeight: TextUnit = this.paragraphStyle.lineHeight,
@@ -716,7 +729,8 @@
                 background = background,
                 textDecoration = textDecoration,
                 shadow = shadow,
-                platformStyle = platformStyle?.spanStyle
+                platformStyle = platformStyle?.spanStyle,
+                drawStyle = drawStyle
             ),
             paragraphStyle = ParagraphStyle(
                 textAlign = textAlign,
@@ -825,6 +839,14 @@
     val shadow: Shadow? get() = this.spanStyle.shadow
 
     /**
+     * Drawing style of text, whether fill in the text while drawing or stroke around the edges.
+     */
+    @ExperimentalTextApi
+    @Suppress("OPT_IN_MARKER_ON_WRONG_TARGET")
+    @get:ExperimentalTextApi
+    val drawStyle: DrawStyle? get() = this.spanStyle.drawStyle
+
+    /**
      * The alignment of the text within the lines of the paragraph.
      */
     val textAlign: TextAlign? get() = this.paragraphStyle.textAlign
@@ -933,7 +955,9 @@
             "localeList=$localeList, " +
             "background=$background, " +
             "textDecoration=$textDecoration, " +
-            "shadow=$shadow, textAlign=$textAlign, " +
+            "shadow=$shadow, " +
+            "drawStyle=$drawStyle, " +
+            "textAlign=$textAlign, " +
             "textDirection=$textDirection, " +
             "lineHeight=$lineHeight, " +
             "textIndent=$textIndent, " +
diff --git a/compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/platform/PlatformMultiParagraphDraw.kt b/compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/platform/PlatformMultiParagraphDraw.kt
index 8b4c7c3..6024d19 100644
--- a/compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/platform/PlatformMultiParagraphDraw.kt
+++ b/compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/platform/PlatformMultiParagraphDraw.kt
@@ -19,6 +19,7 @@
 import androidx.compose.ui.graphics.Brush
 import androidx.compose.ui.graphics.Canvas
 import androidx.compose.ui.graphics.Shadow
+import androidx.compose.ui.graphics.drawscope.DrawStyle
 import androidx.compose.ui.text.MultiParagraph
 import androidx.compose.ui.text.style.TextDecoration
 
@@ -36,5 +37,6 @@
     brush: Brush,
     alpha: Float = Float.NaN,
     shadow: Shadow? = null,
-    decoration: TextDecoration? = null
+    decoration: TextDecoration? = null,
+    drawStyle: DrawStyle? = null
 )
\ No newline at end of file
diff --git a/compose/ui/ui-text/src/skikoMain/kotlin/androidx/compose/ui/text/platform/SkiaMultiParagraphDraw.skiko.kt b/compose/ui/ui-text/src/skikoMain/kotlin/androidx/compose/ui/text/platform/SkiaMultiParagraphDraw.skiko.kt
index c16fb8b..6bdd632 100644
--- a/compose/ui/ui-text/src/skikoMain/kotlin/androidx/compose/ui/text/platform/SkiaMultiParagraphDraw.skiko.kt
+++ b/compose/ui/ui-text/src/skikoMain/kotlin/androidx/compose/ui/text/platform/SkiaMultiParagraphDraw.skiko.kt
@@ -19,6 +19,7 @@
 import androidx.compose.ui.graphics.Brush
 import androidx.compose.ui.graphics.Canvas
 import androidx.compose.ui.graphics.Shadow
+import androidx.compose.ui.graphics.drawscope.DrawStyle
 import androidx.compose.ui.text.ExperimentalTextApi
 import androidx.compose.ui.text.MultiParagraph
 import androidx.compose.ui.text.style.TextDecoration
@@ -30,11 +31,12 @@
     brush: Brush,
     alpha: Float,
     shadow: Shadow?,
-    decoration: TextDecoration?
+    decoration: TextDecoration?,
+    drawStyle: DrawStyle?
 ) {
     canvas.save()
     paragraphInfoList.fastForEach {
-        it.paragraph.paint(canvas, brush, alpha, shadow, decoration)
+        it.paragraph.paint(canvas, brush, alpha, shadow, decoration, drawStyle)
         canvas.translate(0f, it.paragraph.height)
     }
     canvas.restore()
diff --git a/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/SpanStyleTest.kt b/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/SpanStyleTest.kt
index 0286047..3a3d0bf 100644
--- a/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/SpanStyleTest.kt
+++ b/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/SpanStyleTest.kt
@@ -19,6 +19,9 @@
 import androidx.compose.ui.graphics.Brush
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.StrokeCap
+import androidx.compose.ui.graphics.drawscope.Fill
+import androidx.compose.ui.graphics.drawscope.Stroke
 import androidx.compose.ui.graphics.lerp
 import androidx.compose.ui.text.font.FontFamily
 import androidx.compose.ui.text.font.FontStyle
@@ -56,6 +59,7 @@
         assertThat(style.background).isEqualTo(Color.Unspecified)
         assertThat(style.textDecoration).isNull()
         assertThat(style.fontFamily).isNull()
+        assertThat(style.drawStyle).isNull()
     }
 
     @OptIn(ExperimentalTextApi::class)
@@ -200,6 +204,15 @@
     }
 
     @Test
+    fun `constructor with customized drawStyle`() {
+        val stroke = Stroke(width = 4f)
+
+        val style = SpanStyle(drawStyle = stroke)
+
+        assertThat(style.drawStyle).isEqualTo(stroke)
+    }
+
+    @Test
     fun `merge with empty other should return this`() {
         val style = SpanStyle()
 
@@ -506,6 +519,28 @@
     }
 
     @Test
+    fun `merge with other's drawStyle is null should use this' drawStyle`() {
+        val drawStyle1 = Stroke(cap = StrokeCap.Butt)
+        val style = SpanStyle(drawStyle = drawStyle1)
+
+        val newSpanStyle = style.merge(SpanStyle(drawStyle = null))
+
+        assertThat(newSpanStyle.drawStyle).isEqualTo(drawStyle1)
+    }
+
+    @Test
+    fun `merge with other's drawStyle is set should use other's drawStyle`() {
+        val drawStyle1 = Stroke(cap = StrokeCap.Butt)
+        val drawStyle2 = Fill
+        val style = SpanStyle(drawStyle = drawStyle1)
+        val otherStyle = SpanStyle(drawStyle = drawStyle2)
+
+        val newSpanStyle = style.merge(otherStyle)
+
+        assertThat(newSpanStyle.drawStyle).isEqualTo(otherStyle.drawStyle)
+    }
+
+    @Test
     fun `plus operator merges`() {
         val style = SpanStyle(
             color = Color.Red,
diff --git a/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/TextStyleLayoutAttributesTest.kt b/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/TextStyleLayoutAttributesTest.kt
index d7e0cbc..80dae828 100644
--- a/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/TextStyleLayoutAttributesTest.kt
+++ b/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/TextStyleLayoutAttributesTest.kt
@@ -366,6 +366,7 @@
             getProperty("textGeometricTransform"),
             getProperty("localeList"),
             getProperty("background"),
+            getProperty("drawStyle"),
             getProperty("textAlign"),
             getProperty("textDirection"),
             getProperty("lineHeight"),
diff --git a/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/TextStyleTest.kt b/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/TextStyleTest.kt
index c7c49dd..234888e 100644
--- a/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/TextStyleTest.kt
+++ b/compose/ui/ui-text/src/test/java/androidx/compose/ui/text/TextStyleTest.kt
@@ -21,6 +21,9 @@
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.Shadow
 import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.StrokeCap
+import androidx.compose.ui.graphics.drawscope.Fill
+import androidx.compose.ui.graphics.drawscope.Stroke
 import androidx.compose.ui.graphics.lerp
 import androidx.compose.ui.text.font.FontFamily
 import androidx.compose.ui.text.font.FontStyle
@@ -32,8 +35,8 @@
 import androidx.compose.ui.text.style.Hyphens
 import androidx.compose.ui.text.style.LineBreak
 import androidx.compose.ui.text.style.LineHeightStyle
-import androidx.compose.ui.text.style.LineHeightStyle.Trim
 import androidx.compose.ui.text.style.LineHeightStyle.Alignment
+import androidx.compose.ui.text.style.LineHeightStyle.Trim
 import androidx.compose.ui.text.style.TextAlign
 import androidx.compose.ui.text.style.TextDecoration
 import androidx.compose.ui.text.style.TextDirection
@@ -65,6 +68,7 @@
         assertThat(style.letterSpacing.isUnspecified).isTrue()
         assertThat(style.localeList).isNull()
         assertThat(style.background).isEqualTo(Color.Unspecified)
+        assertThat(style.drawStyle).isNull()
         assertThat(style.textDecoration).isNull()
         assertThat(style.fontFamily).isNull()
         assertThat(style.platformStyle).isNull()
@@ -329,6 +333,16 @@
         assertThat(style.lineBreak).isEqualTo(LineBreak.Heading)
     }
 
+    @OptIn(ExperimentalTextApi::class)
+    @Test
+    fun `constructor with customized drawStyle`() {
+        val stroke = Stroke(width = 8f)
+
+        val style = TextStyle(drawStyle = stroke)
+
+        assertThat(style.drawStyle).isEqualTo(stroke)
+    }
+
     @Test
     fun `merge with empty other should return this`() {
         val style = TextStyle()
@@ -547,6 +561,30 @@
         assertThat(newStyle.textDecoration).isEqualTo(otherStyle.textDecoration)
     }
 
+    @OptIn(ExperimentalTextApi::class)
+    @Test
+    fun `merge with other's drawStyle is null should use this' drawStyle`() {
+        val drawStyle1 = Stroke(cap = StrokeCap.Butt)
+        val style = TextStyle(drawStyle = drawStyle1)
+
+        val newTextStyle = style.merge(TextStyle(drawStyle = null))
+
+        assertThat(newTextStyle.drawStyle).isEqualTo(drawStyle1)
+    }
+
+    @OptIn(ExperimentalTextApi::class)
+    @Test
+    fun `merge with other's drawStyle is set should use other's drawStyle`() {
+        val drawStyle1 = Stroke(cap = StrokeCap.Butt)
+        val drawStyle2 = Fill
+        val style = TextStyle(drawStyle = drawStyle1)
+        val otherStyle = TextStyle(drawStyle = drawStyle2)
+
+        val newTextStyle = style.merge(otherStyle)
+
+        assertThat(newTextStyle.drawStyle).isEqualTo(otherStyle.drawStyle)
+    }
+
     @Test
     fun `merge with other's locale is null should use this' locale`() {
         val style = TextStyle(localeList = LocaleList("en-US"))
@@ -1183,6 +1221,34 @@
         assertThat(newStyle.textDecoration).isEqualTo(decoration2)
     }
 
+    @OptIn(ExperimentalTextApi::class)
+    @Test
+    fun `lerp drawStyle with a and b are not null and fraction is smaller than half`() {
+        val drawStyle1 = Fill
+        val drawStyle2 = Stroke(width = 8f)
+        val t = 0.2f
+        val style1 = TextStyle(drawStyle = drawStyle1)
+        val style2 = TextStyle(drawStyle = drawStyle2)
+
+        val newStyle = lerp(start = style1, stop = style2, fraction = t)
+
+        assertThat(newStyle.drawStyle).isEqualTo(drawStyle1)
+    }
+
+    @OptIn(ExperimentalTextApi::class)
+    @Test
+    fun `lerp drawStyle with a and b are not null and fraction is larger than half`() {
+        val drawStyle1 = Fill
+        val drawStyle2 = Stroke(width = 8f)
+        val t = 0.8f
+        val style1 = TextStyle(drawStyle = drawStyle1)
+        val style2 = TextStyle(drawStyle = drawStyle2)
+
+        val newStyle = lerp(start = style1, stop = style2, fraction = t)
+
+        assertThat(newStyle.drawStyle).isEqualTo(drawStyle2)
+    }
+
     @Test
     fun `lerp textAlign with a null, b not null and t is smaller than half`() {
         val style1 = TextStyle(textAlign = null)
@@ -1475,6 +1541,7 @@
         val background = Color.Yellow
         val decoration = TextDecoration.Underline
         val shadow = Shadow(color = Color.Green, offset = Offset(2f, 4f))
+        val drawStyle = Stroke(width = 8f)
 
         val style = TextStyle(
             brush = brush,
@@ -1490,7 +1557,8 @@
             localeList = localeList,
             background = background,
             textDecoration = decoration,
-            shadow = shadow
+            shadow = shadow,
+            drawStyle = drawStyle
         )
 
         assertThat(style.toSpanStyle()).isEqualTo(
@@ -1508,7 +1576,8 @@
                 localeList = localeList,
                 background = background,
                 textDecoration = decoration,
-                shadow = shadow
+                shadow = shadow,
+                drawStyle = drawStyle
             )
         )
     }
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/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/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/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-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..20b8136 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]+\)
@@ -403,7 +405,7 @@
 # > 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 +493,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 +517,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
+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-tip-of-tree/build.gradle b/docs-tip-of-tree/build.gradle
index e07ebcb..43aa0c6 100644
--- a/docs-tip-of-tree/build.gradle
+++ b/docs-tip-of-tree/build.gradle
@@ -175,6 +175,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/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/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/SingleEntityTemplateLayouts.kt b/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/template/SingleEntityTemplateLayouts.kt
index 147f09a..07fb91e 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)
+                }
             }
         }
     }
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/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 343c286..b71a5ce 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
@@ -18,6 +18,7 @@
 import androidx.health.connect.client.aggregate.AggregateMetric
 import androidx.health.connect.client.records.metadata.Metadata
 import androidx.health.connect.client.units.Energy
+import androidx.health.connect.client.units.kilocalories
 import java.time.Instant
 import java.time.ZoneOffset
 
@@ -38,6 +39,7 @@
 
     init {
         energy.requireNotLess(other = energy.zero(), "energy")
+        energy.requireNotMore(other = MAX_ENERGY, "energy")
         require(startTime.isBefore(endTime)) { "startTime must be before endTime." }
     }
 
@@ -74,6 +76,7 @@
     companion object {
         private const val TYPE_NAME = "ActiveCaloriesBurned"
         private const val ENERGY_FIELD_NAME = "energy"
+        private val MAX_ENERGY = 1000_000.kilocalories
 
         /**
          * Metric identifier to retrieve total active calories burned from
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 90da526..77bd2e2 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
@@ -17,6 +17,7 @@
 
 import androidx.health.connect.client.records.metadata.Metadata
 import androidx.health.connect.client.units.Temperature
+import androidx.health.connect.client.units.celsius
 import java.time.Instant
 import java.time.ZoneOffset
 
@@ -40,6 +41,11 @@
     override val metadata: Metadata = Metadata.EMPTY,
 ) : InstantaneousRecord {
 
+    init {
+        temperature.requireNotLess(other = MIN_TEMPERATURE, "temperature")
+        temperature.requireNotMore(other = MAX_TEMPERATURE, "temperature")
+    }
+
     /*
      * Generated by the IDE: Code -> Generate -> "equals() and hashCode()".
      */
@@ -67,4 +73,9 @@
         result = 31 * result + metadata.hashCode()
         return result
     }
+
+    private companion object {
+        private val MIN_TEMPERATURE = 0.celsius
+        private val MAX_TEMPERATURE = 100.celsius
+    }
 }
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 d7f938b..a9daf30 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
@@ -19,6 +19,7 @@
 import androidx.health.connect.client.records.metadata.Metadata
 import androidx.health.connect.client.units.Energy
 import androidx.health.connect.client.units.Power
+import androidx.health.connect.client.units.kilocaloriesPerDay
 import java.time.Instant
 import java.time.ZoneOffset
 
@@ -36,6 +37,7 @@
 
     init {
         basalMetabolicRate.requireNotLess(other = basalMetabolicRate.zero(), name = "bmr")
+        basalMetabolicRate.requireNotMore(other = MAX_BASAL_METABLOIC_RATE, name = "bmr")
     }
 
     override fun equals(other: Any?): Boolean {
@@ -61,6 +63,7 @@
     companion object {
         private const val BASAL_CALORIES_TYPE_NAME = "BasalCaloriesBurned"
         private const val ENERGY_FIELD_NAME = "energy"
+        private val MAX_BASAL_METABLOIC_RATE = 10_000.kilocaloriesPerDay
 
         /**
          * Metric identifier to retrieve the total basal calories burned from
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 86ceb86..d5545c5 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
@@ -62,6 +62,7 @@
 
     init {
         level.requireNotLess(other = level.zero(), name = "level")
+        level.requireNotMore(other = MAX_BLOOD_GLUCOSE_LEVEL, name = "level")
     }
 
     /*
@@ -129,4 +130,8 @@
     )
     @RestrictTo(RestrictTo.Scope.LIBRARY)
     annotation class SpecimenSources
+
+    private companion object {
+        private val MAX_BLOOD_GLUCOSE_LEVEL = BloodGlucose.millimolesPerLiter(50.0)
+    }
 }
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 3f7bc48..f5394e0 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
@@ -20,6 +20,7 @@
 import androidx.health.connect.client.records.BloodPressureRecord.MeasurementLocation
 import androidx.health.connect.client.records.metadata.Metadata
 import androidx.health.connect.client.units.Pressure
+import androidx.health.connect.client.units.millimetersOfMercury
 import java.time.Instant
 import java.time.ZoneOffset
 
@@ -58,8 +59,10 @@
 ) : InstantaneousRecord {
 
     init {
-        systolic.requireNotLess(other = systolic.zero(), name = "systolic")
-        diastolic.requireNotLess(other = diastolic.zero(), name = "diastolic")
+        systolic.requireNotLess(other = MIN_SYSTOLIC, name = "systolic")
+        systolic.requireNotMore(other = MAX_SYSTOLIC, name = "systolic")
+        diastolic.requireNotLess(other = MIN_DIASTOLIC, name = "diastolic")
+        diastolic.requireNotMore(other = MAX_DIASTOLIC, name = "diastolic")
     }
 
     /*
@@ -122,6 +125,10 @@
         private const val BLOOD_PRESSURE_NAME = "BloodPressure"
         private const val SYSTOLIC_FIELD_NAME = "systolic"
         private const val DIASTOLIC_FIELD_NAME = "diastolic"
+        private val MIN_SYSTOLIC = 10.millimetersOfMercury
+        private val MAX_SYSTOLIC = 200.millimetersOfMercury
+        private val MIN_DIASTOLIC = 10.millimetersOfMercury
+        private val MAX_DIASTOLIC = 180.millimetersOfMercury
 
         /**
          * Metric identifier to retrieve average systolic from
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 7f51c1b..f536c5e 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
@@ -17,6 +17,7 @@
 
 import androidx.health.connect.client.records.metadata.Metadata
 import androidx.health.connect.client.units.Percentage
+import androidx.health.connect.client.units.percent
 import java.time.Instant
 import java.time.ZoneOffset
 
@@ -34,6 +35,7 @@
 
     init {
         requireNonNegative(value = percentage.value, name = "percentage")
+        percentage.requireNotMore(other = MAX_PERCENTAGE, name = "percentage")
     }
 
     /*
@@ -61,4 +63,8 @@
         result = 31 * result + metadata.hashCode()
         return result
     }
+
+    private companion object {
+        private val MAX_PERCENTAGE = 100.percent
+    }
 }
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 9099d8f..1a0ddc9 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
@@ -18,6 +18,7 @@
 import androidx.annotation.RestrictTo
 import androidx.health.connect.client.records.metadata.Metadata
 import androidx.health.connect.client.units.Mass
+import androidx.health.connect.client.units.kilograms
 import java.time.Instant
 import java.time.ZoneOffset
 
@@ -35,6 +36,7 @@
 
     init {
         mass.requireNotLess(other = mass.zero(), name = "mass")
+        mass.requireNotMore(other = MAX_BODY_WATER_MASS, name = "mass")
     }
 
     /*
@@ -62,4 +64,8 @@
         result = 31 * result + metadata.hashCode()
         return result
     }
+
+    private companion object {
+        private val MAX_BODY_WATER_MASS = 1000.kilograms
+    }
 }
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 f0e5a65..79f7069 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
@@ -17,6 +17,7 @@
 
 import androidx.health.connect.client.records.metadata.Metadata
 import androidx.health.connect.client.units.Mass
+import androidx.health.connect.client.units.kilograms
 import java.time.Instant
 import java.time.ZoneOffset
 
@@ -31,6 +32,7 @@
 
     init {
         mass.requireNotLess(other = mass.zero(), name = "mass")
+        mass.requireNotMore(other = MAX_BONE_MASS, name = "mass")
     }
 
     /*
@@ -58,4 +60,8 @@
         result = 31 * result + metadata.hashCode()
         return result
     }
+
+    private companion object {
+        private val MAX_BONE_MASS = 1000.kilograms
+    }
 }
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/CyclingPedalingCadenceRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/CyclingPedalingCadenceRecord.kt
index a015e4c..b09503f 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/CyclingPedalingCadenceRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/CyclingPedalingCadenceRecord.kt
@@ -74,6 +74,7 @@
     companion object {
         private const val TYPE = "CyclingPedalingCadenceSeries"
         private const val RPM_FIELD = "rpm"
+        private val MAX_RPM = 10_000.0
 
         /**
          * Metric identifier to retrieve average cycling pedaling cadence from
@@ -109,6 +110,7 @@
 
         init {
             requireNonNegative(value = revolutionsPerMinute, name = "revolutionsPerMinute")
+            revolutionsPerMinute.requireNotMore(MAX_RPM, name = "revolutionsPerMinute")
         }
 
         /*
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 bb64e04..247d898 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
@@ -18,6 +18,7 @@
 import androidx.health.connect.client.aggregate.AggregateMetric
 import androidx.health.connect.client.records.metadata.Metadata
 import androidx.health.connect.client.units.Length
+import androidx.health.connect.client.units.meters
 import java.time.Instant
 import java.time.ZoneOffset
 
@@ -42,6 +43,7 @@
 
     init {
         distance.requireNotLess(other = distance.zero(), name = "distance")
+        distance.requireNotMore(other = MAX_DISTANCE, name = "distance")
         require(startTime.isBefore(endTime)) { "startTime must be before endTime." }
     }
 
@@ -78,6 +80,8 @@
     }
 
     companion object {
+        private val MAX_DISTANCE = 1000_000.meters
+
         /**
          * Metric identifier to retrieve the total distance from
          * [androidx.health.connect.client.aggregate.AggregationResult].
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 a4dc8f6..1253f658 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
@@ -18,6 +18,7 @@
 import androidx.health.connect.client.aggregate.AggregateMetric
 import androidx.health.connect.client.records.metadata.Metadata
 import androidx.health.connect.client.units.Length
+import androidx.health.connect.client.units.meters
 import java.time.Instant
 import java.time.ZoneOffset
 
@@ -33,6 +34,8 @@
 ) : IntervalRecord {
 
     init {
+        elevation.requireNotLess(other = MIN_ELEVATION_GAIN, name = "elevation")
+        elevation.requireNotMore(other = MAX_ELEVATION_GAIN, name = "elevation")
         require(startTime.isBefore(endTime)) { "startTime must be before endTime." }
     }
 
@@ -67,6 +70,9 @@
     }
 
     companion object {
+        private val MAX_ELEVATION_GAIN = (1000_000).meters
+        private val MIN_ELEVATION_GAIN = (-1000_000).meters
+
         /**
          * Metric identifier to retrieve the total elevation gained from
          * [androidx.health.connect.client.aggregate.AggregationResult].
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 eefe812..0129308 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
@@ -17,6 +17,7 @@
 
 import androidx.health.connect.client.records.metadata.Metadata
 import androidx.health.connect.client.units.Length
+import androidx.health.connect.client.units.meters
 import java.time.Instant
 import java.time.ZoneOffset
 
@@ -37,6 +38,7 @@
 
     init {
         length?.requireNotLess(other = length.zero(), name = "length")
+        length?.requireNotMore(other = MAX_LAP_LENGTH, name = "length")
         require(startTime.isBefore(endTime)) { "startTime must be before endTime." }
     }
 
@@ -69,4 +71,8 @@
         result = 31 * result + metadata.hashCode()
         return result
     }
+
+    private companion object {
+        private val MAX_LAP_LENGTH = 1000_000.meters
+    }
 }
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 90ce666..926dd42 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
@@ -40,6 +40,7 @@
 
     init {
         requireNonNegative(value = count, name = "count")
+        count.requireNotMore(other = 1000_000, name = "count")
         require(startTime.isBefore(endTime)) { "startTime must be before endTime." }
     }
 
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 b00675d..7c3c096 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
@@ -32,6 +32,7 @@
 ) : IntervalRecord {
     init {
         requireNonNegative(value = floors, name = "floors")
+        floors.requireNotMore(other = 1000_000.0, name = "floors")
         require(startTime.isBefore(endTime)) { "startTime must be before endTime." }
     }
 
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HeartRateRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HeartRateRecord.kt
index fa61572..8d6eee1 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HeartRateRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/HeartRateRecord.kt
@@ -120,6 +120,7 @@
 
         init {
             requireNonNegative(value = beatsPerMinute, name = "beatsPerMinute")
+            beatsPerMinute.requireNotMore(other = 300, name = "beatsPerMinute")
         }
 
         /*
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 1de5d24..5f36ad9 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
@@ -18,6 +18,7 @@
 import androidx.health.connect.client.aggregate.AggregateMetric
 import androidx.health.connect.client.records.metadata.Metadata
 import androidx.health.connect.client.units.Length
+import androidx.health.connect.client.units.meters
 import java.time.Instant
 import java.time.ZoneOffset
 
@@ -32,6 +33,7 @@
 
     init {
         height.requireNotLess(other = height.zero(), name = "height")
+        height.requireNotMore(other = MAX_HEIGHT, name = "height")
     }
 
     /*
@@ -63,6 +65,7 @@
     companion object {
         private const val HEIGHT_NAME = "Height"
         private const val HEIGHT_FIELD_NAME = "height"
+        private val MAX_HEIGHT = 3.meters
 
         /**
          * Metric identifier to retrieve the average height from
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 e31f6b0..e7d16fb 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
@@ -17,6 +17,7 @@
 
 import androidx.health.connect.client.records.metadata.Metadata
 import androidx.health.connect.client.units.Length
+import androidx.health.connect.client.units.meters
 import java.time.Instant
 import java.time.ZoneOffset
 
@@ -31,6 +32,7 @@
 
     init {
         circumference.requireNotLess(other = circumference.zero(), name = "circumference")
+        circumference.requireNotMore(other = MAX_CIRCUMFERENCE, name = "circumference")
     }
 
     /*
@@ -58,4 +60,8 @@
         result = 31 * result + metadata.hashCode()
         return result
     }
+
+    private companion object {
+        private val MAX_CIRCUMFERENCE = 10.meters
+    }
 }
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 6bc44de..1e4ef5d 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
@@ -18,6 +18,7 @@
 import androidx.health.connect.client.aggregate.AggregateMetric
 import androidx.health.connect.client.records.metadata.Metadata
 import androidx.health.connect.client.units.Volume
+import androidx.health.connect.client.units.liters
 import java.time.Instant
 import java.time.ZoneOffset
 
@@ -34,6 +35,7 @@
 
     init {
         volume.requireNotLess(other = volume.zero(), name = "volume")
+        volume.requireNotMore(other = MAX_VOLUME, name = "volume")
         require(startTime.isBefore(endTime)) { "startTime must be before endTime." }
     }
 
@@ -62,6 +64,8 @@
     }
 
     companion object {
+        private val MAX_VOLUME = 100.liters
+
         /**
          * Metric identifier to retrieve total hydration from
          * [androidx.health.connect.client.aggregate.AggregationResult].
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 93d6113..067d38b 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
@@ -17,6 +17,7 @@
 
 import androidx.health.connect.client.records.metadata.Metadata
 import androidx.health.connect.client.units.Mass
+import androidx.health.connect.client.units.kilograms
 import java.time.Instant
 import java.time.ZoneOffset
 
@@ -33,6 +34,7 @@
 
     init {
         mass.requireNotLess(other = mass.zero(), name = "mass")
+        mass.requireNotMore(other = MAX_MASS, name = "mass")
     }
 
     /*
@@ -60,4 +62,8 @@
         result = 31 * result + metadata.hashCode()
         return result
     }
+
+    private companion object {
+        private val MAX_MASS = 1000.kilograms
+    }
 }
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 4c9c0f6..17441bd 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
@@ -35,6 +35,7 @@
 
     init {
         requireNonNegative(value = percentage.value, name = "percentage")
+        percentage.value.requireNotMore(other = 100.0, name = "percentage")
     }
 
     /*
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/PowerRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/PowerRecord.kt
index 018c8be..ba84102 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/PowerRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/PowerRecord.kt
@@ -22,6 +22,7 @@
 import androidx.health.connect.client.aggregate.AggregateMetric.Companion.doubleMetric
 import androidx.health.connect.client.records.metadata.Metadata
 import androidx.health.connect.client.units.Power
+import androidx.health.connect.client.units.watts
 import java.time.Instant
 import java.time.ZoneOffset
 
@@ -75,6 +76,7 @@
     companion object {
         private const val TYPE = "PowerSeries"
         private const val POWER_FIELD = "power"
+        private val MAX_POWER = 100_000.watts
 
         /**
          * Metric identifier to retrieve average power from
@@ -132,6 +134,7 @@
 
         init {
             power.requireNotLess(other = power.zero(), name = "power")
+            power.requireNotMore(other = MAX_POWER, name = "power")
         }
 
         /*
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 39926e8..75c977f 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
@@ -31,6 +31,7 @@
 ) : InstantaneousRecord {
     init {
         requireNonNegative(value = rate, name = "rate")
+        rate.requireNotMore(other = 100.0, name = "rate")
     }
 
     override fun equals(other: Any?): Boolean {
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 e037295..f2bae88 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
@@ -34,6 +34,7 @@
 ) : InstantaneousRecord {
     init {
         requireNonNegative(value = beatsPerMinute, name = "beatsPerMinute")
+        beatsPerMinute.requireNotMore(other = 300, name = "beatsPerMinute")
     }
 
     override fun equals(other: Any?): Boolean {
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/SpeedRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/SpeedRecord.kt
index 60833f8..00d7076 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/SpeedRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/SpeedRecord.kt
@@ -18,6 +18,7 @@
 import androidx.health.connect.client.aggregate.AggregateMetric
 import androidx.health.connect.client.records.metadata.Metadata
 import androidx.health.connect.client.units.Velocity
+import androidx.health.connect.client.units.metersPerSecond
 import java.time.Instant
 import java.time.ZoneOffset
 
@@ -71,6 +72,7 @@
     companion object {
         private const val SPEED_TYPE_NAME = "SpeedSeries"
         private const val SPEED_FIELD_NAME = "speed"
+        private val MAX_SPEED = 1000_000.metersPerSecond
 
         /**
          * Metric identifier to retrieve average speed from
@@ -127,6 +129,7 @@
 
         init {
             speed.requireNotLess(other = speed.zero(), name = "speed")
+            speed.requireNotMore(other = MAX_SPEED, name = "speed")
         }
 
         override fun equals(other: Any?): Boolean {
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/StepsCadenceRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/StepsCadenceRecord.kt
index 9a6a0ef..4471594 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/StepsCadenceRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/StepsCadenceRecord.kt
@@ -105,6 +105,7 @@
 
         init {
             requireNonNegative(value = rate, name = "rate")
+            rate.requireNotMore(other = 10_000.0, name = "rate")
         }
 
         /*
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 f0c727d..62ba06b 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
@@ -40,6 +40,7 @@
 ) : IntervalRecord {
     init {
         requireNonNegative(value = count, name = "count")
+        count.requireNotMore(other = 1000_000, name = "count")
         require(startTime.isBefore(endTime)) { "startTime must be before endTime." }
     }
     override fun equals(other: Any?): Boolean {
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 d786a56..2c01aba 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
@@ -39,6 +39,7 @@
 ) : IntervalRecord {
     init {
         requireNonNegative(value = count, name = "count")
+        count.requireNotMore(other = 1000_000, name = "count")
         require(startTime.isBefore(endTime)) { "startTime must be before endTime." }
     }
     override fun equals(other: Any?): Boolean {
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 fb745a7..8fbc0c8 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
@@ -18,6 +18,7 @@
 import androidx.health.connect.client.aggregate.AggregateMetric
 import androidx.health.connect.client.records.metadata.Metadata
 import androidx.health.connect.client.units.Energy
+import androidx.health.connect.client.units.kilocalories
 import java.time.Instant
 import java.time.ZoneOffset
 
@@ -37,6 +38,7 @@
 
     init {
         energy.requireNotLess(other = energy.zero(), "energy")
+        energy.requireNotMore(other = MAX_ENERGY, name = "energy")
         require(startTime.isBefore(endTime)) { "startTime must be before endTime." }
     }
 
@@ -71,6 +73,8 @@
     }
 
     companion object {
+        private val MAX_ENERGY = 1000_000.kilocalories
+
         /**
          * Metric identifier to retrieve total energy from
          * [androidx.health.connect.client.aggregate.AggregationResult].
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/Utils.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/Utils.kt
index 275e33f..ecd101b 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/Utils.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/Utils.kt
@@ -24,6 +24,10 @@
     require(this >= other) { "$name must not be less than $other, currently $this." }
 }
 
+internal fun <T : Comparable<T>> T.requireNotMore(other: T, name: String) {
+    require(this <= other) { "$name must not be more than $other, currently $this." }
+}
+
 internal fun requireNonNegative(value: Long, name: String) {
     require(value >= 0) { "$name must not be negative" }
 }
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 094be6f..66307bd6 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
@@ -40,6 +40,10 @@
             value = vo2MillilitersPerMinuteKilogram,
             name = "vo2MillilitersPerMinuteKilogram"
         )
+        vo2MillilitersPerMinuteKilogram.requireNotMore(
+            100.0,
+            name = "vo2MillilitersPerMinuteKilogram"
+        )
     }
     override fun equals(other: Any?): Boolean {
         if (this === other) return true
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 4a68e32..f39d89a 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
@@ -17,6 +17,7 @@
 
 import androidx.health.connect.client.records.metadata.Metadata
 import androidx.health.connect.client.units.Length
+import androidx.health.connect.client.units.meters
 import java.time.Instant
 import java.time.ZoneOffset
 
@@ -35,6 +36,7 @@
 
     init {
         circumference.requireNotLess(other = circumference.zero(), name = "circumference")
+        circumference.requireNotMore(other = MAX_CIRCUMFERENCE, name = "circumference")
     }
 
     /*
@@ -62,4 +64,8 @@
         result = 31 * result + metadata.hashCode()
         return result
     }
+
+    private companion object {
+        private val MAX_CIRCUMFERENCE = 10.meters
+    }
 }
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 d2abb68..cde7cbc 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
@@ -18,6 +18,7 @@
 import androidx.health.connect.client.aggregate.AggregateMetric
 import androidx.health.connect.client.records.metadata.Metadata
 import androidx.health.connect.client.units.Mass
+import androidx.health.connect.client.units.kilograms
 import java.time.Instant
 import java.time.ZoneOffset
 
@@ -36,6 +37,7 @@
 
     init {
         weight.requireNotLess(other = weight.zero(), name = "weight")
+        weight.requireNotMore(other = MAX_WEIGHT, name = "weight")
     }
 
     override fun equals(other: Any?): Boolean {
@@ -67,6 +69,7 @@
     companion object {
         private const val WEIGHT_NAME = "Weight"
         private const val WEIGHT_FIELD = "weight"
+        private val MAX_WEIGHT = 1000.kilograms
 
         /**
          * Metric identifier to retrieve the average weight from
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 a480b85..0e066e5 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
@@ -37,6 +37,7 @@
 
     init {
         requireNonNegative(value = count, name = "count")
+        count.requireNotMore(other = 1000_000, name = "count")
         require(startTime.isBefore(endTime)) { "startTime must be before endTime." }
     }
 
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/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 @@
+joseprio@google.com
+michaelwr@google.com
+svv@google.com
\ 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/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/integration-tests/incrementality/src/test/kotlin/androidx/lifecycle/IncrementalAnnotationProcessingTest.kt b/lifecycle/integration-tests/incrementality/src/test/kotlin/androidx/lifecycle/IncrementalAnnotationProcessingTest.kt
index a150471..84100e2 100644
--- a/lifecycle/integration-tests/incrementality/src/test/kotlin/androidx/lifecycle/IncrementalAnnotationProcessingTest.kt
+++ b/lifecycle/integration-tests/incrementality/src/test/kotlin/androidx/lifecycle/IncrementalAnnotationProcessingTest.kt
@@ -245,6 +245,7 @@
             apply plugin: 'com.android.application'
 
             android {
+                namespace "androidx.lifecycle.incap"
                 compileSdkVersion ${projectSetup.props.compileSdkVersion}
                 buildToolsVersion "${projectSetup.props.buildToolsVersion}"
 
@@ -282,9 +283,7 @@
         addFileWithContent(
             "$MAIN_DIR/AndroidManifest.xml",
             """
-            <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-                package="androidx.lifecycle.incap">
-            </manifest>
+            <manifest/>
             """.trimIndent()
         )
     }
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/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..1afb26e 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,14 @@
 
 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.poetSpec
 import androidx.privacysandbox.tools.core.generator.primaryConstructor
 import androidx.privacysandbox.tools.core.model.AnnotatedInterface
 import androidx.privacysandbox.tools.core.model.Method
-import androidx.privacysandbox.tools.core.model.Parameter
 import com.squareup.kotlinpoet.ClassName
 import com.squareup.kotlinpoet.CodeBlock
 import com.squareup.kotlinpoet.FunSpec
@@ -29,6 +31,7 @@
 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 val className =
@@ -61,16 +64,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,23 +74,18 @@
             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 {
@@ -105,42 +94,52 @@
             "I${method.returnType.poetSpec().simpleName}TransactionCallback",
             "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")
+            }
 
-        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()
+            if (method.returnsUnit) {
+                addControlFlow("override fun onSuccess()") {
+                    addStatement("it.resumeWith(Result.success(Unit))")
+                }
+            } else {
+                addControlFlow(
+                    "override fun onSuccess(result: %T)",
+                    method.returnType.poetSpec()
+                ) {
+                    addStatement("it.resumeWith(Result.success(result))")
+                }
+            }
+
+            addControlFlow("override fun onFailure(errorCode: Int, errorMessage: String)") {
+                addStatement(
+                    "it.%M(RuntimeException(errorMessage))",
+                    MemberName("kotlin.coroutines", "resumeWithException")
+                )
+            }
         }
+    }
 
-        beginControlFlow("override fun onFailure(errorCode: Int, errorMessage: String)")
-        addStatement(
-            "it.%M(RuntimeException(errorMessage))",
-            MemberName("kotlin.coroutines", "resumeWithException")
-        )
-        endControlFlow()
-
-        endControlFlow()
+    private fun generateRemoteCall(
+        method: Method,
+        extraParameters: List<CodeBlock> = emptyList(),
+    ) = CodeBlock.builder().build {
+        val parameters = method.parameters.map { parameter ->
+            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/ServiceFactoryFileGenerator.kt b/privacysandbox/tools/tools-apigenerator/src/main/java/androidx/privacysandbox/tools/apigenerator/ServiceFactoryFileGenerator.kt
index 42daf61..dea21ba 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,30 @@
 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 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 service: AnnotatedInterface
+) {
+    private val proxyTypeGenerator = ClientProxyTypeGenerator(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 +80,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
new file mode 100644
index 0000000..38b8a19
--- /dev/null
+++ b/privacysandbox/tools/tools-apigenerator/src/main/java/androidx/privacysandbox/tools/apigenerator/parser/AnnotatedClassReader.kt
@@ -0,0 +1,130 @@
+/*
+ * 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.parser
+
+import androidx.privacysandbox.tools.PrivacySandboxCallback
+import androidx.privacysandbox.tools.PrivacySandboxService
+import androidx.privacysandbox.tools.PrivacySandboxValue
+import java.nio.file.Path
+import java.util.zip.ZipInputStream
+import kotlinx.metadata.KmClass
+import kotlinx.metadata.jvm.KotlinClassHeader
+import kotlinx.metadata.jvm.KotlinClassMetadata
+import org.objectweb.asm.ClassReader
+import org.objectweb.asm.Opcodes
+import org.objectweb.asm.Type
+import org.objectweb.asm.tree.AnnotationNode
+import org.objectweb.asm.tree.ClassNode
+
+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))
+            }
+            if (classNode.isAnnotatedWith<PrivacySandboxValue>()) {
+                values.add(parseKotlinMetadata(classNode))
+            }
+            if (classNode.isAnnotatedWith<PrivacySandboxCallback>()) {
+                callbacks.add(parseKotlinMetadata(classNode))
+            }
+        }
+        return AnnotatedClasses(services.toSet(), values.toSet(), callbacks.toSet())
+    }
+
+    private fun readClassNodes(stubClassPath: Path): List<ClassNode> =
+        ZipInputStream(stubClassPath.toFile().inputStream()).use { input ->
+            generateSequence { input.nextEntry }
+                .filter { it.name.endsWith(".class") }
+                .map {
+                    toClassNode(input.readAllBytes())
+                }.toList()
+        }
+
+    private fun toClassNode(classContents: ByteArray): ClassNode {
+        val reader = ClassReader(classContents)
+        val classNode = ClassNode(Opcodes.ASM9)
+        reader.accept(
+            classNode,
+            ClassReader.SKIP_CODE or ClassReader.SKIP_DEBUG or ClassReader.SKIP_FRAMES
+        )
+        return classNode
+    }
+
+    private fun parseKotlinMetadata(classNode: ClassNode): KmClass {
+        val metadataValues =
+            classNode.visibleAnnotationsWithType<Metadata>().firstOrNull()?.attributeMap
+                ?: throw PrivacySandboxParsingException(
+                    "Missing Kotlin metadata annotation in ${classNode.name}. " +
+                        "Is this a valid Kotlin class?"
+                )
+
+        // ASM models annotation attributes as flat List<Objects>, so the unchecked cast is
+        // inevitable when some of these objects have type parameters, like the lists below.
+        @Suppress("UNCHECKED_CAST")
+        val header = KotlinClassHeader(
+            kind = metadataValues["k"] as Int?,
+            metadataVersion = (metadataValues["mv"] as? List<Int>?)?.toIntArray(),
+            data1 = (metadataValues["d1"] as? List<String>?)?.toTypedArray(),
+            data2 = (metadataValues["d2"] as? List<String>?)?.toTypedArray(),
+            extraInt = metadataValues["xi"] as? Int?,
+            packageName = metadataValues["pn"] as? String?,
+            extraString = metadataValues["xs"] as? String?,
+        )
+
+        return when (val metadata = KotlinClassMetadata.read(header)) {
+            is KotlinClassMetadata.Class -> metadata.toKmClass()
+            else -> throw PrivacySandboxParsingException(
+                "Unable to parse Kotlin metadata from ${classNode.name}. " +
+                    "Is this a valid Kotlin class?"
+            )
+        }
+    }
+
+    private inline fun <reified T> ClassNode.isAnnotatedWith(): Boolean {
+        return visibleAnnotationsWithType<T>().isNotEmpty()
+    }
+
+    private inline fun <reified T> ClassNode.visibleAnnotationsWithType(): List<AnnotationNode> {
+        return (visibleAnnotations ?: listOf<AnnotationNode>())
+            .filter { Type.getDescriptor(T::class.java) == it?.desc }
+            .filterNotNull()
+    }
+
+    /**
+     * Map of annotation attributes. This is a convenience wrapper around [AnnotationNode.values].
+     */
+    private val AnnotationNode.attributeMap: Map<String, Any>
+        get() {
+            values ?: return mapOf()
+            val attributes = mutableMapOf<String, Any>()
+            for (i in 0 until values.size step 2) {
+                attributes[values[i] as String] = values[i + 1]
+            }
+            return attributes
+        }
+}
\ No newline at end of file
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 38142be..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
@@ -16,32 +16,22 @@
 
 package androidx.privacysandbox.tools.apigenerator.parser
 
-import androidx.privacysandbox.tools.PrivacySandboxService
 import androidx.privacysandbox.tools.core.model.AnnotatedInterface
+import androidx.privacysandbox.tools.core.model.AnnotatedValue
 import androidx.privacysandbox.tools.core.model.Method
 import androidx.privacysandbox.tools.core.model.Parameter
 import androidx.privacysandbox.tools.core.model.ParsedApi
 import androidx.privacysandbox.tools.core.model.Type
+import androidx.privacysandbox.tools.core.model.ValueProperty
 import androidx.privacysandbox.tools.core.validator.ModelValidator
 import java.nio.file.Path
-import java.util.zip.ZipEntry
-import java.util.zip.ZipInputStream
 import kotlinx.metadata.ClassName
 import kotlinx.metadata.Flag
 import kotlinx.metadata.KmClass
 import kotlinx.metadata.KmClassifier
 import kotlinx.metadata.KmFunction
+import kotlinx.metadata.KmProperty
 import kotlinx.metadata.KmType
-import kotlinx.metadata.jvm.KotlinClassHeader
-import kotlinx.metadata.jvm.KotlinClassMetadata
-import org.objectweb.asm.ClassReader
-import org.objectweb.asm.ClassReader.SKIP_CODE
-import org.objectweb.asm.ClassReader.SKIP_DEBUG
-import org.objectweb.asm.ClassReader.SKIP_FRAMES
-import org.objectweb.asm.Opcodes
-import org.objectweb.asm.Type.getDescriptor
-import org.objectweb.asm.tree.AnnotationNode
-import org.objectweb.asm.tree.ClassNode
 
 internal object ApiStubParser {
     /**
@@ -52,88 +42,58 @@
      *      Kotlin interface annotated with @PrivacySandboxService.
      */
     internal fun parse(sdkInterfaceDescriptors: Path): ParsedApi {
-        val services = unzipClasses(sdkInterfaceDescriptors)
-            .filter { it.isPrivacySandboxService }
-            .map(::parseClass)
-            .toSet()
+        val (services, values, callbacks) =
+            AnnotatedClassReader.readAnnotatedClasses(sdkInterfaceDescriptors)
         if (services.isEmpty()) throw PrivacySandboxParsingException(
             "Unable to find valid interfaces annotated with @PrivacySandboxService."
         )
-        return ParsedApi(services).also(::validate)
+        return ParsedApi(
+            services.map { parseInterface(it, "PrivacySandboxService") }.toSet(),
+            values.map(::parseValue).toSet(),
+            callbacks.map { parseInterface(it, "PrivacySandboxCallback") }.toSet(),
+        ).also(::validate)
     }
 
-    private fun unzipClasses(stubClassPath: Path): List<ClassNode> =
-        ZipInputStream(stubClassPath.toFile().inputStream()).use { zipInputStream ->
-            buildList {
-                var zipEntry: ZipEntry? = zipInputStream.nextEntry
-                while (zipEntry != null) {
-                    if (zipEntry.name.endsWith(".class")) {
-                        add(toClassNode(zipInputStream.readBytes()))
-                    }
-                    zipEntry = zipInputStream.nextEntry
-                }
-            }
-        }
+    private fun parseInterface(service: KmClass, annotationName: String): AnnotatedInterface {
+        val type = parseClassName(service.name)
 
-    private fun toClassNode(classContents: ByteArray): ClassNode {
-        val reader = ClassReader(classContents)
-        val classNode = ClassNode(Opcodes.ASM9)
-        reader.accept(classNode, SKIP_CODE or SKIP_DEBUG or SKIP_FRAMES)
-        return classNode
-    }
-
-    private fun parseClass(classNode: ClassNode): AnnotatedInterface {
-        val kotlinMetadata = parseKotlinMetadata(classNode)
-        val type = kotlinMetadata.name.parsedType()
-
-        if (!Flag.Class.IS_INTERFACE(kotlinMetadata.flags)) {
+        if (!Flag.Class.IS_INTERFACE(service.flags)) {
             throw PrivacySandboxParsingException(
                 "${type.qualifiedName} is not a Kotlin interface but it's annotated with " +
-                    "@PrivacySandboxService."
-            )
-        }
-
-        if (type.simpleName.contains('.')) {
-            throw PrivacySandboxParsingException(
-                "${type.qualifiedName} is an inner interface so it can't be annotated with " +
-                    "@PrivacySandboxService."
+                    "@$annotationName."
             )
         }
 
         return AnnotatedInterface(
             type = type,
-            kotlinMetadata.functions.map(this::parseMethod),
+            service.functions.map(this::parseMethod),
         )
     }
 
-    private fun parseKotlinMetadata(classNode: ClassNode): KmClass {
-        val metadataValues =
-            classNode.visibleAnnotationsWithType<Metadata>().firstOrNull()?.attributeMap
-                ?: throw PrivacySandboxParsingException(
-                    "Missing Kotlin metadata annotation in ${classNode.name}. " +
-                        "Is this a valid Kotlin class?"
-                )
+    private fun parseValue(value: KmClass): AnnotatedValue {
+        val type = parseClassName(value.name)
 
-        // ASM models annotation attributes as flat List<Objects>, so the unchecked cast is
-        // inevitable when some of these objects have type parameters, like the lists below.
-        @Suppress("UNCHECKED_CAST")
-        val header = KotlinClassHeader(
-            kind = metadataValues["k"] as Int?,
-            metadataVersion = (metadataValues["mv"] as? List<Int>?)?.toIntArray(),
-            data1 = (metadataValues["d1"] as? List<String>?)?.toTypedArray(),
-            data2 = (metadataValues["d2"] as? List<String>?)?.toTypedArray(),
-            extraInt = metadataValues["xi"] as? Int?,
-            packageName = metadataValues["pn"] as? String?,
-            extraString = metadataValues["xs"] as? String?,
-        )
-
-        return when (val metadata = KotlinClassMetadata.read(header)) {
-            is KotlinClassMetadata.Class -> metadata.toKmClass()
-            else -> throw PrivacySandboxParsingException(
-                "Unable to parse Kotlin metadata from ${classNode.name}. " +
-                    "Is this a valid Kotlin class?"
+        if (!Flag.Class.IS_DATA(value.flags)) {
+            throw PrivacySandboxParsingException(
+                "${type.qualifiedName} is not a Kotlin data class but it's annotated with " +
+                    "@PrivacySandboxValue."
             )
         }
+        return AnnotatedValue(
+            type,
+            value.properties.map { parseProperty(type, it) },
+        )
+    }
+
+    private fun parseProperty(containerType: Type, property: KmProperty): ValueProperty {
+        val qualifiedName = "${containerType.qualifiedName}.${property.name}"
+        if (Flag.Property.IS_VAR(property.flags)) {
+            throw PrivacySandboxParsingException(
+                "Error in $qualifiedName: mutable properties are not allowed in data classes " +
+                    "annotated with @PrivacySandboxValue."
+            )
+        }
+        return ValueProperty(property.name, parseType(property.returnType))
     }
 
     private fun parseMethod(function: KmFunction): Method {
@@ -146,12 +106,28 @@
     }
 
     private fun parseType(type: KmType): Type {
-        return when (val classifier = type.classifier) {
-            is KmClassifier.Class -> classifier.name.parsedType()
-            else -> throw PrivacySandboxParsingException(
-                "Unsupported type in API description: $type"
+        val classifier = type.classifier
+        if (classifier !is KmClassifier.Class) {
+            throw PrivacySandboxParsingException("Unsupported type in API description: $type")
+        }
+        return parseClassName(classifier.name)
+    }
+
+    private fun parseClassName(className: ClassName): Type {
+        // Package names are separated with slashes and nested classes are separated with dots.
+        // (e.g com/example/OuterClass.InnerClass).
+        val (packageName, simpleName) = className.split('/').run {
+            dropLast(1).joinToString(separator = ".") to last()
+        }
+
+        if (simpleName.contains('.')) {
+            throw PrivacySandboxParsingException(
+                "Error in $packageName.$simpleName: Inner types are not supported in API " +
+                    "definitions."
             )
         }
+
+        return Type(packageName, simpleName)
     }
 
     private fun validate(api: ParsedApi) {
@@ -165,34 +141,4 @@
     }
 }
 
-internal val ClassNode.isPrivacySandboxService: Boolean get() {
-    return visibleAnnotationsWithType<PrivacySandboxService>().isNotEmpty()
-}
-
-internal inline fun <reified T> ClassNode.visibleAnnotationsWithType(): List<AnnotationNode> {
-    return (visibleAnnotations ?: listOf<AnnotationNode>())
-        .filter { getDescriptor(T::class.java) == it?.desc }
-        .filterNotNull()
-}
-
-internal fun ClassName.parsedType(): Type {
-    // Package names are separated with slashes and nested classes are separated with dots.
-    // (e.g com/example/OuterClass.InnerClass).
-    val (packageName, className) = split('/').run {
-        dropLast(1).joinToString(separator = ".") to last()
-    }
-    return Type(packageName, className)
-}
-
-/** Map of annotation attributes. This is a convenience wrapper around [AnnotationNode.values]. */
-internal val AnnotationNode.attributeMap: Map<String, Any>
-    get() {
-        values ?: return mapOf()
-        val attributes = mutableMapOf<String, Any>()
-        for (i in 0 until values.size step 2) {
-            attributes[values[i] as String] = values[i + 1]
-        }
-        return attributes
-    }
-
 class PrivacySandboxParsingException(message: String) : Exception(message)
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/parser/ApiStubParserTest.kt b/privacysandbox/tools/tools-apigenerator/src/test/java/androidx/privacysandbox/tools/apigenerator/parser/ApiStubParserTest.kt
index 0b61a0a..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
@@ -18,10 +18,13 @@
 
 import androidx.privacysandbox.tools.apigenerator.compileIntoInterfaceDescriptorsJar
 import androidx.privacysandbox.tools.core.model.AnnotatedInterface
+import androidx.privacysandbox.tools.core.model.AnnotatedValue
 import androidx.privacysandbox.tools.core.model.Method
 import androidx.privacysandbox.tools.core.model.Parameter
+import androidx.privacysandbox.tools.core.model.ParsedApi
 import androidx.privacysandbox.tools.core.model.Type
 import androidx.privacysandbox.tools.core.model.Types
+import androidx.privacysandbox.tools.core.model.ValueProperty
 import androidx.room.compiler.processing.util.Source
 import androidx.testutils.assertThrows
 import com.google.common.truth.Truth.assertThat
@@ -36,40 +39,101 @@
         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
                     interface MySdk {
                       fun doSomething(magicNumber: Int, awesomeString: String)
-                      suspend fun returnMagicNumber(): Int
+                      suspend fun getPayload(request: PayloadRequest): PayloadResponse
+                    }
+                    @PrivacySandboxValue
+                    data class PayloadType(val size: Long, val appId: String)
+                    @PrivacySandboxValue
+                    data class PayloadResponse(val url: String)
+                    @PrivacySandboxValue
+                    data class PayloadRequest(val type: PayloadType)
+                    @PrivacySandboxCallback
+                    interface CustomCallback {
+                      fun onComplete(status: Int)
                     }
                 """
         )
 
-        assertThat(compileAndParseApi(source))
-            .containsExactly(
-                AnnotatedInterface(
-                    type = Type(packageName = "com.mysdk", simpleName = "MySdk"), methods = listOf(
-                        Method(
-                            name = "doSomething",
-                            parameters = listOf(
-                                Parameter(
-                                    "magicNumber",
-                                    Types.int
-                                ),
-                                Parameter("awesomeString", Types.string)
+        val expectedPayloadType = AnnotatedValue(
+            type = Type("com.mysdk", "PayloadType"),
+            properties = listOf(
+                ValueProperty("appId", Types.string),
+                ValueProperty("size", Types.long),
+            )
+        )
+        val expectedPayloadRequest = AnnotatedValue(
+            type = Type("com.mysdk", "PayloadRequest"),
+            properties = listOf(
+                ValueProperty("type", expectedPayloadType.type),
+            )
+        )
+        val expectedPayloadResponse = AnnotatedValue(
+            type = Type("com.mysdk", "PayloadResponse"),
+            properties = listOf(
+                ValueProperty("url", Types.string),
+            )
+        )
+        val expectedService =
+            AnnotatedInterface(
+                type = Type(packageName = "com.mysdk", simpleName = "MySdk"),
+                methods = listOf(
+                    Method(
+                        name = "doSomething",
+                        parameters = listOf(
+                            Parameter(
+                                "magicNumber",
+                                Types.int
                             ),
-                            returnType = Types.unit,
-                            isSuspend = false,
+                            Parameter("awesomeString", Types.string)
                         ),
-                        Method(
-                            name = "returnMagicNumber",
-                            parameters = listOf(),
-                            returnType = Types.int,
-                            isSuspend = true,
-                        )
+                        returnType = Types.unit,
+                        isSuspend = false,
+                    ),
+                    Method(
+                        name = "getPayload",
+                        parameters = listOf(
+                            Parameter(
+                                "request",
+                                expectedPayloadRequest.type
+                            )
+                        ),
+                        returnType = expectedPayloadResponse.type,
+                        isSuspend = true,
                     )
                 )
             )
+
+        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(
+            expectedPayloadType,
+            expectedPayloadRequest,
+            expectedPayloadResponse,
+        )
+        assertThat(actualApi.callbacks).containsExactly(expectedCallback)
     }
 
     @Test
@@ -98,7 +162,7 @@
                     class NonAnnotatedJavaClass {}
                 """
             )
-        )
+        ).services
 
         assertThat(interfaces).containsExactly(
             AnnotatedInterface(
@@ -120,7 +184,7 @@
                 """
         )
 
-        assertThat(compileAndParseApi(source)).containsExactly(
+        assertThat(compileAndParseApi(source).services).containsExactly(
             AnnotatedInterface(
                 Type(
                     packageName = "",
@@ -149,7 +213,7 @@
     }
 
     @Test
-    fun annotatedKotlinClass_throws() {
+    fun kotlinClassAnnotatedAsService_throws() {
         val source = Source.kotlin(
             "com/mysdk/TestSandboxSdk.kt", """
                     package com.mysdk
@@ -168,6 +232,72 @@
     }
 
     @Test
+    fun nonDataClassAnnotatedAsValue_throws() {
+        val source = Source.kotlin(
+            "com/mysdk/TestSandboxSdk.kt", """
+                    package com.mysdk
+                    import androidx.privacysandbox.tools.PrivacySandboxService
+                    import androidx.privacysandbox.tools.PrivacySandboxValue
+                    @PrivacySandboxService
+                    interface MySdk
+                    @PrivacySandboxValue
+                    class Value
+                """
+        )
+
+        assertThrows<PrivacySandboxParsingException> {
+            compileAndParseApi(source)
+        }.hasMessageThat().contains(
+            "com.mysdk.Value is not a Kotlin data class but it's annotated with " +
+                "@PrivacySandboxValue"
+        )
+    }
+
+    @Test
+    fun interfaceAnnotatedAsValue_throws() {
+        val source = Source.kotlin(
+            "com/mysdk/TestSandboxSdk.kt", """
+                    package com.mysdk
+                    import androidx.privacysandbox.tools.PrivacySandboxService
+                    import androidx.privacysandbox.tools.PrivacySandboxValue
+                    @PrivacySandboxService
+                    interface MySdk
+                    @PrivacySandboxValue
+                    interface Value
+                """
+        )
+
+        assertThrows<PrivacySandboxParsingException> {
+            compileAndParseApi(source)
+        }.hasMessageThat().contains(
+            "com.mysdk.Value is not a Kotlin data class but it's annotated with " +
+                "@PrivacySandboxValue"
+        )
+    }
+
+    @Test
+    fun valueWithMutableProperties_throws() {
+        val source = Source.kotlin(
+            "com/mysdk/TestSandboxSdk.kt", """
+                    package com.mysdk
+                    import androidx.privacysandbox.tools.PrivacySandboxService
+                    import androidx.privacysandbox.tools.PrivacySandboxValue
+                    @PrivacySandboxService
+                    interface MySdk
+                    @PrivacySandboxValue
+                    data class Value(var message: String)
+                """
+        )
+
+        assertThrows<PrivacySandboxParsingException> {
+            compileAndParseApi(source)
+        }.hasMessageThat().contains(
+            "Error in com.mysdk.Value.message: mutable properties are not allowed in data " +
+                "classes annotated with @PrivacySandboxValue."
+        )
+    }
+
+    @Test
     fun annotatedKotlinInnerInterface_throws() {
         val source = Source.kotlin(
             "com/mysdk/OuterMySdk.kt", """
@@ -183,8 +313,8 @@
         assertThrows<PrivacySandboxParsingException> {
             compileAndParseApi(source)
         }.hasMessageThat().contains(
-            "com.mysdk.OuterMySdk.InnerMySdk is an inner interface so it can't be annotated with " +
-                "@PrivacySandboxService"
+            "Error in com.mysdk.OuterMySdk.InnerMySdk: Inner types are not supported in API " +
+                "definitions"
         )
     }
 
@@ -204,8 +334,8 @@
         )
     }
 
-    private fun compileAndParseApi(vararg sources: Source): Set<AnnotatedInterface> {
+    private fun compileAndParseApi(vararg sources: Source): ParsedApi {
         compileIntoInterfaceDescriptorsJar(*sources)
-        return ApiStubParser.parse(compileIntoInterfaceDescriptorsJar(*sources)).services
+        return ApiStubParser.parse(compileIntoInterfaceDescriptorsJar(*sources))
     }
 }
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-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 6561f0f..08f47b9 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
@@ -44,6 +44,7 @@
     }
 
     private val valueMap = api.values.associateBy { it.type }
+    private val callbackMap = api.callbacks.associateBy { it.type }
 
     companion object {
         fun generate(
@@ -94,13 +95,20 @@
     private fun generateAidlContent(): List<AidlFileSpec> {
         val values = api.values.map(::generateValue)
         val transactionCallbacks = generateTransactionCallbacks()
-        val service =
-            aidlInterface(Type(packageName(), api.getOnlyService().aidlName()), oneway = false) {
-                api.getOnlyService().methods.forEach { addMethod(it) }
-            }
-        return transactionCallbacks + generateICancellationSignal() + service + values
+        val service = aidlInterface(api.getOnlyService())
+        val customCallbacks = api.callbacks.map(::aidlInterface)
+        return transactionCallbacks +
+            generateICancellationSignal() +
+            service +
+            values +
+            customCallbacks
     }
 
+    private fun aidlInterface(annotatedInterface: AnnotatedInterface) =
+        aidlInterface(Type(annotatedInterface.type.packageName, annotatedInterface.aidlName())) {
+            annotatedInterface.methods.forEach { addMethod(it) }
+        }
+
     private fun AidlInterfaceSpec.Builder.addMethod(method: Method) {
         addMethod(method.name) {
             method.parameters.forEach { addParameter(it) }
@@ -176,6 +184,7 @@
 
     private fun getAidlTypeDeclaration(type: Type): AidlTypeSpec {
         valueMap[type]?.let { return it.aidlType() }
+        callbackMap[type]?.let { return it.aidlType() }
         return when (type.qualifiedName) {
             Boolean::class.qualifiedName -> primitive("boolean")
             Int::class.qualifiedName -> primitive("int")
@@ -212,4 +221,6 @@
 internal fun AnnotatedValue.aidlType() =
     AidlTypeSpec(Type(type.packageName, "Parcelable${type.simpleName}"))
 
+internal fun AnnotatedInterface.aidlType() = AidlTypeSpec(Type(type.packageName, aidlName()))
+
 internal fun primitive(name: String) = AidlTypeSpec(Type("", name), requiresImport = false)
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..afd5075 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
@@ -83,6 +83,11 @@
     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() })
 }
@@ -98,6 +103,13 @@
     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»")
+}
+
 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/poet/AidlInterfaceSpec.kt b/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/poet/AidlInterfaceSpec.kt
index 7ea20e9..81ced87 100644
--- a/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/poet/AidlInterfaceSpec.kt
+++ b/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/poet/AidlInterfaceSpec.kt
@@ -22,15 +22,13 @@
 internal data class AidlInterfaceSpec(
     override val type: Type,
     val methods: List<AidlMethodSpec>,
-    val oneway: Boolean = true,
 ) : AidlFileSpec {
     companion object {
         fun aidlInterface(
             type: Type,
-            oneway: Boolean = true,
             block: Builder.() -> Unit = {}
         ): AidlInterfaceSpec {
-            return Builder(type, oneway).also(block).build()
+            return Builder(type).also(block).build()
         }
     }
 
@@ -43,16 +41,15 @@
 
     override val innerContent: String
         get() {
-            val modifiers = if (oneway) "oneway " else ""
             val body = methods.map { it.toString() }.sorted().joinToString("\n|    ")
             return """
-                |${modifiers}interface ${type.simpleName} {
+                |oneway interface ${type.simpleName} {
                 |    $body
                 |}
             """.trimMargin()
         }
 
-    class Builder(val type: Type, val oneway: Boolean = true) {
+    class Builder(val type: Type) {
         val methods = mutableListOf<AidlMethodSpec>()
 
         fun addMethod(method: AidlMethodSpec) {
@@ -63,6 +60,6 @@
             addMethod(AidlMethodSpec.Builder(name).also(block).build())
         }
 
-        fun build() = AidlInterfaceSpec(type, methods, oneway)
+        fun build() = AidlInterfaceSpec(type, methods)
     }
 }
\ No newline at end of file
diff --git a/privacysandbox/tools/tools-core/src/test/java/androidx/privacysandbox/tools/core/generator/AidlCallbackGeneratorTest.kt b/privacysandbox/tools/tools-core/src/test/java/androidx/privacysandbox/tools/core/generator/AidlCallbackGeneratorTest.kt
new file mode 100644
index 0000000..69e30b3
--- /dev/null
+++ b/privacysandbox/tools/tools-core/src/test/java/androidx/privacysandbox/tools/core/generator/AidlCallbackGeneratorTest.kt
@@ -0,0 +1,85 @@
+/*
+ * 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.AnnotatedInterface
+import androidx.privacysandbox.tools.core.model.Method
+import androidx.privacysandbox.tools.core.model.Parameter
+import androidx.privacysandbox.tools.core.model.ParsedApi
+import androidx.privacysandbox.tools.core.model.Type
+import androidx.privacysandbox.tools.core.model.Types
+import androidx.privacysandbox.tools.testing.loadFilesFromDirectory
+import com.google.common.truth.Truth
+import java.io.File
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+@RunWith(JUnit4::class)
+class AidlCallbackGeneratorTest {
+
+    @Test
+    fun generate() {
+        val api = ParsedApi(
+            services = setOf(
+                AnnotatedInterface(
+                    type = Type(packageName = "com.mysdk", simpleName = "MySdk"),
+                    methods = listOf(
+                        Method(
+                            name = "doStuff",
+                            parameters = listOf(
+                                Parameter(
+                                    "callback", Type("com.mysdk", "MyCallback")
+                                )
+                            ),
+                            returnType = Types.unit,
+                            isSuspend = false,
+                        ),
+                    )
+                )
+            ), callbacks = setOf(
+                AnnotatedInterface(
+                    type = Type(packageName = "com.mysdk", simpleName = "MyCallback"),
+                    methods = listOf(
+                        Method(
+                            name = "onComplete",
+                            parameters = listOf(
+                                Parameter("result", Types.boolean),
+                            ),
+                            returnType = Types.unit,
+                            isSuspend = false,
+                        )
+                    )
+                )
+            )
+        )
+
+        val (aidlGeneratedSources, javaGeneratedSources) = AidlTestHelper.runGenerator(api)
+        Truth.assertThat(javaGeneratedSources.map { it.packageName to it.interfaceName })
+            .containsExactly(
+                "com.mysdk" to "IMySdk",
+                "com.mysdk" to "IMyCallback",
+                "com.mysdk" to "ICancellationSignal",
+            )
+
+        val outputTestDataDir = File("src/test/test-data/aidlcallbackgeneratortest/output")
+        val expectedSources = loadFilesFromDirectory(outputTestDataDir)
+
+        Truth.assertThat(aidlGeneratedSources.map { it.relativePath to it.content })
+            .containsExactlyElementsIn(expectedSources)
+    }
+}
\ No newline at end of file
diff --git a/privacysandbox/tools/tools-core/src/test/test-data/aidlcallbackgeneratortest/output/com/mysdk/ICancellationSignal.aidl b/privacysandbox/tools/tools-core/src/test/test-data/aidlcallbackgeneratortest/output/com/mysdk/ICancellationSignal.aidl
new file mode 100644
index 0000000..e336980
--- /dev/null
+++ b/privacysandbox/tools/tools-core/src/test/test-data/aidlcallbackgeneratortest/output/com/mysdk/ICancellationSignal.aidl
@@ -0,0 +1,5 @@
+package com.mysdk;
+
+oneway interface ICancellationSignal {
+    void cancel();
+}
\ No newline at end of file
diff --git a/privacysandbox/tools/tools-core/src/test/test-data/aidlcallbackgeneratortest/output/com/mysdk/IMyCallback.aidl b/privacysandbox/tools/tools-core/src/test/test-data/aidlcallbackgeneratortest/output/com/mysdk/IMyCallback.aidl
new file mode 100644
index 0000000..b8695d1
--- /dev/null
+++ b/privacysandbox/tools/tools-core/src/test/test-data/aidlcallbackgeneratortest/output/com/mysdk/IMyCallback.aidl
@@ -0,0 +1,5 @@
+package com.mysdk;
+
+oneway interface IMyCallback {
+    void onComplete(boolean result);
+}
\ No newline at end of file
diff --git a/privacysandbox/tools/tools-core/src/test/test-data/aidlcallbackgeneratortest/output/com/mysdk/IMySdk.aidl b/privacysandbox/tools/tools-core/src/test/test-data/aidlcallbackgeneratortest/output/com/mysdk/IMySdk.aidl
new file mode 100644
index 0000000..f8290e6
--- /dev/null
+++ b/privacysandbox/tools/tools-core/src/test/test-data/aidlcallbackgeneratortest/output/com/mysdk/IMySdk.aidl
@@ -0,0 +1,7 @@
+package com.mysdk;
+
+import com.mysdk.IMyCallback;
+
+oneway interface IMySdk {
+    void doStuff(IMyCallback callback);
+}
\ No newline at end of file
diff --git a/privacysandbox/tools/tools-core/src/test/test-data/aidlservicegeneratortest/output/com/mysdk/IMySdk.aidl b/privacysandbox/tools/tools-core/src/test/test-data/aidlservicegeneratortest/output/com/mysdk/IMySdk.aidl
index 7969d51..61d5f7f 100644
--- a/privacysandbox/tools/tools-core/src/test/test-data/aidlservicegeneratortest/output/com/mysdk/IMySdk.aidl
+++ b/privacysandbox/tools/tools-core/src/test/test-data/aidlservicegeneratortest/output/com/mysdk/IMySdk.aidl
@@ -3,7 +3,7 @@
 import com.mysdk.IStringTransactionCallback;
 import com.mysdk.IUnitTransactionCallback;
 
-interface IMySdk {
+oneway interface IMySdk {
     void methodWithoutReturnValue();
     void suspendMethodWithReturnValue(boolean a, int b, long c, float d, double e, char f, int g, IStringTransactionCallback transactionCallback);
     void suspendMethodWithoutReturnValue(IUnitTransactionCallback transactionCallback);
diff --git a/privacysandbox/tools/tools-core/src/test/test-data/aidlvaluegeneratortest/output/com/mysdk/IMySdk.aidl b/privacysandbox/tools/tools-core/src/test/test-data/aidlvaluegeneratortest/output/com/mysdk/IMySdk.aidl
index 3f3e4b5..15b63d6 100644
--- a/privacysandbox/tools/tools-core/src/test/test-data/aidlvaluegeneratortest/output/com/mysdk/IMySdk.aidl
+++ b/privacysandbox/tools/tools-core/src/test/test-data/aidlvaluegeneratortest/output/com/mysdk/IMySdk.aidl
@@ -4,7 +4,7 @@
 import com.mysdk.IUnitTransactionCallback;
 import com.mysdk.ParcelableOuterValue;
 
-interface IMySdk {
+oneway interface IMySdk {
     void methodReceivingValue(in ParcelableOuterValue value);
     void suspendMethodReceivingValue(in ParcelableOuterValue inputValue, IUnitTransactionCallback transactionCallback);
     void suspendMethodThatReturnsValue(IOuterValueTransactionCallback transactionCallback);
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/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/LinearLayoutManagerMeasureAnchorTest.kt b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/LinearLayoutManagerMeasureAnchorTest.kt
deleted file mode 100644
index 0fca345..0000000
--- a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/LinearLayoutManagerMeasureAnchorTest.kt
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * 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.recyclerview.widget
-
-import android.content.Context
-import android.view.View
-import android.view.ViewGroup
-import androidx.test.core.app.ApplicationProvider
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import androidx.test.filters.SmallTest
-import com.google.common.truth.Truth.assertThat
-import org.junit.Test
-import org.junit.runner.RunWith
-import java.lang.IllegalArgumentException
-
-@RunWith(AndroidJUnit4::class)
-@SmallTest
-public class LinearLayoutManagerMeasureAnchorTest {
-
-    @Test
-    public fun testStackFromEndVertical() {
-        test(true, false, true)
-    }
-
-    @Test
-    public fun testReverseLayoutVertical() {
-        test(false, true, true)
-    }
-
-    @Test
-    public fun testStackFromEndHorizontal() {
-        test(true, false, false)
-    }
-
-    @Test
-    public fun testReverseLayoutHorizontal() {
-        test(false, true, false)
-    }
-
-    public fun test(reverseLayout: Boolean, stackFromEnd: Boolean, vertical: Boolean) {
-
-        if (!(reverseLayout xor stackFromEnd)) {
-            throw IllegalArgumentException("Must be reverseLayout xor stackFromEnd")
-        }
-
-        // Arrange
-
-        val context = ApplicationProvider.getApplicationContext<Context>()
-        val recyclerView = RecyclerView(context)
-        val orientation = if (vertical) RecyclerView.VERTICAL else RecyclerView.HORIZONTAL
-        recyclerView.layoutManager =
-            LinearLayoutManager(context, orientation, reverseLayout).apply {
-                this.stackFromEnd = stackFromEnd
-            }
-        recyclerView.adapter = TestAdapter(context, vertical)
-
-        // Act
-
-        recyclerView.measure(
-            View.MeasureSpec.makeMeasureSpec(200, View.MeasureSpec.AT_MOST),
-            View.MeasureSpec.makeMeasureSpec(200, View.MeasureSpec.AT_MOST)
-        )
-        recyclerView.measure(
-            View.MeasureSpec.makeMeasureSpec(100, View.MeasureSpec.AT_MOST),
-            View.MeasureSpec.makeMeasureSpec(100, View.MeasureSpec.AT_MOST)
-        )
-        recyclerView.layout(0, 0, 100, 100)
-
-        // Assert
-
-        val view: View? =
-            (0 until recyclerView.childCount)
-                .map { recyclerView.getChildAt(it) }
-                .find { it.tag == if (reverseLayout) 0 else 9 }
-
-        assertThat(view).isNotNull()
-        if (vertical) {
-            assertThat(view!!.top).isEqualTo(0)
-        } else {
-            assertThat(view!!.left).isEqualTo(0)
-        }
-    }
-
-    internal class TestAdapter(val context: Context, val vertical: Boolean) :
-        RecyclerView.Adapter<TestViewHolder>() {
-
-        override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TestViewHolder {
-            val view = View(context)
-            view.layoutParams = if (vertical) {
-                ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 100)
-            } else {
-                ViewGroup.LayoutParams(100, ViewGroup.LayoutParams.MATCH_PARENT)
-            }
-            return TestViewHolder(view)
-        }
-
-        override fun onBindViewHolder(holder: TestViewHolder, position: Int) {
-            holder.itemView.tag = position
-        }
-
-        override fun getItemCount(): Int {
-            return 10
-        }
-    }
-
-    internal class TestViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
-}
\ No newline at end of file
diff --git a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/RecyclerViewPreviousMeasuredDimensionsTest.kt b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/RecyclerViewPreviousMeasuredDimensionsTest.kt
deleted file mode 100644
index 3b42020..0000000
--- a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/RecyclerViewPreviousMeasuredDimensionsTest.kt
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * 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.recyclerview.widget
-
-import android.content.Context
-import android.view.View
-import android.view.View.MeasureSpec.UNSPECIFIED
-import android.view.View.MeasureSpec.AT_MOST
-import android.view.View.MeasureSpec.EXACTLY
-import android.view.ViewGroup
-import androidx.test.core.app.ApplicationProvider
-import androidx.test.filters.SmallTest
-import com.google.common.truth.Truth.assertThat
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.Parameterized
-
-@RunWith(Parameterized::class)
-@SmallTest
-public class RecyclerViewPreviousMeasuredDimensionsTest(
-    private val firstWidthMode: Int,
-    private val firstHeightMode: Int,
-    private val secondWidthMode: Int,
-    private val secondHeightMode: Int
-) {
-
-    public companion object {
-        @JvmStatic
-        @Parameterized.Parameters(
-            name = "firstWidthMode={0}, firstHeightMode={1}, " +
-                "secondWidthMode={2}, secondHeightMode={3}"
-        )
-        public fun data(): Collection<Array<Int>> {
-            val widthModes = listOf(
-                UNSPECIFIED,
-                EXACTLY,
-                AT_MOST
-            )
-
-            val data = ArrayList<Array<Int>>()
-            for (firstWidthMode in widthModes) {
-                for (firstHeightMode in widthModes) {
-                    for (secondWidthMode in widthModes) {
-                        for (secondHeightMode in widthModes) {
-                            data.add(
-                                listOf(
-                                    firstWidthMode,
-                                    firstHeightMode,
-                                    secondWidthMode,
-                                    secondHeightMode
-                                ).toTypedArray()
-                            )
-                        }
-                    }
-                }
-            }
-            return data
-        }
-    }
-
-    @Test
-    public fun previousMeasuredDimensionTest() {
-
-        // Arrange
-
-        val context = ApplicationProvider.getApplicationContext<Context>()
-        val recyclerView = RecyclerView(context)
-        recyclerView.layoutManager =
-            LinearLayoutManager(context).apply {
-                this.stackFromEnd = stackFromEnd
-            }
-        recyclerView.adapter = TestAdapter(context)
-
-        // Assert 0
-
-        assertThat(recyclerView.mState.previousMeasuredWidth).isEqualTo(0)
-        assertThat(recyclerView.mState.previousMeasuredHeight).isEqualTo(0)
-
-        // Act 1
-
-        recyclerView.measure(
-            View.MeasureSpec.makeMeasureSpec(100, firstWidthMode),
-            View.MeasureSpec.makeMeasureSpec(100, firstHeightMode)
-        )
-
-        // Assert 1
-
-        val expectedPreviousWidth1 = if (firstWidthMode == UNSPECIFIED) 300 else 100
-        val expectedPreviousHeight1 = if (firstHeightMode == UNSPECIFIED) 300 else 100
-        assertThat(recyclerView.mState.previousMeasuredWidth).isEqualTo(expectedPreviousWidth1)
-        assertThat(recyclerView.mState.previousMeasuredHeight).isEqualTo(expectedPreviousHeight1)
-
-        // Act 2
-
-        recyclerView.measure(
-            View.MeasureSpec.makeMeasureSpec(200, secondWidthMode),
-            View.MeasureSpec.makeMeasureSpec(200, secondHeightMode)
-        )
-
-        // Assert 2
-
-        val expectedPreviousWidth2 = if (secondWidthMode == UNSPECIFIED) 300 else 200
-        val expectedPreviousHeight2 = if (secondHeightMode == UNSPECIFIED) 300 else 200
-        assertThat(recyclerView.mState.previousMeasuredWidth).isEqualTo(expectedPreviousWidth2)
-        assertThat(recyclerView.mState.previousMeasuredHeight).isEqualTo(expectedPreviousHeight2)
-
-        // Act 3, layout should not have any affect on previous measured values.
-
-        recyclerView.layout(0, 0, 500, 500)
-
-        // Assert 3
-
-        assertThat(recyclerView.mState.previousMeasuredWidth).isEqualTo(expectedPreviousWidth2)
-        assertThat(recyclerView.mState.previousMeasuredHeight).isEqualTo(expectedPreviousHeight2)
-    }
-
-    internal class TestAdapter(val context: Context) :
-        RecyclerView.Adapter<TestViewHolder>() {
-
-        override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TestViewHolder {
-            val view = View(context)
-            view.layoutParams = ViewGroup.LayoutParams(300, 300)
-            return TestViewHolder(view)
-        }
-
-        override fun onBindViewHolder(holder: TestViewHolder, position: Int) {
-            holder.itemView.tag = position
-        }
-
-        override fun getItemCount(): Int {
-            return 1
-        }
-    }
-
-    internal class TestViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
-}
\ No newline at end of file
diff --git a/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java b/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java
index c7b7852..9cf5e62 100644
--- a/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java
+++ b/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java
@@ -595,26 +595,11 @@
         // resolve layout direction
         resolveShouldLayoutReverse();
 
-        boolean layoutFromEnd = mShouldReverseLayout ^ mStackFromEnd;
-
-        // The 2 booleans below are necessary because if we are laying out from the end, and the
-        // previous measured dimension is different from the new measured value, then any
-        // previously calculated anchor will be incorrect.
-        boolean reCalcAnchorDueToVertical = layoutFromEnd
-                && getOrientation() == RecyclerView.VERTICAL
-                && state.getPreviousMeasuredHeight() != getHeight();
-        boolean reCalcAnchorDueToHorizontal = layoutFromEnd
-                && getOrientation() == RecyclerView.HORIZONTAL
-                && state.getPreviousMeasuredWidth() != getWidth();
-
-        boolean reCalcAnchor = reCalcAnchorDueToVertical || reCalcAnchorDueToHorizontal
-                || mPendingScrollPosition != RecyclerView.NO_POSITION || mPendingSavedState != null;
-
         final View focused = getFocusedChild();
-
-        if (!mAnchorInfo.mValid || reCalcAnchor) {
+        if (!mAnchorInfo.mValid || mPendingScrollPosition != RecyclerView.NO_POSITION
+                || mPendingSavedState != null) {
             mAnchorInfo.reset();
-            mAnchorInfo.mLayoutFromEnd = layoutFromEnd;
+            mAnchorInfo.mLayoutFromEnd = mShouldReverseLayout ^ mStackFromEnd;
             // calculate anchor position and coordinate
             updateAnchorInfoForLayout(recycler, state, mAnchorInfo);
             mAnchorInfo.mValid = true;
@@ -753,7 +738,7 @@
             // because layout from end may be changed by scroll to position
             // we re-calculate it.
             // find which side we should check for gaps.
-            if (layoutFromEnd) {
+            if (mShouldReverseLayout ^ mStackFromEnd) {
                 int fixOffset = fixLayoutEndGap(endOffset, recycler, state, true);
                 startOffset += fixOffset;
                 endOffset += fixOffset;
diff --git a/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/RecyclerView.java b/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/RecyclerView.java
index 10bbb35..a5d3238 100644
--- a/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/RecyclerView.java
+++ b/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/RecyclerView.java
@@ -3946,12 +3946,6 @@
 
     @Override
     protected void onMeasure(int widthSpec, int heightSpec) {
-        internalOnMeasure(widthSpec, heightSpec);
-        mState.mPreviousMeasuredWidth = this.getMeasuredWidth();
-        mState.mPreviousMeasuredHeight = this.getMeasuredHeight();
-    }
-
-    private void internalOnMeasure(int widthSpec, int heightSpec) {
         if (mLayout == null) {
             defaultOnMeasure(widthSpec, heightSpec);
             return;
@@ -13314,42 +13308,6 @@
         boolean mRunPredictiveAnimations = false;
 
         /**
-         * The values in these fields reflect the values passed to
-         * {@link RecyclerView#setMeasuredDimension(int, int)} and are set just before
-         * {@link RecyclerView#onMeasure(int, int)} is completed. They are intended to be used to
-         * during onMeasure(int, int) to know how the RecyclerView was measured during previous
-         * calls to onMeasure(int, int).
-         */
-        int mPreviousMeasuredWidth = 0;
-        int mPreviousMeasuredHeight = 0;
-
-        // TODO(b/181991552): Make this public after 1.2.0 stable.
-        /**
-         * Returns the previously measured width of the {@link RecyclerView} that was most
-         * recently set via {@link RecyclerView#setMeasuredDimension(int, int)} during the most
-         * recent call to {@link RecyclerView#onMeasure(int, int)}. This is intended to be used
-         * during {@link LayoutManager#onLayoutChildren(Recycler, State)} when
-         * {@link State#isMeasuring()} is {@code true} in order to understand how the current
-         * measure specs compare to the result of any previous measurement.
-         */
-        int getPreviousMeasuredWidth() {
-            return mPreviousMeasuredWidth;
-        }
-
-        // TODO(b/181991552): Make this public after 1.2.0 stable.
-        /**
-         * Returns the previously measured height of the {@link RecyclerView} that was most
-         * recently set via {@link RecyclerView#setMeasuredDimension(int, int)} during the most
-         * recent call to {@link RecyclerView#onMeasure(int, int)}. This is intended to be used
-         * during {@link LayoutManager#onLayoutChildren(Recycler, State)} when
-         * {@link State#isMeasuring()} is {@code true} in order to understand how the current
-         * measure specs compare to the result of any previous measurement.
-         */
-        int getPreviousMeasuredHeight() {
-            return mPreviousMeasuredHeight;
-        }
-
-        /**
          * This data is saved before a layout calculation happens. After the layout is finished,
          * if the previously focused view has been replaced with another view for the same item, we
          * move the focus to the new item automatically.
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/integration-tests/incremental-annotation-processing/src/test/kotlin/androidx/room/gradle/RoomIncrementalAnnotationProcessingTest.kt b/room/integration-tests/incremental-annotation-processing/src/test/kotlin/androidx/room/gradle/RoomIncrementalAnnotationProcessingTest.kt
index 54de55f..a3dd7ef 100644
--- a/room/integration-tests/incremental-annotation-processing/src/test/kotlin/androidx/room/gradle/RoomIncrementalAnnotationProcessingTest.kt
+++ b/room/integration-tests/incremental-annotation-processing/src/test/kotlin/androidx/room/gradle/RoomIncrementalAnnotationProcessingTest.kt
@@ -228,6 +228,7 @@
             }
 
             android {
+                namespace "room.testapp"
                 defaultConfig {
                     javaCompileOptions {
                         annotationProcessorOptions {
diff --git a/room/integration-tests/incremental-annotation-processing/src/test/test-data/simple-project/src/main/AndroidManifest.xml b/room/integration-tests/incremental-annotation-processing/src/test/test-data/simple-project/src/main/AndroidManifest.xml
index ab0f664..809c0d9 100644
--- a/room/integration-tests/incremental-annotation-processing/src/test/test-data/simple-project/src/main/AndroidManifest.xml
+++ b/room/integration-tests/incremental-annotation-processing/src/test/test-data/simple-project/src/main/AndroidManifest.xml
@@ -14,6 +14,4 @@
   See the License for the specific language governing permissions and
   limitations under the License.
   -->
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="room.testapp">
-</manifest>
\ No newline at end of file
+<manifest/>
\ No newline at end of file
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/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 bf5bfdc..4787773 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -674,6 +674,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])
diff --git a/test/uiautomator/integration-tests/testapp/src/androidTest/java/androidx/test/uiautomator/testapp/UiDeviceTest.java b/test/uiautomator/integration-tests/testapp/src/androidTest/java/androidx/test/uiautomator/testapp/UiDeviceTest.java
index 8562b5cf..ec2bad0 100644
--- a/test/uiautomator/integration-tests/testapp/src/androidTest/java/androidx/test/uiautomator/testapp/UiDeviceTest.java
+++ b/test/uiautomator/integration-tests/testapp/src/androidTest/java/androidx/test/uiautomator/testapp/UiDeviceTest.java
@@ -420,18 +420,28 @@
         validateMainActivityXml(xml);
     }
 
-    /* TODO(b/235841020): Implement these tests, and the tests for exceptions of each tested method.
+    @Test
+    public void testWaitForWindowUpdate() {
+        launchTestActivity(WaitTestActivity.class);
 
-    public void testWaitForWindowUpdate() {}
+        // Returns false when the current window doesn't have the specified package name.
+        assertFalse(mDevice.waitForWindowUpdate("non-existent package name", 1_000));
 
-    public void testTakeScreenshot() {} // already added
+        UiObject2 text1 = mDevice.findObject(By.res(TEST_APP, "text_1"));
 
-    public void testTakeScreenshot_withScaleAndQuality() {} // already added
+        // Returns true when change happens in the current window within the timeout.
+        text1.click();
+        assertTrue(mDevice.waitForWindowUpdate(PACKAGE_NAME, 5_000));
 
-    public void testGetLauncherPackageName() {}
+        // Returns false when no change happens in the current window within the timeout.
+        text1.click();
+        assertFalse(mDevice.waitForWindowUpdate(PACKAGE_NAME, 1_000));
+    }
 
-    public void testExecuteShellCommand() {} // already added
-    */
+    @Test
+    public void testGetLauncherPackageName() {
+        assertTrue(mDevice.wait(Until.hasObject(By.pkg(mDevice.getLauncherPackageName())), 5_000));
+    }
 
     private static void validateMainActivityXml(Document xml) throws Exception {
         Element element = (Element) XPathFactory.newInstance().newXPath()
diff --git a/test/uiautomator/integration-tests/testapp/src/main/AndroidManifest.xml b/test/uiautomator/integration-tests/testapp/src/main/AndroidManifest.xml
index b5eca98..e5d08a1 100644
--- a/test/uiautomator/integration-tests/testapp/src/main/AndroidManifest.xml
+++ b/test/uiautomator/integration-tests/testapp/src/main/AndroidManifest.xml
@@ -20,6 +20,13 @@
 
     <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
 
+    <queries>
+        <intent>
+            <action android:name="android.intent.action.MAIN" />
+            <category android:name="android.intent.category.HOME"/>
+        </intent>
+    </queries>
+
     <application android:label="UiAutomator Test App">
         <activity android:name=".MainActivity"
             android:exported="true"
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..adda866
--- /dev/null
+++ b/wear/watchface/watchface-data/src/main/java/android/support/wearable/watchface/ParcelableWrapper.kt
@@ -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 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 private constructor(
+    private val parcel: Parcel? = null,
+    private val parcelable: Parcelable? = null
+) : Parcelable {
+
+    constructor(parcelable: Parcelable) : this(null, parcelable)
+
+    constructor(parcel: Parcel) : this(parcel, null)
+
+    fun getParcel(): Parcel {
+        if (parcel != null) {
+            return parcel
+        }
+
+        // This is a hack to support unit tests, where writeToParcel/CREATOR are not invoked.
+        return Parcel.obtain().apply {
+            parcelable!!.writeToParcel(this, 0)
+            setDataPosition(0)
+        }
+    }
+
+    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)
+            }
+    }
+}
\ 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)
     }
 }