Merge "Revert "Lint check that experimental annotations are correctly applied to Kotlin properties"" into androidx-main
diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
index d807d6e..2ca2d60 100644
--- a/.idea/codeStyles/Project.xml
+++ b/.idea/codeStyles/Project.xml
@@ -68,16 +68,11 @@
       <option name="JD_PRESERVE_LINE_FEEDS" value="true" />
     </JavaCodeStyleSettings>
     <JetCodeStyleSettings>
-      <option name="PACKAGES_TO_USE_STAR_IMPORTS">
-        <value />
-      </option>
       <option name="PACKAGES_IMPORT_LAYOUT">
         <value>
           <package name="" alias="false" withSubpackages="true" />
         </value>
       </option>
-      <option name="NAME_COUNT_TO_USE_STAR_IMPORT" value="2147483647" />
-      <option name="NAME_COUNT_TO_USE_STAR_IMPORT_FOR_MEMBERS" value="2147483647" />
       <option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
     </JetCodeStyleSettings>
     <codeStyleSettings language="JAVA">
diff --git a/appcompat/appcompat/build.gradle b/appcompat/appcompat/build.gradle
index 9f9197e..6b454fa 100644
--- a/appcompat/appcompat/build.gradle
+++ b/appcompat/appcompat/build.gradle
@@ -54,7 +54,7 @@
         exclude group: "androidx.appcompat", module: "appcompat"
         exclude group: "androidx.core", module: "core"
     })
-    androidTestImplementation(project(":recyclerview:recyclerview"))
+    androidTestImplementation(projectOrArtifact(":recyclerview:recyclerview"))
     androidTestImplementation(libs.multidex)
 
     testImplementation(libs.kotlinStdlib)
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/ToolbarMenuHostTest.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/ToolbarMenuHostTest.kt
index 317fcc3..547bc7c 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/ToolbarMenuHostTest.kt
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/ToolbarMenuHostTest.kt
@@ -16,6 +16,7 @@
 
 package androidx.appcompat.widget
 
+import android.os.Build
 import android.view.Menu
 import android.view.MenuInflater
 import android.view.MenuItem
@@ -28,8 +29,8 @@
 import androidx.test.espresso.action.ViewActions.click
 import androidx.test.espresso.matcher.ViewMatchers.withText
 import androidx.test.ext.junit.runners.AndroidJUnit4
-import androidx.test.filters.FlakyTest
 import androidx.test.filters.LargeTest
+import androidx.test.filters.SdkSuppress
 import androidx.test.platform.app.InstrumentationRegistry
 import androidx.testutils.PollingCheck
 import androidx.testutils.withActivity
@@ -65,6 +66,7 @@
     }
 
     // Ensure original functionality still works
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.N)
     @Test
     fun manuallyInflatedMenuItemSelected() {
         with(ActivityScenario.launch(ToolbarTestActivity::class.java)) {
@@ -126,8 +128,8 @@
         }
     }
 
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.N)
     @Test
-    @FlakyTest(bugId = 238664379)
     fun providedMenuItemSelected() {
         with(ActivityScenario.launch(ToolbarTestActivity::class.java)) {
             var itemSelectedId: Int? = null
diff --git a/benchmark/benchmark-darwin-gradle-plugin/src/main/kotlin/androidx/benchmark/darwin/gradle/DarwinBenchmarkPlugin.kt b/benchmark/benchmark-darwin-gradle-plugin/src/main/kotlin/androidx/benchmark/darwin/gradle/DarwinBenchmarkPlugin.kt
index 5974f14..b712be2 100644
--- a/benchmark/benchmark-darwin-gradle-plugin/src/main/kotlin/androidx/benchmark/darwin/gradle/DarwinBenchmarkPlugin.kt
+++ b/benchmark/benchmark-darwin-gradle-plugin/src/main/kotlin/androidx/benchmark/darwin/gradle/DarwinBenchmarkPlugin.kt
@@ -51,10 +51,13 @@
             it.xcodeProjectPath.set(generateXCodeProjectTask.flatMap { task ->
                 task.xcProjectPath
             })
+            val taskName = extension.xcFrameworkConfig.map { name ->
+                "assemble${name}ReleaseXCFramework"
+            }
             it.destination.set(extension.destination)
             it.scheme.set(extension.scheme)
             it.xcResultPath.set(xcResultPath)
-            it.dependsOn("assemble${extension.xcFrameworkConfig.get()}ReleaseXCFramework")
+            it.dependsOn(taskName)
         }
 
         project.tasks.register(
diff --git a/benchmark/benchmark-darwin-gradle-plugin/src/main/kotlin/androidx/benchmark/darwin/gradle/DarwinBenchmarkResultsTask.kt b/benchmark/benchmark-darwin-gradle-plugin/src/main/kotlin/androidx/benchmark/darwin/gradle/DarwinBenchmarkResultsTask.kt
index 0ecdb27..b95352d 100644
--- a/benchmark/benchmark-darwin-gradle-plugin/src/main/kotlin/androidx/benchmark/darwin/gradle/DarwinBenchmarkResultsTask.kt
+++ b/benchmark/benchmark-darwin-gradle-plugin/src/main/kotlin/androidx/benchmark/darwin/gradle/DarwinBenchmarkResultsTask.kt
@@ -49,11 +49,10 @@
         val xcResultFile = xcResultPath.get().asFile
         val parser = XcResultParser(xcResultFile) { args ->
             val output = ByteArrayOutputStream()
-            val result = execOperations.exec { spec ->
+            execOperations.exec { spec ->
                 spec.commandLine = args
                 spec.standardOutput = output
             }
-            result.assertNormalExitValue()
             output.use {
                 val input = ByteArrayInputStream(output.toByteArray())
                 input.use {
diff --git a/benchmark/benchmark-darwin-gradle-plugin/src/main/kotlin/androidx/benchmark/darwin/gradle/Extensions.kt b/benchmark/benchmark-darwin-gradle-plugin/src/main/kotlin/androidx/benchmark/darwin/gradle/Extensions.kt
new file mode 100644
index 0000000..98622a6
--- /dev/null
+++ b/benchmark/benchmark-darwin-gradle-plugin/src/main/kotlin/androidx/benchmark/darwin/gradle/Extensions.kt
@@ -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.benchmark.darwin.gradle
+
+import java.io.ByteArrayOutputStream
+import org.gradle.api.GradleException
+import org.gradle.process.ExecOperations
+
+/**
+ * Executes the [ExecOperations] quietly.
+ */
+fun ExecOperations.executeQuietly(args: List<String>) {
+    val output = ByteArrayOutputStream()
+    // Combine stdout and stderr here. So when we need to surface exceptions
+    // the timeline is consistent.
+    output.use {
+        val result = exec { spec ->
+            spec.commandLine = args
+            spec.standardOutput = output
+            spec.errorOutput = output
+            // Throw a better exception
+            spec.isIgnoreExitValue = true
+        }
+        if (result.exitValue != 0) {
+            // Throw the exception with the full context.
+            throw GradleException(
+                """
+                    ${output.toString(Charsets.UTF_8)}
+                """.trimIndent()
+            )
+        }
+    }
+}
diff --git a/benchmark/benchmark-darwin-gradle-plugin/src/main/kotlin/androidx/benchmark/darwin/gradle/GenerateXCodeProjectTask.kt b/benchmark/benchmark-darwin-gradle-plugin/src/main/kotlin/androidx/benchmark/darwin/gradle/GenerateXCodeProjectTask.kt
index 4876226..c64e895 100644
--- a/benchmark/benchmark-darwin-gradle-plugin/src/main/kotlin/androidx/benchmark/darwin/gradle/GenerateXCodeProjectTask.kt
+++ b/benchmark/benchmark-darwin-gradle-plugin/src/main/kotlin/androidx/benchmark/darwin/gradle/GenerateXCodeProjectTask.kt
@@ -65,9 +65,7 @@
             "--project",
             outputFile.parent
         )
-        execOperations.exec { spec ->
-            spec.commandLine = args
-        }
+        execOperations.executeQuietly(args)
         require(outputFile.exists()) {
             "Project $projectName must match the `name` declaration in $yamlFile"
         }
diff --git a/benchmark/benchmark-darwin-gradle-plugin/src/main/kotlin/androidx/benchmark/darwin/gradle/RunDarwinBenchmarksTask.kt b/benchmark/benchmark-darwin-gradle-plugin/src/main/kotlin/androidx/benchmark/darwin/gradle/RunDarwinBenchmarksTask.kt
index 8f3cf39..d33dd6a 100644
--- a/benchmark/benchmark-darwin-gradle-plugin/src/main/kotlin/androidx/benchmark/darwin/gradle/RunDarwinBenchmarksTask.kt
+++ b/benchmark/benchmark-darwin-gradle-plugin/src/main/kotlin/androidx/benchmark/darwin/gradle/RunDarwinBenchmarksTask.kt
@@ -63,9 +63,7 @@
             "-resultBundlePath", xcResultFile.absolutePath,
         )
         logger.info("Command : ${args.joinToString(" ")}")
-        execOperations.exec { spec ->
-            spec.commandLine = args
-        }
+        execOperations.executeQuietly(args)
     }
 
     private fun requireXcodeBuild() {
diff --git a/benchmark/benchmark-darwin-samples-xcode/run-benchmarks.sh b/benchmark/benchmark-darwin-samples-xcode/run-benchmarks.sh
deleted file mode 100755
index a7062d0..0000000
--- a/benchmark/benchmark-darwin-samples-xcode/run-benchmarks.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/bash
-
-# Runs benchmark tests.
-
-xcodebuild \
- test \
- -project benchmark-darwin-sample-xcode.xcodeproj \
- -scheme testapp-ios \
- -destination 'platform=iOS Simulator,name=iPhone 13,OS=15.2' \
- -resultBundlePath 'benchmark-darwin-sample-xcode.xcresult'
diff --git a/benchmark/benchmark-darwin-samples-xcode/xcodegenw.sh b/benchmark/benchmark-darwin-samples-xcode/xcodegenw.sh
deleted file mode 100755
index 8010710..0000000
--- a/benchmark/benchmark-darwin-samples-xcode/xcodegenw.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/bash
-# Generates the XCode project to run / debug benchmark tests.
-
-rm -rf benchmark-darwin-sample-xcode.xcodeproj
-xcodegen --spec xcodegen-project.yml
-open benchmark-darwin-sample-xcode.xcodeproj
diff --git a/benchmark/benchmark-darwin-samples/build.gradle b/benchmark/benchmark-darwin-samples/build.gradle
index 065c1a3..da95b27 100644
--- a/benchmark/benchmark-darwin-samples/build.gradle
+++ b/benchmark/benchmark-darwin-samples/build.gradle
@@ -8,11 +8,13 @@
 
 androidXMultiplatform {
 
-    def xcf = new XCFrameworkConfig(project, "AndroidXDarwinSampleBenchmarks")
+    // XCFrameworkConfig must match module name
+    def xcf = new XCFrameworkConfig(project, "AndroidXDarwinBenchmarks")
 
     ios {
         binaries.framework {
-            baseName = "AndroidXDarwinSampleBenchmarks"
+            // The module name must be AndroidXDarwinBenchmarks for the discovery to work.
+            baseName = "AndroidXDarwinBenchmarks"
             // https://youtrack.jetbrains.com/issue/KT-48552
             embedBitcode = BitcodeEmbeddingMode.DISABLE
             export(project(":benchmark:benchmark-darwin"))
@@ -49,13 +51,13 @@
 
 darwinBenchmark {
     xcodeGenConfigFile = project.rootProject.file(
-            "benchmark/benchmark-darwin-samples-xcode/xcodegen-project.yml"
+            "benchmark/benchmark-darwin-xcode/projects/benchmark-darwin-samples-xcode.yml"
     )
     xcodeProjectName = "benchmark-darwin-samples-xcode"
     scheme = "testapp-ios"
     // ios 13, 15.2
     destination = "platform=iOS Simulator,name=iPhone 13,OS=15.2"
-    xcFrameworkConfig = "AndroidXDarwinSampleBenchmarks"
+    xcFrameworkConfig = "AndroidXDarwinBenchmarks"
 }
 
 androidx {
diff --git a/benchmark/benchmark-darwin-samples-xcode/.gitignore b/benchmark/benchmark-darwin-xcode/.gitignore
similarity index 100%
rename from benchmark/benchmark-darwin-samples-xcode/.gitignore
rename to benchmark/benchmark-darwin-xcode/.gitignore
diff --git a/benchmark/benchmark-darwin-samples-xcode/iosAppUnitTests/main/Benchmarks.swift b/benchmark/benchmark-darwin-xcode/iosAppUnitTests/main/Benchmarks.swift
similarity index 97%
rename from benchmark/benchmark-darwin-samples-xcode/iosAppUnitTests/main/Benchmarks.swift
rename to benchmark/benchmark-darwin-xcode/iosAppUnitTests/main/Benchmarks.swift
index b11fccb..1acf63f 100644
--- a/benchmark/benchmark-darwin-samples-xcode/iosAppUnitTests/main/Benchmarks.swift
+++ b/benchmark/benchmark-darwin-xcode/iosAppUnitTests/main/Benchmarks.swift
@@ -16,7 +16,7 @@
 
 import Foundation
 import XCTest
-import AndroidXDarwinSampleBenchmarks
+import AndroidXDarwinBenchmarks
 
 class BenchmarkTest: XCTestCase {
     var testCase: TestCase? = nil
diff --git a/benchmark/benchmark-darwin-samples-xcode/iosSources/main/ContentView.swift b/benchmark/benchmark-darwin-xcode/iosSources/main/ContentView.swift
similarity index 100%
rename from benchmark/benchmark-darwin-samples-xcode/iosSources/main/ContentView.swift
rename to benchmark/benchmark-darwin-xcode/iosSources/main/ContentView.swift
diff --git a/benchmark/benchmark-darwin-samples-xcode/iosSources/main/iosApp.swift b/benchmark/benchmark-darwin-xcode/iosSources/main/iosApp.swift
similarity index 100%
rename from benchmark/benchmark-darwin-samples-xcode/iosSources/main/iosApp.swift
rename to benchmark/benchmark-darwin-xcode/iosSources/main/iosApp.swift
diff --git a/benchmark/benchmark-darwin-samples-xcode/xcodegen-project.yml b/benchmark/benchmark-darwin-xcode/projects/benchmark-darwin-samples-xcode.yml
similarity index 89%
rename from benchmark/benchmark-darwin-samples-xcode/xcodegen-project.yml
rename to benchmark/benchmark-darwin-xcode/projects/benchmark-darwin-samples-xcode.yml
index b0e054a..a7c06ed 100644
--- a/benchmark/benchmark-darwin-samples-xcode/xcodegen-project.yml
+++ b/benchmark/benchmark-darwin-xcode/projects/benchmark-darwin-samples-xcode.yml
@@ -9,13 +9,13 @@
     info:
       path: Info.plist
     sources:
-      - path: 'iosSources/main'
+      - path: '../iosSources/main'
     scheme:
       testTargets:
         - testapp-ios-benchmarks
       gatherCoverageData: false
     dependencies:
-      - framework: "${PROJECT_DIR}/../../../../androidx/benchmark/benchmark-darwin-samples/build/XCFrameworks/release/AndroidXDarwinSampleBenchmarks.xcframework"
+      - framework: "${PROJECT_DIR}/../../../../androidx/benchmark/benchmark-darwin-samples/build/XCFrameworks/release/AndroidXDarwinBenchmarks.xcframework"
     settings:
       PRODUCT_NAME: testapp-ios
 
@@ -25,7 +25,7 @@
     info:
       path: Info.plist
     sources:
-      - path: 'iosAppUnitTests/main'
+      - path: '../iosAppUnitTests/main'
     scheme:
       gatherCoverageData: false
     settings:
diff --git a/benchmark/benchmark-darwin-samples-xcode/xcodegen-project.yml b/benchmark/benchmark-darwin-xcode/projects/collection-benchmark-ios.yml
similarity index 63%
copy from benchmark/benchmark-darwin-samples-xcode/xcodegen-project.yml
copy to benchmark/benchmark-darwin-xcode/projects/collection-benchmark-ios.yml
index b0e054a..c40aa28 100644
--- a/benchmark/benchmark-darwin-samples-xcode/xcodegen-project.yml
+++ b/benchmark/benchmark-darwin-xcode/projects/collection-benchmark-ios.yml
@@ -1,6 +1,6 @@
-# XCodeGen for the :benchmark:benchmark-darwin-samples module..
+# XCodeGen for the :collection-benchmark module..
 
-name: benchmark-darwin-samples-xcode
+name: collection-benchmark-ios
 targets:
 
   testapp-ios:
@@ -9,13 +9,13 @@
     info:
       path: Info.plist
     sources:
-      - path: 'iosSources/main'
+      - path: '../iosSources/main'
     scheme:
       testTargets:
         - testapp-ios-benchmarks
       gatherCoverageData: false
     dependencies:
-      - framework: "${PROJECT_DIR}/../../../../androidx/benchmark/benchmark-darwin-samples/build/XCFrameworks/release/AndroidXDarwinSampleBenchmarks.xcframework"
+      - framework: "${PROJECT_DIR}/../../../../androidx/collection/collection-benchmark/build/XCFrameworks/release/AndroidXDarwinBenchmarks.xcframework"
     settings:
       PRODUCT_NAME: testapp-ios
 
@@ -25,14 +25,14 @@
     info:
       path: Info.plist
     sources:
-      - path: 'iosAppUnitTests/main'
+      - path: '../iosAppUnitTests/main'
     scheme:
       gatherCoverageData: false
     settings:
       PRODUCT_NAME: testapp-ios-benchmarks
 
 settings:
-  PRODUCT_BUNDLE_IDENTIFIER: androidx.benchmark
+  PRODUCT_BUNDLE_IDENTIFIER: androidx.collection
   SWIFT_VERSION: 5
   CODE_SIGN_IDENTITY: ''
   CODE_SIGNING_REQUIRED: 'NO'
diff --git a/benchmark/benchmark-macro/api/public_plus_experimental_current.txt b/benchmark/benchmark-macro/api/public_plus_experimental_current.txt
index e0b7810..69c6e99 100644
--- a/benchmark/benchmark-macro/api/public_plus_experimental_current.txt
+++ b/benchmark/benchmark-macro/api/public_plus_experimental_current.txt
@@ -114,8 +114,15 @@
   public final class TagKt {
   }
 
-  @RequiresApi(29) @androidx.benchmark.macro.ExperimentalMetricApi public final class TraceSectionMetric extends androidx.benchmark.macro.Metric {
-    ctor public TraceSectionMetric(String sectionName);
+  @androidx.benchmark.macro.ExperimentalMetricApi public final class TraceSectionMetric extends androidx.benchmark.macro.Metric {
+    ctor public TraceSectionMetric(String sectionName, optional androidx.benchmark.macro.TraceSectionMetric.Mode mode);
+  }
+
+  public enum TraceSectionMetric.Mode {
+    method public static androidx.benchmark.macro.TraceSectionMetric.Mode valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.benchmark.macro.TraceSectionMetric.Mode[] values();
+    enum_constant public static final androidx.benchmark.macro.TraceSectionMetric.Mode First;
+    enum_constant public static final androidx.benchmark.macro.TraceSectionMetric.Mode Sum;
   }
 
 }
diff --git a/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/TraceSectionMetricTest.kt b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/TraceSectionMetricTest.kt
index 8fc7256..98120bd 100644
--- a/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/TraceSectionMetricTest.kt
+++ b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/TraceSectionMetricTest.kt
@@ -16,7 +16,6 @@
 
 package androidx.benchmark.macro
 
-import android.annotation.SuppressLint
 import androidx.benchmark.macro.perfetto.PerfettoTraceProcessor
 import androidx.benchmark.perfetto.PerfettoHelper
 import androidx.test.filters.MediumTest
@@ -38,43 +37,52 @@
     ).absolutePath
 
     @Test
-    fun activityThreadMain() = verifySingleMetric(
+    fun activityThreadMain() = verifyFirstSum(
         tracePath = api24ColdStart,
         packageName = Packages.TEST,
         sectionName = "ActivityThreadMain",
-        expectedMs = 12.639
+        expectedFirstMs = 12.639
     )
 
     @Test
-    fun activityStart() = verifySingleMetric(
+    fun activityStart() = verifyFirstSum(
         tracePath = api24ColdStart,
         packageName = Packages.TEST,
         sectionName = "activityStart",
-        expectedMs = 81.979
+        expectedFirstMs = 81.979
     )
 
     @Test
-    fun startActivityAndWait() = verifySingleMetric(
+    fun startActivityAndWait() = verifyFirstSum(
         tracePath = api24ColdStart,
         packageName = Packages.TEST,
         sectionName = "startActivityAndWait",
-        expectedMs = 1_110.689
+        expectedFirstMs = 1_110.689
     )
 
     @Test
-    fun launching() = verifySingleMetric(
+    fun launching() = verifyFirstSum(
         tracePath = api24ColdStart,
         packageName = Packages.TEST,
         sectionName = "launching: androidx.benchmark.integration.macrobenchmark.target",
-        expectedMs = 269.947
+        expectedFirstMs = 269.947
     )
 
     @Test
-    fun section1_2() = verifySingleMetric(
+    fun section1_2() = verifyFirstSum(
         tracePath = commasInSliceNames,
         packageName = Packages.TARGET,
         sectionName = "section1,2",
-        expectedMs = 0.006615
+        expectedFirstMs = 0.006615
+    )
+
+    @Test
+    fun multiSection() = verifyFirstSum(
+        tracePath = api24ColdStart,
+        packageName = Packages.TARGET,
+        sectionName = "inflate",
+        expectedFirstMs = 13.318, // first inflation
+        expectedSumMs = 43.128 // total inflation
     )
 
     companion object {
@@ -85,16 +93,16 @@
             apiLevel = 24
         )
 
-        @SuppressLint("NewApi") // we use a fixed trace - ignore for TraceSectionMetric
-        private fun verifySingleMetric(
+        private fun verifyMetric(
             tracePath: String,
             packageName: String,
             sectionName: String,
+            mode: TraceSectionMetric.Mode,
             expectedMs: Double
         ) {
             assumeTrue(PerfettoHelper.isAbiSupported())
 
-            val metric = TraceSectionMetric(sectionName)
+            val metric = TraceSectionMetric(sectionName, mode)
             val expectedKey = sectionName + "Ms"
             metric.configure(packageName = packageName)
 
@@ -108,5 +116,28 @@
             assertEquals(setOf(expectedKey), iterationResult.singleMetrics.keys)
             assertEquals(expectedMs, iterationResult.singleMetrics[expectedKey]!!, 0.001)
         }
+
+        private fun verifyFirstSum(
+            tracePath: String,
+            packageName: String,
+            sectionName: String,
+            expectedFirstMs: Double,
+            expectedSumMs: Double = expectedFirstMs // default implies only one matching section
+        ) {
+            verifyMetric(
+                tracePath = tracePath,
+                packageName = packageName,
+                sectionName = sectionName,
+                mode = TraceSectionMetric.Mode.First,
+                expectedMs = expectedFirstMs
+            )
+            verifyMetric(
+                tracePath = tracePath,
+                packageName = packageName,
+                sectionName = sectionName,
+                mode = TraceSectionMetric.Mode.Sum,
+                expectedMs = expectedSumMs
+            )
+        }
     }
 }
diff --git a/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/PerfettoSdkHandshakeTest.kt b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/PerfettoSdkHandshakeTest.kt
index 90fc31d..b9757a8 100644
--- a/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/PerfettoSdkHandshakeTest.kt
+++ b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/PerfettoSdkHandshakeTest.kt
@@ -47,7 +47,7 @@
 import org.junit.runners.Parameterized
 import org.junit.runners.Parameterized.Parameters
 
-private const val tracingPerfettoVersion = "1.0.0-alpha06" // TODO(224510255): get by 'reflection'
+private const val tracingPerfettoVersion = "1.0.0-alpha07" // TODO(224510255): get by 'reflection'
 private const val minSupportedSdk = Build.VERSION_CODES.R // TODO(234351579): Support API < 30
 
 @RunWith(Parameterized::class)
diff --git a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Metric.kt b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Metric.kt
index db769c5..e8fac44 100644
--- a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Metric.kt
+++ b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Metric.kt
@@ -269,19 +269,38 @@
 }
 
 /**
- * Captures the time taken by a trace section - a named begin / end pair matching the provided name.
+ * Captures the time taken by named trace section - a named begin / end pair matching the provided
+ * [sectionName].
  *
- * Always selects the first instance of a trace section captured during a measurement.
+ * Select how matching sections are resolved into a duration metric with [mode].
  *
  * @see androidx.tracing.Trace.beginSection
  * @see androidx.tracing.Trace.endSection
  * @see androidx.tracing.trace
  */
-@RequiresApi(29) // Remove once b/182386956 fixed, as app tag may be needed for this to work.
 @ExperimentalMetricApi
 public class TraceSectionMetric(
-    private val sectionName: String
+    private val sectionName: String,
+    private val mode: Mode = Mode.First
 ) : Metric() {
+    enum class Mode {
+        /**
+         * Captures the duration of the first instance of `sectionName` in the trace.
+         *
+         * When this mode is used, no measurement will be reported if the named section does
+         * not appear in the trace.
+         */
+        First,
+
+        /**
+         * Captures the sum of all instances of `sectionName` in the trace.
+         *
+         * When this mode is used, a measurement of `0` will be reported if the named section
+         * does not appear in the trace
+         */
+        Sum
+    }
+
     internal override fun configure(packageName: String) {
     }
 
@@ -296,16 +315,36 @@
         captureInfo: CaptureInfo,
         perfettoTraceProcessor: PerfettoTraceProcessor
     ): IterationResult {
-        val slice = perfettoTraceProcessor.querySlices(sectionName).firstOrNull()
-        return if (slice == null) {
-            IterationResult.EMPTY
-        } else IterationResult(
-            singleMetrics = mapOf(
-                sectionName + "Ms" to slice.dur / 1_000_000.0
-            ),
-            sampledMetrics = emptyMap(),
-            timelineRangeNs = slice.ts..slice.endTs
-        )
+        val slices = perfettoTraceProcessor.querySlices(sectionName)
+
+        return when (mode) {
+            Mode.First -> {
+                val slice = slices.firstOrNull()
+                if (slice == null) {
+                    IterationResult.EMPTY
+                } else IterationResult(
+                    singleMetrics = mapOf(
+                        sectionName + "Ms" to slice.dur / 1_000_000.0
+                    ),
+                    sampledMetrics = emptyMap(),
+                    timelineRangeNs = slice.ts..slice.endTs
+                )
+            }
+            Mode.Sum -> {
+                // note, this duration assumes non-reentrant slices
+                val durMs = slices.sumOf { it.dur } / 1_000_000.0
+                IterationResult(
+                    singleMetrics = mapOf(sectionName + "Ms" to durMs),
+                    sampledMetrics = emptyMap(),
+                    timelineRangeNs = if (slices.isEmpty()) {
+                        null
+                    } else {
+                        // parens added to make ktlint happy
+                        (slices.minOf { it.ts })..(slices.maxOf { it.endTs })
+                    }
+                )
+            }
+        }
     }
 }
 
diff --git a/camera/camera-core/src/androidTest/java/androidx/camera/core/imagecapture/JpegBytes2DiskDeviceTest.kt b/camera/camera-core/src/androidTest/java/androidx/camera/core/imagecapture/JpegBytes2DiskDeviceTest.kt
new file mode 100644
index 0000000..d414a20
--- /dev/null
+++ b/camera/camera-core/src/androidTest/java/androidx/camera/core/imagecapture/JpegBytes2DiskDeviceTest.kt
@@ -0,0 +1,129 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.camera.core.imagecapture
+
+import android.graphics.BitmapFactory
+import android.graphics.ImageFormat
+import android.graphics.Matrix
+import androidx.camera.core.imagecapture.Utils.CAMERA_CAPTURE_RESULT
+import androidx.camera.core.imagecapture.Utils.HEIGHT
+import androidx.camera.core.imagecapture.Utils.ROTATION_DEGREES
+import androidx.camera.core.imagecapture.Utils.WIDTH
+import androidx.camera.core.imagecapture.Utils.TEMP_FILE
+
+import android.graphics.Rect
+import android.util.Size
+import androidx.camera.core.ImageCapture
+import androidx.camera.core.impl.utils.Exif
+import androidx.camera.core.processing.Packet
+import androidx.camera.testing.ExifUtil
+import androidx.camera.testing.TestImageUtil.createJpegBytes
+import androidx.camera.testing.TestImageUtil.getAverageDiff
+import androidx.camera.testing.TestImageUtil.createBitmap
+
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SdkSuppress
+import androidx.test.filters.SmallTest
+import com.google.common.truth.Truth.assertThat
+import java.io.FileOutputStream
+import org.junit.Test
+import org.junit.runner.RunWith
+
+/**
+ * Instrumented tests for [JpegBytes2Disk].
+ */
+@SmallTest
+@RunWith(AndroidJUnit4::class)
+@SdkSuppress(minSdkVersion = 21)
+class JpegBytes2DiskDeviceTest {
+
+    private val operation = JpegBytes2Disk()
+
+    @Test
+    fun saveToOutputStream_verifySavedImageIsIdentical() {
+        // Arrange.
+        val jpegBytes = createJpegBytes(WIDTH, HEIGHT)
+        val inputPacket = Packet.of(
+            jpegBytes,
+            ExifUtil.createExif(jpegBytes),
+            ImageFormat.JPEG,
+            Size(WIDTH, HEIGHT),
+            Rect(0, 0, WIDTH, HEIGHT),
+            ROTATION_DEGREES,
+            Matrix(),
+            CAMERA_CAPTURE_RESULT
+        )
+        // Act: save to a OutputStream.
+        FileOutputStream(TEMP_FILE).use {
+            val input = JpegBytes2Disk.In.of(inputPacket,
+                ImageCapture.OutputFileOptions.Builder(it).build())
+            operation.apply(input)
+        }
+        // Assert.
+        val restoredBitmap = BitmapFactory.decodeFile(TEMP_FILE.path)
+        assertThat(
+            getAverageDiff(
+                restoredBitmap,
+                createBitmap(WIDTH, HEIGHT)
+            )
+        ).isEqualTo(0)
+    }
+
+    @Test
+    fun saveToFile_verifySavedImageIsIdentical() {
+        // Act.
+        val path = saveFileAndGetPath()
+        // Assert: image is identical.
+        val restoredBitmap = BitmapFactory.decodeFile(path)
+        assertThat(
+            getAverageDiff(
+                restoredBitmap,
+                createBitmap(WIDTH, HEIGHT)
+            )
+        ).isEqualTo(0)
+        // Assert: exif rotation matches the packet rotation.
+        val restoredExif = Exif.createFromFileString(path)
+        assertThat(restoredExif.rotation).isEqualTo(ROTATION_DEGREES)
+    }
+
+    private fun saveFileAndGetPath(metadata: ImageCapture.Metadata): String {
+        return saveFileAndGetPath(ExifUtil.createExif(createJpegBytes(WIDTH, HEIGHT)),
+            metadata, 0)
+    }
+
+    private fun saveFileAndGetPath(
+        exif: Exif = ExifUtil.createExif(createJpegBytes(WIDTH, HEIGHT)),
+        metadata: ImageCapture.Metadata = ImageCapture.Metadata(),
+        rotation: Int = ROTATION_DEGREES
+    ): String {
+        val jpegBytes = createJpegBytes(WIDTH, HEIGHT)
+        val inputPacket = Packet.of(
+            jpegBytes,
+            exif,
+            ImageFormat.JPEG,
+            Size(WIDTH, HEIGHT),
+            Rect(0, 0, WIDTH, HEIGHT),
+            rotation,
+            Matrix(),
+            CAMERA_CAPTURE_RESULT
+        )
+        val options = ImageCapture.OutputFileOptions.Builder(TEMP_FILE)
+            .setMetadata(metadata).build()
+        val input = JpegBytes2Disk.In.of(inputPacket, options)
+        return operation.apply(input).savedUri!!.path!!
+    }
+}
\ No newline at end of file
diff --git a/camera/camera-core/src/androidTest/java/androidx/camera/core/imagecapture/ProcessingNodeDeviceTest.kt b/camera/camera-core/src/androidTest/java/androidx/camera/core/imagecapture/ProcessingNodeDeviceTest.kt
index 9063d8d..26f719e 100644
--- a/camera/camera-core/src/androidTest/java/androidx/camera/core/imagecapture/ProcessingNodeDeviceTest.kt
+++ b/camera/camera-core/src/androidTest/java/androidx/camera/core/imagecapture/ProcessingNodeDeviceTest.kt
@@ -18,20 +18,26 @@
 import android.graphics.Bitmap
 import android.graphics.BitmapFactory
 import android.graphics.BitmapFactory.decodeByteArray
+import android.graphics.Color
 import android.graphics.ImageFormat
 import android.graphics.Rect
 import androidx.camera.core.ImageCapture.OutputFileOptions
 import androidx.camera.core.ImageProxy
 import androidx.camera.core.imagecapture.Utils.CAMERA_CAPTURE_RESULT
 import androidx.camera.core.imagecapture.Utils.CROP_RECT
+import androidx.camera.core.imagecapture.Utils.EXIF_DESCRIPTION
 import androidx.camera.core.imagecapture.Utils.HEIGHT
 import androidx.camera.core.imagecapture.Utils.OUTPUT_FILE_OPTIONS
 import androidx.camera.core.imagecapture.Utils.SENSOR_TO_BUFFER
+import androidx.camera.core.imagecapture.Utils.TIMESTAMP
 import androidx.camera.core.imagecapture.Utils.WIDTH
+import androidx.camera.core.impl.utils.Exif
 import androidx.camera.core.impl.utils.executor.CameraXExecutors.mainThreadExecutor
 import androidx.camera.core.internal.CameraCaptureResultImageInfo
 import androidx.camera.core.internal.utils.ImageUtil.jpegImageToJpegByteArray
 import androidx.camera.core.processing.InternalImageProcessor
+import androidx.camera.testing.ExifUtil
+import androidx.camera.testing.TestImageUtil.createBitmap
 import androidx.camera.testing.TestImageUtil.createJpegBytes
 import androidx.camera.testing.TestImageUtil.createJpegFakeImageProxy
 import androidx.camera.testing.TestImageUtil.createYuvFakeImageProxy
@@ -72,6 +78,21 @@
         processYuvAndVerifyOutputSize(OUTPUT_FILE_OPTIONS)
     }
 
+    @Test
+    fun processImageEqualsCropSize_croppingNotInvoked() = runBlocking {
+        cropRectEqualsImageRect_croppingNotInvoked(OUTPUT_FILE_OPTIONS)
+    }
+
+    @Test
+    fun processInMemoryInputPacket_callbackInvoked() = runBlocking {
+        inMemoryInputPacket_callbackInvoked(null)
+    }
+
+    @Test
+    fun processSaveJpegOnDisk_verifyOutput() = runBlocking {
+        saveJpegOnDisk_verifyOutput(OUTPUT_FILE_OPTIONS)
+    }
+
     private suspend fun processYuvAndVerifyOutputSize(outputFileOptions: OutputFileOptions?) {
         // Arrange: create node with JPEG input and grayscale effect.
         val node = ProcessingNode(mainThreadExecutor())
@@ -137,4 +158,113 @@
             BitmapFactory.decodeFile(filePath)
         }
     }
+
+    private suspend fun cropRectEqualsImageRect_croppingNotInvoked(
+        outputFileOptions: OutputFileOptions?
+    ) {
+        // Arrange: create a request with no cropping
+        val node = ProcessingNode(mainThreadExecutor())
+        val nodeIn = ProcessingNode.In.of(ImageFormat.JPEG)
+        node.transform(nodeIn)
+        val takePictureCallback = FakeTakePictureCallback()
+
+        val processingRequest = ProcessingRequest(
+            { listOf() },
+            outputFileOptions,
+            Rect(0, 0, WIDTH, HEIGHT),
+            0,
+            /*jpegQuality=*/100,
+            SENSOR_TO_BUFFER,
+            takePictureCallback
+        )
+        val imageIn = createJpegFakeImageProxy(
+            CameraCaptureResultImageInfo(CAMERA_CAPTURE_RESULT),
+            createJpegBytes(WIDTH, HEIGHT)
+        )
+        val input = ProcessingNode.InputPacket.of(processingRequest, imageIn)
+        // Act and return.
+        nodeIn.edge.accept(input)
+        val filePath = takePictureCallback.getOnDiskResult().savedUri!!.path!!
+
+        // Assert: restored image is not cropped.
+        val restoredBitmap = BitmapFactory.decodeFile(filePath)
+
+        // Assert: restored image is not cropped.
+        assertThat(
+            getAverageDiff(
+                createBitmap(WIDTH, HEIGHT),
+                restoredBitmap
+            )
+        ).isEqualTo(0)
+    }
+
+    private suspend fun inMemoryInputPacket_callbackInvoked(outputFileOptions: OutputFileOptions?) {
+        // Arrange.
+        val node = ProcessingNode(mainThreadExecutor())
+        val nodeIn = ProcessingNode.In.of(ImageFormat.JPEG)
+        node.transform(nodeIn)
+        val takePictureCallback = FakeTakePictureCallback()
+
+        val processingRequest = ProcessingRequest(
+            { listOf() },
+            outputFileOptions,
+            Rect(0, 0, WIDTH, HEIGHT),
+            0,
+            /*jpegQuality=*/100,
+            SENSOR_TO_BUFFER,
+            takePictureCallback
+        )
+        val imageIn = createJpegFakeImageProxy(
+            CameraCaptureResultImageInfo(CAMERA_CAPTURE_RESULT),
+            createJpegBytes(WIDTH, HEIGHT)
+        )
+        // Act.
+        val input = ProcessingNode.InputPacket.of(processingRequest, imageIn)
+        // Act and return.
+        nodeIn.edge.accept(input)
+        // Assert: the output image is identical to the input.
+        val imageOut = takePictureCallback.getInMemoryResult()
+        val restoredJpeg = jpegImageToJpegByteArray(imageOut)
+
+        assertThat(getAverageDiff(createJpegBytes(WIDTH, HEIGHT), restoredJpeg)).isEqualTo(0)
+        assertThat(imageOut.imageInfo.timestamp).isEqualTo(TIMESTAMP)
+    }
+
+    private suspend fun saveJpegOnDisk_verifyOutput(outputFileOptions: OutputFileOptions?) {
+        // Arrange: create a on-disk processing request.
+        val node = ProcessingNode(mainThreadExecutor())
+        val nodeIn = ProcessingNode.In.of(ImageFormat.JPEG)
+        node.transform(nodeIn)
+        val takePictureCallback = FakeTakePictureCallback()
+        val jpegBytes = ExifUtil.updateExif(createJpegBytes(640, 480)) {
+            it.description = EXIF_DESCRIPTION
+        }
+        val imageIn = createJpegFakeImageProxy(
+            CameraCaptureResultImageInfo(CAMERA_CAPTURE_RESULT),
+            jpegBytes
+        )
+        val processingRequest = ProcessingRequest(
+            { listOf() },
+            outputFileOptions,
+            CROP_RECT,
+            0,
+            /*jpegQuality=*/100,
+            SENSOR_TO_BUFFER,
+            takePictureCallback
+        )
+        val input = ProcessingNode.InputPacket.of(processingRequest, imageIn)
+
+        // Act: send input to the edge and wait for the saved URI
+        nodeIn.edge.accept(input)
+        val filePath = takePictureCallback.getOnDiskResult().savedUri!!.path!!
+
+        // Assert: image content is cropped correctly
+        val bitmap = BitmapFactory.decodeFile(filePath)
+
+        assertThat(getAverageDiff(bitmap, Rect(0, 0, 320, 240), Color.BLUE)).isEqualTo(0)
+        assertThat(getAverageDiff(bitmap, Rect(321, 0, WIDTH, 240), Color.YELLOW)).isEqualTo(0)
+        // Assert: Exif info is saved correctly.
+        val exif = Exif.createFromFileString(filePath)
+        assertThat(exif.description).isEqualTo(EXIF_DESCRIPTION)
+    }
 }
diff --git a/camera/camera-core/src/test/java/androidx/camera/core/imagecapture/JpegBytes2DiskTest.kt b/camera/camera-core/src/test/java/androidx/camera/core/imagecapture/JpegBytes2DiskTest.kt
index 7ea24d2..df9ca7d 100644
--- a/camera/camera-core/src/test/java/androidx/camera/core/imagecapture/JpegBytes2DiskTest.kt
+++ b/camera/camera-core/src/test/java/androidx/camera/core/imagecapture/JpegBytes2DiskTest.kt
@@ -16,7 +16,6 @@
 
 package androidx.camera.core.imagecapture
 
-import android.graphics.BitmapFactory
 import android.graphics.ImageFormat
 import android.graphics.Matrix
 import android.graphics.Rect
@@ -36,11 +35,8 @@
 import androidx.camera.core.impl.utils.Exif.createFromFileString
 import androidx.camera.core.processing.Packet
 import androidx.camera.testing.ExifUtil.createExif
-import androidx.camera.testing.TestImageUtil.createBitmap
 import androidx.camera.testing.TestImageUtil.createJpegBytes
-import androidx.camera.testing.TestImageUtil.getAverageDiff
 import com.google.common.truth.Truth.assertThat
-import java.io.FileOutputStream
 import org.junit.Test
 import org.junit.runner.RunWith
 import org.robolectric.RobolectricTestRunner
@@ -60,42 +56,6 @@
     private val operation = JpegBytes2Disk()
 
     @Test
-    fun saveToOutputStream_verifySavedImageIsIdentical() {
-        // Arrange.
-        val jpegBytes = createJpegBytes(WIDTH, HEIGHT)
-        val inputPacket = Packet.of(
-            jpegBytes,
-            createExif(jpegBytes),
-            ImageFormat.JPEG,
-            Size(WIDTH, HEIGHT),
-            Rect(0, 0, WIDTH, HEIGHT),
-            ROTATION_DEGREES,
-            Matrix(),
-            CAMERA_CAPTURE_RESULT
-        )
-        // Act: save to a OutputStream.
-        FileOutputStream(TEMP_FILE).use {
-            val input = JpegBytes2Disk.In.of(inputPacket, OutputFileOptions.Builder(it).build())
-            operation.apply(input)
-        }
-        // Assert.
-        val restoredBitmap = BitmapFactory.decodeFile(TEMP_FILE.path)
-        assertThat(getAverageDiff(restoredBitmap, createBitmap(WIDTH, HEIGHT))).isEqualTo(0)
-    }
-
-    @Test
-    fun saveToFile_verifySavedImageIsIdentical() {
-        // Act.
-        val path = saveFileAndGetPath()
-        // Assert: image is identical.
-        val restoredBitmap = BitmapFactory.decodeFile(path)
-        assertThat(getAverageDiff(restoredBitmap, createBitmap(WIDTH, HEIGHT))).isEqualTo(0)
-        // Assert: exif rotation matches the packet rotation.
-        val restoredExif = createFromFileString(path)
-        assertThat(restoredExif.rotation).isEqualTo(ROTATION_DEGREES)
-    }
-
-    @Test
     fun saveWithExif_verifyExifIsCopied() {
         // Arrange.
         val exif = createExif(createJpegBytes(WIDTH, HEIGHT))
diff --git a/camera/camera-core/src/test/java/androidx/camera/core/imagecapture/ProcessingNodeTest.kt b/camera/camera-core/src/test/java/androidx/camera/core/imagecapture/ProcessingNodeTest.kt
index fbe8a9c..484950f 100644
--- a/camera/camera-core/src/test/java/androidx/camera/core/imagecapture/ProcessingNodeTest.kt
+++ b/camera/camera-core/src/test/java/androidx/camera/core/imagecapture/ProcessingNodeTest.kt
@@ -16,33 +16,20 @@
 
 package androidx.camera.core.imagecapture
 
-import android.graphics.BitmapFactory
-import android.graphics.Color.BLUE
-import android.graphics.Color.YELLOW
 import android.graphics.ImageFormat
 import android.graphics.Rect
 import android.os.Build
 import android.os.Looper.getMainLooper
 import androidx.camera.core.ImageCaptureException
-import androidx.camera.core.imagecapture.Utils.CAMERA_CAPTURE_RESULT
-import androidx.camera.core.imagecapture.Utils.EXIF_DESCRIPTION
 import androidx.camera.core.imagecapture.Utils.HEIGHT
 import androidx.camera.core.imagecapture.Utils.OUTPUT_FILE_OPTIONS
 import androidx.camera.core.imagecapture.Utils.ROTATION_DEGREES
 import androidx.camera.core.imagecapture.Utils.SENSOR_TO_BUFFER
-import androidx.camera.core.imagecapture.Utils.TIMESTAMP
 import androidx.camera.core.imagecapture.Utils.WIDTH
-import androidx.camera.core.imagecapture.Utils.createCaptureBundle
 import androidx.camera.core.imagecapture.Utils.createProcessingRequest
-import androidx.camera.core.impl.utils.Exif.createFromFileString
 import androidx.camera.core.impl.utils.executor.CameraXExecutors.mainThreadExecutor
-import androidx.camera.core.internal.CameraCaptureResultImageInfo
-import androidx.camera.core.internal.utils.ImageUtil.jpegImageToJpegByteArray
-import androidx.camera.testing.ExifUtil.updateExif
-import androidx.camera.testing.TestImageUtil.createBitmap
 import androidx.camera.testing.TestImageUtil.createJpegBytes
 import androidx.camera.testing.TestImageUtil.createJpegFakeImageProxy
-import androidx.camera.testing.TestImageUtil.getAverageDiff
 import androidx.camera.testing.fakes.FakeImageInfo
 import androidx.camera.testing.fakes.FakeImageProxy
 import com.google.common.truth.Truth.assertThat
@@ -98,59 +85,6 @@
     }
 
     @Test
-    fun cropRectEqualsImageRect_croppingNotInvoked() {
-        // Arrange: create a request with no cropping
-        val callback = FakeTakePictureCallback()
-        val request = ProcessingRequest(
-            { listOf() },
-            OUTPUT_FILE_OPTIONS,
-            Rect(0, 0, WIDTH, HEIGHT),
-            ROTATION_DEGREES,
-            /*jpegQuality=*/100,
-            SENSOR_TO_BUFFER,
-            callback
-        )
-        val jpegBytes = createJpegBytes(WIDTH, HEIGHT)
-        val image = createJpegFakeImageProxy(jpegBytes)
-        // Track if cropping is invoked.
-        var croppingInvoked = false
-        node.injectJpegBytes2CroppedBitmapForTesting {
-            croppingInvoked = true
-            JpegBytes2CroppedBitmap().apply(it)
-        }
-
-        // Act.
-        processingNodeIn.edge.accept(ProcessingNode.InputPacket.of(request, image))
-        shadowOf(getMainLooper()).idle()
-        val filePath = callback.onDiskResult!!.savedUri!!.path!!
-
-        // Assert: restored image is not cropped.
-        val restoredBitmap = BitmapFactory.decodeFile(filePath)
-        assertThat(getAverageDiff(createBitmap(WIDTH, HEIGHT), restoredBitmap)).isEqualTo(0)
-        // Assert: cropping was not invoked.
-        assertThat(croppingInvoked).isFalse()
-    }
-
-    @Test
-    fun inMemoryInputPacket_callbackInvoked() {
-        // Arrange.
-        val callback = FakeTakePictureCallback()
-        val request = FakeProcessingRequest(createCaptureBundle(intArrayOf()), callback)
-        val jpegBytes = createJpegBytes(WIDTH, HEIGHT)
-        val image = createJpegFakeImageProxy(
-            CameraCaptureResultImageInfo(CAMERA_CAPTURE_RESULT), jpegBytes
-        )
-        // Act.
-        processingNodeIn.edge.accept(ProcessingNode.InputPacket.of(request, image))
-        shadowOf(getMainLooper()).idle()
-        // Assert: the output image is identical to the input.
-        val imageOut = callback.inMemoryResult!!
-        val restoredJpeg = jpegImageToJpegByteArray(imageOut)
-        assertThat(getAverageDiff(jpegBytes, restoredJpeg)).isEqualTo(0)
-        assertThat(imageOut.imageInfo.timestamp).isEqualTo(TIMESTAMP)
-    }
-
-    @Test
     fun saveIncorrectImage_getsErrorCallback() {
         // Arrange: create an invalid ImageProxy.
         val takePictureCallback = FakeTakePictureCallback()
@@ -166,29 +100,4 @@
         assertThat(takePictureCallback.processFailure)
             .isInstanceOf(ImageCaptureException::class.java)
     }
-
-    @Test
-    fun saveJpegOnDisk_verifyOutput() {
-        // Arrange: create a on-disk processing request.
-        val takePictureCallback = FakeTakePictureCallback()
-        val jpegBytes = updateExif(createJpegBytes(640, 480)) {
-            it.description = EXIF_DESCRIPTION
-        }
-        val image = createJpegFakeImageProxy(jpegBytes)
-        val processingRequest = createProcessingRequest(takePictureCallback)
-        val input = ProcessingNode.InputPacket.of(processingRequest, image)
-
-        // Act: send input to the edge and wait for the saved URI
-        processingNodeIn.edge.accept(input)
-        shadowOf(getMainLooper()).idle()
-        val filePath = takePictureCallback.onDiskResult!!.savedUri!!.path!!
-
-        // Assert: image content is cropped correctly
-        val bitmap = BitmapFactory.decodeFile(filePath)
-        assertThat(getAverageDiff(bitmap, Rect(0, 0, 320, 240), BLUE)).isEqualTo(0)
-        assertThat(getAverageDiff(bitmap, Rect(321, 0, WIDTH, 240), YELLOW)).isEqualTo(0)
-        // Assert: Exif info is saved correctly.
-        val exif = createFromFileString(filePath)
-        assertThat(exif.description).isEqualTo(EXIF_DESCRIPTION)
-    }
 }
diff --git a/camera/camera-testing/src/main/java/androidx/camera/testing/LabTestRule.kt b/camera/camera-testing/src/main/java/androidx/camera/testing/LabTestRule.kt
index 29a894f..bdeb736 100644
--- a/camera/camera-testing/src/main/java/androidx/camera/testing/LabTestRule.kt
+++ b/camera/camera-testing/src/main/java/androidx/camera/testing/LabTestRule.kt
@@ -78,7 +78,7 @@
             // Only test in CameraX lab environment and throw AssumptionViolatedException if not
             // in the lab environment. The loggable tag will be set when running the CameraX
             // daily testing.
-            assumeTrue(Log.isLoggable("MH", Log.DEBUG))
+            assumeTrue(isInLabTest())
             statement.evaluate()
         }
     }
@@ -119,4 +119,11 @@
             base
         }
     }
+
+    companion object {
+        @JvmStatic
+        fun isInLabTest(): Boolean {
+            return Log.isLoggable("MH", Log.DEBUG)
+        }
+    }
 }
diff --git a/camera/integration-tests/coretestapp/src/main/AndroidManifest.xml b/camera/integration-tests/coretestapp/src/main/AndroidManifest.xml
index 09b1c7e..6caecd9 100644
--- a/camera/integration-tests/coretestapp/src/main/AndroidManifest.xml
+++ b/camera/integration-tests/coretestapp/src/main/AndroidManifest.xml
@@ -21,7 +21,7 @@
             android:name=".CameraXActivity"
             android:exported="true"
             android:label="Camera Core Test App"
-            android:taskAffinity="androidx.camera.integration.core.CameraXActivity" >
+            android:taskAffinity="androidx.camera.integration.core.CameraXActivity">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
 
@@ -52,13 +52,12 @@
             </intent-filter>
         </activity>
     </application>
+
     <uses-feature android:glEsVersion="0x00020000" />
     <uses-feature android:name="android.hardware.camera" />
 
     <uses-permission android:name="android.permission.CAMERA" />
-    <uses-permission
-        android:name="android.permission.WRITE_EXTERNAL_STORAGE"
-        android:maxSdkVersion="32" />
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
 
     <uses-permission android:name="android.permission.RECORD_AUDIO" />
 </manifest>
diff --git a/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/BindUnbindUseCasesStressTest.kt b/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/BindUnbindUseCasesStressTest.kt
index 3b485b3..31fb57d 100644
--- a/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/BindUnbindUseCasesStressTest.kt
+++ b/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/BindUnbindUseCasesStressTest.kt
@@ -31,8 +31,6 @@
 import androidx.camera.core.impl.utils.executor.CameraXExecutors
 import androidx.camera.extensions.ExtensionsManager
 import androidx.camera.integration.extensions.util.CameraXExtensionsTestUtil
-import androidx.camera.integration.extensions.util.CameraXExtensionsTestUtil.STRESS_TEST_OPERATION_REPEAT_COUNT
-import androidx.camera.integration.extensions.util.CameraXExtensionsTestUtil.STRESS_TEST_REPEAT_COUNT
 import androidx.camera.integration.extensions.util.CameraXExtensionsTestUtil.VERIFICATION_TARGET_IMAGE_ANALYSIS
 import androidx.camera.integration.extensions.util.CameraXExtensionsTestUtil.VERIFICATION_TARGET_IMAGE_CAPTURE
 import androidx.camera.integration.extensions.util.CameraXExtensionsTestUtil.VERIFICATION_TARGET_PREVIEW
@@ -41,14 +39,12 @@
 import androidx.camera.testing.CameraUtil
 import androidx.camera.testing.CameraUtil.PreTestCameraIdList
 import androidx.camera.testing.GLUtil
-import androidx.camera.testing.LabTestRule
 import androidx.camera.testing.StressTestRule
 import androidx.camera.testing.SurfaceTextureProvider
 import androidx.camera.testing.fakes.FakeLifecycleOwner
 import androidx.test.core.app.ApplicationProvider
 import androidx.test.filters.LargeTest
 import androidx.test.filters.SdkSuppress
-import androidx.testutils.RepeatRule
 import com.google.common.truth.Truth.assertThat
 import java.util.concurrent.CountDownLatch
 import java.util.concurrent.Executors
@@ -80,12 +76,6 @@
         PreTestCameraIdList(Camera2Config.defaultConfig())
     )
 
-    @get:Rule
-    val labTest: LabTestRule = LabTestRule()
-
-    @get:Rule
-    val repeatRule = RepeatRule()
-
     private val context = ApplicationProvider.getApplicationContext<Context>()
 
     private lateinit var cameraProvider: ProcessCameraProvider
@@ -148,9 +138,7 @@
             get() = CameraXExtensionsTestUtil.getAllCameraIdExtensionModeCombinations()
     }
 
-    @LabTestRule.LabTestOnly
     @Test
-    @RepeatRule.Repeat(times = STRESS_TEST_REPEAT_COUNT)
     fun bindUnbindUseCases_checkPreviewInEachTime_withPreviewImageCapture(): Unit = runBlocking {
         bindUseCases_checkOutput_thenUnbindAll_repeatedly(
             preview,
@@ -159,9 +147,7 @@
         )
     }
 
-    @LabTestRule.LabTestOnly
     @Test
-    @RepeatRule.Repeat(times = STRESS_TEST_REPEAT_COUNT)
     fun bindUnbindUseCases_checkImageCaptureInEachTime_withPreviewImageCapture(): Unit =
         runBlocking {
             bindUseCases_checkOutput_thenUnbindAll_repeatedly(
@@ -171,9 +157,7 @@
             )
         }
 
-    @LabTestRule.LabTestOnly
     @Test
-    @RepeatRule.Repeat(times = STRESS_TEST_REPEAT_COUNT)
     fun bindUnbindUseCases_checkPreviewInEachTime_withPreviewImageCaptureImageAnalysis():
         Unit = runBlocking {
         val imageAnalysis = createImageAnalysis()
@@ -186,9 +170,7 @@
         )
     }
 
-    @LabTestRule.LabTestOnly
     @Test
-    @RepeatRule.Repeat(times = STRESS_TEST_REPEAT_COUNT)
     fun bindUnbindUseCases_checkImageCaptureInEachTime_withPreviewImageCaptureImageAnalysis():
         Unit = runBlocking {
         val imageAnalysis = createImageAnalysis()
@@ -201,9 +183,7 @@
         )
     }
 
-    @LabTestRule.LabTestOnly
     @Test
-    @RepeatRule.Repeat(times = STRESS_TEST_REPEAT_COUNT)
     fun bindUnbindUseCases_checkImageAnalysisInEachTime_withPreviewImageCaptureImageAnalysis():
         Unit = runBlocking {
         val imageAnalysis = createImageAnalysis()
@@ -228,7 +208,7 @@
         imageCapture: ImageCapture,
         imageAnalysis: ImageAnalysis? = null,
         verificationTarget: Int,
-        repeatCount: Int = STRESS_TEST_OPERATION_REPEAT_COUNT
+        repeatCount: Int = CameraXExtensionsTestUtil.getStressTestRepeatingCount()
     ): Unit = runBlocking {
         for (i in 1..repeatCount) {
             // Arrange.
@@ -285,9 +265,7 @@
         }
     }
 
-    @LabTestRule.LabTestOnly
     @Test
-    @RepeatRule.Repeat(times = STRESS_TEST_REPEAT_COUNT)
     fun checkPreview_afterBindUnbindUseCasesRepeatedly_withPreviewImageCapture(): Unit =
         runBlocking {
             bindUseCases_unbindAll_repeatedly_thenCheckOutput(
@@ -297,9 +275,7 @@
             )
         }
 
-    @LabTestRule.LabTestOnly
     @Test
-    @RepeatRule.Repeat(times = STRESS_TEST_REPEAT_COUNT)
     fun checkImageCapture_afterBindUnbindUseCasesRepeatedly_withPreviewImageCapture(): Unit =
         runBlocking {
             bindUseCases_unbindAll_repeatedly_thenCheckOutput(
@@ -309,9 +285,7 @@
             )
         }
 
-    @LabTestRule.LabTestOnly
     @Test
-    @RepeatRule.Repeat(times = STRESS_TEST_REPEAT_COUNT)
     fun checkPreview_afterBindUnbindUseCasesRepeatedly_withPreviewImageCaptureImageAnalysis():
         Unit = runBlocking {
         val imageAnalysis = createImageAnalysis()
@@ -324,9 +298,7 @@
         )
     }
 
-    @LabTestRule.LabTestOnly
     @Test
-    @RepeatRule.Repeat(times = STRESS_TEST_REPEAT_COUNT)
     fun checkImageCapture_afterBindUnbindUseCasesRepeatedly_withPreviewImageCaptureImageAnalysis():
         Unit = runBlocking {
         val imageAnalysis = createImageAnalysis()
@@ -339,9 +311,7 @@
         )
     }
 
-    @LabTestRule.LabTestOnly
     @Test
-    @RepeatRule.Repeat(times = STRESS_TEST_REPEAT_COUNT)
     fun checkImageAnalysis_afterBindUnbindUseCasesRepeatedly_withPreviewImageCaptureImageAnalysis():
         Unit = runBlocking {
         val imageAnalysis = createImageAnalysis()
@@ -366,7 +336,7 @@
         imageCapture: ImageCapture,
         imageAnalysis: ImageAnalysis? = null,
         verificationTarget: Int,
-        repeatCount: Int = STRESS_TEST_OPERATION_REPEAT_COUNT
+        repeatCount: Int = CameraXExtensionsTestUtil.getStressTestRepeatingCount()
     ): Unit = runBlocking {
         lateinit var previewFrameAvailableMonitor: PreviewFrameAvailableMonitor
 
diff --git a/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/LifecycleStatusChangeStressTest.kt b/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/LifecycleStatusChangeStressTest.kt
index 7ade0d5..51c1624 100644
--- a/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/LifecycleStatusChangeStressTest.kt
+++ b/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/LifecycleStatusChangeStressTest.kt
@@ -21,7 +21,6 @@
 import androidx.camera.camera2.Camera2Config
 import androidx.camera.extensions.ExtensionsManager
 import androidx.camera.integration.extensions.util.CameraXExtensionsTestUtil
-import androidx.camera.integration.extensions.util.CameraXExtensionsTestUtil.STRESS_TEST_OPERATION_REPEAT_COUNT
 import androidx.camera.integration.extensions.util.CameraXExtensionsTestUtil.VERIFICATION_TARGET_IMAGE_CAPTURE
 import androidx.camera.integration.extensions.util.CameraXExtensionsTestUtil.VERIFICATION_TARGET_PREVIEW
 import androidx.camera.integration.extensions.util.CameraXExtensionsTestUtil.launchCameraExtensionsActivity
@@ -33,14 +32,12 @@
 import androidx.camera.testing.CameraUtil
 import androidx.camera.testing.CameraUtil.PreTestCameraIdList
 import androidx.camera.testing.CoreAppTestUtil
-import androidx.camera.testing.LabTestRule
 import androidx.lifecycle.Lifecycle
 import androidx.test.core.app.ApplicationProvider
 import androidx.test.filters.LargeTest
 import androidx.test.platform.app.InstrumentationRegistry
 import androidx.test.rule.GrantPermissionRule
 import androidx.test.uiautomator.UiDevice
-import androidx.testutils.RepeatRule
 import androidx.testutils.withActivity
 import java.util.concurrent.TimeUnit
 import kotlinx.coroutines.Dispatchers
@@ -74,12 +71,6 @@
     @get:Rule
     val permissionRule = GrantPermissionRule.grant(Manifest.permission.WRITE_EXTERNAL_STORAGE)
 
-    @get:Rule
-    val labTest: LabTestRule = LabTestRule()
-
-    @get:Rule
-    val repeatRule = RepeatRule()
-
     private val context = ApplicationProvider.getApplicationContext<Context>()
 
     companion object {
@@ -88,19 +79,11 @@
         fun parameters() = CameraXExtensionsTestUtil.getAllCameraIdExtensionModeCombinations()
     }
 
+    private var isTestStarted = false
     @Before
     fun setup() {
         assumeTrue(CameraXExtensionsTestUtil.isTargetDeviceAvailableForExtensions())
         CoreAppTestUtil.assumeCompatibleDevice()
-        // Clear the device UI and check if there is no dialog or lock screen on the top of the
-        // window before start the test.
-        CoreAppTestUtil.prepareDeviceUI(InstrumentationRegistry.getInstrumentation())
-        // Use the natural orientation throughout these tests to ensure the activity isn't
-        // recreated unexpectedly. This will also freeze the sensors until
-        // mDevice.unfreezeRotation() in the tearDown() method. Any simulated rotations will be
-        // explicitly initiated from within the test.
-        device.setOrientationNatural()
-
         val cameraProvider =
             ProcessCameraProvider.getInstance(context)[10000, TimeUnit.MILLISECONDS]
 
@@ -115,6 +98,16 @@
             cameraId,
             extensionMode
         )
+
+        // Clear the device UI and check if there is no dialog or lock screen on the top of the
+        // window before start the test.
+        CoreAppTestUtil.prepareDeviceUI(InstrumentationRegistry.getInstrumentation())
+        // Use the natural orientation throughout these tests to ensure the activity isn't
+        // recreated unexpectedly. This will also freeze the sensors until
+        // mDevice.unfreezeRotation() in the tearDown() method. Any simulated rotations will be
+        // explicitly initiated from within the test.
+        device.setOrientationNatural()
+        isTestStarted = true
     }
 
     @After
@@ -131,30 +124,28 @@
         )[10000, TimeUnit.MILLISECONDS]
         extensionsManager.shutdown()
 
-        // Unfreeze rotation so the device can choose the orientation via its own policy. Be nice
-        // to other tests :)
-        device.unfreezeRotation()
-        device.pressHome()
-        device.waitForIdle(HOME_TIMEOUT_MS)
+        if (isTestStarted) {
+            // Unfreeze rotation so the device can choose the orientation via its own policy. Be nice
+            // to other tests :)
+            device.unfreezeRotation()
+            device.pressHome()
+            device.waitForIdle(HOME_TIMEOUT_MS)
+        }
     }
 
-    @LabTestRule.LabTestOnly
     @Test
-    @RepeatRule.Repeat(times = CameraXExtensionsTestUtil.LARGE_STRESS_TEST_REPEAT_COUNT)
     fun pauseResumeActivity_checkPreviewInEachTime() {
         pauseResumeActivity_checkOutput_repeatedly(VERIFICATION_TARGET_PREVIEW)
     }
 
-    @LabTestRule.LabTestOnly
     @Test
-    @RepeatRule.Repeat(times = CameraXExtensionsTestUtil.LARGE_STRESS_TEST_REPEAT_COUNT)
     fun pauseResumeActivity_checkImageCaptureInEachTime() {
         pauseResumeActivity_checkOutput_repeatedly(VERIFICATION_TARGET_IMAGE_CAPTURE)
     }
 
     private fun pauseResumeActivity_checkOutput_repeatedly(
         verificationTarget: Int,
-        repeatCount: Int = STRESS_TEST_OPERATION_REPEAT_COUNT
+        repeatCount: Int = CameraXExtensionsTestUtil.getStressTestRepeatingCount()
     ) {
         val activityScenario = launchCameraExtensionsActivity(cameraId, extensionMode)
 
@@ -183,23 +174,19 @@
         }
     }
 
-    @LabTestRule.LabTestOnly
     @Test
-    @RepeatRule.Repeat(times = CameraXExtensionsTestUtil.LARGE_STRESS_TEST_REPEAT_COUNT)
     fun checkPreview_afterPauseResumeActivityRepeatedly() {
         pauseResumeActivityRepeatedly_thenCheckOutput(VERIFICATION_TARGET_PREVIEW)
     }
 
-    @LabTestRule.LabTestOnly
     @Test
-    @RepeatRule.Repeat(times = CameraXExtensionsTestUtil.LARGE_STRESS_TEST_REPEAT_COUNT)
     fun checkImageCapture_afterPauseResumeActivityRepeatedly() {
         pauseResumeActivityRepeatedly_thenCheckOutput(VERIFICATION_TARGET_IMAGE_CAPTURE)
     }
 
     private fun pauseResumeActivityRepeatedly_thenCheckOutput(
         verificationTarget: Int,
-        repeatCount: Int = STRESS_TEST_OPERATION_REPEAT_COUNT
+        repeatCount: Int = CameraXExtensionsTestUtil.getStressTestRepeatingCount()
     ) {
         val activityScenario = launchCameraExtensionsActivity(cameraId, extensionMode)
 
diff --git a/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/OpenCloseCameraStressTest.kt b/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/OpenCloseCameraStressTest.kt
index 465e321..d0a1279 100644
--- a/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/OpenCloseCameraStressTest.kt
+++ b/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/OpenCloseCameraStressTest.kt
@@ -27,13 +27,10 @@
 import androidx.camera.core.UseCase
 import androidx.camera.extensions.ExtensionsManager
 import androidx.camera.integration.extensions.util.CameraXExtensionsTestUtil
-import androidx.camera.integration.extensions.util.CameraXExtensionsTestUtil.STRESS_TEST_OPERATION_REPEAT_COUNT
-import androidx.camera.integration.extensions.util.CameraXExtensionsTestUtil.STRESS_TEST_REPEAT_COUNT
 import androidx.camera.integration.extensions.utils.CameraSelectorUtil
 import androidx.camera.lifecycle.ProcessCameraProvider
 import androidx.camera.testing.CameraUtil
 import androidx.camera.testing.CameraUtil.PreTestCameraIdList
-import androidx.camera.testing.LabTestRule
 import androidx.camera.testing.StressTestRule
 import androidx.camera.testing.SurfaceTextureProvider
 import androidx.camera.testing.fakes.FakeLifecycleOwner
@@ -41,7 +38,6 @@
 import androidx.test.core.app.ApplicationProvider
 import androidx.test.filters.LargeTest
 import androidx.test.filters.SdkSuppress
-import androidx.testutils.RepeatRule
 import com.google.common.truth.Truth.assertThat
 import java.util.concurrent.CountDownLatch
 import java.util.concurrent.TimeUnit
@@ -69,12 +65,6 @@
         PreTestCameraIdList(Camera2Config.defaultConfig())
     )
 
-    @get:Rule
-    val labTest: LabTestRule = LabTestRule()
-
-    @get:Rule
-    val repeatRule = RepeatRule()
-
     private val context = ApplicationProvider.getApplicationContext<Context>()
 
     private lateinit var cameraProvider: ProcessCameraProvider
@@ -140,16 +130,12 @@
             get() = CameraXExtensionsTestUtil.getAllCameraIdExtensionModeCombinations()
     }
 
-    @LabTestRule.LabTestOnly
     @Test
-    @RepeatRule.Repeat(times = STRESS_TEST_REPEAT_COUNT)
     fun openCloseCameraStressTest_withPreviewImageCapture(): Unit = runBlocking {
         bindUseCase_unbindAll_toCheckCameraState_repeatedly(preview, imageCapture)
     }
 
-    @LabTestRule.LabTestOnly
     @Test
-    @RepeatRule.Repeat(times = STRESS_TEST_REPEAT_COUNT)
     fun openCloseCameraStressTest_withPreviewImageCaptureImageAnalysis(): Unit = runBlocking {
         val imageAnalysis = ImageAnalysis.Builder().build()
         assumeTrue(camera.isUseCasesCombinationSupported(preview, imageCapture, imageAnalysis))
@@ -162,7 +148,7 @@
      */
     private fun bindUseCase_unbindAll_toCheckCameraState_repeatedly(
         vararg useCases: UseCase,
-        repeatCount: Int = STRESS_TEST_OPERATION_REPEAT_COUNT
+        repeatCount: Int = CameraXExtensionsTestUtil.getStressTestRepeatingCount()
     ): Unit = runBlocking {
         repeat(repeatCount) {
             val openCameraLatch = CountDownLatch(1)
diff --git a/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/OpenCloseCaptureSessionStressTest.kt b/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/OpenCloseCaptureSessionStressTest.kt
index 0ec8da2..5dedbdf 100644
--- a/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/OpenCloseCaptureSessionStressTest.kt
+++ b/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/OpenCloseCaptureSessionStressTest.kt
@@ -41,20 +41,16 @@
 import androidx.camera.extensions.ExtensionMode
 import androidx.camera.extensions.ExtensionsManager
 import androidx.camera.integration.extensions.util.CameraXExtensionsTestUtil
-import androidx.camera.integration.extensions.util.CameraXExtensionsTestUtil.STRESS_TEST_OPERATION_REPEAT_COUNT
-import androidx.camera.integration.extensions.util.CameraXExtensionsTestUtil.STRESS_TEST_REPEAT_COUNT
 import androidx.camera.integration.extensions.utils.CameraSelectorUtil
 import androidx.camera.lifecycle.ProcessCameraProvider
 import androidx.camera.testing.CameraUtil
 import androidx.camera.testing.CameraUtil.PreTestCameraIdList
-import androidx.camera.testing.LabTestRule
 import androidx.camera.testing.StressTestRule
 import androidx.camera.testing.SurfaceTextureProvider
 import androidx.camera.testing.fakes.FakeLifecycleOwner
 import androidx.test.core.app.ApplicationProvider
 import androidx.test.filters.LargeTest
 import androidx.test.filters.SdkSuppress
-import androidx.testutils.RepeatRule
 import com.google.common.truth.Truth.assertThat
 import java.util.concurrent.CountDownLatch
 import java.util.concurrent.TimeUnit
@@ -82,12 +78,6 @@
         PreTestCameraIdList(Camera2Config.defaultConfig())
     )
 
-    @get:Rule
-    val labTest: LabTestRule = LabTestRule()
-
-    @get:Rule
-    val repeatRule = RepeatRule()
-
     private val context = ApplicationProvider.getApplicationContext<Context>()
 
     private lateinit var cameraProvider: ProcessCameraProvider
@@ -150,16 +140,12 @@
         }
     }
 
-    @LabTestRule.LabTestOnly
     @Test
-    @RepeatRule.Repeat(times = STRESS_TEST_REPEAT_COUNT)
     fun openCloseCaptureSessionStressTest_withPreviewImageCapture(): Unit = runBlocking {
         bindUseCase_unbindAll_toCheckCameraEvent_repeatedly(preview, imageCapture)
     }
 
-    @LabTestRule.LabTestOnly
     @Test
-    @RepeatRule.Repeat(times = STRESS_TEST_REPEAT_COUNT)
     fun openCloseCaptureSessionStressTest_withPreviewImageCaptureImageAnalysis(): Unit =
         runBlocking {
             val imageAnalysis = ImageAnalysis.Builder().build()
@@ -177,7 +163,7 @@
      */
     private fun bindUseCase_unbindAll_toCheckCameraEvent_repeatedly(
         vararg useCases: UseCase,
-        repeatCount: Int = STRESS_TEST_OPERATION_REPEAT_COUNT
+        repeatCount: Int = CameraXExtensionsTestUtil.getStressTestRepeatingCount()
     ): Unit = runBlocking {
         for (i in 1..repeatCount) {
             // Arrange: resets the camera event monitor
diff --git a/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/SwitchAvailableModesStressTest.kt b/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/SwitchAvailableModesStressTest.kt
index eb30443..1a5fb9b 100644
--- a/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/SwitchAvailableModesStressTest.kt
+++ b/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/SwitchAvailableModesStressTest.kt
@@ -22,7 +22,6 @@
 import androidx.camera.extensions.ExtensionMode
 import androidx.camera.extensions.ExtensionsManager
 import androidx.camera.integration.extensions.util.CameraXExtensionsTestUtil
-import androidx.camera.integration.extensions.util.CameraXExtensionsTestUtil.STRESS_TEST_OPERATION_REPEAT_COUNT
 import androidx.camera.integration.extensions.util.CameraXExtensionsTestUtil.launchCameraExtensionsActivity
 import androidx.camera.integration.extensions.util.HOME_TIMEOUT_MS
 import androidx.camera.integration.extensions.util.takePictureAndWaitForImageSavedIdle
@@ -31,7 +30,6 @@
 import androidx.camera.testing.CameraUtil
 import androidx.camera.testing.CameraUtil.PreTestCameraIdList
 import androidx.camera.testing.CoreAppTestUtil
-import androidx.camera.testing.LabTestRule
 import androidx.camera.testing.StressTestRule
 import androidx.test.core.app.ApplicationProvider
 import androidx.test.espresso.Espresso
@@ -41,7 +39,6 @@
 import androidx.test.platform.app.InstrumentationRegistry
 import androidx.test.rule.GrantPermissionRule
 import androidx.test.uiautomator.UiDevice
-import androidx.testutils.RepeatRule
 import androidx.testutils.withActivity
 import java.util.concurrent.TimeUnit
 import kotlinx.coroutines.Dispatchers
@@ -72,12 +69,6 @@
     @get:Rule
     val permissionRule = GrantPermissionRule.grant(Manifest.permission.WRITE_EXTERNAL_STORAGE)
 
-    @get:Rule
-    val labTest: LabTestRule = LabTestRule()
-
-    @get:Rule
-    val repeatRule = RepeatRule()
-
     private val context = ApplicationProvider.getApplicationContext<Context>()
 
     private var firstSupportedExtensionMode: Int = ExtensionMode.NONE
@@ -92,18 +83,12 @@
         fun parameters() = CameraUtil.getBackwardCompatibleCameraIdListOrThrow()
     }
 
+    private var isTestStarted = false
+
     @Before
     fun setup() {
         assumeTrue(CameraUtil.deviceHasCamera())
         assumeTrue(CameraXExtensionsTestUtil.isTargetDeviceAvailableForExtensions())
-        // Clear the device UI and check if there is no dialog or lock screen on the top of the
-        // window before start the test.
-        CoreAppTestUtil.prepareDeviceUI(InstrumentationRegistry.getInstrumentation())
-        // Use the natural orientation throughout these tests to ensure the activity isn't
-        // recreated unexpectedly. This will also freeze the sensors until
-        // mDevice.unfreezeRotation() in the tearDown() method. Any simulated rotations will be
-        // explicitly initiated from within the test.
-        device.setOrientationNatural()
 
         val cameraProvider =
             ProcessCameraProvider.getInstance(context)[10000, TimeUnit.MILLISECONDS]
@@ -121,6 +106,16 @@
 
         firstSupportedExtensionMode =
             CameraXExtensionsTestUtil.getFirstSupportedExtensionMode(extensionsManager, cameraId)
+
+        // Clear the device UI and check if there is no dialog or lock screen on the top of the
+        // window before start the test.
+        CoreAppTestUtil.prepareDeviceUI(InstrumentationRegistry.getInstrumentation())
+        // Use the natural orientation throughout these tests to ensure the activity isn't
+        // recreated unexpectedly. This will also freeze the sensors until
+        // mDevice.unfreezeRotation() in the tearDown() method. Any simulated rotations will be
+        // explicitly initiated from within the test.
+        device.setOrientationNatural()
+        isTestStarted = true
     }
 
     @After
@@ -137,16 +132,16 @@
         )[10000, TimeUnit.MILLISECONDS]
         extensionsManager.shutdown()
 
-        // Unfreeze rotation so the device can choose the orientation via its own policy. Be nice
-        // to other tests :)
-        device.unfreezeRotation()
-        device.pressHome()
-        device.waitForIdle(HOME_TIMEOUT_MS)
+        if (isTestStarted) {
+            // Unfreeze rotation so the device can choose the orientation via its own policy. Be nice
+            // to other tests :)
+            device.unfreezeRotation()
+            device.pressHome()
+            device.waitForIdle(HOME_TIMEOUT_MS)
+        }
     }
 
-    @LabTestRule.LabTestOnly
     @Test
-    @RepeatRule.Repeat(times = CameraXExtensionsTestUtil.STRESS_TEST_REPEAT_COUNT)
     fun switchModeTenTimes_canCaptureImageInEachTime() {
         val activityScenario = launchCameraExtensionsActivity(cameraId, firstSupportedExtensionMode)
 
@@ -154,7 +149,7 @@
             use {
                 waitForPreviewViewStreaming()
 
-                repeat(STRESS_TEST_OPERATION_REPEAT_COUNT) {
+                repeat(CameraXExtensionsTestUtil.getStressTestRepeatingCount()) {
                     withActivity { resetPreviewViewStreamingStateIdlingResource() }
 
                     // Switches to next available mode
@@ -171,9 +166,7 @@
         }
     }
 
-    @LabTestRule.LabTestOnly
     @Test
-    @RepeatRule.Repeat(times = CameraXExtensionsTestUtil.STRESS_TEST_REPEAT_COUNT)
     fun canCaptureImage_afterSwitchModeTenTimes() {
         val activityScenario = launchCameraExtensionsActivity(cameraId, firstSupportedExtensionMode)
 
@@ -181,7 +174,7 @@
             use {
                 waitForPreviewViewStreaming()
 
-                repeat(STRESS_TEST_OPERATION_REPEAT_COUNT) {
+                repeat(CameraXExtensionsTestUtil.getStressTestRepeatingCount()) {
                     withActivity { resetPreviewViewStreamingStateIdlingResource() }
 
                     // Switches to next available mode
diff --git a/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/SwitchCameraStressTest.kt b/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/SwitchCameraStressTest.kt
index 12a63e2..3d40700 100644
--- a/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/SwitchCameraStressTest.kt
+++ b/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/SwitchCameraStressTest.kt
@@ -22,7 +22,6 @@
 import androidx.camera.core.CameraSelector
 import androidx.camera.extensions.ExtensionsManager
 import androidx.camera.integration.extensions.util.CameraXExtensionsTestUtil
-import androidx.camera.integration.extensions.util.CameraXExtensionsTestUtil.STRESS_TEST_OPERATION_REPEAT_COUNT
 import androidx.camera.integration.extensions.util.CameraXExtensionsTestUtil.launchCameraExtensionsActivity
 import androidx.camera.integration.extensions.util.HOME_TIMEOUT_MS
 import androidx.camera.integration.extensions.util.takePictureAndWaitForImageSavedIdle
@@ -32,14 +31,12 @@
 import androidx.camera.testing.CameraUtil
 import androidx.camera.testing.CameraUtil.PreTestCameraIdList
 import androidx.camera.testing.CoreAppTestUtil
-import androidx.camera.testing.LabTestRule
 import androidx.camera.testing.StressTestRule
 import androidx.test.core.app.ApplicationProvider
 import androidx.test.filters.LargeTest
 import androidx.test.platform.app.InstrumentationRegistry
 import androidx.test.rule.GrantPermissionRule
 import androidx.test.uiautomator.UiDevice
-import androidx.testutils.RepeatRule
 import androidx.testutils.withActivity
 import java.util.concurrent.TimeUnit
 import org.junit.After
@@ -69,12 +66,6 @@
     @get:Rule
     val permissionRule = GrantPermissionRule.grant(Manifest.permission.WRITE_EXTERNAL_STORAGE)
 
-    @get:Rule
-    val labTest: LabTestRule = LabTestRule()
-
-    @get:Rule
-    val repeatRule = RepeatRule()
-
     private val context = ApplicationProvider.getApplicationContext<Context>()
 
     private var startingExtensionMode: Int = extensionMode
@@ -88,19 +79,11 @@
         fun parameters() = ExtensionModeUtil.AVAILABLE_EXTENSION_MODES
     }
 
+    private var isTestStarted = false
     @Before
     fun setup() {
         assumeTrue(CameraUtil.deviceHasCamera())
         assumeTrue(CameraXExtensionsTestUtil.isTargetDeviceAvailableForExtensions())
-        // Clear the device UI and check if there is no dialog or lock screen on the top of the
-        // window before start the test.
-        CoreAppTestUtil.prepareDeviceUI(InstrumentationRegistry.getInstrumentation())
-        // Use the natural orientation throughout these tests to ensure the activity isn't
-        // recreated unexpectedly. This will also freeze the sensors until
-        // mDevice.unfreezeRotation() in the tearDown() method. Any simulated rotations will be
-        // explicitly initiated from within the test.
-        device.setOrientationNatural()
-
         val cameraProvider =
             ProcessCameraProvider.getInstance(context)[10000, TimeUnit.MILLISECONDS]
 
@@ -127,6 +110,16 @@
                 DEFAULT_BACK_CAMERA_ID
             )
         }
+
+        // Clear the device UI and check if there is no dialog or lock screen on the top of the
+        // window before start the test.
+        CoreAppTestUtil.prepareDeviceUI(InstrumentationRegistry.getInstrumentation())
+        // Use the natural orientation throughout these tests to ensure the activity isn't
+        // recreated unexpectedly. This will also freeze the sensors until
+        // mDevice.unfreezeRotation() in the tearDown() method. Any simulated rotations will be
+        // explicitly initiated from within the test.
+        device.setOrientationNatural()
+        isTestStarted = true
     }
 
     @After
@@ -141,16 +134,16 @@
         )[10000, TimeUnit.MILLISECONDS]
         extensionsManager.shutdown()
 
-        // Unfreeze rotation so the device can choose the orientation via its own policy. Be nice
-        // to other tests :)
-        device.unfreezeRotation()
-        device.pressHome()
-        device.waitForIdle(HOME_TIMEOUT_MS)
+        if (isTestStarted) {
+            // Unfreeze rotation so the device can choose the orientation via its own policy. Be nice
+            // to other tests :)
+            device.unfreezeRotation()
+            device.pressHome()
+            device.waitForIdle(HOME_TIMEOUT_MS)
+        }
     }
 
-    @LabTestRule.LabTestOnly
     @Test
-    @RepeatRule.Repeat(times = CameraXExtensionsTestUtil.STRESS_TEST_REPEAT_COUNT)
     fun switchCameraTenTimes_canCaptureImageInEachTime() {
         val activityScenario = launchCameraExtensionsActivity(
             DEFAULT_BACK_CAMERA_ID,
@@ -159,7 +152,7 @@
 
         with(activityScenario) {
             use {
-                repeat(STRESS_TEST_OPERATION_REPEAT_COUNT) {
+                repeat(CameraXExtensionsTestUtil.getStressTestRepeatingCount()) {
                     // Waits for the take picture success callback.
                     takePictureAndWaitForImageSavedIdle()
 
@@ -178,9 +171,7 @@
         }
     }
 
-    @LabTestRule.LabTestOnly
     @Test
-    @RepeatRule.Repeat(times = CameraXExtensionsTestUtil.STRESS_TEST_REPEAT_COUNT)
     fun canCaptureImage_afterSwitchCameraTenTimes() {
         val activityScenario = launchCameraExtensionsActivity(
             DEFAULT_BACK_CAMERA_ID,
@@ -189,7 +180,7 @@
 
         with(activityScenario) {
             use {
-                repeat(STRESS_TEST_OPERATION_REPEAT_COUNT) {
+                repeat(CameraXExtensionsTestUtil.getStressTestRepeatingCount()) {
                     withActivity {
                         // Switches camera
                         switchCameras()
diff --git a/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/camera2extensions/Camera2ExtensionsOpenCloseStressTest.kt b/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/camera2extensions/Camera2ExtensionsOpenCloseStressTest.kt
index 8d40fb8..c42d674 100644
--- a/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/camera2extensions/Camera2ExtensionsOpenCloseStressTest.kt
+++ b/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/camera2extensions/Camera2ExtensionsOpenCloseStressTest.kt
@@ -20,15 +20,15 @@
 import android.hardware.camera2.CameraManager
 import androidx.camera.camera2.Camera2Config
 import androidx.camera.integration.extensions.util.Camera2ExtensionsTestUtil
-import androidx.camera.integration.extensions.util.Camera2ExtensionsTestUtil.STRESS_TEST_OPERATION_REPEAT_COUNT
 import androidx.camera.integration.extensions.util.Camera2ExtensionsTestUtil.assertCanOpenExtensionsSession
 import androidx.camera.testing.CameraUtil
-import androidx.camera.testing.LabTestRule
 import androidx.camera.testing.StressTestRule
 import androidx.test.core.app.ApplicationProvider
 import androidx.test.filters.LargeTest
 import androidx.test.filters.SdkSuppress
 import kotlinx.coroutines.runBlocking
+import org.junit.Assume.assumeTrue
+import org.junit.Before
 import org.junit.ClassRule
 import org.junit.Rule
 import org.junit.Test
@@ -47,8 +47,6 @@
         CameraUtil.PreTestCameraIdList(Camera2Config.defaultConfig())
     )
 
-    @get:Rule
-    val labTest: LabTestRule = LabTestRule()
     companion object {
         @ClassRule
         @JvmField val stressTest = StressTestRule()
@@ -61,10 +59,13 @@
     private val context = ApplicationProvider.getApplicationContext<Context>()
     private val cameraManager = context.getSystemService(Context.CAMERA_SERVICE) as CameraManager
 
-    @LabTestRule.LabTestOnly
+    @Before
+    fun setUp() {
+        assumeTrue(Camera2ExtensionsTestUtil.isTargetDeviceExcludedForExtensionsTest())
+    }
     @Test
     fun openCloseExtensionSession(): Unit = runBlocking {
-        repeat(STRESS_TEST_OPERATION_REPEAT_COUNT) {
+        repeat(Camera2ExtensionsTestUtil.getStressTestRepeatingCount()) {
             assertCanOpenExtensionsSession(cameraManager, cameraId, extensionMode)
         }
 
diff --git a/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/camera2extensions/Camera2ExtensionsSwitchCameraStressTest.kt b/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/camera2extensions/Camera2ExtensionsSwitchCameraStressTest.kt
index 63e81cd..9756e72 100644
--- a/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/camera2extensions/Camera2ExtensionsSwitchCameraStressTest.kt
+++ b/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/camera2extensions/Camera2ExtensionsSwitchCameraStressTest.kt
@@ -23,13 +23,13 @@
 import androidx.camera.integration.extensions.util.Camera2ExtensionsTestUtil.assertCanOpenExtensionsSession
 import androidx.camera.integration.extensions.util.Camera2ExtensionsTestUtil.findNextSupportedCameraId
 import androidx.camera.testing.CameraUtil
-import androidx.camera.testing.LabTestRule
 import androidx.camera.testing.StressTestRule
 import androidx.test.core.app.ApplicationProvider
 import androidx.test.filters.LargeTest
 import androidx.test.filters.SdkSuppress
 import kotlinx.coroutines.runBlocking
 import org.junit.Assume.assumeTrue
+import org.junit.Before
 import org.junit.ClassRule
 import org.junit.Rule
 import org.junit.Test
@@ -48,8 +48,6 @@
         CameraUtil.PreTestCameraIdList(Camera2Config.defaultConfig())
     )
 
-    @get:Rule
-    val labTest: LabTestRule = LabTestRule()
     companion object {
         @ClassRule
         @JvmField val stressTest = StressTestRule()
@@ -62,12 +60,16 @@
     private val context = ApplicationProvider.getApplicationContext<Context>()
     private val cameraManager = context.getSystemService(Context.CAMERA_SERVICE) as CameraManager
 
-    @LabTestRule.LabTestOnly
+    @Before
+    fun setUp() {
+        assumeTrue(Camera2ExtensionsTestUtil.isTargetDeviceExcludedForExtensionsTest())
+    }
+
     @Test
     fun switchCameras(): Unit = runBlocking {
         val nextCameraId = findNextSupportedCameraId(context, cameraId, extensionMode)
         assumeTrue(nextCameraId != null)
-        repeat(Camera2ExtensionsTestUtil.STRESS_TEST_OPERATION_REPEAT_COUNT) {
+        repeat(Camera2ExtensionsTestUtil.getStressTestRepeatingCount()) {
             assertCanOpenExtensionsSession(cameraManager, cameraId, extensionMode)
             assertCanOpenExtensionsSession(cameraManager, nextCameraId!!, extensionMode)
         }
diff --git a/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/camera2extensions/Camera2ExtensionsSwitchModeStressTest.kt b/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/camera2extensions/Camera2ExtensionsSwitchModeStressTest.kt
index 504edf7d..47b7114 100644
--- a/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/camera2extensions/Camera2ExtensionsSwitchModeStressTest.kt
+++ b/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/camera2extensions/Camera2ExtensionsSwitchModeStressTest.kt
@@ -23,13 +23,13 @@
 import androidx.camera.integration.extensions.util.Camera2ExtensionsTestUtil.EXTENSION_NOT_FOUND
 import androidx.camera.integration.extensions.util.Camera2ExtensionsTestUtil.findNextEffectMode
 import androidx.camera.testing.CameraUtil
-import androidx.camera.testing.LabTestRule
 import androidx.camera.testing.StressTestRule
 import androidx.test.core.app.ApplicationProvider
 import androidx.test.filters.LargeTest
 import androidx.test.filters.SdkSuppress
 import kotlinx.coroutines.runBlocking
 import org.junit.Assume.assumeTrue
+import org.junit.Before
 import org.junit.ClassRule
 import org.junit.Rule
 import org.junit.Test
@@ -48,9 +48,6 @@
         CameraUtil.PreTestCameraIdList(Camera2Config.defaultConfig())
     )
 
-    @get:Rule
-    val labTest: LabTestRule = LabTestRule()
-
     companion object {
         @ClassRule
         @JvmField
@@ -64,12 +61,16 @@
     private val context = ApplicationProvider.getApplicationContext<Context>()
     private val cameraManager = context.getSystemService(Context.CAMERA_SERVICE) as CameraManager
 
-    @LabTestRule.LabTestOnly
+    @Before
+    fun setUp() {
+        assumeTrue(Camera2ExtensionsTestUtil.isTargetDeviceExcludedForExtensionsTest())
+    }
+
     @Test
     fun switchModes(): Unit = runBlocking {
         val nextMode = findNextEffectMode(context, cameraId, extensionMode)
         assumeTrue(nextMode != EXTENSION_NOT_FOUND)
-        repeat(Camera2ExtensionsTestUtil.STRESS_TEST_OPERATION_REPEAT_COUNT) {
+        repeat(Camera2ExtensionsTestUtil.getStressTestRepeatingCount()) {
             Camera2ExtensionsTestUtil.assertCanOpenExtensionsSession(
                 cameraManager,
                 cameraId,
diff --git a/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/util/Camera2ExtensionsTestUtil.kt b/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/util/Camera2ExtensionsTestUtil.kt
index 6923cb0..5a32a44 100644
--- a/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/util/Camera2ExtensionsTestUtil.kt
+++ b/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/util/Camera2ExtensionsTestUtil.kt
@@ -30,6 +30,7 @@
 import android.hardware.camera2.params.OutputConfiguration
 import android.media.Image
 import android.media.ImageReader
+import android.os.Build
 import android.os.Handler
 import android.os.Looper
 import android.view.Surface
@@ -37,6 +38,7 @@
 import androidx.camera.core.impl.utils.executor.CameraXExecutors
 import androidx.camera.integration.extensions.utils.Camera2ExtensionsUtil.AVAILABLE_CAMERA2_EXTENSION_MODES
 import androidx.camera.testing.CameraUtil
+import androidx.camera.testing.LabTestRule
 import androidx.camera.testing.SurfaceTextureProvider
 import com.google.common.truth.Truth.assertThat
 import java.util.concurrent.Executors
@@ -45,11 +47,29 @@
 
 @RequiresApi(31)
 object Camera2ExtensionsTestUtil {
-
-    const val STRESS_TEST_OPERATION_REPEAT_COUNT = 10
+    private const val LAB_STRESS_TEST_OPERATION_REPEAT_COUNT = 10
+    private const val STRESS_TEST_OPERATION_REPEAT_COUNT = 3
     const val EXTENSION_NOT_FOUND = -1
 
     /**
+     * Returns whether the target device is excluded for extensions test
+     */
+    @JvmStatic
+    fun isTargetDeviceExcludedForExtensionsTest(): Boolean {
+        // Skips Cuttlefish device since actually it is not a real marketing device which supports
+        // extensions and it will cause pre-submit failures.
+        return !Build.MODEL.contains("Cuttlefish", true)
+    }
+
+    @JvmStatic
+    fun getStressTestRepeatingCount() =
+        if (LabTestRule.isInLabTest()) {
+            LAB_STRESS_TEST_OPERATION_REPEAT_COUNT
+        } else {
+            STRESS_TEST_OPERATION_REPEAT_COUNT
+        }
+
+    /**
      * Gets a list of all camera id and extension mode combinations.
      */
     @JvmStatic
@@ -163,7 +183,6 @@
 
         if (verifyOutput) {
             deferredPreviewFrame.await()
-
             val image = takePicture(cameraDevice, extensionSession, imageReader)
             assertThat(image).isNotNull()
             image!!.close()
diff --git a/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/util/CameraXExtensionsTestUtil.kt b/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/util/CameraXExtensionsTestUtil.kt
index 0e1fe04..70f7440 100644
--- a/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/util/CameraXExtensionsTestUtil.kt
+++ b/camera/integration-tests/extensionstestapp/src/androidTest/java/androidx/camera/integration/extensions/util/CameraXExtensionsTestUtil.kt
@@ -53,6 +53,7 @@
 import androidx.camera.integration.extensions.utils.ExtensionModeUtil
 import androidx.camera.integration.extensions.utils.ExtensionModeUtil.AVAILABLE_EXTENSION_MODES
 import androidx.camera.testing.CameraUtil
+import androidx.camera.testing.LabTestRule
 import androidx.test.core.app.ActivityScenario
 import androidx.test.core.app.ApplicationProvider
 import com.google.common.truth.Truth.assertThat
@@ -271,15 +272,13 @@
         return activityScenario
     }
 
-    /**
-     * Large stress test repeat count to run the test
-     */
-    const val LARGE_STRESS_TEST_REPEAT_COUNT = 1
-
-    /**
-     * Stress test repeat count to run the test
-     */
-    const val STRESS_TEST_REPEAT_COUNT = 2
+    @JvmStatic
+    fun getStressTestRepeatingCount() =
+        if (LabTestRule.isInLabTest()) {
+            LAB_STRESS_TEST_OPERATION_REPEAT_COUNT
+        } else {
+            STRESS_TEST_OPERATION_REPEAT_COUNT
+        }
 
     /**
      * Stress test target testing operation count.
@@ -295,7 +294,8 @@
      * </ul>
      *
      */
-    const val STRESS_TEST_OPERATION_REPEAT_COUNT = 10
+    private const val LAB_STRESS_TEST_OPERATION_REPEAT_COUNT = 10
+    private const val STRESS_TEST_OPERATION_REPEAT_COUNT = 3
 
     /**
      * Constant to specify that the verification target is [Preview].
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-af/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-af/strings.xml
index 55e3e25..7e520e0 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-af/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-af/strings.xml
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Opdaterings toegelaat vir terughandelinge."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Wisseltoets is geaktiveer"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Wisseltoets is gedeaktiveer"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Demonstrasies oor diverse template"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Stal demonstrasies uit"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Demonstrasie van templaatuitlegte"</string>
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 054c3ed..9bb3b04 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
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"ዝማኔዎች በዳራ ክወናዎች ላይ ይፈቀዳሉ።"</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"የመቀያየር ሙከራ ነቅቷል"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"የመቀያየር ሙከራ ተሰናክሏል"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"የተለያዩ ቅንብር ደንቦች ቅንጭብ ማሳያዎች"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"የመሳያ ቅንጭብ ማሳያ"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"የቅንብር ደንብ አቀማመጥ ቅንጭብ ማሳያዎች"</string>
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 e1c4cb1..8c2f551 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
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"التحديثات المسموح بها على العمليات التي تتم بالخلفية"</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"تم تفعيل زر إيقاف/تفعيل الاختبار."</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"تم إيقاف زر إيقاف/تفعيل الاختبار."</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"إصدارات تجريبية لنموذج ميزات متنوّعة"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"عرض الإصدارات التجريبية"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"عروض توضيحية لتنسيقات النماذج"</string>
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 f235261e..d3ce9db 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
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"নেপথ্যৰ কাৰ্যত আপডে’টৰ অনুমতি আছে।"</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"পৰীক্ষা ট’গল কৰাৰ সুবিধা সক্ষম কৰা হৈছে"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"পৰীক্ষা ট’গল কৰাৰ সুবিধা অক্ষম কৰা হৈছে"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"সানমিহলি টেম্পলে’টৰ ডেম’"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"ডেম’ দেখুৱাওক"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"টেমপ্লে’ট লে’আউটৰ ডেম’"</string>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-az/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-az/strings.xml
index 20a00bb..c469688 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-az/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-az/strings.xml
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Geri əməliyyatlar üzrə güncəlləmələrə icazə verilir."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Keçirmə Testi Aktivdir"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Keçirmə Testi Deaktivdir"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Digər Şablon Demoları"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Vitrin Demoları"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Şablon Düzən Demoları"</string>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-b+sr+Latn/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-b+sr+Latn/strings.xml
index d69886e..5736482 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-b+sr+Latn/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-b+sr+Latn/strings.xml
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Ažuriranja su dozvoljena za operacije u pozadini."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Test uključivanja/isključivanja je omogućen"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Test uključivanja/isključivanja je onemogućen"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Demonstracije različitih šablona"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Demonstracije prikazivanja"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Demonstracije izgleda šablona"</string>
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 c3f85d6..64e3bad 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
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Абнаўленні дазволены для аперацый вяртання."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Праверка пераключэння ўключана"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Праверка пераключэння адключана"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Дэманстрацыі розных шаблонаў"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Дэманстрацыі выбранага"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Дэманстрацыі макета шаблона"</string>
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 12ce255..d0f1399 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
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Актуализациите са разрешени за операции за връщане назад."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Тестът с превключвател е активиран"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Тестът с превключвател е деактивиран"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Демонстрации на разни шаблони"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Демонстрации на Showcase"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Демонстрации на оформления за шаблон"</string>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-bn/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-bn/strings.xml
index b82d78c..11da417 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-bn/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-bn/strings.xml
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"পিছনের পৃষ্ঠাতে গিয়ে পরিবর্তন করা যাবে।"</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"টগল টেস্ট চালু করা হয়েছে"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"টগল টেস্ট বন্ধ করা হয়েছে"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"অন্যান্য টেমপ্লেটের ডেমো"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"ডেমো শোকেস করুন"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"টেমপ্লেট লেআউট সংক্রান্ত ডেমো"</string>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-bs/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-bs/strings.xml
index 67b8290..1e8f931 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-bs/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-bs/strings.xml
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Dozvoljena su ažuriranja u vezi s radnjama navigiranja prema nazad."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Testiranje uključivanja/isključivanja je omogućeno"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Testiranje uključivanja/isključivanja je onemogućeno"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Demo verzije raznih šablona"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Demo verzije predstavljanja"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Demo verzije rasporeda predloška"</string>
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 a501c63..dadd3f8 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
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Es permeten actualitzacions a les operacions d\'anar enrere."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Prova de commutació activada"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Prova de commutació desactivada"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Demostracions de plantilles diverses"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Demostracions de Showcase"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Demostracions de dissenys de plantilles"</string>
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 a155b97..39f3af4 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
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"U zpětných operací jsou povoleny aktualizace."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Test přepínače je povolen"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Test přepínače byl zakázán"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <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>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Ukázky šablon rozvržení"</string>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-da/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-da/strings.xml
index 83d47d3..295f3de 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-da/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-da/strings.xml
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Opdateringer er tilladt ved handlinger, hvor der navigeres tilbage."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Test af kontakt er aktiveret"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Test af kontakt er deaktiveret"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Demonstrationer af diverse skabeloner"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Vis demonstrationer"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Demoer for skabelonlayout"</string>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-de/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-de/strings.xml
index 2340308..07b4df0 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-de/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-de/strings.xml
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Updates beim Zurückgehen erlaubt."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Test der Ein-/Aus-Schaltfläche aktiviert"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Test der Ein-/Aus-Schaltfläche deaktiviert"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Demos der verschiedenen Vorlagen"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Demos anzeigen"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Demo der Layoutvorlagen"</string>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-el/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-el/strings.xml
index a2a371a..a239339 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-el/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-el/strings.xml
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Οι ενημερώσεις επιτρέπονται σε λειτουργίες παρασκηνίου."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Η εναλλαγή δοκιμής ενεργοποιήθηκε"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Η εναλλαγή δοκιμής απενεργοποιήθηκε"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Διάφορες επιδείξεις προτύπων"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Προβολή επιδείξεων"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Επιδείξεις διάταξης προτύπου"</string>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-en-rAU/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-en-rAU/strings.xml
index 7e3dd65..0fe85a9 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-en-rAU/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-en-rAU/strings.xml
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Updates allowed on back operations."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Toggle test enabled"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Toggle test disabled"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Misc templates demos"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Showcase demos"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Template layout demos"</string>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-en-rCA/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-en-rCA/strings.xml
index 7e3dd65..0fe85a9 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-en-rCA/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-en-rCA/strings.xml
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Updates allowed on back operations."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Toggle test enabled"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Toggle test disabled"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Misc templates demos"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Showcase demos"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Template layout demos"</string>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-en-rGB/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-en-rGB/strings.xml
index 7e3dd65..0fe85a9 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-en-rGB/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-en-rGB/strings.xml
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Updates allowed on back operations."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Toggle test enabled"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Toggle test disabled"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Misc templates demos"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Showcase demos"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Template layout demos"</string>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-en-rIN/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-en-rIN/strings.xml
index 7e3dd65..0fe85a9 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-en-rIN/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-en-rIN/strings.xml
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Updates allowed on back operations."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Toggle test enabled"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Toggle test disabled"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Misc templates demos"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Showcase demos"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Template layout demos"</string>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-en-rXC/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-en-rXC/strings.xml
index fc8c080..87690c0 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-en-rXC/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-en-rXC/strings.xml
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‎‎‏‏‎‎‏‏‏‎‎‏‎‎‏‏‏‏‏‎‏‎‏‏‏‎‎‏‎‏‎‎‎‎‏‏‎‎‎‎Updates allowed on back operations.‎‏‎‎‏‎"</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‏‏‎‏‎‎‎‏‎‎‎‎‏‎‏‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‎‏‎‏‏‏‎‎‏‏‎‎‎‎‏‏‏‎‏‎‎‏‏‏‎‎‎Toggle Test Enabled‎‏‎‎‏‎"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‏‎‏‎‎‎‏‎‎‏‎‏‏‎‏‎‎‏‏‏‎‏‎‏‎‏‎‎‏‏‏‎‏‎‎‏‎‎‏‎‏‏‏‎‎‏‎‏‎‎‎‎‎Toggle Test Disabled‎‏‎‎‏‎"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‏‎‏‎‏‏‎‎‏‏‏‎‎‎‏‎‎‎‎‎‏‎‎‎‏‎‎‎‎‎‎‎‏‎‏‎‎‎‏‎‎‎‏‏‎‏‏‎‎‏‏‎‎‏‎‎Misc Templates Demos‎‏‎‎‏‎"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‏‎‏‏‎‎‏‏‎‏‎‎‏‏‏‎‏‎‎‏‎‎‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‏‏‏‎‎‏‎‎‎‎‎‎‏‏‎‎‎‎Showcase Demos‎‏‎‎‏‎"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‎‏‏‏‏‎‎‎‎‎‏‏‎‏‏‎‎‏‎‎‎‏‎‎‎‏‏‎‎‎‎‏‏‏‏‎‎‏‎‏‏‏‎‎‏‎‏‎‎‏‎‏‎‎‏‏‏‎Template Layout Demos‎‏‎‎‏‎"</string>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-es-rUS/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-es-rUS/strings.xml
index a72da64..6244a1e 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-es-rUS/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-es-rUS/strings.xml
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Se permiten las actualizaciones en las operaciones de retroceso."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Prueba del botón de activación habilitada"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Prueba del botón de activación desactivada"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Demostraciones de plantillas varias"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Demostraciones de Showcase"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Demostración de plantilla de diseño"</string>
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 d6b0803..19157c5 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
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Actualizaciones permitidas al ir atrás."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Prueba del interruptor habilitada"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Prueba del interruptor inhabilitada"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Otras demos de plantillas"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Demos de Showcase"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Demos de diseño de plantillas"</string>
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 45a8f41..a3b34d1 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
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Värskendused on tagasiminekutoimingute korral lubatud."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Lülititest on lubatud"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Lülititest on keelatud"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Mitmesuguste mallide demod"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Esiletõstmise demod"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Malli paigutuse demod"</string>
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 d552993..1b00ccd 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
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Atzeko planoko eragiketak eguneratu egin daitezke."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Gaitu da etengailuaren proba"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Desgaitu da etengailuaren proba"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Bestelako txantiloien demo-bertsioak"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Erakutsi demo-bertsioak"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Txantiloi-diseinuen demo-bertsioak"</string>
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 2a67037..8ae6d3a 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
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"به‌روزرسانی در عملیات‌های برگشتی مجاز است."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"آزمایش تغییر وضعیت فعال شد"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"آزمایش تغییر وضعیت غیرفعال شد"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"الگوهای متفرقه نمونه"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"نمایش نمونه‌ها"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"نسخه‌های نمونه طرح‌بندی الگو"</string>
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 252b6b5..ba21df3 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
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Päivitykset sallittu siirryttäessä edelliseen näkymään."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Vaihtotesti käytössä"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Vaihtotesti pois käytöstä"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Sekalaisten mallien esittelyt"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Showcase-esittelyt"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Malliasettelujen esittelyt"</string>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-fr-rCA/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-fr-rCA/strings.xml
index 59fc2d8..729c43c 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-fr-rCA/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-fr-rCA/strings.xml
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Mises à jour autorisées lors des opérations de retour."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Essai du commutateur activé"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Essai du commutateur désactivé"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <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>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Démos de mise en page du modèle"</string>
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 a4d8f66..242bce2 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
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Mises à jour autorisées sur les opérations de retour."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Test d\'activation/de désactivation activé"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Test d\'activation/de désactivation désactivé"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <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>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Démos de mise en page du modèle"</string>
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 27f3587..edd396c 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
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Permítense actualizacións ao ir á pantalla anterior."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Activouse a proba do interruptor"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Desactivouse a proba do interruptor"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <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>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Demostracións de deseños de modelo"</string>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-gu/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-gu/strings.xml
index 1c6c29a..024dfc7 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-gu/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-gu/strings.xml
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"અગાઉના કાર્યો પર અપડેટ કરવાની મંજૂરી છે."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"ટૉગલનું પરીક્ષણ ચાલુ કર્યું"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"ટૉગલનું પરીક્ષણ બંધ કર્યું"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"વિવિધ નમૂનાઓના ડેમો"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"ડેમો બતાવો"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"નમૂનાના લેઆઉટનો ડેમો"</string>
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 cd68634..958cda2 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
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"पिछले पेज पर जाकर बदलाव किए जा सकते हैं."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"टॉगल टेस्ट चालू किया गया"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"टॉगल टेस्ट बंद किया गया"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"दूसरे टेंप्लेट के डेमो"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"डेमो दिखाएं"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"टेंप्लेट लेआउट के डेमो"</string>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-hr/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-hr/strings.xml
index be79b15..ef8956d 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-hr/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-hr/strings.xml
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Ažuriranja dopuštena na prethodnim radnjama."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Testiranje prekidača omogućeno"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Testiranje prekidača onemogućeno"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Pokazne verzije raznih predložaka"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Prikaži pokazne verzije"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Pokazne verzije izgleda predloška"</string>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-hu/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-hu/strings.xml
index d5b17be..c0b3a24 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-hu/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-hu/strings.xml
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Frissítések engedélyezve a visszalépési műveleteknél."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Kapcsolóteszt engedélyezve"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Kapcsolóteszt letiltva"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Egyéb sablonok – demók"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Kirakat – demók"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Sablonelrendezések bemutatói"</string>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-hy/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-hy/strings.xml
index cc8a1f8..a7155aa 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-hy/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-hy/strings.xml
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Թարմացումները թույլատրված են՝ ֆոնային ռեժիմում գործողություններ կատարելու համար։"</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Փոխանջատիչի փորձարկումը միացված է"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Փոխանջատիչի փորձարկումն անջատված է"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Այլ ձևանմուշների դեմոներ"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Ցուցադրել դեմոները"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Ձևանմուշի դասավորության դեմոներ"</string>
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 adc5479..b2d0b16 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
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Update diizinkan di halaman sebelumnya."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Pengujian Tombol Diaktifkan"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Pengujian Tombol Dinonaktifkan"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Demo Template Lain-Lain"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Demo Berita Pilihan"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Demo Tata Letak Template"</string>
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 d9f4cb8..7325532 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
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Uppfærslur leyfðar á fyrri aðgerðum."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Kveikt á rofaprófun"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Slökkt á rofaprófun"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <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>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Sýnishorn sniðmátsuppsetningar"</string>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-it/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-it/strings.xml
index 65caa41..0c29c05 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-it/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-it/strings.xml
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Aggiornamenti consentiti per le operazioni in background."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Test di attivazione/disattivazione abilitato"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Test di attivazione/disattivazione disabilitato"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Demo modelli vari"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Demo Showcase"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Demo Layout modello"</string>
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 4e198ad..f44a391 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
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"העדכונים מותרים כשחוזרים לדף הקודם."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"הבדיקה של החלפת המצב מופעלת"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"הבדיקה של החלפת המצב מושבתת"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"הדגמות של תבניות שונות"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"הדגמות תצוגה"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"הדגמות של אפשרויות פריסה של תבנית"</string>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-ja/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-ja/strings.xml
index a3529bf..0dbefd4 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-ja/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-ja/strings.xml
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"アップデートにより「戻る」操作ができるようになりました。"</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"切り替えのテスト有効"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"切り替えのテスト無効"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"その他のテンプレートのデモ"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"デモを表示"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"テンプレート レイアウトのデモ"</string>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-ka/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-ka/strings.xml
index 641de85..38c1cc3 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-ka/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-ka/strings.xml
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"განახლებებმა დაუშვა უკან დაბრუნება."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"გადამრთველის ტესტი ჩართულია"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"გადამრთველის ტესტი გათიშულია"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"სხვადასხვა შაბლონური დემოები"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"დემოების ჩვენება"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"შაბლონის განლაგების დემო"</string>
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 764828d..83768db 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
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"\"Артқа\" операциясында өзгертуге рұқсат етілген"</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Ауыстырғыш сынағы қосылған."</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Ауыстырғыш сынағы өшірілген."</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"\"Басқалары\" үлгісінің демо нұсқасы"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Презентацияның демо нұсқасы"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Формат үлгісі (демо нұсқалары)"</string>
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 34a1f2c..976a034 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
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"បានអនុញ្ញាត​ការដំឡើងកំណែ​នៅលើ​ប្រតិបត្តិការ​ថយក្រោយ។"</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"បានបើកការធ្វើតេស្ត​ប៊ូតុងបិទ/បើក"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"បានបិទការធ្វើតេស្ត​ប៊ូតុងបិទ/បើក"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"គំរូបង្ហាញនៃ​ទម្រង់គំរូផ្សេងៗ"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"គំរូបង្ហាញអំពីការតាំងរំលេច"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"គំរូបង្ហាញនៃប្លង់​ទម្រង់គំរូ"</string>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-kn/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-kn/strings.xml
index 43b1553..ecab77a 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-kn/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-kn/strings.xml
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"ಹಿನ್ನೆಲೆ ಕಾರ್ಯಾಚರಣೆಗಳಿಗಾಗಿ ಅಪ್‌ಡೇಟ್‌ಗಳನ್ನು ಅನುಮತಿಸಲಾಗಿದೆ."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"ಟಾಗಲ್ ಟೆಸ್ಟ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"ಟಾಗಲ್ ಟೆಸ್ಟ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"ಇತರ ಟೆಂಪ್ಲೇಟ್‌ಗಳ ಡೆಮೋಗಳು"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Showcase ಡೆಮೋಗಳು"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"ಟೆಂಪ್ಲೇಟ್ ಲೇಔಟ್ ಡೆಮೋಗಳು"</string>
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 c34ac66..dd1e7ea 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
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"뒤로 작업에서 업데이트가 허용되었습니다."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"전환 테스트 사용 설정됨"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"전환 테스트 사용 중지됨"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"기타 템플릿 데모"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"쇼케이스 데모"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"템플릿 레이아웃 데모"</string>
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 cda6402..fcb8723 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
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Артка операцияларында жаңыртууларга уруксат берет."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Өчүрүү/күйгүзүү сыноосу иштетилди"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Өчүрүү/күйгүзүү сыноосу өчүрүлдү"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Башка үлгүлөрдүн демолору"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Showcase демолору"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Үлгү калыптарынын демолору"</string>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-lo/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-lo/strings.xml
index 2026634..0a24d8d 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-lo/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-lo/strings.xml
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"ອະນຸຍາດໃຫ້ອັບເດດໃນການດຳເນີນການເບື້ອງຫຼັງ."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"ເປີດການນຳໃຊ້ການທົດສອບການສະຫຼັບ"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"ປິດການນຳໃຊ້ການທົດສອບການສະຫຼັບ"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"ເດໂມແມ່ແບບອື່ນໆ"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"ເດໂມ Showcase"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"ເດໂມໂຄງຮ່າງແມ່ແບບ"</string>
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 f7bbc8e..74a906b 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
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Naujiniai leidžiami ankstesnėms operacijoms."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Bandymo perjungimas įgalintas"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Bandymo perjungimas išjungtas"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <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>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Šablonų išdėstymo demonstracinės versijos"</string>
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 03368df..98794cc 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
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Pārejai atpakaļ ir atļauti atjauninājumi."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Pārslēgšanas tests ir iespējots"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Pārslēgšanas tests ir atspējots"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <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>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Veidņu izkārtojumu demonstrācijas"</string>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-mk/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-mk/strings.xml
index 59f8a84..ff4b9f5 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-mk/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-mk/strings.xml
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Ажурирањата се дозволени при операции на враќање назад."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Овозможено тест за вклучување/исклучување"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Оневозможено тест за вклучување/исклучување"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Разни демоа за шаблони"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Демоа за прикажување"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Демоа за распоред на шаблони"</string>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-ml/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-ml/strings.xml
index c1a2ad9..30b223c 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-ml/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-ml/strings.xml
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"ബാക്ക് ഓപ്പറേഷനുകളിൽ അപ്ഡേറ്റുകൾ അനുവദിക്കുന്നു."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"ടോഗിൾ ടെസ്‌റ്റ് പ്രവർത്തനക്ഷമമാക്കി"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"ടോഗിൾ ടെസ്‌റ്റ് പ്രവർത്തനരഹിതമാക്കി"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"പലവക ടെംപ്ലേറ്റ് ഡെമോകൾ"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"ഡെമോകൾ ഷോക്കേസ് ചെയ്യുക"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"ടെംപ്ലേറ്റ് ലേഔട്ട് ഡെമോകൾ"</string>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-mn/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-mn/strings.xml
index b698936..7c3dfe8 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-mn/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-mn/strings.xml
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Шинэчлэлтүүдийг арын үйл ажиллагаанд хийхийг зөвшөөрдөг."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Асаах/Унтраах туршилтыг идэвхжүүлсэн"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Асаах/Унтраах туршилтыг идэвхгүй болгосон"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Холимог загварын демо"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Showcase-н демо"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Загварын бүдүүвч бүхий демо"</string>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-mr/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-mr/strings.xml
index 9789d5b..9d85f5c 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-mr/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-mr/strings.xml
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"बॅक ऑपरेशनवर अपडेटना अनुमती दिली आहे."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"टॉगल करण्याशी संबंधित चाचणी सुरू केली"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"टॉगल करण्याशी संबंधित चाचणी बंद केली"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"इतर टेंप्लेटचे डेमो"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"डेमो दाखवा"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"टेंप्लेट लेआउट डेमो"</string>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-ms/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-ms/strings.xml
index 78bb645..83231ff 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-ms/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-ms/strings.xml
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Kemaskinian dibenarkan pada operasi belakang."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Ujian Togol Didayakan"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Ujian Togol Dilumpuhkan"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Pelbagai Demo Templat"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Demo Wadah"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Demo Reka Letak Templat"</string>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-my/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-my/strings.xml
index d9e5d65f..e92b1aa 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-my/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-my/strings.xml
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"ပြန်ရွှေ့ခြင်းများတွင် အပ်ဒိတ်များကို ခွင့်ပြုသည်။"</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"စမ်းသပ်ခလုတ် ဖွင့်ထားသည်"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"စမ်းသပ်ခလုတ် ပိတ်ထားသည်"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"အထွေထွေ ပုံစံသရုပ်ပြချက်များ"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Showcase သရုပ်ပြချက်များ"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"နမူနာပုံစံ သရုပ်ပြချက်များ"</string>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-nb/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-nb/strings.xml
index 152d582..03c3863 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-nb/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-nb/strings.xml
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Oppdateringer tillates ved tilbakeoperasjoner."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Test av av/på-knapp er aktivert"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Test av av/på-knapp er deaktivert"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Demoer av diverse maler"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Demoer i fokus"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Demoer av mallayout"</string>
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 79f41a5..7844b13 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
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"अघिल्लो पेजमा गई परिवर्तन गर्न सकिन्छ।"</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"टगल टेस्ट अन गरिएको छ"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"टगल टेस्ट अफ गरिएको छ"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"टेम्प्लेटका विविध डेमोहरू"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"सोकेसहरूको डेमो"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"टेम्प्लेट लेआउटका डेमोहरू"</string>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-nl/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-nl/strings.xml
index a2df525..cff3663 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-nl/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-nl/strings.xml
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Updates toegestaan bij teruggaan in de weergavestapel."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Schakeltest aangezet"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Schakeltest uitgezet"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Diverse templatedemo\'s"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Demo\'s laten zien"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Demo\'s voor opmaaktemplate"</string>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-or/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-or/strings.xml
index 1fe148e..7066b1b 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-or/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-or/strings.xml
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"ପୃଷ୍ଠପଟର ଅପରେସନଗୁଡ଼ିକରେ ଅପଡେଟଗୁଡ଼ିକୁ ଅନୁମତି ଦିଆଯାଇଛି।"</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"\"ପରୀକ୍ଷା ଟୋଗଲ କରିବା\" ସକ୍ଷମ କରାଯାଇଛି"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"\"ପରୀକ୍ଷା ଟୋଗଲ କରିବା\" ଅକ୍ଷମ କରାଯାଇଛି"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"ବିବିଧ ଟେମ୍ପଲେଟର ଡେମୋ"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Showcase ଡେମୋ"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"ଟେମ୍ପଲେଟ ଲେଆଉଟର ଡେମୋଗୁଡ଼ିକ"</string>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-pa/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-pa/strings.xml
index 43b3c62..dae0a08 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-pa/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-pa/strings.xml
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"ਪਿਛਲੇ ਪੰਨੇ \'ਤੇ ਅੱਪਡੇਟ ਕਰਨ ਦੀ ਆਗਿਆ ਹੈ।"</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"\'ਟੈਸਟ ਨੂੰ ਟੌਗਲ ਕਰੋ\' ਚਾਲੂ ਹੈ"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"\'ਟੈਸਟ ਨੂੰ ਟੌਗਲ ਕਰੋ\' ਬੰਦ ਹੈ"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"ਫੁਟਕਲ ਟੈਮਪਲੇਟਾਂ ਦੇ ਡੈਮੋ"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"ਸ਼ੋਅਕੇਸ ਦੇ ਡੈਮੋ"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"ਟੈਮਪਲੇਟ ਖਾਕੇ ਦੇ ਡੈਮੋ"</string>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-pl/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-pl/strings.xml
index 9944e6a..0faed71 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-pl/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-pl/strings.xml
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Aktualizacje dozwolone na operacjach cofania."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Test przełączania został włączony"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Test przełączania został wyłączony"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Wersje demonstracyjne różnych szablonów"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Wersje demonstracyjne do prezentacji"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Wersje demonstracyjne szablonów układu"</string>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-pt-rBR/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-pt-rBR/strings.xml
index 5629c2c..8933684 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-pt-rBR/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-pt-rBR/strings.xml
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Atualizações permitidas em operações de retorno."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Alternância de teste ativada"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Alternância de teste desativada"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Demonstração de modelos diversos"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Demonstrações em destaque"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Demonstrações de modelos de layout"</string>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-pt-rPT/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-pt-rPT/strings.xml
index d9e0d69..02e6556 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-pt-rPT/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-pt-rPT/strings.xml
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Atualizações permitidas nas operações de retrocesso."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Teste de botão ativado"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Teste de botão desativado"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Demonstrações de modelos diversos"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Demonstrações de destaque"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Demonstrações do esquema do modelo"</string>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-pt/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-pt/strings.xml
index 5629c2c..8933684 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-pt/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-pt/strings.xml
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Atualizações permitidas em operações de retorno."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Alternância de teste ativada"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Alternância de teste desativada"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Demonstração de modelos diversos"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Demonstrações em destaque"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Demonstrações de modelos de layout"</string>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-ro/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-ro/strings.xml
index 093e173..5c6211c 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-ro/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-ro/strings.xml
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Sunt permise actualizările operațiunilor în fundal."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Testul de comutare este activat"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Testul de comutare este dezactivat"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Demonstrații diverse cu șabloane"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Demonstrații pentru Showcase"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Demonstrații cu aspecte de șablon"</string>
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 fcf1681..e33a835 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
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Обновления разрешены для обратных операций."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Проверка переключения включена"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Проверка переключения отключена"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Демонстрации прочих шаблонов"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Демонстрации Showcase"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Макет шаблона (режим демонстрации)"</string>
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 0486f9f..5890489 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
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"පසු මෙහෙයුම්වල යාවත්කාලීන කිරීම් ඉඩ දෙනු ලැබේ."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"ටොගල පරීක්ෂාව සබලයි"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"ටොගල පරීක්ෂාව අබලයි"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"විවිධ අච්චු ආදර්ශන"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"ප්‍රකාශක තේරූ ආදර්ශන"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"අච්චු පිරිසැලසුම් ආදර්ශන"</string>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-sk/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-sk/strings.xml
index 86dfbfb..5aef083 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-sk/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-sk/strings.xml
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Aktualizácie sú povolené pre operácie na pozadí."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Test prepínača bol aktivovaný"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Test prepínača bol deaktivovaný"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Rôzne šablóny – demá"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Výber – demá"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Demo rozložení šablóny"</string>
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 940a276..557e62a 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
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Posodobitve so dovoljene pri pomikih nazaj."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Preizkus preklopa je omogočen."</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Preizkus preklopa je onemogočen."</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <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>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Predstavitvene različice postavitev predlog"</string>
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 15f3cd5..a194b41 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
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Përditësimet lejohen në veprimet e mëparshme."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Testimi i butonit aktivizo/çaktivizo u aktivizua"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Testimi i butonit aktivizo/çaktivizo u çaktivizua"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Demonstrime shabllonesh të ndryshme"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Demonstrime të prezantimit"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Demonstrimet e strukturës së shabllonit"</string>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-sr/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-sr/strings.xml
index 843205b..a42e5ec 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-sr/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-sr/strings.xml
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Ажурирања су дозвољена за операције у позадини."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Тест укључивања/искључивања је омогућен"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Тест укључивања/искључивања је онемогућен"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Демонстрације различитих шаблона"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Демонстрације приказивања"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Демонстрације изгледа шаблона"</string>
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 452e04a..8aa219b 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
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Uppdateringar tillåtet i bakåtåtgärder."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Test av aktivera/inaktivera har aktiverats"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Test av aktivera/inaktivera har inaktiverats"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Demor för övriga mallar"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Visa demor"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Demor för mallayouter"</string>
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 f2b192a..8842f6f 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
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Masasisho yameruhusiwa kwenye shughuli za nyuma."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Jaribio la Kipengele cha Kuwasha/Kuzima Limewashwa"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Jaribio la Kipengele cha Kuwasha/Kuzima Limezimwa"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Maonyesho ya Violezo Anuwai"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Maonyesho ya Kuangazia"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Maonyesho ya Kiolezo cha Muundo"</string>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-ta/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-ta/strings.xml
index 82dfbd6..558e6f0 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-ta/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-ta/strings.xml
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"முந்தைய பக்கத்திற்குச் சென்று மாற்றங்களைச் செய்யலாம்."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"நிலைமாற்றப் பரிசோதனை இயக்கப்பட்டது"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"நிலைமாற்றப் பரிசோதனை முடக்கப்பட்டது"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"மற்ற டெம்ப்ளேட்டுகளின் டெமோக்கள்"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"ஷோகேஸின் டெமோக்கள்"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"டெம்ப்ளேட் தளவமைப்பின் டெமோக்கள்"</string>
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 172cdcb..202c69a 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
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"బ్యాక్‌గ్రౌండ్ ఆపరేషన్‌ల కోసం అప్‌డేట్‌లు అనుమతించబడ్డాయి."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"టోగుల్ టెస్ట్ ఎనేబుల్ చేయబడింది"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"టోగుల్ టెస్ట్ డిజేబుల్ చేయబడింది"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"ఇతర టెంప్లేట్‌ల డెమోలు"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"డెమోలను ప్రదర్శించండి"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"టెంప్లేట్ లేఅవుట్ డెమోలు"</string>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-th/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-th/strings.xml
index f58ce22..4aa0b6f 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-th/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-th/strings.xml
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"อนุญาตให้อัปเดตในการดำเนินการเบื้องหลัง"</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"การทดสอบการสลับเปิดอยู่"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"การทดสอบการสลับปิดอยู่"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"การสาธิตเทมเพลตเบ็ดเตล็ด"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"การสาธิต Showcase"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"การสาธิตเลย์เอาต์เทมเพลต"</string>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-tl/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-tl/strings.xml
index 3c4d06f..4c5e981 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-tl/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-tl/strings.xml
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Pinapayagan ang mga update sa mga pagbabalik."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Na-enable ang Pagsusuri sa Toggle"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Na-disable ang Pagsusuri sa Toggle"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Iba Pang Demo ng Mga Template"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Itampok ang Mga Demo"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Mga Demo ng Layout ng Template"</string>
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 26bccb1..02aeb07 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
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Önceki işlemlerde güncellemelere izin verilir."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Açma/Kapatma Testi Etkin"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Açma/Kapatma Testi Devre Dışı"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Çeşitli Şablon Demoları"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Öne Çıkan Demoları"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Şablon Düzeni Demoları"</string>
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 0c01a38..a26dd7d 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
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Оновлення дозволено для операцій повернення."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Перевірку перемикача ввімкнено"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Перевірку перемикача вимкнено"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Демонстрації інших шаблонів"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Увімкнути демонстрації"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Демонстрації макетів шаблонів"</string>
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 265bdd2..50f9b51 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
@@ -309,6 +309,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"اپ ڈیٹس پچھلے صفحے پر جانے کی اجازت دی گئی۔"</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"ٹیسٹ ٹوگل کرنے کی سہولت فعال ہے"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"ٹیسٹ ٹوگل کرنے کی سہولت غیر فعال ہے"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"متفرق تمثیلات کے ڈیموز"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"ڈیموز دکھائیں"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"تمثیل کے لے آؤٹ کے ڈیموز"</string>
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 76cf78e..9eae886 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
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Teskari amallarda yangilanishlarga ruxsat berilgan."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Testni oʻchirish/yoqish faollashtirildi"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Testni oʻchirish/yoqish faolsizlantirildi"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Aralash andozalar demolari"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Namoyish demolari"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Andoza dizayni demolari"</string>
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 0f352c8..a8ab739 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
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Cho phép cập nhật đối với các thiết bị chạy ngầm."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Đã bật tính năng chuyển đổi"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Đã tắt tính năng kiểm tra chuyển đổi"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <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>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Bản minh hoạ bố cục mẫu"</string>
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 95aaf39..088d162 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
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"返回操作允许更新。"</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"切换测试已启用"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"切换测试已停用"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"其他模板演示"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"展示演示"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"模板布局演示"</string>
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 29f96b0..03d89aa 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
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"允許在返回時更新。"</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"已啟用切換測試"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"已停用切換測試"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"其他範本示範"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"展示示範"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"「範本版面配置」示範"</string>
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 3a995fc..9b13e25 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
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"允許返回上一頁更新。"</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"切換測試已啟用"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"切換測試已停用"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"其他範本示範"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"「展示」示範"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"「範本版面配置」示範"</string>
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-zu/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-zu/strings.xml
index bfdac1d..ad45f4d 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-zu/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-zu/strings.xml
@@ -305,6 +305,22 @@
     <string name="additional_data_text" msgid="2846223398214158872">"Izibuyekezo zivunyelwe ukusebenza ngemuva."</string>
     <string name="toggle_test_enabled" msgid="982370904182034076">"Ukuhlola Kokuguqula Kunikwe Amandla"</string>
     <string name="toggle_test_disabled" msgid="8366040658408451664">"Ukuhlola Kokuguqula Kukhutshaziwe"</string>
+    <!-- no translation found for secondary_actions_decoration_button_demo_title (3710817648501132309) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_title (3664453747553733613) -->
+    <skip />
+    <!-- no translation found for secondary_actions_test_subtitle (6985282813402073703) -->
+    <skip />
+    <!-- no translation found for decoration_test_title (8450127046762442244) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_title (6282873404859209490) -->
+    <skip />
+    <!-- no translation found for secondary_actions_decoration_test_subtitle (155884606592724532) -->
+    <skip />
+    <!-- no translation found for secondary_action_toast (5076434693504006565) -->
+    <skip />
+    <!-- no translation found for row_primary_action_toast (756516694751965204) -->
+    <skip />
     <string name="misc_templates_demos_title" msgid="6077169010255928114">"Amademo Ezifanekiso Ezixubile"</string>
     <string name="showcase_demos_title" msgid="1542092687878113304">"Bonisa Amademo"</string>
     <string name="template_layouts_demo_title" msgid="788249269446087847">"Ama-demo Esakhiwo Sesifanekiso"</string>
diff --git a/collection/collection-benchmark-ios/.gitignore b/collection/collection-benchmark-ios/.gitignore
deleted file mode 100644
index f3d5349..0000000
--- a/collection/collection-benchmark-ios/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-# XCode Projects
-*.xcodeproj
-Info.plist
-
-# XCode results
-*.xcresult
diff --git a/collection/collection-benchmark-ios/Tests/Benchmarks.swift b/collection/collection-benchmark-ios/Tests/Benchmarks.swift
deleted file mode 100644
index 8572b5a..0000000
--- a/collection/collection-benchmark-ios/Tests/Benchmarks.swift
+++ /dev/null
@@ -1,46 +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.
- */
-
-import Foundation
-import XCTest
-import AndroidXCollectionBenchmarks
-
-class BenchmarkTest: XCTestCase {
-    var testCase: TestCase? = nil
-
-    override func setUpWithError() throws {
-        testCase!.setUp()
-    }
-
-    override class var defaultTestSuite: XCTestSuite {
-        let suite = XCTestSuite(forTestCaseClass: BenchmarkTest.self)
-        for testCase in TestCasesKt.all {
-            let test = BenchmarkTest(selector: #selector(runBenchmark))
-            test.testCase = testCase
-            suite.addTest(test)
-        }
-        return suite
-    }
-
-    @objc func runBenchmark() {
-        // https://masilotti.com/xctest-name-readability/
-        XCTContext.runActivity(named: testCase!.testDescription()) { _ -> Void in
-            // Run the actual benchmark
-            let context = TestCaseContextWrapper(context: self)
-            testCase?.benchmark(context: context)
-        }
-    }
-}
diff --git a/collection/collection-benchmark-ios/run_benchmarks.sh b/collection/collection-benchmark-ios/run_benchmarks.sh
deleted file mode 100755
index 26294d4..0000000
--- a/collection/collection-benchmark-ios/run_benchmarks.sh
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/bin/bash
-
-rm -r collection-benchmark-ios.xcresult || true
-xcodebuild \
- test \
- -project CollectionBenchmarkApp.xcodeproj \
- -scheme testapp-ios-benchmarks \
- -destination 'platform=iOS Simulator,name=iPhone 13,OS=15.5' \
- -resultBundlePath 'collection-benchmark-ios.xcresult'
diff --git a/collection/collection-benchmark-ios/xcodegen-project.yml b/collection/collection-benchmark-ios/xcodegen-project.yml
deleted file mode 100644
index ae76f45..0000000
--- a/collection/collection-benchmark-ios/xcodegen-project.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: CollectionBenchmarkApp
-targets:
-
-  testapp-ios-benchmarks:
-    type: bundle.unit-test
-    platform: iOS
-    info:
-      path: Info.plist
-    sources:
-      - path: 'Tests'
-    scheme:
-      testTargets:
-        - testapp-ios-benchmarks
-      preActions:
-        - name: build AndroidXCollectionBenchmarks.xcframework
-          basedOnDependencyAnalysis: false
-          settingsTarget: testapp-ios-benchmarks
-          script: |
-            cd ${PROJECT_DIR}/../..
-            ./gradlew :collection:collection-benchmark:assembleAndroidXCollectionBenchmarksReleaseXCFramework \
-                --no-configuration-cache                                                                      \
-                -Pandroidx.enabled.kmp.target.platforms="+MAC" < /dev/null
-          outputFiles:
-            - "${PROJECT_DIR}/../../../../out/androidx/collection/collection-benchmark/build/XCFrameworks/release/AndroidXCollectionBenchmarks.xcframework"
-    dependencies:
-      - framework: "${PROJECT_DIR}/../../../../out/androidx/collection/collection-benchmark/build/XCFrameworks/release/AndroidXCollectionBenchmarks.xcframework"
-    settings:
-      PRODUCT_NAME: testapp-ios-benchmarks
-
-settings:
-  PRODUCT_BUNDLE_IDENTIFIER: androidx.collection
-  SWIFT_VERSION: 5
-  CODE_SIGN_IDENTITY: ''
-  CODE_SIGNING_REQUIRED: 'NO'
-  CODE_SIGN_ENTITLEMENTS: ''
-  CODE_SIGNING_ALLOWED: 'NO'
-  IPHONEOS_DEPLOYMENT_TARGET: 15.2
diff --git a/collection/collection-benchmark-ios/xcodegenw b/collection/collection-benchmark-ios/xcodegenw
deleted file mode 100755
index aafdeec..0000000
--- a/collection/collection-benchmark-ios/xcodegenw
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/bash
-
-xcodegen --spec xcodegen-project.yml
diff --git a/collection/collection-benchmark/build.gradle b/collection/collection-benchmark/build.gradle
index b08d48e..7832f49 100644
--- a/collection/collection-benchmark/build.gradle
+++ b/collection/collection-benchmark/build.gradle
@@ -34,10 +34,12 @@
 androidXMultiplatform {
     android()
 
-    def xcf = new XCFrameworkConfig(project, "AndroidXCollectionBenchmarks")
+    // XCFrameworkConfig must match module name
+    def xcf = new XCFrameworkConfig(project, "AndroidXDarwinBenchmarks")
     ios {
         binaries.framework {
-            baseName = "AndroidXCollectionBenchmarks"
+            // The module name must be AndroidXDarwinBenchmarks for the discovery to work.
+            baseName = "AndroidXDarwinBenchmarks"
             // https://youtrack.jetbrains.com/issue/KT-48552
             embedBitcode = BitcodeEmbeddingMode.DISABLE
             export(project(":benchmark:benchmark-darwin"))
@@ -81,7 +83,6 @@
             }
         }
 
-
         targets.all { target ->
             if (target.platformType == KotlinPlatformType.native) {
                 target.compilations["main"].defaultSourceSet {
@@ -110,6 +111,20 @@
     description = "AndroidX Collections Benchmarks (Android / iOS)"
 }
 
+if (macEnabled) {
+    apply plugin: "androidx.benchmark.darwin"
+    darwinBenchmark {
+        xcodeGenConfigFile = project.rootProject.file(
+                "benchmark/benchmark-darwin-xcode/projects/collection-benchmark-ios.yml"
+        )
+        xcodeProjectName = "collection-benchmark-ios"
+        scheme = "testapp-ios"
+        // ios 13, 15.2
+        destination = "platform=iOS Simulator,name=iPhone 13,OS=15.2"
+        xcFrameworkConfig = "AndroidXDarwinBenchmarks"
+    }
+}
+
 android {
     namespace "androidx.collection.benchmark"
 }
diff --git a/collection/collection-benchmark/src/darwinMain/kotlin/androidx/collection/TestCases.kt b/collection/collection-benchmark/src/darwinMain/kotlin/androidx/collection/TestCases.kt
index 636d084..af173aa 100644
--- a/collection/collection-benchmark/src/darwinMain/kotlin/androidx/collection/TestCases.kt
+++ b/collection/collection-benchmark/src/darwinMain/kotlin/androidx/collection/TestCases.kt
@@ -23,111 +23,118 @@
 import platform.XCTest.XCTMeasureOptions
 import platform.XCTest.XCTMemoryMetric
 
-val all: List<TestCase> = listOf(10, 100, 1_000)
-    .flatMap { size ->
-        listOf(size to true, size to false)
+object TestCases {
+    fun benchmarkTests(): List<TestCase> {
+        return listOf(10, 100, 1_000)
+            .flatMap { size ->
+                listOf(size to true, size to false)
+            }
+            .map { params ->
+                createSourceSet(
+                    size = params.first, sparse = params.second
+                )
+            }
+            .flatMap { sourceSet ->
+                listOf(
+                    CollectionTestCase(
+                        benchmark = ArraySetCreateBenchmark(sourceSet),
+                        testDescription = "ArraySet_ContainsElement",
+                    ),
+                    CollectionTestCase(
+                        benchmark = ArraySetContainsElementBenchmark(sourceSet),
+                        testDescription = "ArraySet_ContainsElement",
+                    ),
+                    CollectionTestCase(
+                        benchmark = ArraySetIndexOfBenchmark(sourceSet),
+                        testDescription = "ArraySet_IndexOf",
+                    ),
+                    CollectionTestCase(
+                        benchmark = ArraySetAddAllThenRemoveIndividuallyBenchmark(sourceSet),
+                        testDescription = "ArraySet_AddAllThenRemoveIndividually",
+                    ),
+                )
+            } + listOf(10, 100, 1_000, 10_000)
+            .map { size ->
+                createSeed(size)
+            }
+            .map { seed ->
+                CollectionTestCase(
+                    benchmark = CircularyArrayAddFromHeadAndPopFromTailBenchmark(seed),
+                    testDescription = "CircularyArray_AddFromHeadAndPopFromTail",
+                )
+            } + listOf(10, 100, 1_000)
+            .map { size ->
+                createKeyList(size)
+            }
+            .flatMap { keyList ->
+                listOf(
+                    CollectionTestCase(
+                        benchmark = LruCacheCreateThenFetchWithAllHitsBenchmark(
+                            keyList,
+                            keyList.size
+                        ),
+                        testDescription = "LruCache_CreateThenFetchWithAllHits",
+                    ),
+                    CollectionTestCase(
+                        benchmark = LruCacheAllMissesBenchmark(keyList, keyList.size),
+                        testDescription = "LruCache_AllMisses",
+                    ),
+                )
+            } + listOf(10, 100, 1_000)
+            .flatMap { size ->
+                listOf(size to true, size to false)
+            }
+            .map { params ->
+                createSourceMap(
+                    size = params.first, sparse = params.second
+                )
+            }
+            .flatMap { sourceMap ->
+                listOf(
+                    CollectionTestCase(
+                        benchmark = SimpleArrayMapCreateBenchmark(sourceMap),
+                        testDescription = "SimpleArrayMap_Create",
+                    ),
+                    CollectionTestCase(
+                        benchmark = SimpleArrayMapContainsKeyBenchmark(sourceMap),
+                        testDescription = "SimpleArrayMap_ContainsKey",
+                    ),
+                    CollectionTestCase(
+                        benchmark = SimpleArrayMapAddAllThenRemoveIndividuallyBenchmark(sourceMap),
+                        testDescription = "SimpleArrayMap_AddAllThenRemoveIndividually",
+                    ),
+                )
+            } + listOf(10, 100, 1_000, 10_000)
+            .flatMap { size ->
+                listOf(size to true, size to false)
+            }
+            .map { params ->
+                createFilledSparseArray(
+                    size = params.first, sparse = params.second
+                )
+            }
+            .flatMap { map ->
+                listOf(
+                    CollectionTestCase(
+                        benchmark = SparseArrayGetBenchmark(map),
+                        testDescription = "SimpleArrayMap_Get",
+                    ),
+                    CollectionTestCase(
+                        benchmark = SparseArrayContainsKeyBenchmark(map),
+                        testDescription = "SparseArray_ContainsKey",
+                    ),
+                    CollectionTestCase(
+                        benchmark = SparseArrayIndexOfKeyBenchmark(map),
+                        testDescription = "SparseArray_IndexOfKey",
+                    ),
+                    CollectionTestCase(
+                        benchmark = SparseArrayIndexOfValueBenchmark(map),
+                        testDescription = "SparseArray_IndexOfValue",
+                    ),
+                )
+            }
     }
-    .map { params ->
-        createSourceSet(
-            size = params.first, sparse = params.second
-        )
-    }
-    .flatMap { sourceSet ->
-        listOf(
-            CollectionTestCase(
-                benchmark = ArraySetCreateBenchmark(sourceSet),
-                testDescription = "ArraySet_ContainsElement",
-            ),
-            CollectionTestCase(
-                benchmark = ArraySetContainsElementBenchmark(sourceSet),
-                testDescription = "ArraySet_ContainsElement",
-            ),
-            CollectionTestCase(
-                benchmark = ArraySetIndexOfBenchmark(sourceSet),
-                testDescription = "ArraySet_IndexOf",
-            ),
-            CollectionTestCase(
-                benchmark = ArraySetAddAllThenRemoveIndividuallyBenchmark(sourceSet),
-                testDescription = "ArraySet_AddAllThenRemoveIndividually",
-            ),
-        )
-    } + listOf(10, 100, 1_000, 10_000)
-    .map { size ->
-        createSeed(size)
-    }
-    .map { seed ->
-        CollectionTestCase(
-            benchmark = CircularyArrayAddFromHeadAndPopFromTailBenchmark(seed),
-            testDescription = "CircularyArray_AddFromHeadAndPopFromTail",
-        )
-    } + listOf(10, 100, 1_000)
-    .map { size ->
-        createKeyList(size)
-    }
-    .flatMap { keyList ->
-        listOf(
-            CollectionTestCase(
-                benchmark = LruCacheCreateThenFetchWithAllHitsBenchmark(keyList, keyList.size),
-                testDescription = "LruCache_CreateThenFetchWithAllHits",
-            ),
-            CollectionTestCase(
-                benchmark = LruCacheAllMissesBenchmark(keyList, keyList.size),
-                testDescription = "LruCache_AllMisses",
-            ),
-        )
-    } + listOf(10, 100, 1_000)
-    .flatMap { size ->
-        listOf(size to true, size to false)
-    }
-    .map { params ->
-        createSourceMap(
-            size = params.first, sparse = params.second
-        )
-    }
-    .flatMap { sourceMap ->
-        listOf(
-            CollectionTestCase(
-                benchmark = SimpleArrayMapCreateBenchmark(sourceMap),
-                testDescription = "SimpleArrayMap_Create",
-            ),
-            CollectionTestCase(
-                benchmark = SimpleArrayMapContainsKeyBenchmark(sourceMap),
-                testDescription = "SimpleArrayMap_ContainsKey",
-            ),
-            CollectionTestCase(
-                benchmark = SimpleArrayMapAddAllThenRemoveIndividuallyBenchmark(sourceMap),
-                testDescription = "SimpleArrayMap_AddAllThenRemoveIndividually",
-            ),
-        )
-    } + listOf(10, 100, 1_000, 10_000)
-    .flatMap { size ->
-        listOf(size to true, size to false)
-    }
-    .map { params ->
-        createFilledSparseArray(
-            size = params.first, sparse = params.second
-        )
-    }
-    .flatMap { map ->
-        listOf(
-            CollectionTestCase(
-                benchmark = SparseArrayGetBenchmark(map),
-                testDescription = "SimpleArrayMap_Get",
-            ),
-            CollectionTestCase(
-                benchmark = SparseArrayContainsKeyBenchmark(map),
-                testDescription = "SparseArray_ContainsKey",
-            ),
-            CollectionTestCase(
-                benchmark = SparseArrayIndexOfKeyBenchmark(map),
-                testDescription = "SparseArray_IndexOfKey",
-            ),
-            CollectionTestCase(
-                benchmark = SparseArrayIndexOfValueBenchmark(map),
-                testDescription = "SparseArray_IndexOfValue",
-            ),
-        )
-    }
+}
 
 private class CollectionTestCase(
     private val benchmark: CollectionBenchmark,
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 45044c7..980e7f7 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
@@ -94,6 +94,10 @@
             8500 to "1.3.0-beta03",
             8600 to "1.3.0-rc01",
             8601 to "1.3.0-rc02",
+            8602 to "1.3.0",
+            8603 to "1.3.1",
+            9000 to "1.4.0-alpha01",
+            9001 to "1.4.0-alpha02",
         )
 
         /**
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGridTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGridTest.kt
index f66b929..ea72295 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGridTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGridTest.kt
@@ -30,9 +30,11 @@
 import androidx.compose.ui.composed
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.platform.testTag
+import androidx.compose.ui.test.assertCountEquals
 import androidx.compose.ui.test.assertIsDisplayed
 import androidx.compose.ui.test.assertIsNotDisplayed
 import androidx.compose.ui.test.junit4.StateRestorationTester
+import androidx.compose.ui.test.onChildren
 import androidx.compose.ui.test.onNodeWithTag
 import androidx.compose.ui.unit.Dp
 import androidx.compose.ui.unit.dp
@@ -256,6 +258,27 @@
     }
 
     @Test
+    fun itemCanEmitZeroNodes() {
+        rule.setContent {
+            state = rememberLazyStaggeredGridState()
+            LazyStaggeredGrid(
+                lanes = 3,
+                state = state,
+                modifier = Modifier
+                    .axisSize(itemSizeDp * 3, itemSizeDp)
+                    .testTag(LazyStaggeredGridTag),
+            ) {
+                items(6) { }
+            }
+        }
+
+        rule.onNodeWithTag(LazyStaggeredGridTag)
+            .assertIsDisplayed()
+            .onChildren()
+            .assertCountEquals(0)
+    }
+
+    @Test
     fun itemsAreHiddenOnScroll() {
         rule.setContent {
             state = rememberLazyStaggeredGridState()
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGridMeasure.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGridMeasure.kt
index 942ed79..edf888d 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGridMeasure.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/staggeredgrid/LazyStaggeredGridMeasure.kt
@@ -691,7 +691,7 @@
 
     val crossAxisSize: Int = placeables.fastMaxOfOrNull {
         if (isVertical) it.width else it.height
-    }!!
+    } ?: 0
 
     fun position(
         lane: Int,
diff --git a/compose/integration-tests/macrobenchmark/src/androidTest/java/androidx/compose/integration/macrobenchmark/SmallListStartupBenchmark.kt b/compose/integration-tests/macrobenchmark/src/androidTest/java/androidx/compose/integration/macrobenchmark/SmallListStartupBenchmark.kt
index cb9e113..e76e719 100644
--- a/compose/integration-tests/macrobenchmark/src/androidTest/java/androidx/compose/integration/macrobenchmark/SmallListStartupBenchmark.kt
+++ b/compose/integration-tests/macrobenchmark/src/androidTest/java/androidx/compose/integration/macrobenchmark/SmallListStartupBenchmark.kt
@@ -17,16 +17,20 @@
 package androidx.compose.integration.macrobenchmark
 
 import androidx.benchmark.macro.CompilationMode
+import androidx.benchmark.macro.ExperimentalMetricApi
 import androidx.benchmark.macro.StartupMode
+import androidx.benchmark.macro.TraceSectionMetric
 import androidx.benchmark.macro.junit4.MacrobenchmarkRule
 import androidx.test.filters.LargeTest
 import androidx.testutils.createStartupCompilationParams
+import androidx.testutils.getStartupMetrics
 import androidx.testutils.measureStartup
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
 import org.junit.runners.Parameterized
 
+@OptIn(ExperimentalMetricApi::class)
 @LargeTest
 @RunWith(Parameterized::class)
 class SmallListStartupBenchmark(
@@ -36,10 +40,25 @@
     @get:Rule
     val benchmarkRule = MacrobenchmarkRule()
 
+    /**
+     * Temporary, tracking for b/231455742
+     *
+     * Note that this tracing only exists on more recent API levels
+     */
+    private val metrics = getStartupMetrics() + if (startupMode == StartupMode.COLD) {
+        listOf(
+            TraceSectionMetric("cache_hit", TraceSectionMetric.Mode.Sum),
+            TraceSectionMetric("cache_miss", TraceSectionMetric.Mode.Sum)
+        )
+    } else {
+        emptyList()
+    }
+
     @Test
     fun startup() = benchmarkRule.measureStartup(
         compilationMode = compilationMode,
         startupMode = startupMode,
+        metrics = metrics,
         packageName = "androidx.compose.integration.macrobenchmark.target"
     ) {
         action = "androidx.compose.integration.macrobenchmark.target.LAZY_COLUMN_ACTIVITY"
diff --git a/compose/material3/material3/api/current.txt b/compose/material3/material3/api/current.txt
index f8ee54f..71a26ff 100644
--- a/compose/material3/material3/api/current.txt
+++ b/compose/material3/material3/api/current.txt
@@ -561,6 +561,9 @@
   public final class SwipeableKt {
   }
 
+  public final class SwipeableV2Kt {
+  }
+
   @androidx.compose.runtime.Immutable public final class SwitchColors {
   }
 
diff --git a/compose/material3/material3/api/public_plus_experimental_current.txt b/compose/material3/material3/api/public_plus_experimental_current.txt
index 04260bd..8dc2dc4 100644
--- a/compose/material3/material3/api/public_plus_experimental_current.txt
+++ b/compose/material3/material3/api/public_plus_experimental_current.txt
@@ -810,6 +810,9 @@
   public final class SwipeableKt {
   }
 
+  public final class SwipeableV2Kt {
+  }
+
   @androidx.compose.runtime.Immutable public final class SwitchColors {
   }
 
diff --git a/compose/material3/material3/api/restricted_current.txt b/compose/material3/material3/api/restricted_current.txt
index f8ee54f..71a26ff 100644
--- a/compose/material3/material3/api/restricted_current.txt
+++ b/compose/material3/material3/api/restricted_current.txt
@@ -561,6 +561,9 @@
   public final class SwipeableKt {
   }
 
+  public final class SwipeableV2Kt {
+  }
+
   @androidx.compose.runtime.Immutable public final class SwitchColors {
   }
 
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/SwipeableV2.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/SwipeableV2.kt
new file mode 100644
index 0000000..d7bd6ef
--- /dev/null
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/SwipeableV2.kt
@@ -0,0 +1,504 @@
+/*
+ * 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.
+ */
+// This is a mirror of androidx.compose.material.SwipeableV2.kt from M2.
+// DO NOT MODIFY DIRECTLY, make changes upstream and mirror them.
+
+package androidx.compose.material3
+
+import androidx.compose.animation.core.AnimationSpec
+import androidx.compose.animation.core.SpringSpec
+import androidx.compose.animation.core.animate
+import androidx.compose.foundation.gestures.DraggableState
+import androidx.compose.foundation.gestures.Orientation
+import androidx.compose.foundation.gestures.draggable
+import androidx.compose.foundation.interaction.MutableInteractionSource
+import androidx.compose.foundation.layout.offset
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Stable
+import androidx.compose.runtime.derivedStateOf
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.saveable.Saver
+import androidx.compose.runtime.saveable.rememberSaveable
+import androidx.compose.runtime.setValue
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.layout.onSizeChanged
+import androidx.compose.ui.platform.LocalDensity
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.dp
+import kotlin.math.abs
+import kotlinx.coroutines.CancellationException
+import kotlinx.coroutines.launch
+
+/**
+ * Enable swipe gestures between a set of predefined states.
+ *
+ * When a swipe is detected, the offset of the [SwipeableV2State] will be updated with the swipe
+ * delta. You should use this offset to move your content accordingly (see [Modifier.offset]).
+ * When the swipe ends, the offset will be animated to one of the anchors and when that anchor is
+ * reached, the value of the [SwipeableV2State] will also be updated to the state corresponding to
+ * the new anchor.
+ *
+ * Swiping is constrained between the minimum and maximum anchors.
+ *
+ * @param state The associated [SwipeableV2State].
+ * @param orientation The orientation in which the swipeable can be swiped.
+ * @param enabled Whether this [swipeable] is enabled and should react to the user's input.
+ * @param reverseDirection Whether to reverse the direction of the swipe, so a top to bottom
+ * swipe will behave like bottom to top, and a left to right swipe will behave like right to left.
+ * @param interactionSource Optional [MutableInteractionSource] that will passed on to
+ * the internal [Modifier.draggable].
+ */
+@ExperimentalMaterial3Api
+internal fun <T> Modifier.swipeableV2(
+    state: SwipeableV2State<T>,
+    orientation: Orientation,
+    enabled: Boolean = true,
+    reverseDirection: Boolean = false,
+    interactionSource: MutableInteractionSource? = null
+) = draggable(
+    state = state.draggableState,
+    orientation = orientation,
+    enabled = enabled,
+    interactionSource = interactionSource,
+    reverseDirection = reverseDirection,
+    startDragImmediately = state.isAnimationRunning,
+    onDragStopped = { velocity -> launch { state.settle(velocity) } }
+)
+
+/**
+ * Define anchor points for a given [SwipeableV2State] based on this node's layout size and update
+ * the state with them.
+ *
+ * @param state The associated [SwipeableV2State]
+ * @param possibleStates All possible states the [SwipeableV2State] could be in.
+ * @param anchorsChanged A callback to be invoked when the anchors have changed, `null` by default.
+ * Components with custom reconciliation logic should implement this callback, i.e. to re-target an
+ * in-progress animation.
+ * @param calculateAnchor This method will be invoked to calculate the position of all
+ * [possibleStates], given this node's layout size. Return the anchor's offset from the initial
+ * anchor, or `null` to indicate that a state does not exist.
+ */
+@ExperimentalMaterial3Api
+internal fun <T> Modifier.swipeAnchors(
+    state: SwipeableV2State<T>,
+    possibleStates: Set<T>,
+    anchorsChanged: ((oldAnchors: Map<T, Float>, newAnchors: Map<T, Float>) -> Unit)? = null,
+    calculateAnchor: (state: T, layoutSize: IntSize) -> Float?,
+) = onSizeChanged { layoutSize ->
+    val previousAnchors = state.anchors
+    val newAnchors = mutableMapOf<T, Float>()
+    possibleStates.forEach {
+        val anchorValue = calculateAnchor(it, layoutSize)
+        if (anchorValue != null) {
+            newAnchors[it] = anchorValue
+        }
+    }
+    if (previousAnchors == newAnchors) return@onSizeChanged
+    state.updateAnchors(newAnchors)
+
+    if (previousAnchors.isNotEmpty()) {
+        anchorsChanged?.invoke(previousAnchors, newAnchors)
+    }
+}
+
+/**
+ * State of the [swipeableV2] modifier.
+ *
+ * This contains necessary information about any ongoing swipe or animation and provides methods
+ * to change the state either immediately or by starting an animation. To create and remember a
+ * [SwipeableV2State] use [rememberSwipeableV2State].
+ *
+ * @param initialState The initial value of the state.
+ * @param density The density used to convert thresholds from px to dp.
+ * @param animationSpec The default animation that will be used to animate to a new state.
+ * @param confirmStateChange Optional callback invoked to confirm or veto a pending state change.
+ * @param positionalThreshold The positional threshold to be used when calculating the target state
+ * while a swipe is in progress and when settling after the swipe ends. This is the distance from
+ * the start of a transition. It will be, depending on the direction of the interaction, added or
+ * subtracted from/to the origin offset. It should always be a positive value. See the
+ * [fractionalPositionalThreshold] and [fixedPositionalThreshold] methods.
+ * @param velocityThreshold The velocity threshold (in dp per second) that the end velocity has to
+ * exceed in order to animate to the next state, even if the [positionalThreshold] has not been
+ * reached.
+ */
+@Stable
+@ExperimentalMaterial3Api
+internal class SwipeableV2State<T>(
+    initialState: T,
+    internal val density: Density,
+    internal val animationSpec: AnimationSpec<Float> = SwipeableV2Defaults.AnimationSpec,
+    internal val confirmStateChange: (newValue: T) -> Boolean = { true },
+    internal val positionalThreshold: Density.(totalDistance: Float) -> Float =
+        SwipeableV2Defaults.PositionalThreshold,
+    internal val velocityThreshold: Dp = SwipeableV2Defaults.VelocityThreshold,
+) {
+
+    /**
+     * The current state of the [SwipeableV2State].
+     */
+    var currentState: T by mutableStateOf(initialState)
+        private set
+
+    /**
+     * The target state. This is the closest state to the current offset (taking into account
+     * positional thresholds). If no interactions like animations or drags are in progress, this
+     * will be the current state.
+     */
+    val targetState: T by derivedStateOf {
+        val currentOffset = offset
+        if (currentOffset != null) {
+            computeTarget(currentOffset, currentState, velocity = 0f)
+        } else currentState
+    }
+
+    /**
+     * The current offset, or null if it has not been initialized yet.
+     *
+     * The offset will be initialized during the first measurement phase of the node that the
+     * [swipeableV2] modifier is attached to. These are the phases:
+     * Composition { -> Effects } -> Layout { Measurement -> Placement } -> Drawing
+     * During the first composition, the offset will be null. In subsequent compositions, the offset
+     * will be derived from the anchors of the previous pass.
+     * Always prefer accessing the offset from a LaunchedEffect as it will be scheduled to be
+     * executed the next frame, after layout.
+     *
+     * To guarantee stricter semantics, consider using [requireOffset].
+     */
+    val offset: Float? by derivedStateOf {
+        dragPosition?.coerceIn(minBound, maxBound)
+    }
+
+    /**
+     * Require the current offset.
+     *
+     * @throws IllegalStateException If the offset has not been initialized yet
+     */
+    fun requireOffset(): Float = checkNotNull(offset) {
+        "The offset was read before being initialized. Did you access the offset in a phase " +
+            "before layout, like effects or composition?"
+    }
+
+    /**
+     * Whether an animation is currently in progress.
+     */
+    var isAnimationRunning: Boolean by mutableStateOf(false)
+        private set
+
+    /**
+     * The fraction of the progress going from currentState to targetState, within [0f..1f] bounds.
+     */
+    /*@FloatRange(from = 0f, to = 1f)*/
+    val progress: Float by derivedStateOf {
+        val a = anchors[currentState] ?: 0f
+        val b = anchors[targetState] ?: 0f
+        val distance = abs(b - a)
+        if (distance > 1e-6f) {
+            val progress = (this.requireOffset() - a) / (b - a)
+            // If we are very close to 0f or 1f, we round to the closest
+            if (progress < 1e-6f) 0f else if (progress > 1 - 1e-6f) 1f else progress
+        } else 1f
+    }
+
+    /**
+     * The velocity of the last known animation. Gets reset to 0f when an animation completes
+     * successfully, but does not get reset when an animation gets interrupted.
+     * You can use this value to provide smooth reconciliation behavior when re-targeting an
+     * animation.
+     */
+    var lastVelocity: Float by mutableStateOf(0f)
+        private set
+
+    private var dragPosition by mutableStateOf<Float?>(null)
+
+    private val minBound by derivedStateOf { anchors.minOrNull() ?: Float.NEGATIVE_INFINITY }
+    private val maxBound by derivedStateOf { anchors.maxOrNull() ?: Float.POSITIVE_INFINITY }
+
+    private val velocityThresholdPx = with(density) { velocityThreshold.toPx() }
+
+    internal val draggableState = DraggableState {
+        dragPosition = (dragPosition ?: 0f) + it
+    }
+
+    internal var anchors by mutableStateOf(emptyMap<T, Float>())
+
+    internal fun updateAnchors(newAnchors: Map<T, Float>) {
+        val previousAnchorsEmpty = anchors.isEmpty()
+        anchors = newAnchors
+        if (previousAnchorsEmpty) {
+            dragPosition = anchors.requireAnchor(this.currentState)
+        }
+    }
+
+    /**
+     * Whether the [state] has an anchor associated with it.
+     */
+    fun hasAnchorForState(state: T): Boolean = anchors.containsKey(state)
+
+    /**
+     * Snap to a [targetState] without any animation.
+     *
+     * @throws CancellationException if the interaction interrupted by another interaction like a
+     * gesture interaction or another programmatic interaction like a [animateTo] or [snapTo] call.
+     *
+     * @param targetState The target state of the animation
+     */
+    suspend fun snapTo(targetState: T) {
+        val targetOffset = anchors.requireAnchor(targetState)
+        draggableState.drag {
+            dragBy(targetOffset - requireOffset())
+        }
+        this.currentState = targetState
+    }
+
+    /**
+     * Animate to a [targetState].
+     *
+     * @throws CancellationException if the interaction interrupted by another interaction like a
+     * gesture interaction or another programmatic interaction like a [animateTo] or [snapTo] call.
+     *
+     * @param targetState The target state of the animation
+     * @param velocity The velocity the animation should start with, [lastVelocity] by default
+     */
+    suspend fun animateTo(
+        targetState: T,
+        velocity: Float = lastVelocity,
+    ) {
+        val targetOffset = anchors.requireAnchor(targetState)
+        try {
+            draggableState.drag {
+                isAnimationRunning = true
+                var prev = dragPosition ?: 0f
+                try {
+                    animate(prev, targetOffset, velocity, animationSpec) { value, velocity ->
+                        dragBy(value - prev)
+                        prev = value
+                        lastVelocity = velocity
+                    }
+                } finally {
+                    isAnimationRunning = false
+                }
+            }
+            lastVelocity = 0f
+        } finally {
+            val endOffset = requireNotNull(dragPosition) {
+                "The drag position was in an " +
+                    "invalid state. Please report this issue."
+            }
+            val endState = anchors
+                .entries
+                .firstOrNull { (_, anchorOffset) -> abs(anchorOffset - endOffset) < 0.5f }
+                ?.key
+            this.currentState = endState ?: currentState
+        }
+    }
+
+    /**
+     * Find the closest anchor taking into account the velocity and settle at it with an animation.
+     */
+    suspend fun settle(velocity: Float) {
+        val previousState = this.currentState
+        val targetState = computeTarget(
+            offset = requireOffset(),
+            currentState = previousState,
+            velocity = velocity
+        )
+        if (confirmStateChange(targetState)) {
+            animateTo(targetState, velocity)
+        } else {
+            // If the user vetoed the state change, rollback to the previous state.
+            animateTo(previousState, velocity)
+        }
+    }
+
+    /**
+     * Swipe by the [delta], coerce it in the bounds and dispatch it to the [draggableState].
+     *
+     * @return The delta the [draggableState] will consume
+     */
+    fun dispatchRawDelta(delta: Float): Float {
+        val currentDragPosition = dragPosition ?: 0f
+        val potentiallyConsumed = currentDragPosition + delta
+        val clamped = potentiallyConsumed.coerceIn(minBound, maxBound)
+        val deltaToConsume = clamped - currentDragPosition
+        if (abs(deltaToConsume) > 0) {
+            draggableState.dispatchRawDelta(deltaToConsume)
+        }
+        return deltaToConsume
+    }
+
+    private fun computeTarget(
+        offset: Float,
+        currentState: T,
+        velocity: Float
+    ): T {
+        val currentAnchors = anchors
+        val currentAnchor = currentAnchors.requireAnchor(currentState)
+        return if (currentAnchor <= offset) {
+            // Swiping from lower to upper (positive).
+            if (velocity >= velocityThresholdPx) {
+                currentAnchors.closestState(offset, true)
+            } else {
+                val upper = currentAnchors.closestState(offset, true)
+                val distance = abs(currentAnchors.getValue(upper) - currentAnchor)
+                val relativeThreshold = abs(positionalThreshold(density, distance))
+                val absoluteThreshold = abs(currentAnchor + relativeThreshold)
+                if (offset < absoluteThreshold) currentState else upper
+            }
+        } else {
+            // Swiping from upper to lower (negative).
+            if (velocity <= -velocityThresholdPx) {
+                currentAnchors.closestState(offset, false)
+            } else {
+                val lower = currentAnchors.closestState(offset, false)
+                val distance = abs(currentAnchor - currentAnchors.getValue(lower))
+                val relativeThreshold = abs(positionalThreshold(density, distance))
+                val absoluteThreshold = abs(currentAnchor - relativeThreshold)
+                if (offset > absoluteThreshold) currentState else lower
+            }
+        }
+    }
+
+    companion object {
+        /**
+         * The default [Saver] implementation for [SwipeableV2State].
+         */
+        @ExperimentalMaterial3Api
+        fun <T : Any> Saver(
+            animationSpec: AnimationSpec<Float>,
+            confirmStateChange: (T) -> Boolean,
+            positionalThreshold: Density.(distance: Float) -> Float,
+            velocityThreshold: Dp,
+            density: Density
+        ) = Saver<SwipeableV2State<T>, T>(
+            save = { it.currentState },
+            restore = {
+                SwipeableV2State(
+                    initialState = it,
+                    animationSpec = animationSpec,
+                    confirmStateChange = confirmStateChange,
+                    positionalThreshold = positionalThreshold,
+                    velocityThreshold = velocityThreshold,
+                    density = density
+                )
+            }
+        )
+    }
+}
+
+/**
+ * Create and remember a [SwipeableV2State].
+ *
+ * @param initialState The initial state.
+ * @param animationSpec The default animation that will be used to animate to a new state.
+ * @param confirmStateChange Optional callback invoked to confirm or veto a pending state change.
+ */
+@Composable
+@ExperimentalMaterial3Api
+internal fun <T : Any> rememberSwipeableV2State(
+    initialState: T,
+    animationSpec: AnimationSpec<Float> = SwipeableV2Defaults.AnimationSpec,
+    confirmStateChange: (newValue: T) -> Boolean = { true }
+): SwipeableV2State<T> {
+    val density = LocalDensity.current
+    return rememberSaveable(
+        initialState, animationSpec, confirmStateChange, density,
+        saver = SwipeableV2State.Saver(
+            animationSpec = animationSpec,
+            confirmStateChange = confirmStateChange,
+            positionalThreshold = SwipeableV2Defaults.PositionalThreshold,
+            velocityThreshold = SwipeableV2Defaults.VelocityThreshold,
+            density = density
+        ),
+    ) {
+        SwipeableV2State(
+            initialState = initialState,
+            animationSpec = animationSpec,
+            confirmStateChange = confirmStateChange,
+            positionalThreshold = SwipeableV2Defaults.PositionalThreshold,
+            velocityThreshold = SwipeableV2Defaults.VelocityThreshold,
+            density = density
+        )
+    }
+}
+
+/**
+ * Expresses a fixed positional threshold of [threshold] dp. This will be the distance from an
+ * anchor that needs to be reached for [SwipeableV2State] to settle to the next closest anchor.
+ *
+ * @see [fractionalPositionalThreshold] for a fractional positional threshold
+ */
+@ExperimentalMaterial3Api
+internal fun fixedPositionalThreshold(threshold: Dp): Density.(distance: Float) -> Float = {
+    threshold.toPx()
+}
+
+/**
+ * Expresses a relative positional threshold of the [fraction] of the distance to the closest anchor
+ * in the current direction. This will be the distance from an anchor that needs to be reached for
+ * [SwipeableV2State] to settle to the next closest anchor.
+ *
+ * @see [fixedPositionalThreshold] for a fixed positional threshold
+ */
+@ExperimentalMaterial3Api
+internal fun fractionalPositionalThreshold(
+    fraction: Float
+): Density.(distance: Float) -> Float = { distance -> distance * fraction }
+
+/**
+ * Contains useful defaults for [swipeableV2] and [SwipeableV2State].
+ */
+@Stable
+@ExperimentalMaterial3Api
+internal object SwipeableV2Defaults {
+    /**
+     * The default animation used by [SwipeableV2State].
+     */
+    @ExperimentalMaterial3Api
+    val AnimationSpec = SpringSpec<Float>()
+
+    /**
+     * The default velocity threshold (1.8 dp per millisecond) used by [rememberSwipeableV2State].
+     */
+    @ExperimentalMaterial3Api
+    val VelocityThreshold: Dp = 125.dp
+
+    /**
+     * The default positional threshold (56 dp) used by [rememberSwipeableV2State]
+     */
+    @ExperimentalMaterial3Api
+    val PositionalThreshold: Density.(totalDistance: Float) -> Float =
+        fixedPositionalThreshold(56.dp)
+}
+
+private fun <T> Map<T, Float>.closestState(
+    offset: Float = 0f,
+    searchUpwards: Boolean = false
+): T {
+    require(isNotEmpty()) { "The anchors were empty when trying to find the closest state" }
+    return minBy { (_, anchor) ->
+        val delta = if (searchUpwards) anchor - offset else offset - anchor
+        if (delta < 0) Float.POSITIVE_INFINITY else delta
+    }.key
+}
+
+private fun <T> Map<T, Float>.minOrNull() = minOfOrNull { (_, offset) -> offset }
+private fun <T> Map<T, Float>.maxOrNull() = maxOfOrNull { (_, offset) -> offset }
+private fun <T> Map<T, Float>.requireAnchor(state: T) = requireNotNull(this[state]) {
+    "Required anchor $state was not found in anchors. Current anchors: ${this.toMap()}"
+}
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/ComposeVersion.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/ComposeVersion.kt
index dc0e0b1..f91c9a1 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/ComposeVersion.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/ComposeVersion.kt
@@ -28,5 +28,5 @@
      * IMPORTANT: Whenever updating this value, please make sure to also update `versionTable` and
      * `minimumRuntimeVersionInt` in `VersionChecker.kt` of the compiler.
      */
-    const val version: Int = 8601
+    const val version: Int = 9001
 }
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 bafd6f6..ed86b4a 100644
--- a/compose/ui/ui-text/api/public_plus_experimental_current.txt
+++ b/compose/ui/ui-text/api/public_plus_experimental_current.txt
@@ -494,8 +494,8 @@
   public final class TextPainterKt {
     method @androidx.compose.ui.text.ExperimentalTextApi public static void drawText(androidx.compose.ui.graphics.drawscope.DrawScope, androidx.compose.ui.text.TextMeasurer textMeasurer, androidx.compose.ui.text.AnnotatedString text, optional long topLeft, optional androidx.compose.ui.text.TextStyle style, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, optional long maxSize);
     method @androidx.compose.ui.text.ExperimentalTextApi public static void drawText(androidx.compose.ui.graphics.drawscope.DrawScope, androidx.compose.ui.text.TextMeasurer textMeasurer, String text, optional long topLeft, optional androidx.compose.ui.text.TextStyle style, optional int overflow, optional boolean softWrap, optional int maxLines, optional long maxSize);
-    method @androidx.compose.ui.text.ExperimentalTextApi public static void drawText(androidx.compose.ui.graphics.drawscope.DrawScope, androidx.compose.ui.text.TextLayoutResult textLayoutResult, optional long color, optional long topLeft, optional float alpha, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextDecoration? textDecoration);
-    method @androidx.compose.ui.text.ExperimentalTextApi public static void drawText(androidx.compose.ui.graphics.drawscope.DrawScope, androidx.compose.ui.text.TextLayoutResult textLayoutResult, androidx.compose.ui.graphics.Brush brush, optional long topLeft, optional float alpha, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextDecoration? textDecoration);
+    method @androidx.compose.ui.text.ExperimentalTextApi public static void drawText(androidx.compose.ui.graphics.drawscope.DrawScope, androidx.compose.ui.text.TextLayoutResult textLayoutResult, optional long color, optional long topLeft, optional float alpha, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle);
+    method @androidx.compose.ui.text.ExperimentalTextApi public static void drawText(androidx.compose.ui.graphics.drawscope.DrawScope, androidx.compose.ui.text.TextLayoutResult textLayoutResult, androidx.compose.ui.graphics.Brush brush, optional long topLeft, optional float alpha, optional androidx.compose.ui.graphics.Shadow? shadow, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.graphics.drawscope.DrawStyle? drawStyle);
   }
 
   @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class TextRange {
diff --git a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/TextPainterTest.kt b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/TextPainterTest.kt
index 3cc0962..4392406 100644
--- a/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/TextPainterTest.kt
+++ b/compose/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/ui/text/TextPainterTest.kt
@@ -23,9 +23,12 @@
 import androidx.compose.ui.graphics.Brush
 import androidx.compose.ui.graphics.Canvas
 import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.StrokeCap
 import androidx.compose.ui.graphics.asImageBitmap
 import androidx.compose.ui.graphics.drawscope.CanvasDrawScope
 import androidx.compose.ui.graphics.drawscope.DrawScope
+import androidx.compose.ui.graphics.drawscope.Fill
+import androidx.compose.ui.graphics.drawscope.Stroke
 import androidx.compose.ui.text.font.FontFamily
 import androidx.compose.ui.text.font.createFontFamilyResolver
 import androidx.compose.ui.text.font.toFontFamily
@@ -277,6 +280,41 @@
     }
 
     @Test
+    fun drawTextLayout_shouldChangeDrawStyle() {
+        val fillDrawStyle = Fill
+        val strokeDrawStyle = Stroke(8f, cap = StrokeCap.Round)
+        val measurer = textMeasurer()
+        val textLayoutResultFill = measurer.measure(
+            text = longText,
+            style = TextStyle(
+                drawStyle = fillDrawStyle,
+                fontFamily = fontFamilyMeasureFont,
+                fontSize = 20.sp
+            ),
+            constraints = Constraints(maxWidth = 400, maxHeight = 400)
+        )
+
+        val textLayoutResultStroke = measurer.measure(
+            text = longText,
+            style = TextStyle(
+                drawStyle = strokeDrawStyle,
+                fontFamily = fontFamilyMeasureFont,
+                fontSize = 20.sp
+            ),
+            constraints = Constraints(maxWidth = 400, maxHeight = 400)
+        )
+
+        val bitmap = draw {
+            drawText(textLayoutResultFill, drawStyle = strokeDrawStyle)
+        }
+        val bitmap2 = draw {
+            drawText(textLayoutResultStroke)
+        }
+
+        assertThat(bitmap).isEqualToBitmap(bitmap2)
+    }
+
+    @Test
     fun textMeasurerDraw_isConstrainedTo_canvasSizeByDefault() {
         val measurer = textMeasurer()
         // constrain the width, height is ignored
diff --git a/compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/Paragraph.kt b/compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/Paragraph.kt
index 2da5fdb..4a9f10c 100644
--- a/compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/Paragraph.kt
+++ b/compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/Paragraph.kt
@@ -25,16 +25,15 @@
 import androidx.compose.ui.graphics.Shadow
 import androidx.compose.ui.graphics.SolidColor
 import androidx.compose.ui.graphics.drawscope.DrawStyle
-import androidx.compose.ui.graphics.drawscope.Fill
 import androidx.compose.ui.text.font.Font
 import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.internal.JvmDefaultWithCompatibility
 import androidx.compose.ui.text.platform.ActualParagraph
 import androidx.compose.ui.text.style.ResolvedTextDirection
 import androidx.compose.ui.text.style.TextDecoration
 import androidx.compose.ui.unit.Constraints
 import androidx.compose.ui.unit.Density
 import kotlin.math.ceil
-import androidx.compose.ui.text.internal.JvmDefaultWithCompatibility
 
 internal const val DefaultMaxLines = Int.MAX_VALUE
 
@@ -246,11 +245,12 @@
      * @param color Applies to the default text paint color that's used by this paragraph. Text
      * color spans are not affected. [Color.Unspecified] is treated as no-op.
      * @param shadow Applies to the default text paint shadow that's used by this paragraph. Text
-     * shadow spans are not affected. Passing this value as [Shadow.None] or `null` removes any
-     * existing shadow on this paragraph.
+     * shadow spans are not affected. [Shadow.None] removes any existing shadow on this paragraph,
+     * `null` does not change the currently set [Shadow] configuration.
      * @param textDecoration Applies to the default text paint that's used by this paragraph. Spans
-     * that specify a TextDecoration are not affected. Passing this value as [TextDecoration.None]
-     * or `null` removes any existing TextDecoration on this paragraph.
+     * that specify a TextDecoration are not affected. [TextDecoration.None] removes any existing
+     * TextDecoration on this paragraph, `null` does not change the currently set [TextDecoration]
+     * configuration.
      */
     fun paint(
         canvas: Canvas,
@@ -268,14 +268,15 @@
      * @param color Applies to the default text paint color that's used by this paragraph. Text
      * color spans are not affected. [Color.Unspecified] is treated as no-op.
      * @param shadow Applies to the default text paint shadow that's used by this paragraph. Text
-     * shadow spans are not affected. Passing this value as [Shadow.None] or `null` removes any
-     * existing shadow on this paragraph.
+     * shadow spans are not affected. [Shadow.None] removes any existing shadow on this paragraph,
+     * `null` does not change the currently set [Shadow] configuration.
      * @param textDecoration Applies to the default text paint that's used by this paragraph. Spans
-     * that specify a TextDecoration are not affected. Passing this value as [TextDecoration.None]
-     * or `null` removes any existing TextDecoration on this paragraph.
+     * that specify a TextDecoration are not affected. [TextDecoration.None] removes any existing
+     * TextDecoration on this paragraph, `null` does not change the currently set [TextDecoration]
+     * configuration.
      * @param drawStyle Applies to the default text paint style that's used by this paragraph. Spans
-     * that specify a DrawStyle are not affected. Passing this value as `null` is treated equally
-     * to passing it as [Fill].
+     * that specify a DrawStyle are not affected. Passing this value as `null` does not change the
+     * currently set DrawStyle.
      */
     @ExperimentalTextApi
     fun paint(
@@ -300,14 +301,15 @@
      * alpha spans are not affected. [Float.NaN] is treated as no-op. All other values are coerced
      * into [0f, 1f] range.
      * @param shadow Applies to the default text paint shadow that's used by this paragraph. Text
-     * shadow spans are not affected. Passing this value as [Shadow.None] or `null` removes any
-     * existing shadow on this paragraph.
+     * shadow spans are not affected. [Shadow.None] removes any existing shadow on this paragraph,
+     * `null` does not change the currently set [Shadow] configuration.
      * @param textDecoration Applies to the default text paint that's used by this paragraph. Spans
-     * that specify a TextDecoration are not affected. Passing this value as [TextDecoration.None]
-     * or `null` removes any existing TextDecoration on this paragraph.
+     * that specify a TextDecoration are not affected. [TextDecoration.None] removes any existing
+     * TextDecoration on this paragraph, `null` does not change the currently set [TextDecoration]
+     * configuration.
      * @param drawStyle Applies to the default text paint style that's used by this paragraph. Spans
-     * that specify a DrawStyle are not affected. Passing this value as `null` is treated equally
-     * to passing it as [Fill].
+     * that specify a DrawStyle are not affected. Passing this value as `null` does not change the
+     * currently set DrawStyle.
      */
     @ExperimentalTextApi
     fun paint(
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 4f565ed..a0f47fc 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
@@ -24,6 +24,7 @@
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.Shadow
 import androidx.compose.ui.graphics.drawscope.DrawScope
+import androidx.compose.ui.graphics.drawscope.DrawStyle
 import androidx.compose.ui.graphics.drawscope.DrawTransform
 import androidx.compose.ui.graphics.drawscope.withTransform
 import androidx.compose.ui.graphics.isUnspecified
@@ -228,6 +229,7 @@
  * transparent to fully opaque respectively
  * @param shadow The shadow effect applied on the text.
  * @param textDecoration The decorations to paint on the text (e.g., an underline).
+ * @param drawStyle Whether or not the text is stroked or filled in.
  *
  * @sample androidx.compose.ui.text.samples.DrawTextLayoutResultSample
  */
@@ -238,10 +240,12 @@
     topLeft: Offset = Offset.Zero,
     alpha: Float = Float.NaN,
     shadow: Shadow? = null,
-    textDecoration: TextDecoration? = null
+    textDecoration: TextDecoration? = null,
+    drawStyle: DrawStyle? = null
 ) {
     val newShadow = shadow ?: textLayoutResult.layoutInput.style.shadow
     val newTextDecoration = textDecoration ?: textLayoutResult.layoutInput.style.textDecoration
+    val newDrawStyle = drawStyle ?: textLayoutResult.layoutInput.style.drawStyle
 
     withTransform({
         translate(topLeft.x, topLeft.y)
@@ -256,14 +260,16 @@
                 brush,
                 if (!alpha.isNaN()) alpha else textLayoutResult.layoutInput.style.alpha,
                 newShadow,
-                newTextDecoration
+                newTextDecoration,
+                newDrawStyle
             )
         } else {
             textLayoutResult.multiParagraph.paint(
                 drawContext.canvas,
                 color.takeOrElse { textLayoutResult.layoutInput.style.color }.modulate(alpha),
                 newShadow,
-                newTextDecoration
+                newTextDecoration,
+                newDrawStyle
             )
         }
     }
@@ -282,6 +288,7 @@
  * transparent to fully opaque respectively.
  * @param shadow The shadow effect applied on the text.
  * @param textDecoration The decorations to paint on the text (e.g., an underline).
+ * @param drawStyle Whether or not the text is stroked or filled in.
  *
  * @sample androidx.compose.ui.text.samples.DrawTextLayoutResultSample
  */
@@ -292,10 +299,12 @@
     topLeft: Offset = Offset.Zero,
     alpha: Float = Float.NaN,
     shadow: Shadow? = null,
-    textDecoration: TextDecoration? = null
+    textDecoration: TextDecoration? = null,
+    drawStyle: DrawStyle? = null
 ) {
     val newShadow = shadow ?: textLayoutResult.layoutInput.style.shadow
     val newTextDecoration = textDecoration ?: textLayoutResult.layoutInput.style.textDecoration
+    val newDrawStyle = drawStyle ?: textLayoutResult.layoutInput.style.drawStyle
 
     withTransform({
         translate(topLeft.x, topLeft.y)
@@ -306,7 +315,8 @@
             brush,
             if (!alpha.isNaN()) alpha else textLayoutResult.layoutInput.style.alpha,
             newShadow,
-            newTextDecoration
+            newTextDecoration,
+            newDrawStyle
         )
     }
 }
diff --git a/core/core-remoteviews/src/main/java/androidx/core/widget/RemoteViewsCompatService.kt b/core/core-remoteviews/src/main/java/androidx/core/widget/RemoteViewsCompatService.kt
index 34a449d..e386f7c 100644
--- a/core/core-remoteviews/src/main/java/androidx/core/widget/RemoteViewsCompatService.kt
+++ b/core/core-remoteviews/src/main/java/androidx/core/widget/RemoteViewsCompatService.kt
@@ -31,6 +31,7 @@
 import android.widget.RemoteViewsService
 import androidx.annotation.RestrictTo
 import androidx.core.content.pm.PackageInfoCompat
+import androidx.core.remoteviews.R
 import androidx.core.widget.RemoteViewsCompat.RemoteCollectionItems
 
 /**
@@ -69,14 +70,22 @@
 
         override fun getCount() = mItems.itemCount
 
-        override fun getViewAt(position: Int) = mItems.getItemView(position)
+        override fun getViewAt(position: Int) = try {
+            mItems.getItemView(position)
+        } catch (e: ArrayIndexOutOfBoundsException) {
+            // RemoteViewsAdapter may sometimes request an index that is out of bounds. Return an
+            // error view in this case. See b/242730601 for more details.
+            RemoteViews(mContext.packageName, R.layout.invalid_list_item)
+        }
 
         override fun getLoadingView() = null
 
         override fun getViewTypeCount() = mItems.viewTypeCount
 
-        override fun getItemId(position: Int): Long {
-            return mItems.getItemId(position)
+        override fun getItemId(position: Int) = try {
+            mItems.getItemId(position)
+        } catch (e: ArrayIndexOutOfBoundsException) {
+            -1
         }
 
         override fun hasStableIds() = mItems.hasStableIds()
diff --git a/core/core-remoteviews/src/main/res/layout/invalid_list_item.xml b/core/core-remoteviews/src/main/res/layout/invalid_list_item.xml
new file mode 100644
index 0000000..c55a8c4
--- /dev/null
+++ b/core/core-remoteviews/src/main/res/layout/invalid_list_item.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ 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.
+  -->
+
+<TextView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:text="Invalid list item requested"/>
diff --git a/core/core/src/androidTest/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompatTest.java b/core/core/src/androidTest/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompatTest.java
index e535f73..7a8da9b 100644
--- a/core/core/src/androidTest/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompatTest.java
+++ b/core/core/src/androidTest/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompatTest.java
@@ -182,6 +182,18 @@
         }
     }
 
+    @SdkSuppress(minSdkVersion = 19)
+    @Test
+    public void testAccessibilityActionToString() {
+        AccessibilityActionCompat actionCompat;
+        actionCompat = AccessibilityActionCompat.ACTION_SHOW_ON_SCREEN;
+        final String showOnScreen = "AccessibilityActionCompat: ACTION_SHOW_ON_SCREEN";
+        assertThat(actionCompat.toString(), is(showOnScreen));
+        final String customAction = "CustomAction";
+        actionCompat = new AccessibilityActionCompat(123123123, customAction);
+        assertThat(actionCompat.toString(), is("AccessibilityActionCompat: " + customAction));
+    }
+
     @Test
     public void testTouchDelegateInfo() {
         final Map<Region, View> targetMap = new HashMap<>(1);
diff --git a/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java b/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java
index 5db4c9d..bd43883 100644
--- a/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java
+++ b/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java
@@ -799,6 +799,20 @@
             }
             return true;
         }
+
+        @NonNull
+        @Override
+        public String toString() {
+            StringBuilder builder = new StringBuilder();
+            builder.append("AccessibilityActionCompat: ");
+            // Mirror AccessibilityNodeInfoCompat.toString's action string.
+            String actionName = getActionSymbolicName(mId);
+            if (actionName.equals("ACTION_UNKNOWN") && getLabel() != null) {
+                actionName = getLabel().toString();
+            }
+            builder.append(actionName);
+            return builder.toString();
+        }
     }
 
     /**
@@ -4407,7 +4421,7 @@
         return (extras.getInt(BOOLEAN_PROPERTY_KEY, 0) & property) == property;
     }
 
-    private static String getActionSymbolicName(int action) {
+    static String getActionSymbolicName(int action) {
         switch (action) {
             case ACTION_FOCUS:
                 return "ACTION_FOCUS";
diff --git a/development/build_log_simplifier/messages.ignore b/development/build_log_simplifier/messages.ignore
index a9e5ab6..6f1bd5f 100644
--- a/development/build_log_simplifier/messages.ignore
+++ b/development/build_log_simplifier/messages.ignore
@@ -787,3 +787,9 @@
 \* Recommended Action: Apply the 'com\.android\.lint' plugin to java library project :annotation:annotation\. to enable lint to analyze those sources\.
 # > Task :linkDebugTestIosX64 b/253041601
 w: Cached libraries will not be used with std allocator
+# cinterop warnings we have no control over.
+objc\[.*\]: Class .*
+# KMP messages on successful XCFramework builds.
+xcframework successfully .*
+# iOS benchmark invocation
+/usr/bin/xcodebuild
diff --git a/exifinterface/exifinterface/src/androidTest/java/androidx/exifinterface/media/ExifInterfaceTest.java b/exifinterface/exifinterface/src/androidTest/java/androidx/exifinterface/media/ExifInterfaceTest.java
index 8145f97..1b19f8d 100644
--- a/exifinterface/exifinterface/src/androidTest/java/androidx/exifinterface/media/ExifInterfaceTest.java
+++ b/exifinterface/exifinterface/src/androidTest/java/androidx/exifinterface/media/ExifInterfaceTest.java
@@ -65,6 +65,7 @@
 import java.nio.ByteBuffer;
 import java.nio.charset.Charset;
 import java.util.HashMap;
+import java.util.Objects;
 import java.util.Random;
 import java.util.concurrent.TimeUnit;
 
@@ -1455,9 +1456,10 @@
      */
     private void assertBitmapsEquivalent(File expectedImageFile, File actualImageFile) {
         BitmapFactory.Options expectedOptions = new BitmapFactory.Options();
-        Bitmap expectedBitmap = decodeBitmap(expectedImageFile, expectedOptions);
+        Bitmap expectedBitmap = Objects.requireNonNull(
+                decodeBitmap(expectedImageFile, expectedOptions));
         BitmapFactory.Options actualOptions = new BitmapFactory.Options();
-        Bitmap actualBitmap = decodeBitmap(actualImageFile, actualOptions);
+        Bitmap actualBitmap = Objects.requireNonNull(decodeBitmap(actualImageFile, actualOptions));
 
         assertEquals(expectedOptions.outWidth, actualOptions.outWidth);
         assertEquals(expectedOptions.outHeight, actualOptions.outHeight);
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 8bb9f01..8967b76 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -227,6 +227,7 @@
 testExtJunitKtx = { module = "androidx.test.ext:junit-ktx", version.ref = "androidxTestExtJunit" }
 testExtTruth = { module = "androidx.test.ext:truth", version.ref = "androidxTestExtTruth" }
 testMonitor = { module = "androidx.test:monitor", version.ref = "androidxTestMonitor" }
+testParameterInjector = { module = "com.google.testparameterinjector:test-parameter-injector", version = "1.9" }
 testRules = { module = "androidx.test:rules", version.ref = "androidxTestRules" }
 testRunner = { module = "androidx.test:runner", version.ref = "androidxTestRunner" }
 testUiautomator = { module = "androidx.test.uiautomator:uiautomator", version = "2.2.0" }
diff --git a/gradle/verification-keyring.keys b/gradle/verification-keyring.keys
index 94135b9..ccfa886 100644
--- a/gradle/verification-keyring.keys
+++ b/gradle/verification-keyring.keys
@@ -2613,6 +2613,54 @@
 -----END PGP PUBLIC KEY BLOCK-----
 
 
+pub    358A4ABAE72947C2
+uid    Jens Nyman <jnyman@google.com>
+
+sub    B8EB751F2C19011D
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQGNBGA2h7oBDADtWcow8HEnabHf+poCBJR+MG8JybFpgOQ5ns1e6b3xnD51kzqv
+0I1orkmIfhCVU4nPGp2jy0JHQUvf3NDIDobt/O/C7+3BvNanfw7sJeHXrCy90o3I
+qKqOHfUk73eNqh3yYffBUnRg7PXd6c/IqVJ9tOsx0Pgwnu0Egf+8wYEhxEhP49CP
+8uTdZQr2NUIhtDlcypbSGDPWF+f9aQwC8Pu6ctYHq2e3I3xDs11hGpOLsltecPVz
+gUE//YnSPpZJj4JwQ07/eu8MVZM0ekwE7PtadLd9gQIy6O8oB1VmhLY1bAquOmGT
+JmcmWmwTxH57MmhPeorVDVPUM1oQG7/kdFUUKqk26uxVG7KlTiddtGE78xbepc29
+swo5eNQNlWWo1ezRcxwLti0w5HMwne6Lg+uRkEc5OUUoIoZFwHJx7f/maXTvfDDo
+6DfZ/A5CZf6ai/mkWu0crZ2FpiFXAza/CO0l1bkcszzsXP1svqW9o3Lh1rqki5Ed
+LQXjfwjjN3SuoekAEQEAAbQeSmVucyBOeW1hbiA8am55bWFuQGdvb2dsZS5jb20+
+iQHUBBMBCgA+FiEE6L9jOzhrfdzx4amzNYpKuucpR8IFAmA2h7oCGwMFCQPCZwAF
+CwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQNYpKuucpR8Kx/gwAxTc2+BU4QJk+
+pNRu7/CEjst+THZVsdhp8ut5RnwEa5WqKO3aVw0AIGgzpTnLT2f3ugLYBzZHaG8y
+a+EHxVlghkPQBLv+RGDl3MJUIkrfGTUo2+zAZc+AVxX7VEaVObLvtdAwTAFeIsa3
+gfY4PBsMFFsBoUYyNp1vGCsTlLIjACeMu7PTjqgbQr95nU2t6civpiB3xT55cQLY
+RPQV3Eq/qzMDPB9RVLUYbWfT0BfJBZV+K7kPwE/9krur5w053Wa77atmAZ9OKj3S
+9GHK7Po4NErjPz/D0HfMEEjdRbZtaeVjJJ7ASI4jdRi5P5+Pxkg4CO4u83qBWBsE
+PkhE6yKAeMU5ecA6kEd0z1dFv4MPTmHBQtI3W4WffKmQEgr44ymMtowIsgpNA+TL
+DJSnweXr02Z3kQ0TVxa1EjJvif/GhvX8d3atPV6xK/3rl02/O/yU/JfA1rFXEulR
+EURh5XxfXSD5O+f0n6xxQsoKlYLDj2BX3nTqDHq1TbDnhkQOdvceuQGNBGA2h7oB
+DADnO8hCrrxvfc31rG1SgP9P6rUYMMJ+aBlKx63f5ZLt5Uc7iQHvp33lj7/EviWo
+jsyYXc13huFuGKsVjH2Q24+z+0Pmiuf1Wsk3YFb1lYCaNdkIBCpq9h6eY3hziuN0
+SvdsHDacX+MHN56TnHsKDcw2G+wFQ7MBHY88Wr60cYeRZfi5NA42k7/f8hwhST6/
+GBvXJLUMLuvPEgW9WOG94gDh70hBC48QhVEJCSGsIWkmBldcHKEUPR50q2yI3J9l
+eWZ5mtSSp/ikoikw1QkMcc9Jv+EI5VUbYTB04Q2bZLfuGkCS8KgnYZthxmUqTwCm
+TN3V1fZQL3dXJTjrUMGll9LooYFZwhOnVmpESylPQWcpq6zLtrY39kiYZQAuSshu
+vTD2lz9UWo10FNYvSB+YFLwX5L1M+8hvIL5RZt3G1BH/8cqcJpYbVj7hl+IVpnue
+DQYldhnYIkEvxhBhKk08gaaYz++s6nrv9orYAumd0AEeFg38uwX+wKdG98ChTik4
+QnMAEQEAAYkBvAQYAQoAJhYhBOi/Yzs4a33c8eGpszWKSrrnKUfCBQJgNoe6AhsM
+BQkDwmcAAAoJEDWKSrrnKUfCjz8MAKGbZqcyBnVxQI1U7jd22k+A+6THsnUzSmhH
+Ho6Ma17arp/HphvqzC7PHD67Oh1Y7ElTfUoXG4IX7qRd1iRvU7HNILtV6rMxbJ9u
+LXaDDwtoEw1ano3LYpNp/8nNxZTX3iTVaUUZ0j7T/QfqWXVwdwlj2a7v8tW/WEiP
+9UyppJ0OTn7+qfOGS1K/qdGijsFNR7XUoJMrE6Zbh4RMkvqr6L9WRJO9zb7kKeuC
+H71BnnMuI2uf1WvpKteVfS3GD/KCNRuTATRdpRUvxI+C+kPpJHHnB+S+e8X0PQot
+eqErKCceYYl4YraZAtAMRx3ylfG3+5CyPJOTjj8xJAA1XJZP1H3RGTmN8yJx4Ph9
+vE128oHXlcAk47Y1o2/hv63rTwSG3dmJwbjgbBoP3JwdYGGUtDJK6RgVsV1u0wN5
+MBcgDHVimXlcCl5HGSLWfF3hPMzDBOwAjelf5iv32+LWoOcy7N7Ka2Rawm3+gXQy
+FFbW42hpI8TDRfB4oHWyTsM6zYXNXw==
+=zYIg
+-----END PGP PUBLIC KEY BLOCK-----
+
+
 pub    36D4E9618F3ADAB5
 sub    C4935FA8AC763C70
 -----BEGIN PGP PUBLIC KEY BLOCK-----
@@ -6983,6 +7031,54 @@
 -----END PGP PUBLIC KEY BLOCK-----
 
 
+pub    9987B20C8F6A3064
+uid    mkruskal <mkruskal@google.com>
+
+sub    80CFA7C482552DC3
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQGNBGJGMxoBDADF9xkWwxwN72wRh0al9ARzTTIHpcVBIjDij1Xr768zMMRdKOsQ
+aEHRTBKArAfGl6Xt6CfYnu3wMgEDUfh50s9NPOKvhpKtqdIlUxZLEJ807ebW3MD+
+BnwoRUe0OsTItUQA+vLH8K2Uywd9f3OV9KQnqItUFMptaFhUC144hZhj3c0xhITS
+k45zucoXLKO9yqA+tlqav7taAJMrWbhRcRWXizK1wOZLyhu8NdIMUSL4Ei0blR90
+uA9i62XlOhpyvfpaC7oRh+jXHOCFK9sXe2vnvnTtJ1yqdXH4EOCYLjoheQN1R0u4
+6f6XoAy9c3tOSOZM9vwE56iOZJwv0bca6ZENnhHnYwWhbQwrY0JMIon0sUpx9RB2
+w4E7AeU8/maQG9hdB7s7vrAJFarlFQvc7kJ5FMTKFmWPalUTcT6yXntIQ3+xiH9l
+Oq0jGlAmQWYUvzHJ0SFjz1xJGBDM3GH9KfHbeoS3Xz5Emmw8YwEDUe9gt9po8bmw
+8qnA85uMZY2puh0AEQEAAbQebWtydXNrYWwgPG1rcnVza2FsQGdvb2dsZS5jb20+
+iQHUBBMBCgA+FiEEGHNmo//mv4+UuRNqmYeyDI9qMGQFAmJGMxoCGwMFCQPCZwAF
+CwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQmYeyDI9qMGT+fQv+Mx+c3qG/uk2v
+MB1N+WjiAlDL4PMwc7PqejaY/hQhQAC6am4J+YS9d2dXS6kHzQt3cSCnjD9K+npD
+Ighi4cYWWkOBluxdaJQmfooQFJlDCa+OCfLM+EVyqLQyJdFmkEWXIplmdptEtfHY
+VsSzaWs1lRUVUn3OJHDufzvuxGIpfFfwmdFubD48ikR13QRc8E88IthWc6S19T3X
+p+t8Jg6CPPLIgwaLDtJCXNIRjKM1to8AGbBFS/VgfbrfotRsQmzv/eeYBbn6F2A2
+rbQ3W/ddMDzQbKPEyNiYa3CBP+0mMU2VHA7rTCkkyYS4vG9t3zXHJGzBzpzYNWic
+gq+Yl+vW59EpmlsOOHTgbFvP6ZhYgs4bkCm7eN+6NrlA4cmpsMrX48HDS4DPuthT
+5+1AaiyXk7Wdl1aAH7DhIAMGUxcyqVTabiVs033rY7MMOkREQyBbLIbLC3ujt5Ep
+rArscDcVKLeMcWBvxLPgSiN7qjyrSAU1EsH255m+A7YFA9FR1yIEuQGNBGJGMxoB
+DAC1ypgR4chf/OzOM3IoPIs42hmmEjJ59iValutsAWDCAlURaIhYajUO7R/k/qDe
+nb1AP3BImtnanPxNTBQiHCkLEDnRx5M/MReLnbfOepaVeY7B0G5XpeMPsGLRkQuD
+5Cu6Zl9IOUAZvt9To7f1OjWYOqDdIjWPJsGTo46U9h918gjvbP7WyYRpSKQ6ld4l
+udfCqQBoHyNAGAaKRyIAJWu4/yMxHAQ6nUlwyPWFM4yOxs1hjHqzc1jw48m+D1Gp
+Z9YALVXp+wQERKVhWfDchTmwwnPD3j2HrRu2oUWOCDoYOMP1eTpElCMhm2L1dBWw
+g4CzBDa1QdiPsqaNf/mHpT7GZm0VFhKQ9cwCOPurfW3f4uPtWFybgVkaJ1jQDDBk
+BAs/q2JHatwS0nYTXFeqYAz2dPXl7JbB85WH9VW5T8MNo6VsFDKrCVO4pjEKPhTJ
+YZVWqBLAHIXNiloqRbD3VFfTTx5P3iP2yP6bdWp7lDxVPeVHCO75MFpDPRXpn+Qq
+AmMAEQEAAYkBvAQYAQoAJhYhBBhzZqP/5r+PlLkTapmHsgyPajBkBQJiRjMaAhsM
+BQkDwmcAAAoJEJmHsgyPajBkW9AL/j9CucsaDsKdb8wjEfmJSjQkXEriC7PDd/80
+aIzM1y6BTggiwCkyL8mDrL3DGoae2jcDfQ2JUM0keG05mH4PSk2UB75/adKukDnN
+k3fhUeEDaQ2tUWhD3uljvjqvrI2YzwMuWFvvpaOkTxnQbfLQDXR5iNloZJ4zY5/X
+FS7v0rnYPdRUljwRWAsRmCLJAzIPWRJvFr7rFW/cORtATlyf5EkGfCX+ZpgG3zPk
+S1sCmONjxR1/hiBa+sYfMJRQY+AvA0hyCz+fC6S68TvToM1LzSb0EqsoM2n30am2
+UhVjLhFhp9Xj2zhng67MddOSBvb6FrObk8lDIvO+TSKAuZ50HzB3EWrOthmYo9Z7
+lqLhPl+CA4HNVcqvw3RfoSvEvfzrnnsmGUsXY2IKQfqjg2XZ7P8Ybq6FPZJMgigv
+JOCtTFvzxw/QUkgP/XZE0KtHq5kCdkdkbLNA37l57/+6EGJjmh5e1oqRDHgAffhm
+vyMjyB4YL48bYbjwFEar/jLCQJj/Dg==
+=Mtq5
+-----END PGP PUBLIC KEY BLOCK-----
+
+
 pub    99CE9D9F22DC5C99
 uid    Benjamin Gehrels (used for *@gehrels.info) <pgp-key@gehrels.info>
 uid    Benjamin Gehrels <benny.gehrels@abi-05.info>
diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml
index f8d122b0..f8abc10 100644
--- a/gradle/verification-metadata.xml
+++ b/gradle/verification-metadata.xml
@@ -66,7 +66,10 @@
          <trusted-key id="10ae8966a146e8be" group="com.google.crypto.tink"/>
          <trusted-key id="1188b69f6d6259ca" group="com.google.accompanist"/>
          <trusted-key id="11b581967f079a30a3e93140d57506cd188fd842" group="com.google.api.grpc"/>
-         <trusted-key id="120d6f34e627ed3a772ebbfe55c7e5e701832382" group="org.snakeyaml"/>
+         <trusted-key id="120d6f34e627ed3a772ebbfe55c7e5e701832382">
+            <trusting group="org.snakeyaml"/>
+            <trusting group="org.yaml" name="snakeyaml"/>
+         </trusted-key>
          <trusted-key id="12d16069219c90212a974d119ae296fd02e9f65b" group="org.apache.commons" name="commons-math3"/>
          <trusted-key id="13ac2213964abe1d1c147c0e1939a2520bab1d90" group="org.freemarker" name="freemarker"/>
          <trusted-key id="147b691a19097624902f4ea9689cbe64f4bc997f" group="^org[.]mockito($|([.].*))" regex="true"/>
@@ -74,6 +77,7 @@
          <trusted-key id="1597ab231b7add7e14b1d9c43f00db67ae236e2e" group="org.conscrypt"/>
          <trusted-key id="160a7a9cf46221a56b06ad64461a804f2609fd89" group="com.github.shyiko.klob" name="klob"/>
          <trusted-key id="1861c322c56014b2" group="commons-lang"/>
+         <trusted-key id="187366a3ffe6bf8f94b9136a9987b20c8f6a3064" group="com.google.protobuf"/>
          <trusted-key id="190d5a957ff22273e601f7a7c92c5fec70161c62" group="org.codehaus.mojo"/>
          <trusted-key id="19beab2d799c020f17c69126b16698a4adf4d638" group="org.checkerframework"/>
          <trusted-key id="1b2718089ce964b8" group="com.thoughtworks.qdox"/>
@@ -340,7 +344,7 @@
          <trusted-key id="a33a0b49a4c1ab590b0a4ddc1364c5e2df3e99c5" group="org.reactivestreams"/>
          <trusted-key id="a40e24b5b408dbd5" group="org.robolectric"/>
          <trusted-key id="a413f67d71beec23add0ce0acb43338e060cf9fa">
-            <trusting group="com.google.code.findbugs" name="jsr305" version="2.0.2"/>
+            <trusting group="com.google.code.findbugs" name="jsr305"/>
             <trusting group="org.jacoco"/>
          </trusted-key>
          <trusted-key id="a4fd709cc4b0515f2e6af04e218fa0f6a941a037" group="com.github.kevinstern" name="software-and-algorithms"/>
@@ -453,6 +457,7 @@
          </trusted-key>
          <trusted-key id="e7dc75fc24fb3c8dfe8086ad3d5839a2262cbbfb" group="org.jetbrains.kotlinx"/>
          <trusted-key id="e85aed155021af8a6c6b7a4a7c7d8456294423ba" group="org.objenesis"/>
+         <trusted-key id="e8bf633b386b7ddcf1e1a9b3358a4abae72947c2" group="com.google.testparameterinjector"/>
          <trusted-key id="ea0b70b5050192c98cfa7e4f3f36885c24df4b75" group="org.mozilla" name="rhino"/>
          <trusted-key id="ea23db1360d9029481e7f2efecdfea3cb4493b94" group="jline" name="jline"/>
          <trusted-key id="eaa526b91dd83ba3e1b9636fa730529ca355a63e" group="org.ccil.cowan.tagsoup" name="tagsoup"/>
diff --git a/graphics/graphics-core/api/current.txt b/graphics/graphics-core/api/current.txt
index 100ce0a..bf036fb 100644
--- a/graphics/graphics-core/api/current.txt
+++ b/graphics/graphics-core/api/current.txt
@@ -277,7 +277,7 @@
 
   public static final class SurfaceControlCompat.Transaction implements java.lang.AutoCloseable {
     ctor public SurfaceControlCompat.Transaction();
-    method public androidx.graphics.surface.SurfaceControlCompat.Transaction addTransactionCommittedListener(java.util.concurrent.Executor executor, androidx.graphics.surface.SurfaceControlCompat.TransactionCommittedListener listener);
+    method @RequiresApi(android.os.Build.VERSION_CODES.S) public androidx.graphics.surface.SurfaceControlCompat.Transaction addTransactionCommittedListener(java.util.concurrent.Executor executor, androidx.graphics.surface.SurfaceControlCompat.TransactionCommittedListener listener);
     method public void close();
     method public void commit();
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public void commitTransactionOnDraw(android.view.AttachedSurfaceControl attachedSurfaceControl);
diff --git a/graphics/graphics-core/api/public_plus_experimental_current.txt b/graphics/graphics-core/api/public_plus_experimental_current.txt
index 100ce0a..bf036fb 100644
--- a/graphics/graphics-core/api/public_plus_experimental_current.txt
+++ b/graphics/graphics-core/api/public_plus_experimental_current.txt
@@ -277,7 +277,7 @@
 
   public static final class SurfaceControlCompat.Transaction implements java.lang.AutoCloseable {
     ctor public SurfaceControlCompat.Transaction();
-    method public androidx.graphics.surface.SurfaceControlCompat.Transaction addTransactionCommittedListener(java.util.concurrent.Executor executor, androidx.graphics.surface.SurfaceControlCompat.TransactionCommittedListener listener);
+    method @RequiresApi(android.os.Build.VERSION_CODES.S) public androidx.graphics.surface.SurfaceControlCompat.Transaction addTransactionCommittedListener(java.util.concurrent.Executor executor, androidx.graphics.surface.SurfaceControlCompat.TransactionCommittedListener listener);
     method public void close();
     method public void commit();
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public void commitTransactionOnDraw(android.view.AttachedSurfaceControl attachedSurfaceControl);
diff --git a/graphics/graphics-core/api/restricted_current.txt b/graphics/graphics-core/api/restricted_current.txt
index c4b832f..8ec6a0b 100644
--- a/graphics/graphics-core/api/restricted_current.txt
+++ b/graphics/graphics-core/api/restricted_current.txt
@@ -278,7 +278,7 @@
 
   public static final class SurfaceControlCompat.Transaction implements java.lang.AutoCloseable {
     ctor public SurfaceControlCompat.Transaction();
-    method public androidx.graphics.surface.SurfaceControlCompat.Transaction addTransactionCommittedListener(java.util.concurrent.Executor executor, androidx.graphics.surface.SurfaceControlCompat.TransactionCommittedListener listener);
+    method @RequiresApi(android.os.Build.VERSION_CODES.S) public androidx.graphics.surface.SurfaceControlCompat.Transaction addTransactionCommittedListener(java.util.concurrent.Executor executor, androidx.graphics.surface.SurfaceControlCompat.TransactionCommittedListener listener);
     method public void close();
     method public void commit();
     method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public void commitTransactionOnDraw(android.view.AttachedSurfaceControl attachedSurfaceControl);
diff --git a/graphics/graphics-core/src/androidTest/AndroidManifest.xml b/graphics/graphics-core/src/androidTest/AndroidManifest.xml
index 02078a4..046bf8c 100644
--- a/graphics/graphics-core/src/androidTest/AndroidManifest.xml
+++ b/graphics/graphics-core/src/androidTest/AndroidManifest.xml
@@ -41,6 +41,7 @@
 
         <activity android:name="androidx.graphics.lowlatency.SampleInkViewActivity"
             android:label="GLFrontBufferRenderer Sample"
+            android:theme="@android:style/Theme.NoTitleBar"
             android:exported="true">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/BufferTransformHintResolverTest.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/BufferTransformHintResolverTest.kt
new file mode 100644
index 0000000..8c2254c4
--- /dev/null
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/BufferTransformHintResolverTest.kt
@@ -0,0 +1,160 @@
+/*
+ * 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.graphics.lowlatency
+
+import android.os.Build
+import android.view.Surface.ROTATION_0
+import android.view.Surface.ROTATION_180
+import android.view.Surface.ROTATION_270
+import android.view.Surface.ROTATION_90
+import androidx.graphics.lowlatency.BufferTransformHintResolver.Companion.ORIENTATION_0
+import androidx.graphics.lowlatency.BufferTransformHintResolver.Companion.ORIENTATION_180
+import androidx.graphics.lowlatency.BufferTransformHintResolver.Companion.ORIENTATION_270
+import androidx.graphics.lowlatency.BufferTransformHintResolver.Companion.ORIENTATION_90
+import androidx.graphics.lowlatency.BufferTransformHintResolver.Companion.UNKNOWN_TRANSFORM
+import androidx.graphics.surface.SurfaceControlCompat.Companion.BUFFER_TRANSFORM_IDENTITY
+import androidx.graphics.surface.SurfaceControlCompat.Companion.BUFFER_TRANSFORM_ROTATE_270
+import androidx.graphics.surface.SurfaceControlCompat.Companion.BUFFER_TRANSFORM_ROTATE_180
+import androidx.graphics.surface.SurfaceControlCompat.Companion.BUFFER_TRANSFORM_ROTATE_90
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SdkSuppress
+import androidx.test.filters.SmallTest
+import org.junit.Assert.assertEquals
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@SdkSuppress(minSdkVersion = Build.VERSION_CODES.Q)
+@RunWith(AndroidJUnit4::class)
+@SmallTest
+internal class BufferTransformHintResolverTest() {
+
+    @Test
+    fun testTransformHintFromUnknownOrientation() {
+        val transform = BufferTransformHintResolver()
+        assertEquals(
+            UNKNOWN_TRANSFORM,
+            transform.getBufferTransformHintFromInstallOrientation(
+                "ORIENTATION_45",
+                ROTATION_0
+            )
+        )
+    }
+
+    @Test
+    fun testTransformHintOrientation90() {
+        with(BufferTransformHintResolver()) {
+            assertEquals(
+                BUFFER_TRANSFORM_ROTATE_90,
+                getBufferTransformHintFromInstallOrientation(ORIENTATION_90, ROTATION_0)
+            )
+            assertEquals(
+                BUFFER_TRANSFORM_ROTATE_180,
+                getBufferTransformHintFromInstallOrientation(ORIENTATION_90, ROTATION_90)
+            )
+            assertEquals(
+                BUFFER_TRANSFORM_ROTATE_270,
+                getBufferTransformHintFromInstallOrientation(ORIENTATION_90, ROTATION_180)
+            )
+            assertEquals(
+                BUFFER_TRANSFORM_IDENTITY,
+                getBufferTransformHintFromInstallOrientation(ORIENTATION_90, ROTATION_270)
+            )
+            assertEquals(
+                UNKNOWN_TRANSFORM,
+                getBufferTransformHintFromInstallOrientation(ORIENTATION_90, -123)
+            )
+        }
+    }
+
+    @Test
+    fun testTransformHintOrientation180() {
+        with(BufferTransformHintResolver()) {
+            assertEquals(
+                BUFFER_TRANSFORM_ROTATE_180,
+                getBufferTransformHintFromInstallOrientation(ORIENTATION_180, ROTATION_0)
+            )
+            assertEquals(
+                BUFFER_TRANSFORM_ROTATE_270,
+                getBufferTransformHintFromInstallOrientation(ORIENTATION_180, ROTATION_90)
+            )
+            assertEquals(
+                BUFFER_TRANSFORM_IDENTITY,
+                getBufferTransformHintFromInstallOrientation(ORIENTATION_180, ROTATION_180)
+            )
+            assertEquals(
+                BUFFER_TRANSFORM_ROTATE_90,
+                getBufferTransformHintFromInstallOrientation(ORIENTATION_180, ROTATION_270)
+            )
+            assertEquals(
+                UNKNOWN_TRANSFORM,
+                getBufferTransformHintFromInstallOrientation(ORIENTATION_180, -123)
+            )
+        }
+    }
+
+    @Test
+    fun testTransformHintOrientation270() {
+        with(BufferTransformHintResolver()) {
+            assertEquals(
+                BUFFER_TRANSFORM_ROTATE_270,
+                getBufferTransformHintFromInstallOrientation(ORIENTATION_270, ROTATION_0)
+            )
+            assertEquals(
+                BUFFER_TRANSFORM_IDENTITY,
+                getBufferTransformHintFromInstallOrientation(ORIENTATION_270, ROTATION_90)
+            )
+            assertEquals(
+                BUFFER_TRANSFORM_ROTATE_90,
+                getBufferTransformHintFromInstallOrientation(ORIENTATION_270, ROTATION_180)
+            )
+            assertEquals(
+                BUFFER_TRANSFORM_ROTATE_180,
+                getBufferTransformHintFromInstallOrientation(ORIENTATION_270, ROTATION_270)
+            )
+            assertEquals(
+                UNKNOWN_TRANSFORM,
+                getBufferTransformHintFromInstallOrientation(ORIENTATION_270, -123)
+            )
+        }
+    }
+
+    @Test
+    fun testTransformHintOrientation0() {
+        with(BufferTransformHintResolver()) {
+            assertEquals(
+                BUFFER_TRANSFORM_IDENTITY,
+                getBufferTransformHintFromInstallOrientation(ORIENTATION_0, ROTATION_0)
+            )
+            assertEquals(
+                BUFFER_TRANSFORM_ROTATE_90,
+                getBufferTransformHintFromInstallOrientation(ORIENTATION_0, ROTATION_90)
+            )
+            assertEquals(
+                BUFFER_TRANSFORM_ROTATE_180,
+                getBufferTransformHintFromInstallOrientation(ORIENTATION_0, ROTATION_180)
+            )
+            assertEquals(
+                BUFFER_TRANSFORM_ROTATE_270,
+                getBufferTransformHintFromInstallOrientation(ORIENTATION_0, ROTATION_270)
+            )
+            assertEquals(
+                UNKNOWN_TRANSFORM,
+                getBufferTransformHintFromInstallOrientation(ORIENTATION_0, -123)
+            )
+        }
+    }
+}
\ No newline at end of file
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 6fdef0f..430083d 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
@@ -90,14 +90,18 @@
                 frontBufferedLayerSurfaceControl: SurfaceControlCompat,
                 transaction: SurfaceControlCompat.Transaction
             ) {
-                transaction.addTransactionCommittedListener(
-                    Executors.newSingleThreadExecutor(),
-                    object : SurfaceControlCompat.TransactionCommittedListener {
-                        override fun onTransactionCommitted() {
-                            renderLatch.countDown()
+                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+                    transaction.addTransactionCommittedListener(
+                        Executors.newSingleThreadExecutor(),
+                        object : SurfaceControlCompat.TransactionCommittedListener {
+                            override fun onTransactionCommitted() {
+                                renderLatch.countDown()
+                            }
                         }
-                    }
-                )
+                    )
+                } else {
+                    renderLatch.countDown()
+                }
             }
         }
         var renderer: GLFrontBufferedRenderer<Any>? = null
@@ -173,13 +177,17 @@
                 frontBufferedLayerSurfaceControl: SurfaceControlCompat,
                 transaction: SurfaceControlCompat.Transaction
             ) {
-                transaction.addTransactionCommittedListener(
-                    Executors.newSingleThreadExecutor(),
-                    object : SurfaceControlCompat.TransactionCommittedListener {
-                        override fun onTransactionCommitted() {
-                            renderLatch.countDown()
-                        }
-                    })
+                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+                    transaction.addTransactionCommittedListener(
+                        Executors.newSingleThreadExecutor(),
+                        object : SurfaceControlCompat.TransactionCommittedListener {
+                            override fun onTransactionCommitted() {
+                                renderLatch.countDown()
+                            }
+                        })
+                } else {
+                    renderLatch.countDown()
+                }
             }
         }
         var renderer: GLFrontBufferedRenderer<Any>? = null
@@ -422,13 +430,17 @@
                 frontBufferedLayerSurfaceControl: SurfaceControlCompat,
                 transaction: SurfaceControlCompat.Transaction
             ) {
-                transaction.addTransactionCommittedListener(
-                    Executors.newSingleThreadExecutor(),
-                    object : SurfaceControlCompat.TransactionCommittedListener {
-                        override fun onTransactionCommitted() {
-                            renderLatch.countDown()
-                        }
-                    })
+                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+                    transaction.addTransactionCommittedListener(
+                        Executors.newSingleThreadExecutor(),
+                        object : SurfaceControlCompat.TransactionCommittedListener {
+                            override fun onTransactionCommitted() {
+                                renderLatch.countDown()
+                            }
+                        })
+                } else {
+                    renderLatch.countDown()
+                }
             }
         }
         var renderer: GLFrontBufferedRenderer<Any>? = null
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/surface/SurfaceControlCompatTest.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/surface/SurfaceControlCompatTest.kt
index 49c6f8d..9650598 100644
--- a/graphics/graphics-core/src/androidTest/java/androidx/graphics/surface/SurfaceControlCompatTest.kt
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/surface/SurfaceControlCompatTest.kt
@@ -1636,9 +1636,8 @@
     }
 
     @Test
-    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.S)
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.Q)
     fun testTransactionSetBufferTransform_identity() {
-        val listener = TransactionOnCommitListener()
         val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
             .moveToState(
                 Lifecycle.State.CREATED
@@ -1662,7 +1661,6 @@
                         )
 
                         SurfaceControlCompat.Transaction()
-                            .addTransactionCommittedListener(executor!!, listener)
                             .setBuffer(scCompat, buffer)
                             .setVisibility(scCompat, true)
                             .setBufferTransform(
@@ -1677,7 +1675,6 @@
             }
 
         scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
-            assertTrue(listener.mLatch.await(3000, TimeUnit.MILLISECONDS))
             SurfaceControlUtils.validateOutput { bitmap ->
                 val coord = intArrayOf(0, 0)
                 it.mSurfaceView.getLocationOnScreen(coord)
@@ -1699,9 +1696,8 @@
     }
 
     @Test
-    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.S)
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.Q)
     fun testTransactionSetBufferTransform_singleTransform() {
-        val listener = TransactionOnCommitListener()
         val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
             .moveToState(
                 Lifecycle.State.CREATED
@@ -1725,7 +1721,6 @@
                         )
 
                         SurfaceControlCompat.Transaction()
-                            .addTransactionCommittedListener(executor!!, listener)
                             .setBuffer(scCompat, buffer)
                             .setVisibility(scCompat, true)
                             .setBufferTransform(
@@ -1740,7 +1735,6 @@
             }
 
         scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
-            assertTrue(listener.mLatch.await(3000, TimeUnit.MILLISECONDS))
             SurfaceControlUtils.validateOutput { bitmap ->
                 val coord = intArrayOf(0, 0)
                 it.mSurfaceView.getLocationOnScreen(coord)
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/surface/SurfaceControlWrapperTest.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/surface/SurfaceControlWrapperTest.kt
index 8b161de..c29a456 100644
--- a/graphics/graphics-core/src/androidTest/java/androidx/graphics/surface/SurfaceControlWrapperTest.kt
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/surface/SurfaceControlWrapperTest.kt
@@ -1354,6 +1354,73 @@
     }
 
     @Test
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.Q)
+    fun testTransactionSetGeometry_identity() {
+        val listener = TransactionOnCompleteListener()
+        val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+            .moveToState(
+                Lifecycle.State.CREATED
+            ).onActivity {
+                val callback = object : SurfaceHolderCallback() {
+                    override fun surfaceCreated(sh: SurfaceHolder) {
+                        val scCompat = SurfaceControlWrapper
+                            .Builder()
+                            .setParent(it.getSurfaceView().holder.surface)
+                            .setDebugName("SurfaceControlCompatTest")
+                            .build()
+
+                        // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+                        val buffer = SurfaceControlUtils.getQuadrantBuffer(
+                            SurfaceControlWrapperTestActivity.DEFAULT_WIDTH,
+                            SurfaceControlWrapperTestActivity.DEFAULT_HEIGHT,
+                            Color.BLUE,
+                            Color.BLACK,
+                            Color.BLACK,
+                            Color.BLACK
+                        )
+
+                        SurfaceControlWrapper.Transaction()
+                            .addTransactionCompletedListener(listener)
+                            .setBuffer(scCompat, buffer)
+                            .setVisibility(scCompat, true)
+                            .setGeometry(
+                                scCompat,
+                                SurfaceControlWrapperTestActivity.DEFAULT_WIDTH,
+                                SurfaceControlWrapperTestActivity.DEFAULT_HEIGHT,
+                                SurfaceControlWrapperTestActivity.DEFAULT_WIDTH,
+                                SurfaceControlWrapperTestActivity.DEFAULT_HEIGHT,
+                                SurfaceControlCompat.BUFFER_TRANSFORM_IDENTITY
+                            )
+                            .commit()
+                    }
+                }
+
+                it.addSurface(it.mSurfaceView, callback)
+            }
+
+        scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+            assert(listener.mLatch.await(3000, TimeUnit.MILLISECONDS))
+            SurfaceControlUtils.validateOutput { bitmap ->
+                val coord = intArrayOf(0, 0)
+                it.mSurfaceView.getLocationOnScreen(coord)
+
+                // Check outer bounds of square to ensure its scaled correctly
+                Color.RED == bitmap.getPixel(coord[0], coord[1]) &&
+                    Color.RED ==
+                    bitmap.getPixel(
+                        coord[0] + SurfaceControlWrapperTestActivity.DEFAULT_WIDTH / 2 - 1,
+                        coord[1] + SurfaceControlWrapperTestActivity.DEFAULT_HEIGHT / 2 - 1
+                    ) &&
+                    Color.BLACK ==
+                    bitmap.getPixel(
+                        coord[0] + SurfaceControlWrapperTestActivity.DEFAULT_WIDTH / 2,
+                        coord[1] + SurfaceControlWrapperTestActivity.DEFAULT_HEIGHT / 2
+                    )
+            }
+        }
+    }
+
+    @Test
     @SdkSuppress(minSdkVersion = Build.VERSION_CODES.S)
     fun testTransactionSetBufferTransform_singleTransform() {
         val listener = TransactionOnCompleteListener()
@@ -1419,6 +1486,76 @@
         }
     }
 
+    @Test
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.Q)
+    fun testTransactionSetGeometry_singleTransform() {
+        val listener = TransactionOnCompleteListener()
+        val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+            .moveToState(
+                Lifecycle.State.CREATED
+            ).onActivity {
+                val callback = object : SurfaceHolderCallback() {
+                    override fun surfaceCreated(sh: SurfaceHolder) {
+                        val scCompat = SurfaceControlWrapper
+                            .Builder()
+                            .setParent(it.getSurfaceView().holder.surface)
+                            .setDebugName("SurfaceControlCompatTest")
+                            .build()
+
+                        // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+                        val buffer = SurfaceControlUtils.getQuadrantBuffer(
+                            SurfaceControlWrapperTestActivity.DEFAULT_WIDTH,
+                            SurfaceControlWrapperTestActivity.DEFAULT_HEIGHT,
+                            Color.BLUE,
+                            Color.BLACK,
+                            Color.BLACK,
+                            Color.BLACK
+                        )
+
+                        SurfaceControlWrapper.Transaction()
+                            .addTransactionCompletedListener(listener)
+                            .setBuffer(scCompat, buffer)
+                            .setVisibility(scCompat, true)
+                            .setGeometry(
+                                scCompat,
+                                SurfaceControlWrapperTestActivity.DEFAULT_WIDTH,
+                                SurfaceControlWrapperTestActivity.DEFAULT_HEIGHT,
+                                SurfaceControlWrapperTestActivity.DEFAULT_WIDTH,
+                                SurfaceControlWrapperTestActivity.DEFAULT_HEIGHT,
+                                SurfaceControlCompat.BUFFER_TRANSFORM_MIRROR_HORIZONTAL
+                            )
+                            .commit()
+                    }
+                }
+
+                it.addSurface(it.mSurfaceView, callback)
+            }
+
+        scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+            assert(listener.mLatch.await(3000, TimeUnit.MILLISECONDS))
+            SurfaceControlUtils.validateOutput { bitmap ->
+                val coord = intArrayOf(0, 0)
+                it.mSurfaceView.getLocationOnScreen(coord)
+                // Ensure it actually rotated by checking its outer bounds are black
+                Color.BLACK ==
+                    bitmap.getPixel(
+                        coord[0] + SurfaceControlWrapperTestActivity.DEFAULT_WIDTH / 2 - 1,
+                        coord[1] + SurfaceControlWrapperTestActivity.DEFAULT_HEIGHT / 4 - 1
+                    ) &&
+                    Color.BLACK ==
+                    bitmap.getPixel(
+                        coord[0] + SurfaceControlWrapperTestActivity.DEFAULT_WIDTH * 3 / 4,
+                        coord[1] + SurfaceControlWrapperTestActivity.DEFAULT_HEIGHT / 2
+                    ) &&
+                    Color.RED ==
+                    bitmap.getPixel(
+                        coord[0] + SurfaceControlWrapperTestActivity.DEFAULT_WIDTH / 2 + 1,
+                        coord[1] + SurfaceControlWrapperTestActivity.DEFAULT_HEIGHT / 2 - 1
+                    )
+            }
+        }
+    }
+
     fun Color.compositeOver(background: Color): Color {
         val fg = this.convert(background.colorSpace)
 
diff --git a/graphics/graphics-core/src/main/cpp/graphics-core.cpp b/graphics/graphics-core/src/main/cpp/graphics-core.cpp
index 693bc8f..ed2243e 100644
--- a/graphics/graphics-core/src/main/cpp/graphics-core.cpp
+++ b/graphics/graphics-core/src/main/cpp/graphics-core.cpp
@@ -30,6 +30,7 @@
 #include <android/hardware_buffer_jni.h>
 #include <android/log.h>
 #include <android/sync.h>
+#include <sys/system_properties.h>
 
 #define ALOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)
 
@@ -473,4 +474,30 @@
     auto st = reinterpret_cast<ASurfaceTransaction *>(surfaceTransaction);
     auto sc = reinterpret_cast<ASurfaceControl *>(surfaceControl);
     ASurfaceTransaction_setBufferTransform(st, sc, transformation);
+}
+
+extern "C"
+JNIEXPORT jstring JNICALL
+Java_androidx_graphics_lowlatency_BufferTransformHintResolver_00024Companion_getDisplayOrientation(
+        JNIEnv *env, jobject thiz) {
+    char name[PROP_VALUE_MAX];
+    __system_property_get("ro.surface_flinger.primary_display_orientation", name);
+    return (*env).NewStringUTF(name);
+}
+
+extern "C"
+JNIEXPORT void JNICALL
+Java_androidx_graphics_surface_JniBindings_00024Companion_nSetGeometry(JNIEnv *env, jobject thiz,
+                                                                       jlong surfaceTransaction,
+                                                                       jlong surfaceControl,
+                                                                       jint bufferWidth,
+                                                                       jint bufferHeight,
+                                                                       jint dstWidth,
+                                                                       jint dstHeight,
+                                                                       jint transformation) {
+    auto st = reinterpret_cast<ASurfaceTransaction *>(surfaceTransaction);
+    auto sc = reinterpret_cast<ASurfaceControl *>(surfaceControl);
+    auto src = ARect{0, 0, bufferWidth, bufferHeight};
+    auto dest = ARect{0, 0, dstWidth, dstHeight};
+    ASurfaceTransaction_setGeometry(st, sc, src, dest, transformation);
 }
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/BufferTransformHintResolver.kt b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/BufferTransformHintResolver.kt
new file mode 100644
index 0000000..3e514c9
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/BufferTransformHintResolver.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.graphics.lowlatency
+
+import android.os.Build
+import android.util.Log
+import android.view.Surface
+import android.view.View
+import androidx.annotation.RequiresApi
+import androidx.graphics.surface.SurfaceControlCompat
+
+/**
+ * Helper class to determine the corresponding transformation hint based on various Android
+ * API levels
+ */
+internal class BufferTransformHintResolver {
+
+    fun getBufferTransformHint(view: View): Int {
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S_V2) {
+            return TransformHintHelper.resolveBufferTransformHint(view)
+        } else {
+            val orientation: String?
+            return try {
+                orientation = getDisplayOrientation()
+                val rotation = view.display?.rotation
+                if (rotation != null) {
+                    val transform = getBufferTransformHintFromInstallOrientation(
+                        orientation,
+                        rotation
+                    )
+                    Log.v(TAG, "Obtained transform: $transform for orientation: $orientation")
+                    transform
+                } else {
+                    Log.w(TAG, "Unable to obtain current display rotation")
+                    UNKNOWN_TRANSFORM
+                }
+            } catch (exception: Exception) {
+                Log.w(TAG, "Unable to obtain current display orientation")
+                UNKNOWN_TRANSFORM
+            }
+        }
+    }
+
+    internal fun getBufferTransformHintFromInstallOrientation(
+        orientation: String,
+        rotation: Int
+    ): Int =
+        when (orientation) {
+            ORIENTATION_90 -> {
+                when (rotation) {
+                    Surface.ROTATION_0 -> SurfaceControlCompat.BUFFER_TRANSFORM_ROTATE_90
+                    Surface.ROTATION_90 -> SurfaceControlCompat.BUFFER_TRANSFORM_ROTATE_180
+                    Surface.ROTATION_180 -> SurfaceControlCompat.BUFFER_TRANSFORM_ROTATE_270
+                    Surface.ROTATION_270 -> SurfaceControlCompat.BUFFER_TRANSFORM_IDENTITY
+                    else -> UNKNOWN_TRANSFORM
+                }
+            }
+            ORIENTATION_180 -> {
+                when (rotation) {
+                    Surface.ROTATION_0 -> SurfaceControlCompat.BUFFER_TRANSFORM_ROTATE_180
+                    Surface.ROTATION_90 -> SurfaceControlCompat.BUFFER_TRANSFORM_ROTATE_270
+                    Surface.ROTATION_180 -> SurfaceControlCompat.BUFFER_TRANSFORM_IDENTITY
+                    Surface.ROTATION_270 -> SurfaceControlCompat.BUFFER_TRANSFORM_ROTATE_90
+                    else -> UNKNOWN_TRANSFORM
+                }
+            }
+            ORIENTATION_270 -> {
+                when (rotation) {
+                    Surface.ROTATION_0 -> SurfaceControlCompat.BUFFER_TRANSFORM_ROTATE_270
+                    Surface.ROTATION_90 -> SurfaceControlCompat.BUFFER_TRANSFORM_IDENTITY
+                    Surface.ROTATION_180 -> SurfaceControlCompat.BUFFER_TRANSFORM_ROTATE_90
+                    Surface.ROTATION_270 -> SurfaceControlCompat.BUFFER_TRANSFORM_ROTATE_180
+                    else -> UNKNOWN_TRANSFORM
+                }
+            }
+            ORIENTATION_0 -> {
+                when (rotation) {
+                    Surface.ROTATION_0 -> SurfaceControlCompat.BUFFER_TRANSFORM_IDENTITY
+                    Surface.ROTATION_90 -> SurfaceControlCompat.BUFFER_TRANSFORM_ROTATE_90
+                    Surface.ROTATION_180 -> SurfaceControlCompat.BUFFER_TRANSFORM_ROTATE_180
+                    Surface.ROTATION_270 -> SurfaceControlCompat.BUFFER_TRANSFORM_ROTATE_270
+                    else -> UNKNOWN_TRANSFORM
+                }
+            }
+            else -> {
+                Log.w(TAG, "Unknown orientation \"$orientation\"")
+                UNKNOWN_TRANSFORM
+            }
+        }
+
+    internal companion object {
+
+        const val TAG = "TRANSFORM_HINT_RESOLVER"
+
+        const val UNKNOWN_TRANSFORM = -1
+
+        const val ORIENTATION_0 = "ORIENTATION_0"
+        const val ORIENTATION_90 = "ORIENTATION_90"
+        const val ORIENTATION_180 = "ORIENTATION_180"
+        const val ORIENTATION_270 = "ORIENTATION_270"
+
+        init {
+            System.loadLibrary("graphics-core")
+        }
+
+        external fun getDisplayOrientation(): String
+    }
+}
+
+/**
+ * Helper class to avoid class verification errors
+ */
+@RequiresApi(Build.VERSION_CODES.S_V2)
+internal class TransformHintHelper private constructor() {
+
+    companion object {
+        @RequiresApi(Build.VERSION_CODES.S_V2)
+        @androidx.annotation.DoNotInline
+        fun resolveBufferTransformHint(view: View): Int =
+            view.rootSurfaceControl?.bufferTransformHint ?: 0
+    }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/BufferTransformer.kt b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/BufferTransformer.kt
index 1db4d36..87b7537 100644
--- a/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/BufferTransformer.kt
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/BufferTransformer.kt
@@ -50,7 +50,7 @@
                 SurfaceControlCompat.BUFFER_TRANSFORM_ROTATE_90
             SurfaceControlCompat.BUFFER_TRANSFORM_IDENTITY ->
                 SurfaceControlCompat.BUFFER_TRANSFORM_IDENTITY
-            else -> ParentRenderLayer.UNKNOWN_TRANSFORM // Return unknown transform
+            else -> BufferTransformHintResolver.UNKNOWN_TRANSFORM // Return unknown transform
         }
 
     /**
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 a8608f0..1e64338d 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
@@ -543,7 +543,7 @@
                             syncFenceCompat
                         )
                         .setVisibility(frontBufferedLayerSurfaceControl, true)
-                    if (transformHint != ParentRenderLayer.UNKNOWN_TRANSFORM) {
+                    if (transformHint != BufferTransformHintResolver.UNKNOWN_TRANSFORM) {
                         transaction.setBufferTransform(
                             frontBufferedLayerSurfaceControl,
                             inverseTransform
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/ParentRenderLayer.kt b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/ParentRenderLayer.kt
index 7c3f751..20e4d7b 100644
--- a/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/ParentRenderLayer.kt
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/ParentRenderLayer.kt
@@ -36,7 +36,7 @@
      * avoid unnecessary GPU composition for the purposes of rotating buffer content to
      * match display orientation
      */
-    fun getBufferTransformHint(): Int = UNKNOWN_TRANSFORM
+    fun getBufferTransformHint(): Int = BufferTransformHintResolver.UNKNOWN_TRANSFORM
 
     /**
      * Modify the provided [SurfaceControlCompat.Transaction] to reparent the provided
@@ -124,11 +124,4 @@
          */
         fun getFrameBufferPool(): FrameBufferPool?
     }
-
-    companion object {
-        /**
-         * Flag indicating that the current suggested buffer transform is unknown
-         */
-        val UNKNOWN_TRANSFORM = -1
-    }
 }
\ No newline at end of file
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 ac59567..4ce82fe 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
@@ -16,11 +16,11 @@
 
 package androidx.graphics.lowlatency
 
+import android.annotation.SuppressLint
 import android.os.Build
 import android.util.Log
 import android.view.SurfaceHolder
 import android.view.SurfaceView
-import android.view.View
 import androidx.annotation.RequiresApi
 import androidx.graphics.opengl.GLRenderer
 import androidx.graphics.opengl.egl.EGLManager
@@ -43,12 +43,10 @@
     private var mParentSurfaceControl: SurfaceControlCompat? = null
     private val mBufferTransform = BufferTransformer()
 
+    private val mTransformResolver = BufferTransformHintResolver()
+
     override fun getBufferTransformHint(): Int {
-        return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S_V2) {
-            return TransformHintHelper.resolveBufferTransformHint(surfaceView)
-        } else {
-            -1
-        }
+        return mTransformResolver.getBufferTransformHint(surfaceView)
     }
 
     override fun buildReparentTransaction(
@@ -67,8 +65,8 @@
         renderer: GLRenderer,
         renderLayerCallback: GLFrontBufferedRenderer.Callback<T>
     ): GLRenderer.RenderTarget {
-        var transformHint = ParentRenderLayer.UNKNOWN_TRANSFORM
-        var inverse = ParentRenderLayer.UNKNOWN_TRANSFORM
+        var transformHint = BufferTransformHintResolver.UNKNOWN_TRANSFORM
+        var inverse = BufferTransformHintResolver.UNKNOWN_TRANSFORM
         val frameBufferRenderer = FrameBufferRenderer(
             object : FrameBufferRenderer.RenderCallback {
 
@@ -87,6 +85,7 @@
                     )
                 }
 
+                @SuppressLint("WrongConstant")
                 @RequiresApi(Build.VERSION_CODES.TIRAMISU)
                 override fun onDrawComplete(
                     frameBuffer: FrameBuffer,
@@ -109,7 +108,7 @@
                             .setBuffer(sc, frameBuffer.hardwareBuffer, syncFenceCompat) {
                                 mLayerCallback?.getFrameBufferPool()?.release(frameBuffer)
                             }
-                        if (transformHint != ParentRenderLayer.UNKNOWN_TRANSFORM) {
+                        if (transformHint != BufferTransformHintResolver.UNKNOWN_TRANSFORM) {
                             transaction.setBufferTransform(sc, inverse)
                         }
 
@@ -183,19 +182,4 @@
     internal companion object {
         internal const val TAG = "SurfaceViewRenderLayer"
     }
-}
-
-/**
- * Helper class to avoid class verification errors
- */
-
-@RequiresApi(Build.VERSION_CODES.S_V2)
-internal class TransformHintHelper private constructor() {
-
-    companion object {
-        @RequiresApi(Build.VERSION_CODES.S_V2)
-        @androidx.annotation.DoNotInline
-        fun resolveBufferTransformHint(view: View): Int =
-            view.rootSurfaceControl?.bufferTransformHint ?: 0
-    }
 }
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlCompat.kt b/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlCompat.kt
index 9f12e66..66a547e 100644
--- a/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlCompat.kt
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlCompat.kt
@@ -325,6 +325,7 @@
          * transaction has been committed.
          */
         @Suppress("PairedRegistration")
+        @RequiresApi(Build.VERSION_CODES.S)
         fun addTransactionCommittedListener(
             executor: Executor,
             listener: TransactionCommittedListener
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlImpl.kt b/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlImpl.kt
index f80e664..0a8272c 100644
--- a/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlImpl.kt
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlImpl.kt
@@ -194,6 +194,7 @@
          * @param listener [TransactionCommittedListener] instance that is invoked when the
          * transaction has been committed.
          */
+        @RequiresApi(Build.VERSION_CODES.S)
         fun addTransactionCommittedListener(
             executor: Executor,
             listener: TransactionCommittedListener
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlV29.kt b/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlV29.kt
index ff27028..481d75a 100644
--- a/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlV29.kt
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlV29.kt
@@ -23,8 +23,11 @@
 import android.view.AttachedSurfaceControl
 import android.view.SurfaceView
 import androidx.annotation.RequiresApi
+import androidx.graphics.lowlatency.BufferTransformHintResolver.Companion.UNKNOWN_TRANSFORM
 import androidx.graphics.lowlatency.SyncFenceImpl
 import androidx.graphics.lowlatency.SyncFenceV19
+import androidx.graphics.surface.SurfaceControlCompat.Companion.BUFFER_TRANSFORM_ROTATE_270
+import androidx.graphics.surface.SurfaceControlCompat.Companion.BUFFER_TRANSFORM_ROTATE_90
 import androidx.hardware.SyncFence
 import java.util.concurrent.Executor
 
@@ -83,12 +86,31 @@
      */
     class Transaction : SurfaceControlImpl.Transaction {
         private val transaction = SurfaceControlWrapper.Transaction()
-        private val uncommittedBufferCallbackMap = HashMap<SurfaceControlImpl, (() -> Unit)?>()
+        private val uncommittedBufferCallbackMap = HashMap<SurfaceControlImpl, BufferData?>()
+        private val pendingSetTransformCalls = HashMap<SurfaceControlImpl, Int>()
+
+        /**
+         * Class to wrap metadata around setBuffer calls. This is used to appropriately call
+         * the release callbacks as well as configure the buffer transform for older API levels
+         */
+        private class BufferData(
+            val width: Int,
+            val height: Int,
+            val releaseCallback: (() -> Unit)?
+        )
 
         /**
          * See [SurfaceControlWrapper.Transaction.commit]
          */
         override fun commit() {
+            setPendingBufferTransform()
+            updateReleaseCallbacks()
+            uncommittedBufferCallbackMap.clear()
+            pendingSetTransformCalls.clear()
+            transaction.commit()
+        }
+
+        private fun updateReleaseCallbacks() {
             // store prev committed callbacks so we only need 1 onComplete callback
             val callbackInvokeList = mutableListOf<(() -> Unit)>()
 
@@ -98,7 +120,8 @@
                     currActiveBufferReleaseCallback?.let { callbackInvokeList.add(it) }
 
                     // add as new active buffer callback
-                    currActiveBufferReleaseCallback = uncommittedBufferCallbackMap[surfaceControl]
+                    currActiveBufferReleaseCallback =
+                        uncommittedBufferCallbackMap[surfaceControl]?.releaseCallback
                 }
             }
 
@@ -112,9 +135,38 @@
 
                 this.addTransactionCompletedListener(callbackListener)
             }
+        }
 
-            uncommittedBufferCallbackMap.clear()
-            transaction.commit()
+        private fun setPendingBufferTransform() {
+            for (surfaceControl in pendingSetTransformCalls.keys) {
+                uncommittedBufferCallbackMap[surfaceControl]?.let {
+                    val transformation = pendingSetTransformCalls.getOrDefault(
+                        surfaceControl,
+                        UNKNOWN_TRANSFORM
+                    )
+                    if (transformation != UNKNOWN_TRANSFORM) {
+                        val dstWidth: Int
+                        val dstHeight: Int
+                        if (transformation == BUFFER_TRANSFORM_ROTATE_90 ||
+                            transformation == BUFFER_TRANSFORM_ROTATE_270
+                        ) {
+                            dstWidth = it.height
+                            dstHeight = it.width
+                        } else {
+                            dstWidth = it.width
+                            dstHeight = it.height
+                        }
+                        transaction.setGeometry(
+                            surfaceControl.asWrapperSurfaceControl(),
+                            it.width,
+                            it.height,
+                            dstWidth,
+                            dstHeight,
+                            transformation
+                        )
+                    }
+                }
+            }
         }
 
         /**
@@ -152,7 +204,12 @@
             releaseCallback: (() -> Unit)?
         ): SurfaceControlImpl.Transaction {
             // we have a previous mapping in the same transaction, invoke callback
-            uncommittedBufferCallbackMap.put(surfaceControl, releaseCallback)?.invoke()
+            val data = BufferData(
+                width = buffer.width,
+                height = buffer.height,
+                releaseCallback = releaseCallback
+            )
+            uncommittedBufferCallbackMap.put(surfaceControl, data)?.releaseCallback?.invoke()
 
             // Ensure if we have a null value, we default to the default value for SyncFence
             // argument to prevent null pointer dereference
@@ -276,12 +333,18 @@
         /**
          * See [SurfaceControlWrapper.Transaction.setBufferTransform]
          */
-        @RequiresApi(Build.VERSION_CODES.S)
         override fun setBufferTransform(
             surfaceControl: SurfaceControlImpl,
             @SurfaceControlCompat.Companion.BufferTransform transformation: Int
         ): Transaction {
-            transaction.setBufferTransform(surfaceControl.asWrapperSurfaceControl(), transformation)
+            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+                transaction.setBufferTransform(
+                    surfaceControl.asWrapperSurfaceControl(),
+                    transformation
+                )
+            } else {
+                pendingSetTransformCalls[surfaceControl] = transformation
+            }
             return this
         }
 
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlWrapper.kt b/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlWrapper.kt
index 6c7b271..b9af9e7 100644
--- a/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlWrapper.kt
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlWrapper.kt
@@ -63,6 +63,16 @@
             acquireFieldFd: SyncFence
         )
 
+        external fun nSetGeometry(
+            surfaceTransaction: Long,
+            surfaceControl: Long,
+            bufferWidth: Int,
+            bufferHeight: Int,
+            dstWidth: Int,
+            dstHeight: Int,
+            transformation: Int
+        )
+
         external fun nSetVisibility(
             surfaceTransaction: Long,
             surfaceControl: Long,
@@ -550,6 +560,26 @@
             return this
         }
 
+        fun setGeometry(
+            surfaceControl: SurfaceControlWrapper,
+            width: Int,
+            height: Int,
+            dstWidth: Int,
+            dstHeight: Int,
+            transformation: Int
+        ): Transaction {
+            JniBindings.nSetGeometry(
+                mNativeSurfaceTransaction,
+                surfaceControl.mNativeSurfaceControl,
+                width,
+                height,
+                dstWidth,
+                dstHeight,
+                transformation
+            )
+            return this
+        }
+
         /**
          * Destroys the transaction object.
          */
diff --git a/health/health-services-client/api/1.0.0-beta02.txt b/health/health-services-client/api/1.0.0-beta02.txt
new file mode 100644
index 0000000..e37c668
--- /dev/null
+++ b/health/health-services-client/api/1.0.0-beta02.txt
@@ -0,0 +1,824 @@
+// Signature format: 4.0
+package androidx.health.services.client {
+
+  public interface ExerciseClient {
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> addGoalToActiveExerciseAsync(androidx.health.services.client.data.ExerciseGoal<?> exerciseGoal);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> clearUpdateCallbackAsync(androidx.health.services.client.ExerciseUpdateCallback callback);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> endExerciseAsync();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> flushAsync();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.health.services.client.data.ExerciseCapabilities> getCapabilitiesAsync();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.health.services.client.data.ExerciseInfo> getCurrentExerciseInfoAsync();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> markLapAsync();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> overrideAutoPauseAndResumeForActiveExerciseAsync(boolean enabled);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> pauseExerciseAsync();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> prepareExerciseAsync(androidx.health.services.client.data.WarmUpConfig configuration);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> removeGoalFromActiveExerciseAsync(androidx.health.services.client.data.ExerciseGoal<?> exerciseGoal);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> resumeExerciseAsync();
+    method public void setUpdateCallback(androidx.health.services.client.ExerciseUpdateCallback callback);
+    method public void setUpdateCallback(java.util.concurrent.Executor executor, androidx.health.services.client.ExerciseUpdateCallback callback);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> startExerciseAsync(androidx.health.services.client.data.ExerciseConfig configuration);
+  }
+
+  public interface ExerciseUpdateCallback {
+    method public void onAvailabilityChanged(androidx.health.services.client.data.DataType<?,?> dataType, androidx.health.services.client.data.Availability availability);
+    method public void onExerciseUpdateReceived(androidx.health.services.client.data.ExerciseUpdate update);
+    method public void onLapSummaryReceived(androidx.health.services.client.data.ExerciseLapSummary lapSummary);
+    method public void onRegistered();
+    method public void onRegistrationFailed(Throwable throwable);
+  }
+
+  public final class HealthServices {
+    method public static androidx.health.services.client.HealthServicesClient getClient(android.content.Context context);
+    field public static final androidx.health.services.client.HealthServices INSTANCE;
+  }
+
+  public interface HealthServicesClient {
+    method public androidx.health.services.client.ExerciseClient getExerciseClient();
+    method public androidx.health.services.client.MeasureClient getMeasureClient();
+    method public androidx.health.services.client.PassiveMonitoringClient getPassiveMonitoringClient();
+    property public abstract androidx.health.services.client.ExerciseClient exerciseClient;
+    property public abstract androidx.health.services.client.MeasureClient measureClient;
+    property public abstract androidx.health.services.client.PassiveMonitoringClient passiveMonitoringClient;
+  }
+
+  public interface MeasureCallback {
+    method public void onAvailabilityChanged(androidx.health.services.client.data.DeltaDataType<?,?> dataType, androidx.health.services.client.data.Availability availability);
+    method public void onDataReceived(androidx.health.services.client.data.DataPointContainer data);
+    method public default void onRegistered();
+    method public default void onRegistrationFailed(Throwable throwable);
+  }
+
+  public interface MeasureClient {
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.health.services.client.data.MeasureCapabilities> getCapabilitiesAsync();
+    method public void registerMeasureCallback(androidx.health.services.client.data.DeltaDataType<?,?> dataType, androidx.health.services.client.MeasureCallback callback);
+    method public void registerMeasureCallback(androidx.health.services.client.data.DeltaDataType<?,?> dataType, java.util.concurrent.Executor executor, androidx.health.services.client.MeasureCallback callback);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> unregisterMeasureCallbackAsync(androidx.health.services.client.data.DeltaDataType<?,?> dataType, androidx.health.services.client.MeasureCallback callback);
+  }
+
+  public interface PassiveListenerCallback {
+    method public default void onGoalCompleted(androidx.health.services.client.data.PassiveGoal goal);
+    method public default void onHealthEventReceived(androidx.health.services.client.data.HealthEvent event);
+    method public default void onNewDataPointsReceived(androidx.health.services.client.data.DataPointContainer dataPoints);
+    method public default void onPermissionLost();
+    method public default void onRegistered();
+    method public default void onRegistrationFailed(Throwable throwable);
+    method public default void onUserActivityInfoReceived(androidx.health.services.client.data.UserActivityInfo info);
+  }
+
+  public abstract class PassiveListenerService extends android.app.Service {
+    ctor public PassiveListenerService();
+    method public final android.os.IBinder? onBind(android.content.Intent intent);
+    method public void onGoalCompleted(androidx.health.services.client.data.PassiveGoal goal);
+    method public void onHealthEventReceived(androidx.health.services.client.data.HealthEvent event);
+    method public void onNewDataPointsReceived(androidx.health.services.client.data.DataPointContainer dataPoints);
+    method public void onPermissionLost();
+    method public void onUserActivityInfoReceived(androidx.health.services.client.data.UserActivityInfo info);
+  }
+
+  public interface PassiveMonitoringClient {
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> clearPassiveListenerCallbackAsync();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> clearPassiveListenerServiceAsync();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> flushAsync();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.health.services.client.data.PassiveMonitoringCapabilities> getCapabilitiesAsync();
+    method public void setPassiveListenerCallback(androidx.health.services.client.data.PassiveListenerConfig config, androidx.health.services.client.PassiveListenerCallback callback);
+    method public void setPassiveListenerCallback(androidx.health.services.client.data.PassiveListenerConfig config, java.util.concurrent.Executor executor, androidx.health.services.client.PassiveListenerCallback callback);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> setPassiveListenerServiceAsync(Class<? extends androidx.health.services.client.PassiveListenerService> service, androidx.health.services.client.data.PassiveListenerConfig config);
+  }
+
+}
+
+package androidx.health.services.client.data {
+
+  public final class AggregateDataType<T extends java.lang.Number, D extends androidx.health.services.client.data.DataPoint<T>> extends androidx.health.services.client.data.DataType<T,D> {
+    ctor public AggregateDataType(String name, androidx.health.services.client.data.DataType.TimeType timeType, Class<T> valueClass);
+  }
+
+  public interface Availability {
+    method public int getId();
+    property public abstract int id;
+    field public static final androidx.health.services.client.data.Availability.Companion Companion;
+  }
+
+  public static final class Availability.Companion {
+  }
+
+  public final class ComparisonType {
+    method public int getId();
+    method public String getName();
+    property public final int id;
+    property public final String name;
+    field public static final androidx.health.services.client.data.ComparisonType.Companion Companion;
+    field public static final androidx.health.services.client.data.ComparisonType GREATER_THAN;
+    field public static final androidx.health.services.client.data.ComparisonType GREATER_THAN_OR_EQUAL;
+    field public static final androidx.health.services.client.data.ComparisonType LESS_THAN;
+    field public static final androidx.health.services.client.data.ComparisonType LESS_THAN_OR_EQUAL;
+    field public static final androidx.health.services.client.data.ComparisonType UNKNOWN;
+  }
+
+  public static final class ComparisonType.Companion {
+  }
+
+  public final class CumulativeDataPoint<T extends java.lang.Number> extends androidx.health.services.client.data.DataPoint<T> {
+    ctor public CumulativeDataPoint(androidx.health.services.client.data.AggregateDataType<T,androidx.health.services.client.data.CumulativeDataPoint<T>> dataType, T total, java.time.Instant start, java.time.Instant end);
+    method public java.time.Instant getEnd();
+    method public java.time.Instant getStart();
+    method public T getTotal();
+    property public final java.time.Instant end;
+    property public final java.time.Instant start;
+    property public final T total;
+  }
+
+  public abstract class DataPoint<T> {
+    method public androidx.health.services.client.data.DataType<T,? extends androidx.health.services.client.data.DataPoint<T>> getDataType();
+    property public androidx.health.services.client.data.DataType<T,? extends androidx.health.services.client.data.DataPoint<T>> dataType;
+  }
+
+  public abstract class DataPointAccuracy {
+    ctor public DataPointAccuracy();
+  }
+
+  public final class DataPointContainer {
+    ctor public DataPointContainer(java.util.Map<androidx.health.services.client.data.DataType<?,?>,? extends java.util.List<? extends androidx.health.services.client.data.DataPoint<?>>> dataPoints);
+    ctor public DataPointContainer(java.util.List<? extends androidx.health.services.client.data.DataPoint<?>> dataPointList);
+    method public java.util.List<androidx.health.services.client.data.CumulativeDataPoint<?>> getCumulativeDataPoints();
+    method public <T, D extends androidx.health.services.client.data.DataPoint<T>> java.util.List<D> getData(androidx.health.services.client.data.DeltaDataType<T,D> type);
+    method public <T extends java.lang.Number, D extends androidx.health.services.client.data.DataPoint<T>> D? getData(androidx.health.services.client.data.AggregateDataType<T,D> type);
+    method public java.util.Set<androidx.health.services.client.data.DataType<?,?>> getDataTypes();
+    method public java.util.List<androidx.health.services.client.data.IntervalDataPoint<?>> getIntervalDataPoints();
+    method public java.util.List<androidx.health.services.client.data.SampleDataPoint<?>> getSampleDataPoints();
+    method public java.util.List<androidx.health.services.client.data.StatisticalDataPoint<?>> getStatisticalDataPoints();
+    property public final java.util.List<androidx.health.services.client.data.CumulativeDataPoint<?>> cumulativeDataPoints;
+    property public final java.util.Set<androidx.health.services.client.data.DataType<?,?>> dataTypes;
+    property public final java.util.List<androidx.health.services.client.data.IntervalDataPoint<?>> intervalDataPoints;
+    property public final java.util.List<androidx.health.services.client.data.SampleDataPoint<?>> sampleDataPoints;
+    property public final java.util.List<androidx.health.services.client.data.StatisticalDataPoint<?>> statisticalDataPoints;
+  }
+
+  public abstract class DataType<T, D extends androidx.health.services.client.data.DataPoint<T>> {
+    ctor public DataType(String name, androidx.health.services.client.data.DataType.TimeType timeType, Class<T> valueClass, boolean isAggregate);
+    method public final String getName();
+    method public final Class<T> getValueClass();
+    property public final String name;
+    property public final Class<T> valueClass;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Double,androidx.health.services.client.data.SampleDataPoint<java.lang.Double>> ABSOLUTE_ELEVATION;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Double,androidx.health.services.client.data.StatisticalDataPoint<java.lang.Double>> ABSOLUTE_ELEVATION_STATS;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Long,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Long>> ACTIVE_EXERCISE_DURATION_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Double,androidx.health.services.client.data.IntervalDataPoint<java.lang.Double>> CALORIES;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Double,androidx.health.services.client.data.IntervalDataPoint<java.lang.Double>> CALORIES_DAILY;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Double,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Double>> CALORIES_TOTAL;
+    field public static final androidx.health.services.client.data.DataType.Companion Companion;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Double,androidx.health.services.client.data.IntervalDataPoint<java.lang.Double>> DECLINE_DISTANCE;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Double,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Double>> DECLINE_DISTANCE_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Long,androidx.health.services.client.data.IntervalDataPoint<java.lang.Long>> DECLINE_DURATION;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Long,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Long>> DECLINE_DURATION_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Double,androidx.health.services.client.data.IntervalDataPoint<java.lang.Double>> DISTANCE;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Double,androidx.health.services.client.data.IntervalDataPoint<java.lang.Double>> DISTANCE_DAILY;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Double,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Double>> DISTANCE_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Double,androidx.health.services.client.data.IntervalDataPoint<java.lang.Double>> ELEVATION_GAIN;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Double,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Double>> ELEVATION_GAIN_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Double,androidx.health.services.client.data.IntervalDataPoint<java.lang.Double>> ELEVATION_LOSS;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Double,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Double>> ELEVATION_LOSS_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Double,androidx.health.services.client.data.IntervalDataPoint<java.lang.Double>> FLAT_GROUND_DISTANCE;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Double,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Double>> FLAT_GROUND_DISTANCE_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Long,androidx.health.services.client.data.IntervalDataPoint<java.lang.Long>> FLAT_GROUND_DURATION;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Long,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Long>> FLAT_GROUND_DURATION_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Double,androidx.health.services.client.data.IntervalDataPoint<java.lang.Double>> FLOORS;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Double,androidx.health.services.client.data.IntervalDataPoint<java.lang.Double>> FLOORS_DAILY;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Double,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Double>> FLOORS_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Long,androidx.health.services.client.data.IntervalDataPoint<java.lang.Long>> GOLF_SHOT_COUNT;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Long,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Long>> GOLF_SHOT_COUNT_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Double,androidx.health.services.client.data.SampleDataPoint<java.lang.Double>> HEART_RATE_BPM;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Double,androidx.health.services.client.data.StatisticalDataPoint<java.lang.Double>> HEART_RATE_BPM_STATS;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Double,androidx.health.services.client.data.IntervalDataPoint<java.lang.Double>> INCLINE_DISTANCE;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Double,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Double>> INCLINE_DISTANCE_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Long,androidx.health.services.client.data.IntervalDataPoint<java.lang.Long>> INCLINE_DURATION;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Long,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Long>> INCLINE_DURATION_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<androidx.health.services.client.data.LocationData,androidx.health.services.client.data.SampleDataPoint<androidx.health.services.client.data.LocationData>> LOCATION;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Double,androidx.health.services.client.data.SampleDataPoint<java.lang.Double>> PACE;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Double,androidx.health.services.client.data.StatisticalDataPoint<java.lang.Double>> PACE_STATS;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Long,androidx.health.services.client.data.IntervalDataPoint<java.lang.Long>> REP_COUNT;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Long,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Long>> REP_COUNT_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Long,androidx.health.services.client.data.IntervalDataPoint<java.lang.Long>> RESTING_EXERCISE_DURATION;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Long,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Long>> RESTING_EXERCISE_DURATION_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Long,androidx.health.services.client.data.IntervalDataPoint<java.lang.Long>> RUNNING_STEPS;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Long,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Long>> RUNNING_STEPS_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Double,androidx.health.services.client.data.SampleDataPoint<java.lang.Double>> SPEED;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Double,androidx.health.services.client.data.StatisticalDataPoint<java.lang.Double>> SPEED_STATS;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Long,androidx.health.services.client.data.IntervalDataPoint<java.lang.Long>> STEPS;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Long,androidx.health.services.client.data.IntervalDataPoint<java.lang.Long>> STEPS_DAILY;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Long,androidx.health.services.client.data.SampleDataPoint<java.lang.Long>> STEPS_PER_MINUTE;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Long,androidx.health.services.client.data.StatisticalDataPoint<java.lang.Long>> STEPS_PER_MINUTE_STATS;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Long,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Long>> STEPS_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Long,androidx.health.services.client.data.IntervalDataPoint<java.lang.Long>> SWIMMING_LAP_COUNT;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Long,androidx.health.services.client.data.IntervalDataPoint<java.lang.Long>> SWIMMING_STROKES;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Long,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Long>> SWIMMING_STROKES_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Double,androidx.health.services.client.data.SampleDataPoint<java.lang.Double>> VO2_MAX;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Double,androidx.health.services.client.data.StatisticalDataPoint<java.lang.Double>> VO2_MAX_STATS;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Long,androidx.health.services.client.data.IntervalDataPoint<java.lang.Long>> WALKING_STEPS;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Long,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Long>> WALKING_STEPS_TOTAL;
+  }
+
+  public static final class DataType.Companion {
+  }
+
+  public static final class DataType.TimeType {
+    method public int getId();
+    method public String getName();
+    property public final int id;
+    property public final String name;
+    field public static final androidx.health.services.client.data.DataType.TimeType.Companion Companion;
+    field public static final androidx.health.services.client.data.DataType.TimeType INTERVAL;
+    field public static final androidx.health.services.client.data.DataType.TimeType SAMPLE;
+    field public static final androidx.health.services.client.data.DataType.TimeType UNKNOWN;
+  }
+
+  public static final class DataType.TimeType.Companion {
+  }
+
+  public final class DataTypeAvailability implements androidx.health.services.client.data.Availability {
+    method public static androidx.health.services.client.data.DataTypeAvailability? fromId(int id);
+    method public int getId();
+    method public String getName();
+    property public int id;
+    property public final String name;
+    field public static final androidx.health.services.client.data.DataTypeAvailability ACQUIRING;
+    field public static final androidx.health.services.client.data.DataTypeAvailability AVAILABLE;
+    field public static final androidx.health.services.client.data.DataTypeAvailability.Companion Companion;
+    field public static final androidx.health.services.client.data.DataTypeAvailability UNAVAILABLE;
+    field public static final androidx.health.services.client.data.DataTypeAvailability UNAVAILABLE_DEVICE_OFF_BODY;
+    field public static final androidx.health.services.client.data.DataTypeAvailability UNKNOWN;
+  }
+
+  public static final class DataTypeAvailability.Companion {
+    method public androidx.health.services.client.data.DataTypeAvailability? fromId(int id);
+  }
+
+  public final class DataTypeCondition<T extends java.lang.Number, D extends androidx.health.services.client.data.DataType<T, ? extends androidx.health.services.client.data.DataPoint<T>>> {
+    ctor public DataTypeCondition(D dataType, T threshold, androidx.health.services.client.data.ComparisonType comparisonType);
+    method public androidx.health.services.client.data.ComparisonType getComparisonType();
+    method public D getDataType();
+    method public T getThreshold();
+    property public final androidx.health.services.client.data.ComparisonType comparisonType;
+    property public final D dataType;
+    property public final T threshold;
+  }
+
+  public final class DeltaDataType<T, D extends androidx.health.services.client.data.DataPoint<T>> extends androidx.health.services.client.data.DataType<T,D> {
+    ctor public DeltaDataType(String name, androidx.health.services.client.data.DataType.TimeType timeType, Class<T> valueClass);
+  }
+
+  public final class ExerciseCapabilities {
+    ctor public ExerciseCapabilities(java.util.Map<androidx.health.services.client.data.ExerciseType,androidx.health.services.client.data.ExerciseTypeCapabilities> typeToCapabilities);
+    method public java.util.Set<androidx.health.services.client.data.ExerciseType> getAutoPauseAndResumeEnabledExercises();
+    method public androidx.health.services.client.data.ExerciseTypeCapabilities getExerciseTypeCapabilities(androidx.health.services.client.data.ExerciseType exercise);
+    method public java.util.Set<androidx.health.services.client.data.ExerciseType> getSupportedExerciseTypes();
+    method public java.util.Map<androidx.health.services.client.data.ExerciseType,androidx.health.services.client.data.ExerciseTypeCapabilities> getTypeToCapabilities();
+    property public final java.util.Set<androidx.health.services.client.data.ExerciseType> autoPauseAndResumeEnabledExercises;
+    property public final java.util.Set<androidx.health.services.client.data.ExerciseType> supportedExerciseTypes;
+    property public final java.util.Map<androidx.health.services.client.data.ExerciseType,androidx.health.services.client.data.ExerciseTypeCapabilities> typeToCapabilities;
+  }
+
+  public final class ExerciseConfig {
+    ctor public ExerciseConfig(androidx.health.services.client.data.ExerciseType exerciseType, java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> dataTypes, boolean isAutoPauseAndResumeEnabled, boolean isGpsEnabled, optional java.util.List<? extends androidx.health.services.client.data.ExerciseGoal<?>> exerciseGoals, optional android.os.Bundle exerciseParams, optional @FloatRange(from=0.0) float swimmingPoolLengthMeters);
+    method public static androidx.health.services.client.data.ExerciseConfig.Builder builder(androidx.health.services.client.data.ExerciseType exerciseType);
+    method public java.util.Set<androidx.health.services.client.data.DataType<?,?>> getDataTypes();
+    method public java.util.List<androidx.health.services.client.data.ExerciseGoal<?>> getExerciseGoals();
+    method public android.os.Bundle getExerciseParams();
+    method public androidx.health.services.client.data.ExerciseType getExerciseType();
+    method public float getSwimmingPoolLengthMeters();
+    method public boolean isAutoPauseAndResumeEnabled();
+    method public boolean isGpsEnabled();
+    property public final java.util.Set<androidx.health.services.client.data.DataType<?,?>> dataTypes;
+    property public final java.util.List<androidx.health.services.client.data.ExerciseGoal<?>> exerciseGoals;
+    property public final android.os.Bundle exerciseParams;
+    property public final androidx.health.services.client.data.ExerciseType exerciseType;
+    property public final boolean isAutoPauseAndResumeEnabled;
+    property public final boolean isGpsEnabled;
+    property public final float swimmingPoolLengthMeters;
+    field public static final androidx.health.services.client.data.ExerciseConfig.Companion Companion;
+    field public static final float SWIMMING_POOL_LENGTH_UNSPECIFIED = 0.0f;
+  }
+
+  public static final class ExerciseConfig.Builder {
+    ctor public ExerciseConfig.Builder(androidx.health.services.client.data.ExerciseType exerciseType);
+    method public androidx.health.services.client.data.ExerciseConfig build();
+    method public androidx.health.services.client.data.ExerciseConfig.Builder setDataTypes(java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> dataTypes);
+    method public androidx.health.services.client.data.ExerciseConfig.Builder setExerciseGoals(java.util.List<? extends androidx.health.services.client.data.ExerciseGoal<?>> exerciseGoals);
+    method public androidx.health.services.client.data.ExerciseConfig.Builder setExerciseParams(android.os.Bundle exerciseParams);
+    method public androidx.health.services.client.data.ExerciseConfig.Builder setIsAutoPauseAndResumeEnabled(boolean isAutoPauseAndResumeEnabled);
+    method public androidx.health.services.client.data.ExerciseConfig.Builder setIsGpsEnabled(boolean isGpsEnabled);
+    method public androidx.health.services.client.data.ExerciseConfig.Builder setSwimmingPoolLengthMeters(float swimmingPoolLength);
+  }
+
+  public static final class ExerciseConfig.Companion {
+    method public androidx.health.services.client.data.ExerciseConfig.Builder builder(androidx.health.services.client.data.ExerciseType exerciseType);
+  }
+
+  public final class ExerciseGoal<T extends java.lang.Number> implements android.os.Parcelable {
+    method public static <T extends java.lang.Number> androidx.health.services.client.data.ExerciseGoal<T> createMilestone(androidx.health.services.client.data.DataTypeCondition<T,androidx.health.services.client.data.AggregateDataType<T,?>> condition, T period);
+    method public static <T extends java.lang.Number> androidx.health.services.client.data.ExerciseGoal<T> createMilestoneGoalWithUpdatedThreshold(androidx.health.services.client.data.ExerciseGoal<T> goal, T newThreshold);
+    method public static <T extends java.lang.Number> androidx.health.services.client.data.ExerciseGoal<T> createOneTimeGoal(androidx.health.services.client.data.DataTypeCondition<T,androidx.health.services.client.data.AggregateDataType<T,?>> condition);
+    method public int describeContents();
+    method public androidx.health.services.client.data.DataTypeCondition<T,androidx.health.services.client.data.AggregateDataType<T,?>> getDataTypeCondition();
+    method public androidx.health.services.client.data.ExerciseGoalType getExerciseGoalType();
+    method public T? getPeriod();
+    method public void writeToParcel(android.os.Parcel dest, int flags);
+    property public final androidx.health.services.client.data.DataTypeCondition<T,androidx.health.services.client.data.AggregateDataType<T,?>> dataTypeCondition;
+    property public final androidx.health.services.client.data.ExerciseGoalType exerciseGoalType;
+    property public final T? period;
+    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.ExerciseGoal<?>> CREATOR;
+    field public static final androidx.health.services.client.data.ExerciseGoal.Companion Companion;
+  }
+
+  public static final class ExerciseGoal.Companion {
+    method public <T extends java.lang.Number> androidx.health.services.client.data.ExerciseGoal<T> createMilestone(androidx.health.services.client.data.DataTypeCondition<T,androidx.health.services.client.data.AggregateDataType<T,?>> condition, T period);
+    method public <T extends java.lang.Number> androidx.health.services.client.data.ExerciseGoal<T> createMilestoneGoalWithUpdatedThreshold(androidx.health.services.client.data.ExerciseGoal<T> goal, T newThreshold);
+    method public <T extends java.lang.Number> androidx.health.services.client.data.ExerciseGoal<T> createOneTimeGoal(androidx.health.services.client.data.DataTypeCondition<T,androidx.health.services.client.data.AggregateDataType<T,?>> condition);
+  }
+
+  public final class ExerciseGoalType {
+    method public static androidx.health.services.client.data.ExerciseGoalType? fromId(int id);
+    method public int getId();
+    method public String getName();
+    property public final int id;
+    property public final String name;
+    field public static final androidx.health.services.client.data.ExerciseGoalType.Companion Companion;
+    field public static final androidx.health.services.client.data.ExerciseGoalType MILESTONE;
+    field public static final androidx.health.services.client.data.ExerciseGoalType ONE_TIME_GOAL;
+  }
+
+  public static final class ExerciseGoalType.Companion {
+    method public androidx.health.services.client.data.ExerciseGoalType? fromId(int id);
+  }
+
+  public final class ExerciseInfo {
+    ctor public ExerciseInfo(int exerciseTrackedStatus, androidx.health.services.client.data.ExerciseType exerciseType);
+    method public int getExerciseTrackedStatus();
+    method public androidx.health.services.client.data.ExerciseType getExerciseType();
+    property public final int exerciseTrackedStatus;
+    property public final androidx.health.services.client.data.ExerciseType exerciseType;
+  }
+
+  public final class ExerciseLapSummary {
+    ctor public ExerciseLapSummary(int lapCount, java.time.Instant startTime, java.time.Instant endTime, java.time.Duration activeDuration, androidx.health.services.client.data.DataPointContainer lapMetrics);
+    method public java.time.Duration getActiveDuration();
+    method public java.time.Instant getEndTime();
+    method public int getLapCount();
+    method public androidx.health.services.client.data.DataPointContainer getLapMetrics();
+    method public java.time.Instant getStartTime();
+    property public final java.time.Duration activeDuration;
+    property public final java.time.Instant endTime;
+    property public final int lapCount;
+    property public final androidx.health.services.client.data.DataPointContainer lapMetrics;
+    property public final java.time.Instant startTime;
+  }
+
+  public final class ExerciseState {
+    method public static androidx.health.services.client.data.ExerciseState? fromId(int id);
+    method public int getId();
+    method public String getName();
+    method public boolean isEnded();
+    method public boolean isEnding();
+    method public boolean isPaused();
+    method public boolean isResuming();
+    property public final int id;
+    property public final boolean isEnded;
+    property public final boolean isEnding;
+    property public final boolean isPaused;
+    property public final boolean isResuming;
+    property public final String name;
+    field public static final androidx.health.services.client.data.ExerciseState ACTIVE;
+    field public static final androidx.health.services.client.data.ExerciseState AUTO_PAUSED;
+    field public static final androidx.health.services.client.data.ExerciseState AUTO_PAUSING;
+    field public static final androidx.health.services.client.data.ExerciseState AUTO_RESUMING;
+    field public static final androidx.health.services.client.data.ExerciseState.Companion Companion;
+    field public static final androidx.health.services.client.data.ExerciseState ENDED;
+    field public static final androidx.health.services.client.data.ExerciseState ENDING;
+    field public static final androidx.health.services.client.data.ExerciseState PREPARING;
+    field public static final androidx.health.services.client.data.ExerciseState USER_PAUSED;
+    field public static final androidx.health.services.client.data.ExerciseState USER_PAUSING;
+    field public static final androidx.health.services.client.data.ExerciseState USER_RESUMING;
+    field public static final androidx.health.services.client.data.ExerciseState USER_STARTING;
+  }
+
+  public static final class ExerciseState.Companion {
+    method public androidx.health.services.client.data.ExerciseState? fromId(int id);
+  }
+
+  public final class ExerciseStateInfo {
+    ctor public ExerciseStateInfo(androidx.health.services.client.data.ExerciseState exerciseState, int exerciseEndReason);
+    method public int getEndReason();
+    method public androidx.health.services.client.data.ExerciseState getState();
+    property public final int endReason;
+    property public final androidx.health.services.client.data.ExerciseState state;
+    field public static final androidx.health.services.client.data.ExerciseStateInfo.Companion Companion;
+  }
+
+  public static final class ExerciseStateInfo.Companion {
+  }
+
+  public final class ExerciseType {
+    method public static androidx.health.services.client.data.ExerciseType fromId(int id);
+    method public int getId();
+    method public String getName();
+    property public final int id;
+    property public final String name;
+    field public static final androidx.health.services.client.data.ExerciseType ALPINE_SKIING;
+    field public static final androidx.health.services.client.data.ExerciseType BACKPACKING;
+    field public static final androidx.health.services.client.data.ExerciseType BACK_EXTENSION;
+    field public static final androidx.health.services.client.data.ExerciseType BADMINTON;
+    field public static final androidx.health.services.client.data.ExerciseType BARBELL_SHOULDER_PRESS;
+    field public static final androidx.health.services.client.data.ExerciseType BASEBALL;
+    field public static final androidx.health.services.client.data.ExerciseType BASKETBALL;
+    field public static final androidx.health.services.client.data.ExerciseType BENCH_PRESS;
+    field public static final androidx.health.services.client.data.ExerciseType BIKING;
+    field public static final androidx.health.services.client.data.ExerciseType BIKING_STATIONARY;
+    field public static final androidx.health.services.client.data.ExerciseType BOOT_CAMP;
+    field public static final androidx.health.services.client.data.ExerciseType BOXING;
+    field public static final androidx.health.services.client.data.ExerciseType BURPEE;
+    field public static final androidx.health.services.client.data.ExerciseType CALISTHENICS;
+    field public static final androidx.health.services.client.data.ExerciseType CRICKET;
+    field public static final androidx.health.services.client.data.ExerciseType CROSS_COUNTRY_SKIING;
+    field public static final androidx.health.services.client.data.ExerciseType CRUNCH;
+    field public static final androidx.health.services.client.data.ExerciseType.Companion Companion;
+    field public static final androidx.health.services.client.data.ExerciseType DANCING;
+    field public static final androidx.health.services.client.data.ExerciseType DEADLIFT;
+    field public static final androidx.health.services.client.data.ExerciseType ELLIPTICAL;
+    field public static final androidx.health.services.client.data.ExerciseType EXERCISE_CLASS;
+    field public static final androidx.health.services.client.data.ExerciseType FENCING;
+    field public static final androidx.health.services.client.data.ExerciseType FOOTBALL_AMERICAN;
+    field public static final androidx.health.services.client.data.ExerciseType FOOTBALL_AUSTRALIAN;
+    field public static final androidx.health.services.client.data.ExerciseType FORWARD_TWIST;
+    field public static final androidx.health.services.client.data.ExerciseType FRISBEE_DISC;
+    field public static final androidx.health.services.client.data.ExerciseType GOLF;
+    field public static final androidx.health.services.client.data.ExerciseType GUIDED_BREATHING;
+    field public static final androidx.health.services.client.data.ExerciseType GYMNASTICS;
+    field public static final androidx.health.services.client.data.ExerciseType HANDBALL;
+    field public static final androidx.health.services.client.data.ExerciseType HIGH_INTENSITY_INTERVAL_TRAINING;
+    field public static final androidx.health.services.client.data.ExerciseType HIKING;
+    field public static final androidx.health.services.client.data.ExerciseType HORSE_RIDING;
+    field public static final androidx.health.services.client.data.ExerciseType ICE_HOCKEY;
+    field public static final androidx.health.services.client.data.ExerciseType ICE_SKATING;
+    field public static final androidx.health.services.client.data.ExerciseType INLINE_SKATING;
+    field public static final androidx.health.services.client.data.ExerciseType JUMPING_JACK;
+    field public static final androidx.health.services.client.data.ExerciseType JUMP_ROPE;
+    field public static final androidx.health.services.client.data.ExerciseType LAT_PULL_DOWN;
+    field public static final androidx.health.services.client.data.ExerciseType LUNGE;
+    field public static final androidx.health.services.client.data.ExerciseType MARTIAL_ARTS;
+    field public static final androidx.health.services.client.data.ExerciseType MEDITATION;
+    field public static final androidx.health.services.client.data.ExerciseType MOUNTAIN_BIKING;
+    field public static final androidx.health.services.client.data.ExerciseType ORIENTEERING;
+    field public static final androidx.health.services.client.data.ExerciseType PADDLING;
+    field public static final androidx.health.services.client.data.ExerciseType PARA_GLIDING;
+    field public static final androidx.health.services.client.data.ExerciseType PILATES;
+    field public static final androidx.health.services.client.data.ExerciseType PLANK;
+    field public static final androidx.health.services.client.data.ExerciseType RACQUETBALL;
+    field public static final androidx.health.services.client.data.ExerciseType ROCK_CLIMBING;
+    field public static final androidx.health.services.client.data.ExerciseType ROLLER_HOCKEY;
+    field public static final androidx.health.services.client.data.ExerciseType ROLLER_SKATING;
+    field public static final androidx.health.services.client.data.ExerciseType ROWING;
+    field public static final androidx.health.services.client.data.ExerciseType ROWING_MACHINE;
+    field public static final androidx.health.services.client.data.ExerciseType RUGBY;
+    field public static final androidx.health.services.client.data.ExerciseType RUNNING;
+    field public static final androidx.health.services.client.data.ExerciseType RUNNING_TREADMILL;
+    field public static final androidx.health.services.client.data.ExerciseType SAILING;
+    field public static final androidx.health.services.client.data.ExerciseType SCUBA_DIVING;
+    field public static final androidx.health.services.client.data.ExerciseType SKATING;
+    field public static final androidx.health.services.client.data.ExerciseType SKIING;
+    field public static final androidx.health.services.client.data.ExerciseType SNOWBOARDING;
+    field public static final androidx.health.services.client.data.ExerciseType SNOWSHOEING;
+    field public static final androidx.health.services.client.data.ExerciseType SOCCER;
+    field public static final androidx.health.services.client.data.ExerciseType SOFTBALL;
+    field public static final androidx.health.services.client.data.ExerciseType SQUASH;
+    field public static final androidx.health.services.client.data.ExerciseType SQUAT;
+    field public static final androidx.health.services.client.data.ExerciseType STAIR_CLIMBING;
+    field public static final androidx.health.services.client.data.ExerciseType STAIR_CLIMBING_MACHINE;
+    field public static final androidx.health.services.client.data.ExerciseType STRENGTH_TRAINING;
+    field public static final androidx.health.services.client.data.ExerciseType STRETCHING;
+    field public static final androidx.health.services.client.data.ExerciseType SURFING;
+    field public static final androidx.health.services.client.data.ExerciseType SWIMMING_OPEN_WATER;
+    field public static final androidx.health.services.client.data.ExerciseType SWIMMING_POOL;
+    field public static final androidx.health.services.client.data.ExerciseType TABLE_TENNIS;
+    field public static final androidx.health.services.client.data.ExerciseType TENNIS;
+    field public static final androidx.health.services.client.data.ExerciseType UNKNOWN;
+    field public static final androidx.health.services.client.data.ExerciseType UPPER_TWIST;
+    field public static final androidx.health.services.client.data.ExerciseType VOLLEYBALL;
+    field public static final androidx.health.services.client.data.ExerciseType WALKING;
+    field public static final androidx.health.services.client.data.ExerciseType WATER_POLO;
+    field public static final androidx.health.services.client.data.ExerciseType WEIGHTLIFTING;
+    field public static final androidx.health.services.client.data.ExerciseType WORKOUT;
+    field public static final androidx.health.services.client.data.ExerciseType YACHTING;
+    field public static final androidx.health.services.client.data.ExerciseType YOGA;
+  }
+
+  public static final class ExerciseType.Companion {
+    method public androidx.health.services.client.data.ExerciseType fromId(int id);
+  }
+
+  public final class ExerciseTypeCapabilities {
+    ctor public ExerciseTypeCapabilities(java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> supportedDataTypes, java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,? extends java.util.Set<androidx.health.services.client.data.ComparisonType>> supportedGoals, java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,? extends java.util.Set<androidx.health.services.client.data.ComparisonType>> supportedMilestones, boolean supportsAutoPauseAndResume);
+    method public java.util.Set<androidx.health.services.client.data.DataType<?,?>> getSupportedDataTypes();
+    method public java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,java.util.Set<androidx.health.services.client.data.ComparisonType>> getSupportedGoals();
+    method public java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,java.util.Set<androidx.health.services.client.data.ComparisonType>> getSupportedMilestones();
+    method public boolean getSupportsAutoPauseAndResume();
+    property public final java.util.Set<androidx.health.services.client.data.DataType<?,?>> supportedDataTypes;
+    property public final java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,java.util.Set<androidx.health.services.client.data.ComparisonType>> supportedGoals;
+    property public final java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,java.util.Set<androidx.health.services.client.data.ComparisonType>> supportedMilestones;
+    property public final boolean supportsAutoPauseAndResume;
+  }
+
+  public final class ExerciseUpdate {
+    method public java.time.Duration getActiveDurationAtDataPoint(androidx.health.services.client.data.IntervalDataPoint<?> dataPoint);
+    method public java.time.Duration getActiveDurationAtDataPoint(androidx.health.services.client.data.SampleDataPoint<?> dataPoint);
+    method public androidx.health.services.client.data.ExerciseUpdate.ActiveDurationCheckpoint? getActiveDurationCheckpoint();
+    method public androidx.health.services.client.data.ExerciseConfig? getExerciseConfig();
+    method public androidx.health.services.client.data.ExerciseStateInfo getExerciseStateInfo();
+    method public java.util.Set<androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number>> getLatestAchievedGoals();
+    method public androidx.health.services.client.data.DataPointContainer getLatestMetrics();
+    method public java.util.Set<androidx.health.services.client.data.MilestoneMarkerSummary> getLatestMilestoneMarkerSummaries();
+    method public java.time.Instant? getStartTime();
+    method public java.time.Duration getUpdateDurationFromBoot();
+    property public final androidx.health.services.client.data.ExerciseUpdate.ActiveDurationCheckpoint? activeDurationCheckpoint;
+    property public final androidx.health.services.client.data.ExerciseConfig? exerciseConfig;
+    property public final androidx.health.services.client.data.ExerciseStateInfo exerciseStateInfo;
+    property public final java.util.Set<androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number>> latestAchievedGoals;
+    property public final androidx.health.services.client.data.DataPointContainer latestMetrics;
+    property public final java.util.Set<androidx.health.services.client.data.MilestoneMarkerSummary> latestMilestoneMarkerSummaries;
+    property public final java.time.Instant? startTime;
+    field public static final androidx.health.services.client.data.ExerciseUpdate.Companion Companion;
+  }
+
+  public static final class ExerciseUpdate.ActiveDurationCheckpoint {
+    ctor public ExerciseUpdate.ActiveDurationCheckpoint(java.time.Instant time, java.time.Duration activeDuration);
+    method public java.time.Duration getActiveDuration();
+    method public java.time.Instant getTime();
+    property public final java.time.Duration activeDuration;
+    property public final java.time.Instant time;
+  }
+
+  public static final class ExerciseUpdate.Companion {
+  }
+
+  public final class HealthEvent {
+    ctor public HealthEvent(androidx.health.services.client.data.HealthEvent.Type type, java.time.Instant eventTime, androidx.health.services.client.data.DataPointContainer metrics);
+    method public java.time.Instant getEventTime();
+    method public androidx.health.services.client.data.DataPointContainer getMetrics();
+    method public androidx.health.services.client.data.HealthEvent.Type getType();
+    property public final java.time.Instant eventTime;
+    property public final androidx.health.services.client.data.DataPointContainer metrics;
+    property public final androidx.health.services.client.data.HealthEvent.Type type;
+  }
+
+  public static final class HealthEvent.Type {
+    method public int getId();
+    method public String getName();
+    property public final int id;
+    property public final String name;
+    field public static final androidx.health.services.client.data.HealthEvent.Type.Companion Companion;
+    field public static final androidx.health.services.client.data.HealthEvent.Type FALL_DETECTED;
+    field public static final androidx.health.services.client.data.HealthEvent.Type UNKNOWN;
+  }
+
+  public static final class HealthEvent.Type.Companion {
+  }
+
+  public final class HeartRateAccuracy extends androidx.health.services.client.data.DataPointAccuracy {
+    ctor public HeartRateAccuracy(androidx.health.services.client.data.HeartRateAccuracy.SensorStatus sensorStatus);
+    method public androidx.health.services.client.data.HeartRateAccuracy.SensorStatus getSensorStatus();
+    property public final androidx.health.services.client.data.HeartRateAccuracy.SensorStatus sensorStatus;
+  }
+
+  public static final class HeartRateAccuracy.SensorStatus {
+    method public int getId();
+    method public String getName();
+    property public final int id;
+    property public final String name;
+    field public static final androidx.health.services.client.data.HeartRateAccuracy.SensorStatus ACCURACY_HIGH;
+    field public static final androidx.health.services.client.data.HeartRateAccuracy.SensorStatus ACCURACY_LOW;
+    field public static final androidx.health.services.client.data.HeartRateAccuracy.SensorStatus ACCURACY_MEDIUM;
+    field public static final androidx.health.services.client.data.HeartRateAccuracy.SensorStatus.Companion Companion;
+    field public static final androidx.health.services.client.data.HeartRateAccuracy.SensorStatus NO_CONTACT;
+    field public static final androidx.health.services.client.data.HeartRateAccuracy.SensorStatus UNKNOWN;
+    field public static final androidx.health.services.client.data.HeartRateAccuracy.SensorStatus UNRELIABLE;
+  }
+
+  public static final class HeartRateAccuracy.SensorStatus.Companion {
+  }
+
+  public final class IntervalDataPoint<T> extends androidx.health.services.client.data.DataPoint<T> {
+    ctor public IntervalDataPoint(androidx.health.services.client.data.DataType<T,? extends androidx.health.services.client.data.IntervalDataPoint<T>> dataType, T value, java.time.Duration startDurationFromBoot, java.time.Duration endDurationFromBoot, optional android.os.Bundle metadata, optional androidx.health.services.client.data.DataPointAccuracy? accuracy);
+    method public androidx.health.services.client.data.DataPointAccuracy? getAccuracy();
+    method public androidx.health.services.client.data.DataType<T,? extends androidx.health.services.client.data.IntervalDataPoint<T>> getDataType();
+    method public java.time.Duration getEndDurationFromBoot();
+    method public java.time.Instant getEndInstant(java.time.Instant bootInstant);
+    method public android.os.Bundle getMetadata();
+    method public java.time.Duration getStartDurationFromBoot();
+    method public java.time.Instant getStartInstant(java.time.Instant bootInstant);
+    method public T getValue();
+    property public final androidx.health.services.client.data.DataPointAccuracy? accuracy;
+    property public androidx.health.services.client.data.DataType<T,? extends androidx.health.services.client.data.IntervalDataPoint<T>> dataType;
+    property public final java.time.Duration endDurationFromBoot;
+    property public final android.os.Bundle metadata;
+    property public final java.time.Duration startDurationFromBoot;
+    property public final T value;
+  }
+
+  public final class LocationAccuracy extends androidx.health.services.client.data.DataPointAccuracy {
+    ctor public LocationAccuracy(@FloatRange(from=0.0) double horizontalPositionErrorMeters, optional @FloatRange(from=0.0) double verticalPositionErrorMeters);
+    method public double getHorizontalPositionErrorMeters();
+    method public double getVerticalPositionErrorMeters();
+    property public final double horizontalPositionErrorMeters;
+    property public final double verticalPositionErrorMeters;
+    field public static final androidx.health.services.client.data.LocationAccuracy.Companion Companion;
+  }
+
+  public static final class LocationAccuracy.Companion {
+  }
+
+  public final class LocationAvailability implements androidx.health.services.client.data.Availability {
+    method public static androidx.health.services.client.data.LocationAvailability? fromId(int id);
+    method public int getId();
+    method public String getName();
+    property public int id;
+    property public final String name;
+    field public static final androidx.health.services.client.data.LocationAvailability ACQUIRED_TETHERED;
+    field public static final androidx.health.services.client.data.LocationAvailability ACQUIRED_UNTETHERED;
+    field public static final androidx.health.services.client.data.LocationAvailability ACQUIRING;
+    field public static final androidx.health.services.client.data.LocationAvailability.Companion Companion;
+    field public static final androidx.health.services.client.data.LocationAvailability NO_GNSS;
+    field public static final androidx.health.services.client.data.LocationAvailability UNAVAILABLE;
+    field public static final androidx.health.services.client.data.LocationAvailability UNKNOWN;
+  }
+
+  public static final class LocationAvailability.Companion {
+    method public androidx.health.services.client.data.LocationAvailability? fromId(int id);
+  }
+
+  public final class LocationData {
+    ctor public LocationData(@FloatRange(from=-90.0, to=90.0) double latitude, @FloatRange(from=-180.0, to=180.0) double longitude, optional double altitude, optional double bearing);
+    method public double getAltitude();
+    method public double getBearing();
+    method public double getLatitude();
+    method public double getLongitude();
+    property public final double altitude;
+    property public final double bearing;
+    property public final double latitude;
+    property public final double longitude;
+    field public static final double ALTITUDE_UNAVAILABLE = (0.0/0.0);
+    field public static final double BEARING_UNAVAILABLE = (0.0/0.0);
+  }
+
+  public final class MeasureCapabilities {
+    ctor public MeasureCapabilities(java.util.Set<? extends androidx.health.services.client.data.DeltaDataType<?,?>> supportedDataTypesMeasure);
+    method public java.util.Set<androidx.health.services.client.data.DeltaDataType<?,?>> getSupportedDataTypesMeasure();
+    property public final java.util.Set<androidx.health.services.client.data.DeltaDataType<?,?>> supportedDataTypesMeasure;
+  }
+
+  public final class MilestoneMarkerSummary {
+    ctor public MilestoneMarkerSummary(java.time.Instant startTime, java.time.Instant endTime, java.time.Duration activeDuration, androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number> achievedGoal, androidx.health.services.client.data.DataPointContainer summaryMetrics);
+    method public androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number> getAchievedGoal();
+    method public java.time.Duration getActiveDuration();
+    method public java.time.Instant getEndTime();
+    method public java.time.Instant getStartTime();
+    method public androidx.health.services.client.data.DataPointContainer getSummaryMetrics();
+    property public final androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number> achievedGoal;
+    property public final java.time.Duration activeDuration;
+    property public final java.time.Instant endTime;
+    property public final java.time.Instant startTime;
+    property public final androidx.health.services.client.data.DataPointContainer summaryMetrics;
+  }
+
+  public final class PassiveGoal {
+    ctor public PassiveGoal(androidx.health.services.client.data.DataTypeCondition<? extends java.lang.Number,? extends androidx.health.services.client.data.DeltaDataType<? extends java.lang.Number,?>> dataTypeCondition);
+    method public androidx.health.services.client.data.DataTypeCondition<? extends java.lang.Number,? extends androidx.health.services.client.data.DeltaDataType<? extends java.lang.Number,?>> getDataTypeCondition();
+    property public final androidx.health.services.client.data.DataTypeCondition<? extends java.lang.Number,? extends androidx.health.services.client.data.DeltaDataType<? extends java.lang.Number,?>> dataTypeCondition;
+  }
+
+  public final class PassiveListenerConfig {
+    ctor public PassiveListenerConfig(java.util.Set<? extends androidx.health.services.client.data.DataType<? extends java.lang.Object,? extends androidx.health.services.client.data.DataPoint<?>>> dataTypes, boolean shouldUserActivityInfoBeRequested, java.util.Set<androidx.health.services.client.data.PassiveGoal> dailyGoals, java.util.Set<androidx.health.services.client.data.HealthEvent.Type> healthEventTypes);
+    method public static androidx.health.services.client.data.PassiveListenerConfig.Builder builder();
+    method public java.util.Set<androidx.health.services.client.data.PassiveGoal> getDailyGoals();
+    method public java.util.Set<androidx.health.services.client.data.DataType<? extends java.lang.Object,? extends androidx.health.services.client.data.DataPoint<?>>> getDataTypes();
+    method public java.util.Set<androidx.health.services.client.data.HealthEvent.Type> getHealthEventTypes();
+    method public boolean getShouldUserActivityInfoBeRequested();
+    property public final java.util.Set<androidx.health.services.client.data.PassiveGoal> dailyGoals;
+    property public final java.util.Set<androidx.health.services.client.data.DataType<? extends java.lang.Object,? extends androidx.health.services.client.data.DataPoint<?>>> dataTypes;
+    property public final java.util.Set<androidx.health.services.client.data.HealthEvent.Type> healthEventTypes;
+    property public final boolean shouldUserActivityInfoBeRequested;
+    field public static final androidx.health.services.client.data.PassiveListenerConfig.Companion Companion;
+  }
+
+  public static final class PassiveListenerConfig.Builder {
+    ctor public PassiveListenerConfig.Builder();
+    method public androidx.health.services.client.data.PassiveListenerConfig build();
+    method public androidx.health.services.client.data.PassiveListenerConfig.Builder setDailyGoals(java.util.Set<androidx.health.services.client.data.PassiveGoal> dailyGoals);
+    method public androidx.health.services.client.data.PassiveListenerConfig.Builder setDataTypes(java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> dataTypes);
+    method public androidx.health.services.client.data.PassiveListenerConfig.Builder setHealthEventTypes(java.util.Set<androidx.health.services.client.data.HealthEvent.Type> healthEventTypes);
+    method public androidx.health.services.client.data.PassiveListenerConfig.Builder setShouldUserActivityInfoBeRequested(boolean shouldUserActivityInfoBeRequested);
+  }
+
+  public static final class PassiveListenerConfig.Companion {
+    method public androidx.health.services.client.data.PassiveListenerConfig.Builder builder();
+  }
+
+  public final class PassiveMonitoringCapabilities {
+    ctor public PassiveMonitoringCapabilities(java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> supportedDataTypesPassiveMonitoring, java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> supportedDataTypesPassiveGoals, java.util.Set<androidx.health.services.client.data.HealthEvent.Type> supportedHealthEventTypes, java.util.Set<androidx.health.services.client.data.UserActivityState> supportedUserActivityStates);
+    method public java.util.Set<androidx.health.services.client.data.DataType<?,?>> getSupportedDataTypesPassiveGoals();
+    method public java.util.Set<androidx.health.services.client.data.DataType<?,?>> getSupportedDataTypesPassiveMonitoring();
+    method public java.util.Set<androidx.health.services.client.data.HealthEvent.Type> getSupportedHealthEventTypes();
+    method public java.util.Set<androidx.health.services.client.data.UserActivityState> getSupportedUserActivityStates();
+    property public final java.util.Set<androidx.health.services.client.data.DataType<?,?>> supportedDataTypesPassiveGoals;
+    property public final java.util.Set<androidx.health.services.client.data.DataType<?,?>> supportedDataTypesPassiveMonitoring;
+    property public final java.util.Set<androidx.health.services.client.data.HealthEvent.Type> supportedHealthEventTypes;
+    property public final java.util.Set<androidx.health.services.client.data.UserActivityState> supportedUserActivityStates;
+  }
+
+  public final class PassiveMonitoringUpdate {
+    ctor public PassiveMonitoringUpdate(androidx.health.services.client.data.DataPointContainer dataPoints, java.util.List<androidx.health.services.client.data.UserActivityInfo> userActivityInfoUpdates);
+    method public androidx.health.services.client.data.DataPointContainer getDataPoints();
+    method public java.util.List<androidx.health.services.client.data.UserActivityInfo> getUserActivityInfoUpdates();
+    property public final androidx.health.services.client.data.DataPointContainer dataPoints;
+    property public final java.util.List<androidx.health.services.client.data.UserActivityInfo> userActivityInfoUpdates;
+  }
+
+  public final class SampleDataPoint<T> extends androidx.health.services.client.data.DataPoint<T> {
+    ctor public SampleDataPoint(androidx.health.services.client.data.DataType<T,androidx.health.services.client.data.SampleDataPoint<T>> dataType, T value, java.time.Duration timeDurationFromBoot, optional android.os.Bundle metadata, optional androidx.health.services.client.data.DataPointAccuracy? accuracy);
+    method public androidx.health.services.client.data.DataPointAccuracy? getAccuracy();
+    method public androidx.health.services.client.data.DataType<T,androidx.health.services.client.data.SampleDataPoint<T>> getDataType();
+    method public android.os.Bundle getMetadata();
+    method public java.time.Duration getTimeDurationFromBoot();
+    method public java.time.Instant getTimeInstant(java.time.Instant bootInstant);
+    method public T getValue();
+    property public final androidx.health.services.client.data.DataPointAccuracy? accuracy;
+    property public androidx.health.services.client.data.DataType<T,androidx.health.services.client.data.SampleDataPoint<T>> dataType;
+    property public final android.os.Bundle metadata;
+    property public final java.time.Duration timeDurationFromBoot;
+    property public final T value;
+  }
+
+  public final class StatisticalDataPoint<T extends java.lang.Number> extends androidx.health.services.client.data.DataPoint<T> {
+    ctor public StatisticalDataPoint(androidx.health.services.client.data.AggregateDataType<T,androidx.health.services.client.data.StatisticalDataPoint<T>> dataType, T min, T max, T average, java.time.Instant start, java.time.Instant end);
+    method public T getAverage();
+    method public java.time.Instant getEnd();
+    method public T getMax();
+    method public T getMin();
+    method public java.time.Instant getStart();
+    property public final T average;
+    property public final java.time.Instant end;
+    property public final T max;
+    property public final T min;
+    property public final java.time.Instant start;
+    field public static final androidx.health.services.client.data.StatisticalDataPoint.Companion Companion;
+  }
+
+  public static final class StatisticalDataPoint.Companion {
+  }
+
+  public final class UserActivityInfo {
+    ctor public UserActivityInfo(androidx.health.services.client.data.UserActivityState userActivityState, androidx.health.services.client.data.ExerciseInfo? exerciseInfo, java.time.Instant stateChangeTime);
+    method public static androidx.health.services.client.data.UserActivityInfo createActiveExerciseState(androidx.health.services.client.data.ExerciseInfo exerciseInfo, java.time.Instant stateChangeTime);
+    method public static androidx.health.services.client.data.UserActivityInfo createAsleepState(java.time.Instant stateChangeTime);
+    method public static androidx.health.services.client.data.UserActivityInfo createPassiveActivityState(java.time.Instant stateChangeTime);
+    method public static androidx.health.services.client.data.UserActivityInfo createUnknownTypeState(java.time.Instant stateChangeTime);
+    method public androidx.health.services.client.data.ExerciseInfo? getExerciseInfo();
+    method public java.time.Instant getStateChangeTime();
+    method public androidx.health.services.client.data.UserActivityState getUserActivityState();
+    property public final androidx.health.services.client.data.ExerciseInfo? exerciseInfo;
+    property public final java.time.Instant stateChangeTime;
+    property public final androidx.health.services.client.data.UserActivityState userActivityState;
+    field public static final androidx.health.services.client.data.UserActivityInfo.Companion Companion;
+  }
+
+  public static final class UserActivityInfo.Companion {
+    method public androidx.health.services.client.data.UserActivityInfo createActiveExerciseState(androidx.health.services.client.data.ExerciseInfo exerciseInfo, java.time.Instant stateChangeTime);
+    method public androidx.health.services.client.data.UserActivityInfo createAsleepState(java.time.Instant stateChangeTime);
+    method public androidx.health.services.client.data.UserActivityInfo createPassiveActivityState(java.time.Instant stateChangeTime);
+    method public androidx.health.services.client.data.UserActivityInfo createUnknownTypeState(java.time.Instant stateChangeTime);
+  }
+
+  public final class UserActivityState {
+    ctor public UserActivityState(int id, String name);
+    method public int getId();
+    method public String getName();
+    property public final int id;
+    property public final String name;
+    field public static final androidx.health.services.client.data.UserActivityState.Companion Companion;
+    field public static final androidx.health.services.client.data.UserActivityState USER_ACTIVITY_ASLEEP;
+    field public static final androidx.health.services.client.data.UserActivityState USER_ACTIVITY_EXERCISE;
+    field public static final androidx.health.services.client.data.UserActivityState USER_ACTIVITY_PASSIVE;
+    field public static final androidx.health.services.client.data.UserActivityState USER_ACTIVITY_UNKNOWN;
+  }
+
+  public static final class UserActivityState.Companion {
+  }
+
+  public final class WarmUpConfig {
+    ctor public WarmUpConfig(androidx.health.services.client.data.ExerciseType exerciseType, java.util.Set<? extends androidx.health.services.client.data.DeltaDataType<?,?>> dataTypes);
+    method public java.util.Set<androidx.health.services.client.data.DeltaDataType<?,?>> getDataTypes();
+    method public androidx.health.services.client.data.ExerciseType getExerciseType();
+    property public final java.util.Set<androidx.health.services.client.data.DeltaDataType<?,?>> dataTypes;
+    property public final androidx.health.services.client.data.ExerciseType exerciseType;
+  }
+
+}
+
diff --git a/health/health-services-client/api/public_plus_experimental_1.0.0-beta02.txt b/health/health-services-client/api/public_plus_experimental_1.0.0-beta02.txt
new file mode 100644
index 0000000..e37c668
--- /dev/null
+++ b/health/health-services-client/api/public_plus_experimental_1.0.0-beta02.txt
@@ -0,0 +1,824 @@
+// Signature format: 4.0
+package androidx.health.services.client {
+
+  public interface ExerciseClient {
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> addGoalToActiveExerciseAsync(androidx.health.services.client.data.ExerciseGoal<?> exerciseGoal);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> clearUpdateCallbackAsync(androidx.health.services.client.ExerciseUpdateCallback callback);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> endExerciseAsync();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> flushAsync();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.health.services.client.data.ExerciseCapabilities> getCapabilitiesAsync();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.health.services.client.data.ExerciseInfo> getCurrentExerciseInfoAsync();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> markLapAsync();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> overrideAutoPauseAndResumeForActiveExerciseAsync(boolean enabled);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> pauseExerciseAsync();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> prepareExerciseAsync(androidx.health.services.client.data.WarmUpConfig configuration);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> removeGoalFromActiveExerciseAsync(androidx.health.services.client.data.ExerciseGoal<?> exerciseGoal);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> resumeExerciseAsync();
+    method public void setUpdateCallback(androidx.health.services.client.ExerciseUpdateCallback callback);
+    method public void setUpdateCallback(java.util.concurrent.Executor executor, androidx.health.services.client.ExerciseUpdateCallback callback);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> startExerciseAsync(androidx.health.services.client.data.ExerciseConfig configuration);
+  }
+
+  public interface ExerciseUpdateCallback {
+    method public void onAvailabilityChanged(androidx.health.services.client.data.DataType<?,?> dataType, androidx.health.services.client.data.Availability availability);
+    method public void onExerciseUpdateReceived(androidx.health.services.client.data.ExerciseUpdate update);
+    method public void onLapSummaryReceived(androidx.health.services.client.data.ExerciseLapSummary lapSummary);
+    method public void onRegistered();
+    method public void onRegistrationFailed(Throwable throwable);
+  }
+
+  public final class HealthServices {
+    method public static androidx.health.services.client.HealthServicesClient getClient(android.content.Context context);
+    field public static final androidx.health.services.client.HealthServices INSTANCE;
+  }
+
+  public interface HealthServicesClient {
+    method public androidx.health.services.client.ExerciseClient getExerciseClient();
+    method public androidx.health.services.client.MeasureClient getMeasureClient();
+    method public androidx.health.services.client.PassiveMonitoringClient getPassiveMonitoringClient();
+    property public abstract androidx.health.services.client.ExerciseClient exerciseClient;
+    property public abstract androidx.health.services.client.MeasureClient measureClient;
+    property public abstract androidx.health.services.client.PassiveMonitoringClient passiveMonitoringClient;
+  }
+
+  public interface MeasureCallback {
+    method public void onAvailabilityChanged(androidx.health.services.client.data.DeltaDataType<?,?> dataType, androidx.health.services.client.data.Availability availability);
+    method public void onDataReceived(androidx.health.services.client.data.DataPointContainer data);
+    method public default void onRegistered();
+    method public default void onRegistrationFailed(Throwable throwable);
+  }
+
+  public interface MeasureClient {
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.health.services.client.data.MeasureCapabilities> getCapabilitiesAsync();
+    method public void registerMeasureCallback(androidx.health.services.client.data.DeltaDataType<?,?> dataType, androidx.health.services.client.MeasureCallback callback);
+    method public void registerMeasureCallback(androidx.health.services.client.data.DeltaDataType<?,?> dataType, java.util.concurrent.Executor executor, androidx.health.services.client.MeasureCallback callback);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> unregisterMeasureCallbackAsync(androidx.health.services.client.data.DeltaDataType<?,?> dataType, androidx.health.services.client.MeasureCallback callback);
+  }
+
+  public interface PassiveListenerCallback {
+    method public default void onGoalCompleted(androidx.health.services.client.data.PassiveGoal goal);
+    method public default void onHealthEventReceived(androidx.health.services.client.data.HealthEvent event);
+    method public default void onNewDataPointsReceived(androidx.health.services.client.data.DataPointContainer dataPoints);
+    method public default void onPermissionLost();
+    method public default void onRegistered();
+    method public default void onRegistrationFailed(Throwable throwable);
+    method public default void onUserActivityInfoReceived(androidx.health.services.client.data.UserActivityInfo info);
+  }
+
+  public abstract class PassiveListenerService extends android.app.Service {
+    ctor public PassiveListenerService();
+    method public final android.os.IBinder? onBind(android.content.Intent intent);
+    method public void onGoalCompleted(androidx.health.services.client.data.PassiveGoal goal);
+    method public void onHealthEventReceived(androidx.health.services.client.data.HealthEvent event);
+    method public void onNewDataPointsReceived(androidx.health.services.client.data.DataPointContainer dataPoints);
+    method public void onPermissionLost();
+    method public void onUserActivityInfoReceived(androidx.health.services.client.data.UserActivityInfo info);
+  }
+
+  public interface PassiveMonitoringClient {
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> clearPassiveListenerCallbackAsync();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> clearPassiveListenerServiceAsync();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> flushAsync();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.health.services.client.data.PassiveMonitoringCapabilities> getCapabilitiesAsync();
+    method public void setPassiveListenerCallback(androidx.health.services.client.data.PassiveListenerConfig config, androidx.health.services.client.PassiveListenerCallback callback);
+    method public void setPassiveListenerCallback(androidx.health.services.client.data.PassiveListenerConfig config, java.util.concurrent.Executor executor, androidx.health.services.client.PassiveListenerCallback callback);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> setPassiveListenerServiceAsync(Class<? extends androidx.health.services.client.PassiveListenerService> service, androidx.health.services.client.data.PassiveListenerConfig config);
+  }
+
+}
+
+package androidx.health.services.client.data {
+
+  public final class AggregateDataType<T extends java.lang.Number, D extends androidx.health.services.client.data.DataPoint<T>> extends androidx.health.services.client.data.DataType<T,D> {
+    ctor public AggregateDataType(String name, androidx.health.services.client.data.DataType.TimeType timeType, Class<T> valueClass);
+  }
+
+  public interface Availability {
+    method public int getId();
+    property public abstract int id;
+    field public static final androidx.health.services.client.data.Availability.Companion Companion;
+  }
+
+  public static final class Availability.Companion {
+  }
+
+  public final class ComparisonType {
+    method public int getId();
+    method public String getName();
+    property public final int id;
+    property public final String name;
+    field public static final androidx.health.services.client.data.ComparisonType.Companion Companion;
+    field public static final androidx.health.services.client.data.ComparisonType GREATER_THAN;
+    field public static final androidx.health.services.client.data.ComparisonType GREATER_THAN_OR_EQUAL;
+    field public static final androidx.health.services.client.data.ComparisonType LESS_THAN;
+    field public static final androidx.health.services.client.data.ComparisonType LESS_THAN_OR_EQUAL;
+    field public static final androidx.health.services.client.data.ComparisonType UNKNOWN;
+  }
+
+  public static final class ComparisonType.Companion {
+  }
+
+  public final class CumulativeDataPoint<T extends java.lang.Number> extends androidx.health.services.client.data.DataPoint<T> {
+    ctor public CumulativeDataPoint(androidx.health.services.client.data.AggregateDataType<T,androidx.health.services.client.data.CumulativeDataPoint<T>> dataType, T total, java.time.Instant start, java.time.Instant end);
+    method public java.time.Instant getEnd();
+    method public java.time.Instant getStart();
+    method public T getTotal();
+    property public final java.time.Instant end;
+    property public final java.time.Instant start;
+    property public final T total;
+  }
+
+  public abstract class DataPoint<T> {
+    method public androidx.health.services.client.data.DataType<T,? extends androidx.health.services.client.data.DataPoint<T>> getDataType();
+    property public androidx.health.services.client.data.DataType<T,? extends androidx.health.services.client.data.DataPoint<T>> dataType;
+  }
+
+  public abstract class DataPointAccuracy {
+    ctor public DataPointAccuracy();
+  }
+
+  public final class DataPointContainer {
+    ctor public DataPointContainer(java.util.Map<androidx.health.services.client.data.DataType<?,?>,? extends java.util.List<? extends androidx.health.services.client.data.DataPoint<?>>> dataPoints);
+    ctor public DataPointContainer(java.util.List<? extends androidx.health.services.client.data.DataPoint<?>> dataPointList);
+    method public java.util.List<androidx.health.services.client.data.CumulativeDataPoint<?>> getCumulativeDataPoints();
+    method public <T, D extends androidx.health.services.client.data.DataPoint<T>> java.util.List<D> getData(androidx.health.services.client.data.DeltaDataType<T,D> type);
+    method public <T extends java.lang.Number, D extends androidx.health.services.client.data.DataPoint<T>> D? getData(androidx.health.services.client.data.AggregateDataType<T,D> type);
+    method public java.util.Set<androidx.health.services.client.data.DataType<?,?>> getDataTypes();
+    method public java.util.List<androidx.health.services.client.data.IntervalDataPoint<?>> getIntervalDataPoints();
+    method public java.util.List<androidx.health.services.client.data.SampleDataPoint<?>> getSampleDataPoints();
+    method public java.util.List<androidx.health.services.client.data.StatisticalDataPoint<?>> getStatisticalDataPoints();
+    property public final java.util.List<androidx.health.services.client.data.CumulativeDataPoint<?>> cumulativeDataPoints;
+    property public final java.util.Set<androidx.health.services.client.data.DataType<?,?>> dataTypes;
+    property public final java.util.List<androidx.health.services.client.data.IntervalDataPoint<?>> intervalDataPoints;
+    property public final java.util.List<androidx.health.services.client.data.SampleDataPoint<?>> sampleDataPoints;
+    property public final java.util.List<androidx.health.services.client.data.StatisticalDataPoint<?>> statisticalDataPoints;
+  }
+
+  public abstract class DataType<T, D extends androidx.health.services.client.data.DataPoint<T>> {
+    ctor public DataType(String name, androidx.health.services.client.data.DataType.TimeType timeType, Class<T> valueClass, boolean isAggregate);
+    method public final String getName();
+    method public final Class<T> getValueClass();
+    property public final String name;
+    property public final Class<T> valueClass;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Double,androidx.health.services.client.data.SampleDataPoint<java.lang.Double>> ABSOLUTE_ELEVATION;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Double,androidx.health.services.client.data.StatisticalDataPoint<java.lang.Double>> ABSOLUTE_ELEVATION_STATS;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Long,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Long>> ACTIVE_EXERCISE_DURATION_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Double,androidx.health.services.client.data.IntervalDataPoint<java.lang.Double>> CALORIES;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Double,androidx.health.services.client.data.IntervalDataPoint<java.lang.Double>> CALORIES_DAILY;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Double,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Double>> CALORIES_TOTAL;
+    field public static final androidx.health.services.client.data.DataType.Companion Companion;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Double,androidx.health.services.client.data.IntervalDataPoint<java.lang.Double>> DECLINE_DISTANCE;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Double,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Double>> DECLINE_DISTANCE_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Long,androidx.health.services.client.data.IntervalDataPoint<java.lang.Long>> DECLINE_DURATION;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Long,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Long>> DECLINE_DURATION_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Double,androidx.health.services.client.data.IntervalDataPoint<java.lang.Double>> DISTANCE;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Double,androidx.health.services.client.data.IntervalDataPoint<java.lang.Double>> DISTANCE_DAILY;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Double,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Double>> DISTANCE_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Double,androidx.health.services.client.data.IntervalDataPoint<java.lang.Double>> ELEVATION_GAIN;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Double,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Double>> ELEVATION_GAIN_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Double,androidx.health.services.client.data.IntervalDataPoint<java.lang.Double>> ELEVATION_LOSS;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Double,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Double>> ELEVATION_LOSS_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Double,androidx.health.services.client.data.IntervalDataPoint<java.lang.Double>> FLAT_GROUND_DISTANCE;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Double,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Double>> FLAT_GROUND_DISTANCE_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Long,androidx.health.services.client.data.IntervalDataPoint<java.lang.Long>> FLAT_GROUND_DURATION;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Long,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Long>> FLAT_GROUND_DURATION_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Double,androidx.health.services.client.data.IntervalDataPoint<java.lang.Double>> FLOORS;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Double,androidx.health.services.client.data.IntervalDataPoint<java.lang.Double>> FLOORS_DAILY;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Double,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Double>> FLOORS_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Long,androidx.health.services.client.data.IntervalDataPoint<java.lang.Long>> GOLF_SHOT_COUNT;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Long,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Long>> GOLF_SHOT_COUNT_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Double,androidx.health.services.client.data.SampleDataPoint<java.lang.Double>> HEART_RATE_BPM;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Double,androidx.health.services.client.data.StatisticalDataPoint<java.lang.Double>> HEART_RATE_BPM_STATS;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Double,androidx.health.services.client.data.IntervalDataPoint<java.lang.Double>> INCLINE_DISTANCE;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Double,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Double>> INCLINE_DISTANCE_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Long,androidx.health.services.client.data.IntervalDataPoint<java.lang.Long>> INCLINE_DURATION;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Long,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Long>> INCLINE_DURATION_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<androidx.health.services.client.data.LocationData,androidx.health.services.client.data.SampleDataPoint<androidx.health.services.client.data.LocationData>> LOCATION;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Double,androidx.health.services.client.data.SampleDataPoint<java.lang.Double>> PACE;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Double,androidx.health.services.client.data.StatisticalDataPoint<java.lang.Double>> PACE_STATS;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Long,androidx.health.services.client.data.IntervalDataPoint<java.lang.Long>> REP_COUNT;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Long,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Long>> REP_COUNT_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Long,androidx.health.services.client.data.IntervalDataPoint<java.lang.Long>> RESTING_EXERCISE_DURATION;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Long,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Long>> RESTING_EXERCISE_DURATION_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Long,androidx.health.services.client.data.IntervalDataPoint<java.lang.Long>> RUNNING_STEPS;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Long,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Long>> RUNNING_STEPS_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Double,androidx.health.services.client.data.SampleDataPoint<java.lang.Double>> SPEED;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Double,androidx.health.services.client.data.StatisticalDataPoint<java.lang.Double>> SPEED_STATS;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Long,androidx.health.services.client.data.IntervalDataPoint<java.lang.Long>> STEPS;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Long,androidx.health.services.client.data.IntervalDataPoint<java.lang.Long>> STEPS_DAILY;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Long,androidx.health.services.client.data.SampleDataPoint<java.lang.Long>> STEPS_PER_MINUTE;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Long,androidx.health.services.client.data.StatisticalDataPoint<java.lang.Long>> STEPS_PER_MINUTE_STATS;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Long,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Long>> STEPS_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Long,androidx.health.services.client.data.IntervalDataPoint<java.lang.Long>> SWIMMING_LAP_COUNT;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Long,androidx.health.services.client.data.IntervalDataPoint<java.lang.Long>> SWIMMING_STROKES;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Long,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Long>> SWIMMING_STROKES_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Double,androidx.health.services.client.data.SampleDataPoint<java.lang.Double>> VO2_MAX;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Double,androidx.health.services.client.data.StatisticalDataPoint<java.lang.Double>> VO2_MAX_STATS;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Long,androidx.health.services.client.data.IntervalDataPoint<java.lang.Long>> WALKING_STEPS;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Long,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Long>> WALKING_STEPS_TOTAL;
+  }
+
+  public static final class DataType.Companion {
+  }
+
+  public static final class DataType.TimeType {
+    method public int getId();
+    method public String getName();
+    property public final int id;
+    property public final String name;
+    field public static final androidx.health.services.client.data.DataType.TimeType.Companion Companion;
+    field public static final androidx.health.services.client.data.DataType.TimeType INTERVAL;
+    field public static final androidx.health.services.client.data.DataType.TimeType SAMPLE;
+    field public static final androidx.health.services.client.data.DataType.TimeType UNKNOWN;
+  }
+
+  public static final class DataType.TimeType.Companion {
+  }
+
+  public final class DataTypeAvailability implements androidx.health.services.client.data.Availability {
+    method public static androidx.health.services.client.data.DataTypeAvailability? fromId(int id);
+    method public int getId();
+    method public String getName();
+    property public int id;
+    property public final String name;
+    field public static final androidx.health.services.client.data.DataTypeAvailability ACQUIRING;
+    field public static final androidx.health.services.client.data.DataTypeAvailability AVAILABLE;
+    field public static final androidx.health.services.client.data.DataTypeAvailability.Companion Companion;
+    field public static final androidx.health.services.client.data.DataTypeAvailability UNAVAILABLE;
+    field public static final androidx.health.services.client.data.DataTypeAvailability UNAVAILABLE_DEVICE_OFF_BODY;
+    field public static final androidx.health.services.client.data.DataTypeAvailability UNKNOWN;
+  }
+
+  public static final class DataTypeAvailability.Companion {
+    method public androidx.health.services.client.data.DataTypeAvailability? fromId(int id);
+  }
+
+  public final class DataTypeCondition<T extends java.lang.Number, D extends androidx.health.services.client.data.DataType<T, ? extends androidx.health.services.client.data.DataPoint<T>>> {
+    ctor public DataTypeCondition(D dataType, T threshold, androidx.health.services.client.data.ComparisonType comparisonType);
+    method public androidx.health.services.client.data.ComparisonType getComparisonType();
+    method public D getDataType();
+    method public T getThreshold();
+    property public final androidx.health.services.client.data.ComparisonType comparisonType;
+    property public final D dataType;
+    property public final T threshold;
+  }
+
+  public final class DeltaDataType<T, D extends androidx.health.services.client.data.DataPoint<T>> extends androidx.health.services.client.data.DataType<T,D> {
+    ctor public DeltaDataType(String name, androidx.health.services.client.data.DataType.TimeType timeType, Class<T> valueClass);
+  }
+
+  public final class ExerciseCapabilities {
+    ctor public ExerciseCapabilities(java.util.Map<androidx.health.services.client.data.ExerciseType,androidx.health.services.client.data.ExerciseTypeCapabilities> typeToCapabilities);
+    method public java.util.Set<androidx.health.services.client.data.ExerciseType> getAutoPauseAndResumeEnabledExercises();
+    method public androidx.health.services.client.data.ExerciseTypeCapabilities getExerciseTypeCapabilities(androidx.health.services.client.data.ExerciseType exercise);
+    method public java.util.Set<androidx.health.services.client.data.ExerciseType> getSupportedExerciseTypes();
+    method public java.util.Map<androidx.health.services.client.data.ExerciseType,androidx.health.services.client.data.ExerciseTypeCapabilities> getTypeToCapabilities();
+    property public final java.util.Set<androidx.health.services.client.data.ExerciseType> autoPauseAndResumeEnabledExercises;
+    property public final java.util.Set<androidx.health.services.client.data.ExerciseType> supportedExerciseTypes;
+    property public final java.util.Map<androidx.health.services.client.data.ExerciseType,androidx.health.services.client.data.ExerciseTypeCapabilities> typeToCapabilities;
+  }
+
+  public final class ExerciseConfig {
+    ctor public ExerciseConfig(androidx.health.services.client.data.ExerciseType exerciseType, java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> dataTypes, boolean isAutoPauseAndResumeEnabled, boolean isGpsEnabled, optional java.util.List<? extends androidx.health.services.client.data.ExerciseGoal<?>> exerciseGoals, optional android.os.Bundle exerciseParams, optional @FloatRange(from=0.0) float swimmingPoolLengthMeters);
+    method public static androidx.health.services.client.data.ExerciseConfig.Builder builder(androidx.health.services.client.data.ExerciseType exerciseType);
+    method public java.util.Set<androidx.health.services.client.data.DataType<?,?>> getDataTypes();
+    method public java.util.List<androidx.health.services.client.data.ExerciseGoal<?>> getExerciseGoals();
+    method public android.os.Bundle getExerciseParams();
+    method public androidx.health.services.client.data.ExerciseType getExerciseType();
+    method public float getSwimmingPoolLengthMeters();
+    method public boolean isAutoPauseAndResumeEnabled();
+    method public boolean isGpsEnabled();
+    property public final java.util.Set<androidx.health.services.client.data.DataType<?,?>> dataTypes;
+    property public final java.util.List<androidx.health.services.client.data.ExerciseGoal<?>> exerciseGoals;
+    property public final android.os.Bundle exerciseParams;
+    property public final androidx.health.services.client.data.ExerciseType exerciseType;
+    property public final boolean isAutoPauseAndResumeEnabled;
+    property public final boolean isGpsEnabled;
+    property public final float swimmingPoolLengthMeters;
+    field public static final androidx.health.services.client.data.ExerciseConfig.Companion Companion;
+    field public static final float SWIMMING_POOL_LENGTH_UNSPECIFIED = 0.0f;
+  }
+
+  public static final class ExerciseConfig.Builder {
+    ctor public ExerciseConfig.Builder(androidx.health.services.client.data.ExerciseType exerciseType);
+    method public androidx.health.services.client.data.ExerciseConfig build();
+    method public androidx.health.services.client.data.ExerciseConfig.Builder setDataTypes(java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> dataTypes);
+    method public androidx.health.services.client.data.ExerciseConfig.Builder setExerciseGoals(java.util.List<? extends androidx.health.services.client.data.ExerciseGoal<?>> exerciseGoals);
+    method public androidx.health.services.client.data.ExerciseConfig.Builder setExerciseParams(android.os.Bundle exerciseParams);
+    method public androidx.health.services.client.data.ExerciseConfig.Builder setIsAutoPauseAndResumeEnabled(boolean isAutoPauseAndResumeEnabled);
+    method public androidx.health.services.client.data.ExerciseConfig.Builder setIsGpsEnabled(boolean isGpsEnabled);
+    method public androidx.health.services.client.data.ExerciseConfig.Builder setSwimmingPoolLengthMeters(float swimmingPoolLength);
+  }
+
+  public static final class ExerciseConfig.Companion {
+    method public androidx.health.services.client.data.ExerciseConfig.Builder builder(androidx.health.services.client.data.ExerciseType exerciseType);
+  }
+
+  public final class ExerciseGoal<T extends java.lang.Number> implements android.os.Parcelable {
+    method public static <T extends java.lang.Number> androidx.health.services.client.data.ExerciseGoal<T> createMilestone(androidx.health.services.client.data.DataTypeCondition<T,androidx.health.services.client.data.AggregateDataType<T,?>> condition, T period);
+    method public static <T extends java.lang.Number> androidx.health.services.client.data.ExerciseGoal<T> createMilestoneGoalWithUpdatedThreshold(androidx.health.services.client.data.ExerciseGoal<T> goal, T newThreshold);
+    method public static <T extends java.lang.Number> androidx.health.services.client.data.ExerciseGoal<T> createOneTimeGoal(androidx.health.services.client.data.DataTypeCondition<T,androidx.health.services.client.data.AggregateDataType<T,?>> condition);
+    method public int describeContents();
+    method public androidx.health.services.client.data.DataTypeCondition<T,androidx.health.services.client.data.AggregateDataType<T,?>> getDataTypeCondition();
+    method public androidx.health.services.client.data.ExerciseGoalType getExerciseGoalType();
+    method public T? getPeriod();
+    method public void writeToParcel(android.os.Parcel dest, int flags);
+    property public final androidx.health.services.client.data.DataTypeCondition<T,androidx.health.services.client.data.AggregateDataType<T,?>> dataTypeCondition;
+    property public final androidx.health.services.client.data.ExerciseGoalType exerciseGoalType;
+    property public final T? period;
+    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.ExerciseGoal<?>> CREATOR;
+    field public static final androidx.health.services.client.data.ExerciseGoal.Companion Companion;
+  }
+
+  public static final class ExerciseGoal.Companion {
+    method public <T extends java.lang.Number> androidx.health.services.client.data.ExerciseGoal<T> createMilestone(androidx.health.services.client.data.DataTypeCondition<T,androidx.health.services.client.data.AggregateDataType<T,?>> condition, T period);
+    method public <T extends java.lang.Number> androidx.health.services.client.data.ExerciseGoal<T> createMilestoneGoalWithUpdatedThreshold(androidx.health.services.client.data.ExerciseGoal<T> goal, T newThreshold);
+    method public <T extends java.lang.Number> androidx.health.services.client.data.ExerciseGoal<T> createOneTimeGoal(androidx.health.services.client.data.DataTypeCondition<T,androidx.health.services.client.data.AggregateDataType<T,?>> condition);
+  }
+
+  public final class ExerciseGoalType {
+    method public static androidx.health.services.client.data.ExerciseGoalType? fromId(int id);
+    method public int getId();
+    method public String getName();
+    property public final int id;
+    property public final String name;
+    field public static final androidx.health.services.client.data.ExerciseGoalType.Companion Companion;
+    field public static final androidx.health.services.client.data.ExerciseGoalType MILESTONE;
+    field public static final androidx.health.services.client.data.ExerciseGoalType ONE_TIME_GOAL;
+  }
+
+  public static final class ExerciseGoalType.Companion {
+    method public androidx.health.services.client.data.ExerciseGoalType? fromId(int id);
+  }
+
+  public final class ExerciseInfo {
+    ctor public ExerciseInfo(int exerciseTrackedStatus, androidx.health.services.client.data.ExerciseType exerciseType);
+    method public int getExerciseTrackedStatus();
+    method public androidx.health.services.client.data.ExerciseType getExerciseType();
+    property public final int exerciseTrackedStatus;
+    property public final androidx.health.services.client.data.ExerciseType exerciseType;
+  }
+
+  public final class ExerciseLapSummary {
+    ctor public ExerciseLapSummary(int lapCount, java.time.Instant startTime, java.time.Instant endTime, java.time.Duration activeDuration, androidx.health.services.client.data.DataPointContainer lapMetrics);
+    method public java.time.Duration getActiveDuration();
+    method public java.time.Instant getEndTime();
+    method public int getLapCount();
+    method public androidx.health.services.client.data.DataPointContainer getLapMetrics();
+    method public java.time.Instant getStartTime();
+    property public final java.time.Duration activeDuration;
+    property public final java.time.Instant endTime;
+    property public final int lapCount;
+    property public final androidx.health.services.client.data.DataPointContainer lapMetrics;
+    property public final java.time.Instant startTime;
+  }
+
+  public final class ExerciseState {
+    method public static androidx.health.services.client.data.ExerciseState? fromId(int id);
+    method public int getId();
+    method public String getName();
+    method public boolean isEnded();
+    method public boolean isEnding();
+    method public boolean isPaused();
+    method public boolean isResuming();
+    property public final int id;
+    property public final boolean isEnded;
+    property public final boolean isEnding;
+    property public final boolean isPaused;
+    property public final boolean isResuming;
+    property public final String name;
+    field public static final androidx.health.services.client.data.ExerciseState ACTIVE;
+    field public static final androidx.health.services.client.data.ExerciseState AUTO_PAUSED;
+    field public static final androidx.health.services.client.data.ExerciseState AUTO_PAUSING;
+    field public static final androidx.health.services.client.data.ExerciseState AUTO_RESUMING;
+    field public static final androidx.health.services.client.data.ExerciseState.Companion Companion;
+    field public static final androidx.health.services.client.data.ExerciseState ENDED;
+    field public static final androidx.health.services.client.data.ExerciseState ENDING;
+    field public static final androidx.health.services.client.data.ExerciseState PREPARING;
+    field public static final androidx.health.services.client.data.ExerciseState USER_PAUSED;
+    field public static final androidx.health.services.client.data.ExerciseState USER_PAUSING;
+    field public static final androidx.health.services.client.data.ExerciseState USER_RESUMING;
+    field public static final androidx.health.services.client.data.ExerciseState USER_STARTING;
+  }
+
+  public static final class ExerciseState.Companion {
+    method public androidx.health.services.client.data.ExerciseState? fromId(int id);
+  }
+
+  public final class ExerciseStateInfo {
+    ctor public ExerciseStateInfo(androidx.health.services.client.data.ExerciseState exerciseState, int exerciseEndReason);
+    method public int getEndReason();
+    method public androidx.health.services.client.data.ExerciseState getState();
+    property public final int endReason;
+    property public final androidx.health.services.client.data.ExerciseState state;
+    field public static final androidx.health.services.client.data.ExerciseStateInfo.Companion Companion;
+  }
+
+  public static final class ExerciseStateInfo.Companion {
+  }
+
+  public final class ExerciseType {
+    method public static androidx.health.services.client.data.ExerciseType fromId(int id);
+    method public int getId();
+    method public String getName();
+    property public final int id;
+    property public final String name;
+    field public static final androidx.health.services.client.data.ExerciseType ALPINE_SKIING;
+    field public static final androidx.health.services.client.data.ExerciseType BACKPACKING;
+    field public static final androidx.health.services.client.data.ExerciseType BACK_EXTENSION;
+    field public static final androidx.health.services.client.data.ExerciseType BADMINTON;
+    field public static final androidx.health.services.client.data.ExerciseType BARBELL_SHOULDER_PRESS;
+    field public static final androidx.health.services.client.data.ExerciseType BASEBALL;
+    field public static final androidx.health.services.client.data.ExerciseType BASKETBALL;
+    field public static final androidx.health.services.client.data.ExerciseType BENCH_PRESS;
+    field public static final androidx.health.services.client.data.ExerciseType BIKING;
+    field public static final androidx.health.services.client.data.ExerciseType BIKING_STATIONARY;
+    field public static final androidx.health.services.client.data.ExerciseType BOOT_CAMP;
+    field public static final androidx.health.services.client.data.ExerciseType BOXING;
+    field public static final androidx.health.services.client.data.ExerciseType BURPEE;
+    field public static final androidx.health.services.client.data.ExerciseType CALISTHENICS;
+    field public static final androidx.health.services.client.data.ExerciseType CRICKET;
+    field public static final androidx.health.services.client.data.ExerciseType CROSS_COUNTRY_SKIING;
+    field public static final androidx.health.services.client.data.ExerciseType CRUNCH;
+    field public static final androidx.health.services.client.data.ExerciseType.Companion Companion;
+    field public static final androidx.health.services.client.data.ExerciseType DANCING;
+    field public static final androidx.health.services.client.data.ExerciseType DEADLIFT;
+    field public static final androidx.health.services.client.data.ExerciseType ELLIPTICAL;
+    field public static final androidx.health.services.client.data.ExerciseType EXERCISE_CLASS;
+    field public static final androidx.health.services.client.data.ExerciseType FENCING;
+    field public static final androidx.health.services.client.data.ExerciseType FOOTBALL_AMERICAN;
+    field public static final androidx.health.services.client.data.ExerciseType FOOTBALL_AUSTRALIAN;
+    field public static final androidx.health.services.client.data.ExerciseType FORWARD_TWIST;
+    field public static final androidx.health.services.client.data.ExerciseType FRISBEE_DISC;
+    field public static final androidx.health.services.client.data.ExerciseType GOLF;
+    field public static final androidx.health.services.client.data.ExerciseType GUIDED_BREATHING;
+    field public static final androidx.health.services.client.data.ExerciseType GYMNASTICS;
+    field public static final androidx.health.services.client.data.ExerciseType HANDBALL;
+    field public static final androidx.health.services.client.data.ExerciseType HIGH_INTENSITY_INTERVAL_TRAINING;
+    field public static final androidx.health.services.client.data.ExerciseType HIKING;
+    field public static final androidx.health.services.client.data.ExerciseType HORSE_RIDING;
+    field public static final androidx.health.services.client.data.ExerciseType ICE_HOCKEY;
+    field public static final androidx.health.services.client.data.ExerciseType ICE_SKATING;
+    field public static final androidx.health.services.client.data.ExerciseType INLINE_SKATING;
+    field public static final androidx.health.services.client.data.ExerciseType JUMPING_JACK;
+    field public static final androidx.health.services.client.data.ExerciseType JUMP_ROPE;
+    field public static final androidx.health.services.client.data.ExerciseType LAT_PULL_DOWN;
+    field public static final androidx.health.services.client.data.ExerciseType LUNGE;
+    field public static final androidx.health.services.client.data.ExerciseType MARTIAL_ARTS;
+    field public static final androidx.health.services.client.data.ExerciseType MEDITATION;
+    field public static final androidx.health.services.client.data.ExerciseType MOUNTAIN_BIKING;
+    field public static final androidx.health.services.client.data.ExerciseType ORIENTEERING;
+    field public static final androidx.health.services.client.data.ExerciseType PADDLING;
+    field public static final androidx.health.services.client.data.ExerciseType PARA_GLIDING;
+    field public static final androidx.health.services.client.data.ExerciseType PILATES;
+    field public static final androidx.health.services.client.data.ExerciseType PLANK;
+    field public static final androidx.health.services.client.data.ExerciseType RACQUETBALL;
+    field public static final androidx.health.services.client.data.ExerciseType ROCK_CLIMBING;
+    field public static final androidx.health.services.client.data.ExerciseType ROLLER_HOCKEY;
+    field public static final androidx.health.services.client.data.ExerciseType ROLLER_SKATING;
+    field public static final androidx.health.services.client.data.ExerciseType ROWING;
+    field public static final androidx.health.services.client.data.ExerciseType ROWING_MACHINE;
+    field public static final androidx.health.services.client.data.ExerciseType RUGBY;
+    field public static final androidx.health.services.client.data.ExerciseType RUNNING;
+    field public static final androidx.health.services.client.data.ExerciseType RUNNING_TREADMILL;
+    field public static final androidx.health.services.client.data.ExerciseType SAILING;
+    field public static final androidx.health.services.client.data.ExerciseType SCUBA_DIVING;
+    field public static final androidx.health.services.client.data.ExerciseType SKATING;
+    field public static final androidx.health.services.client.data.ExerciseType SKIING;
+    field public static final androidx.health.services.client.data.ExerciseType SNOWBOARDING;
+    field public static final androidx.health.services.client.data.ExerciseType SNOWSHOEING;
+    field public static final androidx.health.services.client.data.ExerciseType SOCCER;
+    field public static final androidx.health.services.client.data.ExerciseType SOFTBALL;
+    field public static final androidx.health.services.client.data.ExerciseType SQUASH;
+    field public static final androidx.health.services.client.data.ExerciseType SQUAT;
+    field public static final androidx.health.services.client.data.ExerciseType STAIR_CLIMBING;
+    field public static final androidx.health.services.client.data.ExerciseType STAIR_CLIMBING_MACHINE;
+    field public static final androidx.health.services.client.data.ExerciseType STRENGTH_TRAINING;
+    field public static final androidx.health.services.client.data.ExerciseType STRETCHING;
+    field public static final androidx.health.services.client.data.ExerciseType SURFING;
+    field public static final androidx.health.services.client.data.ExerciseType SWIMMING_OPEN_WATER;
+    field public static final androidx.health.services.client.data.ExerciseType SWIMMING_POOL;
+    field public static final androidx.health.services.client.data.ExerciseType TABLE_TENNIS;
+    field public static final androidx.health.services.client.data.ExerciseType TENNIS;
+    field public static final androidx.health.services.client.data.ExerciseType UNKNOWN;
+    field public static final androidx.health.services.client.data.ExerciseType UPPER_TWIST;
+    field public static final androidx.health.services.client.data.ExerciseType VOLLEYBALL;
+    field public static final androidx.health.services.client.data.ExerciseType WALKING;
+    field public static final androidx.health.services.client.data.ExerciseType WATER_POLO;
+    field public static final androidx.health.services.client.data.ExerciseType WEIGHTLIFTING;
+    field public static final androidx.health.services.client.data.ExerciseType WORKOUT;
+    field public static final androidx.health.services.client.data.ExerciseType YACHTING;
+    field public static final androidx.health.services.client.data.ExerciseType YOGA;
+  }
+
+  public static final class ExerciseType.Companion {
+    method public androidx.health.services.client.data.ExerciseType fromId(int id);
+  }
+
+  public final class ExerciseTypeCapabilities {
+    ctor public ExerciseTypeCapabilities(java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> supportedDataTypes, java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,? extends java.util.Set<androidx.health.services.client.data.ComparisonType>> supportedGoals, java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,? extends java.util.Set<androidx.health.services.client.data.ComparisonType>> supportedMilestones, boolean supportsAutoPauseAndResume);
+    method public java.util.Set<androidx.health.services.client.data.DataType<?,?>> getSupportedDataTypes();
+    method public java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,java.util.Set<androidx.health.services.client.data.ComparisonType>> getSupportedGoals();
+    method public java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,java.util.Set<androidx.health.services.client.data.ComparisonType>> getSupportedMilestones();
+    method public boolean getSupportsAutoPauseAndResume();
+    property public final java.util.Set<androidx.health.services.client.data.DataType<?,?>> supportedDataTypes;
+    property public final java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,java.util.Set<androidx.health.services.client.data.ComparisonType>> supportedGoals;
+    property public final java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,java.util.Set<androidx.health.services.client.data.ComparisonType>> supportedMilestones;
+    property public final boolean supportsAutoPauseAndResume;
+  }
+
+  public final class ExerciseUpdate {
+    method public java.time.Duration getActiveDurationAtDataPoint(androidx.health.services.client.data.IntervalDataPoint<?> dataPoint);
+    method public java.time.Duration getActiveDurationAtDataPoint(androidx.health.services.client.data.SampleDataPoint<?> dataPoint);
+    method public androidx.health.services.client.data.ExerciseUpdate.ActiveDurationCheckpoint? getActiveDurationCheckpoint();
+    method public androidx.health.services.client.data.ExerciseConfig? getExerciseConfig();
+    method public androidx.health.services.client.data.ExerciseStateInfo getExerciseStateInfo();
+    method public java.util.Set<androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number>> getLatestAchievedGoals();
+    method public androidx.health.services.client.data.DataPointContainer getLatestMetrics();
+    method public java.util.Set<androidx.health.services.client.data.MilestoneMarkerSummary> getLatestMilestoneMarkerSummaries();
+    method public java.time.Instant? getStartTime();
+    method public java.time.Duration getUpdateDurationFromBoot();
+    property public final androidx.health.services.client.data.ExerciseUpdate.ActiveDurationCheckpoint? activeDurationCheckpoint;
+    property public final androidx.health.services.client.data.ExerciseConfig? exerciseConfig;
+    property public final androidx.health.services.client.data.ExerciseStateInfo exerciseStateInfo;
+    property public final java.util.Set<androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number>> latestAchievedGoals;
+    property public final androidx.health.services.client.data.DataPointContainer latestMetrics;
+    property public final java.util.Set<androidx.health.services.client.data.MilestoneMarkerSummary> latestMilestoneMarkerSummaries;
+    property public final java.time.Instant? startTime;
+    field public static final androidx.health.services.client.data.ExerciseUpdate.Companion Companion;
+  }
+
+  public static final class ExerciseUpdate.ActiveDurationCheckpoint {
+    ctor public ExerciseUpdate.ActiveDurationCheckpoint(java.time.Instant time, java.time.Duration activeDuration);
+    method public java.time.Duration getActiveDuration();
+    method public java.time.Instant getTime();
+    property public final java.time.Duration activeDuration;
+    property public final java.time.Instant time;
+  }
+
+  public static final class ExerciseUpdate.Companion {
+  }
+
+  public final class HealthEvent {
+    ctor public HealthEvent(androidx.health.services.client.data.HealthEvent.Type type, java.time.Instant eventTime, androidx.health.services.client.data.DataPointContainer metrics);
+    method public java.time.Instant getEventTime();
+    method public androidx.health.services.client.data.DataPointContainer getMetrics();
+    method public androidx.health.services.client.data.HealthEvent.Type getType();
+    property public final java.time.Instant eventTime;
+    property public final androidx.health.services.client.data.DataPointContainer metrics;
+    property public final androidx.health.services.client.data.HealthEvent.Type type;
+  }
+
+  public static final class HealthEvent.Type {
+    method public int getId();
+    method public String getName();
+    property public final int id;
+    property public final String name;
+    field public static final androidx.health.services.client.data.HealthEvent.Type.Companion Companion;
+    field public static final androidx.health.services.client.data.HealthEvent.Type FALL_DETECTED;
+    field public static final androidx.health.services.client.data.HealthEvent.Type UNKNOWN;
+  }
+
+  public static final class HealthEvent.Type.Companion {
+  }
+
+  public final class HeartRateAccuracy extends androidx.health.services.client.data.DataPointAccuracy {
+    ctor public HeartRateAccuracy(androidx.health.services.client.data.HeartRateAccuracy.SensorStatus sensorStatus);
+    method public androidx.health.services.client.data.HeartRateAccuracy.SensorStatus getSensorStatus();
+    property public final androidx.health.services.client.data.HeartRateAccuracy.SensorStatus sensorStatus;
+  }
+
+  public static final class HeartRateAccuracy.SensorStatus {
+    method public int getId();
+    method public String getName();
+    property public final int id;
+    property public final String name;
+    field public static final androidx.health.services.client.data.HeartRateAccuracy.SensorStatus ACCURACY_HIGH;
+    field public static final androidx.health.services.client.data.HeartRateAccuracy.SensorStatus ACCURACY_LOW;
+    field public static final androidx.health.services.client.data.HeartRateAccuracy.SensorStatus ACCURACY_MEDIUM;
+    field public static final androidx.health.services.client.data.HeartRateAccuracy.SensorStatus.Companion Companion;
+    field public static final androidx.health.services.client.data.HeartRateAccuracy.SensorStatus NO_CONTACT;
+    field public static final androidx.health.services.client.data.HeartRateAccuracy.SensorStatus UNKNOWN;
+    field public static final androidx.health.services.client.data.HeartRateAccuracy.SensorStatus UNRELIABLE;
+  }
+
+  public static final class HeartRateAccuracy.SensorStatus.Companion {
+  }
+
+  public final class IntervalDataPoint<T> extends androidx.health.services.client.data.DataPoint<T> {
+    ctor public IntervalDataPoint(androidx.health.services.client.data.DataType<T,? extends androidx.health.services.client.data.IntervalDataPoint<T>> dataType, T value, java.time.Duration startDurationFromBoot, java.time.Duration endDurationFromBoot, optional android.os.Bundle metadata, optional androidx.health.services.client.data.DataPointAccuracy? accuracy);
+    method public androidx.health.services.client.data.DataPointAccuracy? getAccuracy();
+    method public androidx.health.services.client.data.DataType<T,? extends androidx.health.services.client.data.IntervalDataPoint<T>> getDataType();
+    method public java.time.Duration getEndDurationFromBoot();
+    method public java.time.Instant getEndInstant(java.time.Instant bootInstant);
+    method public android.os.Bundle getMetadata();
+    method public java.time.Duration getStartDurationFromBoot();
+    method public java.time.Instant getStartInstant(java.time.Instant bootInstant);
+    method public T getValue();
+    property public final androidx.health.services.client.data.DataPointAccuracy? accuracy;
+    property public androidx.health.services.client.data.DataType<T,? extends androidx.health.services.client.data.IntervalDataPoint<T>> dataType;
+    property public final java.time.Duration endDurationFromBoot;
+    property public final android.os.Bundle metadata;
+    property public final java.time.Duration startDurationFromBoot;
+    property public final T value;
+  }
+
+  public final class LocationAccuracy extends androidx.health.services.client.data.DataPointAccuracy {
+    ctor public LocationAccuracy(@FloatRange(from=0.0) double horizontalPositionErrorMeters, optional @FloatRange(from=0.0) double verticalPositionErrorMeters);
+    method public double getHorizontalPositionErrorMeters();
+    method public double getVerticalPositionErrorMeters();
+    property public final double horizontalPositionErrorMeters;
+    property public final double verticalPositionErrorMeters;
+    field public static final androidx.health.services.client.data.LocationAccuracy.Companion Companion;
+  }
+
+  public static final class LocationAccuracy.Companion {
+  }
+
+  public final class LocationAvailability implements androidx.health.services.client.data.Availability {
+    method public static androidx.health.services.client.data.LocationAvailability? fromId(int id);
+    method public int getId();
+    method public String getName();
+    property public int id;
+    property public final String name;
+    field public static final androidx.health.services.client.data.LocationAvailability ACQUIRED_TETHERED;
+    field public static final androidx.health.services.client.data.LocationAvailability ACQUIRED_UNTETHERED;
+    field public static final androidx.health.services.client.data.LocationAvailability ACQUIRING;
+    field public static final androidx.health.services.client.data.LocationAvailability.Companion Companion;
+    field public static final androidx.health.services.client.data.LocationAvailability NO_GNSS;
+    field public static final androidx.health.services.client.data.LocationAvailability UNAVAILABLE;
+    field public static final androidx.health.services.client.data.LocationAvailability UNKNOWN;
+  }
+
+  public static final class LocationAvailability.Companion {
+    method public androidx.health.services.client.data.LocationAvailability? fromId(int id);
+  }
+
+  public final class LocationData {
+    ctor public LocationData(@FloatRange(from=-90.0, to=90.0) double latitude, @FloatRange(from=-180.0, to=180.0) double longitude, optional double altitude, optional double bearing);
+    method public double getAltitude();
+    method public double getBearing();
+    method public double getLatitude();
+    method public double getLongitude();
+    property public final double altitude;
+    property public final double bearing;
+    property public final double latitude;
+    property public final double longitude;
+    field public static final double ALTITUDE_UNAVAILABLE = (0.0/0.0);
+    field public static final double BEARING_UNAVAILABLE = (0.0/0.0);
+  }
+
+  public final class MeasureCapabilities {
+    ctor public MeasureCapabilities(java.util.Set<? extends androidx.health.services.client.data.DeltaDataType<?,?>> supportedDataTypesMeasure);
+    method public java.util.Set<androidx.health.services.client.data.DeltaDataType<?,?>> getSupportedDataTypesMeasure();
+    property public final java.util.Set<androidx.health.services.client.data.DeltaDataType<?,?>> supportedDataTypesMeasure;
+  }
+
+  public final class MilestoneMarkerSummary {
+    ctor public MilestoneMarkerSummary(java.time.Instant startTime, java.time.Instant endTime, java.time.Duration activeDuration, androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number> achievedGoal, androidx.health.services.client.data.DataPointContainer summaryMetrics);
+    method public androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number> getAchievedGoal();
+    method public java.time.Duration getActiveDuration();
+    method public java.time.Instant getEndTime();
+    method public java.time.Instant getStartTime();
+    method public androidx.health.services.client.data.DataPointContainer getSummaryMetrics();
+    property public final androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number> achievedGoal;
+    property public final java.time.Duration activeDuration;
+    property public final java.time.Instant endTime;
+    property public final java.time.Instant startTime;
+    property public final androidx.health.services.client.data.DataPointContainer summaryMetrics;
+  }
+
+  public final class PassiveGoal {
+    ctor public PassiveGoal(androidx.health.services.client.data.DataTypeCondition<? extends java.lang.Number,? extends androidx.health.services.client.data.DeltaDataType<? extends java.lang.Number,?>> dataTypeCondition);
+    method public androidx.health.services.client.data.DataTypeCondition<? extends java.lang.Number,? extends androidx.health.services.client.data.DeltaDataType<? extends java.lang.Number,?>> getDataTypeCondition();
+    property public final androidx.health.services.client.data.DataTypeCondition<? extends java.lang.Number,? extends androidx.health.services.client.data.DeltaDataType<? extends java.lang.Number,?>> dataTypeCondition;
+  }
+
+  public final class PassiveListenerConfig {
+    ctor public PassiveListenerConfig(java.util.Set<? extends androidx.health.services.client.data.DataType<? extends java.lang.Object,? extends androidx.health.services.client.data.DataPoint<?>>> dataTypes, boolean shouldUserActivityInfoBeRequested, java.util.Set<androidx.health.services.client.data.PassiveGoal> dailyGoals, java.util.Set<androidx.health.services.client.data.HealthEvent.Type> healthEventTypes);
+    method public static androidx.health.services.client.data.PassiveListenerConfig.Builder builder();
+    method public java.util.Set<androidx.health.services.client.data.PassiveGoal> getDailyGoals();
+    method public java.util.Set<androidx.health.services.client.data.DataType<? extends java.lang.Object,? extends androidx.health.services.client.data.DataPoint<?>>> getDataTypes();
+    method public java.util.Set<androidx.health.services.client.data.HealthEvent.Type> getHealthEventTypes();
+    method public boolean getShouldUserActivityInfoBeRequested();
+    property public final java.util.Set<androidx.health.services.client.data.PassiveGoal> dailyGoals;
+    property public final java.util.Set<androidx.health.services.client.data.DataType<? extends java.lang.Object,? extends androidx.health.services.client.data.DataPoint<?>>> dataTypes;
+    property public final java.util.Set<androidx.health.services.client.data.HealthEvent.Type> healthEventTypes;
+    property public final boolean shouldUserActivityInfoBeRequested;
+    field public static final androidx.health.services.client.data.PassiveListenerConfig.Companion Companion;
+  }
+
+  public static final class PassiveListenerConfig.Builder {
+    ctor public PassiveListenerConfig.Builder();
+    method public androidx.health.services.client.data.PassiveListenerConfig build();
+    method public androidx.health.services.client.data.PassiveListenerConfig.Builder setDailyGoals(java.util.Set<androidx.health.services.client.data.PassiveGoal> dailyGoals);
+    method public androidx.health.services.client.data.PassiveListenerConfig.Builder setDataTypes(java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> dataTypes);
+    method public androidx.health.services.client.data.PassiveListenerConfig.Builder setHealthEventTypes(java.util.Set<androidx.health.services.client.data.HealthEvent.Type> healthEventTypes);
+    method public androidx.health.services.client.data.PassiveListenerConfig.Builder setShouldUserActivityInfoBeRequested(boolean shouldUserActivityInfoBeRequested);
+  }
+
+  public static final class PassiveListenerConfig.Companion {
+    method public androidx.health.services.client.data.PassiveListenerConfig.Builder builder();
+  }
+
+  public final class PassiveMonitoringCapabilities {
+    ctor public PassiveMonitoringCapabilities(java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> supportedDataTypesPassiveMonitoring, java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> supportedDataTypesPassiveGoals, java.util.Set<androidx.health.services.client.data.HealthEvent.Type> supportedHealthEventTypes, java.util.Set<androidx.health.services.client.data.UserActivityState> supportedUserActivityStates);
+    method public java.util.Set<androidx.health.services.client.data.DataType<?,?>> getSupportedDataTypesPassiveGoals();
+    method public java.util.Set<androidx.health.services.client.data.DataType<?,?>> getSupportedDataTypesPassiveMonitoring();
+    method public java.util.Set<androidx.health.services.client.data.HealthEvent.Type> getSupportedHealthEventTypes();
+    method public java.util.Set<androidx.health.services.client.data.UserActivityState> getSupportedUserActivityStates();
+    property public final java.util.Set<androidx.health.services.client.data.DataType<?,?>> supportedDataTypesPassiveGoals;
+    property public final java.util.Set<androidx.health.services.client.data.DataType<?,?>> supportedDataTypesPassiveMonitoring;
+    property public final java.util.Set<androidx.health.services.client.data.HealthEvent.Type> supportedHealthEventTypes;
+    property public final java.util.Set<androidx.health.services.client.data.UserActivityState> supportedUserActivityStates;
+  }
+
+  public final class PassiveMonitoringUpdate {
+    ctor public PassiveMonitoringUpdate(androidx.health.services.client.data.DataPointContainer dataPoints, java.util.List<androidx.health.services.client.data.UserActivityInfo> userActivityInfoUpdates);
+    method public androidx.health.services.client.data.DataPointContainer getDataPoints();
+    method public java.util.List<androidx.health.services.client.data.UserActivityInfo> getUserActivityInfoUpdates();
+    property public final androidx.health.services.client.data.DataPointContainer dataPoints;
+    property public final java.util.List<androidx.health.services.client.data.UserActivityInfo> userActivityInfoUpdates;
+  }
+
+  public final class SampleDataPoint<T> extends androidx.health.services.client.data.DataPoint<T> {
+    ctor public SampleDataPoint(androidx.health.services.client.data.DataType<T,androidx.health.services.client.data.SampleDataPoint<T>> dataType, T value, java.time.Duration timeDurationFromBoot, optional android.os.Bundle metadata, optional androidx.health.services.client.data.DataPointAccuracy? accuracy);
+    method public androidx.health.services.client.data.DataPointAccuracy? getAccuracy();
+    method public androidx.health.services.client.data.DataType<T,androidx.health.services.client.data.SampleDataPoint<T>> getDataType();
+    method public android.os.Bundle getMetadata();
+    method public java.time.Duration getTimeDurationFromBoot();
+    method public java.time.Instant getTimeInstant(java.time.Instant bootInstant);
+    method public T getValue();
+    property public final androidx.health.services.client.data.DataPointAccuracy? accuracy;
+    property public androidx.health.services.client.data.DataType<T,androidx.health.services.client.data.SampleDataPoint<T>> dataType;
+    property public final android.os.Bundle metadata;
+    property public final java.time.Duration timeDurationFromBoot;
+    property public final T value;
+  }
+
+  public final class StatisticalDataPoint<T extends java.lang.Number> extends androidx.health.services.client.data.DataPoint<T> {
+    ctor public StatisticalDataPoint(androidx.health.services.client.data.AggregateDataType<T,androidx.health.services.client.data.StatisticalDataPoint<T>> dataType, T min, T max, T average, java.time.Instant start, java.time.Instant end);
+    method public T getAverage();
+    method public java.time.Instant getEnd();
+    method public T getMax();
+    method public T getMin();
+    method public java.time.Instant getStart();
+    property public final T average;
+    property public final java.time.Instant end;
+    property public final T max;
+    property public final T min;
+    property public final java.time.Instant start;
+    field public static final androidx.health.services.client.data.StatisticalDataPoint.Companion Companion;
+  }
+
+  public static final class StatisticalDataPoint.Companion {
+  }
+
+  public final class UserActivityInfo {
+    ctor public UserActivityInfo(androidx.health.services.client.data.UserActivityState userActivityState, androidx.health.services.client.data.ExerciseInfo? exerciseInfo, java.time.Instant stateChangeTime);
+    method public static androidx.health.services.client.data.UserActivityInfo createActiveExerciseState(androidx.health.services.client.data.ExerciseInfo exerciseInfo, java.time.Instant stateChangeTime);
+    method public static androidx.health.services.client.data.UserActivityInfo createAsleepState(java.time.Instant stateChangeTime);
+    method public static androidx.health.services.client.data.UserActivityInfo createPassiveActivityState(java.time.Instant stateChangeTime);
+    method public static androidx.health.services.client.data.UserActivityInfo createUnknownTypeState(java.time.Instant stateChangeTime);
+    method public androidx.health.services.client.data.ExerciseInfo? getExerciseInfo();
+    method public java.time.Instant getStateChangeTime();
+    method public androidx.health.services.client.data.UserActivityState getUserActivityState();
+    property public final androidx.health.services.client.data.ExerciseInfo? exerciseInfo;
+    property public final java.time.Instant stateChangeTime;
+    property public final androidx.health.services.client.data.UserActivityState userActivityState;
+    field public static final androidx.health.services.client.data.UserActivityInfo.Companion Companion;
+  }
+
+  public static final class UserActivityInfo.Companion {
+    method public androidx.health.services.client.data.UserActivityInfo createActiveExerciseState(androidx.health.services.client.data.ExerciseInfo exerciseInfo, java.time.Instant stateChangeTime);
+    method public androidx.health.services.client.data.UserActivityInfo createAsleepState(java.time.Instant stateChangeTime);
+    method public androidx.health.services.client.data.UserActivityInfo createPassiveActivityState(java.time.Instant stateChangeTime);
+    method public androidx.health.services.client.data.UserActivityInfo createUnknownTypeState(java.time.Instant stateChangeTime);
+  }
+
+  public final class UserActivityState {
+    ctor public UserActivityState(int id, String name);
+    method public int getId();
+    method public String getName();
+    property public final int id;
+    property public final String name;
+    field public static final androidx.health.services.client.data.UserActivityState.Companion Companion;
+    field public static final androidx.health.services.client.data.UserActivityState USER_ACTIVITY_ASLEEP;
+    field public static final androidx.health.services.client.data.UserActivityState USER_ACTIVITY_EXERCISE;
+    field public static final androidx.health.services.client.data.UserActivityState USER_ACTIVITY_PASSIVE;
+    field public static final androidx.health.services.client.data.UserActivityState USER_ACTIVITY_UNKNOWN;
+  }
+
+  public static final class UserActivityState.Companion {
+  }
+
+  public final class WarmUpConfig {
+    ctor public WarmUpConfig(androidx.health.services.client.data.ExerciseType exerciseType, java.util.Set<? extends androidx.health.services.client.data.DeltaDataType<?,?>> dataTypes);
+    method public java.util.Set<androidx.health.services.client.data.DeltaDataType<?,?>> getDataTypes();
+    method public androidx.health.services.client.data.ExerciseType getExerciseType();
+    property public final java.util.Set<androidx.health.services.client.data.DeltaDataType<?,?>> dataTypes;
+    property public final androidx.health.services.client.data.ExerciseType exerciseType;
+  }
+
+}
+
diff --git a/health/health-services-client/api/res-1.0.0-beta02.txt b/health/health-services-client/api/res-1.0.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/health/health-services-client/api/res-1.0.0-beta02.txt
diff --git a/health/health-services-client/api/restricted_1.0.0-beta02.txt b/health/health-services-client/api/restricted_1.0.0-beta02.txt
new file mode 100644
index 0000000..e37c668
--- /dev/null
+++ b/health/health-services-client/api/restricted_1.0.0-beta02.txt
@@ -0,0 +1,824 @@
+// Signature format: 4.0
+package androidx.health.services.client {
+
+  public interface ExerciseClient {
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> addGoalToActiveExerciseAsync(androidx.health.services.client.data.ExerciseGoal<?> exerciseGoal);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> clearUpdateCallbackAsync(androidx.health.services.client.ExerciseUpdateCallback callback);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> endExerciseAsync();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> flushAsync();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.health.services.client.data.ExerciseCapabilities> getCapabilitiesAsync();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.health.services.client.data.ExerciseInfo> getCurrentExerciseInfoAsync();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> markLapAsync();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> overrideAutoPauseAndResumeForActiveExerciseAsync(boolean enabled);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> pauseExerciseAsync();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> prepareExerciseAsync(androidx.health.services.client.data.WarmUpConfig configuration);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> removeGoalFromActiveExerciseAsync(androidx.health.services.client.data.ExerciseGoal<?> exerciseGoal);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> resumeExerciseAsync();
+    method public void setUpdateCallback(androidx.health.services.client.ExerciseUpdateCallback callback);
+    method public void setUpdateCallback(java.util.concurrent.Executor executor, androidx.health.services.client.ExerciseUpdateCallback callback);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> startExerciseAsync(androidx.health.services.client.data.ExerciseConfig configuration);
+  }
+
+  public interface ExerciseUpdateCallback {
+    method public void onAvailabilityChanged(androidx.health.services.client.data.DataType<?,?> dataType, androidx.health.services.client.data.Availability availability);
+    method public void onExerciseUpdateReceived(androidx.health.services.client.data.ExerciseUpdate update);
+    method public void onLapSummaryReceived(androidx.health.services.client.data.ExerciseLapSummary lapSummary);
+    method public void onRegistered();
+    method public void onRegistrationFailed(Throwable throwable);
+  }
+
+  public final class HealthServices {
+    method public static androidx.health.services.client.HealthServicesClient getClient(android.content.Context context);
+    field public static final androidx.health.services.client.HealthServices INSTANCE;
+  }
+
+  public interface HealthServicesClient {
+    method public androidx.health.services.client.ExerciseClient getExerciseClient();
+    method public androidx.health.services.client.MeasureClient getMeasureClient();
+    method public androidx.health.services.client.PassiveMonitoringClient getPassiveMonitoringClient();
+    property public abstract androidx.health.services.client.ExerciseClient exerciseClient;
+    property public abstract androidx.health.services.client.MeasureClient measureClient;
+    property public abstract androidx.health.services.client.PassiveMonitoringClient passiveMonitoringClient;
+  }
+
+  public interface MeasureCallback {
+    method public void onAvailabilityChanged(androidx.health.services.client.data.DeltaDataType<?,?> dataType, androidx.health.services.client.data.Availability availability);
+    method public void onDataReceived(androidx.health.services.client.data.DataPointContainer data);
+    method public default void onRegistered();
+    method public default void onRegistrationFailed(Throwable throwable);
+  }
+
+  public interface MeasureClient {
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.health.services.client.data.MeasureCapabilities> getCapabilitiesAsync();
+    method public void registerMeasureCallback(androidx.health.services.client.data.DeltaDataType<?,?> dataType, androidx.health.services.client.MeasureCallback callback);
+    method public void registerMeasureCallback(androidx.health.services.client.data.DeltaDataType<?,?> dataType, java.util.concurrent.Executor executor, androidx.health.services.client.MeasureCallback callback);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> unregisterMeasureCallbackAsync(androidx.health.services.client.data.DeltaDataType<?,?> dataType, androidx.health.services.client.MeasureCallback callback);
+  }
+
+  public interface PassiveListenerCallback {
+    method public default void onGoalCompleted(androidx.health.services.client.data.PassiveGoal goal);
+    method public default void onHealthEventReceived(androidx.health.services.client.data.HealthEvent event);
+    method public default void onNewDataPointsReceived(androidx.health.services.client.data.DataPointContainer dataPoints);
+    method public default void onPermissionLost();
+    method public default void onRegistered();
+    method public default void onRegistrationFailed(Throwable throwable);
+    method public default void onUserActivityInfoReceived(androidx.health.services.client.data.UserActivityInfo info);
+  }
+
+  public abstract class PassiveListenerService extends android.app.Service {
+    ctor public PassiveListenerService();
+    method public final android.os.IBinder? onBind(android.content.Intent intent);
+    method public void onGoalCompleted(androidx.health.services.client.data.PassiveGoal goal);
+    method public void onHealthEventReceived(androidx.health.services.client.data.HealthEvent event);
+    method public void onNewDataPointsReceived(androidx.health.services.client.data.DataPointContainer dataPoints);
+    method public void onPermissionLost();
+    method public void onUserActivityInfoReceived(androidx.health.services.client.data.UserActivityInfo info);
+  }
+
+  public interface PassiveMonitoringClient {
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> clearPassiveListenerCallbackAsync();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> clearPassiveListenerServiceAsync();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> flushAsync();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.health.services.client.data.PassiveMonitoringCapabilities> getCapabilitiesAsync();
+    method public void setPassiveListenerCallback(androidx.health.services.client.data.PassiveListenerConfig config, androidx.health.services.client.PassiveListenerCallback callback);
+    method public void setPassiveListenerCallback(androidx.health.services.client.data.PassiveListenerConfig config, java.util.concurrent.Executor executor, androidx.health.services.client.PassiveListenerCallback callback);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void> setPassiveListenerServiceAsync(Class<? extends androidx.health.services.client.PassiveListenerService> service, androidx.health.services.client.data.PassiveListenerConfig config);
+  }
+
+}
+
+package androidx.health.services.client.data {
+
+  public final class AggregateDataType<T extends java.lang.Number, D extends androidx.health.services.client.data.DataPoint<T>> extends androidx.health.services.client.data.DataType<T,D> {
+    ctor public AggregateDataType(String name, androidx.health.services.client.data.DataType.TimeType timeType, Class<T> valueClass);
+  }
+
+  public interface Availability {
+    method public int getId();
+    property public abstract int id;
+    field public static final androidx.health.services.client.data.Availability.Companion Companion;
+  }
+
+  public static final class Availability.Companion {
+  }
+
+  public final class ComparisonType {
+    method public int getId();
+    method public String getName();
+    property public final int id;
+    property public final String name;
+    field public static final androidx.health.services.client.data.ComparisonType.Companion Companion;
+    field public static final androidx.health.services.client.data.ComparisonType GREATER_THAN;
+    field public static final androidx.health.services.client.data.ComparisonType GREATER_THAN_OR_EQUAL;
+    field public static final androidx.health.services.client.data.ComparisonType LESS_THAN;
+    field public static final androidx.health.services.client.data.ComparisonType LESS_THAN_OR_EQUAL;
+    field public static final androidx.health.services.client.data.ComparisonType UNKNOWN;
+  }
+
+  public static final class ComparisonType.Companion {
+  }
+
+  public final class CumulativeDataPoint<T extends java.lang.Number> extends androidx.health.services.client.data.DataPoint<T> {
+    ctor public CumulativeDataPoint(androidx.health.services.client.data.AggregateDataType<T,androidx.health.services.client.data.CumulativeDataPoint<T>> dataType, T total, java.time.Instant start, java.time.Instant end);
+    method public java.time.Instant getEnd();
+    method public java.time.Instant getStart();
+    method public T getTotal();
+    property public final java.time.Instant end;
+    property public final java.time.Instant start;
+    property public final T total;
+  }
+
+  public abstract class DataPoint<T> {
+    method public androidx.health.services.client.data.DataType<T,? extends androidx.health.services.client.data.DataPoint<T>> getDataType();
+    property public androidx.health.services.client.data.DataType<T,? extends androidx.health.services.client.data.DataPoint<T>> dataType;
+  }
+
+  public abstract class DataPointAccuracy {
+    ctor public DataPointAccuracy();
+  }
+
+  public final class DataPointContainer {
+    ctor public DataPointContainer(java.util.Map<androidx.health.services.client.data.DataType<?,?>,? extends java.util.List<? extends androidx.health.services.client.data.DataPoint<?>>> dataPoints);
+    ctor public DataPointContainer(java.util.List<? extends androidx.health.services.client.data.DataPoint<?>> dataPointList);
+    method public java.util.List<androidx.health.services.client.data.CumulativeDataPoint<?>> getCumulativeDataPoints();
+    method public <T, D extends androidx.health.services.client.data.DataPoint<T>> java.util.List<D> getData(androidx.health.services.client.data.DeltaDataType<T,D> type);
+    method public <T extends java.lang.Number, D extends androidx.health.services.client.data.DataPoint<T>> D? getData(androidx.health.services.client.data.AggregateDataType<T,D> type);
+    method public java.util.Set<androidx.health.services.client.data.DataType<?,?>> getDataTypes();
+    method public java.util.List<androidx.health.services.client.data.IntervalDataPoint<?>> getIntervalDataPoints();
+    method public java.util.List<androidx.health.services.client.data.SampleDataPoint<?>> getSampleDataPoints();
+    method public java.util.List<androidx.health.services.client.data.StatisticalDataPoint<?>> getStatisticalDataPoints();
+    property public final java.util.List<androidx.health.services.client.data.CumulativeDataPoint<?>> cumulativeDataPoints;
+    property public final java.util.Set<androidx.health.services.client.data.DataType<?,?>> dataTypes;
+    property public final java.util.List<androidx.health.services.client.data.IntervalDataPoint<?>> intervalDataPoints;
+    property public final java.util.List<androidx.health.services.client.data.SampleDataPoint<?>> sampleDataPoints;
+    property public final java.util.List<androidx.health.services.client.data.StatisticalDataPoint<?>> statisticalDataPoints;
+  }
+
+  public abstract class DataType<T, D extends androidx.health.services.client.data.DataPoint<T>> {
+    ctor public DataType(String name, androidx.health.services.client.data.DataType.TimeType timeType, Class<T> valueClass, boolean isAggregate);
+    method public final String getName();
+    method public final Class<T> getValueClass();
+    property public final String name;
+    property public final Class<T> valueClass;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Double,androidx.health.services.client.data.SampleDataPoint<java.lang.Double>> ABSOLUTE_ELEVATION;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Double,androidx.health.services.client.data.StatisticalDataPoint<java.lang.Double>> ABSOLUTE_ELEVATION_STATS;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Long,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Long>> ACTIVE_EXERCISE_DURATION_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Double,androidx.health.services.client.data.IntervalDataPoint<java.lang.Double>> CALORIES;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Double,androidx.health.services.client.data.IntervalDataPoint<java.lang.Double>> CALORIES_DAILY;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Double,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Double>> CALORIES_TOTAL;
+    field public static final androidx.health.services.client.data.DataType.Companion Companion;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Double,androidx.health.services.client.data.IntervalDataPoint<java.lang.Double>> DECLINE_DISTANCE;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Double,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Double>> DECLINE_DISTANCE_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Long,androidx.health.services.client.data.IntervalDataPoint<java.lang.Long>> DECLINE_DURATION;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Long,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Long>> DECLINE_DURATION_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Double,androidx.health.services.client.data.IntervalDataPoint<java.lang.Double>> DISTANCE;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Double,androidx.health.services.client.data.IntervalDataPoint<java.lang.Double>> DISTANCE_DAILY;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Double,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Double>> DISTANCE_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Double,androidx.health.services.client.data.IntervalDataPoint<java.lang.Double>> ELEVATION_GAIN;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Double,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Double>> ELEVATION_GAIN_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Double,androidx.health.services.client.data.IntervalDataPoint<java.lang.Double>> ELEVATION_LOSS;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Double,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Double>> ELEVATION_LOSS_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Double,androidx.health.services.client.data.IntervalDataPoint<java.lang.Double>> FLAT_GROUND_DISTANCE;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Double,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Double>> FLAT_GROUND_DISTANCE_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Long,androidx.health.services.client.data.IntervalDataPoint<java.lang.Long>> FLAT_GROUND_DURATION;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Long,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Long>> FLAT_GROUND_DURATION_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Double,androidx.health.services.client.data.IntervalDataPoint<java.lang.Double>> FLOORS;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Double,androidx.health.services.client.data.IntervalDataPoint<java.lang.Double>> FLOORS_DAILY;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Double,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Double>> FLOORS_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Long,androidx.health.services.client.data.IntervalDataPoint<java.lang.Long>> GOLF_SHOT_COUNT;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Long,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Long>> GOLF_SHOT_COUNT_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Double,androidx.health.services.client.data.SampleDataPoint<java.lang.Double>> HEART_RATE_BPM;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Double,androidx.health.services.client.data.StatisticalDataPoint<java.lang.Double>> HEART_RATE_BPM_STATS;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Double,androidx.health.services.client.data.IntervalDataPoint<java.lang.Double>> INCLINE_DISTANCE;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Double,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Double>> INCLINE_DISTANCE_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Long,androidx.health.services.client.data.IntervalDataPoint<java.lang.Long>> INCLINE_DURATION;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Long,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Long>> INCLINE_DURATION_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<androidx.health.services.client.data.LocationData,androidx.health.services.client.data.SampleDataPoint<androidx.health.services.client.data.LocationData>> LOCATION;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Double,androidx.health.services.client.data.SampleDataPoint<java.lang.Double>> PACE;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Double,androidx.health.services.client.data.StatisticalDataPoint<java.lang.Double>> PACE_STATS;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Long,androidx.health.services.client.data.IntervalDataPoint<java.lang.Long>> REP_COUNT;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Long,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Long>> REP_COUNT_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Long,androidx.health.services.client.data.IntervalDataPoint<java.lang.Long>> RESTING_EXERCISE_DURATION;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Long,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Long>> RESTING_EXERCISE_DURATION_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Long,androidx.health.services.client.data.IntervalDataPoint<java.lang.Long>> RUNNING_STEPS;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Long,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Long>> RUNNING_STEPS_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Double,androidx.health.services.client.data.SampleDataPoint<java.lang.Double>> SPEED;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Double,androidx.health.services.client.data.StatisticalDataPoint<java.lang.Double>> SPEED_STATS;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Long,androidx.health.services.client.data.IntervalDataPoint<java.lang.Long>> STEPS;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Long,androidx.health.services.client.data.IntervalDataPoint<java.lang.Long>> STEPS_DAILY;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Long,androidx.health.services.client.data.SampleDataPoint<java.lang.Long>> STEPS_PER_MINUTE;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Long,androidx.health.services.client.data.StatisticalDataPoint<java.lang.Long>> STEPS_PER_MINUTE_STATS;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Long,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Long>> STEPS_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Long,androidx.health.services.client.data.IntervalDataPoint<java.lang.Long>> SWIMMING_LAP_COUNT;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Long,androidx.health.services.client.data.IntervalDataPoint<java.lang.Long>> SWIMMING_STROKES;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Long,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Long>> SWIMMING_STROKES_TOTAL;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Double,androidx.health.services.client.data.SampleDataPoint<java.lang.Double>> VO2_MAX;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Double,androidx.health.services.client.data.StatisticalDataPoint<java.lang.Double>> VO2_MAX_STATS;
+    field public static final androidx.health.services.client.data.DeltaDataType<java.lang.Long,androidx.health.services.client.data.IntervalDataPoint<java.lang.Long>> WALKING_STEPS;
+    field public static final androidx.health.services.client.data.AggregateDataType<java.lang.Long,androidx.health.services.client.data.CumulativeDataPoint<java.lang.Long>> WALKING_STEPS_TOTAL;
+  }
+
+  public static final class DataType.Companion {
+  }
+
+  public static final class DataType.TimeType {
+    method public int getId();
+    method public String getName();
+    property public final int id;
+    property public final String name;
+    field public static final androidx.health.services.client.data.DataType.TimeType.Companion Companion;
+    field public static final androidx.health.services.client.data.DataType.TimeType INTERVAL;
+    field public static final androidx.health.services.client.data.DataType.TimeType SAMPLE;
+    field public static final androidx.health.services.client.data.DataType.TimeType UNKNOWN;
+  }
+
+  public static final class DataType.TimeType.Companion {
+  }
+
+  public final class DataTypeAvailability implements androidx.health.services.client.data.Availability {
+    method public static androidx.health.services.client.data.DataTypeAvailability? fromId(int id);
+    method public int getId();
+    method public String getName();
+    property public int id;
+    property public final String name;
+    field public static final androidx.health.services.client.data.DataTypeAvailability ACQUIRING;
+    field public static final androidx.health.services.client.data.DataTypeAvailability AVAILABLE;
+    field public static final androidx.health.services.client.data.DataTypeAvailability.Companion Companion;
+    field public static final androidx.health.services.client.data.DataTypeAvailability UNAVAILABLE;
+    field public static final androidx.health.services.client.data.DataTypeAvailability UNAVAILABLE_DEVICE_OFF_BODY;
+    field public static final androidx.health.services.client.data.DataTypeAvailability UNKNOWN;
+  }
+
+  public static final class DataTypeAvailability.Companion {
+    method public androidx.health.services.client.data.DataTypeAvailability? fromId(int id);
+  }
+
+  public final class DataTypeCondition<T extends java.lang.Number, D extends androidx.health.services.client.data.DataType<T, ? extends androidx.health.services.client.data.DataPoint<T>>> {
+    ctor public DataTypeCondition(D dataType, T threshold, androidx.health.services.client.data.ComparisonType comparisonType);
+    method public androidx.health.services.client.data.ComparisonType getComparisonType();
+    method public D getDataType();
+    method public T getThreshold();
+    property public final androidx.health.services.client.data.ComparisonType comparisonType;
+    property public final D dataType;
+    property public final T threshold;
+  }
+
+  public final class DeltaDataType<T, D extends androidx.health.services.client.data.DataPoint<T>> extends androidx.health.services.client.data.DataType<T,D> {
+    ctor public DeltaDataType(String name, androidx.health.services.client.data.DataType.TimeType timeType, Class<T> valueClass);
+  }
+
+  public final class ExerciseCapabilities {
+    ctor public ExerciseCapabilities(java.util.Map<androidx.health.services.client.data.ExerciseType,androidx.health.services.client.data.ExerciseTypeCapabilities> typeToCapabilities);
+    method public java.util.Set<androidx.health.services.client.data.ExerciseType> getAutoPauseAndResumeEnabledExercises();
+    method public androidx.health.services.client.data.ExerciseTypeCapabilities getExerciseTypeCapabilities(androidx.health.services.client.data.ExerciseType exercise);
+    method public java.util.Set<androidx.health.services.client.data.ExerciseType> getSupportedExerciseTypes();
+    method public java.util.Map<androidx.health.services.client.data.ExerciseType,androidx.health.services.client.data.ExerciseTypeCapabilities> getTypeToCapabilities();
+    property public final java.util.Set<androidx.health.services.client.data.ExerciseType> autoPauseAndResumeEnabledExercises;
+    property public final java.util.Set<androidx.health.services.client.data.ExerciseType> supportedExerciseTypes;
+    property public final java.util.Map<androidx.health.services.client.data.ExerciseType,androidx.health.services.client.data.ExerciseTypeCapabilities> typeToCapabilities;
+  }
+
+  public final class ExerciseConfig {
+    ctor public ExerciseConfig(androidx.health.services.client.data.ExerciseType exerciseType, java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> dataTypes, boolean isAutoPauseAndResumeEnabled, boolean isGpsEnabled, optional java.util.List<? extends androidx.health.services.client.data.ExerciseGoal<?>> exerciseGoals, optional android.os.Bundle exerciseParams, optional @FloatRange(from=0.0) float swimmingPoolLengthMeters);
+    method public static androidx.health.services.client.data.ExerciseConfig.Builder builder(androidx.health.services.client.data.ExerciseType exerciseType);
+    method public java.util.Set<androidx.health.services.client.data.DataType<?,?>> getDataTypes();
+    method public java.util.List<androidx.health.services.client.data.ExerciseGoal<?>> getExerciseGoals();
+    method public android.os.Bundle getExerciseParams();
+    method public androidx.health.services.client.data.ExerciseType getExerciseType();
+    method public float getSwimmingPoolLengthMeters();
+    method public boolean isAutoPauseAndResumeEnabled();
+    method public boolean isGpsEnabled();
+    property public final java.util.Set<androidx.health.services.client.data.DataType<?,?>> dataTypes;
+    property public final java.util.List<androidx.health.services.client.data.ExerciseGoal<?>> exerciseGoals;
+    property public final android.os.Bundle exerciseParams;
+    property public final androidx.health.services.client.data.ExerciseType exerciseType;
+    property public final boolean isAutoPauseAndResumeEnabled;
+    property public final boolean isGpsEnabled;
+    property public final float swimmingPoolLengthMeters;
+    field public static final androidx.health.services.client.data.ExerciseConfig.Companion Companion;
+    field public static final float SWIMMING_POOL_LENGTH_UNSPECIFIED = 0.0f;
+  }
+
+  public static final class ExerciseConfig.Builder {
+    ctor public ExerciseConfig.Builder(androidx.health.services.client.data.ExerciseType exerciseType);
+    method public androidx.health.services.client.data.ExerciseConfig build();
+    method public androidx.health.services.client.data.ExerciseConfig.Builder setDataTypes(java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> dataTypes);
+    method public androidx.health.services.client.data.ExerciseConfig.Builder setExerciseGoals(java.util.List<? extends androidx.health.services.client.data.ExerciseGoal<?>> exerciseGoals);
+    method public androidx.health.services.client.data.ExerciseConfig.Builder setExerciseParams(android.os.Bundle exerciseParams);
+    method public androidx.health.services.client.data.ExerciseConfig.Builder setIsAutoPauseAndResumeEnabled(boolean isAutoPauseAndResumeEnabled);
+    method public androidx.health.services.client.data.ExerciseConfig.Builder setIsGpsEnabled(boolean isGpsEnabled);
+    method public androidx.health.services.client.data.ExerciseConfig.Builder setSwimmingPoolLengthMeters(float swimmingPoolLength);
+  }
+
+  public static final class ExerciseConfig.Companion {
+    method public androidx.health.services.client.data.ExerciseConfig.Builder builder(androidx.health.services.client.data.ExerciseType exerciseType);
+  }
+
+  public final class ExerciseGoal<T extends java.lang.Number> implements android.os.Parcelable {
+    method public static <T extends java.lang.Number> androidx.health.services.client.data.ExerciseGoal<T> createMilestone(androidx.health.services.client.data.DataTypeCondition<T,androidx.health.services.client.data.AggregateDataType<T,?>> condition, T period);
+    method public static <T extends java.lang.Number> androidx.health.services.client.data.ExerciseGoal<T> createMilestoneGoalWithUpdatedThreshold(androidx.health.services.client.data.ExerciseGoal<T> goal, T newThreshold);
+    method public static <T extends java.lang.Number> androidx.health.services.client.data.ExerciseGoal<T> createOneTimeGoal(androidx.health.services.client.data.DataTypeCondition<T,androidx.health.services.client.data.AggregateDataType<T,?>> condition);
+    method public int describeContents();
+    method public androidx.health.services.client.data.DataTypeCondition<T,androidx.health.services.client.data.AggregateDataType<T,?>> getDataTypeCondition();
+    method public androidx.health.services.client.data.ExerciseGoalType getExerciseGoalType();
+    method public T? getPeriod();
+    method public void writeToParcel(android.os.Parcel dest, int flags);
+    property public final androidx.health.services.client.data.DataTypeCondition<T,androidx.health.services.client.data.AggregateDataType<T,?>> dataTypeCondition;
+    property public final androidx.health.services.client.data.ExerciseGoalType exerciseGoalType;
+    property public final T? period;
+    field public static final android.os.Parcelable.Creator<androidx.health.services.client.data.ExerciseGoal<?>> CREATOR;
+    field public static final androidx.health.services.client.data.ExerciseGoal.Companion Companion;
+  }
+
+  public static final class ExerciseGoal.Companion {
+    method public <T extends java.lang.Number> androidx.health.services.client.data.ExerciseGoal<T> createMilestone(androidx.health.services.client.data.DataTypeCondition<T,androidx.health.services.client.data.AggregateDataType<T,?>> condition, T period);
+    method public <T extends java.lang.Number> androidx.health.services.client.data.ExerciseGoal<T> createMilestoneGoalWithUpdatedThreshold(androidx.health.services.client.data.ExerciseGoal<T> goal, T newThreshold);
+    method public <T extends java.lang.Number> androidx.health.services.client.data.ExerciseGoal<T> createOneTimeGoal(androidx.health.services.client.data.DataTypeCondition<T,androidx.health.services.client.data.AggregateDataType<T,?>> condition);
+  }
+
+  public final class ExerciseGoalType {
+    method public static androidx.health.services.client.data.ExerciseGoalType? fromId(int id);
+    method public int getId();
+    method public String getName();
+    property public final int id;
+    property public final String name;
+    field public static final androidx.health.services.client.data.ExerciseGoalType.Companion Companion;
+    field public static final androidx.health.services.client.data.ExerciseGoalType MILESTONE;
+    field public static final androidx.health.services.client.data.ExerciseGoalType ONE_TIME_GOAL;
+  }
+
+  public static final class ExerciseGoalType.Companion {
+    method public androidx.health.services.client.data.ExerciseGoalType? fromId(int id);
+  }
+
+  public final class ExerciseInfo {
+    ctor public ExerciseInfo(int exerciseTrackedStatus, androidx.health.services.client.data.ExerciseType exerciseType);
+    method public int getExerciseTrackedStatus();
+    method public androidx.health.services.client.data.ExerciseType getExerciseType();
+    property public final int exerciseTrackedStatus;
+    property public final androidx.health.services.client.data.ExerciseType exerciseType;
+  }
+
+  public final class ExerciseLapSummary {
+    ctor public ExerciseLapSummary(int lapCount, java.time.Instant startTime, java.time.Instant endTime, java.time.Duration activeDuration, androidx.health.services.client.data.DataPointContainer lapMetrics);
+    method public java.time.Duration getActiveDuration();
+    method public java.time.Instant getEndTime();
+    method public int getLapCount();
+    method public androidx.health.services.client.data.DataPointContainer getLapMetrics();
+    method public java.time.Instant getStartTime();
+    property public final java.time.Duration activeDuration;
+    property public final java.time.Instant endTime;
+    property public final int lapCount;
+    property public final androidx.health.services.client.data.DataPointContainer lapMetrics;
+    property public final java.time.Instant startTime;
+  }
+
+  public final class ExerciseState {
+    method public static androidx.health.services.client.data.ExerciseState? fromId(int id);
+    method public int getId();
+    method public String getName();
+    method public boolean isEnded();
+    method public boolean isEnding();
+    method public boolean isPaused();
+    method public boolean isResuming();
+    property public final int id;
+    property public final boolean isEnded;
+    property public final boolean isEnding;
+    property public final boolean isPaused;
+    property public final boolean isResuming;
+    property public final String name;
+    field public static final androidx.health.services.client.data.ExerciseState ACTIVE;
+    field public static final androidx.health.services.client.data.ExerciseState AUTO_PAUSED;
+    field public static final androidx.health.services.client.data.ExerciseState AUTO_PAUSING;
+    field public static final androidx.health.services.client.data.ExerciseState AUTO_RESUMING;
+    field public static final androidx.health.services.client.data.ExerciseState.Companion Companion;
+    field public static final androidx.health.services.client.data.ExerciseState ENDED;
+    field public static final androidx.health.services.client.data.ExerciseState ENDING;
+    field public static final androidx.health.services.client.data.ExerciseState PREPARING;
+    field public static final androidx.health.services.client.data.ExerciseState USER_PAUSED;
+    field public static final androidx.health.services.client.data.ExerciseState USER_PAUSING;
+    field public static final androidx.health.services.client.data.ExerciseState USER_RESUMING;
+    field public static final androidx.health.services.client.data.ExerciseState USER_STARTING;
+  }
+
+  public static final class ExerciseState.Companion {
+    method public androidx.health.services.client.data.ExerciseState? fromId(int id);
+  }
+
+  public final class ExerciseStateInfo {
+    ctor public ExerciseStateInfo(androidx.health.services.client.data.ExerciseState exerciseState, int exerciseEndReason);
+    method public int getEndReason();
+    method public androidx.health.services.client.data.ExerciseState getState();
+    property public final int endReason;
+    property public final androidx.health.services.client.data.ExerciseState state;
+    field public static final androidx.health.services.client.data.ExerciseStateInfo.Companion Companion;
+  }
+
+  public static final class ExerciseStateInfo.Companion {
+  }
+
+  public final class ExerciseType {
+    method public static androidx.health.services.client.data.ExerciseType fromId(int id);
+    method public int getId();
+    method public String getName();
+    property public final int id;
+    property public final String name;
+    field public static final androidx.health.services.client.data.ExerciseType ALPINE_SKIING;
+    field public static final androidx.health.services.client.data.ExerciseType BACKPACKING;
+    field public static final androidx.health.services.client.data.ExerciseType BACK_EXTENSION;
+    field public static final androidx.health.services.client.data.ExerciseType BADMINTON;
+    field public static final androidx.health.services.client.data.ExerciseType BARBELL_SHOULDER_PRESS;
+    field public static final androidx.health.services.client.data.ExerciseType BASEBALL;
+    field public static final androidx.health.services.client.data.ExerciseType BASKETBALL;
+    field public static final androidx.health.services.client.data.ExerciseType BENCH_PRESS;
+    field public static final androidx.health.services.client.data.ExerciseType BIKING;
+    field public static final androidx.health.services.client.data.ExerciseType BIKING_STATIONARY;
+    field public static final androidx.health.services.client.data.ExerciseType BOOT_CAMP;
+    field public static final androidx.health.services.client.data.ExerciseType BOXING;
+    field public static final androidx.health.services.client.data.ExerciseType BURPEE;
+    field public static final androidx.health.services.client.data.ExerciseType CALISTHENICS;
+    field public static final androidx.health.services.client.data.ExerciseType CRICKET;
+    field public static final androidx.health.services.client.data.ExerciseType CROSS_COUNTRY_SKIING;
+    field public static final androidx.health.services.client.data.ExerciseType CRUNCH;
+    field public static final androidx.health.services.client.data.ExerciseType.Companion Companion;
+    field public static final androidx.health.services.client.data.ExerciseType DANCING;
+    field public static final androidx.health.services.client.data.ExerciseType DEADLIFT;
+    field public static final androidx.health.services.client.data.ExerciseType ELLIPTICAL;
+    field public static final androidx.health.services.client.data.ExerciseType EXERCISE_CLASS;
+    field public static final androidx.health.services.client.data.ExerciseType FENCING;
+    field public static final androidx.health.services.client.data.ExerciseType FOOTBALL_AMERICAN;
+    field public static final androidx.health.services.client.data.ExerciseType FOOTBALL_AUSTRALIAN;
+    field public static final androidx.health.services.client.data.ExerciseType FORWARD_TWIST;
+    field public static final androidx.health.services.client.data.ExerciseType FRISBEE_DISC;
+    field public static final androidx.health.services.client.data.ExerciseType GOLF;
+    field public static final androidx.health.services.client.data.ExerciseType GUIDED_BREATHING;
+    field public static final androidx.health.services.client.data.ExerciseType GYMNASTICS;
+    field public static final androidx.health.services.client.data.ExerciseType HANDBALL;
+    field public static final androidx.health.services.client.data.ExerciseType HIGH_INTENSITY_INTERVAL_TRAINING;
+    field public static final androidx.health.services.client.data.ExerciseType HIKING;
+    field public static final androidx.health.services.client.data.ExerciseType HORSE_RIDING;
+    field public static final androidx.health.services.client.data.ExerciseType ICE_HOCKEY;
+    field public static final androidx.health.services.client.data.ExerciseType ICE_SKATING;
+    field public static final androidx.health.services.client.data.ExerciseType INLINE_SKATING;
+    field public static final androidx.health.services.client.data.ExerciseType JUMPING_JACK;
+    field public static final androidx.health.services.client.data.ExerciseType JUMP_ROPE;
+    field public static final androidx.health.services.client.data.ExerciseType LAT_PULL_DOWN;
+    field public static final androidx.health.services.client.data.ExerciseType LUNGE;
+    field public static final androidx.health.services.client.data.ExerciseType MARTIAL_ARTS;
+    field public static final androidx.health.services.client.data.ExerciseType MEDITATION;
+    field public static final androidx.health.services.client.data.ExerciseType MOUNTAIN_BIKING;
+    field public static final androidx.health.services.client.data.ExerciseType ORIENTEERING;
+    field public static final androidx.health.services.client.data.ExerciseType PADDLING;
+    field public static final androidx.health.services.client.data.ExerciseType PARA_GLIDING;
+    field public static final androidx.health.services.client.data.ExerciseType PILATES;
+    field public static final androidx.health.services.client.data.ExerciseType PLANK;
+    field public static final androidx.health.services.client.data.ExerciseType RACQUETBALL;
+    field public static final androidx.health.services.client.data.ExerciseType ROCK_CLIMBING;
+    field public static final androidx.health.services.client.data.ExerciseType ROLLER_HOCKEY;
+    field public static final androidx.health.services.client.data.ExerciseType ROLLER_SKATING;
+    field public static final androidx.health.services.client.data.ExerciseType ROWING;
+    field public static final androidx.health.services.client.data.ExerciseType ROWING_MACHINE;
+    field public static final androidx.health.services.client.data.ExerciseType RUGBY;
+    field public static final androidx.health.services.client.data.ExerciseType RUNNING;
+    field public static final androidx.health.services.client.data.ExerciseType RUNNING_TREADMILL;
+    field public static final androidx.health.services.client.data.ExerciseType SAILING;
+    field public static final androidx.health.services.client.data.ExerciseType SCUBA_DIVING;
+    field public static final androidx.health.services.client.data.ExerciseType SKATING;
+    field public static final androidx.health.services.client.data.ExerciseType SKIING;
+    field public static final androidx.health.services.client.data.ExerciseType SNOWBOARDING;
+    field public static final androidx.health.services.client.data.ExerciseType SNOWSHOEING;
+    field public static final androidx.health.services.client.data.ExerciseType SOCCER;
+    field public static final androidx.health.services.client.data.ExerciseType SOFTBALL;
+    field public static final androidx.health.services.client.data.ExerciseType SQUASH;
+    field public static final androidx.health.services.client.data.ExerciseType SQUAT;
+    field public static final androidx.health.services.client.data.ExerciseType STAIR_CLIMBING;
+    field public static final androidx.health.services.client.data.ExerciseType STAIR_CLIMBING_MACHINE;
+    field public static final androidx.health.services.client.data.ExerciseType STRENGTH_TRAINING;
+    field public static final androidx.health.services.client.data.ExerciseType STRETCHING;
+    field public static final androidx.health.services.client.data.ExerciseType SURFING;
+    field public static final androidx.health.services.client.data.ExerciseType SWIMMING_OPEN_WATER;
+    field public static final androidx.health.services.client.data.ExerciseType SWIMMING_POOL;
+    field public static final androidx.health.services.client.data.ExerciseType TABLE_TENNIS;
+    field public static final androidx.health.services.client.data.ExerciseType TENNIS;
+    field public static final androidx.health.services.client.data.ExerciseType UNKNOWN;
+    field public static final androidx.health.services.client.data.ExerciseType UPPER_TWIST;
+    field public static final androidx.health.services.client.data.ExerciseType VOLLEYBALL;
+    field public static final androidx.health.services.client.data.ExerciseType WALKING;
+    field public static final androidx.health.services.client.data.ExerciseType WATER_POLO;
+    field public static final androidx.health.services.client.data.ExerciseType WEIGHTLIFTING;
+    field public static final androidx.health.services.client.data.ExerciseType WORKOUT;
+    field public static final androidx.health.services.client.data.ExerciseType YACHTING;
+    field public static final androidx.health.services.client.data.ExerciseType YOGA;
+  }
+
+  public static final class ExerciseType.Companion {
+    method public androidx.health.services.client.data.ExerciseType fromId(int id);
+  }
+
+  public final class ExerciseTypeCapabilities {
+    ctor public ExerciseTypeCapabilities(java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> supportedDataTypes, java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,? extends java.util.Set<androidx.health.services.client.data.ComparisonType>> supportedGoals, java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,? extends java.util.Set<androidx.health.services.client.data.ComparisonType>> supportedMilestones, boolean supportsAutoPauseAndResume);
+    method public java.util.Set<androidx.health.services.client.data.DataType<?,?>> getSupportedDataTypes();
+    method public java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,java.util.Set<androidx.health.services.client.data.ComparisonType>> getSupportedGoals();
+    method public java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,java.util.Set<androidx.health.services.client.data.ComparisonType>> getSupportedMilestones();
+    method public boolean getSupportsAutoPauseAndResume();
+    property public final java.util.Set<androidx.health.services.client.data.DataType<?,?>> supportedDataTypes;
+    property public final java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,java.util.Set<androidx.health.services.client.data.ComparisonType>> supportedGoals;
+    property public final java.util.Map<androidx.health.services.client.data.AggregateDataType<?,?>,java.util.Set<androidx.health.services.client.data.ComparisonType>> supportedMilestones;
+    property public final boolean supportsAutoPauseAndResume;
+  }
+
+  public final class ExerciseUpdate {
+    method public java.time.Duration getActiveDurationAtDataPoint(androidx.health.services.client.data.IntervalDataPoint<?> dataPoint);
+    method public java.time.Duration getActiveDurationAtDataPoint(androidx.health.services.client.data.SampleDataPoint<?> dataPoint);
+    method public androidx.health.services.client.data.ExerciseUpdate.ActiveDurationCheckpoint? getActiveDurationCheckpoint();
+    method public androidx.health.services.client.data.ExerciseConfig? getExerciseConfig();
+    method public androidx.health.services.client.data.ExerciseStateInfo getExerciseStateInfo();
+    method public java.util.Set<androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number>> getLatestAchievedGoals();
+    method public androidx.health.services.client.data.DataPointContainer getLatestMetrics();
+    method public java.util.Set<androidx.health.services.client.data.MilestoneMarkerSummary> getLatestMilestoneMarkerSummaries();
+    method public java.time.Instant? getStartTime();
+    method public java.time.Duration getUpdateDurationFromBoot();
+    property public final androidx.health.services.client.data.ExerciseUpdate.ActiveDurationCheckpoint? activeDurationCheckpoint;
+    property public final androidx.health.services.client.data.ExerciseConfig? exerciseConfig;
+    property public final androidx.health.services.client.data.ExerciseStateInfo exerciseStateInfo;
+    property public final java.util.Set<androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number>> latestAchievedGoals;
+    property public final androidx.health.services.client.data.DataPointContainer latestMetrics;
+    property public final java.util.Set<androidx.health.services.client.data.MilestoneMarkerSummary> latestMilestoneMarkerSummaries;
+    property public final java.time.Instant? startTime;
+    field public static final androidx.health.services.client.data.ExerciseUpdate.Companion Companion;
+  }
+
+  public static final class ExerciseUpdate.ActiveDurationCheckpoint {
+    ctor public ExerciseUpdate.ActiveDurationCheckpoint(java.time.Instant time, java.time.Duration activeDuration);
+    method public java.time.Duration getActiveDuration();
+    method public java.time.Instant getTime();
+    property public final java.time.Duration activeDuration;
+    property public final java.time.Instant time;
+  }
+
+  public static final class ExerciseUpdate.Companion {
+  }
+
+  public final class HealthEvent {
+    ctor public HealthEvent(androidx.health.services.client.data.HealthEvent.Type type, java.time.Instant eventTime, androidx.health.services.client.data.DataPointContainer metrics);
+    method public java.time.Instant getEventTime();
+    method public androidx.health.services.client.data.DataPointContainer getMetrics();
+    method public androidx.health.services.client.data.HealthEvent.Type getType();
+    property public final java.time.Instant eventTime;
+    property public final androidx.health.services.client.data.DataPointContainer metrics;
+    property public final androidx.health.services.client.data.HealthEvent.Type type;
+  }
+
+  public static final class HealthEvent.Type {
+    method public int getId();
+    method public String getName();
+    property public final int id;
+    property public final String name;
+    field public static final androidx.health.services.client.data.HealthEvent.Type.Companion Companion;
+    field public static final androidx.health.services.client.data.HealthEvent.Type FALL_DETECTED;
+    field public static final androidx.health.services.client.data.HealthEvent.Type UNKNOWN;
+  }
+
+  public static final class HealthEvent.Type.Companion {
+  }
+
+  public final class HeartRateAccuracy extends androidx.health.services.client.data.DataPointAccuracy {
+    ctor public HeartRateAccuracy(androidx.health.services.client.data.HeartRateAccuracy.SensorStatus sensorStatus);
+    method public androidx.health.services.client.data.HeartRateAccuracy.SensorStatus getSensorStatus();
+    property public final androidx.health.services.client.data.HeartRateAccuracy.SensorStatus sensorStatus;
+  }
+
+  public static final class HeartRateAccuracy.SensorStatus {
+    method public int getId();
+    method public String getName();
+    property public final int id;
+    property public final String name;
+    field public static final androidx.health.services.client.data.HeartRateAccuracy.SensorStatus ACCURACY_HIGH;
+    field public static final androidx.health.services.client.data.HeartRateAccuracy.SensorStatus ACCURACY_LOW;
+    field public static final androidx.health.services.client.data.HeartRateAccuracy.SensorStatus ACCURACY_MEDIUM;
+    field public static final androidx.health.services.client.data.HeartRateAccuracy.SensorStatus.Companion Companion;
+    field public static final androidx.health.services.client.data.HeartRateAccuracy.SensorStatus NO_CONTACT;
+    field public static final androidx.health.services.client.data.HeartRateAccuracy.SensorStatus UNKNOWN;
+    field public static final androidx.health.services.client.data.HeartRateAccuracy.SensorStatus UNRELIABLE;
+  }
+
+  public static final class HeartRateAccuracy.SensorStatus.Companion {
+  }
+
+  public final class IntervalDataPoint<T> extends androidx.health.services.client.data.DataPoint<T> {
+    ctor public IntervalDataPoint(androidx.health.services.client.data.DataType<T,? extends androidx.health.services.client.data.IntervalDataPoint<T>> dataType, T value, java.time.Duration startDurationFromBoot, java.time.Duration endDurationFromBoot, optional android.os.Bundle metadata, optional androidx.health.services.client.data.DataPointAccuracy? accuracy);
+    method public androidx.health.services.client.data.DataPointAccuracy? getAccuracy();
+    method public androidx.health.services.client.data.DataType<T,? extends androidx.health.services.client.data.IntervalDataPoint<T>> getDataType();
+    method public java.time.Duration getEndDurationFromBoot();
+    method public java.time.Instant getEndInstant(java.time.Instant bootInstant);
+    method public android.os.Bundle getMetadata();
+    method public java.time.Duration getStartDurationFromBoot();
+    method public java.time.Instant getStartInstant(java.time.Instant bootInstant);
+    method public T getValue();
+    property public final androidx.health.services.client.data.DataPointAccuracy? accuracy;
+    property public androidx.health.services.client.data.DataType<T,? extends androidx.health.services.client.data.IntervalDataPoint<T>> dataType;
+    property public final java.time.Duration endDurationFromBoot;
+    property public final android.os.Bundle metadata;
+    property public final java.time.Duration startDurationFromBoot;
+    property public final T value;
+  }
+
+  public final class LocationAccuracy extends androidx.health.services.client.data.DataPointAccuracy {
+    ctor public LocationAccuracy(@FloatRange(from=0.0) double horizontalPositionErrorMeters, optional @FloatRange(from=0.0) double verticalPositionErrorMeters);
+    method public double getHorizontalPositionErrorMeters();
+    method public double getVerticalPositionErrorMeters();
+    property public final double horizontalPositionErrorMeters;
+    property public final double verticalPositionErrorMeters;
+    field public static final androidx.health.services.client.data.LocationAccuracy.Companion Companion;
+  }
+
+  public static final class LocationAccuracy.Companion {
+  }
+
+  public final class LocationAvailability implements androidx.health.services.client.data.Availability {
+    method public static androidx.health.services.client.data.LocationAvailability? fromId(int id);
+    method public int getId();
+    method public String getName();
+    property public int id;
+    property public final String name;
+    field public static final androidx.health.services.client.data.LocationAvailability ACQUIRED_TETHERED;
+    field public static final androidx.health.services.client.data.LocationAvailability ACQUIRED_UNTETHERED;
+    field public static final androidx.health.services.client.data.LocationAvailability ACQUIRING;
+    field public static final androidx.health.services.client.data.LocationAvailability.Companion Companion;
+    field public static final androidx.health.services.client.data.LocationAvailability NO_GNSS;
+    field public static final androidx.health.services.client.data.LocationAvailability UNAVAILABLE;
+    field public static final androidx.health.services.client.data.LocationAvailability UNKNOWN;
+  }
+
+  public static final class LocationAvailability.Companion {
+    method public androidx.health.services.client.data.LocationAvailability? fromId(int id);
+  }
+
+  public final class LocationData {
+    ctor public LocationData(@FloatRange(from=-90.0, to=90.0) double latitude, @FloatRange(from=-180.0, to=180.0) double longitude, optional double altitude, optional double bearing);
+    method public double getAltitude();
+    method public double getBearing();
+    method public double getLatitude();
+    method public double getLongitude();
+    property public final double altitude;
+    property public final double bearing;
+    property public final double latitude;
+    property public final double longitude;
+    field public static final double ALTITUDE_UNAVAILABLE = (0.0/0.0);
+    field public static final double BEARING_UNAVAILABLE = (0.0/0.0);
+  }
+
+  public final class MeasureCapabilities {
+    ctor public MeasureCapabilities(java.util.Set<? extends androidx.health.services.client.data.DeltaDataType<?,?>> supportedDataTypesMeasure);
+    method public java.util.Set<androidx.health.services.client.data.DeltaDataType<?,?>> getSupportedDataTypesMeasure();
+    property public final java.util.Set<androidx.health.services.client.data.DeltaDataType<?,?>> supportedDataTypesMeasure;
+  }
+
+  public final class MilestoneMarkerSummary {
+    ctor public MilestoneMarkerSummary(java.time.Instant startTime, java.time.Instant endTime, java.time.Duration activeDuration, androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number> achievedGoal, androidx.health.services.client.data.DataPointContainer summaryMetrics);
+    method public androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number> getAchievedGoal();
+    method public java.time.Duration getActiveDuration();
+    method public java.time.Instant getEndTime();
+    method public java.time.Instant getStartTime();
+    method public androidx.health.services.client.data.DataPointContainer getSummaryMetrics();
+    property public final androidx.health.services.client.data.ExerciseGoal<? extends java.lang.Number> achievedGoal;
+    property public final java.time.Duration activeDuration;
+    property public final java.time.Instant endTime;
+    property public final java.time.Instant startTime;
+    property public final androidx.health.services.client.data.DataPointContainer summaryMetrics;
+  }
+
+  public final class PassiveGoal {
+    ctor public PassiveGoal(androidx.health.services.client.data.DataTypeCondition<? extends java.lang.Number,? extends androidx.health.services.client.data.DeltaDataType<? extends java.lang.Number,?>> dataTypeCondition);
+    method public androidx.health.services.client.data.DataTypeCondition<? extends java.lang.Number,? extends androidx.health.services.client.data.DeltaDataType<? extends java.lang.Number,?>> getDataTypeCondition();
+    property public final androidx.health.services.client.data.DataTypeCondition<? extends java.lang.Number,? extends androidx.health.services.client.data.DeltaDataType<? extends java.lang.Number,?>> dataTypeCondition;
+  }
+
+  public final class PassiveListenerConfig {
+    ctor public PassiveListenerConfig(java.util.Set<? extends androidx.health.services.client.data.DataType<? extends java.lang.Object,? extends androidx.health.services.client.data.DataPoint<?>>> dataTypes, boolean shouldUserActivityInfoBeRequested, java.util.Set<androidx.health.services.client.data.PassiveGoal> dailyGoals, java.util.Set<androidx.health.services.client.data.HealthEvent.Type> healthEventTypes);
+    method public static androidx.health.services.client.data.PassiveListenerConfig.Builder builder();
+    method public java.util.Set<androidx.health.services.client.data.PassiveGoal> getDailyGoals();
+    method public java.util.Set<androidx.health.services.client.data.DataType<? extends java.lang.Object,? extends androidx.health.services.client.data.DataPoint<?>>> getDataTypes();
+    method public java.util.Set<androidx.health.services.client.data.HealthEvent.Type> getHealthEventTypes();
+    method public boolean getShouldUserActivityInfoBeRequested();
+    property public final java.util.Set<androidx.health.services.client.data.PassiveGoal> dailyGoals;
+    property public final java.util.Set<androidx.health.services.client.data.DataType<? extends java.lang.Object,? extends androidx.health.services.client.data.DataPoint<?>>> dataTypes;
+    property public final java.util.Set<androidx.health.services.client.data.HealthEvent.Type> healthEventTypes;
+    property public final boolean shouldUserActivityInfoBeRequested;
+    field public static final androidx.health.services.client.data.PassiveListenerConfig.Companion Companion;
+  }
+
+  public static final class PassiveListenerConfig.Builder {
+    ctor public PassiveListenerConfig.Builder();
+    method public androidx.health.services.client.data.PassiveListenerConfig build();
+    method public androidx.health.services.client.data.PassiveListenerConfig.Builder setDailyGoals(java.util.Set<androidx.health.services.client.data.PassiveGoal> dailyGoals);
+    method public androidx.health.services.client.data.PassiveListenerConfig.Builder setDataTypes(java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> dataTypes);
+    method public androidx.health.services.client.data.PassiveListenerConfig.Builder setHealthEventTypes(java.util.Set<androidx.health.services.client.data.HealthEvent.Type> healthEventTypes);
+    method public androidx.health.services.client.data.PassiveListenerConfig.Builder setShouldUserActivityInfoBeRequested(boolean shouldUserActivityInfoBeRequested);
+  }
+
+  public static final class PassiveListenerConfig.Companion {
+    method public androidx.health.services.client.data.PassiveListenerConfig.Builder builder();
+  }
+
+  public final class PassiveMonitoringCapabilities {
+    ctor public PassiveMonitoringCapabilities(java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> supportedDataTypesPassiveMonitoring, java.util.Set<? extends androidx.health.services.client.data.DataType<?,?>> supportedDataTypesPassiveGoals, java.util.Set<androidx.health.services.client.data.HealthEvent.Type> supportedHealthEventTypes, java.util.Set<androidx.health.services.client.data.UserActivityState> supportedUserActivityStates);
+    method public java.util.Set<androidx.health.services.client.data.DataType<?,?>> getSupportedDataTypesPassiveGoals();
+    method public java.util.Set<androidx.health.services.client.data.DataType<?,?>> getSupportedDataTypesPassiveMonitoring();
+    method public java.util.Set<androidx.health.services.client.data.HealthEvent.Type> getSupportedHealthEventTypes();
+    method public java.util.Set<androidx.health.services.client.data.UserActivityState> getSupportedUserActivityStates();
+    property public final java.util.Set<androidx.health.services.client.data.DataType<?,?>> supportedDataTypesPassiveGoals;
+    property public final java.util.Set<androidx.health.services.client.data.DataType<?,?>> supportedDataTypesPassiveMonitoring;
+    property public final java.util.Set<androidx.health.services.client.data.HealthEvent.Type> supportedHealthEventTypes;
+    property public final java.util.Set<androidx.health.services.client.data.UserActivityState> supportedUserActivityStates;
+  }
+
+  public final class PassiveMonitoringUpdate {
+    ctor public PassiveMonitoringUpdate(androidx.health.services.client.data.DataPointContainer dataPoints, java.util.List<androidx.health.services.client.data.UserActivityInfo> userActivityInfoUpdates);
+    method public androidx.health.services.client.data.DataPointContainer getDataPoints();
+    method public java.util.List<androidx.health.services.client.data.UserActivityInfo> getUserActivityInfoUpdates();
+    property public final androidx.health.services.client.data.DataPointContainer dataPoints;
+    property public final java.util.List<androidx.health.services.client.data.UserActivityInfo> userActivityInfoUpdates;
+  }
+
+  public final class SampleDataPoint<T> extends androidx.health.services.client.data.DataPoint<T> {
+    ctor public SampleDataPoint(androidx.health.services.client.data.DataType<T,androidx.health.services.client.data.SampleDataPoint<T>> dataType, T value, java.time.Duration timeDurationFromBoot, optional android.os.Bundle metadata, optional androidx.health.services.client.data.DataPointAccuracy? accuracy);
+    method public androidx.health.services.client.data.DataPointAccuracy? getAccuracy();
+    method public androidx.health.services.client.data.DataType<T,androidx.health.services.client.data.SampleDataPoint<T>> getDataType();
+    method public android.os.Bundle getMetadata();
+    method public java.time.Duration getTimeDurationFromBoot();
+    method public java.time.Instant getTimeInstant(java.time.Instant bootInstant);
+    method public T getValue();
+    property public final androidx.health.services.client.data.DataPointAccuracy? accuracy;
+    property public androidx.health.services.client.data.DataType<T,androidx.health.services.client.data.SampleDataPoint<T>> dataType;
+    property public final android.os.Bundle metadata;
+    property public final java.time.Duration timeDurationFromBoot;
+    property public final T value;
+  }
+
+  public final class StatisticalDataPoint<T extends java.lang.Number> extends androidx.health.services.client.data.DataPoint<T> {
+    ctor public StatisticalDataPoint(androidx.health.services.client.data.AggregateDataType<T,androidx.health.services.client.data.StatisticalDataPoint<T>> dataType, T min, T max, T average, java.time.Instant start, java.time.Instant end);
+    method public T getAverage();
+    method public java.time.Instant getEnd();
+    method public T getMax();
+    method public T getMin();
+    method public java.time.Instant getStart();
+    property public final T average;
+    property public final java.time.Instant end;
+    property public final T max;
+    property public final T min;
+    property public final java.time.Instant start;
+    field public static final androidx.health.services.client.data.StatisticalDataPoint.Companion Companion;
+  }
+
+  public static final class StatisticalDataPoint.Companion {
+  }
+
+  public final class UserActivityInfo {
+    ctor public UserActivityInfo(androidx.health.services.client.data.UserActivityState userActivityState, androidx.health.services.client.data.ExerciseInfo? exerciseInfo, java.time.Instant stateChangeTime);
+    method public static androidx.health.services.client.data.UserActivityInfo createActiveExerciseState(androidx.health.services.client.data.ExerciseInfo exerciseInfo, java.time.Instant stateChangeTime);
+    method public static androidx.health.services.client.data.UserActivityInfo createAsleepState(java.time.Instant stateChangeTime);
+    method public static androidx.health.services.client.data.UserActivityInfo createPassiveActivityState(java.time.Instant stateChangeTime);
+    method public static androidx.health.services.client.data.UserActivityInfo createUnknownTypeState(java.time.Instant stateChangeTime);
+    method public androidx.health.services.client.data.ExerciseInfo? getExerciseInfo();
+    method public java.time.Instant getStateChangeTime();
+    method public androidx.health.services.client.data.UserActivityState getUserActivityState();
+    property public final androidx.health.services.client.data.ExerciseInfo? exerciseInfo;
+    property public final java.time.Instant stateChangeTime;
+    property public final androidx.health.services.client.data.UserActivityState userActivityState;
+    field public static final androidx.health.services.client.data.UserActivityInfo.Companion Companion;
+  }
+
+  public static final class UserActivityInfo.Companion {
+    method public androidx.health.services.client.data.UserActivityInfo createActiveExerciseState(androidx.health.services.client.data.ExerciseInfo exerciseInfo, java.time.Instant stateChangeTime);
+    method public androidx.health.services.client.data.UserActivityInfo createAsleepState(java.time.Instant stateChangeTime);
+    method public androidx.health.services.client.data.UserActivityInfo createPassiveActivityState(java.time.Instant stateChangeTime);
+    method public androidx.health.services.client.data.UserActivityInfo createUnknownTypeState(java.time.Instant stateChangeTime);
+  }
+
+  public final class UserActivityState {
+    ctor public UserActivityState(int id, String name);
+    method public int getId();
+    method public String getName();
+    property public final int id;
+    property public final String name;
+    field public static final androidx.health.services.client.data.UserActivityState.Companion Companion;
+    field public static final androidx.health.services.client.data.UserActivityState USER_ACTIVITY_ASLEEP;
+    field public static final androidx.health.services.client.data.UserActivityState USER_ACTIVITY_EXERCISE;
+    field public static final androidx.health.services.client.data.UserActivityState USER_ACTIVITY_PASSIVE;
+    field public static final androidx.health.services.client.data.UserActivityState USER_ACTIVITY_UNKNOWN;
+  }
+
+  public static final class UserActivityState.Companion {
+  }
+
+  public final class WarmUpConfig {
+    ctor public WarmUpConfig(androidx.health.services.client.data.ExerciseType exerciseType, java.util.Set<? extends androidx.health.services.client.data.DeltaDataType<?,?>> dataTypes);
+    method public java.util.Set<androidx.health.services.client.data.DeltaDataType<?,?>> getDataTypes();
+    method public androidx.health.services.client.data.ExerciseType getExerciseType();
+    property public final java.util.Set<androidx.health.services.client.data.DeltaDataType<?,?>> dataTypes;
+    property public final androidx.health.services.client.data.ExerciseType exerciseType;
+  }
+
+}
+
diff --git a/libraryversions.toml b/libraryversions.toml
index 0bb99db..bd40bae 100644
--- a/libraryversions.toml
+++ b/libraryversions.toml
@@ -1,5 +1,5 @@
 [versions]
-ACTIVITY = "1.7.0-alpha02"
+ACTIVITY = "1.7.0-alpha03"
 ADS_IDENTIFIER = "1.0.0-alpha05"
 ANNOTATION = "1.6.0-alpha01"
 ANNOTATION_EXPERIMENTAL = "1.4.0-alpha01"
@@ -8,19 +8,19 @@
 ARCH_CORE = "2.2.0-alpha01"
 ASYNCLAYOUTINFLATER = "1.1.0-alpha02"
 AUTOFILL = "1.2.0-beta02"
-BENCHMARK = "1.2.0-alpha06"
+BENCHMARK = "1.2.0-alpha07"
 BIOMETRIC = "1.2.0-alpha06"
 BLUETOOTH = "1.0.0-alpha01"
-BROWSER = "1.5.0-alpha01"
+BROWSER = "1.5.0-alpha02"
 BUILDSRC_TESTS = "1.0.0-alpha01"
 CAMERA = "1.3.0-alpha01"
 CAMERA_PIPE = "1.0.0-alpha01"
 CARDVIEW = "1.1.0-alpha01"
 CAR_APP = "1.3.0-beta02"
 COLLECTION = "1.3.0-dev01"
-COMPOSE = "1.4.0-alpha01"
+COMPOSE = "1.4.0-alpha02"
 COMPOSE_COMPILER = "1.3.3"
-COMPOSE_MATERIAL3 = "1.1.0-alpha01"
+COMPOSE_MATERIAL3 = "1.1.0-alpha02"
 COMPOSE_RUNTIME_TRACING = "1.0.0-alpha01"
 CONSTRAINTLAYOUT = "2.2.0-alpha05"
 CONSTRAINTLAYOUT_COMPOSE = "1.1.0-alpha05"
@@ -56,14 +56,14 @@
 FUTURES = "1.2.0-alpha01"
 GLANCE = "1.0.0-alpha06"
 GLANCE_TEMPLATE = "1.0.0-alpha01"
-GRAPHICS = "1.0.0-alpha01"
+GRAPHICS = "1.0.0-alpha02"
 GRIDLAYOUT = "1.1.0-alpha01"
-HEALTH_CONNECT = "1.0.0-alpha07"
-HEALTH_SERVICES_CLIENT = "1.0.0-beta01"
+HEALTH_CONNECT = "1.0.0-alpha08"
+HEALTH_SERVICES_CLIENT = "1.0.0-beta02"
 HEIFWRITER = "1.1.0-alpha02"
 HILT = "1.1.0-alpha01"
 HILT_NAVIGATION_COMPOSE = "1.1.0-alpha01"
-INPUT_MOTIONPREDICTION = "1.0.0-alpha01"
+INPUT_MOTIONPREDICTION = "1.0.0-alpha02"
 INSPECTION = "1.0.0"
 INTERPOLATOR = "1.1.0-alpha01"
 JAVASCRIPTENGINE = "1.0.0-alpha03"
@@ -74,23 +74,23 @@
 LEANBACK_TAB = "1.1.0-beta01"
 LEGACY = "1.1.0-alpha01"
 LIBYUV = "0.1.0-dev01"
-LIFECYCLE = "2.6.0-alpha03"
+LIFECYCLE = "2.6.0-alpha04"
 LIFECYCLE_EXTENSIONS = "2.2.0"
 LOADER = "1.2.0-alpha01"
 MEDIA = "1.7.0-alpha01"
 MEDIA2 = "1.3.0-alpha01"
 MEDIAROUTER = "1.4.0-alpha01"
 METRICS = "1.0.0-alpha04"
-NAVIGATION = "2.6.0-alpha03"
-PAGING = "3.2.0-alpha03"
-PAGING_COMPOSE = "1.0.0-alpha17"
+NAVIGATION = "2.6.0-alpha04"
+PAGING = "3.2.0-alpha04"
+PAGING_COMPOSE = "1.0.0-alpha18"
 PALETTE = "1.1.0-alpha01"
 PERCENTLAYOUT = "1.1.0-alpha01"
 PREFERENCE = "1.3.0-alpha01"
 PRINT = "1.1.0-beta01"
 PRIVACYSANDBOX_SDKRUNTIME = "1.0.0-alpha01"
 PRIVACYSANDBOX_TOOLS = "1.0.0-alpha01"
-PROFILEINSTALLER = "1.3.0-alpha01"
+PROFILEINSTALLER = "1.3.0-alpha02"
 RECOMMENDATION = "1.1.0-alpha01"
 RECYCLERVIEW = "1.4.0-alpha01"
 RECYCLERVIEW_SELECTION = "1.2.0-alpha02"
@@ -118,7 +118,7 @@
 TEST_UIAUTOMATOR = "2.3.0-alpha02"
 TEXT = "1.0.0-alpha01"
 TRACING = "1.2.0-alpha02"
-TRACING_PERFETTO = "1.0.0-alpha06"
+TRACING_PERFETTO = "1.0.0-alpha07"
 TRANSITION = "1.5.0-alpha01"
 TV = "1.0.0-alpha02"
 TVPROVIDER = "1.1.0-alpha02"
@@ -129,7 +129,7 @@
 VIEWPAGER = "1.1.0-alpha02"
 VIEWPAGER2 = "1.2.0-alpha01"
 WEAR = "1.3.0-alpha04"
-WEAR_COMPOSE = "1.1.0-beta01"
+WEAR_COMPOSE = "1.1.0-beta02"
 WEAR_INPUT = "1.2.0-alpha03"
 WEAR_INPUT_TESTING = "1.2.0-alpha03"
 WEAR_ONGOING = "1.1.0-alpha01"
@@ -137,7 +137,7 @@
 WEAR_REMOTE_INTERACTIONS = "1.1.0-alpha01"
 WEAR_TILES = "1.2.0-alpha01"
 WEAR_WATCHFACE = "1.2.0-alpha04"
-WEBKIT = "1.6.0-alpha02"
+WEBKIT = "1.6.0-alpha03"
 WINDOW = "1.1.0-alpha04"
 WINDOW_EXTENSIONS = "1.1.0-alpha02"
 WINDOW_SIDECAR = "1.0.0-rc01"
diff --git a/lifecycle/lifecycle-viewmodel-savedstate/src/androidTest/java/androidx/lifecycle/viewmodel/savedstate/SavedStateFactoryTest.kt b/lifecycle/lifecycle-viewmodel-savedstate/src/androidTest/java/androidx/lifecycle/viewmodel/savedstate/SavedStateFactoryTest.kt
index 59b07b8..12fe0e0 100644
--- a/lifecycle/lifecycle-viewmodel-savedstate/src/androidTest/java/androidx/lifecycle/viewmodel/savedstate/SavedStateFactoryTest.kt
+++ b/lifecycle/lifecycle-viewmodel-savedstate/src/androidTest/java/androidx/lifecycle/viewmodel/savedstate/SavedStateFactoryTest.kt
@@ -119,7 +119,7 @@
         try {
             vm[MyAndroidViewModel::class.java]
             fail("Creating an AndroidViewModel should fail when no Application is provided")
-        } catch (e: NoSuchMethodException) {
+        } catch (e: RuntimeException) {
             // Exception message varies across platform versions, just make sure it's thrown.
         }
         assertThat(vm[MyViewModel::class.java].handle).isNotNull()
diff --git a/lifecycle/lifecycle-viewmodel/src/main/java/androidx/lifecycle/ViewModelProvider.kt b/lifecycle/lifecycle-viewmodel/src/main/java/androidx/lifecycle/ViewModelProvider.kt
index ae7b4ab..cac0383 100644
--- a/lifecycle/lifecycle-viewmodel/src/main/java/androidx/lifecycle/ViewModelProvider.kt
+++ b/lifecycle/lifecycle-viewmodel/src/main/java/androidx/lifecycle/ViewModelProvider.kt
@@ -200,6 +200,8 @@
         override fun <T : ViewModel> create(modelClass: Class<T>): T {
             return try {
                 modelClass.getDeclaredConstructor().newInstance()
+            } catch (e: NoSuchMethodException) {
+                throw RuntimeException("Cannot create an instance of $modelClass", e)
             } catch (e: InstantiationException) {
                 throw RuntimeException("Cannot create an instance of $modelClass", e)
             } catch (e: IllegalAccessException) {
diff --git a/lint-checks/src/main/java/androidx/build/lint/ClassVerificationFailureDetector.kt b/lint-checks/src/main/java/androidx/build/lint/ClassVerificationFailureDetector.kt
index 810f79e..f8d3070 100644
--- a/lint-checks/src/main/java/androidx/build/lint/ClassVerificationFailureDetector.kt
+++ b/lint-checks/src/main/java/androidx/build/lint/ClassVerificationFailureDetector.kt
@@ -36,7 +36,6 @@
 import com.android.tools.lint.detector.api.Scope
 import com.android.tools.lint.detector.api.Severity
 import com.android.tools.lint.detector.api.SourceCodeScanner
-import com.android.tools.lint.detector.api.SourceSetType
 import com.android.tools.lint.detector.api.UastLintUtils.Companion.getLongAttribute
 import com.android.tools.lint.detector.api.VersionChecks
 import com.android.tools.lint.detector.api.VersionChecks.Companion.REQUIRES_API_ANNOTATION
@@ -422,7 +421,7 @@
 
             // Builtin R8 desugaring, such as rewriting compare calls (see b/36390874)
             if (owner.startsWith("java.") &&
-                DesugaredMethodLookup.isDesugared(owner, name, desc, SourceSetType.MAIN)) {
+                DesugaredMethodLookup.isDesugared(owner, name, desc, context.sourceSetType)) {
                 return
             }
 
diff --git a/lint-checks/src/test/java/androidx/build/lint/BanUncheckedReflectionTest.kt b/lint-checks/src/test/java/androidx/build/lint/BanUncheckedReflectionTest.kt
index 34809e2..ff3be40 100644
--- a/lint-checks/src/test/java/androidx/build/lint/BanUncheckedReflectionTest.kt
+++ b/lint-checks/src/test/java/androidx/build/lint/BanUncheckedReflectionTest.kt
@@ -19,8 +19,6 @@
 package androidx.build.lint
 
 import androidx.build.lint.Stubs.Companion.RestrictTo
-import com.android.tools.lint.checks.infrastructure.TestMode
-import org.junit.Ignore
 import org.junit.Test
 import org.junit.runner.RunWith
 import org.junit.runners.JUnit4
@@ -32,7 +30,6 @@
     stubs = arrayOf(Stubs.ChecksSdkIntAtLeast),
 ) {
 
-    @Ignore("b/251883059")
     @Test
     fun `Detection of unchecked reflection in real-world Java sources`() {
         val input = arrayOf(
@@ -42,23 +39,19 @@
 
         /* ktlint-disable max-line-length */
         val expected = """
-src/androidx/sample/core/app/ActivityRecreator.java:145: Error: Calling Method.invoke without an SDK check [BanUncheckedReflection]
-                    requestRelaunchActivityMethod.invoke(activityThread,
-                    ^
 src/androidx/sample/core/app/ActivityRecreator.java:262: Error: Calling Method.invoke without an SDK check [BanUncheckedReflection]
                         performStopActivity3ParamsMethod.invoke(activityThread,
                         ^
 src/androidx/sample/core/app/ActivityRecreator.java:265: Error: Calling Method.invoke without an SDK check [BanUncheckedReflection]
                         performStopActivity2ParamsMethod.invoke(activityThread,
                         ^
-3 errors, 0 warnings
+2 errors, 0 warnings
         """.trimIndent()
         /* ktlint-enable max-line-length */
 
         check(*input).expect(expected)
     }
 
-    @Ignore("b/251883059")
     @Test
     fun `Detection of unchecked reflection in real-world Kotlin sources`() {
         val input = arrayOf(
@@ -68,23 +61,18 @@
 
         /* ktlint-disable max-line-length */
         val expected = """
-src/androidx/sample/core/app/ActivityRecreatorKt.kt:130: Error: Calling Method.invoke without an SDK check [BanUncheckedReflection]
-                    requestRelaunchActivityMethod!!.invoke(
-                    ^
 src/androidx/sample/core/app/ActivityRecreatorKt.kt:177: Error: Calling Method.invoke without an SDK check [BanUncheckedReflection]
                         performStopActivity3ParamsMethod!!.invoke(
                         ^
 src/androidx/sample/core/app/ActivityRecreatorKt.kt:182: Error: Calling Method.invoke without an SDK check [BanUncheckedReflection]
                         performStopActivity2ParamsMethod!!.invoke(
                         ^
-3 errors, 0 warnings
+2 errors, 0 warnings
         """.trimIndent()
         /* ktlint-enable max-line-length */
 
         lint()
             .files(*input)
-            // TODO: b/247135738 re-enable IF_TO_WHEN mode
-            .skipTestModes(TestMode.IF_TO_WHEN)
             .run()
             .expect(expected)
     }
@@ -190,4 +178,27 @@
 
         check(*input).expectClean()
     }
+
+    @Test
+    fun `Checked reflection using Kotlin range check`() {
+        val input = arrayOf(
+            kotlin("""
+                package androidx.foo
+
+                import android.os.Build
+
+                fun forceEnablePlatformTracing() {
+                    if (Build.VERSION.SDK_INT in 18..28) {
+                        val method = android.os.Trace::class.java.getMethod(
+                            "setAppTracingAllowed",
+                            Boolean::class.javaPrimitiveType
+                        )
+                        method.invoke(null, true)
+                    }
+                }
+            """.trimIndent())
+        )
+
+        check(*input).expectClean()
+    }
 }
diff --git a/lint-checks/src/test/java/androidx/build/lint/ClassVerificationFailureDetectorTest.kt b/lint-checks/src/test/java/androidx/build/lint/ClassVerificationFailureDetectorTest.kt
index 318e34a..55398d8 100644
--- a/lint-checks/src/test/java/androidx/build/lint/ClassVerificationFailureDetectorTest.kt
+++ b/lint-checks/src/test/java/androidx/build/lint/ClassVerificationFailureDetectorTest.kt
@@ -21,7 +21,6 @@
 import androidx.build.lint.Stubs.Companion.DoNotInline
 import androidx.build.lint.Stubs.Companion.RequiresApi
 import androidx.build.lint.Stubs.Companion.IntRange
-import org.junit.Ignore
 import org.junit.Test
 import org.junit.runner.RunWith
 import org.junit.runners.JUnit4
@@ -187,7 +186,6 @@
         check(*input).expect(expected)
     }
 
-    @Ignore("b/251883059")
     @Test
     fun `Auto-fix unsafe void-type method reference in Java source`() {
         val input = arrayOf(
@@ -201,13 +199,13 @@
 -             view.setBackgroundTintList(new ColorStateList(null, null));
 +             Api21Impl.setBackgroundTintList(view, new ColorStateList(null, null));
 @@ -37 +37
-+ @annotation.RequiresApi(21)
++ @androidx.annotation.RequiresApi(21)
 + static class Api21Impl {
 +     private Api21Impl() {
 +         // This class is not instantiable.
 +     }
 +
-+     @annotation.DoNotInline
++     @androidx.annotation.DoNotInline
 +     static void setBackgroundTintList(View view, ColorStateList tint) {
 +         view.setBackgroundTintList(tint);
 +     }
@@ -220,7 +218,6 @@
         check(*input).expectFixDiffs(expectedFix)
     }
 
-    @Ignore("b/251883059")
     @Test
     fun `Auto-fix unsafe constructor reference in Java source`() {
         val input = arrayOf(
@@ -234,13 +231,13 @@
 -             AccessibilityNodeInfo node = new AccessibilityNodeInfo(new View(context), 1);
 +             AccessibilityNodeInfo node = Api30Impl.createAccessibilityNodeInfo(new View(context), 1);
 @@ -38 +38
-+ @annotation.RequiresApi(30)
++ @androidx.annotation.RequiresApi(30)
 + static class Api30Impl {
 +     private Api30Impl() {
 +         // This class is not instantiable.
 +     }
 +
-+     @annotation.DoNotInline
++     @androidx.annotation.DoNotInline
 +     static AccessibilityNodeInfo createAccessibilityNodeInfo(View root, int virtualDescendantId) {
 +         return new AccessibilityNodeInfo(root, virtualDescendantId);
 +     }
@@ -253,7 +250,6 @@
         check(*input).expectFixDiffs(expectedFix)
     }
 
-    @Ignore("b/251883059")
     @Test
     fun `Auto-fix unsafe static method reference in Java source`() {
         val input = arrayOf(
@@ -267,13 +263,13 @@
 -             return View.generateViewId();
 +             return Api17Impl.generateViewId();
 @@ -37 +37
-+ @annotation.RequiresApi(17)
++ @androidx.annotation.RequiresApi(17)
 + static class Api17Impl {
 +     private Api17Impl() {
 +         // This class is not instantiable.
 +     }
 +
-+     @annotation.DoNotInline
++     @androidx.annotation.DoNotInline
 +     static int generateViewId() {
 +         return View.generateViewId();
 +     }
@@ -286,7 +282,6 @@
         check(*input).expectFixDiffs(expectedFix)
     }
 
-    @Ignore("b/251883059")
     @Test
     fun `Auto-fix unsafe generic-type method reference in Java source`() {
         val input = arrayOf(
@@ -300,13 +295,13 @@
 -             return context.getSystemService(serviceClass);
 +             return Api23Impl.getSystemService(context, serviceClass);
 @@ -38 +38
-+ @annotation.RequiresApi(23)
++ @androidx.annotation.RequiresApi(23)
 + static class Api23Impl {
 +     private Api23Impl() {
 +         // This class is not instantiable.
 +     }
 +
-+     @annotation.DoNotInline
++     @androidx.annotation.DoNotInline
 +     static <T> T getSystemService(Context context, java.lang.Class<T> serviceClass) {
 +         return context.getSystemService(serviceClass);
 +     }
@@ -352,7 +347,6 @@
         check(*input).expectFixDiffs(expectedFix)
     }
 
-    @Ignore("b/251883059")
     @Test
     fun `Auto-fix unsafe reference in Java source when the fix code already exists`() {
         val input = arrayOf(
@@ -383,7 +377,7 @@
 +         Api21Impl.getOutline(drawable, null);
 @@ -58 +58
 -     }
-+     @annotation.DoNotInline
++     @DoNotInline
 + static void getOutline(Drawable drawable, android.graphics.Outline outline) {
 +     drawable.getOutline(outline);
 @@ -60 +62
@@ -395,7 +389,6 @@
         check(*input).expect(expected).expectFixDiffs(expectedFix)
     }
 
-    @Ignore("Ignored until the fix for b/241573146 is in the current version of studio")
     @Test
     fun `Detection and auto-fix for qualified expressions (issue 205026874)`() {
         val input = arrayOf(
@@ -495,7 +488,6 @@
         check(*input).expect(expected).expectFixDiffs(expectedFixDiffs)
     }
 
-    @Ignore("b/251883059")
     @Test
     fun `Auto-fix for unsafe method call on this`() {
         val input = arrayOf(
@@ -522,13 +514,13 @@
 -             getClipToPadding();
 +             Api21Impl.getClipToPadding(this);
 @@ -60 +60
-+ @annotation.RequiresApi(21)
++ @androidx.annotation.RequiresApi(21)
 + static class Api21Impl {
 +     private Api21Impl() {
 +         // This class is not instantiable.
 +     }
 +
-+     @annotation.DoNotInline
++     @androidx.annotation.DoNotInline
 +     static boolean getClipToPadding(ViewGroup viewGroup) {
 +         return viewGroup.getClipToPadding();
 +     }
@@ -540,13 +532,13 @@
 -             this.getClipToPadding();
 +             Api21Impl.getClipToPadding(this);
 @@ -60 +60
-+ @annotation.RequiresApi(21)
++ @androidx.annotation.RequiresApi(21)
 + static class Api21Impl {
 +     private Api21Impl() {
 +         // This class is not instantiable.
 +     }
 +
-+     @annotation.DoNotInline
++     @androidx.annotation.DoNotInline
 +     static boolean getClipToPadding(ViewGroup viewGroup) {
 +         return viewGroup.getClipToPadding();
 +     }
@@ -558,13 +550,13 @@
 -             super.getClipToPadding();
 +             Api21Impl.getClipToPadding(super);
 @@ -60 +60
-+ @annotation.RequiresApi(21)
++ @androidx.annotation.RequiresApi(21)
 + static class Api21Impl {
 +     private Api21Impl() {
 +         // This class is not instantiable.
 +     }
 +
-+     @annotation.DoNotInline
++     @androidx.annotation.DoNotInline
 +     static boolean getClipToPadding(ViewGroup viewGroup) {
 +         return viewGroup.getClipToPadding();
 +     }
@@ -577,7 +569,6 @@
         check(*input).expect(expected).expectFixDiffs(expectedFix)
     }
 
-    @Ignore("b/251883059")
     @Test
     fun `Auto-fix for unsafe method call on cast object (issue 206111383)`() {
         val input = arrayOf(
@@ -598,13 +589,13 @@
 -             ((DisplayCutout) secretDisplayCutout).getSafeInsetTop();
 +             Api28Impl.getSafeInsetTop((DisplayCutout) secretDisplayCutout);
 @@ -35 +35
-+ @annotation.RequiresApi(28)
++ @androidx.annotation.RequiresApi(28)
 + static class Api28Impl {
 +     private Api28Impl() {
 +         // This class is not instantiable.
 +     }
 +
-+     @annotation.DoNotInline
++     @androidx.annotation.DoNotInline
 +     static int getSafeInsetTop(DisplayCutout displayCutout) {
 +         return displayCutout.getSafeInsetTop();
 +     }
diff --git a/paging/paging-common/src/main/kotlin/androidx/paging/PagingDataDiffer.kt b/paging/paging-common/src/main/kotlin/androidx/paging/PagingDataDiffer.kt
index 03a39e0..6765908 100644
--- a/paging/paging-common/src/main/kotlin/androidx/paging/PagingDataDiffer.kt
+++ b/paging/paging-common/src/main/kotlin/androidx/paging/PagingDataDiffer.kt
@@ -17,6 +17,7 @@
 package androidx.paging
 
 import androidx.annotation.IntRange
+import androidx.annotation.MainThread
 import androidx.annotation.RestrictTo
 import androidx.paging.LoadType.APPEND
 import androidx.paging.LoadType.PREPEND
@@ -262,6 +263,7 @@
      * @param index Index of the presented item to return, including placeholders.
      * @return The presented item at position [index], `null` if it is a placeholder.
      */
+    @MainThread
     public operator fun get(@IntRange(from = 0) index: Int): T? {
         lastAccessedIndexUnfulfilled = true
         lastAccessedIndex = index
@@ -278,6 +280,7 @@
      * @param index Index of the presented item to return, including placeholders.
      * @return The presented item at position [index], `null` if it is a placeholder
      */
+    @MainThread
     public fun peek(@IntRange(from = 0) index: Int): T? {
         return presenter.get(index)
     }
diff --git a/paging/paging-runtime/api/current.txt b/paging/paging-runtime/api/current.txt
index 3aba85a..a53ce96 100644
--- a/paging/paging-runtime/api/current.txt
+++ b/paging/paging-runtime/api/current.txt
@@ -31,11 +31,11 @@
     ctor @Deprecated public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
     method public void addLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
     method public void addOnPagesUpdatedListener(kotlin.jvm.functions.Function0<kotlin.Unit> listener);
-    method public T? getItem(@IntRange(from=0L) int index);
+    method @MainThread public T? getItem(@IntRange(from=0L) int index);
     method public int getItemCount();
     method public kotlinx.coroutines.flow.Flow<androidx.paging.CombinedLoadStates> getLoadStateFlow();
     method public kotlinx.coroutines.flow.Flow<kotlin.Unit> getOnPagesUpdatedFlow();
-    method public T? peek(@IntRange(from=0L) int index);
+    method @MainThread public T? peek(@IntRange(from=0L) int index);
     method public void refresh();
     method public void removeLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
     method public void removeOnPagesUpdatedListener(kotlin.jvm.functions.Function0<kotlin.Unit> listener);
@@ -111,12 +111,12 @@
     ctor @Deprecated public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
     method public final void addLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
     method public final void addOnPagesUpdatedListener(kotlin.jvm.functions.Function0<kotlin.Unit> listener);
-    method protected final T? getItem(@IntRange(from=0L) int position);
+    method @MainThread protected final T? getItem(@IntRange(from=0L) int position);
     method public int getItemCount();
     method public final long getItemId(int position);
     method public final kotlinx.coroutines.flow.Flow<androidx.paging.CombinedLoadStates> getLoadStateFlow();
     method public final kotlinx.coroutines.flow.Flow<kotlin.Unit> getOnPagesUpdatedFlow();
-    method public final T? peek(@IntRange(from=0L) int index);
+    method @MainThread public final T? peek(@IntRange(from=0L) int index);
     method public final void refresh();
     method public final void removeLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
     method public final void removeOnPagesUpdatedListener(kotlin.jvm.functions.Function0<kotlin.Unit> listener);
diff --git a/paging/paging-runtime/api/public_plus_experimental_current.txt b/paging/paging-runtime/api/public_plus_experimental_current.txt
index 3aba85a..a53ce96 100644
--- a/paging/paging-runtime/api/public_plus_experimental_current.txt
+++ b/paging/paging-runtime/api/public_plus_experimental_current.txt
@@ -31,11 +31,11 @@
     ctor @Deprecated public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
     method public void addLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
     method public void addOnPagesUpdatedListener(kotlin.jvm.functions.Function0<kotlin.Unit> listener);
-    method public T? getItem(@IntRange(from=0L) int index);
+    method @MainThread public T? getItem(@IntRange(from=0L) int index);
     method public int getItemCount();
     method public kotlinx.coroutines.flow.Flow<androidx.paging.CombinedLoadStates> getLoadStateFlow();
     method public kotlinx.coroutines.flow.Flow<kotlin.Unit> getOnPagesUpdatedFlow();
-    method public T? peek(@IntRange(from=0L) int index);
+    method @MainThread public T? peek(@IntRange(from=0L) int index);
     method public void refresh();
     method public void removeLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
     method public void removeOnPagesUpdatedListener(kotlin.jvm.functions.Function0<kotlin.Unit> listener);
@@ -111,12 +111,12 @@
     ctor @Deprecated public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
     method public final void addLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
     method public final void addOnPagesUpdatedListener(kotlin.jvm.functions.Function0<kotlin.Unit> listener);
-    method protected final T? getItem(@IntRange(from=0L) int position);
+    method @MainThread protected final T? getItem(@IntRange(from=0L) int position);
     method public int getItemCount();
     method public final long getItemId(int position);
     method public final kotlinx.coroutines.flow.Flow<androidx.paging.CombinedLoadStates> getLoadStateFlow();
     method public final kotlinx.coroutines.flow.Flow<kotlin.Unit> getOnPagesUpdatedFlow();
-    method public final T? peek(@IntRange(from=0L) int index);
+    method @MainThread public final T? peek(@IntRange(from=0L) int index);
     method public final void refresh();
     method public final void removeLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
     method public final void removeOnPagesUpdatedListener(kotlin.jvm.functions.Function0<kotlin.Unit> listener);
diff --git a/paging/paging-runtime/api/restricted_current.txt b/paging/paging-runtime/api/restricted_current.txt
index 3aba85a..a53ce96 100644
--- a/paging/paging-runtime/api/restricted_current.txt
+++ b/paging/paging-runtime/api/restricted_current.txt
@@ -31,11 +31,11 @@
     ctor @Deprecated public AsyncPagingDataDiffer(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, androidx.recyclerview.widget.ListUpdateCallback updateCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
     method public void addLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
     method public void addOnPagesUpdatedListener(kotlin.jvm.functions.Function0<kotlin.Unit> listener);
-    method public T? getItem(@IntRange(from=0L) int index);
+    method @MainThread public T? getItem(@IntRange(from=0L) int index);
     method public int getItemCount();
     method public kotlinx.coroutines.flow.Flow<androidx.paging.CombinedLoadStates> getLoadStateFlow();
     method public kotlinx.coroutines.flow.Flow<kotlin.Unit> getOnPagesUpdatedFlow();
-    method public T? peek(@IntRange(from=0L) int index);
+    method @MainThread public T? peek(@IntRange(from=0L) int index);
     method public void refresh();
     method public void removeLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
     method public void removeOnPagesUpdatedListener(kotlin.jvm.functions.Function0<kotlin.Unit> listener);
@@ -111,12 +111,12 @@
     ctor @Deprecated public PagingDataAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T> diffCallback, optional kotlinx.coroutines.CoroutineDispatcher mainDispatcher, optional kotlinx.coroutines.CoroutineDispatcher workerDispatcher);
     method public final void addLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
     method public final void addOnPagesUpdatedListener(kotlin.jvm.functions.Function0<kotlin.Unit> listener);
-    method protected final T? getItem(@IntRange(from=0L) int position);
+    method @MainThread protected final T? getItem(@IntRange(from=0L) int position);
     method public int getItemCount();
     method public final long getItemId(int position);
     method public final kotlinx.coroutines.flow.Flow<androidx.paging.CombinedLoadStates> getLoadStateFlow();
     method public final kotlinx.coroutines.flow.Flow<kotlin.Unit> getOnPagesUpdatedFlow();
-    method public final T? peek(@IntRange(from=0L) int index);
+    method @MainThread public final T? peek(@IntRange(from=0L) int index);
     method public final void refresh();
     method public final void removeLoadStateListener(kotlin.jvm.functions.Function1<? super androidx.paging.CombinedLoadStates,kotlin.Unit> listener);
     method public final void removeOnPagesUpdatedListener(kotlin.jvm.functions.Function0<kotlin.Unit> listener);
diff --git a/paging/paging-runtime/src/main/java/androidx/paging/AsyncPagingDataDiffer.kt b/paging/paging-runtime/src/main/java/androidx/paging/AsyncPagingDataDiffer.kt
index 205bc66..14a7dde 100644
--- a/paging/paging-runtime/src/main/java/androidx/paging/AsyncPagingDataDiffer.kt
+++ b/paging/paging-runtime/src/main/java/androidx/paging/AsyncPagingDataDiffer.kt
@@ -18,6 +18,7 @@
 
 import android.util.Log
 import androidx.annotation.IntRange
+import androidx.annotation.MainThread
 import androidx.lifecycle.Lifecycle
 import androidx.lifecycle.coroutineScope
 import androidx.paging.LoadType.REFRESH
@@ -293,6 +294,7 @@
      * @param index Index of item to get, must be >= 0, and < [itemCount]
      * @return The item, or `null`, if a `null` placeholder is at the specified position.
      */
+    @MainThread
     fun getItem(@IntRange(from = 0) index: Int): T? {
         try {
             inGetItem = true
@@ -309,6 +311,7 @@
      * @param index Index of the presented item to return, including placeholders.
      * @return The presented item at position [index], `null` if it is a placeholder
      */
+    @MainThread
     fun peek(@IntRange(from = 0) index: Int): T? {
         return differBase.peek(index)
     }
diff --git a/paging/paging-runtime/src/main/java/androidx/paging/PagingDataAdapter.kt b/paging/paging-runtime/src/main/java/androidx/paging/PagingDataAdapter.kt
index 28b20bb..d85f5d0 100644
--- a/paging/paging-runtime/src/main/java/androidx/paging/PagingDataAdapter.kt
+++ b/paging/paging-runtime/src/main/java/androidx/paging/PagingDataAdapter.kt
@@ -17,6 +17,7 @@
 package androidx.paging
 
 import androidx.annotation.IntRange
+import androidx.annotation.MainThread
 import androidx.lifecycle.Lifecycle
 import androidx.paging.LoadState.NotLoading
 import androidx.paging.LoadType.REFRESH
@@ -297,6 +298,7 @@
      * @param position Index of the presented item to return, including placeholders.
      * @return The presented item at [position], `null` if it is a placeholder
      */
+    @MainThread
     protected fun getItem(@IntRange(from = 0) position: Int) = differ.getItem(position)
 
     /**
@@ -306,6 +308,7 @@
      * @param index Index of the presented item to return, including placeholders.
      * @return The presented item at position [index], `null` if it is a placeholder.
      */
+    @MainThread
     fun peek(@IntRange(from = 0) index: Int) = differ.peek(index)
 
     /**
diff --git a/privacysandbox/tools/tools-apicompiler/src/main/java/androidx/privacysandbox/tools/apicompiler/generator/SdkCodeGenerator.kt b/privacysandbox/tools/tools-apicompiler/src/main/java/androidx/privacysandbox/tools/apicompiler/generator/SdkCodeGenerator.kt
index 55185ab..c56f35ed 100644
--- a/privacysandbox/tools/tools-apicompiler/src/main/java/androidx/privacysandbox/tools/apicompiler/generator/SdkCodeGenerator.kt
+++ b/privacysandbox/tools/tools-apicompiler/src/main/java/androidx/privacysandbox/tools/apicompiler/generator/SdkCodeGenerator.kt
@@ -19,9 +19,12 @@
 import androidx.privacysandbox.tools.core.model.ParsedApi
 import androidx.privacysandbox.tools.core.generator.AidlCompiler
 import androidx.privacysandbox.tools.core.generator.AidlGenerator
+import androidx.privacysandbox.tools.core.generator.BinderCodeConverter
 import androidx.privacysandbox.tools.core.generator.ClientProxyTypeGenerator
 import androidx.privacysandbox.tools.core.generator.StubDelegatesGenerator
+import androidx.privacysandbox.tools.core.generator.TransportCancellationGenerator
 import androidx.privacysandbox.tools.core.generator.ValueConverterFileGenerator
+import androidx.privacysandbox.tools.core.model.getOnlyService
 import com.google.devtools.ksp.processing.CodeGenerator
 import com.google.devtools.ksp.processing.Dependencies
 import com.squareup.kotlinpoet.FileSpec
@@ -33,18 +36,17 @@
     private val api: ParsedApi,
     private val aidlCompilerPath: Path,
 ) {
+    private val binderCodeConverter = BinderCodeConverter(api)
+
     fun generate() {
+        if (api.services.isEmpty()) {
+            return
+        }
         generateAidlSources()
-        generateValueConverters()
-        generateCallbackProxies()
         generateAbstractSdkProvider()
         generateStubDelegates()
-    }
-
-    private fun generateValueConverters() {
-        api.values.forEach { value ->
-            write(ValueConverterFileGenerator(api, value).generate())
-        }
+        generateValueConverters()
+        generateCallbackProxies()
     }
 
     private fun generateAidlSources() {
@@ -67,22 +69,29 @@
         }
     }
 
-    private fun generateCallbackProxies() {
-        for (callback in api.callbacks) {
-            val classSpec = ClientProxyTypeGenerator(api, callback).generate()
-            write(
-                FileSpec.builder(callback.type.packageName, classSpec.name!!).addType(classSpec)
-                    .build()
-            )
-        }
-    }
-
     private fun generateAbstractSdkProvider() {
         AbstractSdkProviderGenerator(api).generate()?.also(::write)
     }
 
     private fun generateStubDelegates() {
-        StubDelegatesGenerator(api).generate().forEach(::write)
+        val basePackageName = api.getOnlyService().type.packageName
+        val stubDelegateGenerator = StubDelegatesGenerator(basePackageName, binderCodeConverter)
+        api.services.map(stubDelegateGenerator::generate).forEach(::write)
+        api.interfaces.map(stubDelegateGenerator::generate).forEach(::write)
+
+        val transportCancellationGenerator = TransportCancellationGenerator(basePackageName)
+        transportCancellationGenerator.generate().also(::write)
+    }
+
+    private fun generateValueConverters() {
+        val valueConverterFileGenerator = ValueConverterFileGenerator(api)
+        api.values.map(valueConverterFileGenerator::generate).forEach(::write)
+    }
+
+    private fun generateCallbackProxies() {
+        val basePackageName = api.getOnlyService().type.packageName
+        val clientProxyGenerator = ClientProxyTypeGenerator(basePackageName, binderCodeConverter)
+        api.callbacks.map(clientProxyGenerator::generate).forEach(::write)
     }
 
     private fun write(spec: FileSpec) {
diff --git a/privacysandbox/tools/tools-apicompiler/src/test/test-data/testinterface/output/com/mysdk/MyCallbackClientProxy.kt b/privacysandbox/tools/tools-apicompiler/src/test/test-data/testinterface/output/com/mysdk/MyCallbackClientProxy.kt
index 351984d..6fa273f 100644
--- a/privacysandbox/tools/tools-apicompiler/src/test/test-data/testinterface/output/com/mysdk/MyCallbackClientProxy.kt
+++ b/privacysandbox/tools/tools-apicompiler/src/test/test-data/testinterface/output/com/mysdk/MyCallbackClientProxy.kt
@@ -1,17 +1,18 @@
 package com.mysdk
 
 import com.mysdk.ResponseConverter.toParcelable
-import kotlin.Int
-import kotlin.Unit
+import kotlin.coroutines.resume
+import kotlin.coroutines.resumeWithException
+import kotlinx.coroutines.suspendCancellableCoroutine
 
-internal class MyCallbackClientProxy(
-  private val remote: IMyCallback,
+public class MyCallbackClientProxy(
+    private val remote: IMyCallback,
 ) : MyCallback {
-  public override fun onComplete(response: Response): Unit {
-    remote.onComplete(toParcelable(response))
-  }
+    public override fun onComplete(response: Response): Unit {
+        remote.onComplete(toParcelable(response))
+    }
 
-  public override fun onClick(x: Int, y: Int): Unit {
-    remote.onClick(x, y)
-  }
+    public override fun onClick(x: Int, y: Int): Unit {
+        remote.onClick(x, y)
+    }
 }
diff --git a/privacysandbox/tools/tools-apigenerator/src/main/java/androidx/privacysandbox/tools/apigenerator/InterfaceFileGenerator.kt b/privacysandbox/tools/tools-apigenerator/src/main/java/androidx/privacysandbox/tools/apigenerator/InterfaceFileGenerator.kt
index 9c431f0..5394501 100644
--- a/privacysandbox/tools/tools-apigenerator/src/main/java/androidx/privacysandbox/tools/apigenerator/InterfaceFileGenerator.kt
+++ b/privacysandbox/tools/tools-apigenerator/src/main/java/androidx/privacysandbox/tools/apigenerator/InterfaceFileGenerator.kt
@@ -26,15 +26,15 @@
 import com.squareup.kotlinpoet.KModifier
 import com.squareup.kotlinpoet.TypeSpec
 
-internal class InterfaceFileGenerator(private val annotatedInterface: AnnotatedInterface) {
+internal class InterfaceFileGenerator() {
 
-    fun generate(): FileSpec {
-        val annotatedInterface =
+    fun generate(annotatedInterface: AnnotatedInterface): FileSpec {
+        val annotatedInterfaceType =
             TypeSpec.interfaceBuilder(annotatedInterface.type.poetSpec()).build {
                 addFunctions(annotatedInterface.methods.map(::generateInterfaceMethod))
             }
 
-        return FileSpec.get(this.annotatedInterface.type.packageName, annotatedInterface)
+        return FileSpec.get(annotatedInterface.type.packageName, annotatedInterfaceType)
             .toBuilder().build {
             addCommonSettings()
         }
diff --git a/privacysandbox/tools/tools-apigenerator/src/main/java/androidx/privacysandbox/tools/apigenerator/PrivacySandboxApiGenerator.kt b/privacysandbox/tools/tools-apigenerator/src/main/java/androidx/privacysandbox/tools/apigenerator/PrivacySandboxApiGenerator.kt
index 734b235..6417ee2 100644
--- a/privacysandbox/tools/tools-apigenerator/src/main/java/androidx/privacysandbox/tools/apigenerator/PrivacySandboxApiGenerator.kt
+++ b/privacysandbox/tools/tools-apigenerator/src/main/java/androidx/privacysandbox/tools/apigenerator/PrivacySandboxApiGenerator.kt
@@ -20,9 +20,12 @@
 import androidx.privacysandbox.tools.core.model.ParsedApi
 import androidx.privacysandbox.tools.core.generator.AidlCompiler
 import androidx.privacysandbox.tools.core.generator.AidlGenerator
+import androidx.privacysandbox.tools.core.generator.BinderCodeConverter
+import androidx.privacysandbox.tools.core.generator.ClientProxyTypeGenerator
 import androidx.privacysandbox.tools.core.generator.StubDelegatesGenerator
 import androidx.privacysandbox.tools.core.generator.ValueConverterFileGenerator
 import androidx.privacysandbox.tools.core.generator.ValueFileGenerator
+import androidx.privacysandbox.tools.core.model.getOnlyService
 import java.io.File
 import java.nio.file.Files
 import java.nio.file.Path
@@ -52,28 +55,35 @@
         }
 
         val output = outputDirectory.toFile()
-        val sdkApi = ApiStubParser.parse(sdkInterfaceDescriptors)
-        generateBinders(sdkApi, AidlCompiler(aidlCompiler), output)
+        val api = ApiStubParser.parse(sdkInterfaceDescriptors)
 
-        sdkApi.values.forEach {
-            ValueFileGenerator(it).generate().writeTo(output)
-            ValueConverterFileGenerator(sdkApi, it).generate().writeTo(output)
-        }
-        sdkApi.services.forEach {
-            InterfaceFileGenerator(it).generate().writeTo(output)
-            ServiceFactoryFileGenerator(sdkApi, it).generate().writeTo(output)
-        }
-        sdkApi.callbacks.forEach {
-            InterfaceFileGenerator(it).generate().writeTo(output)
-            StubDelegatesGenerator(sdkApi).generateInterfaceStubDelegate(it).writeTo(output)
-        }
+        val basePackageName = api.getOnlyService().type.packageName
+        val binderCodeConverter = BinderCodeConverter(api)
+        val interfaceFileGenerator = InterfaceFileGenerator()
+
+        generateBinders(api, AidlCompiler(aidlCompiler), output)
+        generateStubDelegates(
+            api,
+            basePackageName,
+            binderCodeConverter,
+            interfaceFileGenerator,
+            output
+        )
+        generateClientProxies(
+            api,
+            basePackageName,
+            binderCodeConverter,
+            interfaceFileGenerator,
+            output
+        )
+        generateValueConverters(api, output)
     }
 
-    private fun generateBinders(sdkApi: ParsedApi, aidlCompiler: AidlCompiler, output: File) {
+    private fun generateBinders(api: ParsedApi, aidlCompiler: AidlCompiler, output: File) {
         val aidlWorkingDir = output.resolve("tmp-aidl").also { it.mkdir() }
         try {
             val generatedFiles =
-                AidlGenerator.generate(aidlCompiler, sdkApi, aidlWorkingDir.toPath())
+                AidlGenerator.generate(aidlCompiler, api, aidlWorkingDir.toPath())
             generatedFiles.forEach {
                 val relativePath = aidlWorkingDir.toPath().relativize(it.file.toPath())
                 val source = it.file.toPath()
@@ -85,4 +95,43 @@
             aidlWorkingDir.deleteRecursively()
         }
     }
+
+    private fun generateStubDelegates(
+        api: ParsedApi,
+        basePackageName: String,
+        binderCodeConverter: BinderCodeConverter,
+        interfaceFileGenerator: InterfaceFileGenerator,
+        output: File
+    ) {
+        val stubDelegateGenerator = StubDelegatesGenerator(basePackageName, binderCodeConverter)
+        api.callbacks.forEach {
+            interfaceFileGenerator.generate(it).writeTo(output)
+            stubDelegateGenerator.generate(it).writeTo(output)
+        }
+    }
+
+    private fun generateClientProxies(
+        api: ParsedApi,
+        basePackageName: String,
+        binderCodeConverter: BinderCodeConverter,
+        interfaceFileGenerator: InterfaceFileGenerator,
+        output: File
+    ) {
+        val clientProxyGenerator = ClientProxyTypeGenerator(basePackageName, binderCodeConverter)
+        val serviceFactoryFileGenerator = ServiceFactoryFileGenerator()
+        api.services.forEach {
+            interfaceFileGenerator.generate(it).writeTo(output)
+            clientProxyGenerator.generate(it).writeTo(output)
+            serviceFactoryFileGenerator.generate(it).writeTo(output)
+        }
+    }
+
+    private fun generateValueConverters(api: ParsedApi, output: File) {
+        val valueFileGenerator = ValueFileGenerator()
+        val valueConverterFileGenerator = ValueConverterFileGenerator(api)
+        api.values.forEach {
+            valueFileGenerator.generate(it).writeTo(output)
+            valueConverterFileGenerator.generate(it).writeTo(output)
+        }
+    }
 }
\ No newline at end of file
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 443875e..89baf13 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
@@ -16,14 +16,14 @@
 
 package androidx.privacysandbox.tools.apigenerator
 
-import androidx.privacysandbox.tools.core.generator.ClientProxyTypeGenerator
 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.aidlInterfaceNameSpec
 import androidx.privacysandbox.tools.core.generator.build
+import androidx.privacysandbox.tools.core.generator.clientProxyNameSpec
 import androidx.privacysandbox.tools.core.model.AnnotatedInterface
-import androidx.privacysandbox.tools.core.model.ParsedApi
 import com.squareup.kotlinpoet.ClassName
 import com.squareup.kotlinpoet.CodeBlock
 import com.squareup.kotlinpoet.FileSpec
@@ -32,25 +32,18 @@
 import com.squareup.kotlinpoet.ParameterSpec
 import com.squareup.kotlinpoet.joinToCode
 
-internal class ServiceFactoryFileGenerator(
-    api: ParsedApi,
-    private val service: AnnotatedInterface
-) {
-    private val proxyTypeGenerator = ClientProxyTypeGenerator(api, service)
-
-    fun generate(): FileSpec =
+internal class ServiceFactoryFileGenerator() {
+    fun generate(service: AnnotatedInterface): FileSpec =
         FileSpec.builder(service.type.packageName, "${service.type.simpleName}Factory").build {
             addCommonSettings()
             addImport("kotlinx.coroutines", "suspendCancellableCoroutine")
             addImport("kotlin.coroutines", "resume")
             addImport("kotlin.coroutines", "resumeWithException")
 
-            addFunction(generateFactoryFunction())
-
-            addType(proxyTypeGenerator.generate(KModifier.PRIVATE))
+            addFunction(generateFactoryFunction(service))
         }
 
-    private fun generateFactoryFunction() =
+    private fun generateFactoryFunction(service: AnnotatedInterface) =
         FunSpec.builder("create${service.type.simpleName}").build {
             addModifiers(KModifier.SUSPEND)
             addParameter(ParameterSpec("context", AndroidClassNames.context))
@@ -73,8 +66,7 @@
                         ) {
                             addStatement(
                                 "it.resume(%T(%T.Stub.asInterface(result.getInterface())))",
-                                proxyTypeGenerator.className,
-                                proxyTypeGenerator.remoteBinderClassName
+                                service.clientProxyNameSpec(), service.aidlInterfaceNameSpec()
                             )
                         }
                         addControlFlow(
diff --git a/privacysandbox/tools/tools-apigenerator/src/test/test-data/callbacks/output/com/sdkwithcallbacks/SdkServiceClientProxy.kt b/privacysandbox/tools/tools-apigenerator/src/test/test-data/callbacks/output/com/sdkwithcallbacks/SdkServiceClientProxy.kt
new file mode 100644
index 0000000..4ed15f2
--- /dev/null
+++ b/privacysandbox/tools/tools-apigenerator/src/test/test-data/callbacks/output/com/sdkwithcallbacks/SdkServiceClientProxy.kt
@@ -0,0 +1,32 @@
+package com.sdkwithcallbacks
+
+import kotlin.coroutines.resume
+import kotlin.coroutines.resumeWithException
+import kotlinx.coroutines.suspendCancellableCoroutine
+
+public class SdkServiceClientProxy(
+    private val remote: ISdkService,
+) : SdkService {
+    public override suspend fun registerCallback(callback: SdkCallback): 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.registerCallback(SdkCallbackStubDelegate(callback), transactionCallback)
+        it.invokeOnCancellation {
+            mCancellationSignal?.cancel()
+        }
+    }
+}
diff --git a/privacysandbox/tools/tools-apigenerator/src/test/test-data/callbacks/output/com/sdkwithcallbacks/SdkServiceFactory.kt b/privacysandbox/tools/tools-apigenerator/src/test/test-data/callbacks/output/com/sdkwithcallbacks/SdkServiceFactory.kt
index 66c836d..0936943 100644
--- a/privacysandbox/tools/tools-apigenerator/src/test/test-data/callbacks/output/com/sdkwithcallbacks/SdkServiceFactory.kt
+++ b/privacysandbox/tools/tools-apigenerator/src/test/test-data/callbacks/output/com/sdkwithcallbacks/SdkServiceFactory.kt
@@ -22,30 +22,3 @@
     }
     sdkSandboxManager.loadSdk("com.sdkwithcallbacks", Bundle.EMPTY, Runnable::run, outcomeReceiver)
 }
-
-private class SdkServiceClientProxy(
-    private val remote: ISdkService,
-) : SdkService {
-    public override suspend fun registerCallback(callback: SdkCallback): 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.registerCallback(SdkCallbackStubDelegate(callback), transactionCallback)
-        it.invokeOnCancellation {
-            mCancellationSignal?.cancel()
-        }
-    }
-}
diff --git a/privacysandbox/tools/tools-apigenerator/src/test/test-data/primitives/output/com/mysdk/TestSandboxSdkClientProxy.kt b/privacysandbox/tools/tools-apigenerator/src/test/test-data/primitives/output/com/mysdk/TestSandboxSdkClientProxy.kt
new file mode 100644
index 0000000..607b29e
--- /dev/null
+++ b/privacysandbox/tools/tools-apigenerator/src/test/test-data/primitives/output/com/mysdk/TestSandboxSdkClientProxy.kt
@@ -0,0 +1,97 @@
+package com.mysdk
+
+import kotlin.coroutines.resume
+import kotlin.coroutines.resumeWithException
+import kotlinx.coroutines.suspendCancellableCoroutine
+
+public 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/primitives/output/com/mysdk/TestSandboxSdkFactory.kt b/privacysandbox/tools/tools-apigenerator/src/test/test-data/primitives/output/com/mysdk/TestSandboxSdkFactory.kt
index db64c34..6bc1a04 100644
--- 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
@@ -23,95 +23,3 @@
     }
     sdkSandboxManager.loadSdk("com.mysdk", Bundle.EMPTY, Runnable::run, outcomeReceiver)
 }
-
-private class TestSandboxSdkClientProxy(
-    private val remote: ITestSandboxSdk,
-) : TestSandboxSdk {
-    public override suspend fun doSomethingAsync(
-        first: Int,
-        second: String,
-        third: Long,
-    ): Boolean = suspendCancellableCoroutine {
-        var mCancellationSignal: ICancellationSignal? = null
-        val transactionCallback = object: IBooleanTransactionCallback.Stub() {
-            override fun onCancellable(cancellationSignal: ICancellationSignal) {
-                if (it.isCancelled) {
-                    cancellationSignal.cancel()
-                }
-                mCancellationSignal = cancellationSignal
-            }
-            override fun onSuccess(result: Boolean) {
-                it.resumeWith(Result.success(result))
-            }
-            override fun onFailure(errorCode: Int, errorMessage: String) {
-                it.resumeWithException(RuntimeException(errorMessage))
-            }
-        }
-        remote.doSomethingAsync(first, second, third, transactionCallback)
-        it.invokeOnCancellation {
-            mCancellationSignal?.cancel()
-        }
-    }
-
-    public override fun echoBoolean(input: Boolean): Unit {
-        remote.echoBoolean(input)
-    }
-
-    public override fun echoChar(input: Char): Unit {
-        remote.echoChar(input)
-    }
-
-    public override fun echoDouble(input: Double): Unit {
-        remote.echoDouble(input)
-    }
-
-    public override fun echoFloat(input: Float): Unit {
-        remote.echoFloat(input)
-    }
-
-    public override fun echoInt(input: Int): Unit {
-        remote.echoInt(input)
-    }
-
-    public override fun echoLong(input: Long): Unit {
-        remote.echoLong(input)
-    }
-
-    public override fun echoString(input: String): Unit {
-        remote.echoString(input)
-    }
-
-    public override fun receiveAndReturnNothing(): Unit {
-        remote.receiveAndReturnNothing()
-    }
-
-    public override suspend fun receiveAndReturnNothingAsync(): Unit = suspendCancellableCoroutine {
-        var mCancellationSignal: ICancellationSignal? = null
-        val transactionCallback = object: IUnitTransactionCallback.Stub() {
-            override fun onCancellable(cancellationSignal: ICancellationSignal) {
-                if (it.isCancelled) {
-                    cancellationSignal.cancel()
-                }
-                mCancellationSignal = cancellationSignal
-            }
-            override fun onSuccess() {
-                it.resumeWith(Result.success(Unit))
-            }
-            override fun onFailure(errorCode: Int, errorMessage: String) {
-                it.resumeWithException(RuntimeException(errorMessage))
-            }
-        }
-        remote.receiveAndReturnNothingAsync(transactionCallback)
-        it.invokeOnCancellation {
-            mCancellationSignal?.cancel()
-        }
-    }
-
-    public override fun receiveMultipleArguments(
-        first: Int,
-        second: String,
-        third: Long,
-    ): Unit {
-        remote.receiveMultipleArguments(first, second, third)
-    }
-}
diff --git a/privacysandbox/tools/tools-apigenerator/src/test/test-data/values/output/com/sdkwithvalues/SdkInterfaceClientProxy.kt b/privacysandbox/tools/tools-apigenerator/src/test/test-data/values/output/com/sdkwithvalues/SdkInterfaceClientProxy.kt
new file mode 100644
index 0000000..660db1b
--- /dev/null
+++ b/privacysandbox/tools/tools-apigenerator/src/test/test-data/values/output/com/sdkwithvalues/SdkInterfaceClientProxy.kt
@@ -0,0 +1,34 @@
+package com.sdkwithvalues
+
+import com.sdkwithvalues.SdkRequestConverter.toParcelable
+import com.sdkwithvalues.SdkResponseConverter.fromParcelable
+import kotlin.coroutines.resume
+import kotlin.coroutines.resumeWithException
+import kotlinx.coroutines.suspendCancellableCoroutine
+
+public class SdkInterfaceClientProxy(
+    private val remote: ISdkInterface,
+) : SdkInterface {
+    public override suspend fun exampleMethod(request: SdkRequest): SdkResponse =
+            suspendCancellableCoroutine {
+        var mCancellationSignal: ICancellationSignal? = null
+        val transactionCallback = object: ISdkResponseTransactionCallback.Stub() {
+            override fun onCancellable(cancellationSignal: ICancellationSignal) {
+                if (it.isCancelled) {
+                    cancellationSignal.cancel()
+                }
+                mCancellationSignal = cancellationSignal
+            }
+            override fun onSuccess(result: ParcelableSdkResponse) {
+                it.resumeWith(Result.success(fromParcelable(result)))
+            }
+            override fun onFailure(errorCode: Int, errorMessage: String) {
+                it.resumeWithException(RuntimeException(errorMessage))
+            }
+        }
+        remote.exampleMethod(toParcelable(request), transactionCallback)
+        it.invokeOnCancellation {
+            mCancellationSignal?.cancel()
+        }
+    }
+}
diff --git a/privacysandbox/tools/tools-apigenerator/src/test/test-data/values/output/com/sdkwithvalues/SdkInterfaceFactory.kt b/privacysandbox/tools/tools-apigenerator/src/test/test-data/values/output/com/sdkwithvalues/SdkInterfaceFactory.kt
index e362d37..bc79005 100644
--- a/privacysandbox/tools/tools-apigenerator/src/test/test-data/values/output/com/sdkwithvalues/SdkInterfaceFactory.kt
+++ b/privacysandbox/tools/tools-apigenerator/src/test/test-data/values/output/com/sdkwithvalues/SdkInterfaceFactory.kt
@@ -6,8 +6,6 @@
 import android.content.Context
 import android.os.Bundle
 import android.os.OutcomeReceiver
-import com.sdkwithvalues.SdkRequestConverter.toParcelable
-import com.sdkwithvalues.SdkResponseConverter.fromParcelable
 import kotlin.coroutines.resume
 import kotlin.coroutines.resumeWithException
 import kotlinx.coroutines.suspendCancellableCoroutine
@@ -25,30 +23,3 @@
     }
     sdkSandboxManager.loadSdk("com.sdkwithvalues", Bundle.EMPTY, Runnable::run, outcomeReceiver)
 }
-
-private class SdkInterfaceClientProxy(
-    private val remote: ISdkInterface,
-) : SdkInterface {
-    public override suspend fun exampleMethod(request: SdkRequest): SdkResponse =
-            suspendCancellableCoroutine {
-        var mCancellationSignal: ICancellationSignal? = null
-        val transactionCallback = object: ISdkResponseTransactionCallback.Stub() {
-            override fun onCancellable(cancellationSignal: ICancellationSignal) {
-                if (it.isCancelled) {
-                    cancellationSignal.cancel()
-                }
-                mCancellationSignal = cancellationSignal
-            }
-            override fun onSuccess(result: ParcelableSdkResponse) {
-                it.resumeWith(Result.success(fromParcelable(result)))
-            }
-            override fun onFailure(errorCode: Int, errorMessage: String) {
-                it.resumeWithException(RuntimeException(errorMessage))
-            }
-        }
-        remote.exampleMethod(toParcelable(request), transactionCallback)
-        it.invokeOnCancellation {
-            mCancellationSignal?.cancel()
-        }
-    }
-}
diff --git a/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/ClientProxyTypeGenerator.kt b/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/ClientProxyTypeGenerator.kt
index a234f9c..49b17ce 100644
--- a/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/ClientProxyTypeGenerator.kt
+++ b/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/ClientProxyTypeGenerator.kt
@@ -18,9 +18,9 @@
 
 import androidx.privacysandbox.tools.core.model.AnnotatedInterface
 import androidx.privacysandbox.tools.core.model.Method
-import androidx.privacysandbox.tools.core.model.ParsedApi
 import com.squareup.kotlinpoet.ClassName
 import com.squareup.kotlinpoet.CodeBlock
+import com.squareup.kotlinpoet.FileSpec
 import com.squareup.kotlinpoet.FunSpec
 import com.squareup.kotlinpoet.KModifier
 import com.squareup.kotlinpoet.MemberName
@@ -29,44 +29,47 @@
 import com.squareup.kotlinpoet.joinToCode
 
 class ClientProxyTypeGenerator(
-    private val api: ParsedApi,
-    private val service: AnnotatedInterface
+    private val basePackageName: String,
+    private val binderCodeConverter: BinderCodeConverter
 ) {
-    val className = service.clientProxyNameSpec()
-    val remoteBinderClassName =
-        ClassName(service.type.packageName, "I${service.type.simpleName}")
     private val cancellationSignalClassName =
-        ClassName(service.type.packageName, "ICancellationSignal")
-    private val binderCodeConverter = BinderCodeConverter(api)
+        ClassName(basePackageName, "ICancellationSignal")
 
-    fun generate(visibilityModifier: KModifier = KModifier.INTERNAL): TypeSpec =
-        TypeSpec.classBuilder(className).build {
-            addModifiers(visibilityModifier)
-            addSuperinterface(ClassName(service.type.packageName, service.type.simpleName))
+    fun generate(annotatedInterface: AnnotatedInterface): FileSpec {
+        val className = annotatedInterface.clientProxyNameSpec().simpleName
+        val remoteBinderClassName = annotatedInterface.aidlType().innerType.poetSpec()
+
+        val classSpec = TypeSpec.classBuilder(className).build {
+            addSuperinterface(annotatedInterface.type.poetSpec())
+
             primaryConstructor(
                 listOf(
                     PropertySpec.builder("remote", remoteBinderClassName)
                         .addModifiers(KModifier.PRIVATE).build()
                 )
             )
-            addFunctions(service.methods.map { method ->
-                if (method.isSuspend) {
-                    generateSuspendProxyMethodImplementation(method)
-                } else {
-                    generateProxyMethodImplementation(method)
-                }
-            })
+
+            addFunctions(annotatedInterface.methods.map(::toFunSpec))
         }
 
-    private fun generateProxyMethodImplementation(method: Method) =
-        FunSpec.builder(method.name).build {
-            addModifiers(KModifier.OVERRIDE)
-            addParameters(method.parameters.map { it.poetSpec() })
+        return FileSpec.builder(annotatedInterface.type.packageName, className).build {
+            addCommonSettings()
 
-            addCode(generateRemoteCall(method))
+            // TODO(b/254660742): Only add these when needed
+            addImport("kotlinx.coroutines", "suspendCancellableCoroutine")
+            addImport("kotlin.coroutines", "resume")
+            addImport("kotlin.coroutines", "resumeWithException")
+
+            addType(classSpec)
         }
+    }
 
-    private fun generateSuspendProxyMethodImplementation(method: Method) =
+    private fun toFunSpec(method: Method): FunSpec {
+        if (method.isSuspend) return toSuspendFunSpec(method)
+        return toNonSuspendFunSpec(method)
+    }
+
+    private fun toSuspendFunSpec(method: Method) =
         FunSpec.builder(method.name).build {
             addModifiers(KModifier.OVERRIDE)
             addModifiers(KModifier.SUSPEND)
@@ -87,9 +90,17 @@
             }
         }
 
+    private fun toNonSuspendFunSpec(method: Method) =
+        FunSpec.builder(method.name).build {
+            addModifiers(KModifier.OVERRIDE)
+            addParameters(method.parameters.map { it.poetSpec() })
+
+            addCode(generateRemoteCall(method))
+        }
+
     private fun generateTransactionCallbackObject(method: Method) = CodeBlock.builder().build {
         val transactionCallbackClassName = ClassName(
-            service.type.packageName,
+            basePackageName,
             method.returnType.transactionCallbackName(),
             "Stub"
         )
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 17a226a..828123af 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
@@ -51,6 +51,8 @@
     ClassName(type.packageName, "${type.simpleName}ClientProxy")
 fun AnnotatedInterface.stubDelegateNameSpec() =
     ClassName(type.packageName, "${type.simpleName}StubDelegate")
+fun AnnotatedInterface.aidlInterfaceNameSpec() =
+    ClassName(type.packageName, aidlType().innerType.simpleName)
 
 /**
  * Defines the primary constructor of this type with the given list of properties.
diff --git a/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/StubDelegatesGenerator.kt b/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/StubDelegatesGenerator.kt
index 39e5f7b..649485a 100644
--- a/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/StubDelegatesGenerator.kt
+++ b/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/StubDelegatesGenerator.kt
@@ -18,41 +18,27 @@
 
 import androidx.privacysandbox.tools.core.model.AnnotatedInterface
 import androidx.privacysandbox.tools.core.model.Method
-import androidx.privacysandbox.tools.core.model.ParsedApi
 import androidx.privacysandbox.tools.core.model.Types
-import androidx.privacysandbox.tools.core.model.getOnlyService
 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.LambdaTypeName
 import com.squareup.kotlinpoet.ParameterSpec
 import com.squareup.kotlinpoet.PropertySpec
 import com.squareup.kotlinpoet.TypeSpec
-import com.squareup.kotlinpoet.asTypeName
 import com.squareup.kotlinpoet.joinToCode
 
-class StubDelegatesGenerator(private val api: ParsedApi) {
-    private val binderCodeConverter = BinderCodeConverter(api)
+class StubDelegatesGenerator(
+    private val basePackageName: String,
+    private val binderCodeConverter: BinderCodeConverter
+) {
 
-    companion object {
-        private val ATOMIC_BOOLEAN_CLASS = ClassName("java.util.concurrent.atomic", "AtomicBoolean")
-    }
-
-    fun generate(): List<FileSpec> {
-        if (api.services.isEmpty()) {
-            return emptyList()
-        }
-        return api.services.map(::generateInterfaceStubDelegate) +
-            api.interfaces.map(::generateInterfaceStubDelegate) +
-            generateTransportCancellationCallback()
-    }
-
-    fun generateInterfaceStubDelegate(annotatedInterface: AnnotatedInterface): FileSpec {
+    fun generate(annotatedInterface: AnnotatedInterface): FileSpec {
         val className = annotatedInterface.stubDelegateNameSpec().simpleName
-        val aidlBaseClassName =
-            ClassName(annotatedInterface.type.packageName, annotatedInterface.aidlName(), "Stub")
+        val aidlBaseClassName = ClassName(
+            annotatedInterface.type.packageName, annotatedInterface.aidlName(), "Stub"
+        )
 
         val classSpec = TypeSpec.classBuilder(className).build {
             superclass(aidlBaseClassName)
@@ -132,7 +118,7 @@
         if (method.isSuspend) add(
             ParameterSpec(
                 "transactionCallback", ClassName(
-                    api.getOnlyService().type.packageName,
+                    basePackageName,
                     method.returnType.transactionCallbackName()
                 )
             )
@@ -144,39 +130,4 @@
         add(method.parameters.map { binderCodeConverter.convertToModelCode(it) }.joinToCode())
         add(")")
     }
-
-    private fun generateTransportCancellationCallback(): FileSpec {
-        val packageName = api.getOnlyService().type.packageName
-        val className = "TransportCancellationCallback"
-        val cancellationSignalStubName =
-            ClassName(packageName, AidlGenerator.cancellationSignalName, "Stub")
-
-        val classSpec = TypeSpec.classBuilder(className).build {
-            superclass(cancellationSignalStubName)
-            addModifiers(KModifier.INTERNAL)
-            primaryConstructor(
-                listOf(
-                    PropertySpec.builder(
-                        "onCancel",
-                        LambdaTypeName.get(returnType = Unit::class.asTypeName()),
-                    ).addModifiers(KModifier.PRIVATE).build()
-                ), KModifier.INTERNAL
-            )
-            addProperty(
-                PropertySpec.builder(
-                    "hasCancelled", ATOMIC_BOOLEAN_CLASS, KModifier.PRIVATE
-                ).initializer("%T(false)", ATOMIC_BOOLEAN_CLASS).build()
-            )
-            addFunction(FunSpec.builder("cancel").build {
-                addModifiers(KModifier.OVERRIDE)
-                addCode {
-                    addControlFlow("if (hasCancelled.compareAndSet(false, true))") {
-                        addStatement("onCancel()")
-                    }
-                }
-            })
-        }
-
-        return FileSpec.builder(packageName, className).addType(classSpec).build()
-    }
 }
diff --git a/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/TransportCancellationGenerator.kt b/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/TransportCancellationGenerator.kt
new file mode 100644
index 0000000..59135ea
--- /dev/null
+++ b/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/TransportCancellationGenerator.kt
@@ -0,0 +1,65 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.privacysandbox.tools.core.generator
+
+import com.squareup.kotlinpoet.ClassName
+import com.squareup.kotlinpoet.FileSpec
+import com.squareup.kotlinpoet.FunSpec
+import com.squareup.kotlinpoet.KModifier
+import com.squareup.kotlinpoet.LambdaTypeName
+import com.squareup.kotlinpoet.PropertySpec
+import com.squareup.kotlinpoet.TypeSpec
+import com.squareup.kotlinpoet.asTypeName
+
+class TransportCancellationGenerator(private val basePackageName: String) {
+    private val atomicBooleanClass = ClassName("java.util.concurrent.atomic", "AtomicBoolean")
+
+    fun generate(): FileSpec {
+        val packageName = basePackageName
+        val className = "TransportCancellationCallback"
+        val cancellationSignalStubName =
+            ClassName(packageName, AidlGenerator.cancellationSignalName, "Stub")
+
+        val classSpec = TypeSpec.classBuilder(className).build {
+            superclass(cancellationSignalStubName)
+            addModifiers(KModifier.INTERNAL)
+            primaryConstructor(
+                listOf(
+                    PropertySpec.builder(
+                        "onCancel",
+                        LambdaTypeName.get(returnType = Unit::class.asTypeName()),
+                    ).addModifiers(KModifier.PRIVATE).build()
+                ), KModifier.INTERNAL
+            )
+            addProperty(
+                PropertySpec.builder(
+                    "hasCancelled", atomicBooleanClass, KModifier.PRIVATE
+                ).initializer("%T(false)", atomicBooleanClass).build()
+            )
+            addFunction(FunSpec.builder("cancel").build {
+                addModifiers(KModifier.OVERRIDE)
+                addCode {
+                    addControlFlow("if (hasCancelled.compareAndSet(false, true))") {
+                        addStatement("onCancel()")
+                    }
+                }
+            })
+        }
+
+        return FileSpec.builder(packageName, className).addType(classSpec).build()
+    }
+}
\ No newline at end of file
diff --git a/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/ValueConverterFileGenerator.kt b/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/ValueConverterFileGenerator.kt
index 872f586..0687c63 100644
--- a/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/ValueConverterFileGenerator.kt
+++ b/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/ValueConverterFileGenerator.kt
@@ -29,23 +29,24 @@
  * Generates a file that defines a converter for an SDK defined value and its AIDL parcelable
  * counterpart.
  */
-class ValueConverterFileGenerator(private val api: ParsedApi, private val value: AnnotatedValue) {
+class ValueConverterFileGenerator(private val api: ParsedApi) {
 
-    fun generate() =
+    fun generate(value: AnnotatedValue) =
         FileSpec.builder(
             value.converterNameSpec().packageName,
             value.converterNameSpec().simpleName
         ).build {
             addCommonSettings()
-            addType(generateConverter())
+            addType(generateConverter(value))
         }
 
-    private fun generateConverter() = TypeSpec.objectBuilder(value.converterNameSpec()).build {
-        addFunction(generateFromParcelable())
-        addFunction(generateToParcelable())
+    private fun generateConverter(value: AnnotatedValue) =
+        TypeSpec.objectBuilder(value.converterNameSpec()).build {
+        addFunction(generateFromParcelable(value))
+        addFunction(generateToParcelable(value))
     }
 
-    private fun generateToParcelable() =
+    private fun generateToParcelable(value: AnnotatedValue) =
         FunSpec.builder(value.toParcelableNameSpec().simpleName).build {
             addParameter("annotatedValue", value.type.poetSpec())
             returns(value.parcelableNameSpec())
@@ -66,7 +67,7 @@
             }
         }
 
-    private fun generateFromParcelable() =
+    private fun generateFromParcelable(value: AnnotatedValue) =
         FunSpec.builder(value.fromParcelableNameSpec().simpleName).build {
             addParameter("parcelable", value.parcelableNameSpec())
             returns(value.type.poetSpec())
diff --git a/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/ValueFileGenerator.kt b/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/ValueFileGenerator.kt
index 20dbe57..9536140 100644
--- a/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/ValueFileGenerator.kt
+++ b/privacysandbox/tools/tools-core/src/main/java/androidx/privacysandbox/tools/core/generator/ValueFileGenerator.kt
@@ -25,18 +25,20 @@
 /**
  * Generates a file that defines a previously declared SDK value.
  */
-class ValueFileGenerator(private val value: AnnotatedValue) {
-    fun generate() = FileSpec.builder(value.type.packageName, value.type.simpleName).build {
-        addCommonSettings()
-        addType(generateValue())
-    }
+class ValueFileGenerator() {
+    fun generate(value: AnnotatedValue) =
+        FileSpec.builder(value.type.packageName, value.type.simpleName).build {
+            addCommonSettings()
+            addType(generateValue(value))
+        }
 
-    private fun generateValue() = TypeSpec.classBuilder(value.type.poetSpec()).build {
-        addModifiers(KModifier.DATA)
-        primaryConstructor(value.properties.map {
-            PropertySpec.builder(it.name, it.type.poetSpec())
-                .mutable(false)
-                .build()
-        })
-    }
+    private fun generateValue(value: AnnotatedValue) =
+        TypeSpec.classBuilder(value.type.poetSpec()).build {
+            addModifiers(KModifier.DATA)
+            primaryConstructor(value.properties.map {
+                PropertySpec.builder(it.name, it.type.poetSpec())
+                    .mutable(false)
+                    .build()
+            })
+        }
 }
\ No newline at end of file
diff --git a/profileinstaller/integration-tests/init-macrobenchmark/src/androidTest/java/androidx/profileinstaller/integration/macrobenchmark/ProfileinstallerStartupBenchmark.kt b/profileinstaller/integration-tests/init-macrobenchmark/src/androidTest/java/androidx/profileinstaller/integration/macrobenchmark/ProfileinstallerStartupBenchmark.kt
index 4ece2c3..83d0a926 100644
--- a/profileinstaller/integration-tests/init-macrobenchmark/src/androidTest/java/androidx/profileinstaller/integration/macrobenchmark/ProfileinstallerStartupBenchmark.kt
+++ b/profileinstaller/integration-tests/init-macrobenchmark/src/androidTest/java/androidx/profileinstaller/integration/macrobenchmark/ProfileinstallerStartupBenchmark.kt
@@ -20,7 +20,6 @@
 import androidx.benchmark.macro.StartupMode
 import androidx.benchmark.macro.junit4.MacrobenchmarkRule
 import androidx.test.filters.LargeTest
-import androidx.testutils.BASIC_COMPILATION_MODES
 import androidx.testutils.createStartupCompilationParams
 import androidx.testutils.measureStartup
 import org.junit.Rule
@@ -49,8 +48,6 @@
     companion object {
         @Parameterized.Parameters(name = "startup={0},compilation={1}")
         @JvmStatic
-        fun parameters() = createStartupCompilationParams(
-            compilationModes = BASIC_COMPILATION_MODES
-        )
+        fun parameters() = createStartupCompilationParams()
     }
 }
\ No newline at end of file
diff --git a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/DaoPrimitiveTest.kt b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/DaoBoxedPrimitiveDelegateTest.kt
similarity index 84%
rename from room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/DaoPrimitiveTest.kt
rename to room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/DaoBoxedPrimitiveDelegateTest.kt
index 80986a4..31b855e 100644
--- a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/DaoPrimitiveTest.kt
+++ b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/DaoBoxedPrimitiveDelegateTest.kt
@@ -33,7 +33,7 @@
 
 @RunWith(AndroidJUnit4::class)
 @SmallTest
-class DaoPrimitiveTest {
+class DaoBoxedPrimitiveDelegateTest {
 
     @Entity(tableName = "longFoo")
     data class LongFoo(@PrimaryKey val id: Long, val description: String)
@@ -49,36 +49,15 @@
 
         fun getItem(id: Key): Value?
 
+        fun getItemWithDescription(id: Key, desc: String): Value?
+
         fun delete(id: Key)
 
         fun getFirstItemId(): Key
     }
 
-    /* Interface with non-generics and generics */
-    interface LongBaseDao<Long, Value> {
-
-        fun getItem(id: Long): Value?
-
-        fun delete(id: Long)
-
-        @Query("select id from longFoo limit 1")
-        fun getFirstItemId(): Long
-    }
-
-    /* Interface with non-generics and generics */
-    interface StringBaseDao<String, Value> {
-
-        fun getItem(id: String): Value?
-
-        fun delete(id: String)
-
-        @Query("select id from stringFoo limit 1")
-        fun getFirstItemId(): String
-    }
-
-    interface ByteArrayBaseDao<ByteArray, Value> {
-        @Query("select id from byteArrayFoo limit 1")
-        fun getByteArray(): Array<ByteArray>
+    interface ByteArrayBaseDao<T> {
+        fun getByteArray(): T
     }
 
     // Foo interfaces that are using the base
@@ -89,6 +68,9 @@
         @Query("select * from longFoo where id=:id")
         override fun getItem(id: Long): LongFoo?
 
+        @Query("select * from longFoo where id=:id AND description=:desc")
+        override fun getItemWithDescription(id: Long, desc: String): LongFoo?
+
         @Query("delete from longFoo where id=:id")
         override fun delete(id: Long)
 
@@ -105,6 +87,9 @@
         @Query("select * from stringFoo where id=:id")
         override fun getItem(id: String): StringFoo?
 
+        @Query("select * from stringFoo where id=:id AND description=:desc")
+        override fun getItemWithDescription(id: String, desc: String): StringFoo?
+
         @Query("delete from stringFoo where id=:id")
         override fun delete(id: String)
 
@@ -116,13 +101,13 @@
     }
 
     @Dao
-    interface ByteArrayFooDao : ByteArrayBaseDao<ByteArray, String> {
+    interface ByteArrayFooDao : ByteArrayBaseDao<ByteArray> {
 
         @Insert
         fun insert(item: ByteArrayFoo)
 
         @Query("select id from byteArrayFoo limit 1")
-        override fun getByteArray(): Array<ByteArray>
+        override fun getByteArray(): ByteArray
     }
 
     @Database(
@@ -181,6 +166,6 @@
         ).build()
         val foo = ByteArrayFoo(ByteArray(16), "Elif")
         db.byteArrayFooDao().insert(foo)
-        assertThat(db.byteArrayFooDao().getByteArray()).isEqualTo(arrayOf(ByteArray(16)))
+        assertThat(db.byteArrayFooDao().getByteArray()).isEqualTo(ByteArray(16))
     }
 }
\ No newline at end of file
diff --git a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/MultiTypedPagingSourceTest.kt b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/MultiTypedPagingSourceTest.kt
index e713ff5..3f00196 100644
--- a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/MultiTypedPagingSourceTest.kt
+++ b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/MultiTypedPagingSourceTest.kt
@@ -47,7 +47,6 @@
 import kotlinx.coroutines.withContext
 import org.junit.After
 import org.junit.Before
-import org.junit.Ignore
 import org.junit.Test
 import org.junit.runner.RunWith
 import org.junit.runners.Parameterized
@@ -115,20 +114,20 @@
             // now access more items that should trigger loading more
             withContext(Dispatchers.Main) {
                 itemStore.get(20)
+                assertThat(itemStore.awaitItem(20)).isEqualTo(items[20])
             }
-            assertThat(itemStore.awaitItem(20)).isEqualTo(items[20])
+
             // now access to the end of the list, it should load everything as we disabled jumping
             withContext(Dispatchers.Main) {
                 itemStore.get(items.size - 1)
+                assertThat(itemStore.awaitItem(items.size - 1)).isEqualTo(items.last())
             }
-            assertThat(itemStore.awaitItem(items.size - 1)).isEqualTo(items.last())
             assertThat(itemStore.peekItems()).isEqualTo(items)
             assertThat(itemStore.currentGenerationId).isEqualTo(1)
         }
     }
 
     @Test
-    @Ignore("b/233214547")
     fun loadEverything_inReverse() {
         // open db
         val items = createItems(startId = 0, count = 100)
@@ -153,14 +152,16 @@
             // now access more items that should trigger loading more
             withContext(Dispatchers.Main) {
                 itemStore.get(40)
+                assertThat(itemStore.awaitItem(40)).isEqualTo(items[40])
             }
-            assertThat(itemStore.awaitItem(40)).isEqualTo(items[40])
+
             // now access to the beginning of the list, it should load everything as we don't
             // support jumping
             withContext(Dispatchers.Main) {
                 itemStore.get(0)
+                assertThat(itemStore.awaitItem(0)).isEqualTo(items[0])
             }
-            assertThat(itemStore.awaitItem(0)).isEqualTo(items[0])
+
             assertThat(itemStore.peekItems()).isEqualTo(items)
             assertThat(itemStore.currentGenerationId).isEqualTo(1)
         }
@@ -191,8 +192,8 @@
             // now trigger a prepend
             withContext(Dispatchers.Main) {
                 itemStore.get(20)
+                assertThat(itemStore.awaitItem(20)).isEqualTo(items[20])
             }
-            assertThat(itemStore.awaitItem(20)).isEqualTo(items[20])
         }
     }
 
@@ -303,16 +304,16 @@
                 (0 until 10).forEach {
                     itemStore.get(it)
                 }
-            }
-            // now ensure all of them are loaded
-            // only waiting for 9 items because because the 10th item and onwards are nulls from
-            // placeholders
-            (0 until 9).forEach {
-                assertThat(
-                    itemStore.awaitItem(it)
-                ).isEqualTo(
-                    items[60 + it]
-                )
+                // now ensure all of them are loaded
+                // only waiting for 9 items because because the 10th item and onwards are nulls from
+                // placeholders
+                (0 until 9).forEach {
+                    assertThat(
+                        itemStore.awaitItem(it)
+                    ).isEqualTo(
+                        items[60 + it]
+                    )
+                }
             }
 
             // Runs the original invalidationTracker.refreshRunnable.
@@ -391,7 +392,9 @@
             assertThat(expectError.message).isEqualTo("didn't complete in expected time")
 
             // and stale PagingSource would return item 70 instead of item 10
-            assertThat(itemStore.awaitItem(10)).isEqualTo(items[70])
+            withContext(Dispatchers.Main) {
+                assertThat(itemStore.awaitItem(10)).isEqualTo(items[70])
+            }
             assertFalse(pagingSources[0].invalid)
 
             // prepend again
@@ -459,14 +462,14 @@
                 (0 until 10).forEach {
                     itemStore.get(it)
                 }
-            }
-            // now ensure all of them are loaded
-            (0 until 10).forEach {
-                assertThat(
-                    itemStore.awaitItem(it)
-                ).isEqualTo(
-                    items[80 + it]
-                )
+                // now ensure all of them are loaded
+                (0 until 10).forEach {
+                    assertThat(
+                        itemStore.awaitItem(it)
+                    ).isEqualTo(
+                        items[80 + it]
+                    )
+                }
             }
 
             // Runs the original invalidationTracker.refreshRunnable.
@@ -592,13 +595,13 @@
             // now access more items that should trigger loading more
             withContext(Dispatchers.Main) {
                 itemStore.get(20)
+                assertThat(itemStore.awaitItem(20)).isEqualTo(items[20])
             }
-            assertThat(itemStore.awaitItem(20)).isEqualTo(items[20])
             // now access to the end of the list, it should load everything as we disabled jumping
             withContext(Dispatchers.Main) {
                 itemStore.get(items.size - 1)
+                assertThat(itemStore.awaitItem(items.size - 1)).isEqualTo(items.last())
             }
-            assertThat(itemStore.awaitItem(items.size - 1)).isEqualTo(items.last())
             assertThat(itemStore.peekItems()).isEqualTo(items)
             assertThat(itemStore.currentGenerationId).isEqualTo(1)
         }
@@ -629,14 +632,14 @@
             // now access more items that should trigger loading more
             withContext(Dispatchers.Main) {
                 itemStore.get(40)
+                assertThat(itemStore.awaitItem(40)).isEqualTo(items[40])
             }
-            assertThat(itemStore.awaitItem(40)).isEqualTo(items[40])
             // now access to the beginning of the list, it should load everything as we don't
             // support jumping
             withContext(Dispatchers.Main) {
                 itemStore.get(0)
+                assertThat(itemStore.awaitItem(0)).isEqualTo(items[0])
             }
-            assertThat(itemStore.awaitItem(0)).isEqualTo(items[0])
             assertThat(itemStore.peekItems()).isEqualTo(items)
             assertThat(itemStore.currentGenerationId).isEqualTo(1)
         }
@@ -665,9 +668,10 @@
             // now access more items that should trigger loading more
             withContext(Dispatchers.Main) {
                 itemStore.get(15)
+                // item 15 is offset by 5 = 20
+                assertThat(itemStore.awaitItem(15)).isEqualTo(items[20])
             }
-            // item 15 is offset by 5 = 20
-            assertThat(itemStore.awaitItem(15)).isEqualTo(items[20])
+
             // normally itemStore.get(50) is valid, but user-set LIMIT should bound item count to 30
             // itemStore.get(50) should now become invalid
             val expectedException = assertFailsWith<IndexOutOfBoundsException> {
@@ -706,9 +710,10 @@
             // now access more items that should trigger loading more
             withContext(Dispatchers.Main) {
                 itemStore.get(15)
+                // item 15 is offset by 50 because of `WHERE id > 49` arg
+                assertThat(itemStore.awaitItem(15)).isEqualTo(items[65])
             }
-            // item 15 is offset by 50 because of `WHERE id > 49` arg
-            assertThat(itemStore.awaitItem(15)).isEqualTo(items[65])
+
             // normally itemStore.get(50) is valid, but user-set LIMIT should bound item count to 20
             val expectedException = assertFailsWith<IndexOutOfBoundsException> {
                 withContext(Dispatchers.Main) {
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/codegen/XTypeName.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/codegen/XTypeName.kt
index 9df2a7c..18048d5 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/codegen/XTypeName.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/codegen/XTypeName.kt
@@ -278,5 +278,8 @@
     else -> error("Can't get JTypeName from java.lang.Class: $klass")
 }
 
+fun XTypeName.box() = XTypeName(java.box(), kotlin)
+fun XTypeName.unbox() = XTypeName(java.unbox(), kotlin.copy(nullable = false), XNullability.NONNULL)
+
 fun XTypeName.toJavaPoet(): JTypeName = this.java
 fun XClassName.toJavaPoet(): JClassName = this.java
\ No newline at end of file
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspHasModifiers.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspHasModifiers.kt
index 7fb2c36..f0b50e2 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspHasModifiers.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspHasModifiers.kt
@@ -77,9 +77,16 @@
             // while being open for overrides (e.g. `open val x = ...`), and it can also have a
             // non-final backing field while being closed for overrides (e.g. `var x = ...`).
             is KSPropertyDeclaration -> {
-                // Here we consider all vals are final, and all vars are not final, even
-                // lateinit vars.
-                !declaration.isMutable
+                if (declaration.origin == Origin.JAVA) {
+                    // Fallback to modifiers check as
+                    // KSPropertyDeclarationJavaImpl.isMutable is always true:
+                    // https://github.com/google/ksp/issues/1153
+                    declaration.modifiers.contains(Modifier.FINAL)
+                } else {
+                    // Here we consider all vals are final, and all vars are not final, even
+                    // lateinit vars.
+                    !declaration.isMutable
+                }
             }
             // Although parameters in Kotlin are vals in source, they're not marked
             // final in bytecode.
diff --git a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/ksp/KspFieldElementTest.kt b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/ksp/KspFieldElementTest.kt
index 03f0375..766bfe6 100644
--- a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/ksp/KspFieldElementTest.kt
+++ b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/ksp/KspFieldElementTest.kt
@@ -108,6 +108,8 @@
                         protected Long javaProtected;
                         Long javaPackage;
                         private Long javaPrivate;
+                        public final long javaFinalPublic = 0;
+                        public static final long javaStaticFinalPublic = 0;
                     }
                     """.trimIndent()
                 ),
@@ -115,7 +117,9 @@
                     "javaPublic" to listOf(PUBLIC),
                     "javaProtected" to listOf(PROTECTED),
                     "javaPackage" to emptyList(),
-                    "javaPrivate" to listOf(PRIVATE)
+                    "javaPrivate" to listOf(PRIVATE),
+                    "javaFinalPublic" to listOf(PUBLIC, FINAL),
+                    "javaStaticFinalPublic" to listOf(PUBLIC, FINAL)
                 )
             )
         )
diff --git a/room/room-compiler/build.gradle b/room/room-compiler/build.gradle
index 15f305c..571dda1 100644
--- a/room/room-compiler/build.gradle
+++ b/room/room-compiler/build.gradle
@@ -14,13 +14,15 @@
  * limitations under the License.
  */
 
+
 import androidx.build.BuildOnServerKt
 import androidx.build.LibraryType
-import androidx.build.SupportConfig
 import androidx.build.SdkHelperKt
+import androidx.build.SupportConfig
+import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
+
 import java.util.zip.ZipEntry
 import java.util.zip.ZipFile
-import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
 plugins {
     id("AndroidXPlugin")
@@ -103,6 +105,7 @@
     implementation(libs.apacheCommonsCodec)
     implementation(libs.intellijAnnotations)
     testImplementation(libs.truth)
+    testImplementation(libs.testParameterInjector)
     testImplementation(libs.autoValue) // to access the processor in tests
     testImplementation(libs.autoServiceAnnotations)
     testImplementation(libs.autoService) // to access the processor in tests
diff --git a/room/room-compiler/src/main/kotlin/androidx/room/processor/DaoProcessor.kt b/room/room-compiler/src/main/kotlin/androidx/room/processor/DaoProcessor.kt
index 898a915..a0f36c1 100644
--- a/room/room-compiler/src/main/kotlin/androidx/room/processor/DaoProcessor.kt
+++ b/room/room-compiler/src/main/kotlin/androidx/room/processor/DaoProcessor.kt
@@ -62,7 +62,7 @@
                 deletionMethods = emptyList(),
                 updateMethods = emptyList(),
                 transactionMethods = emptyList(),
-                delegatingMethods = emptyList(),
+                kotlinBoxedPrimitiveMethodDelegates = emptyList(),
                 kotlinDefaultMethodDelegates = emptyList(),
                 constructorParamType = null
             )
@@ -179,11 +179,11 @@
             ).process()
         }
 
-        // Only try to find kotlin boxed delegating methods when the dao extends a class or
-        // implements an interface since otherwise there are no duplicated method generated by
+        // Only try to find Kotlin boxed bridge methods when the dao extends a class or
+        // implements an interface since otherwise there are no bridge method generated by
         // Kotlin.
-        val unannotatedMethods = methods[Any::class] ?: emptyList<XMethodElement>()
-        val delegatingMethods =
+        val unannotatedMethods = methods[Any::class] ?: emptyList()
+        val kotlinBoxedPrimitiveBridgeMethods =
             if (element.superClass != null || element.getSuperInterfaceElements().isNotEmpty()) {
                 matchKotlinBoxedPrimitiveMethods(
                     unannotatedMethods,
@@ -229,8 +229,10 @@
             ProcessorErrors.CANNOT_USE_UNBOUND_GENERICS_IN_DAO_CLASSES
         )
 
-        (unannotatedMethods - delegatingMethods.map { it.element }).forEach { method ->
-            context.logger.e(method, ProcessorErrors.INVALID_ANNOTATION_COUNT_IN_DAO_METHOD)
+        val invalidAnnotatedMethods =
+            unannotatedMethods - kotlinBoxedPrimitiveBridgeMethods.map { it.element }
+        invalidAnnotatedMethods.forEach {
+            context.logger.e(it, ProcessorErrors.INVALID_ANNOTATION_COUNT_IN_DAO_METHOD)
         }
 
         return Dao(
@@ -243,7 +245,7 @@
             updateMethods = updateMethods,
             upsertionMethods = upsertionMethods,
             transactionMethods = transactionMethods.toList(),
-            delegatingMethods = delegatingMethods,
+            kotlinBoxedPrimitiveMethodDelegates = kotlinBoxedPrimitiveBridgeMethods,
             kotlinDefaultMethodDelegates = kotlinDefaultMethodDelegates.toList(),
             constructorParamType = constructorParamType
         )
@@ -260,6 +262,12 @@
         }
     }
 
+    /**
+     * Find Kotlin bridge methods generated for overrides of primitives, see KT-46650.
+     * When generating the Java implementation of the DAO, Room needs to also override the bridge
+     * method generated by Kotlin for the boxed version, it will contain the same name, return type
+     * and parameter, but the generic primitive params will be boxed.
+     */
     private fun matchKotlinBoxedPrimitiveMethods(
         unannotatedMethods: List<XMethodElement>,
         annotatedMethods: List<XMethodElement>
diff --git a/room/room-compiler/src/main/kotlin/androidx/room/solver/KotlinBoxedPrimitiveMethodDelegateBinder.kt b/room/room-compiler/src/main/kotlin/androidx/room/solver/KotlinBoxedPrimitiveMethodDelegateBinder.kt
new file mode 100644
index 0000000..3318d56
--- /dev/null
+++ b/room/room-compiler/src/main/kotlin/androidx/room/solver/KotlinBoxedPrimitiveMethodDelegateBinder.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 androidx.room.solver
+
+import androidx.room.compiler.codegen.CodeLanguage
+import androidx.room.compiler.codegen.XTypeName
+import androidx.room.compiler.codegen.unbox
+import androidx.room.compiler.processing.XType
+import androidx.room.compiler.processing.isVoid
+import androidx.room.vo.KotlinBoxedPrimitiveMethodDelegate
+
+/**
+ * Method binder that delegates to a sibling DAO function in a Kotlin interface or abstract class
+ * and specifically to a sibling function with unboxed primitive parameters.
+ *
+ * @see [KotlinBoxedPrimitiveMethodDelegate]
+ */
+object KotlinBoxedPrimitiveMethodDelegateBinder {
+
+    fun execute(
+        methodName: String,
+        returnType: XType,
+        parameters: List<Pair<XTypeName, String>>,
+        scope: CodeGenScope
+    ) {
+        check(scope.language == CodeLanguage.JAVA)
+        scope.builder.apply {
+            val params = mutableListOf<Any>()
+            val format = buildString {
+                if (!returnType.isVoid()) {
+                    append("return ")
+                }
+                append("%L(")
+                params.add(methodName)
+                parameters.forEachIndexed { i, (typeName, name) ->
+                    if (typeName.isPrimitive) {
+                        append("(%T) %L")
+                        params.add(typeName.unbox())
+                        params.add(name)
+                    } else {
+                        append("%L")
+                        params.add(name)
+                    }
+                    if (i < parameters.size - 1) {
+                        append(", ")
+                    }
+                }
+                append(")")
+                emptyList<String>().joinToString()
+            }
+            addStatement(format, *params.toTypedArray())
+        }
+    }
+}
\ No newline at end of file
diff --git a/room/room-compiler/src/main/kotlin/androidx/room/solver/KotlinDefaultMethodDelegateBinder.kt b/room/room-compiler/src/main/kotlin/androidx/room/solver/KotlinDefaultMethodDelegateBinder.kt
index 5c36524..f4787ca 100644
--- a/room/room-compiler/src/main/kotlin/androidx/room/solver/KotlinDefaultMethodDelegateBinder.kt
+++ b/room/room-compiler/src/main/kotlin/androidx/room/solver/KotlinDefaultMethodDelegateBinder.kt
@@ -16,40 +16,42 @@
 
 package androidx.room.solver
 
-import androidx.room.ext.DEFAULT_IMPLS_CLASS_NAME
-import androidx.room.ext.L
-import androidx.room.ext.N
-import androidx.room.ext.T
+import androidx.room.compiler.codegen.CodeLanguage
+import androidx.room.compiler.codegen.XClassName
 import androidx.room.compiler.processing.XType
 import androidx.room.compiler.processing.isVoid
-import com.squareup.javapoet.ClassName
+import androidx.room.ext.DEFAULT_IMPLS_CLASS_NAME
+import androidx.room.vo.KotlinDefaultMethodDelegate
 
 /**
- * Method binder that delegates to concrete DAO function in a Kotlin interface.
+ * Method binder that delegates to concrete DAO function in a Kotlin interface, specifically to
+ * a function where the implementation is in the DefaultImpl Kotlin generated class.
+ *
+ * @see [KotlinDefaultMethodDelegate]
  */
 object KotlinDefaultMethodDelegateBinder {
     fun executeAndReturn(
-        daoName: ClassName,
-        daoImplName: ClassName,
+        daoName: XClassName,
+        daoImplName: XClassName,
         methodName: String,
         returnType: XType,
         parameterNames: List<String>,
         scope: CodeGenScope
     ) {
-        scope.builder().apply {
-            val params: MutableList<Any> = mutableListOf()
+        check(scope.language == CodeLanguage.JAVA)
+        scope.builder.apply {
+            val params = mutableListOf<Any>()
             val format = buildString {
                 if (!returnType.isVoid()) {
                     append("return ")
                 }
-                append("$T.$N.$N($T.this")
+                append("%T.%L.%L(%T.this")
                 params.add(daoName)
                 params.add(DEFAULT_IMPLS_CLASS_NAME)
                 params.add(methodName)
                 params.add(daoImplName)
                 parameterNames.forEach {
-                    append(", ")
-                    append(L)
+                    append(", %L")
                     params.add(it)
                 }
                 append(")")
diff --git a/room/room-compiler/src/main/kotlin/androidx/room/vo/Dao.kt b/room/room-compiler/src/main/kotlin/androidx/room/vo/Dao.kt
index eebca3b..d35a3a1 100644
--- a/room/room-compiler/src/main/kotlin/androidx/room/vo/Dao.kt
+++ b/room/room-compiler/src/main/kotlin/androidx/room/vo/Dao.kt
@@ -31,7 +31,7 @@
     val updateMethods: List<UpdateMethod>,
     val upsertionMethods: List<UpsertionMethod>,
     val transactionMethods: List<TransactionMethod>,
-    val delegatingMethods: List<KotlinBoxedPrimitiveMethodDelegate>,
+    val kotlinBoxedPrimitiveMethodDelegates: List<KotlinBoxedPrimitiveMethodDelegate>,
     val kotlinDefaultMethodDelegates: List<KotlinDefaultMethodDelegate>,
     val constructorParamType: XTypeName?
 ) {
diff --git a/room/room-compiler/src/main/kotlin/androidx/room/vo/KotlinBoxedPrimitiveMethodDelegate.kt b/room/room-compiler/src/main/kotlin/androidx/room/vo/KotlinBoxedPrimitiveMethodDelegate.kt
index 4d70e91..46ba1a3 100644
--- a/room/room-compiler/src/main/kotlin/androidx/room/vo/KotlinBoxedPrimitiveMethodDelegate.kt
+++ b/room/room-compiler/src/main/kotlin/androidx/room/vo/KotlinBoxedPrimitiveMethodDelegate.kt
@@ -19,8 +19,9 @@
 import androidx.room.compiler.processing.XMethodElement
 
 /**
- * A class that holds information about a boxed Method and the corresponding annotated method to
- * be delegated to.
+ * Represents a DAO bridge method that to supported the boxed version of a generic abstract class or
+ * interface in Kotlin. When generating the Java implementation of the DAO, Room needs to also
+ * override the bridge method generated by Kotlin for the boxed version support, see KT-46650.
  */
 data class KotlinBoxedPrimitiveMethodDelegate(
     val element: XMethodElement,
diff --git a/room/room-compiler/src/main/kotlin/androidx/room/vo/KotlinDefaultMethodDelegate.kt b/room/room-compiler/src/main/kotlin/androidx/room/vo/KotlinDefaultMethodDelegate.kt
index 4090859..7432c9e 100644
--- a/room/room-compiler/src/main/kotlin/androidx/room/vo/KotlinDefaultMethodDelegate.kt
+++ b/room/room-compiler/src/main/kotlin/androidx/room/vo/KotlinDefaultMethodDelegate.kt
@@ -19,8 +19,8 @@
 import androidx.room.compiler.processing.XMethodElement
 
 /**
- * Represents a DAO method that delegates to a concrete implementation, such as a concrete function
- * in a Kotlin interface.
+ * Represents a DAO method that delegates to a concrete implementation, specifically to override
+ * a Kotlin interface whose implementation is in the DefaultImpl generated class.
  */
 data class KotlinDefaultMethodDelegate(
     // the original element, not the stub that is generated for DefaultImpls
diff --git a/room/room-compiler/src/main/kotlin/androidx/room/writer/DaoWriter.kt b/room/room-compiler/src/main/kotlin/androidx/room/writer/DaoWriter.kt
index fd6511f..a7ff843 100644
--- a/room/room-compiler/src/main/kotlin/androidx/room/writer/DaoWriter.kt
+++ b/room/room-compiler/src/main/kotlin/androidx/room/writer/DaoWriter.kt
@@ -21,7 +21,6 @@
 import androidx.room.compiler.codegen.XClassName
 import androidx.room.compiler.codegen.XCodeBlock
 import androidx.room.compiler.codegen.XCodeBlock.Builder.Companion.addLocalVal
-import androidx.room.compiler.codegen.XCodeBlock.Builder.Companion.apply
 import androidx.room.compiler.codegen.XFunSpec
 import androidx.room.compiler.codegen.XFunSpec.Builder.Companion.apply
 import androidx.room.compiler.codegen.XPropertySpec
@@ -33,8 +32,6 @@
 import androidx.room.compiler.processing.XElement
 import androidx.room.compiler.processing.XMethodElement
 import androidx.room.compiler.processing.XType
-import androidx.room.compiler.processing.isVoid
-import androidx.room.ext.L
 import androidx.room.ext.RoomMemberNames
 import androidx.room.ext.RoomTypeNames
 import androidx.room.ext.RoomTypeNames.DELETE_OR_UPDATE_ADAPTER
@@ -43,11 +40,10 @@
 import androidx.room.ext.RoomTypeNames.SHARED_SQLITE_STMT
 import androidx.room.ext.RoomTypeNames.UPSERTION_ADAPTER
 import androidx.room.ext.SupportDbTypeNames
-import androidx.room.ext.T
-import androidx.room.ext.W
 import androidx.room.ext.capitalize
 import androidx.room.processor.OnConflictProcessor
 import androidx.room.solver.CodeGenScope
+import androidx.room.solver.KotlinBoxedPrimitiveMethodDelegateBinder
 import androidx.room.solver.KotlinDefaultMethodDelegateBinder
 import androidx.room.solver.types.getRequiredTypeConverters
 import androidx.room.vo.Dao
@@ -162,12 +158,13 @@
             dao.rawQueryMethods.forEach {
                 addFunction(createRawQueryMethod(it))
             }
-            dao.kotlinDefaultMethodDelegates.forEach {
-                addFunction(createDefaultMethodDelegate(it))
-            }
-
-            dao.delegatingMethods.forEach {
-                addFunction(createDelegatingMethod(it))
+            if (codeLanguage == CodeLanguage.JAVA) {
+                dao.kotlinDefaultMethodDelegates.forEach {
+                    addFunction(createDefaultImplMethodDelegate(it))
+                }
+                dao.kotlinBoxedPrimitiveMethodDelegates.forEach {
+                    addFunction(createBoxedPrimitiveBridgeMethodDelegate(it))
+                }
             }
             // Keep this the last one to be generated because used custom converters will
             // register fields with a payload which we collect in dao to report used
@@ -606,13 +603,12 @@
     }
 
     // TODO(b/251459654): Handle @JvmOverloads in delegating functions with Kotlin codegen.
-    private fun createDefaultMethodDelegate(method: KotlinDefaultMethodDelegate): XFunSpec {
+    private fun createDefaultImplMethodDelegate(method: KotlinDefaultMethodDelegate): XFunSpec {
         val scope = CodeGenScope(this)
         return overrideWithoutAnnotations(method.element, declaredDao).apply {
-            // TODO(danysantiago): Revisit this in Kotlin codegen
             KotlinDefaultMethodDelegateBinder.executeAndReturn(
-                daoName = dao.typeName.toJavaPoet(),
-                daoImplName = dao.implTypeName.toJavaPoet(),
+                daoName = dao.typeName,
+                daoImplName = dao.implTypeName,
                 methodName = method.element.jvmName,
                 returnType = method.element.returnType,
                 parameterNames = method.element.parameters.map { it.name },
@@ -622,37 +618,21 @@
         }.build()
     }
 
-    // TODO(b/127483380): Reconsider the need of delegating method in KotlinPoet.
-    private fun createDelegatingMethod(method: KotlinBoxedPrimitiveMethodDelegate): XFunSpec {
-        val body = XCodeBlock.builder(codeLanguage).apply(
-            javaCodeBuilder = {
-                val args = method.concreteMethod.parameters.map {
-                    val paramTypename = it.type.typeName
-                    if (paramTypename.isBoxedPrimitive()) {
-                        CodeBlock.of("$L", paramTypename, it.name.toString())
-                    } else {
-                        CodeBlock.of("($T) $L", paramTypename.unbox(), it.name.toString())
-                    }
-                }
-                if (method.element.returnType.isVoid()) {
-                    addStatement(
-                        "$L($L)",
-                        method.element.jvmName,
-                        CodeBlock.join(args, ",$W")
-                    )
-                } else {
-                    addStatement(
-                        "return $L($L)",
-                        method.element.jvmName,
-                        CodeBlock.join(args, ",$W")
-                    )
-                }
-            },
-            kotlinCodeBuilder = { TODO("Kotlin codegen not yet implemented!") }
-        ).build()
-        return overrideWithoutAnnotations(method.element, declaredDao)
-            .addCode(body)
-            .build()
+    private fun createBoxedPrimitiveBridgeMethodDelegate(
+        method: KotlinBoxedPrimitiveMethodDelegate
+    ): XFunSpec {
+        val scope = CodeGenScope(this)
+        return overrideWithoutAnnotations(method.element, declaredDao).apply {
+            KotlinBoxedPrimitiveMethodDelegateBinder.execute(
+                methodName = method.element.jvmName,
+                returnType = method.element.returnType,
+                parameters = method.concreteMethod.parameters.map {
+                    it.type.asTypeName() to it.name
+                },
+                scope = scope
+            )
+            addCode(scope.generate())
+        }.build()
     }
 
     private fun overrideWithoutAnnotations(
diff --git a/room/room-compiler/src/test/kotlin/androidx/room/writer/KotlinCodeGenTest.kt b/room/room-compiler/src/test/kotlin/androidx/room/writer/KotlinCodeGenTest.kt
index a17ced3..8be0ffb 100644
--- a/room/room-compiler/src/test/kotlin/androidx/room/writer/KotlinCodeGenTest.kt
+++ b/room/room-compiler/src/test/kotlin/androidx/room/writer/KotlinCodeGenTest.kt
@@ -22,10 +22,15 @@
 import androidx.room.compiler.processing.util.XTestInvocation
 import androidx.room.compiler.processing.util.runKspTest
 import androidx.room.processor.Context
+import com.google.testing.junit.testparameterinjector.TestParameter
+import com.google.testing.junit.testparameterinjector.TestParameterInjector
 import loadTestSource
+import org.jetbrains.kotlin.config.JvmDefaultMode
 import org.junit.Test
+import org.junit.runner.RunWith
 
 // Dany's Kotlin codegen test playground (and tests too)
+@RunWith(TestParameterInjector::class)
 class KotlinCodeGenTest {
 
     val databaseSrc = Source.kotlin(
@@ -677,6 +682,79 @@
         )
     }
 
+    @Test
+    fun delegatingFunctions_defaultImplBridge(
+        @TestParameter("DISABLE", "ALL_COMPATIBILITY", "ALL_INCOMPATIBLE")
+        jvmDefaultMode: JvmDefaultMode
+    ) {
+        val testName = object {}.javaClass.enclosingMethod!!.name
+        val src = Source.kotlin(
+            "MyDao.kt",
+            """
+            import androidx.room.*
+            import androidx.sqlite.db.SupportSQLiteQuery
+
+            @Dao
+            interface MyDao {
+              @Query("SELECT * FROM MyEntity")
+              fun getEntity(): MyEntity
+  
+              fun implemented() {
+                TODO("")
+              }
+            }
+
+            @Entity
+            data class MyEntity(
+                @PrimaryKey
+                val pk: Long,
+            )
+            """.trimIndent()
+        )
+        runTest(
+            sources = listOf(src, databaseSrc),
+            expectedFilePath = getTestGoldenPath(testName),
+            jvmDefaultMode = jvmDefaultMode
+        )
+    }
+
+    @Test
+    fun delegatingFunctions_boxedPrimitiveBridge() {
+        val testName = object {}.javaClass.enclosingMethod!!.name
+        val src = Source.kotlin(
+            "MyDao.kt",
+            """
+            import androidx.room.*
+            import androidx.sqlite.db.SupportSQLiteQuery
+
+            interface BaseDao<T> {
+                fun getEntity(id: T): MyEntity
+
+                fun insertEntity(id: T): T
+            }
+
+            @Dao
+            interface MyDao : BaseDao<Long> {
+              @Query("SELECT * FROM MyEntity WHERE pk = :id")
+              override fun getEntity(id: Long): MyEntity
+
+              @Query("INSERT INTO MyEntity (pk) VALUES (:id)")
+              override fun insertEntity(id: Long): Long
+            }
+
+            @Entity
+            data class MyEntity(
+                @PrimaryKey
+                val pk: Long,
+            )
+            """.trimIndent()
+        )
+        runTest(
+            sources = listOf(src, databaseSrc),
+            expectedFilePath = getTestGoldenPath(testName),
+        )
+    }
+
     private fun getTestGoldenPath(testName: String): String {
         return "kotlinCodeGen/$testName.kt"
     }
@@ -684,11 +762,13 @@
     private fun runTest(
         sources: List<Source>,
         expectedFilePath: String,
+        jvmDefaultMode: JvmDefaultMode = JvmDefaultMode.DEFAULT,
         handler: (XTestInvocation) -> Unit = { }
     ) {
         runKspTest(
             sources = sources,
             options = mapOf(Context.BooleanProcessorOptions.GENERATE_KOTLIN.argName to "true"),
+            kotlincArguments = listOf("-Xjvm-default=${jvmDefaultMode.description}")
         ) {
             val databaseFqn = "androidx.room.Database"
             DatabaseProcessingStep().process(
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/delegatingFunctions_boxedPrimitiveBridge.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/delegatingFunctions_boxedPrimitiveBridge.kt
new file mode 100644
index 0000000..74c1fe5
--- /dev/null
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/delegatingFunctions_boxedPrimitiveBridge.kt
@@ -0,0 +1,79 @@
+import android.database.Cursor
+import androidx.room.RoomDatabase
+import androidx.room.RoomSQLiteQuery
+import androidx.room.RoomSQLiteQuery.Companion.acquire
+import androidx.room.SharedSQLiteStatement
+import androidx.room.util.getColumnIndexOrThrow
+import androidx.room.util.query
+import androidx.sqlite.db.SupportSQLiteStatement
+import java.lang.Class
+import javax.`annotation`.processing.Generated
+import kotlin.Int
+import kotlin.Long
+import kotlin.String
+import kotlin.Suppress
+import kotlin.collections.List
+import kotlin.jvm.JvmStatic
+
+@Generated(value = ["androidx.room.RoomProcessor"])
+@Suppress(names = ["unchecked", "deprecation"])
+public class MyDao_Impl : MyDao {
+    private val __db: RoomDatabase
+
+    private val __preparedStmtOfInsertEntity: SharedSQLiteStatement
+
+    public constructor(__db: RoomDatabase) {
+        this.__db = __db
+        this.__preparedStmtOfInsertEntity = object : SharedSQLiteStatement(__db) {
+            public override fun createQuery(): String {
+                val _query: String = "INSERT INTO MyEntity (pk) VALUES (?)"
+                return _query
+            }
+        }
+    }
+
+    public override fun insertEntity(id: Long): Long {
+        __db.assertNotSuspendingTransaction()
+        val _stmt: SupportSQLiteStatement = __preparedStmtOfInsertEntity.acquire()
+        var _argIndex: Int = 1
+        _stmt.bindLong(_argIndex, id)
+        __db.beginTransaction()
+        try {
+            val _result: Long = _stmt.executeInsert()
+            __db.setTransactionSuccessful()
+            return _result
+        } finally {
+            __db.endTransaction()
+            __preparedStmtOfInsertEntity.release(_stmt)
+        }
+    }
+
+    public override fun getEntity(id: Long): MyEntity {
+        val _sql: String = "SELECT * FROM MyEntity WHERE pk = ?"
+        val _statement: RoomSQLiteQuery = acquire(_sql, 1)
+        var _argIndex: Int = 1
+        _statement.bindLong(_argIndex, id)
+        __db.assertNotSuspendingTransaction()
+        val _cursor: Cursor = query(__db, _statement, false, null)
+        try {
+            val _cursorIndexOfPk: Int = getColumnIndexOrThrow(_cursor, "pk")
+            val _result: MyEntity
+            if (_cursor.moveToFirst()) {
+                val _tmpPk: Long
+                _tmpPk = _cursor.getLong(_cursorIndexOfPk)
+                _result = MyEntity(_tmpPk)
+            } else {
+                error("Cursor was empty, but expected a single item.")
+            }
+            return _result
+        } finally {
+            _cursor.close()
+            _statement.release()
+        }
+    }
+
+    public companion object {
+        @JvmStatic
+        public fun getRequiredConverters(): List<Class<*>> = emptyList()
+    }
+}
\ No newline at end of file
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/delegatingFunctions_defaultImplBridge.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/delegatingFunctions_defaultImplBridge.kt
new file mode 100644
index 0000000..4fdc4e8
--- /dev/null
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/delegatingFunctions_defaultImplBridge.kt
@@ -0,0 +1,51 @@
+import android.database.Cursor
+import androidx.room.RoomDatabase
+import androidx.room.RoomSQLiteQuery
+import androidx.room.RoomSQLiteQuery.Companion.acquire
+import androidx.room.util.getColumnIndexOrThrow
+import androidx.room.util.query
+import java.lang.Class
+import javax.`annotation`.processing.Generated
+import kotlin.Int
+import kotlin.Long
+import kotlin.String
+import kotlin.Suppress
+import kotlin.collections.List
+import kotlin.jvm.JvmStatic
+
+@Generated(value = ["androidx.room.RoomProcessor"])
+@Suppress(names = ["unchecked", "deprecation"])
+public class MyDao_Impl : MyDao {
+    private val __db: RoomDatabase
+
+    public constructor(__db: RoomDatabase) {
+        this.__db = __db
+    }
+
+    public override fun getEntity(): MyEntity {
+        val _sql: String = "SELECT * FROM MyEntity"
+        val _statement: RoomSQLiteQuery = acquire(_sql, 0)
+        __db.assertNotSuspendingTransaction()
+        val _cursor: Cursor = query(__db, _statement, false, null)
+        try {
+            val _cursorIndexOfPk: Int = getColumnIndexOrThrow(_cursor, "pk")
+            val _result: MyEntity
+            if (_cursor.moveToFirst()) {
+                val _tmpPk: Long
+                _tmpPk = _cursor.getLong(_cursorIndexOfPk)
+                _result = MyEntity(_tmpPk)
+            } else {
+                error("Cursor was empty, but expected a single item.")
+            }
+            return _result
+        } finally {
+            _cursor.close()
+            _statement.release()
+        }
+    }
+
+    public companion object {
+        @JvmStatic
+        public fun getRequiredConverters(): List<Class<*>> = emptyList()
+    }
+}
\ No newline at end of file
diff --git a/security/security-crypto-ktx/build.gradle b/security/security-crypto-ktx/build.gradle
index f2f0acd..e676a24 100644
--- a/security/security-crypto-ktx/build.gradle
+++ b/security/security-crypto-ktx/build.gradle
@@ -36,7 +36,7 @@
 
 android {
     defaultConfig {
-        minSdkVersion 23
+        minSdkVersion 21
     }
     namespace "androidx.security.ktx"
 }
diff --git a/security/security-crypto/build.gradle b/security/security-crypto/build.gradle
index e7ca0fc..3183bc2 100644
--- a/security/security-crypto/build.gradle
+++ b/security/security-crypto/build.gradle
@@ -25,7 +25,7 @@
 dependencies {
     api("androidx.annotation:annotation:1.1.0")
 
-    implementation("com.google.crypto.tink:tink-android:1.5.0")
+    implementation("com.google.crypto.tink:tink-android:1.7.0")
 
     implementation("androidx.annotation:annotation:1.2.0")
     implementation("androidx.collection:collection:1.1.0")
diff --git a/security/security-crypto/lint-baseline.xml b/security/security-crypto/lint-baseline.xml
deleted file mode 100644
index e23c350..0000000
--- a/security/security-crypto/lint-baseline.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="cli" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
-
-    <issue
-        id="BanSynchronizedMethods"
-        message="Use of synchronized methods is not recommended"
-        errorLine1="        @Override"
-        errorLine2="        ^">
-        <location
-            file="src/main/java/androidx/security/crypto/EncryptedFile.java"/>
-    </issue>
-
-    <issue
-        id="BanSynchronizedMethods"
-        message="Use of synchronized methods is not recommended"
-        errorLine1="        @Override"
-        errorLine2="        ^">
-        <location
-            file="src/main/java/androidx/security/crypto/EncryptedFile.java"/>
-    </issue>
-
-</issues>
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 9c0d7fd..0dfdf03 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
@@ -26,6 +26,7 @@
 import android.content.Context;
 import android.content.SharedPreferences;
 
+import androidx.annotation.NonNull;
 import androidx.test.core.app.ApplicationProvider;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.MediumTest;
@@ -37,6 +38,7 @@
 import com.google.crypto.tink.streamingaead.StreamingAeadConfig;
 
 import org.junit.Assert;
+import org.junit.AssumptionViolatedException;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -48,62 +50,93 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.security.InvalidKeyException;
 import java.security.KeyStore;
+import java.util.ArrayList;
 
 @MediumTest
 @RunWith(AndroidJUnit4.class)
 public class EncryptedFileTest {
+    private static final String KEYSET_ALIAS = "__androidx_security_crypto_encrypted_file_keyset__";
+    private static final String PREFS_FILE = "__androidx_security_crypto_encrypted_file_pref__";
+    private static final String CUSTOM_PREF_NAME = "CUSTOMPREFNAME";
+    private static final String SECOND_MASTER_KEY_ALIAS = "_androidx_security_second_master_key_";
+
     private Context mContext;
     private MasterKey mMasterKey;
+    private MasterKey mSecondMasterKey;
+
+    /**
+     * Enum for all test files used in the test suite. Each file will be deleted if it exists
+     * before each test is ran.
+     */
+    private enum TestFileName {
+        NOTHING_TO_SEE_HERE("nothing_to_see_here"),
+        NOTHING_TO_SEE_HERE_CUSTOM("nothing_to_see_here_custom"),
+        TINK_TEST_FILE("tink_test_file"),
+        NON_EXISTING("non-existing.data"),
+        ENCRYPTED_FILE_1("encrypted_file_1"),
+        ENCRYPTED_FILE_2("encrypted_file_2");
+
+        private final String mText;
+
+        TestFileName(final String text) {
+            mText = text;
+        }
+
+        @NonNull
+        @Override
+        public String toString() {
+            return mText;
+        }
+    }
 
     @Before
     public void setup() throws Exception {
         mContext = ApplicationProvider.getApplicationContext();
 
         SharedPreferences sharedPreferences = mContext.getSharedPreferences(
-                "__androidx_security_crypto_encrypted_file_pref__", Context.MODE_PRIVATE);
+                PREFS_FILE, Context.MODE_PRIVATE);
         sharedPreferences.edit().clear().commit();
 
         SharedPreferences customSharedPreferences = mContext.getSharedPreferences(
-                "CUSTOMPREFNAME", Context.MODE_PRIVATE);
+                CUSTOM_PREF_NAME, Context.MODE_PRIVATE);
         customSharedPreferences.edit().clear().commit();
 
-        // Delete old keys for testing
-        String filePath = mContext.getFilesDir().getParent() + "/shared_prefs/"
-                + "__androidx_security_crypto_encrypted_file_pref__";
-        File deletePrefFile = new File(filePath);
-        deletePrefFile.delete();
+        String appFolderPath = mContext.getFilesDir().getParent();
 
-        filePath = mContext.getFilesDir().getParent() + "nothing_to_see_here";
-        deletePrefFile = new File(filePath);
-        deletePrefFile.delete();
+        // Delete old keys stored in preferences file
+        String prefsFilePath = appFolderPath + "/shared_prefs/" + PREFS_FILE;
+        File prefFile = new File(prefsFilePath);
+        prefFile.delete();
 
-        File dataFile = new File(mContext.getFilesDir(), "nothing_to_see_here");
-        dataFile.delete();
-
-        dataFile = new File(mContext.getFilesDir(), "nothing_to_see_here_custom");
-        dataFile.delete();
-
-        dataFile = new File(mContext.getFilesDir(), "tink_test_file");
-        dataFile.delete();
+        // Delete test files
+        for (TestFileName fileName : TestFileName.values()) {
+            File dataFile = new File(mContext.getFilesDir(), fileName.toString());
+            dataFile.delete();
+        }
 
         // Delete MasterKeys
         KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
         keyStore.load(null);
-        keyStore.deleteEntry(MasterKey.DEFAULT_MASTER_KEY_ALIAS);
 
+        keyStore.deleteEntry(MasterKey.DEFAULT_MASTER_KEY_ALIAS);
         mMasterKey = new MasterKey.Builder(mContext)
                 .setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
                 .build();
+
+        keyStore.deleteEntry(EncryptedFileTest.SECOND_MASTER_KEY_ALIAS);
+        mSecondMasterKey = new MasterKey.Builder(mContext, SECOND_MASTER_KEY_ALIAS)
+                .setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
+                .build();
     }
 
     @Test
     public void testWriteReadEncryptedFile() throws Exception {
         final String fileContent = "Don't tell anyone...";
-        final String fileName = "nothing_to_see_here";
+        final String fileName = TestFileName.NOTHING_TO_SEE_HERE.toString();
 
         // Write
-
         EncryptedFile encryptedFile = new EncryptedFile.Builder(mContext,
                 new File(mContext.getFilesDir(),
                         fileName), mMasterKey,
@@ -176,10 +209,9 @@
     @Test
     public void testWriteReadEncryptedFileWithAlias() throws Exception {
         final String fileContent = "Don't tell anyone...";
-        final String fileName = "nothing_to_see_here";
+        final String fileName = TestFileName.NOTHING_TO_SEE_HERE.toString();
 
         // Write
-
         EncryptedFile encryptedFile = new EncryptedFile.Builder(new File(mContext.getFilesDir(),
                 fileName), mContext, mMasterKey.getKeyAlias(),
                 EncryptedFile.FileEncryptionScheme.AES256_GCM_HKDF_4KB)
@@ -248,7 +280,8 @@
 
     @Test
     public void testReadNonExistingFileThrows() throws Exception {
-        final File nonExisting = new File(mContext.getFilesDir(), "non-existing.data");
+        final File nonExisting = new File(mContext.getFilesDir(),
+                TestFileName.NON_EXISTING.toString());
         if (nonExisting.exists()) {
             assertTrue(nonExisting.delete());
         }
@@ -270,7 +303,7 @@
     @Test
     public void testWriteReadEncryptedFileCustomPrefs() throws Exception {
         final String fileContent = "Don't tell anyone...!!!!!";
-        final String fileName = "nothing_to_see_here_custom";
+        final String fileName = TestFileName.NOTHING_TO_SEE_HERE_CUSTOM.toString();
 
         // Write
         EncryptedFile encryptedFile = new EncryptedFile.Builder(mContext,
@@ -278,7 +311,7 @@
                         fileName), mMasterKey,
                 EncryptedFile.FileEncryptionScheme.AES256_GCM_HKDF_4KB)
                 .setKeysetAlias("CustomKEYALIAS")
-                .setKeysetPrefName("CUSTOMPREFNAME")
+                .setKeysetPrefName(CUSTOM_PREF_NAME)
                 .build();
 
         OutputStream outputStream = encryptedFile.openFileOutput();
@@ -316,17 +349,55 @@
                 fileContent, new String(plainText, "UTF-8"));
         inputStream.close();
 
-        SharedPreferences sharedPreferences = mContext.getSharedPreferences("CUSTOMPREFNAME",
+        SharedPreferences sharedPreferences = mContext.getSharedPreferences(CUSTOM_PREF_NAME,
                 Context.MODE_PRIVATE);
         boolean containsKeyset = sharedPreferences.contains("CustomKEYALIAS");
         assertTrue("Keyset should have existed.", containsKeyset);
     }
 
+    @Test(expected = InvalidKeyException.class)
+    public void testTwoMasterKeys() throws Exception {
+        new EncryptedFile.Builder(
+                mContext,
+                new File(mContext.getFilesDir(), TestFileName.ENCRYPTED_FILE_1.toString()),
+                mMasterKey,
+                EncryptedFile.FileEncryptionScheme.AES256_GCM_HKDF_4KB)
+                .build();
+
+        // This will fail because implicitly we are decrypting the keyset created for mMasterKey
+        // with this new mSecondMasterKey
+        new EncryptedFile.Builder(
+                mContext,
+                new File(mContext.getFilesDir(), TestFileName.ENCRYPTED_FILE_2.toString()),
+                mSecondMasterKey,
+                EncryptedFile.FileEncryptionScheme.AES256_GCM_HKDF_4KB)
+                .build();
+    }
+
+    @Test
+    public void testTwoMasterKeysAndTwoKeysets() throws Exception {
+        new EncryptedFile.Builder(
+                mContext,
+                new File(mContext.getFilesDir(), TestFileName.ENCRYPTED_FILE_1.toString()),
+                mMasterKey,
+                EncryptedFile.FileEncryptionScheme.AES256_GCM_HKDF_4KB)
+                .build();
+
+        // This should succeed because mSecondMasterKey gets its own keyset
+        new EncryptedFile.Builder(
+                mContext,
+                new File(mContext.getFilesDir(), TestFileName.ENCRYPTED_FILE_2.toString()),
+                mSecondMasterKey,
+                EncryptedFile.FileEncryptionScheme.AES256_GCM_HKDF_4KB)
+                .setKeysetAlias("second_keyset")
+                .build();
+    }
+
     @SuppressWarnings("deprecation")
     @Test
     public void tinkTest() throws Exception {
         final String fileContent = "Don't tell anyone...";
-        final String fileName = "tink_test_file";
+        final String fileName = TestFileName.TINK_TEST_FILE.toString();
         File file = new File(mContext.getFilesDir(), fileName);
 
         // Write
@@ -343,8 +414,8 @@
         KeysetHandle streamingAeadKeysetHandle = new AndroidKeysetManager.Builder()
                 .withKeyTemplate(AesGcmHkdfStreamingKeyManager.aes256GcmHkdf4KBTemplate())
                 .withSharedPref(mContext,
-                        "__androidx_security_crypto_encrypted_file_keyset__",
-                        "__androidx_security_crypto_encrypted_file_pref__")
+                        KEYSET_ALIAS,
+                        PREFS_FILE)
                 .withMasterKeyUri(KEYSTORE_PATH_URI + mMasterKey.getKeyAlias())
                 .build().getKeysetHandle();
 
@@ -373,4 +444,93 @@
         inputStream.close();
     }
 
+    @SuppressWarnings("deprecation")
+    @Test
+    public void multiThreadFileCreate() throws Exception {
+        final int fileSize = 2 << 14;
+        final int fileCount = 10;
+        ArrayList<File> files = new ArrayList<>();
+        final File directory = mContext.getFilesDir();
+
+        for (int i = 0; i < fileCount; i++) {
+            File file = new File(directory + "/multiThreadFileCreate-file-" + i);
+            file.delete(); // Clear out file from previous run if it exists
+            files.add(file);
+        }
+
+        // Inlining what should just be Assume.assumeTrue(SDK_INT >= M) because AndroidStudio's
+        // static analysis can't understand that.
+        if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.M) {
+            throw new AssumptionViolatedException("API v23 or higher is required to run this test");
+        }
+
+        final String masterKeyAlias = MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC);
+        ArrayList<Thread> threads = new ArrayList<>();
+        ArrayList<Exception> exceptions = new ArrayList<>();
+
+        // Create a thread for each encrypted file
+        for (File file : files) {
+            Thread thread = new Thread() {
+                @Override
+                public void run() {
+                    try {
+                        EncryptedFile encryptedFile = new EncryptedFile.Builder(
+                                file,
+                                mContext,
+                                masterKeyAlias,
+                                EncryptedFile.FileEncryptionScheme.AES256_GCM_HKDF_4KB
+                        ).build();
+
+                        try (OutputStream outputStream = encryptedFile.openFileOutput()) {
+                            byte[] buffer = new byte[fileSize];
+                            outputStream.write(buffer, 0, buffer.length);
+                            outputStream.flush();
+                        }
+                    } catch (Exception e) {
+                        synchronized (exceptions) {
+                            exceptions.add(e);
+                        }
+                    }
+                }
+            };
+
+            threads.add(thread);
+        }
+
+        // Start each thread
+        for (Thread thread : threads) {
+            thread.start();
+        }
+
+        // Wait for each thread to finish
+        for (Thread thread : threads) {
+            thread.join();
+        }
+
+        if (exceptions.size() > 0) {
+            System.err.println(exceptions.size() + " errors were thrown during file encryption");
+
+            for (Exception exception : exceptions) {
+                exception.printStackTrace();
+            }
+
+            System.err.println("Throwing the first exception");
+            throw exceptions.get(0);
+        }
+
+        // Decrypt files serially
+        for (File file : files) {
+            EncryptedFile encryptedFile = new EncryptedFile.Builder(
+                    file,
+                    mContext,
+                    masterKeyAlias,
+                    EncryptedFile.FileEncryptionScheme.AES256_GCM_HKDF_4KB
+            ).build();
+
+            try (InputStream inputStream = encryptedFile.openFileInput()) {
+                byte[] buffer = new byte[fileSize];
+                inputStream.read(buffer); // Will throw IOException if decryption fails
+            }
+        }
+    }
 }
diff --git a/security/security-crypto/src/androidTest/java/androidx/security/crypto/MasterKeySecureTest.java b/security/security-crypto/src/androidTest/java/androidx/security/crypto/MasterKeySecureTest.java
index 04494cc..6401e69 100644
--- a/security/security-crypto/src/androidTest/java/androidx/security/crypto/MasterKeySecureTest.java
+++ b/security/security-crypto/src/androidTest/java/androidx/security/crypto/MasterKeySecureTest.java
@@ -56,10 +56,11 @@
         final Context context = ApplicationProvider.getApplicationContext();
 
         KeyguardManager keyguardManager = context.getSystemService(KeyguardManager.class);
+        Assume.assumeTrue(keyguardManager != null);
+        // You need to enable screen lock to pass this assumption
         Assume.assumeTrue(keyguardManager != null && keyguardManager.isDeviceSecure());
 
         // Delete all previous keys and shared preferences.
-
         String filePath = context.getFilesDir().getParent() + "/shared_prefs/"
                 + "__androidx_security__crypto_encrypted_prefs__";
         File deletePrefFile = new File(filePath);
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 1699c64..b21f7e7 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
@@ -26,10 +26,11 @@
 import androidx.annotation.NonNull;
 
 import com.google.crypto.tink.KeyTemplate;
+import com.google.crypto.tink.KeyTemplates;
 import com.google.crypto.tink.KeysetHandle;
 import com.google.crypto.tink.StreamingAead;
 import com.google.crypto.tink.integration.android.AndroidKeysetManager;
-import com.google.crypto.tink.streamingaead.AesGcmHkdfStreamingKeyManager;
+import com.google.crypto.tink.shaded.protobuf.InvalidProtocolBufferException;
 import com.google.crypto.tink.streamingaead.StreamingAeadConfig;
 
 import java.io.File;
@@ -42,6 +43,7 @@
 import java.io.OutputStream;
 import java.nio.channels.FileChannel;
 import java.security.GeneralSecurityException;
+import java.security.InvalidKeyException;
 
 /**
  * Class used to create and read encrypted files.
@@ -92,24 +94,23 @@
      */
     public enum FileEncryptionScheme {
         /**
-         * The file content is encrypted using
-         * <a href="https://google.github.io/tink/javadoc/tink/1.4.0/com/google/crypto/tink/streamingaead/StreamingAead.html">StreamingAead</a> with AES-GCM, with the
-         * file name as associated data.
+         * The file content is encrypted using StreamingAead with AES-GCM, with the file name as
+         * associated data.
          *
          * For more information please see the Tink documentation:
          *
-         * <a href="https://google.github.io/tink/javadoc/tink/1.4.0/com/google/crypto/tink/streamingaead/AesGcmHkdfStreamingKeyManager.html">AesGcmHkdfStreamingKeyManager</a>.aes256GcmHkdf4KBTemplate()
+         * <a href="https://google.github.io/tink/javadoc/tink/1.7.0/com/google/crypto/tink/streamingaead/AesGcmHkdfStreamingKeyManager.html">AesGcmHkdfStreamingKeyManager</a>.aes256GcmHkdf4KBTemplate()
          */
-        AES256_GCM_HKDF_4KB(AesGcmHkdfStreamingKeyManager.aes256GcmHkdf4KBTemplate());
+        AES256_GCM_HKDF_4KB("AES256_GCM_HKDF_4KB");
 
-        private final KeyTemplate mStreamingAeadKeyTemplate;
+        private final String mKeyTemplateName;
 
-        FileEncryptionScheme(KeyTemplate keyTemplate) {
-            mStreamingAeadKeyTemplate = keyTemplate;
+        FileEncryptionScheme(String keyTemplateName) {
+            mKeyTemplateName = keyTemplateName;
         }
 
-        KeyTemplate getKeyTemplate() {
-            return mStreamingAeadKeyTemplate;
+        KeyTemplate getKeyTemplate() throws GeneralSecurityException {
+            return KeyTemplates.get(mKeyTemplateName);
         }
     }
 
@@ -117,6 +118,7 @@
      * Builder class to configure EncryptedFile
      */
     public static final class Builder {
+        private static Object sLock = new Object();
 
         /**
          * Builder for an EncryptedFile.
@@ -194,12 +196,29 @@
         public EncryptedFile build() throws GeneralSecurityException, IOException {
             StreamingAeadConfig.register();
 
-            KeysetHandle streamingAeadKeysetHandle = new AndroidKeysetManager.Builder()
+            AndroidKeysetManager.Builder keysetManagerBuilder = new AndroidKeysetManager.Builder()
                     .withKeyTemplate(mFileEncryptionScheme.getKeyTemplate())
                     .withSharedPref(mContext, mKeysetAlias, mKeysetPrefName)
-                    .withMasterKeyUri(KEYSTORE_PATH_URI + mMasterKeyAlias)
-                    .build().getKeysetHandle();
+                    .withMasterKeyUri(KEYSTORE_PATH_URI + mMasterKeyAlias);
 
+            AndroidKeysetManager keysetManager;
+
+            try {
+                // Building the keyset manager involves shared pref filesystem operations. To
+                // control access to this global state in multi-threaded contexts we need to
+                // ensure mutual exclusion of the build() function.
+                synchronized (sLock) {
+                    keysetManager = keysetManagerBuilder.build();
+                }
+            } catch (InvalidProtocolBufferException e) {
+                throw new InvalidKeyException("Used the wrong key (\"" + mMasterKeyAlias + "\") to "
+                        + "decrypt the keyset (\"" + mKeysetAlias + "\"). If you are using "
+                        + "multiple master keys you must call setKeysetPrefName() or "
+                        + "setKeysetAlias() to differentiate.",
+                        e);
+            }
+
+            KeysetHandle streamingAeadKeysetHandle = keysetManager.getKeysetHandle();
             StreamingAead streamingAead =
                     streamingAeadKeysetHandle.getPrimitive(StreamingAead.class);
 
@@ -307,6 +326,8 @@
 
         private final InputStream mEncryptedInputStream;
 
+        private final Object mLock = new Object();
+
         EncryptedFileInputStream(FileDescriptor descriptor,
                 InputStream encryptedInputStream) {
             super(descriptor);
@@ -350,13 +371,17 @@
         }
 
         @Override
-        public synchronized void mark(int readlimit) {
-            mEncryptedInputStream.mark(readlimit);
+        public void mark(int readLimit) {
+            synchronized (mLock) {
+                mEncryptedInputStream.mark(readLimit);
+            }
         }
 
         @Override
-        public synchronized void reset() throws IOException {
-            mEncryptedInputStream.reset();
+        public void reset() throws IOException {
+            synchronized (mLock) {
+                mEncryptedInputStream.reset();
+            }
         }
 
         @Override
diff --git a/security/security-crypto/src/main/java/androidx/security/crypto/EncryptedSharedPreferences.java b/security/security-crypto/src/main/java/androidx/security/crypto/EncryptedSharedPreferences.java
index ff6e681..ad66feb 100644
--- a/security/security-crypto/src/main/java/androidx/security/crypto/EncryptedSharedPreferences.java
+++ b/security/security-crypto/src/main/java/androidx/security/crypto/EncryptedSharedPreferences.java
@@ -31,10 +31,9 @@
 import com.google.crypto.tink.Aead;
 import com.google.crypto.tink.DeterministicAead;
 import com.google.crypto.tink.KeyTemplate;
+import com.google.crypto.tink.KeyTemplates;
 import com.google.crypto.tink.KeysetHandle;
 import com.google.crypto.tink.aead.AeadConfig;
-import com.google.crypto.tink.aead.AesGcmKeyManager;
-import com.google.crypto.tink.daead.AesSivKeyManager;
 import com.google.crypto.tink.daead.DeterministicAeadConfig;
 import com.google.crypto.tink.integration.android.AndroidKeysetManager;
 import com.google.crypto.tink.subtle.Base64;
@@ -176,18 +175,18 @@
          *
          * For more information please see the Tink documentation:
          *
-         * <a href="https://google.github.io/tink/javadoc/tink/1.4.0/com/google/crypto/tink/daead/AesSivKeyManager.html">AesSivKeyManager</a>.aes256SivTemplate()
+         * <a href="https://google.github.io/tink/javadoc/tink/1.7.0/com/google/crypto/tink/daead/AesSivKeyManager.html">AesSivKeyManager</a>.aes256SivTemplate()
          */
-        AES256_SIV(AesSivKeyManager.aes256SivTemplate());
+        AES256_SIV("AES256_SIV");
 
-        private final KeyTemplate mDeterministicAeadKeyTemplate;
+        private final String mDeterministicAeadKeyTemplateName;
 
-        PrefKeyEncryptionScheme(KeyTemplate keyTemplate) {
-            mDeterministicAeadKeyTemplate = keyTemplate;
+        PrefKeyEncryptionScheme(String deterministicAeadKeyTemplateName) {
+            mDeterministicAeadKeyTemplateName = deterministicAeadKeyTemplateName;
         }
 
-        KeyTemplate getKeyTemplate() {
-            return mDeterministicAeadKeyTemplate;
+        KeyTemplate getKeyTemplate() throws GeneralSecurityException {
+            return KeyTemplates.get(mDeterministicAeadKeyTemplateName);
         }
     }
 
@@ -200,18 +199,18 @@
          *
          * For more information please see the Tink documentation:
          *
-         * <a href="https://google.github.io/tink/javadoc/tink/1.4.0/com/google/crypto/tink/aead/AesGcmKeyManager.html">AesGcmKeyManager</a>.aes256GcmTemplate()
+         * <a href="https://google.github.io/tink/javadoc/tink/1.7.0/com/google/crypto/tink/aead/AesGcmKeyManager.html">AesGcmKeyManager</a>.aes256GcmTemplate()
          */
-        AES256_GCM(AesGcmKeyManager.aes256GcmTemplate());
+        AES256_GCM("AES256_GCM");
 
-        private final KeyTemplate mAeadKeyTemplate;
+        private final String mAeadKeyTemplateName;
 
-        PrefValueEncryptionScheme(KeyTemplate keyTemplates) {
-            mAeadKeyTemplate = keyTemplates;
+        PrefValueEncryptionScheme(String aeadKeyTemplateName) {
+            mAeadKeyTemplateName = aeadKeyTemplateName;
         }
 
-        KeyTemplate getKeyTemplate() {
-            return mAeadKeyTemplate;
+        KeyTemplate getKeyTemplate() throws GeneralSecurityException {
+            return KeyTemplates.get(mAeadKeyTemplateName);
         }
     }
 
@@ -500,6 +499,7 @@
             return mId;
         }
 
+        @Nullable
         public static EncryptedType fromId(int id) {
             switch (id) {
                 case 0:
@@ -519,69 +519,73 @@
         }
     }
 
-    private Object getDecryptedObject(String key) {
+    private Object getDecryptedObject(String key) throws SecurityException {
         if (isReservedKey(key)) {
             throw new SecurityException(key + " is a reserved key for the encryption keyset.");
         }
         if (key == null) {
             key = NULL_VALUE;
         }
-        Object returnValue = null;
+
         try {
             String encryptedKey = encryptKey(key);
             String encryptedValue = mSharedPreferences.getString(encryptedKey, null);
-            if (encryptedValue != null) {
-                byte[] cipherText = Base64.decode(encryptedValue, Base64.DEFAULT);
-                byte[] value = mValueAead.decrypt(cipherText, encryptedKey.getBytes(UTF_8));
-                ByteBuffer buffer = ByteBuffer.wrap(value);
-                buffer.position(0);
-                int typeId = buffer.getInt();
-                EncryptedType type = EncryptedType.fromId(typeId);
-                switch (type) {
-                    case STRING:
-                        int stringLength = buffer.getInt();
-                        ByteBuffer stringSlice = buffer.slice();
-                        buffer.limit(stringLength);
-                        String stringValue = UTF_8.decode(stringSlice).toString();
-                        if (stringValue.equals(NULL_VALUE)) {
-                            returnValue = null;
-                        } else {
-                            returnValue = stringValue;
-                        }
-                        break;
-                    case INT:
-                        returnValue = buffer.getInt();
-                        break;
-                    case LONG:
-                        returnValue = buffer.getLong();
-                        break;
-                    case FLOAT:
-                        returnValue = buffer.getFloat();
-                        break;
-                    case BOOLEAN:
-                        returnValue = buffer.get() != (byte) 0;
-                        break;
-                    case STRING_SET:
-                        ArraySet<String> stringSet = new ArraySet<>();
-                        while (buffer.hasRemaining()) {
-                            int subStringLength = buffer.getInt();
-                            ByteBuffer subStringSlice = buffer.slice();
-                            subStringSlice.limit(subStringLength);
-                            buffer.position(buffer.position() + subStringLength);
-                            stringSet.add(UTF_8.decode(subStringSlice).toString());
-                        }
-                        if (stringSet.size() == 1 && NULL_VALUE.equals(stringSet.valueAt(0))) {
-                            returnValue = null;
-                        } else {
-                            returnValue = stringSet;
-                        }
-                        break;
-                }
+            if (encryptedValue == null) {
+                return null;
+            }
+
+            byte[] cipherText = Base64.decode(encryptedValue, Base64.DEFAULT);
+            byte[] value = mValueAead.decrypt(cipherText, encryptedKey.getBytes(UTF_8));
+            ByteBuffer buffer = ByteBuffer.wrap(value);
+            buffer.position(0);
+            int typeId = buffer.getInt();
+            EncryptedType type = EncryptedType.fromId(typeId);
+            if (type == null) {
+                throw new SecurityException("Unknown type ID for encrypted pref value: " + typeId);
+            }
+
+            switch (type) {
+                case STRING:
+                    int stringLength = buffer.getInt();
+                    ByteBuffer stringSlice = buffer.slice();
+                    buffer.limit(stringLength);
+
+                    String stringValue = UTF_8.decode(stringSlice).toString();
+                    if (stringValue.equals(NULL_VALUE)) {
+                        return null;
+                    }
+
+                    return stringValue;
+                case INT:
+                    return buffer.getInt();
+                case LONG:
+                    return buffer.getLong();
+                case FLOAT:
+                    return buffer.getFloat();
+                case BOOLEAN:
+                    return buffer.get() != (byte) 0;
+                case STRING_SET:
+                    ArraySet<String> stringSet = new ArraySet<>();
+
+                    while (buffer.hasRemaining()) {
+                        int subStringLength = buffer.getInt();
+                        ByteBuffer subStringSlice = buffer.slice();
+                        subStringSlice.limit(subStringLength);
+                        buffer.position(buffer.position() + subStringLength);
+                        stringSet.add(UTF_8.decode(subStringSlice).toString());
+                    }
+
+                    if (stringSet.size() == 1 && NULL_VALUE.equals(stringSet.valueAt(0))) {
+                        return null;
+                    }
+
+                    return stringSet;
+                default:
+                    throw new SecurityException("Unhandled type for encrypted pref value: " + type);
             }
         } catch (GeneralSecurityException ex) {
             throw new SecurityException("Could not decrypt value. " + ex.getMessage(), ex);
         }
-        return returnValue;
     }
 
     String encryptKey(String key) {
diff --git a/testutils/testutils-macrobenchmark/src/main/java/androidx/testutils/MacrobenchUtils.kt b/testutils/testutils-macrobenchmark/src/main/java/androidx/testutils/MacrobenchUtils.kt
index 7d0807c..9f3f678 100644
--- a/testutils/testutils-macrobenchmark/src/main/java/androidx/testutils/MacrobenchUtils.kt
+++ b/testutils/testutils-macrobenchmark/src/main/java/androidx/testutils/MacrobenchUtils.kt
@@ -20,6 +20,7 @@
 import android.os.Build
 import androidx.benchmark.macro.BaselineProfileMode
 import androidx.benchmark.macro.CompilationMode
+import androidx.benchmark.macro.Metric
 import androidx.benchmark.macro.StartupMode
 import androidx.benchmark.macro.StartupTimingLegacyMetric
 import androidx.benchmark.macro.StartupTimingMetric
@@ -27,12 +28,9 @@
 import androidx.benchmark.macro.junit4.MacrobenchmarkRule
 
 /**
- * Basic, always-usable compilation modes, when baseline profiles aren't available.
- *
- * Over time, it's expected very few macrobenchmarks will reference this directly, as more libraries
- * gain baseline profiles.
+ * Compilation modes to sweep over for jetpack internal macrobenchmarks
  */
-val BASIC_COMPILATION_MODES = if (Build.VERSION.SDK_INT < 24) {
+val COMPILATION_MODES = if (Build.VERSION.SDK_INT < 24) {
     // other modes aren't supported
     listOf(CompilationMode.Full())
 } else {
@@ -43,6 +41,12 @@
             baselineProfileMode = BaselineProfileMode.Disable,
             warmupIterations = 3
         ),
+        /* For simplicity we use `Partial()`, which will only install baseline profiles if
+         * available, which would not be useful for macrobenchmarks that don't include baseline
+         * profiles. However baseline profiles are expected to make their way into essentially every
+         * jetpack macrobenchmark over time.
+         */
+        CompilationMode.Partial(),
         CompilationMode.Full()
     )
 }
@@ -58,19 +62,6 @@
 }
 
 /**
- * Default compilation modes to test for all AndroidX macrobenchmarks.
- *
- * Baseline profiles are only supported from Nougat (API 24),
- * currently through Android 12 (API 31)
- */
-@Suppress("ConvertTwoComparisonsToRangeCheck") // lint doesn't understand range checks
-val COMPILATION_MODES = if (Build.VERSION.SDK_INT >= 24 && Build.VERSION.SDK_INT <= 31) {
-    listOf(CompilationMode.Partial())
-} else {
-    emptyList()
-} + BASIC_COMPILATION_MODES
-
-/**
  * Temporary, while transitioning to new metrics
  */
 fun getStartupMetrics() = if (Build.VERSION.SDK_INT >= 29) {
@@ -84,10 +75,11 @@
     startupMode: StartupMode,
     packageName: String,
     iterations: Int = 10,
+    metrics: List<Metric> = getStartupMetrics(),
     setupIntent: Intent.() -> Unit = {}
 ) = measureRepeated(
     packageName = packageName,
-    metrics = getStartupMetrics(),
+    metrics = metrics,
     compilationMode = compilationMode,
     iterations = iterations,
     startupMode = startupMode,
diff --git a/tracing/tracing-perfetto-binary/src/main/cpp/tracing_perfetto.cc b/tracing/tracing-perfetto-binary/src/main/cpp/tracing_perfetto.cc
index 1f8f66b..a0397ce 100644
--- a/tracing/tracing-perfetto-binary/src/main/cpp/tracing_perfetto.cc
+++ b/tracing/tracing-perfetto-binary/src/main/cpp/tracing_perfetto.cc
@@ -25,7 +25,7 @@
 // Concept of version useful e.g. for human-readable error messages, and stable once released.
 // Does not replace the need for a binary verification mechanism (e.g. checksum check).
 // TODO: populate using CMake
-#define VERSION "1.0.0-alpha06"
+#define VERSION "1.0.0-alpha07"
 
 namespace tracing_perfetto {
     void RegisterWithPerfetto() {
diff --git a/tracing/tracing-perfetto/src/androidTest/java/androidx/tracing/perfetto/jni/test/PerfettoNativeTest.kt b/tracing/tracing-perfetto/src/androidTest/java/androidx/tracing/perfetto/jni/test/PerfettoNativeTest.kt
index 3e52432..fb25e2e 100644
--- a/tracing/tracing-perfetto/src/androidTest/java/androidx/tracing/perfetto/jni/test/PerfettoNativeTest.kt
+++ b/tracing/tracing-perfetto/src/androidTest/java/androidx/tracing/perfetto/jni/test/PerfettoNativeTest.kt
@@ -30,7 +30,7 @@
         init {
             PerfettoNative.loadLib()
         }
-        const val libraryVersion = "1.0.0-alpha06" // TODO: get using reflection
+        const val libraryVersion = "1.0.0-alpha07" // TODO: get using reflection
     }
 
     @Test
diff --git a/tracing/tracing-perfetto/src/main/java/androidx/tracing/perfetto/jni/PerfettoNative.kt b/tracing/tracing-perfetto/src/main/java/androidx/tracing/perfetto/jni/PerfettoNative.kt
index 1d969f4..419e348 100644
--- a/tracing/tracing-perfetto/src/main/java/androidx/tracing/perfetto/jni/PerfettoNative.kt
+++ b/tracing/tracing-perfetto/src/main/java/androidx/tracing/perfetto/jni/PerfettoNative.kt
@@ -23,12 +23,12 @@
 
     // TODO(224510255): load from a file produced at build time
     object Metadata {
-        const val version = "1.0.0-alpha06"
+        const val version = "1.0.0-alpha07"
         val checksums = mapOf(
-            "arm64-v8a" to "c8a60a491ef1381c2c95e6281401251dbc9c128a402506bb93681d11cb01e2f7",
-            "armeabi-v7a" to "1bdd59a655c574d561087389863d110b4193458f6baf7d539847d37516caf477",
-            "x86" to "889c130b1a028cabf288af1a8f94bc430edf06bb740854ac43073b3db7e59927",
-            "x86_64" to "2757be9d9b44b59b2c69c0afad68b0e6871e11a53f453bb777911585e0e84086",
+            "arm64-v8a" to "abb5fe78f243999cab6fc8ea05e6d0743df3582e7ea4782f5ef2a677d8a0bde7",
+            "armeabi-v7a" to "d40c8487f7bca0917dcd6c0626d179394ef4b28d6a2fed809bc34e8ea15a100e",
+            "x86" to "38e8e5872e2916b993ca5d37894d7973934730bc427af20de4a52f0656a9ce0f",
+            "x86_64" to "ef545e11ceb45bf0eb611d12867bf9b9c5c9361d7e1865f8723a7505d3107ab8",
         )
     }
 
diff --git a/wear/compose/compose-foundation/api/1.1.0-beta02.txt b/wear/compose/compose-foundation/api/1.1.0-beta02.txt
new file mode 100644
index 0000000..4d7713c
--- /dev/null
+++ b/wear/compose/compose-foundation/api/1.1.0-beta02.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/current.ignore b/wear/compose/compose-foundation/api/current.ignore
deleted file mode 100644
index fe9b752..0000000
--- a/wear/compose/compose-foundation/api/current.ignore
+++ /dev/null
@@ -1,3 +0,0 @@
-// Baseline format: 1.0
-RemovedMethod: androidx.wear.compose.foundation.CurvedTextStyle#equals(Object):
-    Removed method androidx.wear.compose.foundation.CurvedTextStyle.equals(Object)
diff --git a/wear/compose/compose-foundation/api/public_plus_experimental_1.1.0-beta02.txt b/wear/compose/compose-foundation/api/public_plus_experimental_1.1.0-beta02.txt
new file mode 100644
index 0000000..4d7713c
--- /dev/null
+++ b/wear/compose/compose-foundation/api/public_plus_experimental_1.1.0-beta02.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-beta02.txt b/wear/compose/compose-foundation/api/res-1.1.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/wear/compose/compose-foundation/api/res-1.1.0-beta02.txt
diff --git a/wear/compose/compose-foundation/api/restricted_1.1.0-beta02.txt b/wear/compose/compose-foundation/api/restricted_1.1.0-beta02.txt
new file mode 100644
index 0000000..4d7713c
--- /dev/null
+++ b/wear/compose/compose-foundation/api/restricted_1.1.0-beta02.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/restricted_current.ignore b/wear/compose/compose-foundation/api/restricted_current.ignore
deleted file mode 100644
index fe9b752..0000000
--- a/wear/compose/compose-foundation/api/restricted_current.ignore
+++ /dev/null
@@ -1,3 +0,0 @@
-// Baseline format: 1.0
-RemovedMethod: androidx.wear.compose.foundation.CurvedTextStyle#equals(Object):
-    Removed method androidx.wear.compose.foundation.CurvedTextStyle.equals(Object)
diff --git a/wear/compose/compose-material/api/1.1.0-beta02.txt b/wear/compose/compose-material/api/1.1.0-beta02.txt
new file mode 100644
index 0000000..7c9473c
--- /dev/null
+++ b/wear/compose/compose-material/api/1.1.0-beta02.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-beta02.txt b/wear/compose/compose-material/api/public_plus_experimental_1.1.0-beta02.txt
new file mode 100644
index 0000000..1180309
--- /dev/null
+++ b/wear/compose/compose-material/api/public_plus_experimental_1.1.0-beta02.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-beta02.txt b/wear/compose/compose-material/api/res-1.1.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/wear/compose/compose-material/api/res-1.1.0-beta02.txt
diff --git a/wear/compose/compose-material/api/restricted_1.1.0-beta02.txt b/wear/compose/compose-material/api/restricted_1.1.0-beta02.txt
new file mode 100644
index 0000000..7c9473c
--- /dev/null
+++ b/wear/compose/compose-material/api/restricted_1.1.0-beta02.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-navigation/api/1.1.0-beta02.txt b/wear/compose/compose-navigation/api/1.1.0-beta02.txt
new file mode 100644
index 0000000..49ccd87d
--- /dev/null
+++ b/wear/compose/compose-navigation/api/1.1.0-beta02.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-beta02.txt b/wear/compose/compose-navigation/api/public_plus_experimental_1.1.0-beta02.txt
new file mode 100644
index 0000000..49ccd87d
--- /dev/null
+++ b/wear/compose/compose-navigation/api/public_plus_experimental_1.1.0-beta02.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-beta02.txt b/wear/compose/compose-navigation/api/res-1.1.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/wear/compose/compose-navigation/api/res-1.1.0-beta02.txt
diff --git a/wear/compose/compose-navigation/api/restricted_1.1.0-beta02.txt b/wear/compose/compose-navigation/api/restricted_1.1.0-beta02.txt
new file mode 100644
index 0000000..49ccd87d
--- /dev/null
+++ b/wear/compose/compose-navigation/api/restricted_1.1.0-beta02.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/watchface/watchface-complications-data/src/main/java/android/support/wearable/complications/ComplicationData.java b/wear/watchface/watchface-complications-data/src/main/java/android/support/wearable/complications/ComplicationData.java
index 65924c0..f174b51 100644
--- a/wear/watchface/watchface-complications-data/src/main/java/android/support/wearable/complications/ComplicationData.java
+++ b/wear/watchface/watchface-complications-data/src/main/java/android/support/wearable/complications/ComplicationData.java
@@ -48,7 +48,12 @@
 import java.lang.annotation.RetentionPolicy;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
 
 /**
  * Container for complication data of all types.
@@ -88,8 +93,8 @@
             TYPE_LARGE_IMAGE,
             TYPE_NO_PERMISSION,
             TYPE_NO_DATA,
-            TYPE_PROTO_LAYOUT,
-            TYPE_LIST
+            EXP_TYPE_PROTO_LAYOUT,
+            EXP_TYPE_LIST
     })
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
     @Retention(RetentionPolicy.SOURCE)
@@ -225,11 +230,13 @@
      */
     public static final int TYPE_NO_PERMISSION = 9;
 
+    // The following types are experimental, and they have negative IDs.
+
     /** Type that specifies a proto layout based complication. */
-    public static final int TYPE_PROTO_LAYOUT = 11;
+    public static final int EXP_TYPE_PROTO_LAYOUT = -11;
 
     /** Type that specifies a list of complication values. E.g. to support linear 3. */
-    public static final int TYPE_LIST = 12;
+    public static final int EXP_TYPE_LIST = -12;
 
     /**
      * Type used for complications which indicate progress towards a goal. The value may be
@@ -243,7 +250,7 @@
      * text</i> fields are optional for this type, but at least one must be defined. The watch face
      * may choose which of these fields to display, if any.
      */
-    public static final int TYPE_GOAL_PROGRESS = 13;
+    public static final int EXP_TYPE_GOAL_PROGRESS = -13;
 
     /**
      * Type used for complications to display a series of weighted values e.g. in a pie chart. The
@@ -256,7 +263,7 @@
      * text</i> fields are optional for this type, but at least one must be defined. The watch face
      * may choose which of these fields to display, if any.
      */
-    public static final int TYPE_WEIGHTED_ELEMENTS = 14;
+    public static final int EXP_TYPE_WEIGHTED_ELEMENTS = -14;
 
     /** @hide */
     @IntDef({IMAGE_STYLE_PHOTO, IMAGE_STYLE_ICON})
@@ -282,21 +289,13 @@
      */
     public static final int IMAGE_STYLE_ICON = 2;
 
-    private static final String FIELD_COLOR_RAMP = "COLOR_RAMP";
-    private static final String FIELD_COLOR_RAMP_INTERPOLATED = "COLOR_RAMP_INTERPOLATED";
     private static final String FIELD_DATA_SOURCE = "FIELD_DATA_SOURCE";
     private static final String FIELD_DISPLAY_POLICY = "DISPLAY_POLICY";
-    private static final String FIELD_ELEMENT_BACKGROUND_COLOR = "ELEMENT_BACKGROUND_COLOR";
-    private static final String FIELD_ELEMENT_COLORS = "ELEMENT_COLORS";
-    private static final String FIELD_ELEMENT_WEIGHTS = "ELEMENT_WEIGHTS";
     private static final String FIELD_END_TIME = "END_TIME";
     private static final String FIELD_ICON = "ICON";
     private static final String FIELD_ICON_BURN_IN_PROTECTION = "ICON_BURN_IN_PROTECTION";
     private static final String FIELD_IMAGE_STYLE = "IMAGE_STYLE";
     private static final String FIELD_LARGE_IMAGE = "LARGE_IMAGE";
-    private static final String FIELD_LIST_ENTRIES = "LIST_ENTRIES";
-    private static final String FIELD_LIST_ENTRY_TYPE = "LIST_ENTRY_TYPE";
-    private static final String FIELD_LIST_STYLE_HINT = "LIST_STYLE_HINT";
     private static final String FIELD_LONG_TITLE = "LONG_TITLE";
     private static final String FIELD_LONG_TEXT = "LONG_TEXT";
     private static final String FIELD_MAX_VALUE = "MAX_VALUE";
@@ -304,16 +303,12 @@
     private static final String FIELD_PERSISTENCE_POLICY = "PERSISTENCE_POLICY";
     private static final String FIELD_PLACEHOLDER_FIELDS = "PLACEHOLDER_FIELDS";
     private static final String FIELD_PLACEHOLDER_TYPE = "PLACEHOLDER_TYPE";
-    private static final String FIELD_PROTO_LAYOUT_AMBIENT = "FIELD_PROTO_LAYOUT_AMBIENT";
-    private static final String FIELD_PROTO_LAYOUT_INTERACTIVE = "FIELD_PROTO_LAYOUT_INTERACTIVE";
-    private static final String FIELD_PROTO_LAYOUT_RESOURCES = "FIELD_PROTO_LAYOUT_RESOURCES";
     private static final String FIELD_SMALL_IMAGE = "SMALL_IMAGE";
     private static final String FIELD_SMALL_IMAGE_BURN_IN_PROTECTION =
             "SMALL_IMAGE_BURN_IN_PROTECTION";
     private static final String FIELD_SHORT_TITLE = "SHORT_TITLE";
     private static final String FIELD_SHORT_TEXT = "SHORT_TEXT";
     private static final String FIELD_START_TIME = "START_TIME";
-    private static final String FIELD_TARGET_VALUE = "TARGET_VALUE";
     private static final String FIELD_TAP_ACTION = "TAP_ACTION";
     private static final String FIELD_TAP_ACTION_LOST = "FIELD_TAP_ACTION_LOST";
     private static final String FIELD_TIMELINE_START_TIME = "TIMELINE_START_TIME";
@@ -323,191 +318,221 @@
     private static final String FIELD_VALUE = "VALUE";
     private static final String FIELD_VALUE_TYPE = "VALUE_TYPE";
 
+    // Experimental fields, these are subject to change without notice.
+    private static final String EXP_FIELD_COLOR_RAMP = "EXP_COLOR_RAMP";
+    private static final String EXP_FIELD_COLOR_RAMP_INTERPOLATED = "EXP_COLOR_RAMP_INTERPOLATED";
+    private static final String EXP_FIELD_ELEMENT_BACKGROUND_COLOR = "EXP_ELEMENT_BACKGROUND_COLOR";
+    private static final String EXP_FIELD_ELEMENT_COLORS = "EXP_ELEMENT_COLORS";
+    private static final String EXP_FIELD_ELEMENT_WEIGHTS = "EXP_ELEMENT_WEIGHTS";
+    private static final String EXP_FIELD_LIST_ENTRIES = "EXP_LIST_ENTRIES";
+    private static final String EXP_FIELD_LIST_ENTRY_TYPE = "EXP_LIST_ENTRY_TYPE";
+    private static final String EXP_FIELD_LIST_STYLE_HINT = "EXP_LIST_STYLE_HINT";
+    private static final String EXP_FIELD_PROTO_LAYOUT_AMBIENT = "EXP_FIELD_PROTO_LAYOUT_AMBIENT";
+    private static final String EXP_FIELD_PROTO_LAYOUT_INTERACTIVE =
+            "EXP_FIELD_PROTO_LAYOUT_INTERACTIVE";
+    private static final String EXP_FIELD_PROTO_LAYOUT_RESOURCES =
+            "EXP_FIELD_PROTO_LAYOUT_RESOURCES";
+    private static final String EXP_FIELD_TARGET_VALUE = "EXP_TARGET_VALUE";
+
     // Originally it was planned to support both content and image content descriptions.
     private static final String FIELD_CONTENT_DESCRIPTION = "IMAGE_CONTENT_DESCRIPTION";
 
+    // The set of valid types.
+    private static final Set<Integer> VALID_TYPES = validTypes();
+
+    private static Set<Integer> validTypes() {
+        HashSet<Integer> set = new HashSet<>();
+        set.add(TYPE_NOT_CONFIGURED);
+        set.add(TYPE_EMPTY);
+        set.add(TYPE_SHORT_TEXT);
+        set.add(TYPE_LONG_TEXT);
+        set.add(TYPE_RANGED_VALUE);
+        set.add(TYPE_ICON);
+        set.add(TYPE_SMALL_IMAGE);
+        set.add(TYPE_LARGE_IMAGE);
+        set.add(TYPE_NO_PERMISSION);
+        set.add(TYPE_NO_DATA);
+        set.add(EXP_TYPE_PROTO_LAYOUT);
+        set.add(EXP_TYPE_LIST);
+        set.add(EXP_TYPE_GOAL_PROGRESS);
+        set.add(EXP_TYPE_WEIGHTED_ELEMENTS);
+        return set;
+    }
+
     // Used for validation. REQUIRED_FIELDS[i] is an array containing all the fields which must be
     // populated for @ComplicationType i.
-    private static final String[][] REQUIRED_FIELDS = {
-            null,
-            {}, // NOT_CONFIGURED
-            {}, // EMPTY
-            {FIELD_SHORT_TEXT}, // SHORT_TEXT
-            {FIELD_LONG_TEXT}, // LONG_TEXT
-            {FIELD_VALUE, FIELD_MIN_VALUE, FIELD_MAX_VALUE}, // RANGED_VALUE
-            {FIELD_ICON}, // ICON
-            {FIELD_SMALL_IMAGE, FIELD_IMAGE_STYLE}, // SMALL_IMAGE
-            {FIELD_LARGE_IMAGE}, // LARGE_IMAGE
-            {}, // TYPE_NO_PERMISSION
-            {}, // TYPE_NO_DATA
-            { // TYPE_PROTO_LAYOUT
-                    FIELD_PROTO_LAYOUT_AMBIENT,
-                    FIELD_PROTO_LAYOUT_INTERACTIVE,
-                    FIELD_PROTO_LAYOUT_RESOURCES
-            },
-            {FIELD_LIST_ENTRIES}, // TYPE_LIST
-            {FIELD_VALUE, FIELD_TARGET_VALUE}, // GOAL_PROGRESS
-            {  // TYPE_WEIGHTED_ELEMENTS
-                    FIELD_ELEMENT_WEIGHTS,
-                    FIELD_ELEMENT_COLORS,
-                    FIELD_ELEMENT_BACKGROUND_COLOR
-            }
-    };
+    private static final Map<Integer, String[]> REQUIRED_FIELDS = requiredFieldsMap();
+
+    private static Map<Integer, String[]> requiredFieldsMap() {
+        HashMap<Integer, String[]> map = new HashMap<>();
+        map.put(TYPE_NOT_CONFIGURED, new String[0]);
+        map.put(TYPE_EMPTY, new String[0]);
+        map.put(TYPE_SHORT_TEXT, new String[]{FIELD_SHORT_TEXT});
+        map.put(TYPE_LONG_TEXT, new String[]{FIELD_LONG_TEXT});
+        map.put(TYPE_RANGED_VALUE, new String[]{FIELD_VALUE, FIELD_MIN_VALUE, FIELD_MAX_VALUE});
+        map.put(TYPE_ICON, new String[]{FIELD_ICON});
+        map.put(TYPE_SMALL_IMAGE, new String[]{FIELD_SMALL_IMAGE, FIELD_IMAGE_STYLE});
+        map.put(TYPE_LARGE_IMAGE, new String[]{FIELD_LARGE_IMAGE});
+        map.put(TYPE_NO_PERMISSION, new String[0]);
+        map.put(TYPE_NO_DATA, new String[0]);
+        map.put(EXP_TYPE_PROTO_LAYOUT, new String[]{EXP_FIELD_PROTO_LAYOUT_AMBIENT,
+                EXP_FIELD_PROTO_LAYOUT_INTERACTIVE,
+                EXP_FIELD_PROTO_LAYOUT_RESOURCES});
+        map.put(EXP_TYPE_LIST, new String[]{EXP_FIELD_LIST_ENTRIES});
+        map.put(EXP_TYPE_GOAL_PROGRESS, new String[]{FIELD_VALUE, EXP_FIELD_TARGET_VALUE});
+        map.put(EXP_TYPE_WEIGHTED_ELEMENTS, new String[]{EXP_FIELD_ELEMENT_WEIGHTS,
+                EXP_FIELD_ELEMENT_COLORS,
+                EXP_FIELD_ELEMENT_BACKGROUND_COLOR});
+        return map;
+    }
 
     // Used for validation. OPTIONAL_FIELDS[i] is an array containing all the fields which are
     // valid but not required for type i.
-    private static final String[][] OPTIONAL_FIELDS = {
-            null,
-            {}, // NOT_CONFIGURED
-            {}, // EMPTY
-            {
-                    FIELD_SHORT_TITLE,
-                    FIELD_ICON,
-                    FIELD_ICON_BURN_IN_PROTECTION,
-                    FIELD_SMALL_IMAGE,
-                    FIELD_SMALL_IMAGE_BURN_IN_PROTECTION,
-                    FIELD_IMAGE_STYLE,
-                    FIELD_TAP_ACTION,
-                    FIELD_CONTENT_DESCRIPTION,
-                    FIELD_DATA_SOURCE,
-                    FIELD_PERSISTENCE_POLICY,
-                    FIELD_DISPLAY_POLICY
-            }, // SHORT_TEXT
-            {
-                    FIELD_LONG_TITLE,
-                    FIELD_ICON,
-                    FIELD_ICON_BURN_IN_PROTECTION,
-                    FIELD_SMALL_IMAGE,
-                    FIELD_SMALL_IMAGE_BURN_IN_PROTECTION,
-                    FIELD_IMAGE_STYLE,
-                    FIELD_TAP_ACTION,
-                    FIELD_CONTENT_DESCRIPTION,
-                    FIELD_DATA_SOURCE,
-                    FIELD_PERSISTENCE_POLICY,
-                    FIELD_DISPLAY_POLICY
-            }, // LONG_TEXT
-            {
-                    FIELD_SHORT_TEXT,
-                    FIELD_SHORT_TITLE,
-                    FIELD_ICON,
-                    FIELD_ICON_BURN_IN_PROTECTION,
-                    FIELD_SMALL_IMAGE,
-                    FIELD_SMALL_IMAGE_BURN_IN_PROTECTION,
-                    FIELD_IMAGE_STYLE,
-                    FIELD_TAP_ACTION,
-                    FIELD_CONTENT_DESCRIPTION,
-                    FIELD_DATA_SOURCE,
-                    FIELD_COLOR_RAMP,
-                    FIELD_COLOR_RAMP_INTERPOLATED,
-                    FIELD_PERSISTENCE_POLICY,
-                    FIELD_DISPLAY_POLICY,
-                    FIELD_VALUE_TYPE
-            }, // RANGED_VALUE
-            {
-                    FIELD_TAP_ACTION,
-                    FIELD_ICON_BURN_IN_PROTECTION,
-                    FIELD_CONTENT_DESCRIPTION,
-                    FIELD_DATA_SOURCE,
-                    FIELD_PERSISTENCE_POLICY,
-                    FIELD_DISPLAY_POLICY
-            }, // ICON
-            {
-                    FIELD_TAP_ACTION,
-                    FIELD_SMALL_IMAGE_BURN_IN_PROTECTION,
-                    FIELD_CONTENT_DESCRIPTION,
-                    FIELD_DATA_SOURCE,
-                    FIELD_PERSISTENCE_POLICY,
-                    FIELD_DISPLAY_POLICY
-            }, // SMALL_IMAGE
-            {
-                    FIELD_TAP_ACTION,
-                    FIELD_CONTENT_DESCRIPTION,
-                    FIELD_DATA_SOURCE,
-                    FIELD_PERSISTENCE_POLICY,
-                    FIELD_DISPLAY_POLICY
-            }, // LARGE_IMAGE
-            {
-                    FIELD_SHORT_TEXT,
-                    FIELD_SHORT_TITLE,
-                    FIELD_ICON,
-                    FIELD_ICON_BURN_IN_PROTECTION,
-                    FIELD_SMALL_IMAGE,
-                    FIELD_SMALL_IMAGE_BURN_IN_PROTECTION,
-                    FIELD_IMAGE_STYLE,
-                    FIELD_CONTENT_DESCRIPTION,
-                    FIELD_DATA_SOURCE,
-                    FIELD_PERSISTENCE_POLICY,
-                    FIELD_DISPLAY_POLICY
-            }, // TYPE_NO_PERMISSION
-            {  // TYPE_NO_DATA
-                    FIELD_CONTENT_DESCRIPTION,
-                    FIELD_ICON,
-                    FIELD_ICON_BURN_IN_PROTECTION,
-                    FIELD_IMAGE_STYLE,
-                    FIELD_LARGE_IMAGE,
-                    FIELD_LONG_TEXT,
-                    FIELD_LONG_TITLE,
-                    FIELD_MAX_VALUE,
-                    FIELD_MIN_VALUE,
-                    FIELD_PLACEHOLDER_FIELDS,
-                    FIELD_PLACEHOLDER_TYPE,
-                    FIELD_SHORT_TEXT,
-                    FIELD_SHORT_TITLE,
-                    FIELD_SMALL_IMAGE,
-                    FIELD_SMALL_IMAGE_BURN_IN_PROTECTION,
-                    FIELD_TAP_ACTION,
-                    FIELD_VALUE,
-                    FIELD_VALUE_TYPE,
-                    FIELD_DATA_SOURCE,
-                    FIELD_PERSISTENCE_POLICY,
-                    FIELD_DISPLAY_POLICY
-            },
-            {
-                    FIELD_TAP_ACTION,
-                    FIELD_CONTENT_DESCRIPTION,
-                    FIELD_DATA_SOURCE,
-                    FIELD_PERSISTENCE_POLICY,
-                    FIELD_DISPLAY_POLICY
-            }, // TYPE_PROTO_LAYOUT
-            {
-                    FIELD_TAP_ACTION,
-                    FIELD_LIST_STYLE_HINT,
-                    FIELD_CONTENT_DESCRIPTION,
-                    FIELD_DATA_SOURCE,
-                    FIELD_PERSISTENCE_POLICY,
-                    FIELD_DISPLAY_POLICY
-            }, // TYPE_LIST
-            {
-                    FIELD_SHORT_TEXT,
-                    FIELD_SHORT_TITLE,
-                    FIELD_ICON,
-                    FIELD_ICON_BURN_IN_PROTECTION,
-                    FIELD_SMALL_IMAGE,
-                    FIELD_SMALL_IMAGE_BURN_IN_PROTECTION,
-                    FIELD_IMAGE_STYLE,
-                    FIELD_TAP_ACTION,
-                    FIELD_CONTENT_DESCRIPTION,
-                    FIELD_DATA_SOURCE,
-                    FIELD_COLOR_RAMP,
-                    FIELD_COLOR_RAMP_INTERPOLATED,
-                    FIELD_PERSISTENCE_POLICY,
-                    FIELD_DISPLAY_POLICY
-            }, // TYPE_GOAL_PROGRESS
-            {
-                    FIELD_SHORT_TEXT,
-                    FIELD_SHORT_TITLE,
-                    FIELD_ICON,
-                    FIELD_ICON_BURN_IN_PROTECTION,
-                    FIELD_SMALL_IMAGE,
-                    FIELD_SMALL_IMAGE_BURN_IN_PROTECTION,
-                    FIELD_IMAGE_STYLE,
-                    FIELD_TAP_ACTION,
-                    FIELD_CONTENT_DESCRIPTION,
-                    FIELD_DATA_SOURCE,
-                    FIELD_PERSISTENCE_POLICY,
-                    FIELD_DISPLAY_POLICY
-            }  // TYPE_WEIGHTED_ELEMENTS
-    };
+    private static final Map<Integer, String[]> OPTIONAL_FIELDS = optionalFieldsMap();
+
+    private static Map<Integer, String[]> optionalFieldsMap() {
+        HashMap<Integer, String[]> map = new HashMap<>();
+        map.put(TYPE_NOT_CONFIGURED, new String[0]);
+        map.put(TYPE_EMPTY, new String[0]);
+        map.put(TYPE_SHORT_TEXT, new String[]{
+                FIELD_SHORT_TITLE,
+                FIELD_ICON,
+                FIELD_ICON_BURN_IN_PROTECTION,
+                FIELD_SMALL_IMAGE,
+                FIELD_SMALL_IMAGE_BURN_IN_PROTECTION,
+                FIELD_IMAGE_STYLE,
+                FIELD_TAP_ACTION,
+                FIELD_CONTENT_DESCRIPTION,
+                FIELD_DATA_SOURCE,
+                FIELD_PERSISTENCE_POLICY,
+                FIELD_DISPLAY_POLICY});
+        map.put(TYPE_LONG_TEXT, new String[]{
+                FIELD_LONG_TITLE,
+                FIELD_ICON,
+                FIELD_ICON_BURN_IN_PROTECTION,
+                FIELD_SMALL_IMAGE,
+                FIELD_SMALL_IMAGE_BURN_IN_PROTECTION,
+                FIELD_IMAGE_STYLE,
+                FIELD_TAP_ACTION,
+                FIELD_CONTENT_DESCRIPTION,
+                FIELD_DATA_SOURCE,
+                FIELD_PERSISTENCE_POLICY,
+                FIELD_DISPLAY_POLICY});
+        map.put(TYPE_RANGED_VALUE, new String[]{
+                FIELD_SHORT_TEXT,
+                FIELD_SHORT_TITLE,
+                FIELD_ICON,
+                FIELD_ICON_BURN_IN_PROTECTION,
+                FIELD_SMALL_IMAGE,
+                FIELD_SMALL_IMAGE_BURN_IN_PROTECTION,
+                FIELD_IMAGE_STYLE,
+                FIELD_TAP_ACTION,
+                FIELD_CONTENT_DESCRIPTION,
+                FIELD_DATA_SOURCE,
+                EXP_FIELD_COLOR_RAMP,
+                EXP_FIELD_COLOR_RAMP_INTERPOLATED,
+                FIELD_PERSISTENCE_POLICY,
+                FIELD_DISPLAY_POLICY,
+                FIELD_VALUE_TYPE});
+        map.put(TYPE_ICON, new String[]{
+                FIELD_TAP_ACTION,
+                FIELD_ICON_BURN_IN_PROTECTION,
+                FIELD_CONTENT_DESCRIPTION,
+                FIELD_DATA_SOURCE,
+                FIELD_PERSISTENCE_POLICY,
+                FIELD_DISPLAY_POLICY});
+        map.put(TYPE_SMALL_IMAGE, new String[]{
+                FIELD_TAP_ACTION,
+                FIELD_SMALL_IMAGE_BURN_IN_PROTECTION,
+                FIELD_CONTENT_DESCRIPTION,
+                FIELD_DATA_SOURCE,
+                FIELD_PERSISTENCE_POLICY,
+                FIELD_DISPLAY_POLICY});
+        map.put(TYPE_LARGE_IMAGE, new String[]{
+                FIELD_TAP_ACTION,
+                FIELD_CONTENT_DESCRIPTION,
+                FIELD_DATA_SOURCE,
+                FIELD_PERSISTENCE_POLICY,
+                FIELD_DISPLAY_POLICY});
+        map.put(TYPE_NO_PERMISSION, new String[]{
+                FIELD_SHORT_TEXT,
+                FIELD_SHORT_TITLE,
+                FIELD_ICON,
+                FIELD_ICON_BURN_IN_PROTECTION,
+                FIELD_SMALL_IMAGE,
+                FIELD_SMALL_IMAGE_BURN_IN_PROTECTION,
+                FIELD_IMAGE_STYLE,
+                FIELD_CONTENT_DESCRIPTION,
+                FIELD_DATA_SOURCE,
+                FIELD_PERSISTENCE_POLICY,
+                FIELD_DISPLAY_POLICY
+        });
+        map.put(TYPE_NO_DATA, new String[]{
+                FIELD_CONTENT_DESCRIPTION,
+                FIELD_ICON,
+                FIELD_ICON_BURN_IN_PROTECTION,
+                FIELD_IMAGE_STYLE,
+                FIELD_LARGE_IMAGE,
+                FIELD_LONG_TEXT,
+                FIELD_LONG_TITLE,
+                FIELD_MAX_VALUE,
+                FIELD_MIN_VALUE,
+                FIELD_PLACEHOLDER_FIELDS,
+                FIELD_PLACEHOLDER_TYPE,
+                FIELD_SHORT_TEXT,
+                FIELD_SHORT_TITLE,
+                FIELD_SMALL_IMAGE,
+                FIELD_SMALL_IMAGE_BURN_IN_PROTECTION,
+                FIELD_TAP_ACTION,
+                FIELD_VALUE,
+                FIELD_VALUE_TYPE,
+                FIELD_DATA_SOURCE,
+                FIELD_PERSISTENCE_POLICY,
+                FIELD_DISPLAY_POLICY
+        });
+        map.put(EXP_TYPE_PROTO_LAYOUT, new String[]{
+                FIELD_TAP_ACTION,
+                FIELD_CONTENT_DESCRIPTION,
+                FIELD_DATA_SOURCE,
+                FIELD_PERSISTENCE_POLICY,
+                FIELD_DISPLAY_POLICY});
+        map.put(EXP_TYPE_LIST, new String[]{
+                FIELD_TAP_ACTION,
+                EXP_FIELD_LIST_STYLE_HINT,
+                FIELD_CONTENT_DESCRIPTION,
+                FIELD_DATA_SOURCE,
+                FIELD_PERSISTENCE_POLICY,
+                FIELD_DISPLAY_POLICY});
+        map.put(EXP_TYPE_GOAL_PROGRESS, new String[]{
+                FIELD_SHORT_TEXT,
+                FIELD_SHORT_TITLE,
+                FIELD_ICON,
+                FIELD_ICON_BURN_IN_PROTECTION,
+                FIELD_SMALL_IMAGE,
+                FIELD_SMALL_IMAGE_BURN_IN_PROTECTION,
+                FIELD_IMAGE_STYLE,
+                FIELD_TAP_ACTION,
+                FIELD_CONTENT_DESCRIPTION,
+                FIELD_DATA_SOURCE,
+                EXP_FIELD_COLOR_RAMP,
+                EXP_FIELD_COLOR_RAMP_INTERPOLATED,
+                FIELD_PERSISTENCE_POLICY,
+                FIELD_DISPLAY_POLICY});
+        map.put(EXP_TYPE_WEIGHTED_ELEMENTS, new String[]{
+                FIELD_SHORT_TEXT,
+                FIELD_SHORT_TITLE,
+                FIELD_ICON,
+                FIELD_ICON_BURN_IN_PROTECTION,
+                FIELD_SMALL_IMAGE,
+                FIELD_SMALL_IMAGE_BURN_IN_PROTECTION,
+                FIELD_IMAGE_STYLE,
+                FIELD_TAP_ACTION,
+                FIELD_CONTENT_DESCRIPTION,
+                FIELD_DATA_SOURCE,
+                FIELD_PERSISTENCE_POLICY,
+                FIELD_DISPLAY_POLICY});
+        return map;
+    }
 
     @NonNull
     public static final Creator<ComplicationData> CREATOR =
@@ -615,10 +640,10 @@
             if (isFieldValidForType(FIELD_MAX_VALUE, type)) {
                 oos.writeFloat(mComplicationData.getRangedMaxValue());
             }
-            if (isFieldValidForType(FIELD_TARGET_VALUE, type)) {
+            if (isFieldValidForType(EXP_FIELD_TARGET_VALUE, type)) {
                 oos.writeFloat(mComplicationData.getTargetValue());
             }
-            if (isFieldValidForType(FIELD_COLOR_RAMP, type)) {
+            if (isFieldValidForType(EXP_FIELD_COLOR_RAMP, type)) {
                 int[] colors = mComplicationData.getColorRamp();
                 if (colors != null) {
                     oos.writeBoolean(true);
@@ -630,7 +655,7 @@
                     oos.writeBoolean(false);
                 }
             }
-            if (isFieldValidForType(FIELD_COLOR_RAMP_INTERPOLATED, type)) {
+            if (isFieldValidForType(EXP_FIELD_COLOR_RAMP_INTERPOLATED, type)) {
                 Boolean isColorRampSmoothShaded = mComplicationData.isColorRampInterpolated();
                 if (isColorRampSmoothShaded != null) {
                     oos.writeBoolean(true);
@@ -639,7 +664,7 @@
                     oos.writeBoolean(false);
                 }
             }
-            if (isFieldValidForType(FIELD_ELEMENT_WEIGHTS, type)) {
+            if (isFieldValidForType(EXP_FIELD_ELEMENT_WEIGHTS, type)) {
                 float[] weights = mComplicationData.getElementWeights();
                 if (weights != null) {
                     oos.writeBoolean(true);
@@ -651,7 +676,7 @@
                     oos.writeBoolean(false);
                 }
             }
-            if (isFieldValidForType(FIELD_ELEMENT_COLORS, type)) {
+            if (isFieldValidForType(EXP_FIELD_ELEMENT_COLORS, type)) {
                 int[] colors = mComplicationData.getElementColors();
                 if (colors != null) {
                     oos.writeBoolean(true);
@@ -663,7 +688,7 @@
                     oos.writeBoolean(false);
                 }
             }
-            if (isFieldValidForType(FIELD_ELEMENT_BACKGROUND_COLOR, type)) {
+            if (isFieldValidForType(EXP_FIELD_ELEMENT_BACKGROUND_COLOR, type)) {
                 oos.writeInt(mComplicationData.getElementBackgroundColor());
             }
             if (isFieldValidForType(FIELD_START_TIME, type)) {
@@ -672,11 +697,11 @@
             if (isFieldValidForType(FIELD_END_TIME, type)) {
                 oos.writeLong(mComplicationData.getEndDateTimeMillis());
             }
-            oos.writeInt(mComplicationData.mFields.getInt(FIELD_LIST_ENTRY_TYPE));
-            if (isFieldValidForType(FIELD_LIST_STYLE_HINT, type)) {
+            oos.writeInt(mComplicationData.mFields.getInt(EXP_FIELD_LIST_ENTRY_TYPE));
+            if (isFieldValidForType(EXP_FIELD_LIST_STYLE_HINT, type)) {
                 oos.writeInt(mComplicationData.getListStyleHint());
             }
-            if (isFieldValidForType(FIELD_PROTO_LAYOUT_INTERACTIVE, type)) {
+            if (isFieldValidForType(EXP_FIELD_PROTO_LAYOUT_INTERACTIVE, type)) {
                 byte[] bytes = mComplicationData.getInteractiveLayout();
                 if (bytes == null) {
                     oos.writeInt(0);
@@ -685,7 +710,7 @@
                     oos.write(bytes);
                 }
             }
-            if (isFieldValidForType(FIELD_PROTO_LAYOUT_AMBIENT, type)) {
+            if (isFieldValidForType(EXP_FIELD_PROTO_LAYOUT_AMBIENT, type)) {
                 byte[] bytes = mComplicationData.getAmbientLayout();
                 if (bytes == null) {
                     oos.writeInt(0);
@@ -694,7 +719,7 @@
                     oos.write(bytes);
                 }
             }
-            if (isFieldValidForType(FIELD_PROTO_LAYOUT_RESOURCES, type)) {
+            if (isFieldValidForType(EXP_FIELD_PROTO_LAYOUT_RESOURCES, type)) {
                 byte[] bytes = mComplicationData.getLayoutResources();
                 if (bytes == null) {
                     oos.writeInt(0);
@@ -817,38 +842,38 @@
             if (isFieldValidForType(FIELD_MAX_VALUE, type)) {
                 fields.putFloat(FIELD_MAX_VALUE, ois.readFloat());
             }
-            if (isFieldValidForType(FIELD_TARGET_VALUE, type)) {
-                fields.putFloat(FIELD_TARGET_VALUE, ois.readFloat());
+            if (isFieldValidForType(EXP_FIELD_TARGET_VALUE, type)) {
+                fields.putFloat(EXP_FIELD_TARGET_VALUE, ois.readFloat());
             }
-            if (isFieldValidForType(FIELD_COLOR_RAMP, type) && ois.readBoolean()) {
+            if (isFieldValidForType(EXP_FIELD_COLOR_RAMP, type) && ois.readBoolean()) {
                 int numColors = ois.readInt();
                 int[] colors = new int[numColors];
                 for (int i = 0; i < numColors; ++i) {
                     colors[i] = ois.readInt();
                 }
-                fields.putIntArray(FIELD_COLOR_RAMP, colors);
+                fields.putIntArray(EXP_FIELD_COLOR_RAMP, colors);
             }
-            if (isFieldValidForType(FIELD_COLOR_RAMP_INTERPOLATED, type) && ois.readBoolean()) {
-                fields.putBoolean(FIELD_COLOR_RAMP_INTERPOLATED, ois.readBoolean());
+            if (isFieldValidForType(EXP_FIELD_COLOR_RAMP_INTERPOLATED, type) && ois.readBoolean()) {
+                fields.putBoolean(EXP_FIELD_COLOR_RAMP_INTERPOLATED, ois.readBoolean());
             }
-            if (isFieldValidForType(FIELD_ELEMENT_WEIGHTS, type) && ois.readBoolean()) {
+            if (isFieldValidForType(EXP_FIELD_ELEMENT_WEIGHTS, type) && ois.readBoolean()) {
                 int numWeights = ois.readInt();
                 float[] weights = new float[numWeights];
                 for (int i = 0; i < numWeights; ++i) {
                     weights[i] = ois.readFloat();
                 }
-                fields.putFloatArray(FIELD_ELEMENT_WEIGHTS, weights);
+                fields.putFloatArray(EXP_FIELD_ELEMENT_WEIGHTS, weights);
             }
-            if (isFieldValidForType(FIELD_ELEMENT_COLORS, type) && ois.readBoolean()) {
+            if (isFieldValidForType(EXP_FIELD_ELEMENT_COLORS, type) && ois.readBoolean()) {
                 int numColors = ois.readInt();
                 int[] colors = new int[numColors];
                 for (int i = 0; i < numColors; ++i) {
                     colors[i] = ois.readInt();
                 }
-                fields.putIntArray(FIELD_ELEMENT_COLORS, colors);
+                fields.putIntArray(EXP_FIELD_ELEMENT_COLORS, colors);
             }
-            if (isFieldValidForType(FIELD_ELEMENT_BACKGROUND_COLOR, type)) {
-                fields.putInt(FIELD_ELEMENT_BACKGROUND_COLOR, ois.readInt());
+            if (isFieldValidForType(EXP_FIELD_ELEMENT_BACKGROUND_COLOR, type)) {
+                fields.putInt(EXP_FIELD_ELEMENT_BACKGROUND_COLOR, ois.readInt());
             }
             if (isFieldValidForType(FIELD_START_TIME, type)) {
                 fields.putLong(FIELD_START_TIME, ois.readLong());
@@ -858,33 +883,33 @@
             }
             int listEntryType = ois.readInt();
             if (listEntryType != 0) {
-                fields.putInt(FIELD_LIST_ENTRY_TYPE, listEntryType);
+                fields.putInt(EXP_FIELD_LIST_ENTRY_TYPE, listEntryType);
             }
-            if (isFieldValidForType(FIELD_LIST_STYLE_HINT, type)) {
-                fields.putInt(FIELD_LIST_STYLE_HINT, ois.readInt());
+            if (isFieldValidForType(EXP_FIELD_LIST_STYLE_HINT, type)) {
+                fields.putInt(EXP_FIELD_LIST_STYLE_HINT, ois.readInt());
             }
-            if (isFieldValidForType(FIELD_PROTO_LAYOUT_INTERACTIVE, type)) {
+            if (isFieldValidForType(EXP_FIELD_PROTO_LAYOUT_INTERACTIVE, type)) {
                 int length = ois.readInt();
                 if (length > 0) {
                     byte[] protoLayout = new byte[length];
                     ois.readFully(protoLayout);
-                    fields.putByteArray(FIELD_PROTO_LAYOUT_INTERACTIVE, protoLayout);
+                    fields.putByteArray(EXP_FIELD_PROTO_LAYOUT_INTERACTIVE, protoLayout);
                 }
             }
-            if (isFieldValidForType(FIELD_PROTO_LAYOUT_AMBIENT, type)) {
+            if (isFieldValidForType(EXP_FIELD_PROTO_LAYOUT_AMBIENT, type)) {
                 int length = ois.readInt();
                 if (length > 0) {
                     byte[] ambientProtoLayout = new byte[length];
                     ois.readFully(ambientProtoLayout);
-                    fields.putByteArray(FIELD_PROTO_LAYOUT_AMBIENT, ambientProtoLayout);
+                    fields.putByteArray(EXP_FIELD_PROTO_LAYOUT_AMBIENT, ambientProtoLayout);
                 }
             }
-            if (isFieldValidForType(FIELD_PROTO_LAYOUT_RESOURCES, type)) {
+            if (isFieldValidForType(EXP_FIELD_PROTO_LAYOUT_RESOURCES, type)) {
                 int length = ois.readInt();
                 if (length > 0) {
                     byte[] protoLayoutResources = new byte[length];
                     ois.readFully(protoLayoutResources);
-                    fields.putByteArray(FIELD_PROTO_LAYOUT_RESOURCES, protoLayoutResources);
+                    fields.putByteArray(EXP_FIELD_PROTO_LAYOUT_RESOURCES, protoLayoutResources);
                 }
             }
             if (isFieldValidForType(FIELD_DATA_SOURCE, type)) {
@@ -920,7 +945,7 @@
                     entry.readObject(ois);
                     parcels[i] = entry.mComplicationData.mFields;
                 }
-                fields.putParcelableArray(FIELD_LIST_ENTRIES, parcels);
+                fields.putParcelableArray(EXP_FIELD_LIST_ENTRIES, parcels);
             }
 
             if (isFieldValidForType(FIELD_PLACEHOLDER_FIELDS, type)) {
@@ -1099,7 +1124,7 @@
     @Nullable
     @SuppressWarnings("deprecation")
     public List<ComplicationData> getListEntries() {
-        Parcelable[] bundles = mFields.getParcelableArray(FIELD_LIST_ENTRIES);
+        Parcelable[] bundles = mFields.getParcelableArray(EXP_FIELD_LIST_ENTRIES);
         if (bundles == null) {
             return null;
         }
@@ -1107,7 +1132,7 @@
         for (Parcelable parcelable : bundles) {
             Bundle bundle = (Bundle) parcelable;
             bundle.setClassLoader(getClass().getClassLoader());
-            entries.add(new ComplicationData(bundle.getInt(FIELD_LIST_ENTRY_TYPE), bundle));
+            entries.add(new ComplicationData(bundle.getInt(EXP_FIELD_LIST_ENTRY_TYPE), bundle));
         }
         return entries;
     }
@@ -1228,7 +1253,7 @@
      */
     public boolean hasTargetValue() {
         try {
-            return isFieldValidForType(FIELD_TARGET_VALUE, mType);
+            return isFieldValidForType(EXP_FIELD_TARGET_VALUE, mType);
         } catch (BadParcelableException e) {
             return false;
         }
@@ -1237,26 +1262,26 @@
     /**
      * Returns the <i>value</i> field for this complication.
      *
-     * <p>Valid only if the type of this complication data is {@link #TYPE_GOAL_PROGRESS}.
+     * <p>Valid only if the type of this complication data is {@link #EXP_TYPE_GOAL_PROGRESS}.
      * Otherwise returns zero.
      */
     public float getTargetValue() {
-        checkFieldValidForTypeWithoutThrowingException(FIELD_TARGET_VALUE, mType);
-        return mFields.getFloat(FIELD_TARGET_VALUE);
+        checkFieldValidForTypeWithoutThrowingException(EXP_FIELD_TARGET_VALUE, mType);
+        return mFields.getFloat(EXP_FIELD_TARGET_VALUE);
     }
 
     /**
      * Returns the colors for the progress bar.
      *
      * <p>Valid only if the type of this complication data is {@link #TYPE_RANGED_VALUE} or
-     * {@link #TYPE_GOAL_PROGRESS}.
+     * {@link #EXP_TYPE_GOAL_PROGRESS}.
      */
     @ColorInt
     @Nullable
     public int[] getColorRamp() {
-        checkFieldValidForTypeWithoutThrowingException(FIELD_COLOR_RAMP, mType);
-        if (mFields.containsKey(FIELD_COLOR_RAMP)) {
-            return mFields.getIntArray(FIELD_COLOR_RAMP);
+        checkFieldValidForTypeWithoutThrowingException(EXP_FIELD_COLOR_RAMP, mType);
+        if (mFields.containsKey(EXP_FIELD_COLOR_RAMP)) {
+            return mFields.getIntArray(EXP_FIELD_COLOR_RAMP);
         }
         return null;
     }
@@ -1265,16 +1290,16 @@
      * Returns either a boolean where: true means the color ramp colors should be smoothly
      * interpolatded; false means the color ramp should be rendered in equal sized blocks of
      * solid color; null means this value wasn't set, i.e. the complication is not of type
-     * {@link #TYPE_RANGED_VALUE} or {@link #TYPE_GOAL_PROGRESS}.
+     * {@link #TYPE_RANGED_VALUE} or {@link #EXP_TYPE_GOAL_PROGRESS}.
      *
      * <p>Valid only if the type of this complication data is {@link #TYPE_RANGED_VALUE} or
-     * {@link #TYPE_GOAL_PROGRESS}.
+     * {@link #EXP_TYPE_GOAL_PROGRESS}.
      */
     @Nullable
     public Boolean isColorRampInterpolated() {
-        checkFieldValidForTypeWithoutThrowingException(FIELD_COLOR_RAMP_INTERPOLATED, mType);
-        if (mFields.containsKey(FIELD_COLOR_RAMP_INTERPOLATED)) {
-            return mFields.getBoolean(FIELD_COLOR_RAMP_INTERPOLATED);
+        checkFieldValidForTypeWithoutThrowingException(EXP_FIELD_COLOR_RAMP_INTERPOLATED, mType);
+        if (mFields.containsKey(EXP_FIELD_COLOR_RAMP_INTERPOLATED)) {
+            return mFields.getBoolean(EXP_FIELD_COLOR_RAMP_INTERPOLATED);
         }
         return null;
     }
@@ -1658,37 +1683,37 @@
     /**
      * Returns the element weights for this complication.
      *
-     * <p>Valid only if the type of this complication data is {@link #TYPE_WEIGHTED_ELEMENTS}.
+     * <p>Valid only if the type of this complication data is {@link #EXP_TYPE_WEIGHTED_ELEMENTS}.
      * Otherwise returns null.
      */
     @Nullable
     public float[] getElementWeights() {
-        checkFieldValidForTypeWithoutThrowingException(FIELD_ELEMENT_WEIGHTS, mType);
-        return mFields.getFloatArray(FIELD_ELEMENT_WEIGHTS);
+        checkFieldValidForTypeWithoutThrowingException(EXP_FIELD_ELEMENT_WEIGHTS, mType);
+        return mFields.getFloatArray(EXP_FIELD_ELEMENT_WEIGHTS);
     }
 
     /**
      * Returns the element colors for this complication.
      *
-     * <p>Valid only if the type of this complication data is {@link #TYPE_WEIGHTED_ELEMENTS}.
+     * <p>Valid only if the type of this complication data is {@link #EXP_TYPE_WEIGHTED_ELEMENTS}.
      * Otherwise returns null.
      */
     @Nullable
     public int[] getElementColors() {
-        checkFieldValidForTypeWithoutThrowingException(FIELD_ELEMENT_COLORS, mType);
-        return mFields.getIntArray(FIELD_ELEMENT_COLORS);
+        checkFieldValidForTypeWithoutThrowingException(EXP_FIELD_ELEMENT_COLORS, mType);
+        return mFields.getIntArray(EXP_FIELD_ELEMENT_COLORS);
     }
 
     /**
      * Returns the background color to use between elements for this complication.
      *
-     * <p>Valid only if the type of this complication data is {@link #TYPE_WEIGHTED_ELEMENTS}.
+     * <p>Valid only if the type of this complication data is {@link #EXP_TYPE_WEIGHTED_ELEMENTS}.
      * Otherwise returns 0.
      */
     @ColorInt
     public int getElementBackgroundColor() {
-        checkFieldValidForTypeWithoutThrowingException(FIELD_ELEMENT_BACKGROUND_COLOR, mType);
-        return mFields.getInt(FIELD_ELEMENT_BACKGROUND_COLOR);
+        checkFieldValidForTypeWithoutThrowingException(EXP_FIELD_ELEMENT_BACKGROUND_COLOR, mType);
+        return mFields.getInt(EXP_FIELD_ELEMENT_BACKGROUND_COLOR);
     }
 
     /**
@@ -1709,30 +1734,30 @@
     /** Returns the bytes of the proto layout. */
     @Nullable
     public byte[] getInteractiveLayout() {
-        return mFields.getByteArray(FIELD_PROTO_LAYOUT_INTERACTIVE);
+        return mFields.getByteArray(EXP_FIELD_PROTO_LAYOUT_INTERACTIVE);
     }
 
     /**
      * Returns the list style hint.
      *
-     * <p>Valid only if the type of this complication data is {@link #TYPE_LIST}. Otherwise returns
-     * zero.
+     * <p>Valid only if the type of this complication data is {@link #EXP_TYPE_LIST}. Otherwise
+     * returns zero.
      */
     public int getListStyleHint() {
-        checkFieldValidForType(FIELD_LIST_STYLE_HINT, mType);
-        return mFields.getInt(FIELD_LIST_STYLE_HINT);
+        checkFieldValidForType(EXP_FIELD_LIST_STYLE_HINT, mType);
+        return mFields.getInt(EXP_FIELD_LIST_STYLE_HINT);
     }
 
     /** Returns the bytes of the ambient proto layout. */
     @Nullable
     public byte[] getAmbientLayout() {
-        return mFields.getByteArray(FIELD_PROTO_LAYOUT_AMBIENT);
+        return mFields.getByteArray(EXP_FIELD_PROTO_LAYOUT_AMBIENT);
     }
 
     /** Returns the bytes of the proto layout resources. */
     @Nullable
     public byte[] getLayoutResources() {
-        return mFields.getByteArray(FIELD_PROTO_LAYOUT_RESOURCES);
+        return mFields.getByteArray(EXP_FIELD_PROTO_LAYOUT_RESOURCES);
     }
 
     /** Return's the complication's [ComplicationCachePolicy]. */
@@ -1785,12 +1810,16 @@
     }
 
     static boolean isFieldValidForType(String field, @ComplicationType int type) {
-        for (String requiredField : REQUIRED_FIELDS[type]) {
+        String[] requiredFields = REQUIRED_FIELDS.get(type);
+        if (requiredFields == null) {
+            return false;
+        }
+        for (String requiredField : requiredFields) {
             if (requiredField.equals(field)) {
                 return true;
             }
         }
-        for (String optionalField : OPTIONAL_FIELDS[type]) {
+        for (String optionalField : Objects.requireNonNull(OPTIONAL_FIELDS.get(type))) {
             if (optionalField.equals(field)) {
                 return true;
             }
@@ -1799,7 +1828,7 @@
     }
 
     private static boolean isTypeSupported(int type) {
-        return 1 <= type && type <= REQUIRED_FIELDS.length;
+        return VALID_TYPES.contains(type);
     }
 
     /**
@@ -1949,13 +1978,13 @@
 
         /**
          * Sets the <i>value</i> field. This is required for the {@link #TYPE_RANGED_VALUE} type,
-         * and the {@link #TYPE_GOAL_PROGRESS} type. For {@link #TYPE_RANGED_VALUE} value must be
-         * in the range [min .. max] for {@link #TYPE_GOAL_PROGRESS} value must be >= 0 and may be
-         * greater than target value.
+         * and the {@link #EXP_TYPE_GOAL_PROGRESS} type. For {@link #TYPE_RANGED_VALUE} value must
+         * be in the range [min .. max] for {@link #EXP_TYPE_GOAL_PROGRESS} value must be >= and may
+         * be greater than target value.
          *
-         * <p>Both the {@link #TYPE_RANGED_VALUE} complication and the {@link #TYPE_GOAL_PROGRESS}
-         * complication visually present a single value, which is usually a percentage. E.g. you
-         * have completed 70% of today's  target of 10000 steps.
+         * <p>Both the {@link #TYPE_RANGED_VALUE} complication and the
+         * {@link #EXP_TYPE_GOAL_PROGRESS} complication visually present a single value, which is
+         * usually a percentage. E.g. you have completed 70% of today's  target of 10000 steps.
          *
          * <p>Returns this Builder to allow chaining.
          *
@@ -2010,10 +2039,10 @@
         }
 
         /**
-         * Sets the <i>targetValue</i> field. This is required for the {@link #TYPE_GOAL_PROGRESS}
-         * type, and is not valid for any other type. A {@link #TYPE_GOAL_PROGRESS} complication
-         * visually presents a single value, which is usually a percentage. E.g. you
-         * have completed 70% of today's target of 10000 steps.
+         * Sets the <i>targetValue</i> field. This is required for the
+         * {@link #EXP_TYPE_GOAL_PROGRESS} type, and is not valid for any other type. A
+         * {@link #EXP_TYPE_GOAL_PROGRESS} complication visually presents a single value, which
+         * is usually a percentage. E.g. you have completed 70% of today's target of 10000 steps.
          *
          * <p>Returns this Builder to allow chaining.
          *
@@ -2021,7 +2050,7 @@
          */
         @NonNull
         public Builder setTargetValue(float targetValue) {
-            putFloatField(FIELD_TARGET_VALUE, targetValue);
+            putFloatField(EXP_FIELD_TARGET_VALUE, targetValue);
             return this;
         }
 
@@ -2218,13 +2247,13 @@
         /**
          * Sets the list style hint
          *
-         * <p>Valid only if the type of this complication data is {@link #TYPE_LIST}. Otherwise
+         * <p>Valid only if the type of this complication data is {@link #EXP_TYPE_LIST}. Otherwise
          * returns
          * zero.
          */
         @NonNull
         public Builder setListStyleHint(int listStyleHint) {
-            putIntField(FIELD_LIST_STYLE_HINT, listStyleHint);
+            putIntField(EXP_FIELD_LIST_STYLE_HINT, listStyleHint);
             return this;
         }
 
@@ -2315,7 +2344,7 @@
          */
         @NonNull
         public Builder setAmbientLayout(@NonNull byte[] ambientProtoLayout) {
-            putByteArrayField(FIELD_PROTO_LAYOUT_AMBIENT, ambientProtoLayout);
+            putByteArrayField(EXP_FIELD_PROTO_LAYOUT_AMBIENT, ambientProtoLayout);
             return this;
         }
 
@@ -2326,7 +2355,7 @@
          */
         @NonNull
         public Builder setInteractiveLayout(@NonNull byte[] protoLayout) {
-            putByteArrayField(FIELD_PROTO_LAYOUT_INTERACTIVE, protoLayout);
+            putByteArrayField(EXP_FIELD_PROTO_LAYOUT_INTERACTIVE, protoLayout);
             return this;
         }
 
@@ -2337,7 +2366,7 @@
          */
         @NonNull
         public Builder setLayoutResources(@NonNull byte[] resources) {
-            putByteArrayField(FIELD_PROTO_LAYOUT_RESOURCES, resources);
+            putByteArrayField(EXP_FIELD_PROTO_LAYOUT_RESOURCES, resources);
             return this;
         }
 
@@ -2348,7 +2377,7 @@
          */
         @NonNull
         public Builder setColorRamp(@Nullable int[] colorRamp) {
-            putOrRemoveField(FIELD_COLOR_RAMP, colorRamp);
+            putOrRemoveField(EXP_FIELD_COLOR_RAMP, colorRamp);
             return this;
         }
 
@@ -2360,7 +2389,7 @@
          */
         @NonNull
         public Builder setColorRampIsSmoothShaded(@Nullable Boolean isSmoothShaded) {
-            putOrRemoveField(FIELD_COLOR_RAMP_INTERPOLATED, isSmoothShaded);
+            putOrRemoveField(EXP_FIELD_COLOR_RAMP_INTERPOLATED, isSmoothShaded);
             return this;
         }
 
@@ -2373,14 +2402,14 @@
         public Builder setListEntryCollection(
                 @Nullable Collection<ComplicationData> timelineEntries) {
             if (timelineEntries == null) {
-                mFields.remove(FIELD_LIST_ENTRIES);
+                mFields.remove(EXP_FIELD_LIST_ENTRIES);
             } else {
                 mFields.putParcelableArray(
-                        FIELD_LIST_ENTRIES,
+                        EXP_FIELD_LIST_ENTRIES,
                         timelineEntries.stream()
                                 .map(
                                         e -> {
-                                            e.mFields.putInt(FIELD_LIST_ENTRY_TYPE, e.mType);
+                                            e.mFields.putInt(EXP_FIELD_LIST_ENTRY_TYPE, e.mType);
                                             return e.mFields;
                                         })
                                 .toArray(Parcelable[]::new));
@@ -2395,7 +2424,7 @@
          */
         @NonNull
         public Builder setElementWeights(@Nullable float[] elementWeights) {
-            putOrRemoveField(FIELD_ELEMENT_WEIGHTS, elementWeights);
+            putOrRemoveField(EXP_FIELD_ELEMENT_WEIGHTS, elementWeights);
             return this;
         }
 
@@ -2406,7 +2435,7 @@
          */
         @NonNull
         public Builder setElementColors(@Nullable int[] elementColors) {
-            putOrRemoveField(FIELD_ELEMENT_COLORS, elementColors);
+            putOrRemoveField(EXP_FIELD_ELEMENT_COLORS, elementColors);
             return this;
         }
 
@@ -2417,7 +2446,7 @@
          */
         @NonNull
         public Builder setElementBackgroundColor(@ColorInt int elementBackgroundColor) {
-            putOrRemoveField(FIELD_ELEMENT_BACKGROUND_COLOR, elementBackgroundColor);
+            putOrRemoveField(EXP_FIELD_ELEMENT_BACKGROUND_COLOR, elementBackgroundColor);
             return this;
         }
 
@@ -2431,7 +2460,7 @@
         @SuppressLint("SyntheticAccessor")
         public ComplicationData build() {
             // Validate.
-            for (String requiredField : REQUIRED_FIELDS[mType]) {
+            for (String requiredField : Objects.requireNonNull(REQUIRED_FIELDS.get(mType))) {
                 if (!mFields.containsKey(requiredField)) {
                     throw new IllegalStateException(
                             "Field " + requiredField + " is required for type " + mType);
diff --git a/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/complications/data/Type.kt b/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/complications/data/Type.kt
index e64be10..2d02345 100644
--- a/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/complications/data/Type.kt
+++ b/wear/watchface/watchface-complications-data/src/main/java/androidx/wear/watchface/complications/data/Type.kt
@@ -38,14 +38,13 @@
     NO_PERMISSION(WireComplicationData.TYPE_NO_PERMISSION),
 
     @ComplicationExperimental
-    PROTO_LAYOUT(WireComplicationData.TYPE_PROTO_LAYOUT),
+    PROTO_LAYOUT(WireComplicationData.EXP_TYPE_PROTO_LAYOUT),
     @ComplicationExperimental
-    GOAL_PROGRESS(WireComplicationData.TYPE_GOAL_PROGRESS),
+    GOAL_PROGRESS(WireComplicationData.EXP_TYPE_GOAL_PROGRESS),
     @ComplicationExperimental
-    WEIGHTED_ELEMENTS(WireComplicationData.TYPE_WEIGHTED_ELEMENTS),
-
+    WEIGHTED_ELEMENTS(WireComplicationData.EXP_TYPE_WEIGHTED_ELEMENTS),
     @ComplicationExperimental
-    LIST(WireComplicationData.TYPE_LIST);
+    LIST(WireComplicationData.EXP_TYPE_LIST);
 
     /**
      * Converts this value to the integer value used for serialization.
diff --git a/wear/watchface/watchface-complications-data/src/test/java/androidx/wear/watchface/complications/data/DataTest.kt b/wear/watchface/watchface-complications-data/src/test/java/androidx/wear/watchface/complications/data/DataTest.kt
index 29fc589..340b6ee 100644
--- a/wear/watchface/watchface-complications-data/src/test/java/androidx/wear/watchface/complications/data/DataTest.kt
+++ b/wear/watchface/watchface-complications-data/src/test/java/androidx/wear/watchface/complications/data/DataTest.kt
@@ -564,7 +564,7 @@
             .build()
         ParcelableSubject.assertThat(data.asWireComplicationData())
             .hasSameSerializationAs(
-                WireComplicationDataBuilder(WireComplicationData.TYPE_GOAL_PROGRESS)
+                WireComplicationDataBuilder(WireComplicationData.EXP_TYPE_GOAL_PROGRESS)
                     .setRangedValue(1200f)
                     .setTargetValue(10000f)
                     .setShortTitle(WireComplicationText.plainText("steps"))
@@ -637,7 +637,7 @@
             .build()
         ParcelableSubject.assertThat(data.asWireComplicationData())
             .hasSameSerializationAs(
-                WireComplicationDataBuilder(WireComplicationData.TYPE_GOAL_PROGRESS)
+                WireComplicationDataBuilder(WireComplicationData.EXP_TYPE_GOAL_PROGRESS)
                     .setRangedValue(1200f)
                     .setTargetValue(10000f)
                     .setIcon(monochromaticImageIcon)
@@ -796,7 +796,7 @@
             .build()
         ParcelableSubject.assertThat(data.asWireComplicationData())
             .hasSameSerializationAs(
-                WireComplicationDataBuilder(WireComplicationData.TYPE_WEIGHTED_ELEMENTS)
+                WireComplicationDataBuilder(WireComplicationData.EXP_TYPE_WEIGHTED_ELEMENTS)
                     .setElementWeights(floatArrayOf(0.5f, 1f, 2f))
                     .setElementColors(intArrayOf(Color.RED, Color.GREEN, Color.BLUE))
                     .setElementBackgroundColor(Color.GRAY)
@@ -884,7 +884,7 @@
             .build()
         ParcelableSubject.assertThat(data.asWireComplicationData())
             .hasSameSerializationAs(
-                WireComplicationDataBuilder(WireComplicationData.TYPE_WEIGHTED_ELEMENTS)
+                WireComplicationDataBuilder(WireComplicationData.EXP_TYPE_WEIGHTED_ELEMENTS)
                     .setElementWeights(floatArrayOf(0.5f, 1f, 2f))
                     .setElementColors(intArrayOf(Color.RED, Color.GREEN, Color.BLUE))
                     .setElementBackgroundColor(Color.TRANSPARENT)
@@ -1261,7 +1261,7 @@
 
         ParcelableSubject.assertThat(data.asWireComplicationData())
             .hasSameSerializationAs(
-                WireComplicationDataBuilder(WireComplicationData.TYPE_LIST)
+                WireComplicationDataBuilder(WireComplicationData.EXP_TYPE_LIST)
                     .setListEntryCollection(
                         listOf(
                             WireComplicationDataBuilder(WireComplicationData.TYPE_SHORT_TEXT)
@@ -1616,7 +1616,7 @@
             .hasSameSerializationAs(
                 WireComplicationDataBuilder(WireComplicationData.TYPE_NO_DATA)
                     .setPlaceholder(
-                        WireComplicationDataBuilder(WireComplicationData.TYPE_GOAL_PROGRESS)
+                        WireComplicationDataBuilder(WireComplicationData.EXP_TYPE_GOAL_PROGRESS)
                             .setRangedValue(GoalProgressComplicationData.PLACEHOLDER)
                             .setTargetValue(10000f)
                             .setShortText(ComplicationText.PLACEHOLDER.toWireComplicationText())
@@ -1705,7 +1705,7 @@
             .hasSameSerializationAs(
                 WireComplicationDataBuilder(WireComplicationData.TYPE_NO_DATA)
                     .setPlaceholder(
-                        WireComplicationDataBuilder(WireComplicationData.TYPE_WEIGHTED_ELEMENTS)
+                        WireComplicationDataBuilder(WireComplicationData.EXP_TYPE_WEIGHTED_ELEMENTS)
                             .setElementWeights(floatArrayOf(0.5f, 1f, 2f))
                             .setElementColors(intArrayOf(Color.RED, Color.GREEN, Color.BLUE))
                             .setElementBackgroundColor(Color.GRAY)
@@ -2185,7 +2185,7 @@
     @Test
     public fun goalProgressComplicationData() {
         assertRoundtrip(
-            WireComplicationDataBuilder(WireComplicationData.TYPE_GOAL_PROGRESS)
+            WireComplicationDataBuilder(WireComplicationData.EXP_TYPE_GOAL_PROGRESS)
                 .setRangedValue(1200f)
                 .setTargetValue(10000f)
                 .setShortTitle(WireComplicationText.plainText("steps"))
@@ -2203,7 +2203,7 @@
     @Test
     public fun weightedElementsComplicationData() {
         assertRoundtrip(
-            WireComplicationDataBuilder(WireComplicationData.TYPE_WEIGHTED_ELEMENTS)
+            WireComplicationDataBuilder(WireComplicationData.EXP_TYPE_WEIGHTED_ELEMENTS)
                 .setElementWeights(floatArrayOf(0.5f, 1f, 2f))
                 .setElementColors(intArrayOf(Color.RED, Color.GREEN, Color.BLUE))
                 .setElementBackgroundColor(Color.DKGRAY)
@@ -2279,7 +2279,7 @@
         val resources = ByteArray(3)
 
         assertRoundtrip(
-            WireComplicationDataBuilder(WireComplicationData.TYPE_PROTO_LAYOUT)
+            WireComplicationDataBuilder(WireComplicationData.EXP_TYPE_PROTO_LAYOUT)
                 .setAmbientLayout(ambientLayout)
                 .setInteractiveLayout(interactiveLayout)
                 .setLayoutResources(resources)
@@ -2305,7 +2305,7 @@
             .build()
 
         assertRoundtrip(
-            WireComplicationDataBuilder(WireComplicationData.TYPE_LIST)
+            WireComplicationDataBuilder(WireComplicationData.EXP_TYPE_LIST)
                 .setListEntryCollection(listOf(wireShortText, wireRangedValue))
                 .setListStyleHint(
                     ListComplicationData.StyleHint.RowOfColumns.ordinal
@@ -2400,7 +2400,7 @@
         assertRoundtrip(
             WireComplicationDataBuilder(WireComplicationData.TYPE_NO_DATA)
                 .setPlaceholder(
-                    WireComplicationDataBuilder(WireComplicationData.TYPE_GOAL_PROGRESS)
+                    WireComplicationDataBuilder(WireComplicationData.EXP_TYPE_GOAL_PROGRESS)
                         .setRangedValue(1200f)
                         .setTargetValue(10000f)
                         .setShortTitle(WireComplicationText.plainText("steps"))
@@ -2427,7 +2427,7 @@
         assertRoundtrip(
             WireComplicationDataBuilder(WireComplicationData.TYPE_NO_DATA)
                 .setPlaceholder(
-                    WireComplicationDataBuilder(WireComplicationData.TYPE_WEIGHTED_ELEMENTS)
+                    WireComplicationDataBuilder(WireComplicationData.EXP_TYPE_WEIGHTED_ELEMENTS)
                         .setElementWeights(floatArrayOf(0.5f, 1f, 2f))
                         .setElementColors(intArrayOf(Color.RED, Color.GREEN, Color.BLUE))
                         .setElementBackgroundColor(Color.DKGRAY)
@@ -2499,7 +2499,7 @@
         assertRoundtrip(
             WireComplicationDataBuilder(WireComplicationData.TYPE_NO_DATA)
                 .setPlaceholder(
-                    WireComplicationDataBuilder(WireComplicationData.TYPE_PROTO_LAYOUT)
+                    WireComplicationDataBuilder(WireComplicationData.EXP_TYPE_PROTO_LAYOUT)
                         .setAmbientLayout(ambientLayout)
                         .setInteractiveLayout(interactiveLayout)
                         .setLayoutResources(resources)
@@ -2533,7 +2533,7 @@
         assertRoundtrip(
             WireComplicationDataBuilder(WireComplicationData.TYPE_NO_DATA)
                 .setPlaceholder(
-                    WireComplicationDataBuilder(WireComplicationData.TYPE_LIST)
+                    WireComplicationDataBuilder(WireComplicationData.EXP_TYPE_LIST)
                         .setListEntryCollection(listOf(wireShortText, wireRangedValue))
                         .setListStyleHint(
                             ListComplicationData.StyleHint.RowOfColumns.ordinal
@@ -2962,7 +2962,7 @@
             .build()
         ParcelableSubject.assertThat(data.asWireComplicationData())
             .hasSameSerializationAs(
-                WireComplicationDataBuilder(WireComplicationData.TYPE_GOAL_PROGRESS)
+                WireComplicationDataBuilder(WireComplicationData.EXP_TYPE_GOAL_PROGRESS)
                     .setRangedValue(1200f)
                     .setTargetValue(10000f)
                     .setShortTitle(WireComplicationText.plainText("steps"))
@@ -2993,7 +2993,7 @@
             .build()
         ParcelableSubject.assertThat(data.asWireComplicationData())
             .hasSameSerializationAs(
-                WireComplicationDataBuilder(WireComplicationData.TYPE_WEIGHTED_ELEMENTS)
+                WireComplicationDataBuilder(WireComplicationData.EXP_TYPE_WEIGHTED_ELEMENTS)
                     .setElementWeights(floatArrayOf(0.5f, 1f, 2f))
                     .setElementColors(intArrayOf(Color.RED, Color.GREEN, Color.BLUE))
                     .setElementBackgroundColor(Color.TRANSPARENT)
@@ -3082,7 +3082,7 @@
 
         ParcelableSubject.assertThat(data.asWireComplicationData())
             .hasSameSerializationAs(
-                WireComplicationDataBuilder(WireComplicationData.TYPE_PROTO_LAYOUT)
+                WireComplicationDataBuilder(WireComplicationData.EXP_TYPE_PROTO_LAYOUT)
                     .setAmbientLayout(ambientLayout)
                     .setInteractiveLayout(interactiveLayout)
                     .setLayoutResources(resources)
@@ -3137,7 +3137,7 @@
 
         ParcelableSubject.assertThat(data.asWireComplicationData())
             .hasSameSerializationAs(
-                WireComplicationDataBuilder(WireComplicationData.TYPE_LIST)
+                WireComplicationDataBuilder(WireComplicationData.EXP_TYPE_LIST)
                     .setListEntryCollection(listOf(wireShortText, wireRangedValue))
                     .setListStyleHint(
                         ListComplicationData.StyleHint.RowOfColumns.ordinal
@@ -3243,7 +3243,7 @@
             .hasSameSerializationAs(
                 WireComplicationDataBuilder(WireComplicationData.TYPE_NO_DATA)
                     .setPlaceholder(
-                        WireComplicationDataBuilder(WireComplicationData.TYPE_GOAL_PROGRESS)
+                        WireComplicationDataBuilder(WireComplicationData.EXP_TYPE_GOAL_PROGRESS)
                             .setRangedValue(1200f)
                             .setTargetValue(10000f)
                             .setShortTitle(WireComplicationText.plainText("steps"))
@@ -3281,7 +3281,7 @@
             .hasSameSerializationAs(
                 WireComplicationDataBuilder(WireComplicationData.TYPE_NO_DATA)
                     .setPlaceholder(
-                        WireComplicationDataBuilder(WireComplicationData.TYPE_WEIGHTED_ELEMENTS)
+                        WireComplicationDataBuilder(WireComplicationData.EXP_TYPE_WEIGHTED_ELEMENTS)
                             .setElementWeights(floatArrayOf(0.5f, 1f, 2f))
                             .setElementColors(intArrayOf(Color.RED, Color.GREEN, Color.BLUE))
                             .setElementBackgroundColor(Color.TRANSPARENT)
@@ -3387,7 +3387,7 @@
             .hasSameSerializationAs(
                 WireComplicationDataBuilder(WireComplicationData.TYPE_NO_DATA)
                     .setPlaceholder(
-                        WireComplicationDataBuilder(WireComplicationData.TYPE_PROTO_LAYOUT)
+                        WireComplicationDataBuilder(WireComplicationData.EXP_TYPE_PROTO_LAYOUT)
                             .setAmbientLayout(ambientLayout)
                             .setInteractiveLayout(interactiveLayout)
                             .setLayoutResources(resources)
@@ -3446,7 +3446,7 @@
             .hasSameSerializationAs(
                 WireComplicationDataBuilder(WireComplicationData.TYPE_NO_DATA)
                     .setPlaceholder(
-                        WireComplicationDataBuilder(WireComplicationData.TYPE_LIST)
+                        WireComplicationDataBuilder(WireComplicationData.EXP_TYPE_LIST)
                             .setListEntryCollection(listOf(wireShortText, wireRangedValue))
                             .setListStyleHint(
                                 ListComplicationData.StyleHint.RowOfColumns.ordinal
@@ -3571,7 +3571,7 @@
                 "persistencePolicy=0, displayPolicy=0)"
         )
         assertThat(data.asWireComplicationData().toString()).isEqualTo(
-            "ComplicationData{mType=13, mFields=REDACTED}"
+            "ComplicationData{mType=-13, mFields=REDACTED}"
         )
     }
 
diff --git a/wear/watchface/watchface-style/api/current.ignore b/wear/watchface/watchface-style/api/current.ignore
deleted file mode 100644
index 82fca3a..0000000
--- a/wear/watchface/watchface-style/api/current.ignore
+++ /dev/null
@@ -1,3 +0,0 @@
-// Baseline format: 1.0
-RemovedMethod: androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotOverlay#ComplicationSlotOverlay(int, Boolean, androidx.wear.watchface.complications.ComplicationSlotBounds, Integer):
-    Removed constructor androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotOverlay(int,Boolean,androidx.wear.watchface.complications.ComplicationSlotBounds,Integer)
diff --git a/wear/watchface/watchface-style/api/restricted_current.ignore b/wear/watchface/watchface-style/api/restricted_current.ignore
index 5141bfe..1c52092 100644
--- a/wear/watchface/watchface-style/api/restricted_current.ignore
+++ b/wear/watchface/watchface-style/api/restricted_current.ignore
@@ -21,8 +21,6 @@
     Removed method androidx.wear.watchface.style.UserStyleSetting.BooleanUserStyleSetting.BooleanOption.toWireFormat()
 RemovedMethod: androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting#toWireFormat():
     Removed method androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.toWireFormat()
-RemovedMethod: androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotOverlay#ComplicationSlotOverlay(int, Boolean, androidx.wear.watchface.complications.ComplicationSlotBounds, Integer):
-    Removed constructor androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotOverlay(int,Boolean,androidx.wear.watchface.complications.ComplicationSlotBounds,Integer)
 RemovedMethod: androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption#toWireFormat():
     Removed method androidx.wear.watchface.style.UserStyleSetting.ComplicationSlotsUserStyleSetting.ComplicationSlotsOption.toWireFormat()
 RemovedMethod: androidx.wear.watchface.style.UserStyleSetting.CustomValueUserStyleSetting#toWireFormat():